publishport-opencli 1.8.5-pp.2 → 1.8.5-pp.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/LICENSE +24 -0
- package/cli-manifest.json +3116 -305
- package/clis/12306/auth.js +2 -36
- package/clis/12306/me.js +3 -67
- package/clis/12306/orders.js +3 -86
- package/clis/12306/passengers.js +4 -80
- package/clis/12306/price.js +1 -166
- package/clis/12306/stations.js +1 -66
- package/clis/12306/train.js +1 -91
- package/clis/12306/trains.js +1 -166
- package/clis/12306/utils.js +1 -272
- package/clis/1688/assets.js +2 -80
- package/clis/1688/auth.js +1 -46
- package/clis/1688/download.js +1 -77
- package/clis/1688/item.js +4 -171
- package/clis/1688/search.js +4 -185
- package/clis/1688/shared.js +6 -552
- package/clis/1688/store.js +5 -206
- package/clis/1point3acres/auth.js +2 -36
- package/clis/1point3acres/digest.js +1 -35
- package/clis/1point3acres/forum.js +1 -51
- package/clis/1point3acres/forums.js +1 -44
- package/clis/1point3acres/hot.js +1 -35
- package/clis/1point3acres/latest.js +1 -35
- package/clis/1point3acres/notifications.js +1 -64
- package/clis/1point3acres/search.js +1 -71
- package/clis/1point3acres/thread.js +2 -117
- package/clis/1point3acres/user.js +1 -77
- package/clis/1point3acres/utils.js +5 -246
- package/clis/36kr/article.js +3 -49
- package/clis/36kr/hot.js +2 -73
- package/clis/36kr/news.js +1 -52
- package/clis/36kr/search.js +2 -45
- package/clis/51job/company.js +2 -92
- package/clis/51job/detail.js +2 -76
- package/clis/51job/hot.js +1 -56
- package/clis/51job/search.js +1 -80
- package/clis/51job/utils.js +7 -288
- package/clis/_atlassian/shared.js +21 -577
- package/clis/_shared/article/auth.js +15 -123
- package/clis/_shared/article/douban-md2draft.js +4 -110
- package/clis/_shared/article/format.js +1 -71
- package/clis/_shared/article/images.js +7 -125
- package/clis/_shared/article/login.js +1 -90
- package/clis/_shared/article/page-runtime.js +148 -35
- package/clis/_shared/article/publish.js +29 -182
- package/clis/_shared/common.js +1 -32
- package/clis/_shared/content-guard.js +1 -0
- package/clis/_shared/desktop-commands.js +1 -112
- package/clis/_shared/search-adapter.js +1 -70
- package/clis/_shared/site-auth.js +1 -118
- package/clis/_shared/token-auth.js +2 -0
- package/clis/_shared/video-publish.js +62 -0
- package/clis/aibase/news.js +2 -81
- package/clis/amazon/auth.js +2 -36
- package/clis/amazon/bestsellers.js +1 -8
- package/clis/amazon/discussion.js +3 -106
- package/clis/amazon/movers-shakers.js +1 -8
- package/clis/amazon/new-releases.js +1 -8
- package/clis/amazon/offer.js +3 -115
- package/clis/amazon/product.js +5 -73
- package/clis/amazon/rankings.js +2 -161
- package/clis/amazon/search.js +2 -74
- package/clis/amazon/shared.js +6 -360
- package/clis/antigravity/_actions.js +14 -131
- package/clis/antigravity/audit-extras.js +10 -273
- package/clis/antigravity/delete.js +1 -60
- package/clis/antigravity/dump.js +1 -29
- package/clis/antigravity/extract-code.js +2 -17
- package/clis/antigravity/history.js +1 -26
- package/clis/antigravity/mark-read.js +1 -52
- package/clis/antigravity/model.js +6 -77
- package/clis/antigravity/new.js +2 -19
- package/clis/antigravity/read.js +2 -27
- package/clis/antigravity/rename.js +1 -33
- package/clis/antigravity/send.js +3 -28
- package/clis/antigravity/serve.js +18 -479
- package/clis/antigravity/status.js +1 -19
- package/clis/antigravity/storage.js +6 -360
- package/clis/antigravity/watch.js +2 -39
- package/clis/apple-podcasts/episodes.js +1 -29
- package/clis/apple-podcasts/search.js +1 -31
- package/clis/apple-podcasts/top.js +1 -45
- package/clis/apple-podcasts/utils.js +1 -30
- package/clis/archive/item.js +1 -92
- package/clis/archive/search.js +1 -115
- package/clis/archive/snapshots.js +1 -129
- package/clis/archive/wayback.js +1 -83
- package/clis/arxiv/author.js +1 -44
- package/clis/arxiv/paper.js +1 -22
- package/clis/arxiv/recent.js +1 -33
- package/clis/arxiv/search.js +1 -36
- package/clis/arxiv/utils.js +1 -112
- package/clis/autohome/brand.js +1 -108
- package/clis/autohome/score.js +1 -103
- package/clis/autohome/utils.js +1 -157
- package/clis/baidu-scholar/search.js +3 -27
- package/clis/baijiahao/article.js +1 -392
- package/clis/baijiahao/lists.js +1 -70
- package/clis/baijiahao/login.js +1 -15
- package/clis/baijiahao/publish.js +57 -0
- package/clis/baijiahao/stats.js +1 -0
- package/clis/baijiahao/whoami.js +1 -33
- package/clis/band/auth.js +2 -35
- package/clis/band/bands.js +2 -38
- package/clis/band/mentions.js +2 -124
- package/clis/band/post.js +4 -104
- package/clis/band/posts.js +3 -48
- package/clis/barchart/flow.js +4 -50
- package/clis/barchart/greeks.js +5 -125
- package/clis/barchart/options.js +5 -51
- package/clis/barchart/quote.js +3 -51
- package/clis/bbc/news.js +1 -42
- package/clis/bbc/topic.js +1 -57
- package/clis/bbc/utils.js +1 -79
- package/clis/bilibili/article.js +1 -393
- package/clis/bilibili/auth.js +1 -36
- package/clis/bilibili/categories.js +1 -56
- package/clis/bilibili/comment.js +1 -107
- package/clis/bilibili/comments.js +1 -136
- package/clis/bilibili/download.js +2 -173
- package/clis/bilibili/drafts.js +1 -60
- package/clis/bilibili/dynamic-post.js +3 -60
- package/clis/bilibili/dynamic.js +1 -34
- package/clis/bilibili/favorite.js +1 -47
- package/clis/bilibili/feed.js +2 -220
- package/clis/bilibili/follow.js +1 -140
- package/clis/bilibili/following.js +1 -44
- package/clis/bilibili/history.js +1 -45
- package/clis/bilibili/hot.js +2 -27
- package/clis/bilibili/me.js +1 -13
- package/clis/bilibili/partitions.js +1 -0
- package/clis/bilibili/ranking.js +1 -25
- package/clis/bilibili/search.js +1 -24
- package/clis/bilibili/stats.js +1 -0
- package/clis/bilibili/subtitle.js +3 -123
- package/clis/bilibili/summary.js +1 -167
- package/clis/bilibili/topics.js +1 -0
- package/clis/bilibili/unfollow.js +1 -121
- package/clis/bilibili/upload.js +1 -0
- package/clis/bilibili/user-videos.js +1 -39
- package/clis/bilibili/utils.js +7 -249
- package/clis/bilibili/video-drafts.js +1 -0
- package/clis/bilibili/video.js +1 -155
- package/clis/binance/asks.js +1 -22
- package/clis/binance/depth.js +1 -21
- package/clis/binance/gainers.js +1 -23
- package/clis/binance/klines.js +1 -22
- package/clis/binance/losers.js +1 -23
- package/clis/binance/pairs.js +1 -22
- package/clis/binance/price.js +1 -19
- package/clis/binance/prices.js +1 -20
- package/clis/binance/ticker.js +1 -22
- package/clis/binance/top.js +1 -22
- package/clis/binance/trades.js +1 -21
- package/clis/bloomberg/businessweek.js +4 -117
- package/clis/bloomberg/crypto.js +1 -18
- package/clis/bloomberg/economics.js +1 -18
- package/clis/bloomberg/feeds.js +1 -16
- package/clis/bloomberg/green.js +1 -18
- package/clis/bloomberg/industries.js +1 -18
- package/clis/bloomberg/main.js +1 -18
- package/clis/bloomberg/markets.js +1 -18
- package/clis/bloomberg/news.js +2 -51
- package/clis/bloomberg/opinions.js +1 -18
- package/clis/bloomberg/politics.js +1 -18
- package/clis/bloomberg/pursuits.js +1 -18
- package/clis/bloomberg/tech.js +1 -18
- package/clis/bloomberg/utils.js +17 -380
- package/clis/booking/search.js +2 -260
- package/clis/boss/auth.js +2 -36
- package/clis/boss/batchgreet.js +1 -61
- package/clis/boss/chatlist.js +1 -116
- package/clis/boss/chatmsg.js +1 -117
- package/clis/boss/detail.js +1 -63
- package/clis/boss/exchange.js +1 -46
- package/clis/boss/greet.js +1 -49
- package/clis/boss/invite.js +4 -64
- package/clis/boss/joblist.js +1 -31
- package/clis/boss/mark.js +1 -70
- package/clis/boss/recommend.js +1 -45
- package/clis/boss/resume.js +2 -62
- package/clis/boss/search.js +1 -197
- package/clis/boss/send.js +1 -44
- package/clis/boss/stats.js +1 -66
- package/clis/boss/utils.js +13 -320
- package/clis/brave/search.js +3 -60
- package/clis/chaoxing/assignments.js +1 -76
- package/clis/chaoxing/auth.js +2 -35
- package/clis/chaoxing/exams.js +1 -75
- package/clis/chaoxing/utils.js +9 -174
- package/clis/chatgpt/ask.js +1 -129
- package/clis/chatgpt/auth.js +2 -37
- package/clis/chatgpt/detail.js +1 -63
- package/clis/chatgpt/history.js +1 -39
- package/clis/chatgpt/image.js +1 -167
- package/clis/chatgpt/model.js +1 -31
- package/clis/chatgpt/new.js +1 -32
- package/clis/chatgpt/project-file-add.js +1 -74
- package/clis/chatgpt/project-list.js +1 -37
- package/clis/chatgpt/read.js +1 -44
- package/clis/chatgpt/send.js +1 -68
- package/clis/chatgpt/status.js +1 -29
- package/clis/chatgpt/utils.js +62 -1196
- package/clis/chatgpt-app/ask.js +1 -87
- package/clis/chatgpt-app/ax.js +9 -100
- package/clis/chatgpt-app/model.js +1 -25
- package/clis/chatgpt-app/new.js +1 -61
- package/clis/chatgpt-app/read.js +1 -32
- package/clis/chatgpt-app/send.js +1 -37
- package/clis/chatgpt-app/status.js +1 -26
- package/clis/chatwise/ask.js +1 -54
- package/clis/chatwise/export.js +2 -28
- package/clis/chatwise/history.js +2 -37
- package/clis/chatwise/model.js +6 -43
- package/clis/chatwise/new.js +1 -2
- package/clis/chatwise/read.js +2 -17
- package/clis/chatwise/screenshot.js +1 -2
- package/clis/chatwise/send.js +1 -28
- package/clis/chatwise/status.js +1 -2
- package/clis/chatwise/utils.js +8 -76
- package/clis/chess/analyze.js +1 -35
- package/clis/chess/game.js +1 -114
- package/clis/chess/games.js +1 -67
- package/clis/chess/stats.js +1 -32
- package/clis/chess/utils.js +1 -170
- package/clis/claude/ask.js +2 -142
- package/clis/claude/auth.js +2 -38
- package/clis/claude/detail.js +1 -38
- package/clis/claude/history.js +1 -33
- package/clis/claude/new.js +1 -29
- package/clis/claude/read.js +1 -27
- package/clis/claude/send.js +1 -48
- package/clis/claude/status.js +1 -26
- package/clis/claude/utils.js +23 -307
- package/clis/cnblogs/article.js +1 -308
- package/clis/cnblogs/login.js +1 -15
- package/clis/cnblogs/stats.js +37 -0
- package/clis/cnblogs/whoami.js +1 -27
- package/clis/cnki/search.js +3 -26
- package/clis/codex/_actions.js +3 -201
- package/clis/codex/archive.js +1 -37
- package/clis/codex/ask.js +6 -61
- package/clis/codex/dump.js +1 -2
- package/clis/codex/export.js +2 -28
- package/clis/codex/extract-diff.js +2 -19
- package/clis/codex/history.js +1 -27
- package/clis/codex/model.js +8 -154
- package/clis/codex/new.js +1 -2
- package/clis/codex/pin.js +1 -30
- package/clis/codex/projects.js +1 -28
- package/clis/codex/read.js +2 -27
- package/clis/codex/rename.js +4 -56
- package/clis/codex/screenshot.js +1 -2
- package/clis/codex/send.js +3 -38
- package/clis/codex/sidebar.js +1 -356
- package/clis/codex/status.js +1 -2
- package/clis/coingecko/categories.js +1 -75
- package/clis/coingecko/coin.js +1 -107
- package/clis/coingecko/derivatives.js +1 -84
- package/clis/coingecko/exchanges.js +1 -74
- package/clis/coingecko/global.js +1 -71
- package/clis/coingecko/top.js +1 -64
- package/clis/coingecko/trending.js +1 -55
- package/clis/confluence/create.js +1 -39
- package/clis/confluence/page.js +1 -23
- package/clis/confluence/search.js +1 -34
- package/clis/confluence/shared.js +1 -173
- package/clis/confluence/update.js +1 -38
- package/clis/coupang/add-to-cart.js +3 -66
- package/clis/coupang/auth.js +2 -34
- package/clis/coupang/product.js +3 -99
- package/clis/coupang/search.js +8 -97
- package/clis/coupang/utils.js +1 -316
- package/clis/crates/crate.js +1 -62
- package/clis/crates/search.js +1 -44
- package/clis/crates/utils.js +1 -72
- package/clis/csdn/article.js +19 -373
- package/clis/csdn/columns.js +1 -41
- package/clis/csdn/login.js +1 -17
- package/clis/csdn/stats.js +71 -0
- package/clis/csdn/whoami.js +1 -37
- package/clis/cto51/article.js +1 -271
- package/clis/cto51/whoami.js +1 -28
- package/clis/ctrip/auth.js +1 -50
- package/clis/ctrip/flight.js +2 -121
- package/clis/ctrip/hotel-search.js +3 -111
- package/clis/ctrip/hotel-suggest.js +1 -45
- package/clis/ctrip/search.js +1 -41
- package/clis/ctrip/utils.js +6 -360
- package/clis/cursor/ask.js +5 -57
- package/clis/cursor/composer.js +2 -33
- package/clis/cursor/dump.js +1 -2
- package/clis/cursor/export.js +3 -32
- package/clis/cursor/extract-code.js +2 -20
- package/clis/cursor/history.js +2 -20
- package/clis/cursor/model.js +4 -40
- package/clis/cursor/new.js +1 -2
- package/clis/cursor/read.js +2 -20
- package/clis/cursor/screenshot.js +1 -2
- package/clis/cursor/send.js +2 -31
- package/clis/cursor/status.js +1 -2
- package/clis/dblp/author.js +1 -133
- package/clis/dblp/paper.js +1 -40
- package/clis/dblp/search.js +1 -45
- package/clis/dblp/utils.js +1 -290
- package/clis/dblp/venue.js +1 -64
- package/clis/deepseek/ask.js +1 -158
- package/clis/deepseek/auth.js +2 -34
- package/clis/deepseek/detail.js +1 -46
- package/clis/deepseek/history.js +1 -27
- package/clis/deepseek/new.js +1 -33
- package/clis/deepseek/read.js +1 -25
- package/clis/deepseek/send.js +7 -97
- package/clis/deepseek/status.js +1 -26
- package/clis/deepseek/utils.js +25 -310
- package/clis/defillama/protocol.js +1 -84
- package/clis/defillama/protocols.js +1 -55
- package/clis/defillama/utils.js +1 -99
- package/clis/devto/auth.js +9 -0
- package/clis/devto/latest.js +1 -74
- package/clis/devto/publish.js +17 -0
- package/clis/devto/read.js +2 -102
- package/clis/devto/tag.js +1 -36
- package/clis/devto/top.js +1 -30
- package/clis/devto/user.js +1 -35
- package/clis/dianping/auth.js +2 -40
- package/clis/dianping/cityResolver.js +1 -185
- package/clis/dianping/search.js +1 -157
- package/clis/dianping/shop.js +1 -173
- package/clis/dianping/utils.js +1 -157
- package/clis/dictionary/examples.js +1 -28
- package/clis/dictionary/search.js +1 -30
- package/clis/dictionary/synonyms.js +1 -28
- package/clis/discord-app/channels.js +1 -26
- package/clis/discord-app/delete.js +3 -52
- package/clis/discord-app/goto.js +1 -38
- package/clis/discord-app/members.js +2 -20
- package/clis/discord-app/read.js +1 -42
- package/clis/discord-app/search.js +4 -42
- package/clis/discord-app/send.js +3 -21
- package/clis/discord-app/servers.js +1 -26
- package/clis/discord-app/status.js +1 -17
- package/clis/discord-app/thread-read.js +1 -45
- package/clis/discord-app/threads.js +1 -37
- package/clis/discord-app/utils.js +8 -392
- package/clis/dockerhub/image.js +1 -52
- package/clis/dockerhub/search.js +1 -47
- package/clis/dockerhub/utils.js +1 -100
- package/clis/dongchedi/koubei.js +1 -85
- package/clis/dongchedi/models.js +1 -91
- package/clis/dongchedi/score.js +1 -83
- package/clis/dongchedi/search.js +1 -83
- package/clis/dongchedi/series.js +1 -87
- package/clis/dongchedi/specs.js +1 -115
- package/clis/dongchedi/utils.js +1 -180
- package/clis/douban/article.js +51 -199
- package/clis/douban/auth.js +2 -39
- package/clis/douban/book-hot.js +1 -15
- package/clis/douban/download.js +1 -68
- package/clis/douban/marks.js +3 -60
- package/clis/douban/movie-hot.js +1 -15
- package/clis/douban/photos.js +1 -35
- package/clis/douban/reviews.js +3 -57
- package/clis/douban/search.js +1 -18
- package/clis/douban/subject.js +1 -46
- package/clis/douban/top250.js +2 -20
- package/clis/douban/utils.js +24 -337
- package/clis/doubao/ask.js +1 -40
- package/clis/doubao/auth.js +3 -41
- package/clis/doubao/detail.js +1 -35
- package/clis/doubao/history.js +1 -30
- package/clis/doubao/meeting-summary.js +1 -41
- package/clis/doubao/meeting-transcript.js +1 -38
- package/clis/doubao/new.js +1 -22
- package/clis/doubao/read.js +1 -21
- package/clis/doubao/send.js +1 -24
- package/clis/doubao/status.js +1 -26
- package/clis/doubao/utils.js +40 -492
- package/clis/doubao-app/ask.js +1 -54
- package/clis/doubao-app/dump.js +1 -25
- package/clis/doubao-app/new.js +1 -21
- package/clis/doubao-app/read.js +1 -19
- package/clis/doubao-app/screenshot.js +1 -19
- package/clis/doubao-app/send.js +1 -28
- package/clis/doubao-app/status.js +1 -17
- package/clis/doubao-app/utils.js +6 -52
- package/clis/douyin/_shared/browser-fetch.js +7 -45
- package/clis/douyin/_shared/creation-id.js +1 -5
- package/clis/douyin/_shared/evaluate-result.js +1 -16
- package/clis/douyin/_shared/imagex-upload.js +1 -53
- package/clis/douyin/_shared/public-api.js +1 -29
- package/clis/douyin/_shared/sts2.js +1 -21
- package/clis/douyin/_shared/text-extra.js +1 -15
- package/clis/douyin/_shared/timing.js +1 -22
- package/clis/douyin/_shared/tos-upload.js +5 -331
- package/clis/douyin/_shared/transcode.js +1 -45
- package/clis/douyin/_shared/types.js +1 -1
- package/clis/douyin/_shared/vod-upload.js +5 -212
- package/clis/douyin/activities.js +1 -23
- package/clis/douyin/auth.js +1 -39
- package/clis/douyin/collections.js +1 -23
- package/clis/douyin/delete.js +4 -88
- package/clis/douyin/draft.js +18 -337
- package/clis/douyin/drafts.js +1 -24
- package/clis/douyin/hashtag.js +1 -114
- package/clis/douyin/location.js +1 -25
- package/clis/douyin/profile.js +1 -29
- package/clis/douyin/publish-image.js +62 -0
- package/clis/douyin/publish.js +10 -337
- package/clis/douyin/search.js +3 -260
- package/clis/douyin/stats.js +1 -28
- package/clis/douyin/update.js +1 -32
- package/clis/douyin/user-videos.js +1 -82
- package/clis/douyin/videos.js +1 -52
- package/clis/duckduckgo/search.js +1 -131
- package/clis/duckduckgo/suggest.js +1 -45
- package/clis/eastmoney/_secid.js +1 -78
- package/clis/eastmoney/announcement.js +1 -53
- package/clis/eastmoney/article.js +1 -340
- package/clis/eastmoney/convertible.js +1 -74
- package/clis/eastmoney/etf.js +1 -66
- package/clis/eastmoney/holders.js +1 -79
- package/clis/eastmoney/hot-rank.js +2 -23
- package/clis/eastmoney/index-board.js +1 -97
- package/clis/eastmoney/kline.js +1 -88
- package/clis/eastmoney/kuaixun.js +1 -55
- package/clis/eastmoney/longhu.js +1 -68
- package/clis/eastmoney/money-flow.js +1 -79
- package/clis/eastmoney/northbound.js +1 -58
- package/clis/eastmoney/quote.js +1 -108
- package/clis/eastmoney/rank.js +1 -95
- package/clis/eastmoney/sectors.js +1 -77
- package/clis/eastmoney/whoami.js +1 -18
- package/clis/endoflife/product.js +1 -55
- package/clis/endoflife/utils.js +1 -89
- package/clis/facebook/add-friend.js +2 -22
- package/clis/facebook/auth.js +1 -43
- package/clis/facebook/events.js +2 -17
- package/clis/facebook/feed.js +3 -99
- package/clis/facebook/friends.js +2 -17
- package/clis/facebook/groups.js +2 -17
- package/clis/facebook/join-group.js +2 -22
- package/clis/facebook/marketplace-inbox.js +2 -52
- package/clis/facebook/marketplace-listings.js +2 -53
- package/clis/facebook/memories.js +2 -17
- package/clis/facebook/notifications.js +3 -305
- package/clis/facebook/profile.js +2 -22
- package/clis/facebook/search.js +2 -19
- package/clis/flathub/app.js +1 -71
- package/clis/flathub/search.js +1 -80
- package/clis/flathub/utils.js +1 -114
- package/clis/flomo/auth.js +2 -35
- package/clis/flomo/memos.js +2 -217
- package/clis/gemini/ask.js +1 -51
- package/clis/gemini/auth.js +2 -36
- package/clis/gemini/deep-research-result.js +4 -96
- package/clis/gemini/deep-research.js +1 -103
- package/clis/gemini/detail.js +1 -82
- package/clis/gemini/history.js +1 -70
- package/clis/gemini/image.js +2 -110
- package/clis/gemini/new.js +1 -22
- package/clis/gemini/read.js +1 -36
- package/clis/gemini/status.js +1 -32
- package/clis/gemini/utils.js +51 -873
- package/clis/geogebra/add-circle.js +1 -46
- package/clis/geogebra/add-line.js +1 -35
- package/clis/geogebra/add-point.js +1 -27
- package/clis/geogebra/add-polygon.js +1 -25
- package/clis/geogebra/eval.js +1 -35
- package/clis/geogebra/hexagon.js +1 -62
- package/clis/geogebra/info.js +3 -62
- package/clis/geogebra/list.js +1 -35
- package/clis/geogebra/triangle.js +1 -60
- package/clis/geogebra/utils.js +11 -183
- package/clis/ghost/publish.js +1 -0
- package/clis/ghost/shared.js +1 -0
- package/clis/ghost/whoami.js +1 -0
- package/clis/gitee/auth.js +2 -31
- package/clis/gitee/index.js +1 -3
- package/clis/gitee/search.js +1 -137
- package/clis/gitee/trending.js +3 -331
- package/clis/gitee/user.js +2 -131
- package/clis/github/auth.js +2 -39
- package/clis/github-trending/repos.js +1 -168
- package/clis/google/news.js +1 -59
- package/clis/google/search.js +3 -51
- package/clis/google/suggest.js +1 -35
- package/clis/google/trends.js +1 -39
- package/clis/google/utils.js +1 -23
- package/clis/google-scholar/cite.js +8 -62
- package/clis/google-scholar/profile.js +4 -60
- package/clis/google-scholar/search.js +3 -41
- package/clis/goproxy/module.js +1 -47
- package/clis/goproxy/utils.js +1 -165
- package/clis/goproxy/versions.js +1 -59
- package/clis/gov-law/recent.js +1 -22
- package/clis/gov-law/search.js +3 -30
- package/clis/gov-law/shared.js +5 -27
- package/clis/gov-policy/recent.js +2 -84
- package/clis/gov-policy/search.js +2 -85
- package/clis/gov-policy/utils.js +1 -54
- package/clis/grok/ask.js +1 -77
- package/clis/grok/auth.js +2 -37
- package/clis/grok/delete.js +1 -54
- package/clis/grok/detail.js +1 -60
- package/clis/grok/export-all.js +7 -246
- package/clis/grok/export-utils.js +1 -94
- package/clis/grok/export.js +4 -87
- package/clis/grok/history.js +1 -48
- package/clis/grok/image.js +8 -232
- package/clis/grok/new.js +1 -20
- package/clis/grok/pin.js +1 -68
- package/clis/grok/read.js +1 -39
- package/clis/grok/send.js +1 -50
- package/clis/grok/status.js +1 -41
- package/clis/grok/utils.js +21 -324
- package/clis/guazi/browse.js +1 -95
- package/clis/guazi/car.js +1 -110
- package/clis/guazi/utils.js +1 -133
- package/clis/hackernews/ask.js +1 -31
- package/clis/hackernews/best.js +1 -31
- package/clis/hackernews/jobs.js +1 -29
- package/clis/hackernews/new.js +1 -31
- package/clis/hackernews/read.js +11 -188
- package/clis/hackernews/search.js +1 -38
- package/clis/hackernews/show.js +1 -31
- package/clis/hackernews/top.js +1 -31
- package/clis/hackernews/user.js +1 -23
- package/clis/hashnode/auth.js +11 -0
- package/clis/hashnode/publish.js +92 -0
- package/clis/hf/auth.js +2 -31
- package/clis/hf/datasets.js +1 -88
- package/clis/hf/models.js +1 -91
- package/clis/hf/paper.js +1 -79
- package/clis/hf/spaces.js +1 -101
- package/clis/hf/top.js +1 -121
- package/clis/homebrew/cask.js +1 -39
- package/clis/homebrew/formula.js +1 -41
- package/clis/homebrew/popular.js +1 -54
- package/clis/homebrew/utils.js +1 -100
- package/clis/huodongxing/events.js +1 -322
- package/clis/hupu/auth.js +2 -35
- package/clis/hupu/detail.js +7 -72
- package/clis/hupu/hot.js +3 -152
- package/clis/hupu/like.js +1 -76
- package/clis/hupu/mentions.js +6 -75
- package/clis/hupu/reply.js +1 -72
- package/clis/hupu/search.js +1 -60
- package/clis/hupu/unlike.js +1 -76
- package/clis/hupu/utils.js +10 -86
- package/clis/imdb/person.js +2 -66
- package/clis/imdb/reviews.js +3 -52
- package/clis/imdb/search.js +2 -51
- package/clis/imdb/title.js +1 -94
- package/clis/imdb/top.js +1 -54
- package/clis/imdb/trending.js +1 -53
- package/clis/imdb/utils.js +13 -136
- package/clis/imooc/article.js +1 -192
- package/clis/imooc/login.js +1 -15
- package/clis/imooc/whoami.js +1 -33
- package/clis/indeed/job.js +2 -68
- package/clis/indeed/search.js +2 -75
- package/clis/indeed/utils.js +1 -152
- package/clis/instagram/_shared/private-publish.js +4 -959
- package/clis/instagram/_shared/protocol-capture.js +9 -111
- package/clis/instagram/_shared/runtime-info.js +2 -50
- package/clis/instagram/auth.js +2 -37
- package/clis/instagram/collection-create.js +2 -22
- package/clis/instagram/collection-delete.js +2 -22
- package/clis/instagram/comment.js +2 -24
- package/clis/instagram/detail.js +2 -150
- package/clis/instagram/download.js +5 -149
- package/clis/instagram/explore.js +2 -17
- package/clis/instagram/follow.js +2 -22
- package/clis/instagram/followers.js +2 -18
- package/clis/instagram/following.js +2 -18
- package/clis/instagram/like.js +2 -23
- package/clis/instagram/note.js +8 -69
- package/clis/instagram/post.js +35 -814
- package/clis/instagram/profile.js +2 -17
- package/clis/instagram/reel.js +18 -393
- package/clis/instagram/save.js +2 -23
- package/clis/instagram/saved.js +2 -18
- package/clis/instagram/search.js +2 -18
- package/clis/instagram/story.js +4 -99
- package/clis/instagram/unfollow.js +2 -22
- package/clis/instagram/unlike.js +2 -23
- package/clis/instagram/unsave.js +2 -23
- package/clis/instagram/user.js +1 -476
- package/clis/jd/add-cart.js +3 -53
- package/clis/jd/auth.js +2 -36
- package/clis/jd/cart.js +2 -23
- package/clis/jd/detail.js +4 -25
- package/clis/jd/item.js +65 -697
- package/clis/jd/reviews.js +3 -27
- package/clis/jd/search.js +3 -27
- package/clis/jianshu/article.js +1 -0
- package/clis/jianshu/login.js +1 -0
- package/clis/jianshu/notebooks.js +1 -0
- package/clis/jianshu/whoami.js +1 -0
- package/clis/jianyu/auth.js +3 -37
- package/clis/jianyu/detail.js +1 -21
- package/clis/jianyu/search.js +6 -567
- package/clis/jianyu/shared/china-bid-search.js +4 -83
- package/clis/jianyu/shared/procurement-contract.js +1 -324
- package/clis/jianyu/shared/procurement-detail.js +2 -91
- package/clis/jike/auth.js +2 -67
- package/clis/jike/comment.js +6 -60
- package/clis/jike/create.js +6 -61
- package/clis/jike/feed.js +3 -39
- package/clis/jike/like.js +3 -41
- package/clis/jike/notifications.js +3 -57
- package/clis/jike/post.js +2 -41
- package/clis/jike/repost.js +10 -95
- package/clis/jike/search.js +3 -42
- package/clis/jike/topic.js +2 -47
- package/clis/jike/user.js +2 -48
- package/clis/jike/utils.js +2 -12
- package/clis/jimeng/auth.js +2 -35
- package/clis/jimeng/generate.js +2 -33
- package/clis/jimeng/history.js +2 -27
- package/clis/jimeng/new.js +2 -20
- package/clis/jimeng/workspaces.js +2 -22
- package/clis/jira/attachments.js +1 -28
- package/clis/jira/comments.js +1 -28
- package/clis/jira/issue.js +1 -28
- package/clis/jira/links.js +1 -28
- package/clis/jira/search.js +1 -47
- package/clis/jira/shared.js +1 -256
- package/clis/juejin/article.js +5 -503
- package/clis/juejin/categories.js +1 -36
- package/clis/juejin/hot.js +1 -37
- package/clis/juejin/login.js +1 -15
- package/clis/juejin/recommend.js +1 -61
- package/clis/juejin/stats.js +53 -0
- package/clis/juejin/tags.js +1 -37
- package/clis/juejin/utils.js +1 -199
- package/clis/juejin/whoami.js +1 -34
- package/clis/ke/auth.js +2 -34
- package/clis/ke/chengjiao.js +2 -35
- package/clis/ke/ershoufang.js +2 -53
- package/clis/ke/utils.js +4 -87
- package/clis/ke/xiaoqu.js +2 -35
- package/clis/ke/zufang.js +3 -48
- package/clis/kimi/_utils.js +9 -81
- package/clis/kimi/audit-extras.js +14 -218
- package/clis/kimi/auth.js +3 -43
- package/clis/kimi/chat.js +15 -408
- package/clis/kimi/storage.js +5 -160
- package/clis/kimi/ui.js +14 -239
- package/clis/kimi/usage.js +5 -98
- package/clis/kuaishou/auth.js +1 -0
- package/clis/kuaishou/publish.js +53 -0
- package/clis/lesswrong/_helpers.js +5 -71
- package/clis/lesswrong/comments.js +5 -61
- package/clis/lesswrong/curated.js +3 -29
- package/clis/lesswrong/frontpage.js +3 -29
- package/clis/lesswrong/new.js +3 -29
- package/clis/lesswrong/read.js +3 -44
- package/clis/lesswrong/sequences.js +3 -26
- package/clis/lesswrong/shortform.js +3 -29
- package/clis/lesswrong/tag.js +3 -44
- package/clis/lesswrong/tags.js +3 -26
- package/clis/lesswrong/top-month.js +3 -29
- package/clis/lesswrong/top-week.js +3 -29
- package/clis/lesswrong/top-year.js +3 -29
- package/clis/lesswrong/top.js +3 -29
- package/clis/lesswrong/user-posts.js +3 -40
- package/clis/lesswrong/user.js +3 -43
- package/clis/lichess/top.js +1 -46
- package/clis/lichess/user.js +1 -91
- package/clis/lichess/utils.js +1 -97
- package/clis/linkedin/auth.js +2 -37
- package/clis/linkedin/connect.js +11 -291
- package/clis/linkedin/inbox.js +1 -234
- package/clis/linkedin/job-detail.js +4 -167
- package/clis/linkedin/jobs-preferences.js +3 -82
- package/clis/linkedin/people-search.js +2 -301
- package/clis/linkedin/post-analytics.js +1 -74
- package/clis/linkedin/posts-core.js +2 -105
- package/clis/linkedin/posts.js +1 -22
- package/clis/linkedin/profile-analytics.js +2 -95
- package/clis/linkedin/profile-experience.js +6 -380
- package/clis/linkedin/profile-projects.js +4 -185
- package/clis/linkedin/profile-read.js +3 -90
- package/clis/linkedin/safe-send.js +8 -313
- package/clis/linkedin/salesnav-inbox.js +5 -194
- package/clis/linkedin/salesnav-message.js +10 -337
- package/clis/linkedin/salesnav-search.js +4 -175
- package/clis/linkedin/salesnav-thread.js +1 -212
- package/clis/linkedin/search.js +10 -371
- package/clis/linkedin/sent-invitations.js +2 -51
- package/clis/linkedin/services-read.js +6 -162
- package/clis/linkedin/shared.js +2 -116
- package/clis/linkedin/thread-snapshot.js +4 -130
- package/clis/linkedin/timeline.js +2 -110
- package/clis/linkedin-learning/auth.js +2 -37
- package/clis/linkedin-learning/course.js +4 -125
- package/clis/linkedin-learning/search.js +4 -142
- package/clis/linkedin-learning/trending.js +4 -120
- package/clis/linux-do/auth.js +2 -37
- package/clis/linux-do/categories.js +1 -50
- package/clis/linux-do/feed.js +4 -380
- package/clis/linux-do/search.js +1 -29
- package/clis/linux-do/tags.js +1 -28
- package/clis/linux-do/topic-content.js +9 -136
- package/clis/linux-do/topic.js +1 -53
- package/clis/linux-do/user-posts.js +1 -57
- package/clis/linux-do/user-topics.js +1 -37
- package/clis/lobsters/active.js +1 -29
- package/clis/lobsters/domain.js +1 -92
- package/clis/lobsters/hot.js +1 -29
- package/clis/lobsters/newest.js +1 -29
- package/clis/lobsters/read.js +11 -196
- package/clis/lobsters/tag.js +1 -35
- package/clis/maimai/auth.js +2 -30
- package/clis/maimai/search-talents.js +4 -159
- package/clis/manus/_utils.js +2 -107
- package/clis/manus/auth.js +2 -36
- package/clis/manus/connectors.js +3 -39
- package/clis/manus/credits.js +3 -38
- package/clis/manus/list.js +4 -63
- package/clis/manus/read.js +3 -59
- package/clis/manus/skills.js +3 -60
- package/clis/manus/status.js +3 -38
- package/clis/maven/artifact.js +1 -49
- package/clis/maven/search.js +1 -51
- package/clis/maven/utils.js +1 -110
- package/clis/mdn/search.js +1 -97
- package/clis/medium/article.js +12 -0
- package/clis/medium/feed.js +1 -16
- package/clis/medium/login.js +1 -0
- package/clis/medium/search.js +1 -16
- package/clis/medium/tag.js +1 -135
- package/clis/medium/user.js +1 -16
- package/clis/medium/utils.js +3 -20
- package/clis/medium/whoami.js +1 -0
- package/clis/mubu/doc.js +1 -41
- package/clis/mubu/docs.js +1 -44
- package/clis/mubu/notes.js +1 -245
- package/clis/mubu/recent.js +1 -28
- package/clis/mubu/search.js +1 -63
- package/clis/mubu/utils.js +16 -289
- package/clis/note/auth.js +12 -0
- package/clis/note/note-utils.js +2 -0
- package/clis/note/publish.js +17 -0
- package/clis/notebooklm/add-source.js +8 -231
- package/clis/notebooklm/auth.js +2 -36
- package/clis/notebooklm/create.js +1 -76
- package/clis/notebooklm/current.js +1 -28
- package/clis/notebooklm/generate-audio.js +1 -91
- package/clis/notebooklm/generate-slides.js +1 -106
- package/clis/notebooklm/get.js +1 -37
- package/clis/notebooklm/history.js +1 -25
- package/clis/notebooklm/list.js +1 -36
- package/clis/notebooklm/note-list.js +1 -28
- package/clis/notebooklm/notes-get.js +1 -47
- package/clis/notebooklm/open.js +1 -42
- package/clis/notebooklm/rpc.js +8 -175
- package/clis/notebooklm/shared.js +1 -3
- package/clis/notebooklm/source-fulltext.js +1 -44
- package/clis/notebooklm/source-get.js +1 -40
- package/clis/notebooklm/source-guide.js +1 -44
- package/clis/notebooklm/source-list.js +1 -30
- package/clis/notebooklm/status.js +1 -31
- package/clis/notebooklm/summary.js +1 -30
- package/clis/notebooklm/utils.js +10 -652
- package/clis/notebooklm/write-note.js +1 -103
- package/clis/nowcoder/auth.js +2 -43
- package/clis/nowcoder/comment.js +1 -0
- package/clis/nowcoder/comments.js +1 -0
- package/clis/nowcoder/companies.js +1 -24
- package/clis/nowcoder/creators.js +1 -28
- package/clis/nowcoder/delete.js +1 -0
- package/clis/nowcoder/detail.js +2 -18
- package/clis/nowcoder/dm-list.js +1 -0
- package/clis/nowcoder/dm-read.js +1 -0
- package/clis/nowcoder/dm-send.js +1 -0
- package/clis/nowcoder/drafts.js +1 -0
- package/clis/nowcoder/experience.js +2 -21
- package/clis/nowcoder/hot.js +1 -25
- package/clis/nowcoder/inbox.js +1 -0
- package/clis/nowcoder/jobs.js +1 -22
- package/clis/nowcoder/like.js +1 -0
- package/clis/nowcoder/my.js +1 -0
- package/clis/nowcoder/notifications.js +2 -16
- package/clis/nowcoder/papers.js +2 -21
- package/clis/nowcoder/post.js +1 -0
- package/clis/nowcoder/practice.js +2 -19
- package/clis/nowcoder/recommend.js +1 -31
- package/clis/nowcoder/referral.js +2 -21
- package/clis/nowcoder/salary.js +2 -21
- package/clis/nowcoder/search.js +2 -21
- package/clis/nowcoder/suggest.js +2 -19
- package/clis/nowcoder/topics.js +1 -28
- package/clis/nowcoder/trending.js +1 -26
- package/clis/nowcoder/utils.js +68 -0
- package/clis/npm/downloads.js +1 -59
- package/clis/npm/package.js +1 -70
- package/clis/npm/search.js +1 -49
- package/clis/npm/utils.js +1 -76
- package/clis/nuget/package.js +1 -101
- package/clis/nuget/search.js +1 -69
- package/clis/nuget/utils.js +1 -87
- package/clis/nvd/cve.js +1 -121
- package/clis/oeis/search.js +1 -63
- package/clis/oeis/sequence.js +1 -71
- package/clis/oeis/utils.js +1 -88
- package/clis/ones/common.js +6 -127
- package/clis/ones/enrich-tasks.js +1 -37
- package/clis/ones/login.js +2 -81
- package/clis/ones/logout.js +1 -18
- package/clis/ones/me.js +1 -31
- package/clis/ones/my-tasks.js +1 -121
- package/clis/ones/resolve-labels.js +1 -64
- package/clis/ones/task-helpers.js +1 -212
- package/clis/ones/task.js +1 -67
- package/clis/ones/tasks.js +1 -80
- package/clis/ones/token-info.js +1 -43
- package/clis/ones/worklog.js +7 -261
- package/clis/openalex/search.js +1 -69
- package/clis/openalex/utils.js +1 -160
- package/clis/openalex/work.js +1 -65
- package/clis/openfda/drug-label.js +1 -74
- package/clis/openfda/food-recall.js +1 -65
- package/clis/openfda/utils.js +1 -67
- package/clis/openreview/author.js +1 -58
- package/clis/openreview/paper.js +1 -43
- package/clis/openreview/reviews.js +3 -130
- package/clis/openreview/search.js +1 -46
- package/clis/openreview/utils.js +1 -172
- package/clis/openreview/venue.js +1 -63
- package/clis/oschina/article.js +1 -237
- package/clis/oschina/catalogs.js +1 -31
- package/clis/oschina/login.js +1 -16
- package/clis/oschina/stats.js +54 -0
- package/clis/oschina/whoami.js +1 -35
- package/clis/osv/query.js +1 -72
- package/clis/osv/utils.js +1 -169
- package/clis/osv/vulnerability.js +1 -54
- package/clis/packagist/package.js +1 -49
- package/clis/packagist/search.js +1 -43
- package/clis/packagist/utils.js +1 -113
- package/clis/paperreview/feedback.js +1 -53
- package/clis/paperreview/review.js +1 -38
- package/clis/paperreview/submit.js +1 -86
- package/clis/paperreview/utils.js +1 -197
- package/clis/pinterest/api.js +1 -0
- package/clis/pinterest/auth.js +1 -0
- package/clis/pinterest/boards.js +1 -0
- package/clis/pinterest/client.js +20 -0
- package/clis/pinterest/publish.js +13 -0
- package/clis/pixiv/auth.js +2 -40
- package/clis/pixiv/detail.js +1 -66
- package/clis/pixiv/download.js +1 -82
- package/clis/pixiv/illusts.js +1 -66
- package/clis/pixiv/ranking.js +2 -36
- package/clis/pixiv/search.js +1 -44
- package/clis/pixiv/user.js +1 -59
- package/clis/pixiv/utils.js +3 -83
- package/clis/powerchina/auth.js +2 -37
- package/clis/powerchina/search.js +1 -251
- package/clis/producthunt/browse.js +2 -48
- package/clis/producthunt/hot.js +2 -49
- package/clis/producthunt/posts.js +1 -29
- package/clis/producthunt/today.js +1 -36
- package/clis/producthunt/utils.js +1 -99
- package/clis/pubmed/article.js +1 -55
- package/clis/pubmed/author.js +1 -64
- package/clis/pubmed/citations.js +1 -36
- package/clis/pubmed/clinical-trial.js +1 -59
- package/clis/pubmed/journal.js +1 -59
- package/clis/pubmed/mesh.js +1 -47
- package/clis/pubmed/related.js +1 -45
- package/clis/pubmed/review.js +1 -58
- package/clis/pubmed/search.js +1 -75
- package/clis/pubmed/utils.js +1 -325
- package/clis/pypi/downloads.js +1 -66
- package/clis/pypi/package.js +1 -79
- package/clis/pypi/utils.js +1 -55
- package/clis/qiita/auth.js +1 -0
- package/clis/qiita/gql.js +32 -0
- package/clis/qiita/publish.js +7 -0
- package/clis/qoder/_utils.js +18 -96
- package/clis/qoder/composer.js +1 -45
- package/clis/qoder/history.js +3 -27
- package/clis/qoder/quest.js +1 -147
- package/clis/qoder/read.js +1 -29
- package/clis/qoder/status.js +1 -21
- package/clis/qoder/ui.js +14 -287
- package/clis/quark/auth.js +2 -33
- package/clis/quark/ls.js +1 -64
- package/clis/quark/mkdir.js +1 -37
- package/clis/quark/mv.js +1 -54
- package/clis/quark/rename.js +1 -27
- package/clis/quark/rm.js +1 -25
- package/clis/quark/save.js +1 -81
- package/clis/quark/share-tree.js +1 -46
- package/clis/quark/utils.js +4 -137
- package/clis/qwen/ask.js +1 -104
- package/clis/qwen/auth.js +3 -42
- package/clis/qwen/detail.js +1 -62
- package/clis/qwen/history.js +1 -61
- package/clis/qwen/image.js +5 -153
- package/clis/qwen/new.js +1 -23
- package/clis/qwen/read.js +1 -41
- package/clis/qwen/send.js +1 -55
- package/clis/qwen/status.js +1 -37
- package/clis/qwen/utils.js +16 -292
- package/clis/reddit/auth.js +2 -37
- package/clis/reddit/comment.js +4 -26
- package/clis/reddit/frontpage.js +2 -32
- package/clis/reddit/home.js +3 -117
- package/clis/reddit/hot.js +2 -37
- package/clis/reddit/popular.js +2 -35
- package/clis/reddit/read.js +10 -200
- package/clis/reddit/reply.js +4 -130
- package/clis/reddit/save.js +4 -26
- package/clis/reddit/saved.js +3 -29
- package/clis/reddit/search.js +2 -53
- package/clis/reddit/subreddit-info.js +3 -90
- package/clis/reddit/subreddit.js +2 -47
- package/clis/reddit/subscribe.js +4 -26
- package/clis/reddit/subscribed.js +4 -101
- package/clis/reddit/upvote.js +4 -26
- package/clis/reddit/upvoted.js +3 -29
- package/clis/reddit/user-comments.js +2 -27
- package/clis/reddit/user-posts.js +2 -28
- package/clis/reddit/user.js +2 -20
- package/clis/reddit/whoami.js +2 -66
- package/clis/rednote/auth.js +2 -35
- package/clis/rednote/comments.js +1 -85
- package/clis/rednote/download.js +1 -59
- package/clis/rednote/feed.js +1 -27
- package/clis/rednote/note.js +1 -68
- package/clis/rednote/notifications.js +3 -75
- package/clis/rednote/search.js +2 -77
- package/clis/rednote/user.js +1 -55
- package/clis/rest-countries/country.js +1 -65
- package/clis/rest-countries/region.js +1 -64
- package/clis/rest-countries/utils.js +1 -126
- package/clis/reuters/article-detail.js +1 -53
- package/clis/reuters/auth.js +3 -31
- package/clis/reuters/search.js +1 -63
- package/clis/reuters/utils.js +5 -114
- package/clis/rfc/rfc.js +1 -52
- package/clis/rfc/utils.js +1 -72
- package/clis/rubygems/gem.js +1 -42
- package/clis/rubygems/search.js +1 -47
- package/clis/rubygems/utils.js +1 -86
- package/clis/segmentfault/_signed-request.js +43 -0
- package/clis/segmentfault/article.js +3 -406
- package/clis/segmentfault/channels.js +1 -64
- package/clis/segmentfault/login.js +1 -15
- package/clis/segmentfault/stats.js +82 -0
- package/clis/segmentfault/tags.js +1 -67
- package/clis/segmentfault/whoami.js +1 -53
- package/clis/semanticscholar/citations.js +1 -61
- package/clis/semanticscholar/paper.js +1 -52
- package/clis/semanticscholar/recommendations.js +1 -47
- package/clis/semanticscholar/search.js +1 -48
- package/clis/semanticscholar/utils.js +1 -196
- package/clis/sinablog/article.js +1 -15
- package/clis/sinablog/hot.js +1 -15
- package/clis/sinablog/search.js +1 -52
- package/clis/sinablog/user.js +1 -16
- package/clis/sinablog/utils.js +9 -42
- package/clis/sinafinance/news.js +1 -62
- package/clis/sinafinance/rolling-news.js +2 -23
- package/clis/sinafinance/stock-rank.js +3 -28
- package/clis/sinafinance/stock.js +1 -121
- package/clis/slock/attachment-download.js +1 -72
- package/clis/slock/attachment-upload.js +7 -85
- package/clis/slock/attachment-url.js +1 -53
- package/clis/slock/auth-verify.js +1 -19
- package/clis/slock/bookmark-add.js +5 -37
- package/clis/slock/bookmark-list.js +4 -44
- package/clis/slock/bookmark-remove.js +4 -39
- package/clis/slock/channel-action.js +1 -63
- package/clis/slock/channel-archive.js +1 -9
- package/clis/slock/channel-create.js +1 -48
- package/clis/slock/channel-files.js +1 -51
- package/clis/slock/channel-info.js +1 -42
- package/clis/slock/channel-join.js +1 -9
- package/clis/slock/channel-leave.js +1 -9
- package/clis/slock/channel-list.js +1 -40
- package/clis/slock/channel-mark.js +1 -71
- package/clis/slock/channel-members.js +1 -64
- package/clis/slock/channel-unarchive.js +1 -11
- package/clis/slock/dm-list.js +1 -41
- package/clis/slock/errors.js +1 -30
- package/clis/slock/in-page.js +30 -130
- package/clis/slock/inbox-done.js +5 -36
- package/clis/slock/inbox-read-all.js +1 -32
- package/clis/slock/inbox.js +1 -74
- package/clis/slock/login.js +1 -3
- package/clis/slock/message-read.js +24 -131
- package/clis/slock/message-search.js +10 -58
- package/clis/slock/message-send.js +25 -119
- package/clis/slock/reaction-add.js +1 -42
- package/clis/slock/reaction-remove.js +1 -42
- package/clis/slock/resolve.js +1 -74
- package/clis/slock/server-list.js +3 -32
- package/clis/slock/server-use.js +6 -41
- package/clis/slock/shared.js +1 -14
- package/clis/slock/task-claim.js +4 -62
- package/clis/slock/task-convert.js +13 -84
- package/clis/slock/task-create.js +6 -64
- package/clis/slock/task-delete.js +5 -51
- package/clis/slock/task-get.js +6 -54
- package/clis/slock/task-list-server.js +5 -56
- package/clis/slock/task-list.js +6 -62
- package/clis/slock/task-status.js +6 -80
- package/clis/slock/task-unclaim.js +4 -57
- package/clis/slock/thread-done.js +1 -9
- package/clis/slock/thread-follow.js +1 -46
- package/clis/slock/thread-list.js +1 -44
- package/clis/slock/thread-state.js +1 -45
- package/clis/slock/thread-undone.js +1 -9
- package/clis/slock/thread-unfollow.js +1 -9
- package/clis/slock/unread-summary.js +5 -36
- package/clis/slock/whoami.js +1 -12
- package/clis/smzdm/search.js +3 -81
- package/clis/sohu/article.js +1 -501
- package/clis/sohu/attributes.js +1 -36
- package/clis/sohu/categories.js +1 -48
- package/clis/sohu/channels.js +1 -34
- package/clis/sohu/columns.js +1 -36
- package/clis/sohu/login.js +1 -15
- package/clis/sohu/stats.js +95 -0
- package/clis/sohu/topics.js +1 -50
- package/clis/sohu/whoami.js +1 -27
- package/clis/spotify/spotify.js +1 -327
- package/clis/spotify/utils.js +8 -66
- package/clis/stackoverflow/bounties.js +1 -35
- package/clis/stackoverflow/hot.js +1 -32
- package/clis/stackoverflow/read.js +10 -311
- package/clis/stackoverflow/related.js +1 -66
- package/clis/stackoverflow/search.js +1 -35
- package/clis/stackoverflow/tag.js +1 -60
- package/clis/stackoverflow/unanswered.js +1 -33
- package/clis/stackoverflow/user.js +1 -50
- package/clis/stackoverflow/utils.js +1 -118
- package/clis/steam/app.js +1 -67
- package/clis/steam/search.js +1 -58
- package/clis/steam/top-sellers.js +1 -26
- package/clis/steam/utils.js +1 -107
- package/clis/substack/auth.js +11 -0
- package/clis/substack/feed.js +1 -16
- package/clis/substack/post-utils.js +2 -0
- package/clis/substack/publication.js +1 -16
- package/clis/substack/publish.js +10 -0
- package/clis/substack/search.js +1 -79
- package/clis/substack/utils.js +6 -34
- package/clis/suno/auth.js +2 -40
- package/clis/suno/download.js +5 -128
- package/clis/suno/generate.js +4 -231
- package/clis/suno/list.js +4 -69
- package/clis/suno/status.js +1 -63
- package/clis/suno/utils.js +29 -476
- package/clis/taobao/add-cart.js +6 -63
- package/clis/taobao/auth.js +3 -53
- package/clis/taobao/cart.js +3 -31
- package/clis/taobao/detail.js +5 -28
- package/clis/taobao/reviews.js +4 -29
- package/clis/taobao/search.js +3 -36
- package/clis/tdx/hot-rank.js +2 -25
- package/clis/test-utils.js +1 -61
- package/clis/ths/hot-rank.js +2 -25
- package/clis/tieba/hot.js +3 -35
- package/clis/tieba/posts.js +1 -86
- package/clis/tieba/read.js +2 -59
- package/clis/tieba/search.js +3 -58
- package/clis/tieba/utils.js +1 -240
- package/clis/tiktok/auth.js +2 -37
- package/clis/tiktok/comment.js +5 -81
- package/clis/tiktok/creator-videos.js +3 -228
- package/clis/tiktok/explore.js +8 -76
- package/clis/tiktok/follow.js +8 -81
- package/clis/tiktok/following.js +8 -76
- package/clis/tiktok/friends.js +8 -75
- package/clis/tiktok/like.js +2 -17
- package/clis/tiktok/live.js +7 -72
- package/clis/tiktok/notifications.js +10 -86
- package/clis/tiktok/profile.js +2 -31
- package/clis/tiktok/publish.js +82 -0
- package/clis/tiktok/save.js +2 -17
- package/clis/tiktok/search.js +2 -18
- package/clis/tiktok/unfollow.js +7 -79
- package/clis/tiktok/unlike.js +2 -17
- package/clis/tiktok/unsave.js +2 -17
- package/clis/tiktok/user.js +9 -82
- package/clis/tiktok/utils.js +7 -240
- package/clis/toutiao/article.js +1 -0
- package/clis/toutiao/articles.js +2 -51
- package/clis/toutiao/auth.js +2 -35
- package/clis/toutiao/hot.js +1 -63
- package/clis/toutiao/utils.js +2 -161
- package/clis/trae-cn/activity.js +1 -22
- package/clis/trae-cn/approve.js +1 -52
- package/clis/trae-cn/ask.js +1 -99
- package/clis/trae-cn/dump.js +1 -5
- package/clis/trae-cn/export.js +3 -40
- package/clis/trae-cn/model.js +1 -22
- package/clis/trae-cn/new.js +1 -63
- package/clis/trae-cn/read.js +1 -23
- package/clis/trae-cn/screenshot.js +1 -5
- package/clis/trae-cn/select-model.js +1 -25
- package/clis/trae-cn/send.js +1 -23
- package/clis/trae-cn/setup.js +1 -75
- package/clis/trae-cn/status.js +1 -27
- package/clis/trae-cn/targets.js +1 -96
- package/clis/trae-cn/utils.js +24 -318
- package/clis/trae-cn/watch.js +3 -119
- package/clis/trae-solo/_actions.js +5 -24
- package/clis/trae-solo/_fs.js +6 -118
- package/clis/trae-solo/_state.js +2 -111
- package/clis/trae-solo/automation.js +4 -58
- package/clis/trae-solo/history.js +2 -41
- package/clis/trae-solo/mode.js +4 -54
- package/clis/trae-solo/model.js +4 -88
- package/clis/trae-solo/renderer-storage.js +4 -163
- package/clis/trae-solo/settings.js +1 -54
- package/clis/trae-solo/skill-fs.js +1 -123
- package/clis/trae-solo/skill.js +12 -151
- package/clis/trae-solo/state-fs.js +2 -156
- package/clis/trae-solo/status.js +1 -2
- package/clis/trae-solo/task-fs.js +5 -181
- package/clis/trae-solo/user-rules.js +1 -29
- package/clis/trae-solo/workspaces-fs.js +1 -113
- package/clis/tumblr/auth.js +24 -0
- package/clis/tumblr/publish.js +14 -0
- package/clis/tvmaze/search.js +1 -61
- package/clis/tvmaze/show.js +1 -60
- package/clis/tvmaze/utils.js +1 -110
- package/clis/twitter/accept.js +7 -95
- package/clis/twitter/article.js +7 -61
- package/clis/twitter/auth.js +2 -39
- package/clis/twitter/block.js +4 -32
- package/clis/twitter/bookmark-folder.js +3 -189
- package/clis/twitter/bookmark-folders.js +3 -113
- package/clis/twitter/bookmark.js +3 -33
- package/clis/twitter/bookmarks.js +4 -158
- package/clis/twitter/delete.js +5 -123
- package/clis/twitter/device-follow.js +3 -184
- package/clis/twitter/dm-list.js +1 -0
- package/clis/twitter/dm-read.js +1 -0
- package/clis/twitter/dm-send.js +13 -0
- package/clis/twitter/dm-shared.js +6 -0
- package/clis/twitter/download.js +6 -449
- package/clis/twitter/follow-batch.js +5 -124
- package/clis/twitter/follow.js +4 -32
- package/clis/twitter/followers.js +5 -139
- package/clis/twitter/following.js +2 -272
- package/clis/twitter/hide-reply.js +3 -33
- package/clis/twitter/like.js +3 -35
- package/clis/twitter/likes.js +8 -235
- package/clis/twitter/list-add-batch.js +1 -32
- package/clis/twitter/list-add-core.js +9 -219
- package/clis/twitter/list-add.js +1 -20
- package/clis/twitter/list-batch-utils.js +1 -95
- package/clis/twitter/list-create.js +5 -148
- package/clis/twitter/list-delete.js +4 -126
- package/clis/twitter/list-remove-batch.js +1 -32
- package/clis/twitter/list-remove-core.js +9 -173
- package/clis/twitter/list-remove.js +1 -20
- package/clis/twitter/list-tweets.js +7 -179
- package/clis/twitter/lists.js +6 -157
- package/clis/twitter/notifications.js +2 -126
- package/clis/twitter/post.js +32 -357
- package/clis/twitter/profile.js +7 -115
- package/clis/twitter/quote.js +7 -118
- package/clis/twitter/reply-dm.js +7 -78
- package/clis/twitter/reply.js +12 -167
- package/clis/twitter/retweet.js +3 -35
- package/clis/twitter/schedule.js +11 -167
- package/clis/twitter/scheduled-delete.js +3 -48
- package/clis/twitter/scheduled-list.js +2 -30
- package/clis/twitter/scheduled-utils.js +3 -17
- package/clis/twitter/search.js +5 -339
- package/clis/twitter/shared.js +6 -494
- package/clis/twitter/thread.js +4 -164
- package/clis/twitter/timeline.js +3 -210
- package/clis/twitter/trending.js +2 -42
- package/clis/twitter/tweets.js +6 -341
- package/clis/twitter/unblock.js +4 -32
- package/clis/twitter/unbookmark.js +3 -33
- package/clis/twitter/unfollow.js +4 -32
- package/clis/twitter/unlike.js +3 -35
- package/clis/twitter/unretweet.js +3 -35
- package/clis/twitter/utils.js +11 -279
- package/clis/uisdc/news.js +2 -82
- package/clis/uiverse/_shared.js +11 -181
- package/clis/uiverse/code.js +1 -49
- package/clis/uiverse/preview.js +1 -73
- package/clis/upwork/auth.js +2 -36
- package/clis/upwork/detail.js +2 -112
- package/clis/upwork/feed.js +3 -91
- package/clis/upwork/search.js +2 -96
- package/clis/upwork/utils.js +1 -323
- package/clis/v2ex/auth.js +2 -36
- package/clis/v2ex/daily.js +3 -61
- package/clis/v2ex/hot.js +1 -26
- package/clis/v2ex/latest.js +1 -26
- package/clis/v2ex/me.js +2 -44
- package/clis/v2ex/member.js +1 -28
- package/clis/v2ex/node.js +1 -39
- package/clis/v2ex/nodes.js +1 -26
- package/clis/v2ex/notifications.js +2 -34
- package/clis/v2ex/replies.js +1 -27
- package/clis/v2ex/topic.js +1 -31
- package/clis/v2ex/user.js +1 -34
- package/clis/wanfang/search.js +4 -28
- package/clis/web/read.js +9 -240
- package/clis/wechat-channels/auth.js +2 -47
- package/clis/wechat-channels/publish.js +37 -534
- package/clis/weibo/article.js +1 -0
- package/clis/weibo/auth.js +3 -39
- package/clis/weibo/comments.js +4 -29
- package/clis/weibo/delete.js +3 -91
- package/clis/weibo/favorites.js +8 -151
- package/clis/weibo/feed.js +5 -41
- package/clis/weibo/hot.js +2 -24
- package/clis/weibo/me.js +3 -27
- package/clis/weibo/post.js +3 -32
- package/clis/weibo/publish.js +10 -244
- package/clis/weibo/search.js +2 -35
- package/clis/weibo/user-posts.js +7 -149
- package/clis/weibo/user.js +3 -29
- package/clis/weibo/utils.js +3 -46
- package/clis/weixin/article.js +1 -332
- package/clis/weixin/create-draft.js +26 -226
- package/clis/weixin/download.js +2 -273
- package/clis/weixin/drafts.js +2 -41
- package/clis/weixin/login.js +1 -0
- package/clis/weixin/search.js +2 -115
- package/clis/weixin/stats.js +43 -0
- package/clis/weixin/whoami.js +1 -26
- package/clis/weread/ai-outline.js +2 -171
- package/clis/weread/auth.js +2 -37
- package/clis/weread/book-search.js +2 -438
- package/clis/weread/book.js +2 -232
- package/clis/weread/highlights.js +1 -24
- package/clis/weread/notebooks.js +1 -22
- package/clis/weread/notes.js +1 -30
- package/clis/weread/ranking.js +1 -29
- package/clis/weread/search.js +1 -186
- package/clis/weread/shelf.js +1 -66
- package/clis/weread/utils.js +6 -260
- package/clis/weread-official/book.js +1 -135
- package/clis/weread-official/discover.js +1 -107
- package/clis/weread-official/list-apis.js +1 -95
- package/clis/weread-official/notes.js +1 -171
- package/clis/weread-official/readdata.js +1 -158
- package/clis/weread-official/review.js +1 -93
- package/clis/weread-official/search.js +1 -106
- package/clis/weread-official/shelf.js +1 -97
- package/clis/weread-official/utils.js +1 -293
- package/clis/wikidata/entity.js +1 -60
- package/clis/wikidata/search.js +1 -50
- package/clis/wikidata/utils.js +1 -117
- package/clis/wikipedia/page.js +2 -94
- package/clis/wikipedia/random.js +1 -20
- package/clis/wikipedia/search.js +1 -31
- package/clis/wikipedia/summary.js +1 -24
- package/clis/wikipedia/trending.js +1 -40
- package/clis/wikipedia/utils.js +1 -31
- package/clis/wordpress/publish.js +1 -0
- package/clis/wordpress/shared.js +1 -0
- package/clis/wordpress/whoami.js +1 -0
- package/clis/woshipm/article.js +1 -301
- package/clis/woshipm/login.js +1 -15
- package/clis/woshipm/stats.js +52 -0
- package/clis/woshipm/whoami.js +1 -34
- package/clis/wttr/current.js +1 -63
- package/clis/wttr/forecast.js +1 -71
- package/clis/wttr/utils.js +1 -50
- package/clis/xianyu/auth.js +2 -59
- package/clis/xianyu/chat.js +1 -74
- package/clis/xianyu/im.js +13 -95
- package/clis/xianyu/inbox.js +1 -96
- package/clis/xianyu/item.js +5 -61
- package/clis/xianyu/messages.js +1 -91
- package/clis/xianyu/publish.js +19 -299
- package/clis/xianyu/reply.js +1 -82
- package/clis/xianyu/search.js +8 -129
- package/clis/xianyu/utils.js +1 -8
- package/clis/xiaoe/auth.js +2 -47
- package/clis/xiaoe/catalog.js +2 -95
- package/clis/xiaoe/content.js +2 -161
- package/clis/xiaoe/courses.js +2 -86
- package/clis/xiaoe/detail.js +2 -19
- package/clis/xiaoe/play-url.js +2 -26
- package/clis/xiaohongshu/ask.js +8 -304
- package/clis/xiaohongshu/auth.js +2 -42
- package/clis/xiaohongshu/collection-helpers.js +5 -224
- package/clis/xiaohongshu/comments.js +5 -144
- package/clis/xiaohongshu/creator-note-detail.js +7 -409
- package/clis/xiaohongshu/creator-notes-summary.js +1 -98
- package/clis/xiaohongshu/creator-notes.js +13 -385
- package/clis/xiaohongshu/creator-profile.js +2 -44
- package/clis/xiaohongshu/creator-stats.js +2 -65
- package/clis/xiaohongshu/delete-note.js +7 -207
- package/clis/xiaohongshu/download.js +4 -71
- package/clis/xiaohongshu/draft-clear.js +5 -52
- package/clis/xiaohongshu/draft-delete.js +9 -75
- package/clis/xiaohongshu/draft-open.js +1 -43
- package/clis/xiaohongshu/draft-utils.js +5 -111
- package/clis/xiaohongshu/drafts.js +1 -28
- package/clis/xiaohongshu/feed.js +2 -127
- package/clis/xiaohongshu/follow.js +3 -154
- package/clis/xiaohongshu/liked.js +1 -29
- package/clis/xiaohongshu/note-helpers.js +1 -69
- package/clis/xiaohongshu/note.js +2 -74
- package/clis/xiaohongshu/notifications.js +1 -46
- package/clis/xiaohongshu/publish-video.js +87 -0
- package/clis/xiaohongshu/publish.js +54 -910
- package/clis/xiaohongshu/saved.js +1 -29
- package/clis/xiaohongshu/search.js +8 -194
- package/clis/xiaohongshu/unfollow.js +5 -192
- package/clis/xiaohongshu/user-helpers.js +1 -78
- package/clis/xiaohongshu/user.js +2 -112
- package/clis/xiaoyuzhou/auth.js +3 -303
- package/clis/xiaoyuzhou/download.js +1 -54
- package/clis/xiaoyuzhou/episode.js +1 -34
- package/clis/xiaoyuzhou/podcast-episodes.js +1 -41
- package/clis/xiaoyuzhou/podcast.js +1 -33
- package/clis/xiaoyuzhou/transcript.js +1 -77
- package/clis/xiaoyuzhou/utils.js +1 -15
- package/clis/xueqiu/article.js +4 -388
- package/clis/xueqiu/auth.js +2 -38
- package/clis/xueqiu/comments.js +4 -321
- package/clis/xueqiu/danjuan-utils.js +4 -46
- package/clis/xueqiu/earnings-date.js +1 -45
- package/clis/xueqiu/events.js +17 -58
- package/clis/xueqiu/feed.js +1 -39
- package/clis/xueqiu/fund-holdings.js +1 -29
- package/clis/xueqiu/fund-snapshot.js +1 -26
- package/clis/xueqiu/groups.js +1 -23
- package/clis/xueqiu/hashtags.js +26 -71
- package/clis/xueqiu/hot-stock.js +1 -32
- package/clis/xueqiu/hot.js +1 -37
- package/clis/xueqiu/kline.js +1 -44
- package/clis/xueqiu/search.js +1 -37
- package/clis/xueqiu/stock.js +1 -65
- package/clis/xueqiu/stocks.js +13 -49
- package/clis/xueqiu/users.js +12 -48
- package/clis/xueqiu/utils.js +3 -42
- package/clis/xueqiu/watchlist.js +1 -37
- package/clis/yahoo/search.js +3 -74
- package/clis/yahoo-finance/quote.js +3 -27
- package/clis/yollomi/background.js +1 -46
- package/clis/yollomi/edit.js +1 -57
- package/clis/yollomi/face-swap.js +1 -44
- package/clis/yollomi/generate.js +1 -101
- package/clis/yollomi/models.js +1 -34
- package/clis/yollomi/object-remover.js +1 -43
- package/clis/yollomi/remove-bg.js +1 -39
- package/clis/yollomi/restore.js +1 -39
- package/clis/yollomi/try-on.js +1 -47
- package/clis/yollomi/upload.js +4 -59
- package/clis/yollomi/upscale.js +1 -54
- package/clis/yollomi/utils.js +4 -168
- package/clis/yollomi/video.js +1 -57
- package/clis/youdao/note.js +5 -150
- package/clis/youtube/auth.js +2 -36
- package/clis/youtube/channel.js +4 -113
- package/clis/youtube/comments.js +4 -36
- package/clis/youtube/feed.js +3 -35
- package/clis/youtube/history.js +3 -35
- package/clis/youtube/like.js +5 -39
- package/clis/youtube/playlist.js +7 -58
- package/clis/youtube/publish.js +56 -0
- package/clis/youtube/search.js +3 -64
- package/clis/youtube/subscribe.js +7 -41
- package/clis/youtube/subscriptions.js +4 -36
- package/clis/youtube/transcript-group.js +2 -226
- package/clis/youtube/transcript.js +13 -252
- package/clis/youtube/unlike.js +5 -39
- package/clis/youtube/unsubscribe.js +7 -41
- package/clis/youtube/utils.js +4 -190
- package/clis/youtube/video.js +4 -60
- package/clis/youtube/watch-later.js +6 -42
- package/clis/yuanbao/ask.js +25 -242
- package/clis/yuanbao/auth.js +2 -38
- package/clis/yuanbao/detail.js +1 -65
- package/clis/yuanbao/history.js +1 -51
- package/clis/yuanbao/new.js +4 -60
- package/clis/yuanbao/read.js +1 -38
- package/clis/yuanbao/send.js +1 -57
- package/clis/yuanbao/shared.js +10 -224
- package/clis/yuanbao/status.js +1 -44
- package/clis/yuque/article.js +1 -293
- package/clis/yuque/whoami.js +1 -60
- package/clis/zhihu/answer-comments.js +3 -272
- package/clis/zhihu/answer-detail.js +3 -208
- package/clis/zhihu/answer.js +4 -43
- package/clis/zhihu/article-transform.js +1 -100
- package/clis/zhihu/article.js +6 -129
- package/clis/zhihu/auth.js +2 -50
- package/clis/zhihu/collection.js +3 -195
- package/clis/zhihu/collections.js +3 -124
- package/clis/zhihu/comment.js +5 -43
- package/clis/zhihu/download.js +2 -43
- package/clis/zhihu/favorite.js +6 -54
- package/clis/zhihu/follow.js +4 -35
- package/clis/zhihu/followers.js +1 -40
- package/clis/zhihu/following.js +1 -40
- package/clis/zhihu/hot.js +2 -25
- package/clis/zhihu/like.js +4 -35
- package/clis/zhihu/paginate.js +3 -120
- package/clis/zhihu/pin.js +4 -59
- package/clis/zhihu/pins.js +1 -41
- package/clis/zhihu/question.js +3 -109
- package/clis/zhihu/recommend.js +3 -99
- package/clis/zhihu/search.js +3 -198
- package/clis/zhihu/stats.js +41 -0
- package/clis/zhihu/target.js +1 -91
- package/clis/zhihu/text.js +4 -27
- package/clis/zhihu/user-answers.js +1 -41
- package/clis/zhihu/user-arg.js +1 -34
- package/clis/zhihu/user-articles.js +1 -40
- package/clis/zhihu/user.js +3 -51
- package/clis/zhihu/write-shared.js +7 -176
- package/clis/zlibrary/info.js +1 -48
- package/clis/zlibrary/search.js +1 -47
- package/clis/zlibrary/utils.js +6 -94
- package/clis/zsxq/auth.js +3 -38
- package/clis/zsxq/dynamics.js +1 -48
- package/clis/zsxq/groups.js +1 -33
- package/clis/zsxq/search.js +1 -44
- package/clis/zsxq/topic.js +1 -50
- package/clis/zsxq/topics.js +1 -26
- package/clis/zsxq/utils.js +5 -166
- package/dist/src/adapter-shadow.js +2 -72
- package/dist/src/adapter-source.js +1 -24
- package/dist/src/browser/analyze.js +1 -405
- package/dist/src/browser/article-extract.js +2 -169
- package/dist/src/browser/ax-snapshot.js +2 -217
- package/dist/src/browser/base-page.js +26 -861
- package/dist/src/browser/bridge-readiness.js +1 -24
- package/dist/src/browser/bridge.js +1 -58
- package/dist/src/browser/cdp.d.ts +5 -0
- package/dist/src/browser/cdp.js +1 -536
- package/dist/src/browser/compound.js +2 -32
- package/dist/src/browser/config.js +1 -14
- package/dist/src/browser/daemon-client.js +1 -135
- package/dist/src/browser/daemon-lifecycle.js +12 -150
- package/dist/src/browser/daemon-transport.js +1 -68
- package/dist/src/browser/daemon-version.js +2 -12
- package/dist/src/browser/dom-helpers.js +36 -109
- package/dist/src/browser/dom-snapshot.js +21 -106
- package/dist/src/browser/errors.js +5 -78
- package/dist/src/browser/extract.js +6 -96
- package/dist/src/browser/find.js +13 -83
- package/dist/src/browser/fingerprint.d.ts +44 -0
- package/dist/src/browser/fingerprint.js +82 -0
- package/dist/src/browser/html-tree.js +7 -58
- package/dist/src/browser/index.js +1 -12
- package/dist/src/browser/managed-chrome.d.ts +89 -0
- package/dist/src/browser/managed-chrome.js +1 -0
- package/dist/src/browser/network-cache.js +1 -78
- package/dist/src/browser/network-key.js +1 -66
- package/dist/src/browser/page.js +7 -445
- package/dist/src/browser/profile.d.ts +82 -0
- package/dist/src/browser/profile.js +2 -85
- package/dist/src/browser/proxy-test.d.ts +28 -0
- package/dist/src/browser/proxy-test.js +12 -0
- package/dist/src/browser/shape-filter.js +1 -101
- package/dist/src/browser/shape.js +1 -95
- package/dist/src/browser/stealth.js +2 -25
- package/dist/src/browser/tabs.js +2 -70
- package/dist/src/browser/target-errors.js +1 -45
- package/dist/src/browser/target-resolver.js +27 -174
- package/dist/src/browser/trace.js +2 -91
- package/dist/src/browser/utils.js +1 -64
- package/dist/src/browser/verify-fixture.js +2 -318
- package/dist/src/browser/visual-refs.js +6 -20
- package/dist/src/browser-session-lock.d.ts +13 -0
- package/dist/src/browser-session-lock.js +1 -0
- package/dist/src/browser-session-lock.test.d.ts +1 -0
- package/dist/src/build-manifest.js +15 -362
- package/dist/src/capabilityRouting.js +1 -56
- package/dist/src/cli-argv-preprocess.js +1 -303
- package/dist/src/cli.js +29 -3319
- package/dist/src/commanderAdapter.js +3 -210
- package/dist/src/commands/auth.js +2 -434
- package/dist/src/commands/daemon.d.ts +16 -0
- package/dist/src/commands/daemon.js +1 -98
- package/dist/src/completion-fast.js +1 -88
- package/dist/src/completion-shared.js +4 -34
- package/dist/src/completion.js +1 -68
- package/dist/src/constants.js +1 -38
- package/dist/src/convention-audit.js +2 -553
- package/dist/src/daemon-utils.js +1 -37
- package/dist/src/daemon.js +1 -455
- package/dist/src/discovery.js +2 -280
- package/dist/src/doctor.js +17 -230
- package/dist/src/download/article-download.js +21 -305
- package/dist/src/download/index.js +7 -369
- package/dist/src/download/media-download.js +1 -127
- package/dist/src/download/progress.js +5 -120
- package/dist/src/electron-apps.js +1 -91
- package/dist/src/errors.js +2 -193
- package/dist/src/execution.js +2 -513
- package/dist/src/external.js +1 -227
- package/dist/src/help.js +8 -555
- package/dist/src/hooks.js +1 -58
- package/dist/src/interceptor.js +25 -85
- package/dist/src/launcher.d.ts +1 -1
- package/dist/src/launcher.js +7 -232
- package/dist/src/logger.js +9 -49
- package/dist/src/main.js +9 -175
- package/dist/src/manifest-types.js +1 -9
- package/dist/src/node-network.js +1 -177
- package/dist/src/observation/artifact.js +8 -260
- package/dist/src/observation/events.js +1 -1
- package/dist/src/observation/index.js +1 -7
- package/dist/src/observation/manager.js +1 -27
- package/dist/src/observation/redaction.js +2 -81
- package/dist/src/observation/retention.js +1 -160
- package/dist/src/observation/ring-buffer.js +1 -45
- package/dist/src/observation/session.js +1 -50
- package/dist/src/output.js +2 -159
- package/dist/src/package-paths.js +1 -41
- package/dist/src/pipeline/executor.js +1 -93
- package/dist/src/pipeline/index.js +1 -5
- package/dist/src/pipeline/registry.js +1 -55
- package/dist/src/pipeline/steps/browser.js +1 -86
- package/dist/src/pipeline/steps/download.js +1 -252
- package/dist/src/pipeline/steps/fetch.js +6 -112
- package/dist/src/pipeline/steps/intercept.js +1 -50
- package/dist/src/pipeline/steps/tap.js +17 -57
- package/dist/src/pipeline/steps/transform.js +1 -97
- package/dist/src/pipeline/template.js +1 -354
- package/dist/src/plugin-manifest.js +1 -160
- package/dist/src/plugin-scaffold.js +19 -87
- package/dist/src/plugin.js +20 -1250
- package/dist/src/rate-limit.js +2 -125
- package/dist/src/registry-api.js +1 -10
- package/dist/src/registry.js +1 -125
- package/dist/src/runtime-detect.js +1 -47
- package/dist/src/runtime.d.ts +10 -0
- package/dist/src/runtime.js +1 -54
- package/dist/src/scripts/framework.js +1 -25
- package/dist/src/scripts/interact.js +1 -20
- package/dist/src/scripts/store.js +1 -48
- package/dist/src/serialization.js +4 -102
- package/dist/src/skills.js +6 -127
- package/dist/src/snapshotFormatter.js +3 -338
- package/dist/src/tui.js +16 -179
- package/dist/src/types.js +1 -7
- package/dist/src/update-check.js +8 -202
- package/dist/src/utils.js +6 -120
- package/dist/src/validate.js +3 -129
- package/dist/src/verify.js +2 -71
- package/dist/src/version.js +1 -22
- package/package.json +7 -4
- package/scripts/minify-release.mjs +115 -0
- package/clis/12306/utils.test.js +0 -424
- package/clis/1688/assets.test.js +0 -39
- package/clis/1688/download.test.js +0 -31
- package/clis/1688/item.test.js +0 -67
- package/clis/1688/search.test.js +0 -75
- package/clis/1688/shared.test.js +0 -57
- package/clis/1688/store.test.js +0 -62
- package/clis/36kr/article.test.js +0 -46
- package/clis/36kr/hot.test.js +0 -15
- package/clis/36kr/news.test.js +0 -85
- package/clis/51job/utils.test.js +0 -69
- package/clis/_atlassian/shared.test.js +0 -170
- package/clis/_shared/article/auth.test.js +0 -98
- package/clis/_shared/article/format.test.js +0 -68
- package/clis/_shared/article/images.test.js +0 -182
- package/clis/_shared/article/page-runtime.test.js +0 -155
- package/clis/_shared/article/publish.test.js +0 -104
- package/clis/_shared/site-auth.test.js +0 -98
- package/clis/aibase/news.test.js +0 -59
- package/clis/amazon/bestsellers.test.js +0 -29
- package/clis/amazon/discussion.test.js +0 -124
- package/clis/amazon/offer.test.js +0 -29
- package/clis/amazon/product.test.js +0 -24
- package/clis/amazon/rankings.test.js +0 -41
- package/clis/amazon/search.test.js +0 -22
- package/clis/amazon/shared.test.js +0 -44
- package/clis/antigravity/antigravity.test.js +0 -172
- package/clis/apple-podcasts/commands.test.js +0 -119
- package/clis/apple-podcasts/utils.test.js +0 -57
- package/clis/archive/archive.test.js +0 -262
- package/clis/arxiv/arxiv.test.js +0 -112
- package/clis/autohome/autohome.test.js +0 -115
- package/clis/baidu-scholar/search.test.js +0 -23
- package/clis/baijiahao/article.test.js +0 -395
- package/clis/barchart/greeks.test.js +0 -138
- package/clis/bilibili/article.test.js +0 -384
- package/clis/bilibili/comment.test.js +0 -153
- package/clis/bilibili/comments.test.js +0 -142
- package/clis/bilibili/download.test.js +0 -173
- package/clis/bilibili/dynamic.test.js +0 -68
- package/clis/bilibili/follow.test.js +0 -203
- package/clis/bilibili/hot.test.js +0 -17
- package/clis/bilibili/subtitle.test.js +0 -240
- package/clis/bilibili/summary.test.js +0 -210
- package/clis/bilibili/utils.test.js +0 -97
- package/clis/bilibili/video.test.js +0 -308
- package/clis/binance/commands.test.js +0 -70
- package/clis/bloomberg/businessweek.test.js +0 -149
- package/clis/bloomberg/utils.test.js +0 -129
- package/clis/bluesky/feeds.js +0 -28
- package/clis/bluesky/followers.js +0 -28
- package/clis/bluesky/following.js +0 -28
- package/clis/bluesky/profile.js +0 -30
- package/clis/bluesky/search.js +0 -29
- package/clis/bluesky/starter-packs.js +0 -29
- package/clis/bluesky/thread.js +0 -31
- package/clis/bluesky/trending.js +0 -20
- package/clis/bluesky/user.js +0 -35
- package/clis/booking/booking.test.js +0 -356
- package/clis/boss/chatlist.test.js +0 -211
- package/clis/boss/chatmsg.test.js +0 -230
- package/clis/boss/search.test.js +0 -78
- package/clis/boss/utils.test.js +0 -34
- package/clis/brave/search.test.js +0 -76
- package/clis/chaoxing/utils.test.js +0 -45
- package/clis/chatgpt/commands.test.js +0 -204
- package/clis/chatgpt/envelope.test.js +0 -108
- package/clis/chatgpt/image.test.js +0 -207
- package/clis/chatgpt/model.test.js +0 -36
- package/clis/chatgpt/utils.test.js +0 -1453
- package/clis/chatgpt-app/ax.test.js +0 -95
- package/clis/chatgpt-app/commands.test.js +0 -45
- package/clis/chatwise/composer.test.js +0 -186
- package/clis/chess/analyze.test.js +0 -79
- package/clis/chess/game.test.js +0 -178
- package/clis/chess/games.test.js +0 -164
- package/clis/chess/stats.test.js +0 -79
- package/clis/chess/utils.test.js +0 -230
- package/clis/claude/ask.test.js +0 -338
- package/clis/claude/commands.test.js +0 -118
- package/clis/claude/utils.test.js +0 -148
- package/clis/cnblogs/article.test.js +0 -346
- package/clis/cnki/search.test.js +0 -18
- package/clis/codex/sidebar.test.js +0 -388
- package/clis/coingecko/coingecko.test.js +0 -109
- package/clis/confluence/commands.test.js +0 -195
- package/clis/coupang/coupang.test.js +0 -159
- package/clis/coupang/utils.test.js +0 -62
- package/clis/csdn/article.test.js +0 -378
- package/clis/cto51/article.test.js +0 -326
- package/clis/ctrip/ctrip.test.js +0 -719
- package/clis/dblp/dblp.test.js +0 -397
- package/clis/deepseek/ask.test.js +0 -399
- package/clis/deepseek/detail.test.js +0 -81
- package/clis/deepseek/send.test.js +0 -107
- package/clis/deepseek/utils.test.js +0 -370
- package/clis/defillama/defillama.test.js +0 -99
- package/clis/devto/devto.test.js +0 -236
- package/clis/dianping/dianping.test.js +0 -578
- package/clis/discord-app/commands.test.js +0 -395
- package/clis/dongchedi/dongchedi.test.js +0 -191
- package/clis/douban/article.test.js +0 -136
- package/clis/douban/download.test.js +0 -170
- package/clis/douban/movie-hot.test.js +0 -14
- package/clis/douban/search.test.js +0 -11
- package/clis/douban/subject.test.js +0 -11
- package/clis/douban/utils.test.js +0 -488
- package/clis/doubao/detail.test.js +0 -42
- package/clis/doubao/history.test.js +0 -37
- package/clis/doubao/utils.test.js +0 -396
- package/clis/douyin/_shared/browser-fetch.test.js +0 -64
- package/clis/douyin/_shared/creation-id.test.js +0 -22
- package/clis/douyin/_shared/imagex-upload.test.js +0 -87
- package/clis/douyin/_shared/sts2.test.js +0 -27
- package/clis/douyin/_shared/text-extra.test.js +0 -37
- package/clis/douyin/_shared/timing.test.js +0 -28
- package/clis/douyin/_shared/tos-upload-short-read.test.js +0 -83
- package/clis/douyin/_shared/tos-upload.test.js +0 -229
- package/clis/douyin/_shared/transcode.test.js +0 -91
- package/clis/douyin/_shared/vod-upload.test.js +0 -38
- package/clis/douyin/activities.test.js +0 -55
- package/clis/douyin/collections.test.js +0 -45
- package/clis/douyin/delete.test.js +0 -100
- package/clis/douyin/draft.test.js +0 -347
- package/clis/douyin/drafts.test.js +0 -11
- package/clis/douyin/hashtag.test.js +0 -171
- package/clis/douyin/location.test.js +0 -23
- package/clis/douyin/profile.test.js +0 -46
- package/clis/douyin/publish-upload-id.test.js +0 -206
- package/clis/douyin/publish.test.js +0 -38
- package/clis/douyin/search.test.js +0 -307
- package/clis/douyin/stats.test.js +0 -22
- package/clis/douyin/update.test.js +0 -11
- package/clis/douyin/user-videos.test.js +0 -151
- package/clis/douyin/videos.test.js +0 -54
- package/clis/duckduckgo/search.test.js +0 -128
- package/clis/duckduckgo/suggest.test.js +0 -66
- package/clis/eastmoney/article.test.js +0 -427
- package/clis/eastmoney/hot-rank.test.js +0 -59
- package/clis/endoflife/endoflife.test.js +0 -51
- package/clis/facebook/feed.test.js +0 -169
- package/clis/facebook/marketplace.test.js +0 -91
- package/clis/facebook/notifications.test.js +0 -458
- package/clis/facebook/search.test.js +0 -55
- package/clis/flathub/flathub.test.js +0 -90
- package/clis/flomo/memos.test.js +0 -144
- package/clis/gemini/ask.test.js +0 -100
- package/clis/gemini/commands.test.js +0 -212
- package/clis/gemini/deep-research-result.test.js +0 -155
- package/clis/gemini/deep-research.test.js +0 -181
- package/clis/gemini/reply-state.test.js +0 -671
- package/clis/gemini/utils.test.js +0 -392
- package/clis/geogebra/geogebra.test.js +0 -175
- package/clis/gitee/search.test.js +0 -65
- package/clis/gitee/user.test.js +0 -63
- package/clis/github-trending/repos.test.js +0 -149
- package/clis/google/utils.test.js +0 -75
- package/clis/google-scholar/cite.test.js +0 -47
- package/clis/google-scholar/profile.test.js +0 -49
- package/clis/google-scholar/search.test.js +0 -71
- package/clis/goproxy/goproxy.test.js +0 -103
- package/clis/gov-law/commands.test.js +0 -39
- package/clis/gov-policy/gov-policy.test.js +0 -224
- package/clis/grok/ask.test.js +0 -29
- package/clis/grok/export.test.js +0 -210
- package/clis/grok/utils.test.js +0 -141
- package/clis/guazi/guazi.test.js +0 -126
- package/clis/hackernews/hackernews.test.js +0 -132
- package/clis/hf/hf.test.js +0 -16
- package/clis/huodongxing/events.test.js +0 -296
- package/clis/hupu/hot.test.js +0 -224
- package/clis/imdb/utils.test.js +0 -88
- package/clis/imooc/article.test.js +0 -264
- package/clis/indeed/indeed.test.js +0 -375
- package/clis/instagram/_shared/private-publish.test.js +0 -705
- package/clis/instagram/_shared/protocol-capture.test.js +0 -114
- package/clis/instagram/detail.test.js +0 -137
- package/clis/instagram/download.test.js +0 -118
- package/clis/instagram/instagram.test.js +0 -381
- package/clis/instagram/note.test.js +0 -53
- package/clis/instagram/post.test.js +0 -1647
- package/clis/instagram/reel.test.js +0 -167
- package/clis/instagram/story.test.js +0 -134
- package/clis/instagram/user.test.js +0 -282
- package/clis/jd/commands.test.js +0 -41
- package/clis/jd/item.test.js +0 -354
- package/clis/jianyu/search.test.js +0 -153
- package/clis/jianyu/shared/procurement-contract.test.js +0 -72
- package/clis/jianyu/shared/procurement-detail.test.js +0 -84
- package/clis/jike/read.test.js +0 -86
- package/clis/jira/commands.test.js +0 -287
- package/clis/juejin/article.test.js +0 -299
- package/clis/juejin/juejin.test.js +0 -241
- package/clis/kimi/kimi.test.js +0 -187
- package/clis/lesswrong/frontpage.test.js +0 -37
- package/clis/lichess/lichess.test.js +0 -85
- package/clis/linkedin/connect.test.js +0 -328
- package/clis/linkedin/inbox.test.js +0 -152
- package/clis/linkedin/job-detail.test.js +0 -64
- package/clis/linkedin/jobs-preferences.test.js +0 -43
- package/clis/linkedin/people-search.test.js +0 -216
- package/clis/linkedin/post-analytics.test.js +0 -40
- package/clis/linkedin/posts.test.js +0 -40
- package/clis/linkedin/profile-analytics.test.js +0 -67
- package/clis/linkedin/profile-experience.test.js +0 -152
- package/clis/linkedin/profile-projects.test.js +0 -111
- package/clis/linkedin/profile-read.test.js +0 -77
- package/clis/linkedin/safe-send.test.js +0 -255
- package/clis/linkedin/salesnav-inbox.test.js +0 -113
- package/clis/linkedin/salesnav-message.test.js +0 -172
- package/clis/linkedin/salesnav-search.test.js +0 -76
- package/clis/linkedin/salesnav-thread.test.js +0 -79
- package/clis/linkedin/search.test.js +0 -222
- package/clis/linkedin/sent-invitations.test.js +0 -62
- package/clis/linkedin/services-read.test.js +0 -105
- package/clis/linkedin/thread-snapshot.test.js +0 -89
- package/clis/linkedin/timeline.test.js +0 -81
- package/clis/linkedin-learning/course.test.js +0 -114
- package/clis/linkedin-learning/search.test.js +0 -144
- package/clis/linkedin-learning/trending.test.js +0 -123
- package/clis/linux-do/feed.test.js +0 -153
- package/clis/linux-do/topic-content.test.js +0 -59
- package/clis/lobsters/lobsters.test.js +0 -169
- package/clis/maimai/search-talents.test.js +0 -29
- package/clis/manus/manus.test.js +0 -382
- package/clis/notebooklm/add-source.test.js +0 -97
- package/clis/notebooklm/compat.test.js +0 -16
- package/clis/notebooklm/create.test.js +0 -58
- package/clis/notebooklm/generate-audio.test.js +0 -63
- package/clis/notebooklm/generate-slides.test.js +0 -75
- package/clis/notebooklm/history.test.js +0 -58
- package/clis/notebooklm/note-list.test.js +0 -56
- package/clis/notebooklm/notes-get.test.js +0 -72
- package/clis/notebooklm/open.test.js +0 -63
- package/clis/notebooklm/rpc.test.js +0 -131
- package/clis/notebooklm/source-fulltext.test.js +0 -106
- package/clis/notebooklm/source-get.test.js +0 -84
- package/clis/notebooklm/source-guide.test.js +0 -104
- package/clis/notebooklm/summary.test.js +0 -78
- package/clis/notebooklm/utils.test.js +0 -449
- package/clis/notebooklm/write-note.test.js +0 -70
- package/clis/nuget/nuget.test.js +0 -111
- package/clis/oeis/oeis.test.js +0 -88
- package/clis/ones/task-helpers.test.js +0 -12
- package/clis/ones/worklog.test.js +0 -20
- package/clis/openfda/openfda.test.js +0 -114
- package/clis/openreview/openreview.test.js +0 -427
- package/clis/oschina/article.test.js +0 -361
- package/clis/osv/osv.test.js +0 -97
- package/clis/paperreview/commands.test.js +0 -243
- package/clis/paperreview/utils.test.js +0 -49
- package/clis/pixiv/detail.test.js +0 -93
- package/clis/pixiv/download.test.js +0 -97
- package/clis/pixiv/illusts.test.js +0 -99
- package/clis/pixiv/search.test.js +0 -83
- package/clis/pixiv/user.test.js +0 -100
- package/clis/powerchina/search.test.js +0 -93
- package/clis/producthunt/utils.test.js +0 -64
- package/clis/pubmed/pubmed.test.js +0 -464
- package/clis/qoder/qoder.test.js +0 -125
- package/clis/quark/utils.test.js +0 -58
- package/clis/qwen/ask.test.js +0 -36
- package/clis/qwen/utils.test.js +0 -128
- package/clis/reddit/extract-media.test.js +0 -149
- package/clis/reddit/frontpage.test.js +0 -34
- package/clis/reddit/home.test.js +0 -170
- package/clis/reddit/hot.test.js +0 -32
- package/clis/reddit/popular.test.js +0 -26
- package/clis/reddit/read.test.js +0 -402
- package/clis/reddit/reply.test.js +0 -89
- package/clis/reddit/search.test.js +0 -26
- package/clis/reddit/subreddit-info.test.js +0 -163
- package/clis/reddit/subreddit.test.js +0 -31
- package/clis/reddit/subscribed.test.js +0 -168
- package/clis/reddit/whoami.test.js +0 -105
- package/clis/rednote/navigation.test.js +0 -26
- package/clis/rednote/rednote.test.js +0 -240
- package/clis/rest-countries/rest-countries.test.js +0 -83
- package/clis/reuters/reuters.test.js +0 -299
- package/clis/rfc/rfc.test.js +0 -74
- package/clis/segmentfault/article.test.js +0 -470
- package/clis/semanticscholar/semanticscholar.test.js +0 -279
- package/clis/sinafinance/stock.test.js +0 -59
- package/clis/slock/api-base-canary.test.js +0 -62
- package/clis/slock/attachment-download.test.js +0 -102
- package/clis/slock/attachment-upload.test.js +0 -131
- package/clis/slock/attachment-url.test.js +0 -41
- package/clis/slock/bookmark-add.test.js +0 -38
- package/clis/slock/bookmark-list.test.js +0 -47
- package/clis/slock/bookmark-remove.test.js +0 -24
- package/clis/slock/channel-action.test.js +0 -65
- package/clis/slock/channel-create.test.js +0 -40
- package/clis/slock/channel-files.test.js +0 -32
- package/clis/slock/channel-info.test.js +0 -25
- package/clis/slock/channel-list.test.js +0 -37
- package/clis/slock/channel-mark.test.js +0 -49
- package/clis/slock/channel-members.test.js +0 -44
- package/clis/slock/cross-command.test.js +0 -21
- package/clis/slock/dm-list.test.js +0 -26
- package/clis/slock/error-detail-canary.test.js +0 -144
- package/clis/slock/errors.test.js +0 -29
- package/clis/slock/in-page.test.js +0 -362
- package/clis/slock/inbox-done.test.js +0 -21
- package/clis/slock/inbox-read-all.test.js +0 -20
- package/clis/slock/inbox.test.js +0 -46
- package/clis/slock/message-read.test.js +0 -83
- package/clis/slock/message-search.test.js +0 -61
- package/clis/slock/message-send.test.js +0 -127
- package/clis/slock/reaction-add.test.js +0 -36
- package/clis/slock/reaction-remove.test.js +0 -29
- package/clis/slock/resolve.test.js +0 -102
- package/clis/slock/server-list.test.js +0 -24
- package/clis/slock/server-override-canary.test.js +0 -87
- package/clis/slock/server-use.test.js +0 -48
- package/clis/slock/short-id-canary.test.js +0 -86
- package/clis/slock/site-session-canary.test.js +0 -49
- package/clis/slock/task-claim.test.js +0 -81
- package/clis/slock/task-convert.test.js +0 -82
- package/clis/slock/task-create.test.js +0 -65
- package/clis/slock/task-delete.test.js +0 -52
- package/clis/slock/task-get.test.js +0 -45
- package/clis/slock/task-list-server.test.js +0 -48
- package/clis/slock/task-list.test.js +0 -59
- package/clis/slock/task-status.test.js +0 -76
- package/clis/slock/task-unclaim.test.js +0 -49
- package/clis/slock/thread-follow.test.js +0 -34
- package/clis/slock/thread-list.test.js +0 -24
- package/clis/slock/thread-state.test.js +0 -38
- package/clis/slock/unread-summary.test.js +0 -31
- package/clis/slock/whoami.test.js +0 -23
- package/clis/smzdm/search.test.js +0 -114
- package/clis/sohu/article.test.js +0 -397
- package/clis/spotify/utils.test.js +0 -67
- package/clis/stackoverflow/stackoverflow.test.js +0 -404
- package/clis/steam/steam.test.js +0 -46
- package/clis/substack/utils.test.js +0 -44
- package/clis/suno/commands.test.js +0 -188
- package/clis/suno/download.test.js +0 -151
- package/clis/suno/generate.test.js +0 -252
- package/clis/suno/utils.test.js +0 -329
- package/clis/taobao/commands.test.js +0 -41
- package/clis/tdx/hot-rank.test.js +0 -59
- package/clis/ths/hot-rank.test.js +0 -64
- package/clis/tieba/commands.test.js +0 -79
- package/clis/tieba/utils.test.js +0 -290
- package/clis/tiktok/creator-videos.test.js +0 -113
- package/clis/tiktok/refactor.test.js +0 -389
- package/clis/tiktok/write-refactor.test.js +0 -370
- package/clis/toutiao/toutiao.test.js +0 -378
- package/clis/trae-cn/trae-cn.test.js +0 -412
- package/clis/trae-solo/trae-solo.test.js +0 -67
- package/clis/tvmaze/tvmaze.test.js +0 -93
- package/clis/twitter/bookmark-folder.test.js +0 -396
- package/clis/twitter/bookmark-folders.test.js +0 -152
- package/clis/twitter/bookmark.test.js +0 -74
- package/clis/twitter/bookmarks.test.js +0 -206
- package/clis/twitter/delete.test.js +0 -103
- package/clis/twitter/device-follow.test.js +0 -287
- package/clis/twitter/download.test.js +0 -457
- package/clis/twitter/follow-batch.test.js +0 -137
- package/clis/twitter/followers.test.js +0 -62
- package/clis/twitter/following.test.js +0 -359
- package/clis/twitter/hide-reply.test.js +0 -76
- package/clis/twitter/like.test.js +0 -73
- package/clis/twitter/likes.test.js +0 -220
- package/clis/twitter/list-add.test.js +0 -133
- package/clis/twitter/list-batch.test.js +0 -113
- package/clis/twitter/list-create.test.js +0 -169
- package/clis/twitter/list-delete.test.js +0 -102
- package/clis/twitter/list-remove.test.js +0 -147
- package/clis/twitter/list-tweets.test.js +0 -198
- package/clis/twitter/lists.test.js +0 -253
- package/clis/twitter/post.test.js +0 -334
- package/clis/twitter/profile.test.js +0 -150
- package/clis/twitter/quote.test.js +0 -230
- package/clis/twitter/reply.test.js +0 -237
- package/clis/twitter/retweet.test.js +0 -73
- package/clis/twitter/schedule.test.js +0 -86
- package/clis/twitter/scheduled-delete.test.js +0 -58
- package/clis/twitter/scheduled-list.test.js +0 -36
- package/clis/twitter/search.test.js +0 -400
- package/clis/twitter/shared.test.js +0 -1012
- package/clis/twitter/thread.test.js +0 -58
- package/clis/twitter/timeline.test.js +0 -104
- package/clis/twitter/trending.test.js +0 -15
- package/clis/twitter/tweets.test.js +0 -487
- package/clis/twitter/unbookmark.test.js +0 -73
- package/clis/twitter/unlike.test.js +0 -75
- package/clis/twitter/unretweet.test.js +0 -73
- package/clis/twitter/utils.test.js +0 -169
- package/clis/uisdc/news.test.js +0 -66
- package/clis/uiverse/_shared.test.js +0 -62
- package/clis/uiverse/navigation.test.js +0 -12
- package/clis/upwork/upwork.test.js +0 -566
- package/clis/wanfang/search.test.js +0 -23
- package/clis/web/read.test.js +0 -392
- package/clis/wechat-channels/publish.test.js +0 -144
- package/clis/weibo/delete.test.js +0 -94
- package/clis/weibo/envelope.test.js +0 -85
- package/clis/weibo/favorites.test.js +0 -114
- package/clis/weibo/publish.test.js +0 -192
- package/clis/weibo/user-posts.test.js +0 -92
- package/clis/weibo/utils.test.js +0 -36
- package/clis/weixin/article.test.js +0 -299
- package/clis/weixin/download.test.js +0 -106
- package/clis/weixin/drafts.test.js +0 -69
- package/clis/weixin/search.test.js +0 -227
- package/clis/weread/ai-outline.test.js +0 -83
- package/clis/weread/book-search.test.js +0 -242
- package/clis/weread/commands.test.js +0 -398
- package/clis/weread/private-api-regression.test.js +0 -369
- package/clis/weread/search-regression.test.js +0 -494
- package/clis/weread/utils.test.js +0 -128
- package/clis/weread-official/commands.test.js +0 -385
- package/clis/weread-official/utils.test.js +0 -242
- package/clis/wikidata/wikidata.test.js +0 -83
- package/clis/wikipedia/trending.test.js +0 -57
- package/clis/woshipm/article.test.js +0 -305
- package/clis/wttr/wttr.test.js +0 -84
- package/clis/xianyu/chat.test.js +0 -84
- package/clis/xianyu/im.test.js +0 -253
- package/clis/xianyu/item.test.js +0 -56
- package/clis/xianyu/publish.test.js +0 -220
- package/clis/xianyu/search.test.js +0 -104
- package/clis/xiaoe/xiaoe.test.js +0 -486
- package/clis/xiaohongshu/ask.test.js +0 -271
- package/clis/xiaohongshu/collection-helpers.test.js +0 -125
- package/clis/xiaohongshu/comments.test.js +0 -320
- package/clis/xiaohongshu/creator-note-detail.test.js +0 -451
- package/clis/xiaohongshu/creator-notes-summary.test.js +0 -94
- package/clis/xiaohongshu/creator-notes.test.js +0 -281
- package/clis/xiaohongshu/creator-stats.test.js +0 -24
- package/clis/xiaohongshu/delete-note.test.js +0 -177
- package/clis/xiaohongshu/download.test.js +0 -415
- package/clis/xiaohongshu/drafts.test.js +0 -172
- package/clis/xiaohongshu/feed.test.js +0 -126
- package/clis/xiaohongshu/follow.test.js +0 -211
- package/clis/xiaohongshu/liked.test.js +0 -82
- package/clis/xiaohongshu/navigation.test.js +0 -38
- package/clis/xiaohongshu/note.test.js +0 -249
- package/clis/xiaohongshu/publish.test.js +0 -1155
- package/clis/xiaohongshu/saved.test.js +0 -143
- package/clis/xiaohongshu/search.test.js +0 -394
- package/clis/xiaohongshu/user-helpers.test.js +0 -160
- package/clis/xiaohongshu/user.test.js +0 -141
- package/clis/xiaoyuzhou/auth.test.js +0 -124
- package/clis/xiaoyuzhou/download.test.js +0 -135
- package/clis/xiaoyuzhou/podcast-episodes.test.js +0 -78
- package/clis/xiaoyuzhou/transcript.test.js +0 -195
- package/clis/xiaoyuzhou/utils.test.js +0 -39
- package/clis/xueqiu/article.test.js +0 -505
- package/clis/xueqiu/comments.test.js +0 -696
- package/clis/xueqiu/danjuan-utils.test.js +0 -41
- package/clis/xueqiu/utils.test.js +0 -26
- package/clis/yahoo/search.test.js +0 -94
- package/clis/youdao/note.test.js +0 -99
- package/clis/youtube/channel.test.js +0 -283
- package/clis/youtube/feed.test.js +0 -131
- package/clis/youtube/transcript-group.test.js +0 -99
- package/clis/youtube/transcript.test.js +0 -296
- package/clis/youtube/utils.test.js +0 -84
- package/clis/youtube/video.test.js +0 -111
- package/clis/yuanbao/ask.test.js +0 -124
- package/clis/yuanbao/new.test.js +0 -30
- package/clis/yuanbao/shared.test.js +0 -80
- package/clis/yuque/article.test.js +0 -415
- package/clis/zhihu/answer-comments.test.js +0 -287
- package/clis/zhihu/answer-detail.test.js +0 -338
- package/clis/zhihu/answer.test.js +0 -54
- package/clis/zhihu/article-transform.test.js +0 -43
- package/clis/zhihu/collection.test.js +0 -337
- package/clis/zhihu/collections.test.js +0 -182
- package/clis/zhihu/comment.test.js +0 -50
- package/clis/zhihu/download.test.js +0 -12
- package/clis/zhihu/favorite.test.js +0 -59
- package/clis/zhihu/follow.test.js +0 -42
- package/clis/zhihu/followers.test.js +0 -42
- package/clis/zhihu/following.test.js +0 -44
- package/clis/zhihu/like.test.js +0 -41
- package/clis/zhihu/pins.test.js +0 -44
- package/clis/zhihu/question.test.js +0 -251
- package/clis/zhihu/recommend.test.js +0 -143
- package/clis/zhihu/search.test.js +0 -198
- package/clis/zhihu/target.test.js +0 -77
- package/clis/zhihu/text.test.js +0 -24
- package/clis/zhihu/user-answers.test.js +0 -69
- package/clis/zhihu/user-articles.test.js +0 -44
- package/clis/zhihu/user.test.js +0 -73
- package/clis/zhihu/write-shared.test.js +0 -179
- package/clis/zlibrary/commands.test.js +0 -65
- package/clis/zsxq/search.test.js +0 -24
- package/clis/zsxq/topic.test.js +0 -30
- package/clis/zsxq/topics.test.js +0 -24
- package/clis/zsxq/utils.test.js +0 -31
- package/dist/src/adapter-shadow.test.js +0 -49
- package/dist/src/adapter-source.test.js +0 -29
- package/dist/src/browser/analyze.test.js +0 -209
- package/dist/src/browser/article-extract.e2e.test.js +0 -105
- package/dist/src/browser/article-extract.test.js +0 -94
- package/dist/src/browser/ax-snapshot.test.js +0 -91
- package/dist/src/browser/base-page.test.js +0 -803
- package/dist/src/browser/bridge-readiness.test.js +0 -57
- package/dist/src/browser/cdp-click-fixture.test.js +0 -87
- package/dist/src/browser/cdp.test.js +0 -79
- package/dist/src/browser/compound.test.js +0 -175
- package/dist/src/browser/daemon-client.test.js +0 -318
- package/dist/src/browser/dom-helpers.test.js +0 -106
- package/dist/src/browser/dom-snapshot.test.js +0 -313
- package/dist/src/browser/errors.test.js +0 -60
- package/dist/src/browser/extract.test.js +0 -129
- package/dist/src/browser/find.test.js +0 -180
- package/dist/src/browser/html-tree.test.js +0 -181
- package/dist/src/browser/network-cache.test.js +0 -75
- package/dist/src/browser/network-key.test.js +0 -49
- package/dist/src/browser/page.test.js +0 -406
- package/dist/src/browser/shape-filter.test.js +0 -101
- package/dist/src/browser/shape.test.js +0 -82
- package/dist/src/browser/stealth.test.js +0 -134
- package/dist/src/browser/target-errors.test.js +0 -94
- package/dist/src/browser/target-resolver.test.js +0 -118
- package/dist/src/browser/utils.test.js +0 -29
- package/dist/src/browser/verify-fixture.test.js +0 -219
- package/dist/src/browser.test.js +0 -291
- package/dist/src/build-manifest.test.js +0 -341
- package/dist/src/capabilityRouting.test.js +0 -63
- package/dist/src/cli-argv-preprocess.test.js +0 -304
- package/dist/src/cli.test.js +0 -3003
- package/dist/src/commanderAdapter.test.js +0 -386
- package/dist/src/commands/auth.test.js +0 -309
- package/dist/src/commands/daemon.test.js +0 -283
- package/dist/src/completion.test.js +0 -24
- package/dist/src/convention-audit.test.js +0 -247
- package/dist/src/daemon.test.js +0 -60
- package/dist/src/doctor.test.js +0 -263
- package/dist/src/download/article-download.test.js +0 -235
- package/dist/src/download/index.test.js +0 -177
- package/dist/src/download/media-download.test.js +0 -112
- package/dist/src/download/progress.test.js +0 -36
- package/dist/src/electron-apps.test.js +0 -76
- package/dist/src/engine.test.js +0 -337
- package/dist/src/errors.test.js +0 -109
- package/dist/src/execution.test.js +0 -645
- package/dist/src/extension-manifest-regression.test.js +0 -12
- package/dist/src/external.test.js +0 -188
- package/dist/src/help.test.js +0 -58
- package/dist/src/hooks.test.js +0 -92
- package/dist/src/interceptor.test.js +0 -81
- package/dist/src/launcher.test.js +0 -191
- package/dist/src/node-network.test.js +0 -81
- package/dist/src/observation/artifact.test.js +0 -121
- package/dist/src/observation/manager.test.js +0 -13
- package/dist/src/observation/redaction.test.js +0 -32
- package/dist/src/observation/retention.test.js +0 -118
- package/dist/src/observation/ring-buffer.test.js +0 -22
- package/dist/src/output.test.js +0 -79
- package/dist/src/package-exports.test.js +0 -112
- package/dist/src/pipeline/executor.test.js +0 -182
- package/dist/src/pipeline/steps/download.test.js +0 -102
- package/dist/src/pipeline/steps/fetch.test.js +0 -188
- package/dist/src/pipeline/template.test.js +0 -212
- package/dist/src/pipeline/transform.test.js +0 -174
- package/dist/src/plugin-manifest.test.js +0 -179
- package/dist/src/plugin-scaffold.test.js +0 -83
- package/dist/src/plugin.test.js +0 -1349
- package/dist/src/rate-limit.test.js +0 -66
- package/dist/src/registry.test.js +0 -209
- package/dist/src/runtime-detect.test.js +0 -39
- package/dist/src/serialization.test.js +0 -78
- package/dist/src/skills.test.js +0 -71
- package/dist/src/snapshotFormatter.test.js +0 -521
- package/dist/src/tui.test.js +0 -19
- package/dist/src/update-check.test.js +0 -116
- package/dist/src/utils.test.js +0 -155
- package/dist/src/validate.test.js +0 -90
- package/dist/src/verify.test.js +0 -63
- package/dist/src/weixin-download.test.js +0 -45
package/clis/instagram/post.js
CHANGED
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
import { cli, Strategy } from '@jackwener/opencli/registry';
|
|
4
|
-
import { ArgumentError, AuthRequiredError, CommandExecutionError } from '@jackwener/opencli/errors';
|
|
5
|
-
import { installInstagramProtocolCapture, readInstagramProtocolCapture, } from './_shared/protocol-capture.js';
|
|
6
|
-
import { publishMediaViaPrivateApi, publishImagesViaPrivateApi, resolveInstagramPrivatePublishConfig, } from './_shared/private-publish.js';
|
|
7
|
-
import { resolveInstagramRuntimeInfo } from './_shared/runtime-info.js';
|
|
8
|
-
const INSTAGRAM_HOME_URL = 'https://www.instagram.com/';
|
|
9
|
-
const SUPPORTED_IMAGE_EXTENSIONS = new Set(['.jpg', '.jpeg', '.png', '.webp']);
|
|
10
|
-
const SUPPORTED_VIDEO_EXTENSIONS = new Set(['.mp4']);
|
|
11
|
-
const MAX_MEDIA_ITEMS = 10;
|
|
12
|
-
const INSTAGRAM_PROTOCOL_TRACE_OUTPUT_PATH = '/tmp/instagram_post_protocol_trace.json';
|
|
13
|
-
async function gotoInstagramHome(page, forceReload = false) {
|
|
14
|
-
if (forceReload) {
|
|
15
|
-
await page.goto(`${INSTAGRAM_HOME_URL}?__opencli_reset=${Date.now()}`);
|
|
16
|
-
await page.wait({ time: 1 });
|
|
17
|
-
}
|
|
18
|
-
await page.goto(INSTAGRAM_HOME_URL);
|
|
19
|
-
}
|
|
20
|
-
export function buildEnsureComposerOpenJs() {
|
|
21
|
-
return `
|
|
1
|
+
import*as w from"node:fs";import*as W from"node:path";import{cli as s,Strategy as n}from"@jackwener/opencli/registry";import{ArgumentError as V,AuthRequiredError as R,CommandExecutionError as Y}from"@jackwener/opencli/errors";import{installInstagramProtocolCapture as u,readInstagramProtocolCapture as i}from"./_shared/protocol-capture.js";import{publishMediaViaPrivateApi as r,publishImagesViaPrivateApi as p,resolveInstagramPrivatePublishConfig as a}from"./_shared/private-publish.js";import{resolveInstagramRuntimeInfo as t}from"./_shared/runtime-info.js";import{throwIfFileAccessDenied as e}from"../_shared/video-publish.js";const z="https://www.instagram.com/",jj=new Set([".jpg",".jpeg",".png",".webp"]),Gj=new Set([".mp4"]),C=10,Nj="/tmp/instagram_post_protocol_trace.json";async function b(j,G=!1){if(G){await j.goto(`${z}?__opencli_reset=${Date.now()}`);await j.wait({time:1})}await j.goto(z)}export function buildEnsureComposerOpenJs(){return`
|
|
22
2
|
(() => {
|
|
23
3
|
const path = window.location?.pathname || '';
|
|
24
4
|
const onLoginRoute = /\\/accounts\\/login\\/?/.test(path);
|
|
@@ -50,10 +30,7 @@ export function buildEnsureComposerOpenJs() {
|
|
|
50
30
|
|
|
51
31
|
return { ok: true };
|
|
52
32
|
})()
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
export function buildPublishStatusProbeJs() {
|
|
56
|
-
return `
|
|
33
|
+
`}export function buildPublishStatusProbeJs(){return`
|
|
57
34
|
(() => {
|
|
58
35
|
const isVisible = (el) => {
|
|
59
36
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -84,247 +61,7 @@ export function buildPublishStatusProbeJs() {
|
|
|
84
61
|
const settled = !shared && !composerOpen && !/sharing/.test(visibleText);
|
|
85
62
|
return { ok: shared, failed, settled, url: /\\/p\\//.test(url) ? url : '' };
|
|
86
63
|
})()
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
function requirePage(page) {
|
|
90
|
-
if (!page)
|
|
91
|
-
throw new CommandExecutionError('Browser session required for instagram post');
|
|
92
|
-
return page;
|
|
93
|
-
}
|
|
94
|
-
function validateMixedMediaItems(inputs) {
|
|
95
|
-
if (!inputs.length) {
|
|
96
|
-
throw new ArgumentError('Argument "media" is required.', 'Provide --media /path/to/file.jpg or --media /path/a.jpg,/path/b.mp4');
|
|
97
|
-
}
|
|
98
|
-
if (inputs.length > MAX_MEDIA_ITEMS) {
|
|
99
|
-
throw new ArgumentError(`Too many media items: ${inputs.length}`, `Instagram carousel posts support at most ${MAX_MEDIA_ITEMS} items`);
|
|
100
|
-
}
|
|
101
|
-
const items = inputs.map((input) => {
|
|
102
|
-
const resolved = path.resolve(String(input || '').trim());
|
|
103
|
-
if (!resolved) {
|
|
104
|
-
throw new ArgumentError('Media path cannot be empty');
|
|
105
|
-
}
|
|
106
|
-
if (!fs.existsSync(resolved)) {
|
|
107
|
-
throw new ArgumentError(`Media file not found: ${resolved}`);
|
|
108
|
-
}
|
|
109
|
-
const ext = path.extname(resolved).toLowerCase();
|
|
110
|
-
if (SUPPORTED_IMAGE_EXTENSIONS.has(ext)) {
|
|
111
|
-
return { type: 'image', filePath: resolved };
|
|
112
|
-
}
|
|
113
|
-
if (SUPPORTED_VIDEO_EXTENSIONS.has(ext)) {
|
|
114
|
-
return { type: 'video', filePath: resolved };
|
|
115
|
-
}
|
|
116
|
-
throw new ArgumentError(`Unsupported media format: ${ext}`, 'Supported formats: images (.jpg, .jpeg, .png, .webp) and videos (.mp4)');
|
|
117
|
-
});
|
|
118
|
-
return items;
|
|
119
|
-
}
|
|
120
|
-
function normalizePostMediaItems(kwargs) {
|
|
121
|
-
const media = String(kwargs.media ?? '').trim();
|
|
122
|
-
return validateMixedMediaItems(media.split(',').map((part) => part.trim()).filter(Boolean));
|
|
123
|
-
}
|
|
124
|
-
function validateInstagramPostArgs(kwargs) {
|
|
125
|
-
const media = kwargs.media;
|
|
126
|
-
if (media === undefined) {
|
|
127
|
-
throw new ArgumentError('Argument "media" is required.', 'Provide --media /path/to/file.jpg or --media /path/a.jpg,/path/b.mp4');
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
function isSafePrivateRouteFallbackError(error) {
|
|
131
|
-
if (!(error instanceof CommandExecutionError))
|
|
132
|
-
return false;
|
|
133
|
-
return error.message.startsWith('Instagram private publish')
|
|
134
|
-
|| error.message.startsWith('Instagram private route');
|
|
135
|
-
}
|
|
136
|
-
function buildInstagramSuccessResult(mediaItems, url) {
|
|
137
|
-
return [{
|
|
138
|
-
status: '✅ Posted',
|
|
139
|
-
detail: describePostDetail(mediaItems),
|
|
140
|
-
url,
|
|
141
|
-
}];
|
|
142
|
-
}
|
|
143
|
-
function buildFallbackHint(privateError, uiError) {
|
|
144
|
-
const privateMessage = privateError instanceof Error ? privateError.message : String(privateError);
|
|
145
|
-
const uiMessage = uiError instanceof Error ? uiError.message : String(uiError);
|
|
146
|
-
return `Private route failed first: ${privateMessage}. UI fallback then failed: ${uiMessage}`;
|
|
147
|
-
}
|
|
148
|
-
async function executePrivateInstagramPost(input) {
|
|
149
|
-
const privateConfig = await resolveInstagramPrivatePublishConfig(input.page);
|
|
150
|
-
const privateResult = input.mediaItems.every((item) => item.type === 'image')
|
|
151
|
-
? await publishImagesViaPrivateApi({
|
|
152
|
-
page: input.page,
|
|
153
|
-
imagePaths: input.mediaItems.map((item) => item.filePath),
|
|
154
|
-
caption: input.content,
|
|
155
|
-
apiContext: privateConfig.apiContext,
|
|
156
|
-
jazoest: privateConfig.jazoest,
|
|
157
|
-
})
|
|
158
|
-
: await publishMediaViaPrivateApi({
|
|
159
|
-
page: input.page,
|
|
160
|
-
mediaItems: input.mediaItems,
|
|
161
|
-
caption: input.content,
|
|
162
|
-
apiContext: privateConfig.apiContext,
|
|
163
|
-
jazoest: privateConfig.jazoest,
|
|
164
|
-
});
|
|
165
|
-
const url = privateResult.code
|
|
166
|
-
? new URL(`/p/${privateResult.code}/`, INSTAGRAM_HOME_URL).toString()
|
|
167
|
-
: await resolveLatestPostUrl(input.page, input.existingPostPaths);
|
|
168
|
-
return buildInstagramSuccessResult(input.mediaItems, url);
|
|
169
|
-
}
|
|
170
|
-
async function executeUiInstagramPost(input) {
|
|
171
|
-
let lastError;
|
|
172
|
-
let lastSpecificCommandError = null;
|
|
173
|
-
for (let attempt = 0; attempt < input.commandAttemptBudget; attempt++) {
|
|
174
|
-
let shareClicked = false;
|
|
175
|
-
try {
|
|
176
|
-
await gotoInstagramHome(input.page, input.forceFreshStart || attempt > 0);
|
|
177
|
-
await input.installProtocolCapture();
|
|
178
|
-
await input.page.wait({ time: 2 });
|
|
179
|
-
await dismissResidualDialogs(input.page);
|
|
180
|
-
await ensureComposerOpen(input.page);
|
|
181
|
-
const uploadSelectors = await resolveUploadSelectors(input.page, input.mediaItems);
|
|
182
|
-
if (input.preUploadDelaySeconds > 0) {
|
|
183
|
-
await input.page.wait({ time: input.preUploadDelaySeconds });
|
|
184
|
-
}
|
|
185
|
-
let uploaded = false;
|
|
186
|
-
let uploadFailure = null;
|
|
187
|
-
for (const selector of uploadSelectors) {
|
|
188
|
-
let activeSelector = selector;
|
|
189
|
-
for (let uploadAttempt = 0; uploadAttempt < input.uploadAttemptBudget; uploadAttempt++) {
|
|
190
|
-
await uploadMedia(input.page, input.mediaItems, activeSelector);
|
|
191
|
-
const uploadState = await waitForPreviewMaybe(input.page, input.previewProbeWindowSeconds);
|
|
192
|
-
if (uploadState.state === 'preview') {
|
|
193
|
-
uploaded = true;
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
if (uploadState.state === 'failed') {
|
|
197
|
-
uploadFailure = makeUploadFailure(uploadState.detail);
|
|
198
|
-
for (let inlineRetry = 0; inlineRetry < input.inlineUploadRetryBudget; inlineRetry++) {
|
|
199
|
-
const clickedRetry = await clickVisibleUploadRetry(input.page);
|
|
200
|
-
if (!clickedRetry)
|
|
201
|
-
break;
|
|
202
|
-
await input.page.wait({ time: 3 });
|
|
203
|
-
const retriedState = await waitForPreviewMaybe(input.page, Math.max(3, Math.floor(input.previewProbeWindowSeconds / 2)));
|
|
204
|
-
if (retriedState.state === 'preview') {
|
|
205
|
-
uploaded = true;
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
if (retriedState.state !== 'failed')
|
|
209
|
-
break;
|
|
210
|
-
}
|
|
211
|
-
if (uploaded)
|
|
212
|
-
break;
|
|
213
|
-
await dismissUploadErrorDialog(input.page);
|
|
214
|
-
await dismissResidualDialogs(input.page);
|
|
215
|
-
if (uploadAttempt < input.uploadAttemptBudget - 1) {
|
|
216
|
-
try {
|
|
217
|
-
await input.drainProtocolCapture();
|
|
218
|
-
await gotoInstagramHome(input.page, true);
|
|
219
|
-
await input.installProtocolCapture();
|
|
220
|
-
await input.page.wait({ time: 2 });
|
|
221
|
-
await dismissResidualDialogs(input.page);
|
|
222
|
-
await ensureComposerOpen(input.page);
|
|
223
|
-
activeSelector = await resolveFreshUploadSelector(input.page, activeSelector, input.mediaItems);
|
|
224
|
-
if (input.preUploadDelaySeconds > 0) {
|
|
225
|
-
await input.page.wait({ time: input.preUploadDelaySeconds });
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
catch {
|
|
229
|
-
throw uploadFailure;
|
|
230
|
-
}
|
|
231
|
-
await input.page.wait({ time: 1.5 });
|
|
232
|
-
continue;
|
|
233
|
-
}
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
break;
|
|
237
|
-
}
|
|
238
|
-
if (uploaded)
|
|
239
|
-
break;
|
|
240
|
-
}
|
|
241
|
-
if (!uploaded) {
|
|
242
|
-
if (uploadFailure)
|
|
243
|
-
throw uploadFailure;
|
|
244
|
-
await waitForPreview(input.page, input.finalPreviewWaitSeconds);
|
|
245
|
-
}
|
|
246
|
-
try {
|
|
247
|
-
await advanceToCaptionEditor(input.page);
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
await rethrowUploadFailureIfPresent(input.page, error);
|
|
251
|
-
}
|
|
252
|
-
if (input.content) {
|
|
253
|
-
await fillCaption(input.page, input.content);
|
|
254
|
-
await ensureCaptionFilled(input.page, input.content);
|
|
255
|
-
}
|
|
256
|
-
if (input.preShareDelaySeconds > 0) {
|
|
257
|
-
await input.page.wait({ time: input.preShareDelaySeconds });
|
|
258
|
-
}
|
|
259
|
-
await clickAction(input.page, ['Share', '分享'], 'caption');
|
|
260
|
-
shareClicked = true;
|
|
261
|
-
let url = '';
|
|
262
|
-
try {
|
|
263
|
-
url = await waitForPublishSuccess(input.page);
|
|
264
|
-
}
|
|
265
|
-
catch (error) {
|
|
266
|
-
if (error instanceof CommandExecutionError
|
|
267
|
-
&& error.message === 'Instagram post share failed'
|
|
268
|
-
&& await clickVisibleShareRetry(input.page)) {
|
|
269
|
-
await input.page.wait({ time: Math.max(2, input.preShareDelaySeconds) });
|
|
270
|
-
url = await waitForPublishSuccess(input.page);
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
throw error;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
await input.drainProtocolCapture();
|
|
277
|
-
if (!url) {
|
|
278
|
-
url = await resolveLatestPostUrl(input.page, input.existingPostPaths);
|
|
279
|
-
}
|
|
280
|
-
return buildInstagramSuccessResult(input.mediaItems, url);
|
|
281
|
-
}
|
|
282
|
-
catch (error) {
|
|
283
|
-
lastError = error;
|
|
284
|
-
if (error instanceof CommandExecutionError && error.message !== 'Failed to open Instagram post composer') {
|
|
285
|
-
lastSpecificCommandError = error;
|
|
286
|
-
}
|
|
287
|
-
if (error instanceof AuthRequiredError)
|
|
288
|
-
throw error;
|
|
289
|
-
if (shareClicked) {
|
|
290
|
-
throw error;
|
|
291
|
-
}
|
|
292
|
-
if (!(error instanceof CommandExecutionError) || attempt === input.commandAttemptBudget - 1) {
|
|
293
|
-
if (error instanceof CommandExecutionError && error.message === 'Failed to open Instagram post composer' && lastSpecificCommandError) {
|
|
294
|
-
throw lastSpecificCommandError;
|
|
295
|
-
}
|
|
296
|
-
throw error;
|
|
297
|
-
}
|
|
298
|
-
let resetWindow = false;
|
|
299
|
-
if (input.mediaItems.length >= 10 && input.page.closeWindow) {
|
|
300
|
-
try {
|
|
301
|
-
await input.drainProtocolCapture();
|
|
302
|
-
await input.page.closeWindow();
|
|
303
|
-
resetWindow = true;
|
|
304
|
-
}
|
|
305
|
-
catch {
|
|
306
|
-
// Best-effort: a fresh automation window is safer than reusing a polluted one.
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
if (!resetWindow) {
|
|
310
|
-
await dismissResidualDialogs(input.page);
|
|
311
|
-
await input.page.wait({ time: 1 });
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
throw lastError instanceof Error ? lastError : new CommandExecutionError('Instagram post failed');
|
|
316
|
-
}
|
|
317
|
-
async function ensureComposerOpen(page) {
|
|
318
|
-
const result = await page.evaluate(buildEnsureComposerOpenJs());
|
|
319
|
-
if (!result?.ok) {
|
|
320
|
-
if (result?.reason === 'auth')
|
|
321
|
-
throw new AuthRequiredError('www.instagram.com', 'Instagram login required before posting');
|
|
322
|
-
throw new CommandExecutionError('Failed to open Instagram post composer');
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
async function dismissResidualDialogs(page) {
|
|
326
|
-
for (let attempt = 0; attempt < 4; attempt++) {
|
|
327
|
-
const result = await page.evaluate(`
|
|
64
|
+
`}function Oj(j){if(!j)throw new Y("Browser session required for instagram post");return j}function Qj(j){if(!j.length)throw new V('Argument "media" is required.',"Provide --media /path/to/file.jpg or --media /path/a.jpg,/path/b.mp4");if(j.length>C)throw new V(`Too many media items: ${j.length}`,`Instagram carousel posts support at most ${C} items`);return j.map((N)=>{const O=W.resolve(String(N||"").trim());if(!O)throw new V("Media path cannot be empty");if(!w.existsSync(O))throw new V(`Media file not found: ${O}`);const Q=W.extname(O).toLowerCase();if(jj.has(Q))return{type:"image",filePath:O};if(Gj.has(Q))return{type:"video",filePath:O};throw new V(`Unsupported media format: ${Q}`,"Supported formats: images (.jpg, .jpeg, .png, .webp) and videos (.mp4)")})}function Xj(j){const G=String(j.media??"").trim();return Qj(G.split(",").map((N)=>N.trim()).filter(Boolean))}function Yj(j){if(j.media===void 0)throw new V('Argument "media" is required.',"Provide --media /path/to/file.jpg or --media /path/a.jpg,/path/b.mp4")}function Zj(j){if(!(j instanceof Y))return!1;return j.message.startsWith("Instagram private publish")||j.message.startsWith("Instagram private route")}function f(j,G){return[{status:"✅ Posted",detail:Vj(j),url:G}]}function _j(j,G){const N=j instanceof Error?j.message:String(j),O=G instanceof Error?G.message:String(G);return`Private route failed first: ${N}. UI fallback then failed: ${O}`}async function $j(j){const G=await a(j.page),N=j.mediaItems.every((Q)=>Q.type==="image")?await p({page:j.page,imagePaths:j.mediaItems.map((Q)=>Q.filePath),caption:j.content,apiContext:G.apiContext,jazoest:G.jazoest}):await r({page:j.page,mediaItems:j.mediaItems,caption:j.content,apiContext:G.apiContext,jazoest:G.jazoest}),O=N.code?new URL(`/p/${N.code}/`,z).toString():await g(j.page,j.existingPostPaths);return f(j.mediaItems,O)}async function qj(j){let G,N=null;for(let O=0;O<j.commandAttemptBudget;O++){let Q=!1;try{await b(j.page,j.forceFreshStart||O>0);await j.installProtocolCapture();await j.page.wait({time:2});await A(j.page);await x(j.page);const X=await h(j.page,j.mediaItems);if(j.preUploadDelaySeconds>0)await j.page.wait({time:j.preUploadDelaySeconds});let Z=!1,_=null;for(const q of X){let J=q;for(let B=0;B<j.uploadAttemptBudget;B++){await Lj(j.page,j.mediaItems,J);const K=await P(j.page,j.previewProbeWindowSeconds);if(K.state==="preview"){Z=!0;break}if(K.state==="failed"){_=F(K.detail);for(let T=0;T<j.inlineUploadRetryBudget;T++){if(!await Rj(j.page))break;await j.page.wait({time:3});const D=await P(j.page,Math.max(3,Math.floor(j.previewProbeWindowSeconds/2)));if(D.state==="preview"){Z=!0;break}if(D.state!=="failed")break}if(Z)break;await Wj(j.page);await A(j.page);if(B<j.uploadAttemptBudget-1){try{await j.drainProtocolCapture();await b(j.page,!0);await j.installProtocolCapture();await j.page.wait({time:2});await A(j.page);await x(j.page);J=await E(j.page,J,j.mediaItems);if(j.preUploadDelaySeconds>0)await j.page.wait({time:j.preUploadDelaySeconds})}catch{throw _}await j.page.wait({time:1.5});continue}break}break}if(Z)break}if(!Z){if(_)throw _;await xj(j.page,j.finalPreviewWaitSeconds)}try{await wj(j.page)}catch(q){await Cj(j.page,q)}if(j.content){await kj(j.page,j.content);await fj(j.page,j.content)}if(j.preShareDelaySeconds>0)await j.page.wait({time:j.preShareDelaySeconds});await v(j.page,["Share","分享"],"caption");Q=!0;let $="";try{$=await c(j.page)}catch(q){if(q instanceof Y&&q.message==="Instagram post share failed"&&await yj(j.page)){await j.page.wait({time:Math.max(2,j.preShareDelaySeconds)});$=await c(j.page)}else throw q}await j.drainProtocolCapture();if(!$)$=await g(j.page,j.existingPostPaths);return f(j.mediaItems,$)}catch(X){G=X;if(X instanceof Y&&X.message!=="Failed to open Instagram post composer")N=X;if(X instanceof R)throw X;if(Q)throw X;if(!(X instanceof Y)||O===j.commandAttemptBudget-1){if(X instanceof Y&&X.message==="Failed to open Instagram post composer"&&N)throw N;throw X}let Z=!1;if(j.mediaItems.length>=10&&j.page.closeWindow)try{await j.drainProtocolCapture();await j.page.closeWindow();Z=!0}catch{}if(!Z){await A(j.page);await j.page.wait({time:1})}}}throw G instanceof Error?G:new Y("Instagram post failed")}async function x(j){const G=await j.evaluate(buildEnsureComposerOpenJs());if(!G?.ok){if(G?.reason==="auth")throw new R("www.instagram.com","Instagram login required before posting");throw new Y("Failed to open Instagram post composer")}}async function A(j){for(let G=0;G<4;G++){if(!(await j.evaluate(`
|
|
328
65
|
(() => {
|
|
329
66
|
const isVisible = (el) => {
|
|
330
67
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -368,15 +105,7 @@ async function dismissResidualDialogs(page) {
|
|
|
368
105
|
|
|
369
106
|
return { ok: false };
|
|
370
107
|
})()
|
|
371
|
-
`);
|
|
372
|
-
if (!result?.ok)
|
|
373
|
-
return;
|
|
374
|
-
await page.wait({ time: 0.5 });
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
async function findUploadSelectors(page, mediaItems) {
|
|
378
|
-
const includesVideo = mediaItems.some((item) => item.type === 'video');
|
|
379
|
-
const result = await page.evaluate(`
|
|
108
|
+
`))?.ok)return;await j.wait({time:0.5})}}async function k(j,G){const N=G.some((Q)=>Q.type==="video"),O=await j.evaluate(`
|
|
380
109
|
((includesVideo) => {
|
|
381
110
|
const isVisible = (el) => {
|
|
382
111
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -435,93 +164,25 @@ async function findUploadSelectors(page, mediaItems) {
|
|
|
435
164
|
return '[data-opencli-ig-upload-index="' + index + '"]';
|
|
436
165
|
});
|
|
437
166
|
return { ok: true, selectors };
|
|
438
|
-
})(${JSON.stringify(
|
|
439
|
-
`);
|
|
440
|
-
if (!result?.ok || !result.selectors?.length) {
|
|
441
|
-
throw new CommandExecutionError('Instagram upload input not found', 'Open the new-post composer in a logged-in browser session and retry');
|
|
442
|
-
}
|
|
443
|
-
return result.selectors;
|
|
444
|
-
}
|
|
445
|
-
async function resolveUploadSelectors(page, mediaItems) {
|
|
446
|
-
try {
|
|
447
|
-
return await findUploadSelectors(page, mediaItems);
|
|
448
|
-
}
|
|
449
|
-
catch (error) {
|
|
450
|
-
if (!(error instanceof CommandExecutionError) || !error.message.includes('upload input not found')) {
|
|
451
|
-
throw error;
|
|
452
|
-
}
|
|
453
|
-
await ensureComposerOpen(page);
|
|
454
|
-
await page.wait({ time: 1.5 });
|
|
455
|
-
try {
|
|
456
|
-
return await findUploadSelectors(page, mediaItems);
|
|
457
|
-
}
|
|
458
|
-
catch (retryError) {
|
|
459
|
-
if (!(retryError instanceof CommandExecutionError) || !retryError.message.includes('upload input not found')) {
|
|
460
|
-
throw retryError;
|
|
461
|
-
}
|
|
462
|
-
await gotoInstagramHome(page, true);
|
|
463
|
-
await page.wait({ time: 2 });
|
|
464
|
-
await dismissResidualDialogs(page);
|
|
465
|
-
await ensureComposerOpen(page);
|
|
466
|
-
await page.wait({ time: 2 });
|
|
467
|
-
return findUploadSelectors(page, mediaItems);
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
function extractSelectorIndex(selector) {
|
|
472
|
-
const match = selector.match(/data-opencli-ig-upload-index="(\d+)"/);
|
|
473
|
-
if (!match)
|
|
474
|
-
return null;
|
|
475
|
-
const index = Number.parseInt(match[1] || '', 10);
|
|
476
|
-
return Number.isNaN(index) ? null : index;
|
|
477
|
-
}
|
|
478
|
-
async function resolveFreshUploadSelector(page, previousSelector, mediaItems) {
|
|
479
|
-
const selectors = await resolveUploadSelectors(page, mediaItems);
|
|
480
|
-
const index = extractSelectorIndex(previousSelector);
|
|
481
|
-
if (index !== null && selectors[index])
|
|
482
|
-
return selectors[index];
|
|
483
|
-
return selectors[0] || previousSelector;
|
|
484
|
-
}
|
|
485
|
-
async function injectImageViaBrowser(page, imagePaths, selector) {
|
|
486
|
-
const images = imagePaths.map((imagePath) => {
|
|
487
|
-
const ext = path.extname(imagePath).toLowerCase();
|
|
488
|
-
const mimeType = ext === '.png'
|
|
489
|
-
? 'image/png'
|
|
490
|
-
: ext === '.webp'
|
|
491
|
-
? 'image/webp'
|
|
492
|
-
: 'image/jpeg';
|
|
493
|
-
return {
|
|
494
|
-
name: path.basename(imagePath),
|
|
495
|
-
type: mimeType,
|
|
496
|
-
base64: fs.readFileSync(imagePath).toString('base64'),
|
|
497
|
-
};
|
|
498
|
-
});
|
|
499
|
-
const chunkKey = `__opencliInstagramUpload_${Date.now()}_${Math.random().toString(36).slice(2)}`;
|
|
500
|
-
const chunkSize = 256 * 1024;
|
|
501
|
-
await page.evaluate(`
|
|
167
|
+
})(${JSON.stringify(N)})
|
|
168
|
+
`);if(!O?.ok||!O.selectors?.length)throw new Y("Instagram upload input not found","Open the new-post composer in a logged-in browser session and retry");return O.selectors}async function h(j,G){try{return await k(j,G)}catch(N){if(!(N instanceof Y)||!N.message.includes("upload input not found"))throw N;await x(j);await j.wait({time:1.5});try{return await k(j,G)}catch(O){if(!(O instanceof Y)||!O.message.includes("upload input not found"))throw O;await b(j,!0);await j.wait({time:2});await A(j);await x(j);await j.wait({time:2});return k(j,G)}}}function Hj(j){const G=j.match(/data-opencli-ig-upload-index="(\d+)"/);if(!G)return null;const N=Number.parseInt(G[1]||"",10);return Number.isNaN(N)?null:N}async function E(j,G,N){const O=await h(j,N),Q=Hj(G);if(Q!==null&&O[Q])return O[Q];return O[0]||G}async function Jj(j,G,N){const O=G.map(($)=>{const q=W.extname($).toLowerCase(),J=q===".png"?"image/png":q===".webp"?"image/webp":"image/jpeg";return{name:W.basename($),type:J,base64:w.readFileSync($).toString("base64")}}),Q=`__opencliInstagramUpload_${Date.now()}_${Math.random().toString(36).slice(2)}`,X=262144;await j.evaluate(`
|
|
502
169
|
(() => {
|
|
503
|
-
window[${JSON.stringify(
|
|
170
|
+
window[${JSON.stringify(Q)}] = [];
|
|
504
171
|
return { ok: true };
|
|
505
172
|
})()
|
|
506
|
-
`);
|
|
507
|
-
const payload = JSON.stringify(images);
|
|
508
|
-
for (let offset = 0; offset < payload.length; offset += chunkSize) {
|
|
509
|
-
const chunk = payload.slice(offset, offset + chunkSize);
|
|
510
|
-
await page.evaluate(`
|
|
173
|
+
`);const Z=JSON.stringify(O);for(let $=0;$<Z.length;$+=X){const q=Z.slice($,$+X);await j.evaluate(`
|
|
511
174
|
(() => {
|
|
512
|
-
const key = ${JSON.stringify(
|
|
513
|
-
const chunk = ${JSON.stringify(
|
|
175
|
+
const key = ${JSON.stringify(Q)};
|
|
176
|
+
const chunk = ${JSON.stringify(q)};
|
|
514
177
|
const parts = Array.isArray(window[key]) ? window[key] : [];
|
|
515
178
|
parts.push(chunk);
|
|
516
179
|
window[key] = parts;
|
|
517
180
|
return { ok: true, count: parts.length };
|
|
518
181
|
})()
|
|
519
|
-
`)
|
|
520
|
-
}
|
|
521
|
-
const result = await page.evaluate(`
|
|
182
|
+
`)}const _=await j.evaluate(`
|
|
522
183
|
(() => {
|
|
523
|
-
const selector = ${JSON.stringify(
|
|
524
|
-
const key = ${JSON.stringify(
|
|
184
|
+
const selector = ${JSON.stringify(N)};
|
|
185
|
+
const key = ${JSON.stringify(Q)};
|
|
525
186
|
const payload = JSON.parse(Array.isArray(window[key]) ? window[key].join('') : '[]');
|
|
526
187
|
|
|
527
188
|
const cleanup = () => { try { delete window[key]; } catch {} };
|
|
@@ -551,24 +212,15 @@ async function injectImageViaBrowser(page, imagePaths, selector) {
|
|
|
551
212
|
return { ok: false, error: String(error) };
|
|
552
213
|
}
|
|
553
214
|
})()
|
|
554
|
-
`);
|
|
555
|
-
if (!result?.ok) {
|
|
556
|
-
throw new CommandExecutionError(result?.error || 'Instagram fallback file injection failed');
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
async function dispatchUploadEvents(page, selector) {
|
|
560
|
-
await page.evaluate(`
|
|
215
|
+
`);if(!_?.ok)throw new Y(_?.error||"Instagram fallback file injection failed")}async function Tj(j,G){await j.evaluate(`
|
|
561
216
|
(() => {
|
|
562
|
-
const input = document.querySelector(${JSON.stringify(
|
|
217
|
+
const input = document.querySelector(${JSON.stringify(G)});
|
|
563
218
|
if (!(input instanceof HTMLInputElement)) return { ok: false };
|
|
564
219
|
input.dispatchEvent(new Event('input', { bubbles: true }));
|
|
565
220
|
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
566
221
|
return { ok: true };
|
|
567
222
|
})()
|
|
568
|
-
`)
|
|
569
|
-
}
|
|
570
|
-
export function buildInspectUploadStageJs() {
|
|
571
|
-
return `
|
|
223
|
+
`)}export function buildInspectUploadStageJs(){return`
|
|
572
224
|
(() => {
|
|
573
225
|
const isVisible = (el) => {
|
|
574
226
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -603,112 +255,7 @@ export function buildInspectUploadStageJs() {
|
|
|
603
255
|
if (failed) return { state: 'failed', detail: dialogText || 'Something went wrong' };
|
|
604
256
|
return { state: 'pending', detail: dialogText || '' };
|
|
605
257
|
})()
|
|
606
|
-
`;
|
|
607
|
-
}
|
|
608
|
-
async function inspectUploadStage(page) {
|
|
609
|
-
const result = await page.evaluate(buildInspectUploadStageJs());
|
|
610
|
-
if (result?.state)
|
|
611
|
-
return result;
|
|
612
|
-
if (result?.ok === true)
|
|
613
|
-
return { state: 'preview', detail: result.detail };
|
|
614
|
-
return { state: 'pending', detail: result?.detail };
|
|
615
|
-
}
|
|
616
|
-
function makeUploadFailure(detail) {
|
|
617
|
-
return new CommandExecutionError('Instagram image upload failed', detail ? `Instagram rejected the upload: ${detail}` : 'Instagram rejected the upload before the preview stage');
|
|
618
|
-
}
|
|
619
|
-
async function uploadMedia(page, mediaItems, selector) {
|
|
620
|
-
const mediaPaths = mediaItems.map((item) => item.filePath);
|
|
621
|
-
if (!page.setFileInput) {
|
|
622
|
-
throw new CommandExecutionError('Instagram posting requires Browser Bridge file upload support', 'Use Browser Bridge or another browser mode that supports setFileInput');
|
|
623
|
-
}
|
|
624
|
-
let activeSelector = selector;
|
|
625
|
-
for (let attempt = 0; attempt < 2; attempt++) {
|
|
626
|
-
try {
|
|
627
|
-
await page.setFileInput(mediaPaths, activeSelector);
|
|
628
|
-
await dispatchUploadEvents(page, activeSelector);
|
|
629
|
-
return;
|
|
630
|
-
}
|
|
631
|
-
catch (error) {
|
|
632
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
633
|
-
const staleSelector = message.includes('No element found matching selector')
|
|
634
|
-
|| message.includes('Could not find node with given id')
|
|
635
|
-
|| message.includes('No node with given id found');
|
|
636
|
-
if (staleSelector && attempt === 0) {
|
|
637
|
-
activeSelector = await resolveFreshUploadSelector(page, activeSelector, mediaItems);
|
|
638
|
-
continue;
|
|
639
|
-
}
|
|
640
|
-
if (!message.includes('Unknown action') && !message.includes('set-file-input') && !message.includes('not supported')) {
|
|
641
|
-
throw error;
|
|
642
|
-
}
|
|
643
|
-
if (mediaItems.some((item) => item.type === 'video')) {
|
|
644
|
-
throw new CommandExecutionError('Instagram mixed-media posting requires Browser Bridge file upload support', 'Use Browser Bridge or another browser mode that supports setFileInput for image/video uploads');
|
|
645
|
-
}
|
|
646
|
-
await injectImageViaBrowser(page, mediaPaths, activeSelector);
|
|
647
|
-
return;
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
function describePostDetail(mediaItems) {
|
|
652
|
-
if (mediaItems.every((item) => item.type === 'image')) {
|
|
653
|
-
return mediaItems.length === 1
|
|
654
|
-
? 'Single image post shared successfully'
|
|
655
|
-
: `${mediaItems.length}-image carousel post shared successfully`;
|
|
656
|
-
}
|
|
657
|
-
return mediaItems.length === 1
|
|
658
|
-
? 'Single mixed-media post shared successfully'
|
|
659
|
-
: `${mediaItems.length}-item mixed-media carousel post shared successfully`;
|
|
660
|
-
}
|
|
661
|
-
function getCommandAttemptBudget(mediaItems) {
|
|
662
|
-
if (mediaItems.length >= 10)
|
|
663
|
-
return 6;
|
|
664
|
-
if (mediaItems.length >= 5)
|
|
665
|
-
return 4;
|
|
666
|
-
return 3;
|
|
667
|
-
}
|
|
668
|
-
function getPreUploadDelaySeconds(mediaItems) {
|
|
669
|
-
if (mediaItems.length >= 10)
|
|
670
|
-
return 3;
|
|
671
|
-
if (mediaItems.length >= 5)
|
|
672
|
-
return 1.5;
|
|
673
|
-
return 0;
|
|
674
|
-
}
|
|
675
|
-
function getUploadAttemptBudget(mediaItems) {
|
|
676
|
-
if (mediaItems.length >= 10)
|
|
677
|
-
return 3;
|
|
678
|
-
if (mediaItems.length >= 5)
|
|
679
|
-
return 3;
|
|
680
|
-
return 2;
|
|
681
|
-
}
|
|
682
|
-
function getPreviewProbeWindowSeconds(mediaItems) {
|
|
683
|
-
if (mediaItems.length >= 10)
|
|
684
|
-
return 6;
|
|
685
|
-
if (mediaItems.length >= 5)
|
|
686
|
-
return 6;
|
|
687
|
-
return 4;
|
|
688
|
-
}
|
|
689
|
-
function getFinalPreviewWaitSeconds(mediaItems) {
|
|
690
|
-
if (mediaItems.length >= 10)
|
|
691
|
-
return 12;
|
|
692
|
-
if (mediaItems.length >= 5)
|
|
693
|
-
return 16;
|
|
694
|
-
return 12;
|
|
695
|
-
}
|
|
696
|
-
function getPreShareDelaySeconds(mediaItems) {
|
|
697
|
-
if (mediaItems.length >= 10)
|
|
698
|
-
return 4;
|
|
699
|
-
if (mediaItems.length >= 5)
|
|
700
|
-
return 3;
|
|
701
|
-
return 0;
|
|
702
|
-
}
|
|
703
|
-
function getInlineUploadRetryBudget(mediaItems) {
|
|
704
|
-
if (mediaItems.length >= 10)
|
|
705
|
-
return 3;
|
|
706
|
-
if (mediaItems.length >= 5)
|
|
707
|
-
return 2;
|
|
708
|
-
return 1;
|
|
709
|
-
}
|
|
710
|
-
async function dismissUploadErrorDialog(page) {
|
|
711
|
-
const result = await page.evaluate(`
|
|
258
|
+
`}async function M(j){const G=await j.evaluate(buildInspectUploadStageJs());if(G?.state)return G;if(G?.ok===!0)return{state:"preview",detail:G.detail};return{state:"pending",detail:G?.detail}}function F(j){return new Y("Instagram image upload failed",j?`Instagram rejected the upload: ${j}`:"Instagram rejected the upload before the preview stage")}async function Lj(j,G,N){const O=G.map((X)=>X.filePath);if(!j.setFileInput)throw new Y("Instagram posting requires Browser Bridge file upload support","Use Browser Bridge or another browser mode that supports setFileInput");let Q=N;for(let X=0;X<2;X++)try{await j.setFileInput(O,Q);await Tj(j,Q);return}catch(Z){const _=Z instanceof Error?Z.message:String(Z);if((_.includes("No element found matching selector")||_.includes("Could not find node with given id")||_.includes("No node with given id found"))&&X===0){Q=await E(j,Q,G);continue}if(!_.includes("Unknown action")&&!_.includes("set-file-input")&&!_.includes("not supported")&&!_.includes("Not allowed"))throw Z;if(G.some((q)=>q.type==="video")){e(Z);throw new Y("Instagram mixed-media posting requires Browser Bridge file upload support","Use Browser Bridge or another browser mode that supports setFileInput for image/video uploads")}await Jj(j,O,Q);return}}function Vj(j){if(j.every((G)=>G.type==="image"))return j.length===1?"Single image post shared successfully":`${j.length}-image carousel post shared successfully`;return j.length===1?"Single mixed-media post shared successfully":`${j.length}-item mixed-media carousel post shared successfully`}function zj(j){if(j.length>=10)return 6;if(j.length>=5)return 4;return 3}function Bj(j){if(j.length>=10)return 3;if(j.length>=5)return 1.5;return 0}function Kj(j){if(j.length>=10)return 3;if(j.length>=5)return 3;return 2}function Dj(j){if(j.length>=10)return 6;if(j.length>=5)return 6;return 4}function Aj(j){if(j.length>=10)return 12;if(j.length>=5)return 16;return 12}function Mj(j){if(j.length>=10)return 4;if(j.length>=5)return 3;return 0}function Fj(j){if(j.length>=10)return 3;if(j.length>=5)return 2;return 1}async function Wj(j){return!!(await j.evaluate(`
|
|
712
259
|
(() => {
|
|
713
260
|
const isVisible = (el) => {
|
|
714
261
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -731,11 +278,7 @@ async function dismissUploadErrorDialog(page) {
|
|
|
731
278
|
}
|
|
732
279
|
return { ok: false };
|
|
733
280
|
})()
|
|
734
|
-
`)
|
|
735
|
-
return !!result?.ok;
|
|
736
|
-
}
|
|
737
|
-
async function clickVisibleUploadRetry(page) {
|
|
738
|
-
const result = await page.evaluate(`
|
|
281
|
+
`))?.ok}async function Rj(j){return!!(await j.evaluate(`
|
|
739
282
|
(() => {
|
|
740
283
|
const isVisible = (el) => {
|
|
741
284
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -769,38 +312,7 @@ async function clickVisibleUploadRetry(page) {
|
|
|
769
312
|
}
|
|
770
313
|
return { ok: false };
|
|
771
314
|
})()
|
|
772
|
-
`);
|
|
773
|
-
return !!result?.ok;
|
|
774
|
-
}
|
|
775
|
-
async function waitForPreview(page, maxWaitSeconds = 12) {
|
|
776
|
-
const attempts = Math.max(1, Math.ceil(maxWaitSeconds));
|
|
777
|
-
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
778
|
-
const state = await inspectUploadStage(page);
|
|
779
|
-
if (state.state === 'preview')
|
|
780
|
-
return;
|
|
781
|
-
if (state.state === 'failed') {
|
|
782
|
-
await page.screenshot({ path: '/tmp/instagram_post_preview_debug.png' });
|
|
783
|
-
throw makeUploadFailure('Inspect /tmp/instagram_post_preview_debug.png. ' + (state.detail || ''));
|
|
784
|
-
}
|
|
785
|
-
if (attempt < attempts - 1)
|
|
786
|
-
await page.wait({ time: 1 });
|
|
787
|
-
}
|
|
788
|
-
await page.screenshot({ path: '/tmp/instagram_post_preview_debug.png' });
|
|
789
|
-
throw new CommandExecutionError('Instagram image preview did not appear after upload', 'The selected file input may not match the active composer; inspect /tmp/instagram_post_preview_debug.png');
|
|
790
|
-
}
|
|
791
|
-
async function waitForPreviewMaybe(page, maxWaitSeconds = 4) {
|
|
792
|
-
const attempts = Math.max(1, Math.ceil(maxWaitSeconds * 2));
|
|
793
|
-
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
794
|
-
const state = await inspectUploadStage(page);
|
|
795
|
-
if (state.state !== 'pending')
|
|
796
|
-
return state;
|
|
797
|
-
if (attempt < attempts - 1)
|
|
798
|
-
await page.wait({ time: 0.5 });
|
|
799
|
-
}
|
|
800
|
-
return { state: 'pending' };
|
|
801
|
-
}
|
|
802
|
-
export function buildClickActionJs(labels, scope = 'any') {
|
|
803
|
-
return `
|
|
315
|
+
`))?.ok}async function xj(j,G=12){const N=Math.max(1,Math.ceil(G));for(let O=0;O<N;O++){const Q=await M(j);if(Q.state==="preview")return;if(Q.state==="failed"){await j.screenshot({path:"/tmp/instagram_post_preview_debug.png"});throw F("Inspect /tmp/instagram_post_preview_debug.png. "+(Q.detail||""))}if(O<N-1)await j.wait({time:1})}await j.screenshot({path:"/tmp/instagram_post_preview_debug.png"});throw new Y("Instagram image preview did not appear after upload","The selected file input may not match the active composer; inspect /tmp/instagram_post_preview_debug.png")}async function P(j,G=4){const N=Math.max(1,Math.ceil(G*2));for(let O=0;O<N;O++){const Q=await M(j);if(Q.state!=="pending")return Q;if(O<N-1)await j.wait({time:0.5})}return{state:"pending"}}export function buildClickActionJs(j,G="any"){return`
|
|
804
316
|
((labels, scope) => {
|
|
805
317
|
const isVisible = (el) => {
|
|
806
318
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -854,18 +366,8 @@ export function buildClickActionJs(labels, scope = 'any') {
|
|
|
854
366
|
}
|
|
855
367
|
}
|
|
856
368
|
return { ok: false };
|
|
857
|
-
})(${JSON.stringify(
|
|
858
|
-
|
|
859
|
-
}
|
|
860
|
-
async function clickAction(page, labels, scope = 'any') {
|
|
861
|
-
const result = await page.evaluate(buildClickActionJs(labels, scope));
|
|
862
|
-
if (!result?.ok) {
|
|
863
|
-
throw new CommandExecutionError(`Instagram action button not found: ${labels.join(' / ')}`);
|
|
864
|
-
}
|
|
865
|
-
return result.label || labels[0];
|
|
866
|
-
}
|
|
867
|
-
async function clickVisibleShareRetry(page) {
|
|
868
|
-
const result = await page.evaluate(`
|
|
369
|
+
})(${JSON.stringify(j)}, ${JSON.stringify(G)})
|
|
370
|
+
`}async function v(j,G,N="any"){const O=await j.evaluate(buildClickActionJs(G,N));if(!O?.ok)throw new Y(`Instagram action button not found: ${G.join(" / ")}`);return O.label||G[0]}async function yj(j){return!!(await j.evaluate(`
|
|
869
371
|
(() => {
|
|
870
372
|
const isVisible = (el) => {
|
|
871
373
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -903,20 +405,12 @@ async function clickVisibleShareRetry(page) {
|
|
|
903
405
|
|
|
904
406
|
return { ok: false };
|
|
905
407
|
})()
|
|
906
|
-
`)
|
|
907
|
-
return !!result?.ok;
|
|
908
|
-
}
|
|
909
|
-
async function hasCaptionEditor(page) {
|
|
910
|
-
const result = await page.evaluate(`
|
|
408
|
+
`))?.ok}async function S(j){return!!(await j.evaluate(`
|
|
911
409
|
(() => {
|
|
912
410
|
const editable = document.querySelector('textarea, [contenteditable="true"]');
|
|
913
411
|
return { ok: !!editable };
|
|
914
412
|
})()
|
|
915
|
-
`)
|
|
916
|
-
return !!result?.ok;
|
|
917
|
-
}
|
|
918
|
-
async function isCaptionStage(page) {
|
|
919
|
-
const result = await page.evaluate(`
|
|
413
|
+
`))?.ok}async function I(j){return!!(await j.evaluate(`
|
|
920
414
|
(() => {
|
|
921
415
|
const editable = document.querySelector('textarea, [contenteditable="true"]');
|
|
922
416
|
const dialogText = Array.from(document.querySelectorAll('[role="dialog"]'))
|
|
@@ -930,60 +424,7 @@ async function isCaptionStage(page) {
|
|
|
930
424
|
|| dialogText.includes('advanced settings'),
|
|
931
425
|
};
|
|
932
426
|
})()
|
|
933
|
-
`);
|
|
934
|
-
return !!result?.ok;
|
|
935
|
-
}
|
|
936
|
-
async function advanceToCaptionEditor(page) {
|
|
937
|
-
for (let attempt = 0; attempt < 3; attempt++) {
|
|
938
|
-
if (await isCaptionStage(page)) {
|
|
939
|
-
return;
|
|
940
|
-
}
|
|
941
|
-
try {
|
|
942
|
-
await clickAction(page, ['Next', '下一步'], 'media');
|
|
943
|
-
}
|
|
944
|
-
catch (error) {
|
|
945
|
-
if (error instanceof CommandExecutionError) {
|
|
946
|
-
await page.wait({ time: 1.5 });
|
|
947
|
-
if (await isCaptionStage(page)) {
|
|
948
|
-
return;
|
|
949
|
-
}
|
|
950
|
-
const uploadState = await inspectUploadStage(page);
|
|
951
|
-
if (uploadState.state === 'failed') {
|
|
952
|
-
throw makeUploadFailure(uploadState.detail);
|
|
953
|
-
}
|
|
954
|
-
if (attempt < 2) {
|
|
955
|
-
continue;
|
|
956
|
-
}
|
|
957
|
-
}
|
|
958
|
-
throw error;
|
|
959
|
-
}
|
|
960
|
-
await page.wait({ time: 1.5 });
|
|
961
|
-
if (await hasCaptionEditor(page)) {
|
|
962
|
-
return;
|
|
963
|
-
}
|
|
964
|
-
const uploadState = await inspectUploadStage(page);
|
|
965
|
-
if (uploadState.state === 'failed') {
|
|
966
|
-
throw makeUploadFailure(uploadState.detail);
|
|
967
|
-
}
|
|
968
|
-
}
|
|
969
|
-
await page.screenshot({ path: '/tmp/instagram_post_caption_debug.png' });
|
|
970
|
-
throw new CommandExecutionError('Instagram caption editor did not appear', 'Instagram may have changed the publish flow; inspect /tmp/instagram_post_caption_debug.png');
|
|
971
|
-
}
|
|
972
|
-
async function waitForCaptionEditor(page) {
|
|
973
|
-
if (!(await hasCaptionEditor(page))) {
|
|
974
|
-
await page.screenshot({ path: '/tmp/instagram_post_caption_debug.png' });
|
|
975
|
-
throw new CommandExecutionError('Instagram caption editor did not appear', 'Instagram may have changed the publish flow; inspect /tmp/instagram_post_caption_debug.png');
|
|
976
|
-
}
|
|
977
|
-
}
|
|
978
|
-
async function rethrowUploadFailureIfPresent(page, originalError) {
|
|
979
|
-
const uploadState = await inspectUploadStage(page);
|
|
980
|
-
if (uploadState.state === 'failed') {
|
|
981
|
-
throw makeUploadFailure(uploadState.detail);
|
|
982
|
-
}
|
|
983
|
-
throw originalError;
|
|
984
|
-
}
|
|
985
|
-
async function focusCaptionEditorForNativeInsert(page) {
|
|
986
|
-
const result = await page.evaluate(`
|
|
427
|
+
`))?.ok}async function wj(j){for(let G=0;G<3;G++){if(await I(j))return;try{await v(j,["Next","下一步"],"media")}catch(O){if(O instanceof Y){await j.wait({time:1.5});if(await I(j))return;const Q=await M(j);if(Q.state==="failed")throw F(Q.detail);if(G<2)continue}throw O}await j.wait({time:1.5});if(await S(j))return;const N=await M(j);if(N.state==="failed")throw F(N.detail)}await j.screenshot({path:"/tmp/instagram_post_caption_debug.png"});throw new Y("Instagram caption editor did not appear","Instagram may have changed the publish flow; inspect /tmp/instagram_post_caption_debug.png")}async function dj(j){if(!await S(j)){await j.screenshot({path:"/tmp/instagram_post_caption_debug.png"});throw new Y("Instagram caption editor did not appear","Instagram may have changed the publish flow; inspect /tmp/instagram_post_caption_debug.png")}}async function Cj(j,G){const N=await M(j);if(N.state==="failed")throw F(N.detail);throw G}async function bj(j){return!!(await j.evaluate(`
|
|
987
428
|
(() => {
|
|
988
429
|
const textarea = document.querySelector('[aria-label="Write a caption..."], textarea');
|
|
989
430
|
if (textarea instanceof HTMLTextAreaElement) {
|
|
@@ -1043,15 +484,7 @@ async function focusCaptionEditorForNativeInsert(page) {
|
|
|
1043
484
|
|
|
1044
485
|
return { ok: true, kind: 'contenteditable' };
|
|
1045
486
|
})()
|
|
1046
|
-
`);
|
|
1047
|
-
return !!result?.ok;
|
|
1048
|
-
}
|
|
1049
|
-
async function fillCaption(page, content) {
|
|
1050
|
-
if (page.insertText && await focusCaptionEditorForNativeInsert(page)) {
|
|
1051
|
-
try {
|
|
1052
|
-
await page.insertText(content);
|
|
1053
|
-
await page.wait({ time: 0.3 });
|
|
1054
|
-
await page.evaluate(`
|
|
487
|
+
`))?.ok}async function kj(j,G){if(j.insertText&&await bj(j))try{await j.insertText(G);await j.wait({time:0.3});await j.evaluate(`
|
|
1055
488
|
(() => {
|
|
1056
489
|
const textarea = document.querySelector('[aria-label="Write a caption..."], textarea');
|
|
1057
490
|
if (textarea instanceof HTMLTextAreaElement) {
|
|
@@ -1073,14 +506,7 @@ async function fillCaption(page, content) {
|
|
|
1073
506
|
editor.blur();
|
|
1074
507
|
return { ok: true };
|
|
1075
508
|
})()
|
|
1076
|
-
`);
|
|
1077
|
-
return;
|
|
1078
|
-
}
|
|
1079
|
-
catch {
|
|
1080
|
-
// Fall back to browser-side editor manipulation below.
|
|
1081
|
-
}
|
|
1082
|
-
}
|
|
1083
|
-
const result = await page.evaluate(`
|
|
509
|
+
`);return}catch{}if(!(await j.evaluate(`
|
|
1084
510
|
((content) => {
|
|
1085
511
|
const createParagraph = (text) => ({
|
|
1086
512
|
children: text
|
|
@@ -1169,14 +595,8 @@ async function fillCaption(page, content) {
|
|
|
1169
595
|
}
|
|
1170
596
|
|
|
1171
597
|
return { ok: false };
|
|
1172
|
-
})(${JSON.stringify(
|
|
1173
|
-
`)
|
|
1174
|
-
if (!result?.ok) {
|
|
1175
|
-
throw new CommandExecutionError('Failed to fill Instagram caption');
|
|
1176
|
-
}
|
|
1177
|
-
}
|
|
1178
|
-
async function captionMatches(page, content) {
|
|
1179
|
-
const result = await page.evaluate(`
|
|
598
|
+
})(${JSON.stringify(G)})
|
|
599
|
+
`))?.ok)throw new Y("Failed to fill Instagram caption")}async function Uj(j,G){return!!(await j.evaluate(`
|
|
1180
600
|
((content) => {
|
|
1181
601
|
const normalized = content.trim();
|
|
1182
602
|
const readLexicalText = (node) => {
|
|
@@ -1229,59 +649,11 @@ async function captionMatches(page, content) {
|
|
|
1229
649
|
}
|
|
1230
650
|
|
|
1231
651
|
return { ok: false };
|
|
1232
|
-
})(${JSON.stringify(
|
|
1233
|
-
`);
|
|
1234
|
-
return !!result?.ok;
|
|
1235
|
-
}
|
|
1236
|
-
async function ensureCaptionFilled(page, content) {
|
|
1237
|
-
for (let attempt = 0; attempt < 6; attempt++) {
|
|
1238
|
-
if (await captionMatches(page, content)) {
|
|
1239
|
-
return;
|
|
1240
|
-
}
|
|
1241
|
-
if (attempt < 5) {
|
|
1242
|
-
await page.wait({ time: 0.5 });
|
|
1243
|
-
}
|
|
1244
|
-
}
|
|
1245
|
-
await page.screenshot({ path: '/tmp/instagram_post_caption_fill_debug.png' });
|
|
1246
|
-
throw new CommandExecutionError('Instagram caption did not stick before sharing', 'Inspect /tmp/instagram_post_caption_fill_debug.png for the caption editor state');
|
|
1247
|
-
}
|
|
1248
|
-
async function waitForPublishSuccess(page) {
|
|
1249
|
-
let settledStreak = 0;
|
|
1250
|
-
for (let attempt = 0; attempt < 90; attempt++) {
|
|
1251
|
-
const result = await page.evaluate(buildPublishStatusProbeJs());
|
|
1252
|
-
if (result?.failed) {
|
|
1253
|
-
await page.screenshot({ path: '/tmp/instagram_post_share_debug.png' });
|
|
1254
|
-
throw new CommandExecutionError('Instagram post share failed', 'Inspect /tmp/instagram_post_share_debug.png for the share failure state');
|
|
1255
|
-
}
|
|
1256
|
-
if (result?.ok) {
|
|
1257
|
-
return result.url || '';
|
|
1258
|
-
}
|
|
1259
|
-
if (result?.settled) {
|
|
1260
|
-
settledStreak += 1;
|
|
1261
|
-
if (settledStreak >= 3)
|
|
1262
|
-
return '';
|
|
1263
|
-
}
|
|
1264
|
-
else {
|
|
1265
|
-
settledStreak = 0;
|
|
1266
|
-
}
|
|
1267
|
-
if (attempt < 89) {
|
|
1268
|
-
await page.wait({ time: 1 });
|
|
1269
|
-
}
|
|
1270
|
-
}
|
|
1271
|
-
await page.screenshot({ path: '/tmp/instagram_post_share_debug.png' });
|
|
1272
|
-
throw new CommandExecutionError('Instagram post share confirmation did not appear', 'Inspect /tmp/instagram_post_share_debug.png for the final publish state');
|
|
1273
|
-
}
|
|
1274
|
-
async function resolveCurrentUserId(page) {
|
|
1275
|
-
const cookies = await page.getCookies({ domain: 'instagram.com' });
|
|
1276
|
-
return cookies.find((cookie) => cookie.name === 'ds_user_id')?.value || '';
|
|
1277
|
-
}
|
|
1278
|
-
async function resolveProfileUrl(page, currentUserId = '') {
|
|
1279
|
-
if (currentUserId) {
|
|
1280
|
-
const runtimeInfo = await resolveInstagramRuntimeInfo(page);
|
|
1281
|
-
const apiResult = await page.evaluate(`
|
|
652
|
+
})(${JSON.stringify(G)})
|
|
653
|
+
`))?.ok}async function fj(j,G){for(let N=0;N<6;N++){if(await Uj(j,G))return;if(N<5)await j.wait({time:0.5})}await j.screenshot({path:"/tmp/instagram_post_caption_fill_debug.png"});throw new Y("Instagram caption did not stick before sharing","Inspect /tmp/instagram_post_caption_fill_debug.png for the caption editor state")}async function c(j){let G=0;for(let N=0;N<90;N++){const O=await j.evaluate(buildPublishStatusProbeJs());if(O?.failed){await j.screenshot({path:"/tmp/instagram_post_share_debug.png"});throw new Y("Instagram post share failed","Inspect /tmp/instagram_post_share_debug.png for the share failure state")}if(O?.ok)return O.url||"";if(O?.settled){G+=1;if(G>=3)return""}else G=0;if(N<89)await j.wait({time:1})}await j.screenshot({path:"/tmp/instagram_post_share_debug.png"});throw new Y("Instagram post share confirmation did not appear","Inspect /tmp/instagram_post_share_debug.png for the final publish state")}async function d(j){return(await j.getCookies({domain:"instagram.com"})).find((N)=>N.name==="ds_user_id")?.value||""}async function l(j,G=""){if(G){const O=await t(j),Q=await j.evaluate(`
|
|
1282
654
|
(async () => {
|
|
1283
|
-
const userId = ${JSON.stringify(
|
|
1284
|
-
const appId = ${JSON.stringify(
|
|
655
|
+
const userId = ${JSON.stringify(G)};
|
|
656
|
+
const appId = ${JSON.stringify(O.appId||"")};
|
|
1285
657
|
try {
|
|
1286
658
|
const res = await fetch(
|
|
1287
659
|
'https://www.instagram.com/api/v1/users/' + encodeURIComponent(userId) + '/info/',
|
|
@@ -1298,12 +670,7 @@ async function resolveProfileUrl(page, currentUserId = '') {
|
|
|
1298
670
|
return { ok: false };
|
|
1299
671
|
}
|
|
1300
672
|
})()
|
|
1301
|
-
`);
|
|
1302
|
-
if (apiResult?.ok && apiResult.username) {
|
|
1303
|
-
return new URL(`/${apiResult.username}/`, INSTAGRAM_HOME_URL).toString();
|
|
1304
|
-
}
|
|
1305
|
-
}
|
|
1306
|
-
const result = await page.evaluate(`
|
|
673
|
+
`);if(Q?.ok&&Q.username)return new URL(`/${Q.username}/`,z).toString()}const N=await j.evaluate(`
|
|
1307
674
|
(() => {
|
|
1308
675
|
const isVisible = (el) => {
|
|
1309
676
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -1328,13 +695,7 @@ async function resolveProfileUrl(page, currentUserId = '') {
|
|
|
1328
695
|
const path = explicitProfile;
|
|
1329
696
|
return { ok: !!path, path };
|
|
1330
697
|
})()
|
|
1331
|
-
`);
|
|
1332
|
-
if (!result?.ok || !result.path)
|
|
1333
|
-
return '';
|
|
1334
|
-
return new URL(result.path, INSTAGRAM_HOME_URL).toString();
|
|
1335
|
-
}
|
|
1336
|
-
async function collectVisibleProfilePostPaths(page) {
|
|
1337
|
-
const result = await page.evaluate(`
|
|
698
|
+
`);if(!N?.ok||!N.path)return"";return new URL(N.path,z).toString()}async function m(j){const G=await j.evaluate(`
|
|
1338
699
|
(() => {
|
|
1339
700
|
const isVisible = (el) => {
|
|
1340
701
|
if (!(el instanceof HTMLElement)) return false;
|
|
@@ -1354,144 +715,4 @@ async function collectVisibleProfilePostPaths(page) {
|
|
|
1354
715
|
|
|
1355
716
|
return { ok: hrefs.length > 0, hrefs };
|
|
1356
717
|
})()
|
|
1357
|
-
`);
|
|
1358
|
-
return Array.isArray(result?.hrefs) ? result.hrefs.filter(Boolean) : [];
|
|
1359
|
-
}
|
|
1360
|
-
async function captureExistingProfilePostPaths(page) {
|
|
1361
|
-
const currentUserId = await resolveCurrentUserId(page);
|
|
1362
|
-
if (!currentUserId)
|
|
1363
|
-
return new Set();
|
|
1364
|
-
const profileUrl = await resolveProfileUrl(page, currentUserId);
|
|
1365
|
-
if (!profileUrl)
|
|
1366
|
-
return new Set();
|
|
1367
|
-
try {
|
|
1368
|
-
await page.goto(profileUrl);
|
|
1369
|
-
await page.wait({ time: 3 });
|
|
1370
|
-
return new Set(await collectVisibleProfilePostPaths(page));
|
|
1371
|
-
}
|
|
1372
|
-
catch {
|
|
1373
|
-
return new Set();
|
|
1374
|
-
}
|
|
1375
|
-
}
|
|
1376
|
-
async function resolveLatestPostUrl(page, existingPostPaths) {
|
|
1377
|
-
const currentUrl = await page.getCurrentUrl?.();
|
|
1378
|
-
if (currentUrl && /\/p\//.test(currentUrl))
|
|
1379
|
-
return currentUrl;
|
|
1380
|
-
const currentUserId = await resolveCurrentUserId(page);
|
|
1381
|
-
const profileUrl = await resolveProfileUrl(page, currentUserId);
|
|
1382
|
-
if (!profileUrl)
|
|
1383
|
-
return '';
|
|
1384
|
-
await page.goto(profileUrl);
|
|
1385
|
-
await page.wait({ time: 4 });
|
|
1386
|
-
for (let attempt = 0; attempt < 8; attempt++) {
|
|
1387
|
-
const hrefs = await collectVisibleProfilePostPaths(page);
|
|
1388
|
-
const href = hrefs.find((candidate) => !existingPostPaths.has(candidate)) || '';
|
|
1389
|
-
if (href) {
|
|
1390
|
-
return new URL(href, INSTAGRAM_HOME_URL).toString();
|
|
1391
|
-
}
|
|
1392
|
-
if (attempt < 7)
|
|
1393
|
-
await page.wait({ time: 1 });
|
|
1394
|
-
}
|
|
1395
|
-
return '';
|
|
1396
|
-
}
|
|
1397
|
-
cli({
|
|
1398
|
-
site: 'instagram',
|
|
1399
|
-
name: 'post',
|
|
1400
|
-
access: 'write',
|
|
1401
|
-
description: 'Post an Instagram feed image or mixed-media carousel',
|
|
1402
|
-
domain: 'www.instagram.com',
|
|
1403
|
-
strategy: Strategy.UI,
|
|
1404
|
-
browser: true,
|
|
1405
|
-
args: [
|
|
1406
|
-
{ name: 'media', required: false, valueRequired: true, help: `Comma-separated media paths (images/videos, up to ${MAX_MEDIA_ITEMS})` },
|
|
1407
|
-
{ name: 'content', positional: true, required: false, help: 'Caption text' },
|
|
1408
|
-
{ name: 'timeout', type: 'int', required: false, default: 300, help: 'Max seconds for the overall command (default: 300)' },
|
|
1409
|
-
],
|
|
1410
|
-
columns: ['status', 'detail', 'url'],
|
|
1411
|
-
validateArgs: validateInstagramPostArgs,
|
|
1412
|
-
func: async (page, kwargs) => {
|
|
1413
|
-
const browserPage = requirePage(page);
|
|
1414
|
-
const mediaItems = normalizePostMediaItems(kwargs);
|
|
1415
|
-
const content = String(kwargs.content ?? '').trim();
|
|
1416
|
-
const existingPostPaths = await captureExistingProfilePostPaths(browserPage);
|
|
1417
|
-
const commandAttemptBudget = getCommandAttemptBudget(mediaItems);
|
|
1418
|
-
const preUploadDelaySeconds = getPreUploadDelaySeconds(mediaItems);
|
|
1419
|
-
const uploadAttemptBudget = getUploadAttemptBudget(mediaItems);
|
|
1420
|
-
const previewProbeWindowSeconds = getPreviewProbeWindowSeconds(mediaItems);
|
|
1421
|
-
const finalPreviewWaitSeconds = getFinalPreviewWaitSeconds(mediaItems);
|
|
1422
|
-
const preShareDelaySeconds = getPreShareDelaySeconds(mediaItems);
|
|
1423
|
-
const inlineUploadRetryBudget = getInlineUploadRetryBudget(mediaItems);
|
|
1424
|
-
const protocolCaptureEnabled = process.env.OPENCLI_INSTAGRAM_CAPTURE === '1';
|
|
1425
|
-
const protocolCaptureData = [];
|
|
1426
|
-
const protocolCaptureErrors = [];
|
|
1427
|
-
const installProtocolCapture = async () => {
|
|
1428
|
-
if (!protocolCaptureEnabled)
|
|
1429
|
-
return;
|
|
1430
|
-
await installInstagramProtocolCapture(browserPage);
|
|
1431
|
-
};
|
|
1432
|
-
const drainProtocolCapture = async () => {
|
|
1433
|
-
if (!protocolCaptureEnabled)
|
|
1434
|
-
return;
|
|
1435
|
-
const payload = await readInstagramProtocolCapture(browserPage);
|
|
1436
|
-
if (payload.data.length)
|
|
1437
|
-
protocolCaptureData.push(...payload.data);
|
|
1438
|
-
if (payload.errors.length)
|
|
1439
|
-
protocolCaptureErrors.push(...payload.errors);
|
|
1440
|
-
};
|
|
1441
|
-
try {
|
|
1442
|
-
try {
|
|
1443
|
-
return await executePrivateInstagramPost({
|
|
1444
|
-
page: browserPage,
|
|
1445
|
-
mediaItems,
|
|
1446
|
-
content,
|
|
1447
|
-
existingPostPaths,
|
|
1448
|
-
});
|
|
1449
|
-
}
|
|
1450
|
-
catch (error) {
|
|
1451
|
-
if (error instanceof AuthRequiredError || !isSafePrivateRouteFallbackError(error)) {
|
|
1452
|
-
throw error;
|
|
1453
|
-
}
|
|
1454
|
-
try {
|
|
1455
|
-
return await executeUiInstagramPost({
|
|
1456
|
-
page: browserPage,
|
|
1457
|
-
mediaItems,
|
|
1458
|
-
content,
|
|
1459
|
-
existingPostPaths,
|
|
1460
|
-
commandAttemptBudget,
|
|
1461
|
-
preUploadDelaySeconds,
|
|
1462
|
-
uploadAttemptBudget,
|
|
1463
|
-
previewProbeWindowSeconds,
|
|
1464
|
-
finalPreviewWaitSeconds,
|
|
1465
|
-
preShareDelaySeconds,
|
|
1466
|
-
inlineUploadRetryBudget,
|
|
1467
|
-
installProtocolCapture,
|
|
1468
|
-
drainProtocolCapture,
|
|
1469
|
-
forceFreshStart: true,
|
|
1470
|
-
});
|
|
1471
|
-
}
|
|
1472
|
-
catch (uiError) {
|
|
1473
|
-
if (uiError instanceof AuthRequiredError)
|
|
1474
|
-
throw uiError;
|
|
1475
|
-
if (uiError instanceof CommandExecutionError) {
|
|
1476
|
-
throw new CommandExecutionError(uiError.message, buildFallbackHint(error, uiError));
|
|
1477
|
-
}
|
|
1478
|
-
throw uiError;
|
|
1479
|
-
}
|
|
1480
|
-
}
|
|
1481
|
-
}
|
|
1482
|
-
finally {
|
|
1483
|
-
if (protocolCaptureEnabled) {
|
|
1484
|
-
try {
|
|
1485
|
-
await drainProtocolCapture();
|
|
1486
|
-
}
|
|
1487
|
-
catch {
|
|
1488
|
-
// Best-effort: capture export should not hide the main command result.
|
|
1489
|
-
}
|
|
1490
|
-
fs.writeFileSync(INSTAGRAM_PROTOCOL_TRACE_OUTPUT_PATH, JSON.stringify({
|
|
1491
|
-
data: protocolCaptureData,
|
|
1492
|
-
errors: protocolCaptureErrors,
|
|
1493
|
-
}, null, 2));
|
|
1494
|
-
}
|
|
1495
|
-
}
|
|
1496
|
-
},
|
|
1497
|
-
});
|
|
718
|
+
`);return Array.isArray(G?.hrefs)?G.hrefs.filter(Boolean):[]}async function hj(j){const G=await d(j);if(!G)return new Set;const N=await l(j,G);if(!N)return new Set;try{await j.goto(N);await j.wait({time:3});return new Set(await m(j))}catch{return new Set}}async function g(j,G){const N=await j.getCurrentUrl?.();if(N&&/\/p\//.test(N))return N;const O=await d(j),Q=await l(j,O);if(!Q)return"";await j.goto(Q);await j.wait({time:4});for(let X=0;X<8;X++){const _=(await m(j)).find(($)=>!G.has($))||"";if(_)return new URL(_,z).toString();if(X<7)await j.wait({time:1})}return""}s({site:"instagram",name:"post",access:"write",description:"Post an Instagram feed image or mixed-media carousel",domain:"www.instagram.com",strategy:n.UI,browser:!0,args:[{name:"media",required:!1,valueRequired:!0,help:`Comma-separated media paths (images/videos, up to ${C})`},{name:"content",positional:!0,required:!1,help:"Caption text"},{name:"timeout",type:"int",required:!1,default:300,help:"Max seconds for the overall command (default: 300)"}],columns:["status","detail","url"],validateArgs:Yj,func:async(j,G)=>{const N=Oj(j),O=Xj(G),Q=String(G.content??"").trim(),X=await hj(N),Z=zj(O),_=Bj(O),$=Kj(O),q=Dj(O),J=Aj(O),B=Mj(O),K=Fj(O),T=process.env.OPENCLI_INSTAGRAM_CAPTURE==="1",y=[],D=[],o=async()=>{if(!T)return;await u(N)},U=async()=>{if(!T)return;const H=await i(N);if(H.data.length)y.push(...H.data);if(H.errors.length)D.push(...H.errors)};try{try{return await $j({page:N,mediaItems:O,content:Q,existingPostPaths:X})}catch(H){if(H instanceof R||!Zj(H))throw H;try{return await qj({page:N,mediaItems:O,content:Q,existingPostPaths:X,commandAttemptBudget:Z,preUploadDelaySeconds:_,uploadAttemptBudget:$,previewProbeWindowSeconds:q,finalPreviewWaitSeconds:J,preShareDelaySeconds:B,inlineUploadRetryBudget:K,installProtocolCapture:o,drainProtocolCapture:U,forceFreshStart:!0})}catch(L){if(L instanceof R)throw L;if(L instanceof Y)throw new Y(L.message,_j(H,L));throw L}}}finally{if(T){try{await U()}catch{}w.writeFileSync(Nj,JSON.stringify({data:y,errors:D},null,2))}}}});
|