six-degrees 0.6.0 → 0.7.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 +3 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +14 -14
- package/.next/standalone/.next/routes-manifest.json +18 -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 +2 -2
- 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 +4 -2
- 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/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 +20 -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 +3 -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]__15wc9e-._.js → [root-of-the-server]__063s0x7._.js} +2 -2
- 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]__13dx4sd._.js → [root-of-the-server]__0_4y8z7._.js} +3 -3
- 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]__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/[root-of-the-server]__20rwfdw._.js +1 -1
- package/.next/standalone/.next/server/chunks/_02twlca._.js +1 -1
- 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_005abye.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0b17r6v.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +7 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0doq0t-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0fd2rlw.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0is4qoc.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0jnfp2e.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0nef_n7.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0plrzra.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_13a4m0c.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1if17c-.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1j-zw7v.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1sngt-q.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1v2sgme.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1vh-tgx.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1zaubz7.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/_01o3i5y._.js +7 -0
- package/.next/standalone/.next/server/chunks/ssr/_02sband._.js +7 -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/_0gy11ar._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0hb-dhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_14nxd3q._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_189g8lg._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_1k9qfsk._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.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_import_page_1fmu6_l.js +1 -1
- 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 +25 -13
- 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/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- 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/03-_esd2x_yk6.js +1 -0
- package/.next/standalone/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/standalone/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/standalone/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
- package/.next/standalone/.next/static/chunks/0e3g0sil79cus.js +21 -0
- package/.next/standalone/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/standalone/.next/static/chunks/0p3g5tfostsep.js +7 -0
- package/.next/standalone/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
- package/.next/standalone/.next/static/chunks/163b-20vwa06i.js +34 -0
- package/.next/standalone/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/standalone/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
- package/.next/standalone/.next/static/chunks/1qbjermbf68xj.js +1 -0
- package/.next/standalone/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/standalone/.next/static/chunks/23_1z47al92nz.js +57 -0
- package/.next/standalone/.next/static/chunks/260bomtr214m8.js +34 -0
- package/.next/standalone/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
- package/.next/standalone/.next/static/chunks/2xk2ra4piiuod.js +34 -0
- package/.next/standalone/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/standalone/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
- package/.next/standalone/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/standalone/.next/static/chunks/3b0-14cxqsprt.js +1 -0
- package/.next/standalone/.next/static/chunks/3jarus1_38s2z.js +1 -0
- package/.next/standalone/.next/static/chunks/3ssu341hav_sq.css +3 -0
- package/.next/standalone/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
- package/.next/standalone/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/standalone/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
- package/.next/standalone/CHANGELOG.md +143 -0
- package/.next/standalone/README.md +71 -49
- package/.next/standalone/SECURITY.md +17 -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/queue/route.js +1 -1
- package/.next/standalone/app/api/scraper/route.js +120 -32
- package/.next/standalone/app/api/social/crm/route.js +2 -1
- package/.next/standalone/app/components/AppHeader.js +20 -16
- package/.next/standalone/app/components/AppTabs.js +8 -8
- 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 +184 -112
- 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 +17 -17
- 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 +24 -19
- 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 +25 -25
- 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 +22 -18
- package/.next/standalone/app/components/ScanTrail.js +8 -5
- package/.next/standalone/app/components/SeparationView.js +168 -104
- package/.next/standalone/app/components/Sidebar.js +161 -161
- 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/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 +313 -0
- package/.next/standalone/app/components/ui.js +8 -8
- package/.next/standalone/app/globals.css +159 -2
- package/.next/standalone/app/import/page.js +94 -38
- package/.next/standalone/app/launch/page.js +5 -5
- package/.next/standalone/app/layout.js +6 -2
- package/.next/standalone/app/page.js +53 -37
- 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 +54 -54
- 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 +221 -125
- 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/backups.js +458 -0
- package/.next/standalone/lib/chain-layout.js +32 -0
- 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/ingest.js +1 -1
- package/.next/standalone/lib/linkedin-limits.js +212 -11
- package/.next/standalone/lib/liquid-glass.js +59 -0
- package/.next/standalone/lib/notifications.js +13 -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/scanner-setup.js +97 -15
- package/.next/standalone/lib/scraper-client.js +17 -3
- package/.next/standalone/lib/search-risk.js +7 -3
- package/.next/standalone/lib/settings-client.js +5 -3
- package/.next/standalone/lib/settings.js +10 -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 +195 -0
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/scripts/scrape.py +26 -2
- package/.next/static/chunks/03-_esd2x_yk6.js +1 -0
- package/.next/static/chunks/03-demj2iy-0p.js +44 -0
- package/.next/static/chunks/0_1r-3csplxnj.js +1 -0
- package/.next/static/chunks/0an_b6zi1r_qq.js +5 -0
- package/.next/static/chunks/0e3g0sil79cus.js +21 -0
- package/.next/static/chunks/0kscsqnvfq3-r.js +1 -0
- package/.next/static/chunks/0p3g5tfostsep.js +7 -0
- package/.next/static/chunks/0zd0t7e60bn4z.js +1 -0
- package/.next/static/chunks/163b-20vwa06i.js +34 -0
- package/.next/static/chunks/{0ws7zy0w57ufi.js → 1eyajb9ntzlrl.js} +1 -1
- package/.next/static/chunks/1pa-2v1ajvrko.js +1 -0
- package/.next/static/chunks/1qbjermbf68xj.js +1 -0
- package/.next/static/chunks/1z9lb-dbcg4aa.js +1 -0
- package/.next/static/chunks/23_1z47al92nz.js +57 -0
- package/.next/static/chunks/260bomtr214m8.js +34 -0
- package/.next/static/chunks/2eo9pqq9gay3r.js +34 -0
- package/.next/static/chunks/2xk2ra4piiuod.js +34 -0
- package/.next/static/chunks/2z1-q0_vunbql.js +2 -0
- package/.next/static/chunks/2zf4jmz9l3li2.js +1 -0
- package/.next/static/chunks/34g73qhayuevu.js +1 -0
- package/.next/static/chunks/3b0-14cxqsprt.js +1 -0
- package/.next/static/chunks/3jarus1_38s2z.js +1 -0
- package/.next/static/chunks/3ssu341hav_sq.css +3 -0
- package/.next/static/chunks/3v1qd3sqhqn0d.js +1 -0
- package/.next/static/chunks/43pg2sursiypz.js +1 -0
- package/.next/static/chunks/44yn0tcd9dfk3.js +1 -0
- package/CHANGELOG.md +143 -0
- package/README.md +71 -49
- package/SECURITY.md +17 -11
- package/lib/backups.js +458 -0
- package/lib/chain-layout.js +32 -0
- 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/ingest.js +1 -1
- package/lib/linkedin-limits.js +212 -11
- package/lib/liquid-glass.js +59 -0
- package/lib/notifications.js +13 -0
- package/lib/scan-pace.js +11 -0
- package/lib/scan-progress.js +20 -0
- package/lib/scan-risk.js +44 -0
- package/lib/scanner-setup.js +97 -15
- package/lib/scraper-client.js +17 -3
- package/lib/search-risk.js +7 -3
- package/lib/settings-client.js +5 -3
- package/lib/settings.js +10 -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 +195 -0
- package/package.json +1 -1
- package/scripts/scrape.py +26 -2
- 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]__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/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/_2105jz8._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.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 → ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_buildManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dQUvvVSXqbkEFC3-CNcwT → ZVpLBK-2vpllv2HxOFs2d}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,89349,e=>{"use strict";var t=e.i(71645);let n="http://www.w3.org/2000/svg",r={side:{r:2,bezel:26,scale:56},bar:{r:20,bezel:12,scale:22}};e.s(["default",0,function(){return(0,t.useEffect)(()=>{let e=document.documentElement,t=window.matchMedia?.("(prefers-reduced-transparency: reduce)"),o=null,a=new Map,s=0,i=null,l=()=>{if(o)return o;let e=document.createElementNS(n,"svg");return e.setAttribute("width","0"),e.setAttribute("height","0"),e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.pointerEvents="none",o=document.createElementNS(n,"defs"),e.appendChild(o),document.body.appendChild(e),o},u=()=>{let o="frosted"!==e.dataset.buttons||t?.matches?[]:[...document.querySelectorAll("[data-glass-panel]")];for(let[e,t]of a)o.includes(e)||(e.style.removeProperty("--lg-lens"),document.getElementById(t.id)?.remove(),a.delete(e));for(let e of o){let t=Math.round(e.offsetWidth),o=Math.round(e.offsetHeight);if(t<20||o<20)continue;let i=a.get(e);if(i&&i.w===t&&i.h===o)continue;let u=r[e.dataset.glassPanel]||r.side,c=i?.id||`lg-lens-${++s}`;document.getElementById(c)?.remove();let d=document.createElementNS(n,"filter");for(let[e,t]of(d.setAttribute("id",c),Object.entries({x:"0",y:"0",width:"100%",height:"100%","color-interpolation-filters":"sRGB"})))d.setAttribute(e,t);let f=document.createElementNS(n,"feImage");for(let[e,n]of Object.entries({x:"0",y:"0",width:String(t),height:String(o),preserveAspectRatio:"none",result:"map"}))f.setAttribute(e,n);f.setAttribute("href",function(e,t,n,r){let o=document.createElement("canvas");o.width=e,o.height=t;let a=o.getContext("2d"),s=a.createImageData(e,t),i=s.data;for(let o=0;o<t;o++)for(let a=0;a<e;a++){let s=(o*e+a)*4,[l,u]=a<r+n||o<r+n||a>=e-r-n||o>=t-r-n?function(e,t,n,r,o,a){let s=e+.5-n/2,i=t+.5-r/2,l=Math.abs(s)-(n/2-o),u=Math.abs(i)-(r/2-o),c=Math.max(l,0),d=Math.max(u,0),f=Math.hypot(c,d),h=o-(f+Math.min(Math.max(l,u),0)),p=0,g=0;f>0?(p=c/f,g=d/f):l>u?p=1:g=1;let m=Math.max(0,1-h/a),y=m*m;return[(p*=-Math.sign(s)||0)*y,(g*=-Math.sign(i)||0)*y]}(a,o,e,t,n,r):[0,0];i[s]=128+127*l,i[s+1]=128+127*u,i[s+2]=128,i[s+3]=255}return a.putImageData(s,0,0),o.toDataURL()}(t,o,Math.min(u.r,Math.floor(Math.min(t,o)/2)),u.bezel));let h=document.createElementNS(n,"feDisplacementMap");for(let[e,t]of Object.entries({in:"SourceGraphic",in2:"map",scale:String(u.scale),xChannelSelector:"R",yChannelSelector:"G"}))h.setAttribute(e,t);d.append(f,h),l().appendChild(d),e.style.setProperty("--lg-lens",`url(#${c})`),a.set(e,{id:c,w:t,h:o})}},c=()=>{clearTimeout(i),i=setTimeout(u,150)};u();let d=new ResizeObserver(c),f=()=>{d.disconnect(),document.querySelectorAll("[data-glass-panel]").forEach(e=>d.observe(e))};f();let h=new MutationObserver(e=>{e.some(e=>"attributes"===e.type||[...e.addedNodes,...e.removedNodes].some(e=>1===e.nodeType&&(e.matches?.("[data-glass-panel]")||e.querySelector?.("[data-glass-panel]"))))&&(f(),c())});return h.observe(document.body,{childList:!0,subtree:!0}),h.observe(e,{attributes:!0,attributeFilter:["data-buttons"]}),t?.addEventListener?.("change",c),()=>{clearTimeout(i),d.disconnect(),h.disconnect(),t?.removeEventListener?.("change",c)}},[]),null}],89349)},40643,e=>{"use strict";var t=e.i(43476),n=e.i(71645),r=e.i(18566),o=e.i(22016),a=e.i(40996),s=e.i(68792),i=e.i(99883);let l={full:"Scanning your network",refresh:"Checking for new connections",bridge:"Scanning a circle",resume:"Carrying on with a circle","resume-all":"Carrying on with circles","auto-bridge":"Auto-Bridge","auto-bridge-retry":"Auto-Bridge",rescrape:"Re-scanning a circle",login:"Signing in to LinkedIn",setup:"Setting up the scanner",company:"Scanning a company",photos:"Saving photos",messages:"Reading your messages list","messages-full":"Reading your whole messages history"};e.s(["default",0,function(){let e,u,[c,d]=(0,n.useState)(()=>(0,a.scannerNow)()),[f,h]=(0,n.useState)(!1),[p,g]=(0,n.useState)(!1),[m,y]=(0,n.useState)(!1),b=(0,n.useSyncExternalStore)(s.watchAllDay,s.allDayNow,()=>!1),w=(0,n.useSyncExternalStore)(i.watchActivities,i.activitiesNow,i.noActivities),v=(0,n.useSyncExternalStore)(i.watchNotchTabs,i.notchTabsNow,i.noNotchTabs);(0,n.useEffect)(()=>(0,a.watchScanner)(()=>{let e=(0,a.scannerNow)();d(e),e.running||h(!1)}),[]);let S=(0,r.usePathname)(),[x,E]=(0,n.useState)(null),[k,A]=(0,n.useState)(null);(0,n.useEffect)(()=>{let e=null,t=null,n=0,r=()=>{n=0;let r=document.querySelector("header");r!==e&&(t?.disconnect(),t=null,(e=r)&&(t=new ResizeObserver(o)).observe(e));let a=e?Math.round(e.getBoundingClientRect().bottom):null;E(e=>e===a?e:a);let s=document.getElementById("main-tabs")?.getBoundingClientRect(),i=s&&s.width?Math.round(s.left+s.width/2):null;A(e=>e===i?e:i)},o=()=>{n||(n=requestAnimationFrame(r))};o();let a=new MutationObserver(o);return a.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",o),()=>{cancelAnimationFrame(n),t?.disconnect(),a.disconnect(),window.removeEventListener("resize",o)}},[S]);let j=!!c?.running,N=w[w.length-1]||null,O=j||N||b,P=!!(O||v);if((0,n.useEffect)(()=>((0,i.setNotchShown)(P),()=>(0,i.setNotchShown)(!1)),[P]),!O&&!v)return null;let T=c?.progress,C=T?.kind==="batch"&&T.total?`${T.current||T.done||0} of ${T.total}`:T?.kind==="walk"&&T.total?`${(T.done||0).toLocaleString()} of ${T.total.toLocaleString()}`:T?.kind==="saving"?"saving":null,R=T?.total?Math.min(1,(T.current||T.done||0)/T.total):N?.progress??null,I=c?.budget,M=j?[...c.log||[]].reverse().find(e=>e&&e.trim())?.trim():null,_=p||m,L=j?"#00ff88":N?"warn"===N.tone?"#FFD700":"#3498DB":"#556",$=j?l[c.action]||"Scanning":N?N.label:"Auto scan",D=j?C:N?N.detail:null,F=null!=k?`clamp(170px, ${k}px, calc(100vw - 170px))`:"50%";return(0,t.jsxs)("div",{"data-glass-panel":"bar",onMouseLeave:()=>g(!1),style:{position:"fixed",left:F,top:x??"var(--scan-bar-top, 94px)",transform:"translateX(-50%)",zIndex:60,maxWidth:"calc(100vw - 16px)",padding:_&&O?"4px 6px 10px":"4px 6px 5px",borderRadius:"0 0 14px 14px",border:`1px solid ${j?"rgba(0,255,136,0.25)":"rgba(var(--sd-ink, 255, 255, 255), 0.1)"}`,borderTop:"none",background:"var(--sd-surface, rgba(8,10,22,0.96))",color:"var(--sd-fg-2, #cfd8d8)",fontSize:12,opacity:v||j||N||_?1:.55,boxShadow:j?"0 6px 20px rgba(0,0,0,0.35)":"none",transition:"padding 0.18s ease, opacity 0.18s ease"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:4,overflowX:"auto"},children:[v&&(0,t.jsx)("div",{role:"tablist","aria-label":"View",style:{display:"flex",gap:2},children:v.items.map(e=>{let n=e.key===v.current;return(0,t.jsxs)("button",{role:"tab","aria-selected":n,title:e.title,onClick:()=>v.onPick(e.key),style:{display:"flex",alignItems:"center",gap:6,padding:"5px 11px",borderRadius:8,border:"none",cursor:"pointer",whiteSpace:"nowrap",fontSize:12,fontWeight:600,background:n?"rgba(52,152,219,0.22)":"transparent",color:n?"var(--sd-fg-1, #cfe6f7)":"var(--sd-fg-3, #8b9aa8)"},children:[e.icon&&(0,t.jsx)("span",{"aria-hidden":"true",children:e.icon}),e.label]},e.key)})}),v&&O&&(0,t.jsx)("span",{"aria-hidden":"true",style:{width:1,alignSelf:"stretch",margin:"3px 4px",background:"rgba(var(--sd-ink, 255, 255, 255), 0.12)"}}),O&&(0,t.jsxs)("button",{onMouseEnter:()=>g(!0),onClick:()=>y(e=>!e),"aria-expanded":_,title:_?"Close":"Open",style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"none",color:"inherit",font:"inherit",cursor:"pointer",padding:"5px 8px",whiteSpace:"nowrap"},children:[(0,t.jsx)("span",{className:j?"notch-pulse":void 0,style:{width:7,height:7,borderRadius:"50%",background:L,flexShrink:0}}),(0,t.jsxs)("span",{role:"status","aria-live":"polite",style:{display:"flex",alignItems:"center",gap:8},children:[(0,t.jsx)("b",{style:{color:j||N?"var(--sd-fg-1, #fff)":"var(--sd-fg-2, #b8c4c4)",fontWeight:600},children:$}),D&&(0,t.jsx)("span",{style:{color:"var(--sd-fg-3, #8b9a9a)"},children:D})]}),!j&&!N&&_&&(0,t.jsx)("span",{style:{color:"var(--sd-fg-3, #8b9a9a)"},children:"ready · press Auto scan beside Scan to start"})]})]}),O&&null!=R&&(0,t.jsx)("div",{style:{height:2,margin:"3px 6px 0",borderRadius:2,background:"rgba(var(--sd-ink, 255, 255, 255), 0.08)",overflow:"hidden"},children:(0,t.jsx)("div",{style:{width:`${Math.round(100*R)}%`,height:"100%",background:j?"#00ff88":"#3498DB",transition:"width 0.4s ease"}})}),_&&j&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,margin:"8px 8px 0",flexWrap:"wrap"},children:[c.target?.name&&(0,t.jsx)("span",{children:c.target.name}),I&&(0,t.jsxs)(o.default,{href:"/settings#usage",style:{color:(e=I.searches,(u=I.cap)?e/u>=.9?"#ff6b6b":e/u>=.6?"#FFD700":"#00ff88":"#8b9a9a"),textDecoration:"none"},title:"Searches on your LinkedIn account in the last 24 hours, and your daily budget. Open LinkedIn usage",children:[I.searches,I.cap?` of ${I.cap}`:""," searches in the last 24 hours"]}),M&&(0,t.jsx)("span",{style:{color:"var(--sd-fg-4, #667)",maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:M,children:M}),(0,t.jsx)(o.default,{href:"/setup",style:{color:"var(--sd-blue, #3498DB)",textDecoration:"none"},children:"Details"}),(0,t.jsx)("button",{onClick:async()=>{h(!0);try{await (0,a.stopScrape)()}catch{h(!1)}},disabled:f,title:"Stops after saving what's been read; Resume on the Scan page carries on from the same page",style:{padding:"3px 10px",borderRadius:8,fontSize:12,cursor:f?"default":"pointer",background:"rgba(255,107,107,0.12)",color:"var(--sd-fg-2, #ff9b9b)",border:"1px solid rgba(255,107,107,0.35)"},children:f?"Stopping…":"Stop"})]}),_&&!j&&N?.detail&&(0,t.jsx)("div",{style:{margin:"6px 8px 0",color:"var(--sd-fg-3, #8b9a9a)"},children:N.detail})]})}])},87915,e=>{"use strict";var t=e.i(71645),n=e.i(40996),r=e.i(64745);let o=!1;e.s(["default",0,function(){return(0,t.useEffect)(()=>{if(r.IS_DEMO||o)return;let e=()=>{};return fetch("/api/social").then(e=>e.json()).then(({social:t})=>{if(!t?.autoSync||o)return;let r=t.liveAt?Date.parse(t.liveAt):0,a=new Date().getHours();Date.now()-r<864e5||a<9||a>=19||(e=(0,n.watchScanner)(()=>{let t=(0,n.scannerNow)();t.known&&!o&&(o=!0,e(),t.running||(0,n.beginScrape)("messages").catch(()=>{}))}))}).catch(()=>{}),()=>e()},[]),null}])},37711,e=>{"use strict";var t=e.i(43476),n=e.i(71645);e.s(["default",0,function(){let[e,r]=(0,n.useState)(null);return((0,n.useEffect)(()=>{let e=!0;return fetch("/api/update").then(e=>e.json()).then(t=>{e&&t?.restartNeeded&&r(t)}).catch(()=>{}),()=>{e=!1}},[]),e)?(0,t.jsxs)("div",{role:"status",style:{position:"fixed",left:0,right:0,bottom:0,zIndex:9999,background:"linear-gradient(90deg, #FFD700, #FF6B35)",color:"#1a1200",padding:"9px 16px",fontSize:13,fontWeight:600,lineHeight:1.5,display:"flex",alignItems:"center",justifyContent:"center",gap:10,flexWrap:"wrap",textAlign:"center"},children:[(0,t.jsxs)("span",{children:["You have newer code on disk (",e.sha,") than this server is running (",e.bootSha,"). Restart it to see the changes: ",(0,t.jsx)("code",{style:{background:"rgba(var(--sd-shade, 0, 0, 0), 0.16)",padding:"1px 6px",borderRadius:4},children:"Ctrl-C"})," in the terminal, then ",(0,t.jsx)("code",{style:{background:"rgba(var(--sd-shade, 0, 0, 0), 0.16)",padding:"1px 6px",borderRadius:4},children:"npm run dev"}),"."]}),(0,t.jsx)("button",{onClick:()=>r(null),style:{border:"none",background:"rgba(var(--sd-shade, 0, 0, 0), 0.18)",color:"#1a1200",borderRadius:6,padding:"3px 10px",fontWeight:700,cursor:"pointer"},children:"Dismiss"})]}):null}])},56456,e=>{"use strict";var t=e.i(71645),n=e.i(58712);e.s(["default",0,function(){return(0,t.useEffect)(()=>{let t=!0;return fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():null).then(async r=>{if(!t||!r?.settings)return;(0,n.adoptSavedTheme)(r.settings.theme);let{adoptSavedLayouts:o}=await e.A(11678);t&&o(r.settings.galaxyLayouts)}).catch(()=>{}),()=>{t=!1}},[]),null}])},68792,e=>{"use strict";var t=e.i(40996);let n=(e,t)=>{try{let n=localStorage.getItem(e);return null===n?t:JSON.parse(n)}catch{return t}};e.s(["allDayNow",0,function(){try{return"true"===localStorage.getItem("six-degrees-experimental-auto")}catch{return!1}},"startAutoScan",0,function(){let e=n("six-degrees-bridge-order","newest");return(0,t.beginScrape)("auto-bridge",{experimental:!0,maxBridges:10,order:e,tiers:"score"===e?["S","A"]:[],maxPages:n("six-degrees-bridge-pages-v2",100),deeper:n("six-degrees-bridge-finish",!0)})},"watchAllDay",0,function(e){return window.addEventListener("storage",e),window.addEventListener("six-degrees:experimental",e),()=>{window.removeEventListener("storage",e),window.removeEventListener("six-degrees:experimental",e)}}])},99883,e=>{"use strict";let t=new Set,n=[],r=[],o=new Set,a=null,s=new Set,i=!1;e.s(["activitiesNow",0,()=>n,"noActivities",0,()=>r,"noNotch",0,()=>!1,"noNotchTabs",0,()=>null,"notchShownNow",0,()=>i,"notchTabsNow",0,()=>a,"setNotchShown",0,function(e){!!e!==i&&(i=!!e,s.forEach(e=>e()))},"setNotchTabs",0,function(e){a=e&&Array.isArray(e.items)&&e.items.length>1?e:null,o.forEach(e=>e())},"showActivity",0,function(e){return e?.id?(n=[...n.filter(t=>t.id!==e.id),e],t.forEach(e=>e()),()=>{var r;return r=e.id,void(n.some(e=>e.id===r)&&(n=n.filter(e=>e.id!==r),t.forEach(e=>e())))}):()=>{}},"watchActivities",0,function(e){return t.add(e),()=>t.delete(e)},"watchNotchShown",0,function(e){return s.add(e),()=>s.delete(e)},"watchNotchTabs",0,function(e){return o.add(e),()=>o.delete(e)}])},40996,16999,e=>{"use strict";Symbol.for("six-degrees.scan-state");let t="The scanner works in Google Chrome, and Chrome isn’t on this computer.",n="Install Google Chrome, then come back",r=`${t} ${n}.`,o={install:"Install",setup:"Set up the scanner"};async function a(){let e=await fetch("/api/scraper");if(!e.ok)throw Error("Could not reach the app.");return e.json()}e.s(["CHROME_REFUSAL",0,r,"askForField",0,function(e,t){if(!e)return null;let n=e.network;return!!n&&!!n.first&&!n.second&&!n.third&&!e.running&&(void 0===t?null:!!(t&&!t.fieldAsked&&!t.sectorFocus?.sectors?.length))},"setupStep",0,function(e){let r=function(e){let t=e?.checks||{},n=(t,n,r)=>e?.running&&e.action===t?r:n;if(t.dependencies)return"bundled"===t.pythonSource?{done:!0,text:"Ready. The scanner and its Python come with the app, so there is nothing to install.",button:null}:"custom"===t.pythonSource?{done:!0,text:`Ready, on the Python named in SIX_DEGREES_PYTHON (${t.pythonPath}).`,button:null}:{done:!0,text:"Installed.",button:null};let r=t.ownPython&&"bundled"!==t.ownPython.source?`The Python named in SIX_DEGREES_PYTHON didn't work (${t.ownPython.problem}), so the scanner needs setting up another way. `:"";if(t.installFrom)return{done:!1,text:r+("downloaded"===t.installFrom.source?"Its own Python is already here. One more step, about a minute: it installs the browser-automation packages into it.":"One-time, about a minute. Downloads the browser-automation packages."),button:{action:"install",label:n("install","Install","Installing…")}};if(t.download){let e=Math.round(t.download.size/1048576);return{done:!1,text:`${r}${function(e){if(!e?.version)return"This computer has no Python the scanner can use.";let[t,n]=String(e.version).split(".").map(Number);return 3===t&&n>=10&&n<=14&&!1===e.venv?`This computer's Python ${e.version} can't make the scanner's own environment (on Ubuntu or Debian, python3-venv isn't installed).`:`This computer has Python ${e.version}, and the scanner needs 3.10 to 3.14.`}(t.systemPython)} Set up the scanner downloads its own Python ${t.download.version} (${e} MB, from GitHub) and the scanner's packages (from PyPI) into your data folder. Nothing else on this computer changes. About two minutes.`,button:{action:"setup",label:n("setup","Set up the scanner","Setting up…")}}}return{done:!1,text:`${r}No Python 3.10 to 3.14 was found on this machine. Install one from python.org, then reload.`,button:null}}(e),a=function(e,{done:t,button:n}){if(e?.source!=="bundled")return null;let r=/SIGKILL|code signature|not valid for use in process|quarantine|not permitted/i.test(e.problem||""),a=[`The Python that comes with the app didn't work (${e.problem}).`];return r&&a.push("macOS may have blocked it."),!1===e.retry&&a.push("Six Degrees won't try it again until you restart it."),t?a.push("The scanner uses another Python on this computer instead."):n?a.push(`To scan now, use ${o[n.action]} below: it gives the scanner a Python of its own in your data folder.`):a.push("To scan now, install Python 3.10 to 3.14 from python.org, then reload."),a.join(" ")}(e?.checks?.ownPython,r);return e?.checks?.chrome!==!1?{...r,note:a,chrome:null}:{...r,done:!1,text:r.done?t:`${r.text} ${t}`,note:a,chrome:{label:n,href:"https://www.google.com/chrome/"}}}],16999);let s="six-degrees-hide-chrome";function i(e,t={},n=function(e="u">typeof localStorage?localStorage:null){try{return!0===JSON.parse(e?.getItem(s)||"false")}catch{return!1}}()){return{action:e,...t,...n?{headless:!0}:{}}}async function l(e,t,n={}){let r=await fetch("/api/scraper",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i(e,{...t?{name:t}:{},...n}))}),o=await r.json().catch(()=>({}));if(!r.ok)throw Error(o.error||"Could not start the scanner.");return o}async function u(e){let t=await fetch(`/api/scraper?resume=${encodeURIComponent(e)}`);return t.ok?(await t.json()).resume??null:null}let c=Object.freeze({skips:[],read:[]});async function d(){try{let e=await fetch("/api/scraper?reach=1");if(!e.ok)return c;let t=await e.json();return{skips:Array.isArray(t.skips)?t.skips:[],read:Array.isArray(t.read)?t.read:[]}}catch{return c}}async function f(e){let t=await fetch(`/api/scraper?person=${encodeURIComponent(e)}`);return t.ok?t.json():{person:null}}async function h(){await fetch("/api/scraper",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"cancel"})})}let p=Object.freeze({known:!1,running:!1,pending:!1,action:null,target:null,startedAt:null,progress:null,pages:0,found:[],log:[],finished:[]}),g=new Set,m=p,y=JSON.stringify(m),b=null,w=null,v=0,S=!1,x=new Set;function E(e){let t=JSON.stringify(e);if(t!==y)for(let n of(y=t,m=Object.freeze(e),[...g]))n()}async function k(){(!("u">typeof document&&document.hidden)||m.running)&&await function(){if(w&&w.epoch===v)return w.promise;let e=v,t=fetch("/api/scraper?job=1").then(e=>e.ok?e.json():null).then(t=>{e===v&&function(e){if(!e||"object"!=typeof e)return;let t=!0===e.running;t&&null!=e.startedAt&&x.add(e.startedAt);let n=(Array.isArray(e.recent)?e.recent:[]).filter(e=>x.has(e.startedAt)).map(n=>({...n,log:!t&&n.startedAt===e.startedAt&&Array.isArray(e.log)?e.log:[]}));E({known:!0,running:t||S,pending:S&&!t,action:t?e.action??null:S?m.action:null,target:t?e.target??null:S?m.target:null,startedAt:t?e.startedAt??null:null,progress:t?e.progress??null:null,pages:t&&Number(e.pages)||0,found:t&&Array.isArray(e.found)?e.found.map(Number).filter(Number.isFinite):[],budget:t?e.budget??null:null,log:t&&Array.isArray(e.log)?e.log:[],finished:n})}(t)}).catch(()=>{}).finally(()=>{w?.promise===t&&(w=null)});return w={epoch:e,promise:t},t}(),clearTimeout(b),b=g.size?setTimeout(k,m.running?1500:5e3):null}function A(e){return g.add(e),1===g.size&&k(),()=>{g.delete(e),g.size||(clearTimeout(b),b=null)}}async function j(e,{name:t,id:n,onLog:r,...o}={}){let a;v++,S=!0,E({...m,known:!0,running:!0,pending:!0,action:e,target:t||n?{id:n??null,name:t??null}:null,startedAt:null,progress:null,log:[]});try{a=await l(e,t,{...n?{id:n}:{},...o})}catch(e){throw S=!1,v++,m.pending&&E({...m,running:!1,pending:!1,action:null,target:null,log:[]}),k(),e}S=!1,v++;let s=a?.startedAt??null;null!=s&&x.add(s);let i=new Promise(e=>{let t=A(()=>{m.running&&m.startedAt===s&&r?.(m.log);let n=null==s?m.running?null:{exitCode:null,failure:null,log:[]}:m.finished.find(e=>e.startedAt===s);n&&(t(),n.log.length&&r?.(n.log),e(n))});k()});return{startedAt:s,ended:i}}function N(e){return!!e?.target&&["bridge","rescrape","resume"].includes(e.action)}e.s(["HIDE_CHROME_KEY",0,s,"NO_SCAN_NOTES",0,c,"SCANNER_UNKNOWN",0,p,"beginScrape",0,j,"busyReason",0,function(e=m){if(!e?.running)return null;let t=e.target?.name;switch(e.action){case"bridge":case"rescrape":case"resume":return t?`${t}’s circle is being scanned`:"A circle is being scanned";case"company":return t?`${t} is being scanned`:"A company is being scanned";case"auto-bridge":case"auto-bridge-retry":case"resume-all":return"Your bridges are being mapped, one by one";case"full":case"refresh":return"Your own connections are being scanned";default:switch(e.action){case"install":return"The scanner's packages are being installed";case"setup":return"The scanner is being set up";case"login":return"The LinkedIn sign-in window is open";case"photos":return"Profile photos are being saved";default:return"A scan is running"}}},"fillsCircles",0,function(e){return N(e)||["auto-bridge","auto-bridge-retry","resume-all"].includes(e?.action)},"isCircleScan",0,N,"loadScanNotes",0,d,"notReadyMessage",0,function(e){if(!e)return"Could not reach the app.";let t=e.checks||{};return t.scriptsFound?t.dependencies?t.chrome?null:r:t.python||t.download?"The scanner is not set up yet. Open Scan to set it up.":"No Python 3.10 to 3.14 is installed on this machine.":"The scanner files are missing from this install."},"pickedPerson",0,f,"resumePoint",0,u,"runScrape",0,function(e,t={}){return j(e,t).then(e=>e.ended)},"scanRequest",0,i,"scannerNow",0,function(){return m},"scansCircleOf",0,function(e,t){if(!N(e)||!t)return!1;let{id:n,name:r}=e.target;return n&&t.id?n===t.id:!!r&&r===t.name},"scraperStatus",0,a,"stopScrape",0,h,"watchScanner",0,A],40996)},56899,e=>{"use strict";async function t(e,{keepalive:n=!1}={}){try{let t=await fetch("/api/settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:e}),keepalive:n}),r=await t.json();return{settings:r.settings||null,effects:r.effects||null,error:t.ok?null:r.error||"Could not save."}}catch{return{settings:null,effects:null,error:"Could not reach the app. Reload this page to see what is saved."}}}e.s(["saveSettings",0,t])},40827,e=>{"use strict";e.s(["laterSaver",0,function(e,t=400){let n,r=null,o=t=>{clearTimeout(r),r=null,Promise.resolve(e(n,{now:t})).catch(()=>{})},a=e=>{n=e,r&&clearTimeout(r),r=setTimeout(()=>o(!1),t)};return a.flush=()=>{r&&o(!0)},a},"reconcileSaved",0,function({saved:e,cached:t,isDefault:n,same:r}){return null==e?{use:t,save:!n(t),changed:!1}:{use:e,save:!1,changed:!r(e,t)}}])},58712,e=>{"use strict";var t=e.i(54322),n=e.i(56899),r=e.i(40827);let o="six-degrees-theme",a=Object.freeze({base:"standard",custom:{}}),s=new Set,i=a;function l(){try{return(0,t.cleanTheme)(JSON.parse(localStorage.getItem(o)||"null")||a)}catch{return a}}function u(e){let n=(0,t.resolveTheme)(e);Object.assign(t.TIER_COLORS,n.tiers);let r=(0,t.isLight)(n);if(Object.assign(t.MAP_LOOK,{you:n.you,lines:n.lines,line:n.line,bg:n.bg,dots:n.dots,light:r,text:r?"#11141c":"#ffffff"}),"u"<typeof document)return;let o=(0,t.themeVars)(e),a=document.documentElement;for(let e of[...a.style])!e.startsWith("--sd-")||e in o||a.style.removeProperty(e);for(let[e,t]of Object.entries(o))a.style.setProperty(e,t);Object.assign(a.dataset,(0,t.themeAttrs)(e)),a.style.colorScheme=r?"light":"dark";try{localStorage.setItem("six-degrees-theme-vars",JSON.stringify({vars:o,attrs:(0,t.themeAttrs)(e)}))}catch{}}u(i=l()),window.addEventListener("storage",e=>{e.key===o&&(u(i=l()),s.forEach(e=>e()))});let c=(e,n)=>JSON.stringify((0,t.cleanTheme)(e))===JSON.stringify((0,t.cleanTheme)(n)),d=(0,r.laterSaver)((e,{now:t})=>(0,n.saveSettings)({theme:e},{keepalive:t}));function f(e){i=(0,t.cleanTheme)(e);try{localStorage.setItem(o,JSON.stringify(i))}catch{}u(i),s.forEach(e=>e())}window.addEventListener("pagehide",()=>d.flush()),e.s(["adoptSavedTheme",0,function(e){let{use:o,save:s,changed:l}=(0,r.reconcileSaved)({saved:null==e?null:(0,t.cleanTheme)(e),cached:i,isDefault:e=>c(e,a),same:c});s&&(0,n.saveSettings)({theme:i}),l&&f(o)},"serverTheme",0,()=>a,"setTheme",0,function(e){f(e),d(i)},"themeNow",0,()=>i,"watchTheme",0,function(e){return s.add(e),()=>s.delete(e)}])},22016,(e,t,n)=>{"use strict";e.i(47167),Object.defineProperty(n,"__esModule",{value:!0});var r={default:function(){return y},useLinkStatus:function(){return w}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});let a=e.r(90809),s=e.r(43476),i=a._(e.r(71645)),l=e.r(95057),u=e.r(8372),c=e.r(18581),d=e.r(18967),f=e.r(5550),h=e.r(88540),p=e.r(91949),g=e.r(73668),m=e.r(9396);function y(t){var n;let r,o,a,[y,w]=(0,i.useOptimistic)(p.IDLE_LINK_STATUS),v=(0,i.useRef)(null),{href:S,as:x,children:E,prefetch:k=null,passHref:A,replace:j,shallow:N,scroll:O,onClick:P,onMouseEnter:T,onTouchStart:C,legacyBehavior:R=!1,onNavigate:I,transitionTypes:M,ref:_,unstable_dynamicOnHover:L,...$}=t;r=E,R&&("string"==typeof r||"number"==typeof r)&&(r=(0,s.jsx)("a",{children:r}));let D=i.default.useContext(u.AppRouterContext),F=!1!==k,z=!1===k?"none":!0===k?"full":"auto",B="none"!==z?"auto"===z?m.FetchStrategy.PPR:m.FetchStrategy.Full:m.FetchStrategy.PPR,U="string"==typeof(n=x||S)?n:(0,l.formatUrl)(n);if(R){if(r?.$$typeof===Symbol.for("react.lazy"))throw Object.defineProperty(Error("`<Link legacyBehavior>` received a direct child that is either a Server Component, or JSX that was loaded with React.lazy(). This is not supported. Either remove legacyBehavior, or make the direct child a Client Component that renders the Link's `<a>` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});o=i.default.Children.only(r)}let J=R?o&&"object"==typeof o&&o.ref:_,W,K=i.default.useCallback(e=>(null!==D&&(v.current=(0,p.mountLinkInstance)(e,U,D,B,F,w,W)),()=>{v.current&&((0,p.unmountLinkForCurrentNavigation)(v.current),v.current=null),(0,p.unmountPrefetchableInstance)(e)}),[F,U,D,B,w,W]),G={ref:(0,c.useMergedRef)(K,J),onClick(t){R||"function"!=typeof P||P(t),R&&o.props&&"function"==typeof o.props.onClick&&o.props.onClick(t),!D||t.defaultPrevented||function(t,n,r,o,a,s,l,u="none"){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,g.isLocalURL)(n)){o&&(t.preventDefault(),location.replace(n));return}if(t.preventDefault(),s){let e=!1;if(s({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:f}=e.r(99781);i.default.startTransition(()=>{f(n,o?"replace":"push",!1===a?h.ScrollBehavior.NoScroll:h.ScrollBehavior.Default,r.current,l,u)})}}(t,U,v,j,O,I,M,z)},onMouseEnter(e){R||"function"!=typeof T||T(e),R&&o.props&&"function"==typeof o.props.onMouseEnter&&o.props.onMouseEnter(e),D&&F&&(0,p.onNavigationIntent)(e.currentTarget,!0===L)},onTouchStart:function(e){R||"function"!=typeof C||C(e),R&&o.props&&"function"==typeof o.props.onTouchStart&&o.props.onTouchStart(e),D&&F&&(0,p.onNavigationIntent)(e.currentTarget,!0===L)}};return(0,d.isAbsoluteUrl)(U)?G.href=U:R&&!A&&("a"!==o.type||"href"in o.props)||(G.href=(0,f.addBasePath)(U)),a=R?i.default.cloneElement(o,G):(0,s.jsx)("a",{...$,...G,children:r}),(0,s.jsx)(b.Provider,{value:y,children:a})}let b=(0,i.createContext)(p.IDLE_LINK_STATUS),w=()=>(0,i.useContext)(b);("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),t.exports=n.default)},18581,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"useMergedRef",{enumerable:!0,get:function(){return o}});let r=e.r(71645);function o(e,t){let n=(0,r.useRef)(null),o=(0,r.useRef)(null);return(0,r.useCallback)(r=>{if(null===r){let e=n.current;e&&(n.current=null,e());let t=o.current;t&&(o.current=null,t())}else e&&(n.current=a(e,r)),t&&(o.current=a(t,r))},[e,t])}function a(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let n=e(t);return"function"==typeof n?n:()=>e(null)}}("function"==typeof n.default||"object"==typeof n.default&&null!==n.default)&&void 0===n.default.__esModule&&(Object.defineProperty(n.default,"__esModule",{value:!0}),Object.assign(n.default,n),t.exports=n.default)},18967,(e,t,n)=>{"use strict";e.i(47167),Object.defineProperty(n,"__esModule",{value:!0});var r={DecodeError:function(){return y},MiddlewareNotFoundError:function(){return S},MissingStaticPage:function(){return v},NormalizeError:function(){return b},PageNotFoundError:function(){return w},SP:function(){return g},ST:function(){return m},WEB_VITALS:function(){return a},execOnce:function(){return s},getDisplayName:function(){return d},getLocationOrigin:function(){return u},getURL:function(){return c},isAbsoluteUrl:function(){return l},isResSent:function(){return f},loadGetInitialProps:function(){return p},normalizeRepeatedSlashes:function(){return h},stringifyError:function(){return x}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});let a=["CLS","FCP","FID","INP","LCP","TTFB"];function s(e){let t,n=!1;return(...r)=>(n||(n=!0,t=e(...r)),t)}let i=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,l=e=>{let t=e.charCodeAt(0);return!!(t>=65&&t<=90||t>=97&&t<=122)&&i.test(e)};function u(){let{protocol:e,hostname:t,port:n}=window.location;return`${e}//${t}${n?":"+n:""}`}function c(){let{href:e}=window.location,t=u();return e.substring(t.length)}function d(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function f(e){return e.finished||e.headersSent}function h(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?`?${t.slice(1).join("?")}`:"")}async function p(e,t){let n=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await p(t.Component,t.ctx)}:{};let r=await e.getInitialProps(t);if(n&&f(n))return r;if(!r)throw Object.defineProperty(Error(`"${d(e)}.getInitialProps()" should resolve to an object. But found "${r}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return r}let g="u">typeof performance,m=g&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class y extends Error{}class b extends Error{}class w extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class v extends Error{constructor(e,t){super(),this.message=`Failed to load static file for page: ${e} ${t}`}}class S extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function x(e){return JSON.stringify({message:e.message,stack:e.stack})}},73668,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),Object.defineProperty(n,"isLocalURL",{enumerable:!0,get:function(){return a}});let r=e.r(18967),o=e.r(52817);function a(e){if(!(0,r.isAbsoluteUrl)(e))return!0;try{let t=(0,r.getLocationOrigin)(),n=new URL(e,t);return n.origin===t&&(0,o.hasBasePath)(n.pathname)}catch(e){return!1}}},98183,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r={assign:function(){return l},searchParamsToUrlQuery:function(){return a},urlQueryToSearchParams:function(){return i}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});function a(e){let t={};for(let[n,r]of e.entries()){let e=t[n];void 0===e?t[n]=r:Array.isArray(e)?e.push(r):t[n]=[e,r]}return t}function s(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function i(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.append(n,s(e));else t.set(n,s(r));return t}function l(e,...t){for(let n of t){for(let t of n.keys())e.delete(t);for(let[t,r]of n.entries())e.append(t,r)}return e}},95057,(e,t,n)=>{"use strict";e.i(47167),Object.defineProperty(n,"__esModule",{value:!0});var r={formatUrl:function(){return i},formatWithValidation:function(){return u},urlObjectKeys:function(){return l}};for(var o in r)Object.defineProperty(n,o,{enumerable:!0,get:r[o]});let a=e.r(90809)._(e.r(98183)),s=/https?|ftp|gopher|file/;function i(e){let{auth:t,hostname:n}=e,r=e.protocol||"",o=e.pathname||"",i=e.hash||"",l=e.query||"",u=!1;t=t?encodeURIComponent(t).replace(/%3A/i,":")+"@":"",e.host?u=t+e.host:n&&(u=t+(~n.indexOf(":")?`[${n}]`:n),e.port&&(u+=":"+e.port)),l&&"object"==typeof l&&(l=String(a.urlQueryToSearchParams(l)));let c=e.search||l&&`?${l}`||"";return r&&!r.endsWith(":")&&(r+=":"),e.slashes||(!r||s.test(r))&&!1!==u?(u="//"+(u||""),o&&"/"!==o[0]&&(o="/"+o)):u||(u=""),i&&"#"!==i[0]&&(i="#"+i),c&&"?"!==c[0]&&(c="?"+c),o=o.replace(/[?#]/g,encodeURIComponent),c=c.replace("#","%23"),`${r}${u}${o}${c}${i}`}let l=["auth","hash","host","hostname","href","path","pathname","port","protocol","query","search","slashes"];function u(e){return i(e)}},18566,(e,t,n)=>{t.exports=e.r(76562)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,60451,e=>{"use strict";var t=e.i(43476),s=e.i(71645),i=e.i(22016),r=e.i(18566);e.s(["default",0,function(){let e=(0,r.useRouter)();return(0,s.useEffect)(()=>{e.replace("/queue?view=messages")},[e]),(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"var(--sd-page)",color:"var(--sd-fg-3, #aab)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:13},children:["Social is part of ",(0,t.jsx)(i.default,{href:"/queue?view=messages",style:{color:"var(--sd-orange, #FF6B35)",marginLeft:4},children:"Outlink"})," now."]})}])}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),n=e.i(15812);e.s(["default",0,function({children:e}){let{userId:r,ready:i}=(0,n.useUser)();return i&&r?e:(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"var(--sd-page)",color:"var(--sd-fg-1, #fff)",padding:24,textAlign:"center",fontFamily:"var(--sd-font)"},children:i?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.jsx)("div",{style:{color:"var(--sd-fg-3, #888)",fontSize:14,lineHeight:1.6},children:"The page loaded, but the app behind it isn’t answering. Quit Six Degrees and open it again."})]}):(0,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},8819,e=>{"use strict";var t=e.i(43476);let n="1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)";function r({children:e,style:n}){return(0,t.jsx)("div",{style:{fontSize:13.5,color:"var(--sd-fg-3, #8b9a9a)",lineHeight:1.6,marginTop:4,...n},children:e})}e.s(["Body",0,r,"Btn",0,function({children:e,onClick:r,disabled:i,primary:o,tone:s,type:a="button"}){return(0,t.jsx)("button",{type:a,onClick:r,disabled:i,style:{padding:"9px 18px",borderRadius:7,fontSize:13.5,fontWeight:650,color:i?"var(--sd-fg-4, #667)":"var(--sd-fg-1, #fff)",border:n,background:i?"rgba(var(--sd-ink, 255, 255, 255), 0.05)":"bad"===s?"rgba(255,80,80,0.15)":o?"linear-gradient(135deg, #9B59B6, #3498DB)":"rgba(var(--sd-ink, 255, 255, 255), 0.08)",cursor:i?"not-allowed":"pointer"},children:e})},"FONT",0,"var(--sd-font)","LINE",0,n,"Mono",0,function({children:e}){return(0,t.jsx)("code",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.08)",padding:"1px 5px",borderRadius:4,wordBreak:"break-all"},children:e})},"Section",0,function({id:e,title:i,intro:o,children:s}){return(0,t.jsxs)("section",{id:e,style:{padding:"24px 0",borderBottom:n,scrollMarginTop:16},children:[(0,t.jsx)("h2",{style:{fontSize:16,fontWeight:650,margin:"0 0 6px"},children:i}),o&&(0,t.jsx)(r,{style:{marginTop:0,marginBottom:12},children:o}),s]})},"Status",0,function({children:e,tone:n}){return(0,t.jsxs)("div",{role:"status",style:{marginTop:10,padding:"10px 14px",borderRadius:8,fontSize:13.5,lineHeight:1.6,color:"ok"===n?"#00ff88":"bad"===n?"#ff7676":"#e8e8ee",background:"ok"===n?"rgba(0,255,136,0.08)":"bad"===n?"rgba(255,80,80,0.08)":"rgba(var(--sd-ink, 255, 255, 255), 0.05)",border:`1px solid ${"ok"===n?"rgba(0,255,136,0.3)":"bad"===n?"rgba(255,80,80,0.3)":"rgba(var(--sd-ink, 255, 255, 255), 0.12)"}`},children:["ok"===n&&"✓ ",e]})}])},99201,e=>{"use strict";var t=e.i(43476),n=e.i(71645),r=e.i(18566),i=e.i(19821);e.i(46949);var o=e.i(828),s=e.i(48235);let a={height:10,borderRadius:6},l={background:"rgba(52,152,219,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(52,152,219,0.2)"};function d({degree1:e=[],degree2:n=[],skips:r=[]}){let i=function(e=[],t=[],n=[]){let r=(0,s.reachIndex)(e,t,{skips:n}),i=e=>{let t=(0,s.circleState)(e,r);return"scanned"===t?"mapped":t},o={mapped:0,hidden:0,todo:0},a={};for(let t of e){let e=i(t);o[e]+=1;let n=t.tier||"D";a[n]=a[n]||{mapped:0,hidden:0,todo:0,total:0},a[n][e]+=1,a[n].total+=1}let l=e.length,d=o.mapped+o.hidden;return{...o,total:l,resolved:d,percent:l?Math.round(d/l*100):0,batches:Math.ceil(o.todo/25),byTier:a}}(e,n,r);if(!i.total)return null;let u=e=>i.total?e/i.total*100:0,g=0===i.todo;return(0,t.jsxs)("div",{style:l,children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:10},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"var(--sd-blue, #3498DB)"},children:"2nd-degree mapping"}),(0,t.jsx)("span",{style:{fontSize:12,color:g?"var(--sd-green, #00ff88)":"var(--sd-fg-3, #8b9a9a)",fontWeight:600},children:g?"Everything reachable is mapped":`${i.percent}%`})]}),(0,t.jsxs)("div",{style:{...a,display:"flex",overflow:"hidden",background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)"},children:[(0,t.jsx)("div",{style:{width:`${u(i.mapped)}%`,background:"#00ff88"}}),(0,t.jsx)("div",{style:{width:`${u(i.hidden)}%`,background:"rgba(var(--sd-ink, 255, 255, 255), 0.22)"}})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:16,marginTop:10,fontSize:12,flexWrap:"wrap"},children:[(0,t.jsx)(c,{color:"#00ff88",label:"mapped",value:i.mapped}),(0,t.jsx)(c,{color:"rgba(var(--sd-ink, 255, 255, 255), 0.35)",label:"hidden",value:i.hidden}),(0,t.jsx)(c,{color:"rgba(var(--sd-ink, 255, 255, 255), 0.12)",label:"to go",value:i.todo}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-4, #667)",marginLeft:"auto"},children:["of ",i.total]})]}),i.hidden>0&&(0,t.jsx)("p",{style:{fontSize:11.5,color:"var(--sd-fg-4, #667)",margin:"10px 0 0",lineHeight:1.6},children:"Hidden means they keep their connections private. That will not change, and it does not count against you."}),!g&&(0,t.jsxs)("p",{style:{fontSize:11.5,color:"var(--sd-fg-3, #8b9a9a)",margin:"10px 0 0",lineHeight:1.6},children:[i.todo," left, about ",(0,t.jsxs)("b",{children:[i.batches," ",1===i.batches?"batch":"batches"]})," of ",25,". Run one, leave it a while, run another. Long unbroken runs are what gets an account restricted."]}),(0,t.jsx)("div",{style:{marginTop:16,display:"flex",flexDirection:"column",gap:7},children:["S","A","B","C","D"].filter(e=>i.byTier[e]?.total).map(e=>{let n=i.byTier[e];return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,fontSize:11},children:[(0,t.jsx)("span",{style:{width:14,color:o.TIER_COLORS_CLASSIC[e],fontWeight:700},children:e}),(0,t.jsxs)("div",{style:{flex:1,height:5,borderRadius:3,display:"flex",overflow:"hidden",background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)"},children:[(0,t.jsx)("div",{style:{width:`${n.mapped/n.total*100}%`,background:o.TIER_COLORS_CLASSIC[e]}}),(0,t.jsx)("div",{style:{width:`${n.hidden/n.total*100}%`,background:"rgba(var(--sd-ink, 255, 255, 255), 0.22)"}})]}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-4, #667)",width:62,textAlign:"right"},children:[n.mapped,"/",n.total]})]},e)})})]})}function c({color:e,label:n,value:r}){return(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:6,color:"var(--sd-fg-3, #8b9a9a)"},children:[(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:2,background:e}}),(0,t.jsx)("b",{style:{color:"var(--sd-fg-1, #e2e8f0)"},children:r})," ",n]})}var u=e.i(64745),g=e.i(2776),f=e.i(15812),h=e.i(69083),p=e.i(22016),y=e.i(98658),m=e.i(54322),b=e.i(64666),v=e.i(8819);let x=m.TIER_COLORS,S=e=>`${Math.round(100*e)}%`;function k(){let{userId:e}=(0,f.useUser)(),[r,o]=(0,n.useState)(null),[s,a]=(0,n.useState)(!1);(0,n.useEffect)(()=>{if(!e)return;let t=!0;return(0,i.loadNetwork)(e).then(e=>{t&&o(function({degree1:e=[],degree2:t=[],ties:n=0}={}){let r=new Map;for(let e of t)e?.source_connection_id!=null&&r.set(e.source_connection_id,(r.get(e.source_connection_id)||0)+1);let i=(0,b.exclusiveReach)(t,e),o=e.length,s=Math.max(0,Number(n)||0),a=o?o-2*s/o:0,l=new Map(e.map(e=>[e.id,e])),d=[...i.entries()].sort((e,t)=>t[1].reach-e[1].reach||String(e[0]).localeCompare(String(t[0]))).slice(0,5).map(([e,t])=>{let n=l.get(e)||{};return{id:e,name:n.name||"",company:n.company||"",tier:n.tier||"",circle:r.get(e)||0,only:t.only,share:t.total?t.only/t.total:0}});return{circles:r.size,early:r.size<5,twoWays:(0,b.redundancy)(t,e),effective:{n:o,ties:s,size:a,efficiency:o?a/o:0},top:d}}(e))}).catch(()=>{t&&a(!0)}),()=>{t=!1}},[e]);let l={padding:"12px 14px",borderRadius:8,border:v.LINE,background:"rgba(var(--sd-ink, 255, 255, 255), 0.03)"};return(0,t.jsxs)("section",{id:"health",style:{marginTop:20},children:[(0,t.jsx)("h2",{style:{fontSize:16,margin:"0 0 6px"},children:"Network health"}),s&&(0,t.jsx)(v.Body,{children:"Couldn’t read your network just now."}),!s&&!r&&(0,t.jsx)(v.Body,{children:"Reading your network…"}),r&&0===r.circles&&(0,t.jsx)(v.Body,{children:"Scan a few of your connections’ circles (the Scan page, step 4) and this shows how your network holds together."}),r&&r.circles>0&&(0,t.jsxs)(t.Fragment,{children:[r.early&&(0,t.jsxs)("div",{style:{fontSize:12.5,color:"var(--sd-gold, #FFD700)",margin:"4px 0 10px"},children:["An early estimate: ",r.circles," ",1===r.circles?"circle":"circles"," scanned. These get sharper as you scan more."]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))",gap:10},children:[(0,t.jsxs)("div",{style:l,children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700},children:S(r.twoWays)}),(0,t.jsx)("div",{style:{fontSize:12.5,color:"var(--sd-fg-2, #b8c4c4)"},children:"of your 2nd degree you reach two or more ways"}),(0,t.jsx)("div",{style:{fontSize:11.5,color:"var(--sd-fg-4, #778)",marginTop:4},children:"Higher is safer: lose one connection and they’re still reachable."})]}),(0,t.jsxs)("div",{style:l,children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700},children:Math.round(r.effective.size).toLocaleString()}),(0,t.jsxs)("div",{style:{fontSize:12.5,color:"var(--sd-fg-2, #b8c4c4)"},children:["effective reach of your ",r.effective.n.toLocaleString()," connections (",S(r.effective.efficiency)," non-overlapping)"]}),(0,t.jsxs)("div",{style:{fontSize:11.5,color:"var(--sd-fg-4, #778)",marginTop:4},children:["From ",r.effective.ties.toLocaleString()," ",1===r.effective.ties?"tie":"ties"," between your connections seen in circle scans so far, so it can only come down as you scan more."]})]})]}),r.top.length>0&&(0,t.jsxs)("div",{style:{...l,marginTop:10,padding:0},children:[(0,t.jsx)("div",{style:{padding:"10px 14px",fontSize:12.5,color:"var(--sd-fg-2, #b8c4c4)",borderBottom:v.LINE},children:"Your connections who reach the most people no one else does"}),r.top.map((e,n)=>(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 14px",borderBottom:n<r.top.length-1?"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.04)":"none",fontSize:13},children:[(0,t.jsxs)("span",{style:{width:22,color:"var(--sd-fg-4, #778)"},children:["#",n+1]}),(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:x[e.tier]||"#667",flexShrink:0}}),(0,t.jsxs)("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[(0,t.jsx)("b",{children:e.name}),e.company?(0,t.jsxs)("span",{style:{color:"var(--sd-fg-3, #8b9a9a)"},children:[" · ",e.company]}):null]}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-2, #b8c4c4)",whiteSpace:"nowrap"},children:[e.circle.toLocaleString()," in circle"]}),(0,t.jsxs)("span",{style:{color:"var(--sd-green, #00ff88)",whiteSpace:"nowrap"},children:[e.only.toLocaleString()," only them (",S(e.share),")"]}),(0,t.jsx)(p.default,{href:`/?chain=${encodeURIComponent(e.id)}`,style:{color:"var(--sd-blue, #3498DB)",textDecoration:"none",whiteSpace:"nowrap"},children:"Explore →"})]},e.id))]})]})]})}let w={1:"Observer",11:"Connector",31:"Networker",51:"Strategist",76:"Architect"};function j(){let{userId:e,userName:o,userProfile:s}=(0,f.useUser)(),a=(0,r.useRouter)(),l="insights"===(0,r.useSearchParams)().get("view")?"insights":"profile",c=s||{name:o||"User",headline:"",sectors:[],goals:[]},[g,b]=(0,n.useState)(null),[v,x]=(0,n.useState)(!0),[S,j]=(0,n.useState)([]),[M,z]=(0,n.useState)({total:0,sent:0,accepted:0}),[I,B]=(0,n.useState)({degree1:[],degree2:[],skips:[]}),[F,_]=(0,n.useState)(null);if((0,n.useEffect)(()=>{!u.IS_DEMO&&e&&t();async function t(){fetch("/api/settings").then(e=>e.json().then(t=>e.ok&&t.settings?t:Promise.reject(Error(t.error)))).then(e=>_(e.settings.sectorFocus||{sectors:[],strength:"lean"})).catch(()=>_({failed:!0}));let t=await (0,i.loadNetwork)(e),n=t.degree1,r=t.degree2,o={S:0,A:0,B:0,C:0,D:0};n.forEach(e=>{o[e.tier]=(o[e.tier]||0)+1});let s={S:0,A:0,B:0,C:0,D:0};r.forEach(e=>{s[e.tier]=(s[e.tier]||0)+1});let a=[...new Set(r.map(e=>e.source_connection_id).filter(Boolean))].length,l=n.filter(e=>e.is_catalyst).length,d={};n.forEach(e=>{e.company&&(d[e.company]=(d[e.company]||0)+1)});let c=Object.entries(d).sort((e,t)=>t[1]-e[1]).slice(0,10),u=(0,y.networkPower)(n,r),g=(0,y.levelOf)(u),f=g*g*10,h=(u-f)/((g+1)*(g+1)*10-f)*100;b({d1Count:n.length,d2Count:r.length,tiers:o,d2Tiers:s,clusters:a,catalysts:l,networkPower:u,level:g,xpProgress:h,topCompanies:c,unlockedPaths:0}),fetch("/api/scraper").then(e=>e.json()).then(e=>B({degree1:n,degree2:r,skips:e.skips||[]})).catch(()=>B({degree1:n,degree2:r,skips:[]})),fetch(`/api/notifications?userId=${e}`).then(e=>e.json()).then(e=>j(e.notifications||[])).catch(()=>{}),fetch("/api/queue").then(e=>e.json()).then(e=>{let t=e.items||[];z({total:t.length,sent:t.filter(e=>"sent"===e.status).length,accepted:t.filter(e=>"accepted"===e.status).length})}).catch(()=>{}),x(!1)}},[e]),u.IS_DEMO)return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"var(--sd-page)",color:"rgba(var(--sd-ink, 255, 255, 255), 0.7)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,textAlign:"center",padding:24,fontFamily:"var(--sd-font)"},children:[(0,t.jsx)("h2",{style:{margin:0,fontSize:20,fontWeight:700,color:"var(--sd-fg-1, #fff)"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{margin:0,fontSize:13},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(p.default,{href:"/",style:{fontSize:12,color:"rgba(var(--sd-ink, 255, 255, 255), 0.5)",textDecoration:"none"},children:"← Back to the network"})]});if(v)return(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"var(--sd-page)",color:"var(--sd-fg-1, #fff)"},children:"Loading profile..."});let R=m.TIER_COLORS,T=[{label:"First S-Tier",done:g.tiers.S>0,icon:"👑"},{label:"100 Connections",done:g.d1Count>=100,icon:"🔗"},{label:"500 Connections",done:g.d1Count>=500,icon:"🌐"},{label:"First Cluster",done:g.clusters>0,icon:"🔭"},{label:"10 Clusters",done:g.clusters>=10,icon:"🏰"},{label:"50 S-Tier",done:g.tiers.S>=50,icon:"💎"},{label:"Catalyst Found",done:g.catalysts>0,icon:"⚡"},{label:"Level 25",done:g.level>=25,icon:"🎯"},{label:"Level 50",done:g.level>=50,icon:"🚀"},{label:"D2 S-Tier > 50",done:g.d2Tiers.S>=50,icon:"🌟"}];return(0,t.jsxs)("div",{style:{height:"100vh",background:"var(--sd-page)",color:"var(--sd-fg-1, #fff)",fontFamily:"var(--sd-font)",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)",display:"flex",alignItems:"center",gap:16},children:[(0,t.jsxs)(p.default,{href:"/",style:{display:"flex",alignItems:"center",gap:6,color:"var(--sd-fg-3, #888)",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)",border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.1)"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"←"})," Back to Map"]}),(0,t.jsx)("h1",{style:{fontSize:22,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Profile"}),(0,t.jsx)("div",{role:"tablist","aria-label":"Profile or Insights",style:{display:"flex",gap:3,marginLeft:8,padding:3,borderRadius:9,background:"rgba(var(--sd-ink, 255, 255, 255), 0.06)"},children:[["profile","Profile"],["insights","Insights"]].map(([e,n])=>(0,t.jsxs)("button",{type:"button",role:"tab","aria-selected":l===e,onClick:()=>a.replace("insights"===e?"/profile?view=insights":"/profile",{scroll:!1}),style:{padding:"6px 14px",borderRadius:7,border:"none",cursor:"pointer",fontSize:13,fontWeight:700,background:l===e?"linear-gradient(135deg, #FFD700, #FF6B35)":"transparent",color:l===e?"#000":"var(--sd-fg-3, #aab)"},children:["insights"===e?"✦ ":"",n]},e))})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"30px 20px"},children:"insights"===l?(0,t.jsxs)("div",{style:{maxWidth:820,margin:"0 auto"},children:[(0,t.jsx)("div",{style:{fontSize:13,color:"var(--sd-fg-3, #8a8fa8)",lineHeight:1.6},children:"How your network holds together, from the circles you’ve scanned. Only your own numbers, never a comparison with anyone else’s."}),(0,t.jsx)(k,{})]}):(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.05)",borderRadius:16,padding:32,marginBottom:24,border:"1px solid rgba(255,215,0,0.2)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{width:100,height:100,borderRadius:"50%",margin:"0 auto 16px",background:"linear-gradient(135deg, #FFD700, #FF6B35)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:36,fontWeight:800,color:"#000",boxShadow:"0 0 30px rgba(255,215,0,0.3)"},children:g.level}),(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,marginBottom:4},children:c.name}),(0,t.jsx)("div",{style:{fontSize:14,color:"var(--sd-fg-3, #888)",marginBottom:4},children:c.headline}),(0,t.jsx)("div",{style:{display:"inline-block",padding:"4px 16px",borderRadius:20,background:"rgba(255,215,0,0.15)",border:"1px solid rgba(255,215,0,0.3)",color:"var(--sd-gold, #FFD700)",fontSize:13,fontWeight:700,marginBottom:16},children:function(e){let t="Observer";for(let[n,r]of Object.entries(w))e>=parseInt(n)&&(t=r);return t}(g.level)}),(0,t.jsxs)("div",{style:{maxWidth:300,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:10,color:"var(--sd-fg-4, #666)",marginBottom:4},children:[(0,t.jsxs)("span",{children:["Level ",g.level]}),(0,t.jsxs)("span",{children:["Level ",g.level+1]})]}),(0,t.jsx)("div",{style:{height:8,background:"rgba(var(--sd-ink, 255, 255, 255), 0.1)",borderRadius:4},children:(0,t.jsx)("div",{style:{height:"100%",width:`${Math.min(g.xpProgress,100)}%`,background:"linear-gradient(90deg, #FFD700, #FF6B35)",borderRadius:4,transition:"width 1s ease"}})}),(0,t.jsxs)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)",marginTop:4},children:["Network Power: ",g.networkPower.toLocaleString()]})]})]}),(0,t.jsx)(d,{degree1:I.degree1,degree2:I.degree2,skips:I.skips}),(0,t.jsxs)("div",{style:{background:"rgba(255,107,53,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,107,53,0.2)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"var(--sd-orange, #FF6B35)"},children:"Queue Progress"}),(0,t.jsx)(p.default,{href:"/queue",style:{fontSize:11,color:"var(--sd-orange, #FF6B35)",textDecoration:"none",fontWeight:600},children:"View Queue →"})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#FFA500"},children:M.total}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)"},children:"In Queue"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"var(--sd-blue, #3498DB)"},children:M.sent}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)"},children:"Sent"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"var(--sd-green, #00ff88)"},children:M.accepted}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)"},children:"Accepted"})]})]})]}),S.length>0&&(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Recent Activity (",S.filter(e=>!e.seen).length," new)"]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6,maxHeight:200,overflowY:"auto"},children:S.slice(0,10).map(e=>(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"6px 8px",borderRadius:6,background:e.seen?"transparent":"rgba(255,215,0,0.05)",borderLeft:e.seen?"none":"2px solid #FFD700"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.icon||"📌"}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:12,fontWeight:600,color:e.seen?"var(--sd-fg-3, #888)":"var(--sd-fg-1, #fff)"},children:e.title}),e.message&&(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-4, #666)"},children:e.message})]}),(0,t.jsx)("span",{style:{fontSize:9,color:"var(--sd-fg-5, #555)",flexShrink:0},children:new Date(e.created_at).toLocaleDateString()})]},e.id))})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12,marginBottom:24},children:[(0,t.jsx)(C,{label:"Connections",value:g.d1Count}),(0,t.jsx)(C,{label:"Degree-2 Reach",value:g.d2Count}),(0,t.jsx)(C,{label:"Clusters",value:g.clusters}),(0,t.jsx)(C,{label:"S-Tier",value:g.tiers.S,color:"#FFD700"}),(0,t.jsx)(C,{label:"A-Tier",value:g.tiers.A,color:"#9B59B6"}),(0,t.jsx)(C,{label:"Catalysts",value:g.catalysts,color:"#00ff88"})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Tier Distribution"}),["S","A","B","C","D"].map(e=>{let n=g.tiers[e]||0,r=g.d1Count>0?n/g.d1Count*100:0;return(0,t.jsxs)("div",{style:{marginBottom:8},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:2},children:[(0,t.jsxs)("span",{style:{color:R[e],fontWeight:600},children:[e,"-Tier"]}),(0,t.jsxs)("span",{style:{color:"var(--sd-fg-3, #888)"},children:[n," (",r.toFixed(1),"%)"]})]}),(0,t.jsx)("div",{style:{height:6,background:"rgba(var(--sd-ink, 255, 255, 255), 0.08)",borderRadius:3},children:(0,t.jsx)("div",{style:{height:"100%",width:`${r}%`,background:R[e],borderRadius:3}})})]},e)})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Degree-2 Reach"}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"var(--sd-orange, #FF6B35)"},children:g.d2Count}),(0,t.jsx)("div",{style:{fontSize:11,color:"var(--sd-fg-3, #888)"},children:"People reachable via bridges"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"var(--sd-gold, #FFD700)"},children:g.d2Tiers.S}),(0,t.jsx)("div",{style:{fontSize:11,color:"var(--sd-fg-3, #888)"},children:"S-Tier degree-2"})]})]})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Milestones (",T.filter(e=>e.done).length,"/",T.length,")"]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:T.map((e,n)=>(0,t.jsxs)("div",{style:{padding:"8px 10px",borderRadius:8,fontSize:12,background:e.done?"rgba(255,215,0,0.08)":"rgba(var(--sd-ink, 255, 255, 255), 0.02)",border:`1px solid ${e.done?"rgba(255,215,0,0.2)":"rgba(var(--sd-ink, 255, 255, 255), 0.05)"}`,color:e.done?"var(--sd-gold, #FFD700)":"var(--sd-fg-5, #555)",display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.done?e.icon:"🔒"}),(0,t.jsx)("span",{style:{fontWeight:e.done?600:400},children:e.label})]},n))})]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Top Companies in Your Network"}),g.topCompanies.map(([e,n],r)=>(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderBottom:r<g.topCompanies.length-1?"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.04)":"none",fontSize:12},children:[(0,t.jsx)("span",{children:e}),(0,t.jsx)("span",{style:{color:"var(--sd-fg-3, #888)"},children:n})]},r))]}),(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:12,padding:20,border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0},children:"Your Sectors"}),(0,t.jsxs)(p.default,{href:"/settings#sector",style:{fontSize:11,color:"var(--sd-blue, #3498DB)",textDecoration:"none",fontWeight:600},children:[F?.sectors?.length?"Change":F&&!F.failed?"Pick in Settings":"Settings"," →"]})]}),F?F.failed?(0,t.jsx)("div",{style:{fontSize:12,color:"var(--sd-red, #ff7676)"},children:"Couldn’t load your sectors. Reload this page, or open Settings to see them."}):F.sectors?.length?(0,t.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center"},children:[F.sectors.map(e=>{let n=(0,h.sectorByKey)(e);return(0,t.jsx)("span",{style:{padding:"4px 12px",borderRadius:20,fontSize:11,fontWeight:600,background:`${n.color}26`,border:`1px solid ${n.color}66`,color:n.color},children:n.label},e)}),(0,t.jsxs)("span",{style:{fontSize:11,color:"var(--sd-fg-3, #888)"},children:["strong"===F.strength?"Strong":"Lean",": companies here count for more in your scores."]})]}):(0,t.jsx)("div",{style:{fontSize:12,color:"var(--sd-fg-3, #888)"},children:"None picked. Pick up to three in Settings and companies in them count for more in your scores."}):(0,t.jsx)("div",{style:{fontSize:12,color:"var(--sd-fg-3, #888)"},children:"Loading…"})]})]})})]})}function C({label:e,value:n,color:r}){return(0,t.jsxs)("div",{style:{background:"rgba(var(--sd-ink, 255, 255, 255), 0.04)",borderRadius:10,padding:"14px 12px",border:"1px solid rgba(var(--sd-ink, 255, 255, 255), 0.08)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:r||"#fff"},children:n}),(0,t.jsx)("div",{style:{fontSize:10,color:"var(--sd-fg-3, #888)",marginTop:2},children:e})]})}e.s(["default",0,function(){return(0,t.jsx)(n.Suspense,{fallback:null,children:(0,t.jsx)(g.default,{children:(0,t.jsx)(j,{})})})}],99201)},64666,e=>{"use strict";var t=e.i(7214);function n(e=[],r=[]){let i=new Set((r||[]).map(t.keyFor)),o=new Map;for(let n of e||[]){let e=n?.source_connection_id;if(null==e)continue;let r=(0,t.keyFor)(n);if(i.has(r))continue;let s=o.get(r);s||o.set(r,s=new Set),s.add(e)}let s=new Map;for(let e of o.values())for(let t of e){let n=s.get(t)||{reach:0,only:0,total:0};n.reach+=1/e.size,n.total+=1,1===e.size&&(n.only+=1),s.set(t,n)}return s}e.s(["bridgeOverlap",0,function(e=[],r=[]){let i=n(e,r),o=new Set((r||[]).map(t.keyFor)),s=new Map;for(let n of e||[]){let e=n?.source_connection_id;if(null==e)continue;let r=(0,t.keyFor)(n);if(o.has(r))continue;let i=s.get(r);i||s.set(r,i=new Set),i.add(e)}let a=new Map;for(let e of s.values()){if(e.size<2)continue;let t=[...e];for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let r=t[e]<t[n]?`${t[e]}|${t[n]}`:`${t[n]}|${t[e]}`;a.set(r,(a.get(r)||0)+1)}}let l=new Map;for(let[e,t]of a){let[n,r]=e.split("|"),o=i.get(n).total+i.get(r).total-t,s=o?t/o:0;for(let[e,i]of[[n,r],[r,n]]){let n=l.get(e);(!n||s>n.share)&&l.set(e,{with:i,share:s,shared:t})}}return l},"exclusiveReach",0,n,"redundancy",0,function(e=[],t=[]){let r=n(e,t),i=0,o=0;for(let e of r.values())i+=e.reach,o+=e.only;return i?1-o/i:0}])},89154,e=>{"use strict";var t=e.i(90179);function n(e){let n=(0,t.readTitle)(e);return{key:n.key,label:n.label,level:n.level}}function r(e){return(0,t.currentCompany)(e)}let i=[{key:"defense",label:"Government, Defense & Aerospace",color:"#7f8c8d",words:/\b(government|federal|state of|county|city of|defen[cs]e|army|navy|air force|marine corps|military|dod|nasa|aerospace|lockheed|northrop|boeing|raytheon|l3harris|leidos|blue origin|spacex|public sector)\b/i},{key:"finance",label:"Finance & Investing",color:"#2ecc71",words:/\b(bank|banking|capital|ventures?|vc|investments?|investor|fund|private equity|growth equity|asset management|wealth|trading|trader|hedge|crypto|blockchain|web3|defi|fintech|stripe|coinbase|blackrock|robinhood|goldman|morgan stanley|jpmorgan|chase|bny|mellon|wells fargo|citi|citigroup|capital one|fidelity|vanguard|schwab|visa|mastercard|amex|american express|paypal|insurance|accounting|cpa|financial)\b/i},{key:"health",label:"Healthcare & Biotech",color:"#e74c3c",words:/\b(health|healthcare|medical|medicine|hospital|clinic|pharma|pharmaceutical|biotech|nurse|nursing|physician|doctor|dental|therapy|therapist|wellness)\b/i},{key:"education",label:"Education",color:"#f1c40f",words:/\b(university|college|school|education|student|professor|teacher|academy|phd|faculty|alumni)\b/i},{key:"media",label:"Marketing & Media",color:"#e67e22",words:/\b(marketing|brand|branding|advertising|agency|media|content|social media|creative|creator|influencer|pr|public relations|communications|tiktok|pinterest|youtube|growth marketing)\b/i},{key:"entertainment",label:"Entertainment & Gaming",color:"#9b59b6",words:/\b(entertainment|film|movie|music|records|gaming|games?|esports|studio|studios|netflix|disney|spotify|hollywood|theater|theatre|sports)\b/i},{key:"tech",label:"Tech, Software & AI",color:"#3498db",words:/\b(software|saas|engineer|engineering|developer|tech|technology|technologies|ai|artificial intelligence|machine learning|ml|data|cloud|cyber|security|devops|product manager|google|microsoft|apple|meta|amazon|nvidia|openai|anthropic|palantir|salesforce|oracle|ibm|intel|app|apps|startup|platform|labs?)\b/i},{key:"consulting",label:"Consulting, Legal & Services",color:"#1abc9c",words:/\b(consulting|consultant|consultancy|deloitte|accenture|mckinsey|kpmg|pwc|ey|bain|bcg|legal|law|lawyer|attorney|paralegal|recruiting|recruiter|staffing|talent)\b/i},{key:"realestate",label:"Real Estate & Construction",color:"#d35400",words:/\b(real estate|realtor|realty|property|properties|construction|architecture|architect|mortgage|homes|housing|builders?)\b/i},{key:"consumer",label:"Retail, Consumer & Hospitality",color:"#ff79c6",words:/\b(retail|e-?commerce|shopify|consumer|cpg|fashion|apparel|beauty|cosmetics|food|beverage|restaurant|hospitality|hotel|travel|tourism|coca-cola|nike|store|shop)\b/i},{key:"industry",label:"Manufacturing, Energy & Logistics",color:"#95a5a6",words:/\b(manufacturing|energy|oil|gas|solar|utilities|automotive|tesla|siemens|ge|general electric|honeywell|3m|logistics|supply chain|shipping|freight|fedex|ups|industrial|mining|chemicals?)\b/i},{key:"nonprofit",label:"Nonprofit & Community",color:"#bdc3c7",words:/\b(nonprofit|non-profit|foundation|charity|ngo|church|ministry|volunteer)\b/i}],o={key:"unknown",label:"Unclear",color:"#555c66"},s=Object.fromEntries([...i,o].map(e=>[e.key,e])),a=e=>s[e]||o;function l(e,t){for(let n of[e,t]){if(!n)continue;let e=i.find(e=>e.words.test(n));if(e)return e}return o}let d=(e,t)=>l(e,t).key,c=e=>n(e).level>=4;e.s(["INDUSTRIES",0,i,"UNKNOWN_INDUSTRY",0,o,"buildCompanyIndex",0,function(e=[]){let n=new Map,r=e=>(n.has(e)||n.set(e,(0,t.rolesWithCompanies)(e)),n.get(e)),{industries:i}=(0,t.networkCompanies)(e,{industryOf:d,rolesOf:r}),o=new Map;for(let t of e){let e=t.profile_url||`id:${t.id}`,n=o.get(e);(!n||(t.degree||9)<(n.degree||9))&&o.set(e,t)}let s=new Map;for(let e of o.values()){let t=r(e).find(e=>!e.former)?.company;if(!t)continue;let n=s.get(t);n||(n={name:t,people:[],d1:0,d2:0,d3:0,S:0,A:0,senior:0},s.set(t,n)),n.people.push(e),1===e.degree?n.d1++:2===e.degree?n.d2++:n.d3++,"S"===e.tier&&n.S++,"A"===e.tier&&n.A++,c(e.headline)&&n.senior++}for(let e of s.values())e.industry=a(i.get(e.name));return s},"companyLinks",0,function(e=[],t=[]){let n=new Map;for(let t of e){let e=r(t);e&&n.set(t.id,e)}let i=new Map;for(let e of t){let t=n.get(e.source_connection_id),o=r(e);if(!t||!o||t===o)continue;let[s,a]=t<o?[t,o]:[o,t],l=`${s}\u0000${a}`,d=i.get(l);d||(d={a:s,b:a,weight:0,via:new Set},i.set(l,d)),d.weight++,d.via.add(e.source_connection_id)}return[...i.values()]},"companyOf",0,r,"getSeniority",0,n,"industryByKey",0,a,"industryOf",0,l,"isSenior",0,c,"waysInto",0,function(e,t=[],n=[]){let i=t.filter(t=>r(t)===e),o=new Map;for(let t of n)r(t)===e&&o.set(t.source_connection_id,(o.get(t.source_connection_id)||0)+1);let s=new Map(t.map(e=>[e.id,e]));return{direct:i,bridges:[...o.entries()].map(([e,t])=>({bridge:s.get(e),n:t})).filter(e=>e.bridge).sort((e,t)=>t.n-e.n||(Number(t.bridge.power_score)||0)-(Number(e.bridge.power_score)||0))}}])},19821,98658,e=>{"use strict";async function t(e){let t=e?`/api/network?userId=${encodeURIComponent(e)}`:"/api/network",n=await fetch(t);if(!n.ok)throw Error(`Failed to load network (${n.status})`);let r=await n.json();return{degree1:r.degree1||[],degree2:r.degree2||[],degree3:r.degree3||[],ties:Number(r.ties)||0}}function n(e=[],t=[]){let r={S:0,A:0,B:0,C:0,D:0};for(let t of e)r[t.tier]=(r[t.tier]||0)+1;let i=0;for(let e of t)"S"===e.tier&&(i+=1);let o=new Set(t.map(e=>e.source_connection_id).filter(Boolean)).size,s=e.filter(e=>e.is_catalyst).length;return 100*r.S+40*r.A+15*r.B+5*r.C+ +r.D+200*o+150*s+50*i+e.length}e.s(["loadNetwork",0,t],19821);let r=e=>Math.floor(Math.sqrt(Math.max(0,e)/10)),i="six-degrees-level",o={},s=new Set;function a(e="own"){if(!(e in o))try{let t=sessionStorage.getItem(`${i}:${e}`),n=null==t?NaN:Number(t);o[e]=Number.isFinite(n)?n:null}catch{o[e]=null}return o[e]}e.s(["levelNow",0,a,"levelOf",0,r,"networkLevel",0,(e,t)=>r(n(e,t)),"networkPower",0,n,"rememberLevel",0,function(e,t="own"){if(a(t)!==e){o[t]=e;try{sessionStorage.setItem(`${i}:${t}`,String(e))}catch{}s.forEach(e=>e())}},"watchLevel",0,function(e){return s.add(e),()=>s.delete(e)}],98658)},48235,e=>{"use strict";var t=e.i(51798),n=e.i(7214);function r(e,t){return e?t.scanned.has(e.id)||e.profile_url&&t.read?.has((0,n.keyFor)(e))?"scanned":e.profile_url&&t.hidden.has((0,n.keyFor)(e))?"hidden":"todo":"todo"}function i(e,t){if(!e||1!==e.degree||null==e.unlocked_from_bridge_id)return null;let n=r(e,t);return"todo"===n?"ready":n}e.s(["circleScanCost",0,function(e=100,n="fast"){let r=Math.max(1,Math.min(100,Math.round(e)||100)),i=n&&"fast"!==n?Math.max(5,Math.round((0,t.paceSeconds)(n,r)/60)):r>=100?55:Math.max(5,Math.round(.55*r));return{profileViews:1,searches:r,minutes:i}},"circleState",0,r,"reachIndex",0,function(e=[],t=[],r={}){let i=new Set;for(let e of t||[])e?.source_connection_id!=null&&i.add(e.source_connection_id);let o=new Set;for(let e of r?.skips||[])e?.profileUrl&&o.add((0,n.keyFor)({profile_url:e.profileUrl}));let s=new Set;for(let e of r?.read||[])e&&s.add((0,n.keyFor)({profile_url:e}));let a=new Map;for(let[e,t]of Object.entries(r?.lists||{}))e&&t&&a.set((0,n.keyFor)({profile_url:e}),t);let l=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let n=l.get(e);n||l.set(e,n=[]),n.push(t)}return{scanned:i,read:s,hidden:o,reachedFrom:l,lists:a}},"reachState",0,i,"readyByCircle",0,function(e){let t=new Map;for(let[n,r]of e.reachedFrom){let o=r.filter(t=>"ready"===i(t,e)).length;o&&t.set(n,o)}return t},"readyToScan",0,function(e,t){return(e||[]).filter(e=>"ready"===i(e,t)).sort(n.compareBridges)},"scanBars",0,function(e,t){let i=r(e,t),o=e?.profile_url?t.lists?.get((0,n.keyFor)(e)):null;return"hidden"===i?null:o?o.more?o.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*o.pages/o.total)))):2:5:"scanned"===i?2:null}])},51798,e=>{"use strict";let t={fast:{label:"Fast",pagePause:20,chunkCooldown:60,profileGap:60},medium:{label:"Medium",pagePause:45,chunkCooldown:180,profileGap:90},slow:{label:"Slow",pagePause:90,chunkCooldown:300,profileGap:120}},n=e=>t[e]||t.fast;function r(e,t){let r=n(e),i=Math.max(0,Math.floor(Number(t)||0));return i*(6+r.pagePause)+Math.floor(i/10)*r.chunkCooldown}e.s(["PACES",0,t,"PACE_NAMES",0,["slow","medium","fast"],"durationText",0,function(e){if(!(e>=60))return"under a minute";let t=Math.round(e/60);if(t<60)return`about ${t} min`;let n=Math.floor(t/60),r=t%60;return`about ${n} h${r?` ${r} min`:""}`},"firstCircleSeconds",0,function(e){return r(e,10)},"paceOf",0,n,"paceSeconds",0,r,"searchesPerHour",0,function(e){let t=n(e);return Math.round(3600/(6+t.pagePause+t.chunkCooldown/10))}])},69083,e=>{"use strict";var t=e.i(89154);let n=new Map(t.INDUSTRIES.map(e=>[e.key,e.color])),r=new Map([...t.INDUSTRIES.map(e=>[e.key,Object.freeze({key:e.key,label:e.label,color:e.color,group:e.key,kind:"industry"})]),...Object.entries({software:["Software & SaaS","tech","function"],"ai-data":["AI & Data","tech","function"],cybersecurity:["Cybersecurity","tech","function"],telecom:["Telecom","tech","industry"],fintech:["Fintech & Payments","finance","industry"],banking:["Banking & Lending","finance","industry"],"vc-pe":["Venture Capital & Private Equity","finance","industry"],wealth:["Wealth & Asset Management","finance","industry"],insurance:["Insurance","finance","industry"],accounting:["Accounting & Tax","finance","function"],crypto:["Crypto & Web3","finance","industry"],hospitals:["Hospitals & Clinics","health","industry"],dental:["Dental","health","industry"],"pharma-biotech":["Pharma & Biotech","health","industry"],"medical-devices":["Medical Devices","health","industry"],"mental-health":["Mental Health","health","industry"],"fitness-wellness":["Fitness & Wellness","health","industry"],veterinary:["Veterinary & Animal Care","health","industry"],k12:["K-12 Education","education","industry"],"higher-ed":["Higher Education","education","industry"],"marketing-advertising":["Marketing & Advertising","media","function"],"pr-comms":["PR & Communications","media","function"],"media-publishing":["Media & Publishing","media","industry"],"creator-economy":["Creator Economy","media","industry"],"film-tv-music":["Film, TV & Music","entertainment","industry"],"gaming-esports":["Gaming & Esports","entertainment","industry"],sports:["Sports","entertainment","industry"],"ecommerce-retail":["E-commerce & Retail","consumer","industry"],"consumer-goods":["Consumer Goods","consumer","industry"],restaurants:["Restaurants & Food Service","consumer","industry"],"hospitality-travel":["Hospitality & Travel","consumer","industry"],"beauty-personal-care":["Beauty & Personal Care","consumer","industry"],logistics:["Logistics & Supply Chain","industry","industry"],manufacturing:["Manufacturing","industry","industry"],energy:["Energy & Utilities","industry","industry"],automotive:["Automotive","industry","industry"],agriculture:["Agriculture & Farming","industry","industry"],"aerospace-defense":["Aerospace & Defense","defense","industry"],military:["Military","defense","industry"],government:["Government & Public Sector","defense","industry"],legal:["Legal","consulting","function"],"management-consulting":["Management Consulting","consulting","function"],"hr-recruiting":["HR & Recruiting","consulting","function"],"security-services":["Security Services","consulting","function"],"real-estate":["Real Estate","realestate","industry"],"construction-trades":["Construction & Trades","realestate","industry"],charities:["Nonprofits & Charities","nonprofit","industry"],"social-work":["Social Work & Human Services","nonprofit","industry"],faith:["Faith & Ministry","nonprofit","industry"]}).map(([e,[r,i,o]])=>[e,Object.freeze({key:e,label:r,color:n.get(i)||t.UNKNOWN_INDUSTRY.color,group:i,kind:o})])]);e.s(["sectorByKey",0,function(e){return r.get(e)||{key:e,label:t.UNKNOWN_INDUSTRY.label,color:t.UNKNOWN_INDUSTRY.color,group:null,kind:null}}])},7214,36774,e=>{"use strict";let t=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,n="/avatars/";function r(e){return"string"==typeof e&&e.startsWith(n)&&t.test(e.slice(n.length))?e:null}e.s(["localPhoto",0,r],36774);let i={S:0,A:1,B:2,C:3,D:4};function o(e){let t=parseFloat(e?.power_score);return Number.isFinite(t)?t:0}function s(e){return Math.round(10*o(e))/10}function a(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}let l=(e,t)=>String(e??"").localeCompare(String(t??""),void 0,{numeric:!0});function d(e,t){return(i[e.tier]??9)-(i[t.tier]??9)||o(t)-o(e)||String(e.name||"").localeCompare(String(t.name||""))||l(e.id,t.id)}function c(e,t){return e.bridge&&t.bridge?d(e.bridge,t.bridge):e.bridge?-1:t.bridge?1:l(e.id,t.id)}function u(e,t){return t.score-e.score||t.waysIn-e.waysIn||c(e.routes[0]||g,t.routes[0]||g)||String(e.person.name||"").localeCompare(String(t.person.name||""))||(e.key<t.key?-1:+(e.key>t.key))}let g={id:null,bridge:null};function f(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length<2?t[0]||"":`${t[0]} ${t[t.length-1].charAt(0)}.`}function h(e,t){let n=String(e||"");return t<=1?n?"…":"":n.length>t?`${n.slice(0,t-1)}…`:n}e.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,d,"comparePower",0,u,"convergeLayout",0,function(e,t=800,n=!1,{cards:r=!1,mutuals:i=0}={}){let o=r?46:n?40:34,s=Math.round(t*(n?.44:.36)),a=Math.round(t*(n?.8:r?.6:.62)),l=[],d=null;for(let t of e?.routes||[])t.bridge?l.push({id:t.id,bridge:t.bridge,unresolved:!1,count:1}):d?d.count++:l.push(d={id:null,bridge:null,unresolved:!0,count:1});let c=Math.max(0,Math.floor(Number(i)||0)-(e?.waysIn||0)),u=Math.min(60,c),g=r?12:11,p=r?220:n?96:120,y=Math.max(1,Math.floor(p/g)+1),m=Math.ceil(u/y),b=u?40+m*g:0,v=Math.max(0,l.length-1)*o+b,x=Math.max(n?190:r?250:220,32+v+48),S=x/2,k=S-v/2,w=Math.max(4,Math.floor((s-10-42)/6)),j=l.map((e,t)=>{let n=e.unresolved?`can't be named (${e.count})`:e.bridge.name||"";return{...e,x:s,y:k+t*o,r:6,primary:0===t&&!e.unresolved,label:n.length<=w?n:h(e.unresolved?n:f(n),w)}}),C={x:a,y:S,r:17*!r,rings:r?[]:[32,50,70].filter(e=>e<=S-4)},M=j.map(t=>({key:e?.key,bridgeId:t.id,primary:t.primary,unresolved:t.unresolved,tier:t.bridge?.tier??null,x1:t.x,y1:t.y,x2:C.x,y2:C.y})),z={x:20,y:S,r:14},I=j.map(e=>({id:e.id,x1:z.x,y1:z.y,x2:e.x,y2:e.y})),B=e?[{key:e.key,p:e,x:C.x,y:C.y,r:C.r,rings:C.rings,big:!0,label:""}]:[],F=k+Math.max(0,l.length-1)*o+40,_=r?s-236+8:s-p,R=Array.from({length:u},(e,t)=>({x:_+t%y*g,y:F+Math.floor(t/y)*g})),T=e?.waysIn?e.waysIn/(e.waysIn+c):1;return{width:t,height:x,you:z,target:C,people:B,bridges:j,links:M,spokes:I,ghosts:R,unscanned:c,ghostLabel:u?{x:_,y:F-13}:null,drawn:T}},"keyFor",0,a,"mapCount",0,function(e,t=10){let n=Math.max(0,Math.min(100,Number(e)||0));return n<=50?t:Math.max(1,Math.round(t*(100-n)/50))},"mostMutuals",0,function(e=[],t=()=>0,n=7){return[...e].sort((e,n)=>Math.max(t(n)||0,n.waysIn)-Math.max(t(e)||0,e.waysIn)||n.waysIn-e.waysIn||u(e,n)).slice(0,n)},"routeIndex",0,function(e=[]){let t=new Map;for(let n of e||[]){let e=a(n),r=t.get(e);r||(r=new Set,t.set(e,r)),r.add(n.source_connection_id??null)}return t},"routesFor",0,function(e,t,n){return e?[...t?.get(a(e))??(null!=e.source_connection_id?new Set([e.source_connection_id]):new Set)].map(e=>({id:e,bridge:n?.get(e)??null})).sort(c):[]},"score",0,o,"score1",0,s,"separationPeople",0,function(e=[],t=[]){let n=new Map;for(let e of t||[])n.set(e.id,e);let i=new Map,o=new Map;for(let t of e||[]){let e=a(t);o.set(t.id,e);let n=i.get(e);n?function(e,t){let n=s(e)-s(t);if(n)return n>0;let i=!!r(e.profile_image_url);return!!r(t.profile_image_url)!==i?i:0>l(e.id,t.id)}(t,n.person)&&(n.person=t):(n={key:e,person:t,rowIds:[],routeIds:new Set},i.set(e,n)),n.rowIds.push(t.id),n.routeIds.add(t.source_connection_id??null)}let d={people:i.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},g=new Set,f=new Set,h=new Set,p=[];for(let e of i.values()){let t=[...e.routeIds].map(e=>({id:e,bridge:n.get(e)??null}));t.sort(c);let r=t.filter(e=>e.bridge);for(let e of t)(e.bridge?g:f).add(e.id);if(!r.length)for(let e of(d.peopleOnlyUnresolved++,t))h.add(e.id);let{person:i}=e,o=i.tier;void 0!==d.byTier[o]&&d.byTier[o]++,t.length>1&&d.multi++,p.push({key:e.key,person:i,score:s(i),tier:o,routes:t,waysIn:t.length,rowIds:e.rowIds,haystack:[i.name,i.headline,i.company,i.role,...r.map(e=>e.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return d.bridges=g.size,d.unresolvedIds=f.size,d.onlyUnresolvedVia=h.size,p.sort(u),function(e){for(let t=0;t<e.length;t++){let n=e[t],r=e[t-1],i=r&&r.score===n.score&&r.waysIn===n.waysIn;n.rank=i?r.rank:t+1,i&&(n.tied=!0,r.tied=!0)}}(p),{people:p,rowToKey:o,summary:d}},"shortName",0,f,"summitLayout",0,function(e=[],t=800,n=!1,{cards:r=!1}={}){let i=r?45:n?36:26,o=Math.round(.42*t),s=Math.round(.58*t),a=e.map((e,n)=>{var o;return{key:e.key,p:e,x:s,y:16+n*i,r:r?0:(o=e.waysIn)>=4?8.5:3===o?7:2===o?5.5:4,label:h(`#${e.rank}${e.tied?"=":""} ${e.person.name||""}`,Math.floor((t-s-60)/6.2))}}),l=new Map,c="\0unresolved";for(let e of a)for(let t of e.p.routes){let n=t.bridge?t.id:c,r=l.get(n);r||(r={id:t.bridge?t.id:null,bridge:t.bridge,unresolved:!t.bridge,ys:[],count:0},l.set(n,r)),r.count++,r.ys.push(e.y)}let u=[...l.values()].map(e=>({...e,bary:e.ys.reduce((e,t)=>e+t,0)/e.ys.length}));u.sort((e,t)=>e.bary-t.bary||e.unresolved-t.unresolved||(e.bridge&&t.bridge?d(e.bridge,t.bridge):0));let g=a.length?a[a.length-1].y:16,p=function(e=[],t=18,n=0){let r=[];e.forEach((e,n)=>{for(r.push({sum:e-n*t,count:1});r.length>1&&r[r.length-2].sum/r[r.length-2].count>r[r.length-1].sum/r[r.length-1].count;){let e=r.pop();r[r.length-1].sum+=e.sum,r[r.length-1].count+=e.count}});let i=r.flatMap(e=>Array(e.count).fill(e.sum/e.count)).map((e,n)=>e+n*t),o=i.length&&i[0]<n?n-i[0]:0;return i.map(e=>e+o)}(u.map(e=>e.bary),r?32:18,16),y=Math.max(4,Math.floor((o-10-42)/6));u.forEach((e,t)=>{if(e.x=o,e.y=p[t],e.r=5,e.unresolved)e.label=h(`can't be named (${e.count})`,y);else{let t=e.bridge.name||"";e.label=t.length<=y?t:h(f(t),y)}delete e.ys});let m=new Map(u.map(e=>[e.unresolved?c:e.id,e]));for(let e of u)e.onlyFor=0,e.bestFor=0;for(let e of a){let t=e.p.routes[0],n=t?m.get(t.bridge?t.id:c):null;n&&n.bestFor++,1===e.p.waysIn&&n&&n.onlyFor++}let b=[];for(let e of a){let t=new Set;e.p.routes.forEach((n,r)=>{let i=n.bridge?n.id:c;if(t.has(i))return;t.add(i);let o=m.get(i);b.push({key:e.key,bridgeId:o.id,primary:0===r&&!o.unresolved,unresolved:o.unresolved,tier:o.bridge?.tier??null,x1:o.x,y1:o.y,x2:e.x,y2:e.y})})}let v=Math.max(g,u.length?u[u.length-1].y:0),x=a.length?Math.ceil(v+16):0,S={x:20,y:a.length?(16+Math.max(g,v))/2:16,r:14},k=u.map(e=>({id:e.id,x1:S.x,y1:S.y,x2:e.x,y2:e.y}));return{width:t,height:x,you:S,people:a,bridges:u,links:b,spokes:k}}],7214)},828,e=>{"use strict";var t=e.i(54322);e.s(["TIER_COLORS_CLASSIC",()=>t.TIER_COLORS])},46949,e=>{"use strict";e.i(54322),e.s(["TIER_ORDER",0,["S","A","B","C","D"],"initialsFor",0,function(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return 0===t.length?"?":(t[0].charAt(0)+(t.length>1?t[t.length-1].charAt(0):"")).toUpperCase()}])}]);
|
|
@@ -6,6 +6,149 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.7.0] - 2026-10-03
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **Download for Mac shows how to open it the first time.** On sixdegreesapp.com, clicking Download
|
|
13
|
+
for Mac now shows the three steps right under the button: drag it into Applications, close
|
|
14
|
+
macOS's warning, and allow it once in System Settings → Privacy & Security. They used to be only
|
|
15
|
+
on the Download page.
|
|
16
|
+
- **Watch a circle fill in while it's scanned.** While the scanner reads who your connections know,
|
|
17
|
+
step 4 on the Scan page has a Watch it fill in link to that person's circle in Bridge Chains,
|
|
18
|
+
which fills in as the scanner saves every 10 pages, during a whole round too, not only a scan of
|
|
19
|
+
one person.
|
|
20
|
+
- **An "I understand" before the first scan**: the Scan page says once, plainly, that scanning runs
|
|
21
|
+
your own LinkedIn account automatically, that LinkedIn may restrict accounts that do this (the safe
|
|
22
|
+
limits of 50 searches a day and 250 a month stay on), and that nothing leaves your computer. Nothing
|
|
23
|
+
opens LinkedIn until you click I understand, whichever button asks, and the CSV import is one click
|
|
24
|
+
away instead. It's asked once and kept with your settings; anyone who has scanned before isn't asked.
|
|
25
|
+
The welcome screen's Scan card says the risk too, and the README and website say Six Degrees is not
|
|
26
|
+
affiliated with or endorsed by LinkedIn.
|
|
27
|
+
- **Light looks, and every look its own all the way through** (Settings → Appearance). Daylight and
|
|
28
|
+
Paper are light, designed for it: ink words, white cards and panels, deeper dots that read on
|
|
29
|
+
white. Pick any light background in the editor and the words and borders turn dark with it. Each
|
|
30
|
+
look now changes more than its colours: its buttons (soft, flat, square, glass, neon or bold), its
|
|
31
|
+
words (Obsidian's greys, a data terminal's for Analyst, brighter ones on Glass), its cards,
|
|
32
|
+
pickers, tooltips and notch, the sliders, and how the map draws its dots (glass droplets, flat
|
|
33
|
+
like Obsidian, or glowing). Both are yours to pick in the editor too.
|
|
34
|
+
- **Analyst is an analysis tool's look**: a bare white canvas and flat grey panels, plain outlined
|
|
35
|
+
dots in colour-blind-safe colours with black labels, thin grey lines, flat blue for what's picked,
|
|
36
|
+
no gradients, glows or shadows, and every number in even columns. Less on screen, more about the
|
|
37
|
+
numbers.
|
|
38
|
+
- **A look's dots and panels everywhere, not just on the map.** Glass droplets, glowing dots, plain
|
|
39
|
+
outlined dots or flat ones now follow a look into Degrees (bridges, clusters, the hover preview),
|
|
40
|
+
Separation, Paths' bubbles, the Scan cluster, circle previews, the header's scan dots, legends,
|
|
41
|
+
tier dots and avatars. Each look also has its own side panels, tab bar, notch and map tooltips:
|
|
42
|
+
graphite with fine borders (Obsidian), neon edges (Synthwave), a cool rim (Space), hard outlines
|
|
43
|
+
(High contrast), soft shadows (Daylight), ruled and warm (Paper), grey hairlines (Analyst), glass
|
|
44
|
+
(Glass).
|
|
45
|
+
- **Glass is Apple's Liquid Glass.** Panels of dark glass that keep their words readable, with a lit
|
|
46
|
+
rim and a bright top edge, and edges that bend what's behind them the way Apple's glass does. The
|
|
47
|
+
tabs sit in one glass capsule; buttons are glass capsules that spring when pressed. With Reduce
|
|
48
|
+
Transparency on, the panels go solid.
|
|
49
|
+
- **Bridge Chains: hovering a bridge grows its circle.** Their people shoot out of the bridge to
|
|
50
|
+
their places, then anyone among them whose own circle is scanned sprouts it (3rd degree), then
|
|
51
|
+
theirs (4th), in under half a second.
|
|
52
|
+
- **↻ Check for new forms a cluster.** Hover it and a ring of dots builds round it clockwise, the
|
|
53
|
+
way a connection's circle forms on the map; while it checks, the ring keeps building, round and
|
|
54
|
+
round, in the look's colours, and the button stays lit. The same on the Scan page.
|
|
55
|
+
- **Scan: the radar is a cluster that grows with every page.** While a scan runs, the people each
|
|
56
|
+
page finds gather round the Scan button as dots, ring by ring, each page's batch in the next of
|
|
57
|
+
the theme's colours (the same as the header's dots), the newest glowing.
|
|
58
|
+
- **Backups that look after themselves, photos and all.** Six Degrees now backs up your whole
|
|
59
|
+
network once a day while it's open (when it starts, and after a scan, if the last one is a day
|
|
60
|
+
old), before a new version first opens it, and whenever you click **Back up now** in Settings →
|
|
61
|
+
Your data. Each backup holds your connections, their profile photos, your settings and the
|
|
62
|
+
scanner's progress, and is checked as it's made, the same way a restore would check it. Settings
|
|
63
|
+
says "Last backup: <time>, verified", or plainly what's wrong if a backup ever fails its check.
|
|
64
|
+
It keeps the last 7 daily backups, 3 from before new versions and 3 from before an import or a
|
|
65
|
+
restore (each of those for at least 30 days); ones you make yourself stay until you delete them.
|
|
66
|
+
The Social tab's messages and notes are never in a backup, so deleting them there deletes them
|
|
67
|
+
everywhere.
|
|
68
|
+
- **Restore any backup, from Settings.** Each backup has **Restore** and **Show in Finder**.
|
|
69
|
+
Restore checks it, then puts it back when Six Degrees restarts (**Restart now** in the Mac app),
|
|
70
|
+
keeping what was there first so you can go back again. Undoing an import is now one click on
|
|
71
|
+
the backup it kept, instead of moving files by hand.
|
|
72
|
+
- **Your look and your saved Galaxy layouts travel with your network**: they're kept with your
|
|
73
|
+
settings, so a backup, a restore or a move to another computer brings them along.
|
|
74
|
+
- **Settings → LinkedIn usage: how close your account is to the line, at a glance.** A status pill
|
|
75
|
+
(well within, above the default, risky, too close, or paused) and four bars: searches in the last
|
|
76
|
+
24 hours, marked at 50 (the default), 100 (risky) and 373 (where a real account was restricted),
|
|
77
|
+
with when the next one frees and when you're all clear; searches this month, with when LinkedIn's
|
|
78
|
+
month resets (midnight Pacific on the 1st) and the 250 to 350 people report for a free account
|
|
79
|
+
shaded as a guide, not a fact; the last 7 days against Auto scan's 200; and profile views. Below
|
|
80
|
+
them: your speed and searches in the last hour, about how many people you can still map, the last
|
|
81
|
+
time LinkedIn pushed back (its time and reason, even after you lift the pause), Auto scan's own
|
|
82
|
+
rules, and a plain warning with *Back to 50 a day, 250 a month* when it matters. Every number is
|
|
83
|
+
counted from what Six Degrees wrote down on this computer, and says so. The notch's budget and the
|
|
84
|
+
Scan page's budget box link to it.
|
|
85
|
+
|
|
86
|
+
### Changed
|
|
87
|
+
- **A LinkedIn CSV import is kept until you remove it.** Close the window or restart the app and
|
|
88
|
+
your imported network is still there; it used to be gone with the window. It's kept on this
|
|
89
|
+
computer, in your data folder (`csv-network.json`), apart from any network you scan, and only
|
|
90
|
+
what the map needs (names, positions, companies, profile links, when you connected; never email
|
|
91
|
+
addresses). Click × beside *Your CSV* to remove it; it asks first, and your `Connections.csv`
|
|
92
|
+
isn't touched. *Save a copy of my network* carries it to another computer and an import brings
|
|
93
|
+
it back. If the kept file can't be read, the welcome screen says so instead of acting as if
|
|
94
|
+
there were none. The welcome screen's CSV card says where it's kept. Once you've scanned your own
|
|
95
|
+
connections, every page shows your scan instead; the CSV stays kept, and the import page says so
|
|
96
|
+
with a button to remove it.
|
|
97
|
+
- **Google Chrome is part of getting ready.** Step 1 on the Scan page isn't done until Chrome is on
|
|
98
|
+
your computer, and offers Install Google Chrome, then come back; it ticks by itself once Chrome is
|
|
99
|
+
there. Open LinkedIn waits for it, nothing that opens LinkedIn starts without it (every button
|
|
100
|
+
gets the same one-sentence reason), and the welcome screen's Scan card says it needs Chrome.
|
|
101
|
+
- **Honest about how long scanning takes.** The Scan page says your galaxy takes three steps and who
|
|
102
|
+
they know fills in over days. Step 4 says the first circle shows up in about 5 minutes (longer at
|
|
103
|
+
Medium or Slow) and why the rest takes days: every page is a LinkedIn search, and your budget caps
|
|
104
|
+
a day's.
|
|
105
|
+
- **Your field is asked after your connections are in**, under "Your galaxy is ready", instead of
|
|
106
|
+
before the first scan, and picking one rescores everyone straight away. Anyone with only their own
|
|
107
|
+
connections mapped who never answered is asked once; skipping counts as an answer.
|
|
108
|
+
- **Sign in to LinkedIn with Google or Apple?** Step 2 now says what to do: set a LinkedIn password
|
|
109
|
+
first (Forgot password on LinkedIn's sign-in page emails you a link to make one), since Google and
|
|
110
|
+
Apple sign-in can't work in the scanner's window.
|
|
111
|
+
- **A saved Galaxy picture or video credits sixdegreesapp.com** in its corner, instead of the app's
|
|
112
|
+
name, so anyone it's shared with knows where to get it.
|
|
113
|
+
- **Bridge Chains: the inner ring holds the circles with the most going on**: notifications about
|
|
114
|
+
them (new ones count double), people in them ready to scan, and clusters formed from them since.
|
|
115
|
+
A circle's tooltip says how many notifications are about it.
|
|
116
|
+
- **Separation fits the whole map in the window, and keeps fitting**: whatever the map shows, as the
|
|
117
|
+
slider moves or you aim at someone else, it fits again and glides there, list and all. − Fit +
|
|
118
|
+
at the right of its caption zooms in or out (as far as 15%) until the view changes.
|
|
119
|
+
- **Bridge Chains' legends are just dots**, no box: they fit whatever font a look uses.
|
|
120
|
+
- **Bridge Chains: the badge at a bridge's top right counts their circle's news**: new notifications
|
|
121
|
+
about it (gold) and people in it ready to scan (green), as asked for on 10/2; it counted only the
|
|
122
|
+
people ready before.
|
|
123
|
+
- **Settings → Your data says Export backup file… and Restore from a file…** instead of "Save a
|
|
124
|
+
copy of my network" and "Choose a file… / Import". They do the same: one file to carry your
|
|
125
|
+
network to another computer, and putting one back.
|
|
126
|
+
|
|
127
|
+
### Fixed
|
|
128
|
+
- **Auto scan rests two days after any check from LinkedIn, as the Scan page says.** A pushback
|
|
129
|
+
partway through reading someone's list used to rest it one day, like a scan you start yourself;
|
|
130
|
+
only a check at the start of a run got the two days.
|
|
131
|
+
- **"Signed in" means signed in.** Step 2 used to tick as soon as the scanner's Chrome window had
|
|
132
|
+
opened once, even if you closed it without signing in. Now it ticks once the scanner has seen you
|
|
133
|
+
signed in. Anyone already signed in before this stays signed in.
|
|
134
|
+
- **Degrees says the right thing before who they know is mapped.** With no 2nd degree yet, it told
|
|
135
|
+
everyone LinkedIn's CSV can't have circles, scanner users included. Now someone who scanned is
|
|
136
|
+
pointed to step 4 on the Scan page; a CSV import gets the CSV reason, as before.
|
|
137
|
+
- **Words on screen read plainly**: no em dashes anywhere the app shows text (pages, notices,
|
|
138
|
+
notifications, error messages), and a test keeps it that way. The Scan page's old "Checking for
|
|
139
|
+
updates has moved" note is gone. Two messages written for developers now say what anyone can do: a
|
|
140
|
+
copy missing its scanner says to download it again, and a page that can't reach the app says to
|
|
141
|
+
quit and reopen it. The download size reads "about 210 MB" everywhere (the Mac downloads are 204
|
|
142
|
+
and 212 MB).
|
|
143
|
+
- **The Social tab says truly where its messages and notes go**: never into Six Degrees' own
|
|
144
|
+
backups, and into an exported backup file only with its Social tab box ticked. It used to say
|
|
145
|
+
they were never in a copy, which wasn't so when that box was ticked.
|
|
146
|
+
- **Copies kept before an import no longer pile up forever**: the newest 3 stay, and none goes
|
|
147
|
+
before it's 30 days old.
|
|
148
|
+
- **The budget says "the last 24 hours", because that's what it counts.** The notch said "searches
|
|
149
|
+
today" and the Scan page "searches left today" (and "profile views today"), but the budget has
|
|
150
|
+
always counted a rolling 24 hours, not since midnight. They now say so.
|
|
151
|
+
|
|
9
152
|
## [0.6.0] - 2026-10-03
|
|
10
153
|
|
|
11
154
|
### Added
|
|
@@ -68,7 +68,7 @@ The links above always fetch the newest release.</sub>
|
|
|
68
68
|
|
|
69
69
|
**Which download?** Apple menu → **About This Mac**. If it says "Chip: Apple M…", take
|
|
70
70
|
**Apple Silicon**. If it says "Processor: …Intel…", take **Intel**. It needs **macOS 13.5
|
|
71
|
-
(Ventura) or later**, and it's about
|
|
71
|
+
(Ventura) or later**, and it's about 210 MB. Everything the scanner needs except Google
|
|
72
72
|
Chrome is inside, Python included, so there's nothing else to install.
|
|
73
73
|
|
|
74
74
|
**The first time you open it**, macOS stops it, because the app isn't signed with a
|
|
@@ -112,8 +112,9 @@ Downloading the new `.dmg` works too; you'll repeat step 3 once for it.
|
|
|
112
112
|
|
|
113
113
|
Your network isn't stored in the app. It's in a hidden folder in your home folder,
|
|
114
114
|
`.six-degrees` (open it any time with *Help → Show the Data Folder*), so updates never
|
|
115
|
-
touch it. Each new version also
|
|
116
|
-
first opens it
|
|
115
|
+
touch it. Each new version also backs up your data, photos and all, into its `backups`
|
|
116
|
+
folder before it first opens it, and Six Degrees makes a backup each day it's open
|
|
117
|
+
(see [Backups](#backups)). To take it to another computer, see
|
|
117
118
|
[Moving to a new computer](#moving-to-a-new-computer).
|
|
118
119
|
|
|
119
120
|
**Windows (beta):** download [Six-Degrees-Windows-Setup.exe](https://github.com/blakeb056/six-degrees/releases/download/v0.5.1-beta.1/Six-Degrees-Windows-Setup.exe)
|
|
@@ -283,6 +284,10 @@ Something out of date, or unfair to another tool? [Open an issue](https://github
|
|
|
283
284
|
>
|
|
284
285
|
> **The CSV import and the sample network carry no LinkedIn risk at all.** Details:
|
|
285
286
|
> [how scanning works and what it risks](docs/SCRAPING.md).
|
|
287
|
+
>
|
|
288
|
+
> The app asks for an explicit "I understand" once, before the first scan.
|
|
289
|
+
>
|
|
290
|
+
> Six Degrees is not affiliated with or endorsed by LinkedIn.
|
|
286
291
|
|
|
287
292
|
## First run
|
|
288
293
|
|
|
@@ -298,7 +303,7 @@ The app opens on a welcome screen with three ways in, and asks nothing about you
|
|
|
298
303
|
- **Import my LinkedIn CSV**: LinkedIn's official export, read on your machine. On
|
|
299
304
|
LinkedIn: **Settings & Privacy → Data privacy → Get a copy of your data →
|
|
300
305
|
Connections**. LinkedIn emails a link in about ten minutes; unzip it and drop
|
|
301
|
-
`Connections.csv` into the app.
|
|
306
|
+
`Connections.csv` into the app. It's kept on your computer until you remove it.
|
|
302
307
|
- **Explore a sample network**: 150 invented connections and the 598 invented people
|
|
303
308
|
they know. Click through before deciding anything.
|
|
304
309
|
|
|
@@ -317,8 +322,12 @@ people you *haven't* met, have nothing to draw. That data exists in no official
|
|
|
317
322
|
the scanner is the only way to it, and it's opt-in for that reason.
|
|
318
323
|
|
|
319
324
|
While the sample or a CSV is loaded, the top bar shows *Sample network ×* or *Your CSV
|
|
320
|
-
|
|
321
|
-
|
|
325
|
+
×*, and Outlink and Scan are hidden. Neither is ever added to your network. The sample
|
|
326
|
+
lasts as long as the app's window is open. A CSV import is kept on your computer, in the
|
|
327
|
+
data folder (`csv-network.json`), so it's still there after you close the window or
|
|
328
|
+
restart; click × to remove it (your `Connections.csv` itself isn't touched). Once you've
|
|
329
|
+
scanned your own connections, the map shows your scan instead; the CSV stays kept until
|
|
330
|
+
you remove it from the import page.
|
|
322
331
|
|
|
323
332
|
## How scoring works
|
|
324
333
|
|
|
@@ -382,8 +391,9 @@ It estimates **network position**, not what anyone is worth as a person.
|
|
|
382
391
|
|
|
383
392
|
- Your network is stored on your computer and nowhere else. No account, no server, no
|
|
384
393
|
telemetry, no analytics, no crash reporting.
|
|
385
|
-
- A CSV import is read on your machine and never added to your network. It's
|
|
386
|
-
|
|
394
|
+
- A CSV import is read on your machine and never added to your network. It's kept in the
|
|
395
|
+
data folder as `csv-network.json` (names, positions, companies, profile links and when
|
|
396
|
+
you connected; never email addresses) until you click × beside *Your CSV*.
|
|
387
397
|
- The app contacts only these, and only when you act:
|
|
388
398
|
- **LinkedIn**, while you scan. Each profile photo is saved on your computer as the
|
|
389
399
|
scan reads it, and the app shows photos only from there, so looking at your network
|
|
@@ -413,30 +423,58 @@ See [SECURITY.md](SECURITY.md) for the threat model.
|
|
|
413
423
|
```
|
|
414
424
|
.six-degrees/ in your home folder (hidden)
|
|
415
425
|
├── six-degrees.sqlite your network: connections, scores, tiers, queue, settings
|
|
416
|
-
├── backups/
|
|
417
|
-
│
|
|
426
|
+
├── backups/ backups of your network: daily, before each new version, before
|
|
427
|
+
│ an import or a restore, and any you make (see Backups below)
|
|
418
428
|
├── avatars/ profile photos, if you scan
|
|
419
429
|
├── chrome-profile/ the scanner's Chrome sign-in, if you scan (see below)
|
|
420
430
|
├── venv/ the scanner's Python add-ons, if you set it up without the Mac app
|
|
421
431
|
├── python/ a private Python for them, if Set up the scanner downloaded one
|
|
422
432
|
├── pushback/ what LinkedIn's page said if it ever pushed back
|
|
433
|
+
├── csv-network.json a LinkedIn CSV import, kept until you remove it
|
|
423
434
|
└── *.json the scanner's budget, cooldown, progress and skip lists
|
|
424
435
|
```
|
|
425
436
|
|
|
426
437
|
**Settings → Your data** shows where this folder is (with *Copy the path* and *Show in
|
|
427
438
|
Finder*), what each part takes up, and the backups in it.
|
|
428
439
|
|
|
440
|
+
### Backups
|
|
441
|
+
|
|
442
|
+
A backup is your whole network in one `.sixdegrees` file: your connections, their profile
|
|
443
|
+
photos, your settings (the look and your saved Galaxy layouts too), and the scanner's
|
|
444
|
+
progress, skip lists and LinkedIn budget. Each one is checked as it's made, the same way a
|
|
445
|
+
restore would check it, so a backup that's listed would restore. The Social tab's messages
|
|
446
|
+
and notes are never in a backup, so deleting them there (*Forget it*) deletes them
|
|
447
|
+
everywhere, and a restore leaves them as they are. Six Degrees makes one:
|
|
448
|
+
|
|
449
|
+
- **each day** it's open with a network in it (when it starts, and after a scan, if the
|
|
450
|
+
newest daily one is a day old; nothing runs on a timer), keeping the last 7;
|
|
451
|
+
- **before a new version** first opens your data, keeping the last 3;
|
|
452
|
+
- **when you click Back up now** in Settings → Your data. These are never deleted for you.
|
|
453
|
+
|
|
454
|
+
An import or a restore keeps what it replaced as well (`before-import-…`), keeping the
|
|
455
|
+
last 3, and never one that's under 30 days old. Anything else you put in `backups/`
|
|
456
|
+
yourself is never touched.
|
|
457
|
+
|
|
458
|
+
Settings → Your data says when the last backup was made and whether it passed its check
|
|
459
|
+
("Last backup: <time>, verified"), or what's wrong with it if it didn't. Each backup has
|
|
460
|
+
**Restore** and **Show in Finder**. Backups stay on this computer: to keep one safe if the
|
|
461
|
+
computer is lost, copy it somewhere else (Show in Finder, then drag it to a USB stick).
|
|
462
|
+
|
|
463
|
+
They take space. For a network of about 650 connections and 5,000 people beyond them,
|
|
464
|
+
with their photos, each backup is about 25 to 35 MB, so the kept ones add up to about
|
|
465
|
+
300 to 400 MB.
|
|
466
|
+
|
|
429
467
|
### Moving to a new computer
|
|
430
468
|
|
|
431
|
-
1. On the old computer, open **Settings → Your data** and click **
|
|
432
|
-
|
|
469
|
+
1. On the old computer, open **Settings → Your data** and click **Export backup
|
|
470
|
+
file…**. You get one file, `Six Degrees backup <date>.sixdegrees`, with your network,
|
|
433
471
|
your settings, the scanner's progress, skip lists and LinkedIn budget, and the profile
|
|
434
472
|
photos of the people in it (untick them to leave them out; they come back as you scan
|
|
435
473
|
again).
|
|
436
474
|
2. Move that file to the new computer yourself (a USB stick, AirDrop). It holds other
|
|
437
475
|
people's names and photos, so don't post it or share it.
|
|
438
|
-
3. On the new computer, install Six Degrees, open **Settings → Your data**,
|
|
439
|
-
file and click **
|
|
476
|
+
3. On the new computer, install Six Degrees, open **Settings → Your data**, click
|
|
477
|
+
**Restore from a file…**, choose the file and click **Restore**. It's checked first, and nothing changes if it isn't a whole
|
|
440
478
|
and undamaged Six Degrees copy. If that computer already has a network, you're asked to
|
|
441
479
|
confirm that the import replaces it. The two networks are never merged. Your LinkedIn
|
|
442
480
|
search budget is the one thing that is: it belongs to your LinkedIn account, not to a
|
|
@@ -446,42 +484,27 @@ Finder*), what each part takes up, and the backups in it.
|
|
|
446
484
|
**Restart now**; with `npx six-degrees`, press Ctrl-C and start it again. If another
|
|
447
485
|
copy of Six Degrees has the same folder open (one started from the Terminal, say), the
|
|
448
486
|
import waits, and Settings says so. What was there before is kept in `backups/`
|
|
449
|
-
(`before-import-…`),
|
|
450
|
-
[Undo an import](#undo-an-import).
|
|
487
|
+
(`before-import-…`), for at least 30 days: see [Undo an import](#undo-an-import).
|
|
451
488
|
5. Sign in to LinkedIn again on the new computer before you scan. Your sign-in never goes
|
|
452
|
-
into a copy. A
|
|
453
|
-
|
|
489
|
+
into a copy. A LinkedIn CSV import kept on the old computer does go into it, and opens
|
|
490
|
+
on the new one.
|
|
454
491
|
|
|
455
492
|
### Undo an import
|
|
456
493
|
|
|
457
|
-
An import keeps what it replaced in the data folder's `backups/`, named with
|
|
458
|
-
finished
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
network again: `six-degrees.sqlite`, and `six-degrees.sqlite-wal` and
|
|
472
|
-
`six-degrees.sqlite-shm` if they're there (a `-wal` left beside a different database
|
|
473
|
-
is replayed into it and damages it), then `avatars/` and the three `bridge-*.json`
|
|
474
|
-
files.
|
|
475
|
-
3. Copy `backups/before-import-<time>.sqlite` into the data folder and rename the copy
|
|
476
|
-
`six-degrees.sqlite`. If `before-import-<time>.sqlite-wal` and `-shm` files are beside
|
|
477
|
-
it, copy them too, renamed to match (`six-degrees.sqlite-wal`,
|
|
478
|
-
`six-degrees.sqlite-shm`).
|
|
479
|
-
4. Copy `avatars/` and the three `bridge-*.json` files from
|
|
480
|
-
`backups/before-import-<time>-files/` back into the data folder.
|
|
481
|
-
5. Leave `linkedin-activity.json`, `linkedin-cooldown.json` and `scan-limits.json` as they
|
|
482
|
-
are. They're your LinkedIn account's budget, which the import kept (it only added the
|
|
483
|
-
other computer's searches), so they're right whichever network you use.
|
|
484
|
-
6. Open Six Degrees again.
|
|
494
|
+
An import, or a restore, keeps what it replaced in the data folder's `backups/`, named with
|
|
495
|
+
the time it finished: `before-import-<time>.sqlite`, your network as it was, and
|
|
496
|
+
`before-import-<time>-files/` beside it, with its profile photos, the scanner's notes
|
|
497
|
+
about it, and a CSV import kept with it if there was one.
|
|
498
|
+
|
|
499
|
+
To put it back, open **Settings → Your data**, open **The backups**, find **Before an import
|
|
500
|
+
or a restore** with that time, and click **Restore**. It's checked first, then finishes when
|
|
501
|
+
Six Degrees restarts (**Restart now** in the Mac app; with `npx six-degrees`, press Ctrl-C
|
|
502
|
+
and start it again), and what's there now is kept in the same way, so you can go back
|
|
503
|
+
again. Your LinkedIn search budget stays as it is: it belongs to your LinkedIn account,
|
|
504
|
+
not to a network.
|
|
505
|
+
|
|
506
|
+
The same **Restore** puts back any other backup: yesterday's, or the one from before the
|
|
507
|
+
last update.
|
|
485
508
|
|
|
486
509
|
Don't put the live folder in iCloud Drive or Dropbox to share it between computers
|
|
487
510
|
instead. A sync service that copies the database while it's open can damage it, and it
|
|
@@ -490,8 +513,7 @@ would also sync your LinkedIn sign-in.
|
|
|
490
513
|
**To remove everything:** quit the app and drag **Six Degrees** from Applications to the
|
|
491
514
|
Trash. Then in Finder choose **Go → Go to Folder…** (⇧⌘G), paste `~/.six-degrees` and
|
|
492
515
|
move that folder to the Trash. Do the same for
|
|
493
|
-
`~/Library/Application Support/Six Degrees`, the app window's own storage and cache
|
|
494
|
-
(it can include a CSV you imported).
|
|
516
|
+
`~/Library/Application Support/Six Degrees`, the app window's own storage and cache.
|
|
495
517
|
|
|
496
518
|
> [!WARNING]
|
|
497
519
|
> `chrome-profile/` holds a **real, signed-in LinkedIn session**. It's the one thing here
|
|
@@ -505,7 +527,7 @@ Nothing to configure. Two optional environment variables exist:
|
|
|
505
527
|
| Variable | Purpose |
|
|
506
528
|
|---|---|
|
|
507
529
|
| `SIX_DEGREES_HOME` | Where your data lives. Defaults to `~/.six-degrees`. It's read at launch, so it applies to `npx six-degrees` and source runs (npx also takes `--data-dir`; see `npx six-degrees --help`), not when the Mac app is opened from the Dock or Finder. A relative folder is taken from the folder you run the command in. |
|
|
508
|
-
| `ADMIN_TOKEN` | Not needed on your own computer. The app listens only on 127.0.0.1 and isn't built to be exposed: don't put it behind a tunnel or bind it to another address ([SECURITY.md](SECURITY.md)). If it's ever bound elsewhere, the
|
|
530
|
+
| `ADMIN_TOKEN` | Not needed on your own computer. The app listens only on 127.0.0.1 and isn't built to be exposed: don't put it behind a tunnel or bind it to another address ([SECURITY.md](SECURITY.md)). If it's ever bound elsewhere, the eleven routes that delete, replace or hand over your data, run the scanner, open the data folder or update a copy run from source refuse every caller without this token, including the app's own buttons. Everything else, including reading your whole network, stays open. |
|
|
509
531
|
|
|
510
532
|
## Docs
|
|
511
533
|
|