six-degrees 0.6.0 → 0.8.0
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/app-path-routes-manifest.json +4 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +42 -14
- package/.next/standalone/.next/routes-manifest.json +24 -0
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +26 -18
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +25 -16
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js +2 -2
- package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/admin-update/route.js +2 -2
- package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bridges/route.js +2 -2
- package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk-import/route.js +2 -2
- package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js +3 -3
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/route.js +3 -3
- package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/connections/route.js +2 -2
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/backup/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/backup/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/backup/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/backup/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/csv/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/csv/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/csv/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restore/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/restore/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/restore/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/restore/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js +2 -2
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/route.js +2 -2
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js +2 -2
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js +3 -3
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js +2 -2
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js +5 -3
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js +3 -3
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/setup-profile/route.js +2 -2
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js +1 -1
- package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/social/route.js +2 -2
- package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js +2 -2
- package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update-images/route.js +2 -2
- package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/users/route.js +2 -2
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page.js +1 -1
- package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/import.html +1 -1
- package/.next/standalone/.next/server/app/import.rsc +32 -24
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +20 -15
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +29 -22
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/insights/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/insights/page/build-manifest.json +20 -0
- package/.next/standalone/.next/server/app/insights/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/insights/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/insights/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/insights/page.js +13 -0
- package/.next/standalone/.next/server/app/insights/page.js.map +5 -0
- package/.next/standalone/.next/server/app/insights/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/insights/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/insights.html +1 -0
- package/.next/standalone/.next/server/app/insights.meta +26 -0
- package/.next/standalone/.next/server/app/insights.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_full.segment.rsc +35 -0
- package/.next/standalone/.next/server/app/insights.segments/_tree.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/insights.segments/insights/__PAGE__.segment.rsc +33 -0
- package/.next/standalone/.next/server/app/launch/page.js +1 -1
- package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/launch.html +2 -2
- package/.next/standalone/.next/server/app/launch.rsc +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/page.js +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js +1 -1
- package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/paths.html +1 -1
- package/.next/standalone/.next/server/app/paths.rsc +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/profile/page.js +1 -1
- package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/profile.html +1 -1
- package/.next/standalone/.next/server/app/profile.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/queue/page.js +1 -1
- package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/queue.html +1 -1
- package/.next/standalone/.next/server/app/queue.rsc +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/scores/page.js +1 -1
- package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/scores.html +1 -1
- package/.next/standalone/.next/server/app/scores.rsc +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app/settings/page.js +1 -1
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +20 -18
- package/.next/standalone/.next/server/app/setup/page.js +1 -1
- package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/setup.html +1 -1
- package/.next/standalone/.next/server/app/setup.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +21 -18
- package/.next/standalone/.next/server/app/social/page.js +1 -1
- package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/social.html +1 -1
- package/.next/standalone/.next/server/app/social.rsc +32 -24
- package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +32 -24
- package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +23 -18
- package/.next/standalone/.next/server/app-paths-manifest.json +4 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__05_3-22._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__066rab1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0fooke1._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +1 -1
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__15wc9e-._.js → [root-of-the-server]__0r-0t-9._.js} +2 -2
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ra6xyg._.js +15 -0
- package/.next/standalone/.next/server/chunks/{[root-of-the-server]__20rwfdw._.js → [root-of-the-server]__0rcpjad._.js} +6 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t6y79e._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0x29muh._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1a_6x37._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an_8pa._.js +7 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1ducpz2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +1 -1
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1xhyinn._.js +3 -0
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0sqqpzb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
- package/.next/standalone/.next/server/chunks/_1fn30_l._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_backup_route_actions_0zoj04p.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_csv_route_actions_0l6m7lg.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restore_route_actions_0-b05bv.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +4 -0
- package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +174 -0
- package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_rpc_00nndai.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ibb-x.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_03ri3ji.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_078ce48.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0a69mgr.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cej3t8.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0cmh4g6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0nx2_pc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0r79-w1.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0t552z6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0yx8ynd.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_12p-o9-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1466dnb.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1sryxv6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1trn-x5.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1ygu_mv.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0egamyq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0qd8pzm._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0qdeuyo._.js → [root-of-the-server]__1-012q1._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_04am_h8._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_06rgzfh._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_07zb7lu._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0gds903._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0klqt9z._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_14jak5s._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1cj2yog._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1hdqw0-._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1r62six._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_insights_page_actions_0-0tf75.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_0uuff77._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_1j3q-h5._.js +25 -2
- package/.next/standalone/.next/server/chunks/ssr/app_components_CompanyScores_1g0mytz.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_insights_page_1d_chja.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +26 -14
- package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +11 -11
- package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +12 -13
- package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{lib_1c4ieuw._.js → lib_csv_1ttiu_h.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_separation_1305zsx.js +3 -0
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +4 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/prefetch-hints.json +14 -0
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/02wnf8dkxegxg.js +34 -0
- package/.next/standalone/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/standalone/.next/static/chunks/0838_s6w-i_ik.js +1 -0
- package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/standalone/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/standalone/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/standalone/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/standalone/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/standalone/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/standalone/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/standalone/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/standalone/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/standalone/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/standalone/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/standalone/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/standalone/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/standalone/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/standalone/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/standalone/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/standalone/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/standalone/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/standalone/CHANGELOG.md +203 -0
- package/.next/standalone/README.md +96 -50
- package/.next/standalone/SECURITY.md +25 -11
- package/.next/standalone/app/api/data/backup/route.js +25 -0
- package/.next/standalone/app/api/data/csv/route.js +74 -0
- package/.next/standalone/app/api/data/export/route.js +1 -1
- package/.next/standalone/app/api/data/restore/route.js +48 -0
- package/.next/standalone/app/api/data/reveal/route.js +19 -6
- package/.next/standalone/app/api/data/route.js +15 -4
- package/.next/standalone/app/api/ingest/route.js +1 -1
- package/.next/standalone/app/api/outreach/route.js +13 -73
- package/.next/standalone/app/api/queue/route.js +1 -1
- package/.next/standalone/app/api/scraper/route.js +217 -36
- package/.next/standalone/app/api/social/crm/route.js +2 -1
- package/.next/standalone/app/components/AppHeader.js +41 -21
- package/.next/standalone/app/components/AppTabs.js +12 -8
- package/.next/standalone/app/components/AutoConnect.js +286 -0
- package/.next/standalone/app/components/AutoScanButton.js +2 -2
- package/.next/standalone/app/components/Avatar.js +1 -1
- package/.next/standalone/app/components/ChainView.js +258 -113
- package/.next/standalone/app/components/CirclePanel.js +16 -16
- package/.next/standalone/app/components/ClusterSpinner.js +64 -0
- package/.next/standalone/app/components/CompanyScores.js +20 -20
- package/.next/standalone/app/components/EmptyState.js +39 -18
- package/.next/standalone/app/components/FieldStep.js +15 -13
- package/.next/standalone/app/components/FilterPanel.js +25 -18
- package/.next/standalone/app/components/ForceGraph.js +49 -14
- package/.next/standalone/app/components/GalaxyLab.js +33 -33
- package/.next/standalone/app/components/GridView.js +18 -18
- package/.next/standalone/app/components/LegacyScoresCard.js +10 -11
- package/.next/standalone/app/components/LinkedInLimits.js +57 -27
- package/.next/standalone/app/components/LiquidGlass.js +99 -0
- package/.next/standalone/app/components/ListView.js +20 -20
- package/.next/standalone/app/components/MapControls.js +5 -5
- package/.next/standalone/app/components/MappingProgress.js +16 -16
- package/.next/standalone/app/components/NoteDetail.js +13 -13
- package/.next/standalone/app/components/OnboardingGate.js +4 -4
- package/.next/standalone/app/components/OutlinkQuest.js +56 -35
- package/.next/standalone/app/components/PathsAnalyzer.js +37 -36
- package/.next/standalone/app/components/PeopleMap.js +21 -21
- package/.next/standalone/app/components/RingsView.js +11 -11
- package/.next/standalone/app/components/ScanRadar.js +84 -39
- package/.next/standalone/app/components/ScanStatusBar.js +40 -21
- package/.next/standalone/app/components/ScanTrail.js +21 -8
- package/.next/standalone/app/components/SeparationView.js +172 -124
- package/.next/standalone/app/components/Sidebar.js +308 -199
- package/.next/standalone/app/components/StaleServerBanner.js +4 -4
- package/.next/standalone/app/components/TheirCircle.js +26 -26
- package/.next/standalone/app/components/ThemeDefs.js +42 -0
- package/.next/standalone/app/components/ThemeLoader.js +20 -1
- package/.next/standalone/app/components/UpdatePanel.js +22 -22
- package/.next/standalone/app/components/UserProvider.js +22 -15
- package/.next/standalone/app/components/insights/Boards.js +275 -0
- package/.next/standalone/app/components/insights/PeopleView.js +266 -0
- package/.next/standalone/app/components/insights/Rail.js +156 -0
- package/.next/standalone/app/components/insights/Report.js +382 -0
- package/.next/standalone/app/components/insights/parts.js +239 -0
- package/.next/standalone/app/components/settings/AppearanceSection.js +47 -24
- package/.next/standalone/app/components/settings/DataSection.js +276 -109
- package/.next/standalone/app/components/settings/NetworkHealthSection.js +13 -13
- package/.next/standalone/app/components/settings/SectorPicker.js +12 -12
- package/.next/standalone/app/components/settings/SectorSection.js +13 -14
- package/.next/standalone/app/components/settings/TierSection.js +9 -9
- package/.next/standalone/app/components/settings/TitleSection.js +11 -11
- package/.next/standalone/app/components/settings/UsageSection.js +360 -0
- package/.next/standalone/app/components/ui.js +8 -8
- package/.next/standalone/app/globals.css +161 -5
- package/.next/standalone/app/import/page.js +94 -38
- package/.next/standalone/app/insights/page.js +220 -0
- package/.next/standalone/app/launch/page.js +5 -5
- package/.next/standalone/app/layout.js +6 -2
- package/.next/standalone/app/page.js +53 -53
- package/.next/standalone/app/paths/page.js +63 -63
- package/.next/standalone/app/profile/page.js +58 -58
- package/.next/standalone/app/queue/page.js +84 -72
- package/.next/standalone/app/scores/page.js +2 -2
- package/.next/standalone/app/settings/page.js +16 -13
- package/.next/standalone/app/setup/page.js +236 -133
- package/.next/standalone/app/social/Crm.js +63 -62
- package/.next/standalone/app/social/SocialHub.js +22 -22
- package/.next/standalone/app/social/Thread.js +7 -7
- package/.next/standalone/app/social/page.js +2 -2
- package/.next/standalone/lib/auto-connect.js +145 -0
- package/.next/standalone/lib/backups.js +458 -0
- package/.next/standalone/lib/chain-layout.js +32 -0
- package/.next/standalone/lib/companies.js +1 -1
- package/.next/standalone/lib/csv-store.js +131 -0
- package/.next/standalone/lib/csv.js +137 -39
- package/.next/standalone/lib/data-folder.js +19 -3
- package/.next/standalone/lib/data-import.js +5 -2
- package/.next/standalone/lib/db-client.js +78 -20
- package/.next/standalone/lib/demo.js +5 -4
- package/.next/standalone/lib/galaxy-export.js +9 -2
- package/.next/standalone/lib/galaxy-lab.js +19 -5
- package/.next/standalone/lib/galaxy-layouts.js +43 -0
- package/.next/standalone/lib/gate.js +10 -4
- package/.next/standalone/lib/in-progress.js +46 -0
- package/.next/standalone/lib/ingest.js +1 -1
- package/.next/standalone/lib/insights-board.js +613 -0
- package/.next/standalone/lib/linkedin-limits.js +240 -14
- package/.next/standalone/lib/liquid-glass.js +59 -0
- package/.next/standalone/lib/notifications.js +13 -0
- package/.next/standalone/lib/requests-client.js +10 -0
- package/.next/standalone/lib/requests.js +124 -0
- package/.next/standalone/lib/scan-pace.js +11 -0
- package/.next/standalone/lib/scan-progress.js +20 -0
- package/.next/standalone/lib/scan-risk.js +44 -0
- package/.next/standalone/lib/scan-state.js +1 -0
- package/.next/standalone/lib/scanner-setup.js +97 -15
- package/.next/standalone/lib/scraper-client.js +35 -8
- package/.next/standalone/lib/search-risk.js +7 -3
- package/.next/standalone/lib/settings-client.js +5 -3
- package/.next/standalone/lib/settings.js +13 -0
- package/.next/standalone/lib/social-store.js +3 -2
- package/.next/standalone/lib/synced-setting.js +46 -0
- package/.next/standalone/lib/theme-store.js +42 -10
- package/.next/standalone/lib/themes.js +111 -21
- package/.next/standalone/lib/usage.js +200 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +595 -11
- package/.next/static/chunks/02wnf8dkxegxg.js +34 -0
- package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/static/chunks/0838_s6w-i_ik.js +1 -0
- package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/static/chunks/0ka4prpk3w9wn.js +34 -0
- package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/static/chunks/0s_xxwp7z88vv.js +1 -0
- package/.next/static/chunks/1-nnl8amfm4yh.js +57 -0
- package/.next/static/chunks/112mv-com-mqa.js +21 -0
- package/.next/static/chunks/1bkt_hhjzvbh8.js +1 -0
- package/.next/static/chunks/1cmphb3kh2ers.css +3 -0
- package/.next/static/chunks/1d8yv3k_atka7.js +1 -0
- package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/static/chunks/23hc51oa4vkhc.js +5 -0
- package/.next/static/chunks/27n8k9wxlz5-7.js +1 -0
- package/.next/static/chunks/2q9i7pcxcnph1.js +7 -0
- package/.next/static/chunks/2w-y83mjlpnse.js +1 -0
- package/.next/static/chunks/2ws1xf293j-tm.js +5 -0
- package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/static/chunks/3cqn-r-y5rrw1.js +5 -0
- package/.next/static/chunks/3opgg1efrx8q6.js +1 -0
- package/.next/static/chunks/3p51fpxxi4d5y.js +34 -0
- package/.next/static/chunks/3y40z6of3r9py.js +1 -0
- package/.next/static/chunks/403dpflln8ah5.js +1 -0
- package/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/CHANGELOG.md +203 -0
- package/README.md +96 -50
- package/SECURITY.md +25 -11
- package/lib/auto-connect.js +145 -0
- package/lib/backups.js +458 -0
- package/lib/chain-layout.js +32 -0
- package/lib/companies.js +1 -1
- package/lib/csv-store.js +131 -0
- package/lib/csv.js +137 -39
- package/lib/data-folder.js +19 -3
- package/lib/data-import.js +5 -2
- package/lib/db-client.js +78 -20
- package/lib/demo.js +5 -4
- package/lib/galaxy-export.js +9 -2
- package/lib/galaxy-lab.js +19 -5
- package/lib/galaxy-layouts.js +43 -0
- package/lib/gate.js +10 -4
- package/lib/in-progress.js +46 -0
- package/lib/ingest.js +1 -1
- package/lib/insights-board.js +613 -0
- package/lib/linkedin-limits.js +240 -14
- package/lib/liquid-glass.js +59 -0
- package/lib/notifications.js +13 -0
- package/lib/requests-client.js +10 -0
- package/lib/requests.js +124 -0
- package/lib/scan-pace.js +11 -0
- package/lib/scan-progress.js +20 -0
- package/lib/scan-risk.js +44 -0
- package/lib/scan-state.js +1 -0
- package/lib/scanner-setup.js +97 -15
- package/lib/scraper-client.js +35 -8
- package/lib/search-risk.js +7 -3
- package/lib/settings-client.js +5 -3
- package/lib/settings.js +13 -0
- package/lib/social-store.js +3 -2
- package/lib/synced-setting.js +46 -0
- package/lib/theme-store.js +42 -10
- package/lib/themes.js +111 -21
- package/lib/usage.js +200 -0
- package/package.json +1 -1
- package/scripts/scrape.py +595 -11
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__13dx4sd._.js +0 -8
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +0 -3
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +0 -3
- package/.next/standalone/.next/server/chunks/_02twlca._.js +0 -10
- package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +0 -8
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +0 -174
- package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08oxiqh._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_08g31gm._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0gk_ofx._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0nwsf93._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0vho1lb._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1-658fq._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1bc46kz._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.js +0 -3
- package/.next/standalone/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/standalone/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/standalone/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/standalone/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/standalone/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/standalone/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/standalone/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/standalone/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/standalone/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/standalone/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/standalone/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/standalone/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/standalone/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/standalone/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/standalone/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/standalone/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/standalone/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/standalone/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/standalone/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/standalone/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/standalone/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- package/.next/static/chunks/02pq76u7y4v9-.js +0 -22
- package/.next/static/chunks/0cmq0exd4d0h9.js +0 -1
- package/.next/static/chunks/0i02yxppzds1o.js +0 -1
- package/.next/static/chunks/0m_p4k-q2qh--.js +0 -1
- package/.next/static/chunks/0oyslj62jkubd.js +0 -1
- package/.next/static/chunks/0vo-l8hxneba6.css +0 -3
- package/.next/static/chunks/0yh8z2tbrc5i_.js +0 -1
- package/.next/static/chunks/17-rhp8sg4m1b.js +0 -44
- package/.next/static/chunks/172e10mi-tpo_.js +0 -34
- package/.next/static/chunks/1ei5vbe2uw6fl.js +0 -1
- package/.next/static/chunks/1f7_pl_wq7lh3.js +0 -11
- package/.next/static/chunks/1jzbe7zdx9vbj.js +0 -2
- package/.next/static/chunks/1m3017gp790pw.js +0 -45
- package/.next/static/chunks/1t20e8u0st7ep.js +0 -1
- package/.next/static/chunks/2-ch9rm27eril.js +0 -11
- package/.next/static/chunks/2ldv-v3s9yaif.js +0 -1
- package/.next/static/chunks/3bp284gjf7dyq.js +0 -1
- package/.next/static/chunks/3k1f6clbn3gj3.js +0 -7
- package/.next/static/chunks/3l4t8je6iguzc.js +0 -1
- package/.next/static/chunks/3tplzuc9jk-tl.js +0 -1
- package/.next/static/chunks/42m0bqr8pbovz.js +0 -11
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_buildManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → 3NCyJyAPDCEYsYTwF1Ieu}/_ssgManifest.js +0 -0
|
@@ -10,8 +10,18 @@
|
|
|
10
10
|
// (app/globals.css, html[data-backdrop]), and the dot colours the map draws with
|
|
11
11
|
// (TIER_COLORS, a live object every view reads).
|
|
12
12
|
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
13
|
+
// Dark or light is the background's own: a look whose background is light
|
|
14
|
+
// (Daylight, Paper, or any colour you pick) turns the words, borders and
|
|
15
|
+
// raised surfaces dark (lightTokens). The app's colours are CSS variables
|
|
16
|
+
// whose fallbacks are the dark values they always had, so a dark look sets
|
|
17
|
+
// none of them and draws exactly as before (Blake, 2026-10-03: "id like a
|
|
18
|
+
// light mode").
|
|
19
|
+
//
|
|
20
|
+
// A look also has a way of drawing buttons (`buttons`, app/globals.css
|
|
21
|
+
// html[data-buttons]) and the map's dots (`dots`, app/components/ForceGraph.js):
|
|
22
|
+
// soft, flat, square, frosted, neon or bold; solid, droplet, flat, glow or plain
|
|
23
|
+
// (Blake: "buttons look the same … like apple glass it will look like blurred
|
|
24
|
+
// droplets and then for the obsidian it looks like obsidian with the nodes").
|
|
15
25
|
//
|
|
16
26
|
// What arrives from storage or a pasted theme code is untrusted: cleanTheme
|
|
17
27
|
// keeps only #rrggbb colours, the listed choices and numbers in range, so
|
|
@@ -25,6 +35,8 @@ export const FONTS = {
|
|
|
25
35
|
serif: 'ui-serif, "New York", Georgia, "Times New Roman", serif',
|
|
26
36
|
};
|
|
27
37
|
export const LINE_MODES = ['tier', 'one'];
|
|
38
|
+
export const BUTTONS = ['soft', 'flat', 'square', 'frosted', 'neon', 'bold'];
|
|
39
|
+
export const DOTS = ['solid', 'droplet', 'flat', 'glow', 'plain'];
|
|
28
40
|
|
|
29
41
|
/**
|
|
30
42
|
* A theme. `bg` is the colour behind everything, `bg2` the second colour of its
|
|
@@ -37,46 +49,68 @@ export const STANDARD = Object.freeze({
|
|
|
37
49
|
id: 'standard', name: 'Standard', blurb: 'The original: deep navy, gold, purple and blue.',
|
|
38
50
|
bg: '#0a0a1a', bg2: '#1a1440', backdrop: 'none', panel: '#0a0f1e', glass: 0.35, accent: '#3498db',
|
|
39
51
|
tiers: Object.freeze({ S: '#ffd700', A: '#9b59b6', B: '#3498db', C: '#95a5a6', D: '#bdc3c7' }),
|
|
40
|
-
you: '#ffffff', lines: 'tier', line: '#5a6274', font: 'system',
|
|
52
|
+
you: '#ffffff', lines: 'tier', line: '#5a6274', font: 'system', buttons: 'soft', dots: 'solid',
|
|
41
53
|
});
|
|
42
54
|
|
|
43
55
|
export const THEMES = Object.freeze([
|
|
44
56
|
STANDARD,
|
|
57
|
+
Object.freeze({
|
|
58
|
+
id: 'daylight', name: 'Daylight', blurb: 'Light, designed for it: white panels, ink text, deeper dots that read on white.',
|
|
59
|
+
bg: '#f4f6fb', bg2: '#dfe5f2', backdrop: 'none', panel: '#ffffff', glass: 0.25, accent: '#2563eb',
|
|
60
|
+
tiers: Object.freeze({ S: '#d99a00', A: '#8e44ad', B: '#2f80ed', C: '#6b7a86', D: '#a4afba' }),
|
|
61
|
+
you: '#111827', lines: 'tier', line: '#c5cbd8', font: 'system', buttons: 'soft', dots: 'solid',
|
|
62
|
+
}),
|
|
63
|
+
Object.freeze({
|
|
64
|
+
id: 'paper', name: 'Paper', blurb: 'Warm off-white and ink, like a printed chart. Flat, quiet, easy on the eyes.',
|
|
65
|
+
bg: '#f6f1e7', bg2: '#e6dcc8', backdrop: 'grid', panel: '#fbf8f1', glass: 0, accent: '#b4532a',
|
|
66
|
+
tiers: Object.freeze({ S: '#b7791f', A: '#7b4fa0', B: '#2c6e9b', C: '#7d8a80', D: '#b0a99a' }),
|
|
67
|
+
you: '#2b2118', lines: 'one', line: '#cbbfa8', font: 'serif', buttons: 'flat', dots: 'flat',
|
|
68
|
+
}),
|
|
45
69
|
Object.freeze({
|
|
46
70
|
id: 'contrast', name: 'High contrast', blurb: 'Pure black, the brightest dots, solid panels. Easiest to read.',
|
|
47
71
|
bg: '#000000', bg2: '#000000', backdrop: 'none', panel: '#000000', glass: 0, accent: '#4cc9f0',
|
|
48
72
|
tiers: Object.freeze({ S: '#ffe500', A: '#d08bff', B: '#4cc9f0', C: '#e6e6e6', D: '#ffffff' }),
|
|
49
|
-
you: '#ffffff', lines: 'tier', line: '#8a8a8a', font: 'system',
|
|
73
|
+
you: '#ffffff', lines: 'tier', line: '#8a8a8a', font: 'system', buttons: 'bold', dots: 'solid',
|
|
74
|
+
fg: Object.freeze(['#ffffff', '#f2f2f2', '#d9d9d9', '#bdbdbd', '#a0a0a0']), ink: '255, 255, 255',
|
|
50
75
|
}),
|
|
51
76
|
Object.freeze({
|
|
52
77
|
id: 'obsidian', name: 'Obsidian', blurb: 'Graphite and violet, grey links: the note-taking app’s graph.',
|
|
53
78
|
bg: '#1e1e1e', bg2: '#262626', backdrop: 'none', panel: '#262626', glass: 0.1, accent: '#8a7cf7',
|
|
54
79
|
tiers: Object.freeze({ S: '#e0c25a', A: '#a88bfa', B: '#7aa2f7', C: '#9aa0a6', D: '#c7c7c7' }),
|
|
55
|
-
you: '#a88bfa', lines: 'one', line: '#5c5c5c', font: 'system',
|
|
80
|
+
you: '#a88bfa', lines: 'one', line: '#5c5c5c', font: 'system', buttons: 'flat', dots: 'flat',
|
|
81
|
+
fg: Object.freeze(['#dcddde', '#bababa', '#999999', '#777777', '#5c5c5c']), ink: '220, 221, 222',
|
|
56
82
|
}),
|
|
57
83
|
Object.freeze({
|
|
58
84
|
id: 'glass', name: 'Glass', blurb: 'Frosted panels over slow colour: a heads-up display, see-through.',
|
|
59
|
-
bg: '#0b1020', bg2: '#5b21b6', backdrop: 'glow', panel: '#
|
|
85
|
+
bg: '#0b1020', bg2: '#5b21b6', backdrop: 'glow', panel: '#12121e', glass: 0.9, accent: '#7dd3fc',
|
|
60
86
|
tiers: Object.freeze({ S: '#fde68a', A: '#f0abfc', B: '#7dd3fc', C: '#cbd5e1', D: '#e2e8f0' }),
|
|
61
|
-
you: '#ffffff', lines: 'tier', line: '#94a3b8', font: 'rounded',
|
|
87
|
+
you: '#ffffff', lines: 'tier', line: '#94a3b8', font: 'rounded', buttons: 'frosted', dots: 'droplet',
|
|
88
|
+
fg: Object.freeze(['#ffffff', '#f1f4ff', '#cdd3e6', '#adb4cb', '#929ab2']), ink: '255, 255, 255',
|
|
62
89
|
}),
|
|
63
90
|
Object.freeze({
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
91
|
+
// An analysis tool's look (Blake, 2026-10-03: "the bare white background
|
|
92
|
+
// with the flat purely data based look that makes it feel less cluttered
|
|
93
|
+
// and more about the numbers"): a white canvas, flat grey panels, plain
|
|
94
|
+
// outlined dots in a colour-blind-safe palette (Okabe–Ito), black labels,
|
|
95
|
+
// thin grey lines, and nothing decorative (app/globals.css html[data-theme="analyst"]).
|
|
96
|
+
id: 'analyst', name: 'Analyst', blurb: 'A bare white canvas and flat panels: plain dots, black labels, just the network and its numbers.',
|
|
97
|
+
bg: '#ffffff', bg2: '#e8e8e8', backdrop: 'none', panel: '#f4f4f4', glass: 0, accent: '#2b6cb0',
|
|
98
|
+
tiers: Object.freeze({ S: '#d55e00', A: '#0072b2', B: '#009e73', C: '#cc79a7', D: '#8c8c8c' }),
|
|
99
|
+
you: '#111111', lines: 'one', line: '#9a9a9a', font: 'system', buttons: 'square', dots: 'plain',
|
|
68
100
|
}),
|
|
69
101
|
Object.freeze({
|
|
70
102
|
id: 'space', name: 'Space', blurb: 'Your network as a star chart: deep black, a nebula, stars behind it all.',
|
|
71
103
|
bg: '#04050d', bg2: '#2b1055', backdrop: 'stars', panel: '#0b0d1f', glass: 0.5, accent: '#a78bfa',
|
|
72
104
|
tiers: Object.freeze({ S: '#ffd166', A: '#c77dff', B: '#4cc9f0', C: '#adb5bd', D: '#6c757d' }),
|
|
73
|
-
you: '#ffffff', lines: 'tier', line: '#3a3f5c', font: 'system',
|
|
105
|
+
you: '#ffffff', lines: 'tier', line: '#3a3f5c', font: 'system', buttons: 'soft', dots: 'glow',
|
|
106
|
+
fg: Object.freeze(['#eef2ff', '#cdd5f0', '#9aa5c4', '#76809e', '#565f7c']), ink: '205, 218, 255',
|
|
74
107
|
}),
|
|
75
108
|
Object.freeze({
|
|
76
109
|
id: 'synthwave', name: 'Synthwave', blurb: 'Neon on a purple horizon. For the larpers.',
|
|
77
110
|
bg: '#1a0b2e', bg2: '#ff2a6d', backdrop: 'horizon', panel: '#24103f', glass: 0.4, accent: '#ff2a6d',
|
|
78
111
|
tiers: Object.freeze({ S: '#ffe66d', A: '#ff2a6d', B: '#05d9e8', C: '#d1f7ff', D: '#8c7aa9' }),
|
|
79
|
-
you: '#ffffff', lines: 'tier', line: '#7a3b9e', font: 'rounded',
|
|
112
|
+
you: '#ffffff', lines: 'tier', line: '#7a3b9e', font: 'rounded', buttons: 'neon', dots: 'glow',
|
|
113
|
+
fg: Object.freeze(['#fff5ff', '#ecdcff', '#c6aae4', '#9e83c2', '#7b649f']), ink: '255, 220, 255',
|
|
80
114
|
}),
|
|
81
115
|
]);
|
|
82
116
|
|
|
@@ -110,11 +144,27 @@ export function cleanTheme(raw) {
|
|
|
110
144
|
if (BACKDROPS.includes(c.backdrop)) custom.backdrop = c.backdrop;
|
|
111
145
|
if (Object.hasOwn(FONTS, c.font ?? '')) custom.font = c.font;
|
|
112
146
|
if (LINE_MODES.includes(c.lines)) custom.lines = c.lines;
|
|
147
|
+
if (BUTTONS.includes(c.buttons)) custom.buttons = c.buttons;
|
|
148
|
+
if (DOTS.includes(c.dots)) custom.dots = c.dots;
|
|
113
149
|
const glass = Number(c.glass);
|
|
114
150
|
if (c.glass != null && Number.isFinite(glass)) custom.glass = Math.round(Math.min(1, Math.max(0, glass)) * 100) / 100;
|
|
115
151
|
return { base, custom };
|
|
116
152
|
}
|
|
117
153
|
|
|
154
|
+
/**
|
|
155
|
+
* In lib/settings.js, so the look travels with a backup, an export and a
|
|
156
|
+
* restore. null until a look is saved on this network: the browser's own
|
|
157
|
+
* choice then stands and is saved once (lib/theme-store.js).
|
|
158
|
+
*/
|
|
159
|
+
export const THEME_SETTING = {
|
|
160
|
+
default: null,
|
|
161
|
+
parse(value) {
|
|
162
|
+
if (value === null) return null;
|
|
163
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error('A look is a preset with your own changes on top.');
|
|
164
|
+
return cleanTheme(value);
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
|
|
118
168
|
/** The theme a choice comes to: its preset with your changes on top. */
|
|
119
169
|
export function resolveTheme(choice) {
|
|
120
170
|
const { base, custom } = cleanTheme(choice);
|
|
@@ -131,6 +181,34 @@ export function resolveTheme(choice) {
|
|
|
131
181
|
const rgb = (hex) => [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));
|
|
132
182
|
const rgba = (hex, a) => `rgba(${rgb(hex).join(', ')}, ${a})`;
|
|
133
183
|
|
|
184
|
+
/** a, moved t of the way to b. */
|
|
185
|
+
const mix = (a, b, t) => `#${rgb(a).map((v, i) => Math.round(v + (rgb(b)[i] - v) * t).toString(16).padStart(2, '0')).join('')}`;
|
|
186
|
+
|
|
187
|
+
/** How light a colour is, 0 to 1 (relative luminance). */
|
|
188
|
+
export function luminance(hex) {
|
|
189
|
+
const lin = (c) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4);
|
|
190
|
+
const [r, g, b] = rgb(hex).map((v) => lin(v / 255));
|
|
191
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
192
|
+
}
|
|
193
|
+
/** A light look: its background is light, whatever it's called. */
|
|
194
|
+
export const isLight = (theme) => luminance(theme.bg) > 0.45;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* What a light look puts on top of the dark defaults: the overlays that raise a
|
|
198
|
+
* surface or draw a border turn to ink, the panels' dark wash to white, the
|
|
199
|
+
* words to five steps of ink, and the app's own colours to deeper shades that
|
|
200
|
+
* read as words on a light page (gold text on white disappears).
|
|
201
|
+
*/
|
|
202
|
+
function lightTokens() {
|
|
203
|
+
return {
|
|
204
|
+
'--sd-ink': '18, 22, 40',
|
|
205
|
+
'--sd-shade': '255, 255, 255',
|
|
206
|
+
'--sd-fg-1': '#11141c', '--sd-fg-2': '#2e3442', '--sd-fg-3': '#545b6b', '--sd-fg-4': '#747b8b', '--sd-fg-5': '#9aa0ad',
|
|
207
|
+
'--sd-gold': '#9a6b00', '--sd-blue': '#1f63b3', '--sd-orange': '#c2410c', '--sd-green': '#0b7a47',
|
|
208
|
+
'--sd-purple': '#6d3fa8', '--sd-cyan': '#0e7490', '--sd-coral': '#c2410c', '--sd-red': '#c0392b',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
|
|
134
212
|
/**
|
|
135
213
|
* The CSS variables a choice sets on the page. Every value is built here from
|
|
136
214
|
* cleaned colours and numbers, never copied from what was saved.
|
|
@@ -138,25 +216,37 @@ const rgba = (hex, a) => `rgba(${rgb(hex).join(', ')}, ${a})`;
|
|
|
138
216
|
export function themeVars(choice) {
|
|
139
217
|
const t = resolveTheme(choice);
|
|
140
218
|
const glass = Math.min(1, Math.max(0, Number(t.glass) || 0));
|
|
219
|
+
const preset = presetOf(t.id);
|
|
141
220
|
return {
|
|
142
221
|
'--sd-bg': t.bg,
|
|
143
222
|
'--sd-bg2': t.bg2,
|
|
144
223
|
'--sd-accent': t.accent,
|
|
145
|
-
// The side panels: the theme's tint, more see-through and more blurred the
|
|
146
|
-
|
|
147
|
-
'
|
|
148
|
-
|
|
149
|
-
'--sd-
|
|
150
|
-
|
|
224
|
+
// The side panels: the theme's tint, more see-through and more blurred the
|
|
225
|
+
// more glass. Never clearer than about 40%: a panel full of words is
|
|
226
|
+
// Apple's "regular" glass, which keeps them readable, not the clear kind.
|
|
227
|
+
'--sd-panel': rgba(t.panel, Math.round((0.92 - 0.55 * glass) * 100) / 100),
|
|
228
|
+
'--sd-panel-blur': `blur(${Math.round(8 + 18 * glass)}px) saturate(${(1 + 0.9 * glass).toFixed(2)})`,
|
|
229
|
+
// The header: clear, or glass on a glass theme.
|
|
230
|
+
'--sd-header': glass >= 0.6 ? rgba(t.panel, 0.22) : 'transparent',
|
|
231
|
+
'--sd-header-blur': glass >= 0.6 ? 'blur(20px) saturate(1.8)' : 'none',
|
|
232
|
+
// A dark look's own words and overlays: Obsidian's greys, GitHub's for
|
|
233
|
+
// Analyst, brighter "vibrant" ones on Glass (lib/themes.js presets).
|
|
234
|
+
...(!isLight(t) && preset.fg ? Object.fromEntries(preset.fg.map((c, i) => [`--sd-fg-${i + 1}`, c])) : {}),
|
|
235
|
+
...(!isLight(t) && preset.ink ? { '--sd-ink': preset.ink } : {}),
|
|
151
236
|
'--sd-font': FONTS[t.font] || FONTS.system,
|
|
152
237
|
'--sd-tier-s': t.tiers.S, '--sd-tier-a': t.tiers.A, '--sd-tier-b': t.tiers.B, '--sd-tier-c': t.tiers.C, '--sd-tier-d': t.tiers.D,
|
|
238
|
+
...(isLight(t) ? lightTokens() : {}),
|
|
239
|
+
// Cards, pickers, tooltips and the notch, in the look's own colour (Standard keeps the navy they always had).
|
|
240
|
+
...(t.id === 'standard' && !t.customised ? {} : isLight(t)
|
|
241
|
+
? { '--sd-surface': 'rgba(255, 255, 255, 0.97)', '--sd-card': '#ffffff' }
|
|
242
|
+
: { '--sd-surface': rgba(mix(t.bg, '#ffffff', 0.06), glass >= 0.6 ? 0.82 : 0.96), '--sd-card': mix(t.bg, '#ffffff', 0.08) }),
|
|
153
243
|
};
|
|
154
244
|
}
|
|
155
245
|
|
|
156
246
|
/** What the html element carries for the stylesheet: the theme and its backdrop. */
|
|
157
247
|
export function themeAttrs(choice) {
|
|
158
248
|
const t = resolveTheme(choice);
|
|
159
|
-
return { theme: t.id, backdrop: t.backdrop };
|
|
249
|
+
return { theme: t.id, backdrop: t.backdrop, mode: isLight(t) ? 'light' : 'dark', buttons: t.buttons, dots: t.dots };
|
|
160
250
|
}
|
|
161
251
|
|
|
162
252
|
// A theme code to share: the choice as base64 JSON, behind a short prefix.
|
|
@@ -183,4 +273,4 @@ export function decodeTheme(code) {
|
|
|
183
273
|
// it stay as they are. On the server it holds Standard's.
|
|
184
274
|
export const TIER_COLORS = { ...STANDARD.tiers };
|
|
185
275
|
// The rest of what the map draws from a theme: your dot, and its lines.
|
|
186
|
-
export const MAP_LOOK = { you: STANDARD.you, lines: STANDARD.lines, line: STANDARD.line, bg: STANDARD.bg };
|
|
276
|
+
export const MAP_LOOK = { you: STANDARD.you, lines: STANDARD.lines, line: STANDARD.line, bg: STANDARD.bg, dots: STANDARD.dots, light: false, text: '#ffffff' };
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// Settings → LinkedIn usage: how close this account is to the line, in one
|
|
2
|
+
// look, the way Claude's own usage page shows a plan's limits. No Node
|
|
3
|
+
// imports, so the page and the tests share it; the counting itself is in
|
|
4
|
+
// lib/linkedin-limits.js (linkedinUsage), from the files the scanner writes.
|
|
5
|
+
//
|
|
6
|
+
// Why it exists: on 2026-09-28 a real account was restricted after 373
|
|
7
|
+
// searches in 24 hours (TRAPS §16), and the only budget view was a box folded
|
|
8
|
+
// away on the Scan page. Every number here is either counted from the
|
|
9
|
+
// scanner's own record or is a rule with a stated source; nothing is a guess
|
|
10
|
+
// presented as a fact.
|
|
11
|
+
|
|
12
|
+
import { RESTRICTED_AT, RISKY_DAILY, SAFE_LIMITS, limitNote } from './search-risk.js';
|
|
13
|
+
|
|
14
|
+
const HOUR_MS = 3600 * 1000;
|
|
15
|
+
const DAY_MS = 24 * HOUR_MS;
|
|
16
|
+
|
|
17
|
+
// Auto scan's own ceilings (scripts/scrape.py AUTO_DAY_CAP, AUTO_WEEK_CAP,
|
|
18
|
+
// DRIP_HOURS, SESSION_PAGES, SESSION_REST, AUTO_PUSHBACK_REST). They hold
|
|
19
|
+
// however high the budget is set. tests/usage.test.mjs reads the scanner's
|
|
20
|
+
// numbers and checks these match, so the page can't describe rules the
|
|
21
|
+
// scanner doesn't keep.
|
|
22
|
+
export const AUTO = {
|
|
23
|
+
day: 40, // searches in any 24 hours
|
|
24
|
+
week: 200, // searches in any 7 days
|
|
25
|
+
hours: [9, 18], // searches only from 09:00 to 18:00, this computer's clock
|
|
26
|
+
sitting: 8, // searches in one sitting
|
|
27
|
+
sittingRest: 60 * 60, // seconds of rest after each sitting
|
|
28
|
+
pushbackRest: 2 * 24 * 3600, // seconds off after any check from LinkedIn (scrape.py AUTO_PUSHBACK_REST)
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// About how many people one search finds. A page of LinkedIn's people search
|
|
32
|
+
// shows up to 10 (scripts/scrape.py, "10 results per page"); 9 allows for the
|
|
33
|
+
// last page of each list, which is usually short. An estimate, and the page
|
|
34
|
+
// says so (neo's handoff, 2026-10-03).
|
|
35
|
+
export const PEOPLE_PER_SEARCH = 9;
|
|
36
|
+
|
|
37
|
+
// Searches in 24 hours that count as too close: 60% of the 373 that got an
|
|
38
|
+
// account restricted. A margin on a number seen once, not a known safe line.
|
|
39
|
+
export const DANGER_AT = Math.ceil(0.6 * RESTRICTED_AT);
|
|
40
|
+
|
|
41
|
+
// LinkedIn doesn't publish a free account's monthly limit. People report
|
|
42
|
+
// somewhere around 250 to 350 searches (TRAPS §35); shown as a range people
|
|
43
|
+
// report, never as LinkedIn's number.
|
|
44
|
+
export const REPORTED_MONTH = [250, 350];
|
|
45
|
+
|
|
46
|
+
// A search within this long after a pushback is the same search that met it,
|
|
47
|
+
// not a new one: the evidence file's name is only to the second.
|
|
48
|
+
const PUSHBACK_GRACE_MS = 60 * 1000;
|
|
49
|
+
|
|
50
|
+
export const LEVELS = {
|
|
51
|
+
ok: { label: 'Well within', color: '#00ff88' },
|
|
52
|
+
'above-default': { label: 'Above the default', color: '#FFD700' },
|
|
53
|
+
risky: { label: 'Risky', color: '#FF8C42' },
|
|
54
|
+
danger: { label: 'Too close', color: '#ff6b6b' },
|
|
55
|
+
paused: { label: 'Paused', color: '#ff6b6b' },
|
|
56
|
+
unknown: { label: 'Can’t tell', color: '#8b9a9a' },
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Where this account stands, worst first:
|
|
61
|
+
* paused a cooldown is on: nothing searches until it ends
|
|
62
|
+
* danger 60% of 373 or more in 24 hours, or searching again within
|
|
63
|
+
* a day of LinkedIn pushing back
|
|
64
|
+
* risky over 100 in 24 hours (what the budget picker asks about)
|
|
65
|
+
* above-default over the default 50 in 24 hours
|
|
66
|
+
* ok within the default
|
|
67
|
+
* unknown the record can't be read (the scanner then counts the day as used)
|
|
68
|
+
*/
|
|
69
|
+
export function usageLevel({ cooldown, searchesDay, lastPushback, searchesSincePushback, now = Date.now() } = {}) {
|
|
70
|
+
if (cooldown) return 'paused';
|
|
71
|
+
if (!Number.isFinite(searchesDay)) return 'unknown';
|
|
72
|
+
if (searchesDay >= DANGER_AT) return 'danger';
|
|
73
|
+
if (searchedAfterPushback({ lastPushback, searchesSincePushback, now })) return 'danger';
|
|
74
|
+
if (searchesDay > RISKY_DAILY) return 'risky';
|
|
75
|
+
if (searchesDay > SAFE_LIMITS.daily) return 'above-default';
|
|
76
|
+
return 'ok';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** LinkedIn pushed back less than a day ago and searching has carried on since. */
|
|
80
|
+
export function searchedAfterPushback({ lastPushback, searchesSincePushback, now = Date.now() } = {}) {
|
|
81
|
+
const at = lastPushback?.at;
|
|
82
|
+
return Number.isFinite(at) && now - at < DAY_MS && now >= at && searchesSincePushback > 0;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Searches made after a pushback, from the record's times (epoch seconds). */
|
|
86
|
+
export function countAfter(times, atMs) {
|
|
87
|
+
if (!Number.isFinite(atMs) || !Array.isArray(times)) return 0;
|
|
88
|
+
const from = (atMs + PUSHBACK_GRACE_MS) / 1000;
|
|
89
|
+
return times.filter((t) => t > from).length;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* What's left, as searches and about how many people they'd find: the daily
|
|
94
|
+
* or monthly budget, whichever runs out first (null for one with no cap).
|
|
95
|
+
* Nothing while scanning is paused. null when neither has a cap.
|
|
96
|
+
*/
|
|
97
|
+
export function estimate({ leftDay, leftMonth, paused = false } = {}) {
|
|
98
|
+
const lefts = [leftDay, leftMonth].filter((n) => Number.isFinite(n));
|
|
99
|
+
if (!lefts.length) return null;
|
|
100
|
+
const searches = paused ? 0 : Math.max(0, Math.min(...lefts));
|
|
101
|
+
const by = leftDay != null && leftMonth != null ? (leftDay <= leftMonth ? 'day' : 'month') : leftDay != null ? 'day' : 'month';
|
|
102
|
+
return { searches, people: searches * PEOPLE_PER_SEARCH, by };
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/** The plain-word warning for a level, or null when there's nothing to warn about. */
|
|
106
|
+
export function levelWarning(level, { searchesDay, cooldown, lastPushback, now = Date.now() } = {}) {
|
|
107
|
+
if (level === 'paused') {
|
|
108
|
+
// As the Scan page's banner says it (app/components/LinkedInLimits.js CooldownBanner).
|
|
109
|
+
const why = String(cooldown?.reason || 'LinkedIn pushed back');
|
|
110
|
+
return `Scanning is paused${cooldown?.until ? ` until ${whenText(cooldown.until)}` : ''}. `
|
|
111
|
+
+ `${why.charAt(0).toUpperCase()}${why.slice(1)}. Nothing that searches LinkedIn runs until then, so the account can recover.`;
|
|
112
|
+
}
|
|
113
|
+
if (level === 'danger') {
|
|
114
|
+
if (searchesDay >= DANGER_AT) {
|
|
115
|
+
return `${searchesDay} searches in the last 24 hours. A real account was restricted after ${RESTRICTED_AT}. `
|
|
116
|
+
+ 'Stop scanning until this comes down: each search stops counting 24 hours after it was made.';
|
|
117
|
+
}
|
|
118
|
+
return `LinkedIn pushed back ${agoText(lastPushback?.at, now)}, and searching has carried on since. `
|
|
119
|
+
+ 'Carrying on after a warning is what LinkedIn says turns it into a restriction. Leave it at least a day.';
|
|
120
|
+
}
|
|
121
|
+
if (level === 'risky') {
|
|
122
|
+
return `More than ${RISKY_DAILY} searches in the last 24 hours. That is past what Six Degrees asks you to confirm, `
|
|
123
|
+
+ `and a free account's whole month may be ${REPORTED_MONTH[0]} to ${REPORTED_MONTH[1]}.`;
|
|
124
|
+
}
|
|
125
|
+
if (level === 'above-default') {
|
|
126
|
+
return `More than the default ${SAFE_LIMITS.daily} searches in the last 24 hours. `
|
|
127
|
+
+ 'The default leaves room under limits LinkedIn doesn’t publish.';
|
|
128
|
+
}
|
|
129
|
+
if (level === 'unknown') {
|
|
130
|
+
return 'The record of searches on this computer couldn’t be read, so the scanner counts today’s budget as used until it can.';
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The warning box's paragraphs, in order: the level's warning, then the Scan
|
|
137
|
+
* page's note on a risky budget (lib/search-risk.js limitNote). The 373 is
|
|
138
|
+
* said once: when the level's warning names it, the note leaves its own 373
|
|
139
|
+
* sentence out. The Scan page's budget box still says the note whole.
|
|
140
|
+
*/
|
|
141
|
+
export function warningParts(level, facts = {}, limits = {}) {
|
|
142
|
+
const warning = levelWarning(level, facts);
|
|
143
|
+
const namesRestriction = level === 'danger' && facts.searchesDay >= DANGER_AT;
|
|
144
|
+
const note = limitNote(limits, { restriction: !namesRestriction });
|
|
145
|
+
return [warning, note].filter(Boolean);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** A bar's scale: past its last tick, and past what's been used. */
|
|
149
|
+
export function barMax(used, ticks = []) {
|
|
150
|
+
const top = Math.max(0, ...ticks.filter(Number.isFinite));
|
|
151
|
+
return Math.max(Math.ceil(top * 1.08), Math.ceil((Number(used) || 0) * 1.05), 1);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/** Midnight Pacific as LinkedIn's month turns over: "Nov 1, 12:00 AM Pacific". */
|
|
155
|
+
export function pacificText(ms) {
|
|
156
|
+
const s = new Intl.DateTimeFormat('en-US', {
|
|
157
|
+
timeZone: 'America/Los_Angeles', month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit',
|
|
158
|
+
}).format(new Date(ms));
|
|
159
|
+
return `${s.replace(/ /g, ' ')} Pacific`;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** A time on this computer's clock: "Sat, Oct 3, 3:12 PM". */
|
|
163
|
+
export function whenText(ms) {
|
|
164
|
+
return new Date(ms).toLocaleString(undefined, { weekday: 'short', month: 'short', day: 'numeric', hour: 'numeric', minute: '2-digit' })
|
|
165
|
+
.replace(/ /g, ' ');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** "in 3 h 12 min", "in 40 min", "in under a minute", or "now". */
|
|
169
|
+
export function untilText(ms, now = Date.now()) {
|
|
170
|
+
const left = ms - now;
|
|
171
|
+
if (!(left > 0)) return 'now';
|
|
172
|
+
if (left < 60 * 1000) return 'in under a minute';
|
|
173
|
+
const m = Math.round(left / 60000);
|
|
174
|
+
if (m < 60) return `in ${m} min`;
|
|
175
|
+
const h = Math.floor(m / 60);
|
|
176
|
+
if (h >= 48) return `in ${Math.round(h / 24)} days`;
|
|
177
|
+
return `in ${h} h${m % 60 ? ` ${m % 60} min` : ''}`;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** "3 h ago", "40 min ago", "just now". */
|
|
181
|
+
export function agoText(ms, now = Date.now()) {
|
|
182
|
+
if (!Number.isFinite(ms)) return 'recently';
|
|
183
|
+
const m = Math.round((now - ms) / 60000);
|
|
184
|
+
if (m < 1) return 'just now';
|
|
185
|
+
if (m < 60) return `${m} min ago`;
|
|
186
|
+
const h = Math.round(m / 60);
|
|
187
|
+
if (h < 48) return `${h} h ago`;
|
|
188
|
+
return `${Math.round(h / 24)} days ago`;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** "9 AM to 6 PM" from AUTO.hours. */
|
|
192
|
+
export function hoursText([from, to] = AUTO.hours) {
|
|
193
|
+
const h = (n) => `${n % 12 || 12} ${n < 12 ? 'AM' : 'PM'}`;
|
|
194
|
+
return `${h(from)} to ${h(to)}`;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Auto's connection requests have caps of their own, in the same record
|
|
198
|
+
// (lib/auto-connect.js, scripts/scrape.py INVITE_DAY_CAP and INVITE_WEEK_CAP):
|
|
199
|
+
// the usage page shows them beside the searches and profile views.
|
|
200
|
+
export { INVITE_CAPS, REPORTED_WEEKLY_INVITES } from './auto-connect.js';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "six-degrees",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "six-degrees",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.8.0",
|
|
10
10
|
"license": "MIT",
|
|
11
11
|
"os": [
|
|
12
12
|
"darwin",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "six-degrees",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Map your professional network as a galaxy — leverage tiers, bridges into new circles, and the shortest path to anyone. Runs locally on your own data.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Blake Burford",
|