six-degrees 0.2.1 → 0.3.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 +10 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +39 -11
- package/.next/standalone/.next/required-server-files.json +4 -1
- package/.next/standalone/.next/routes-manifest.json +60 -0
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- 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.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 +10 -10
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +10 -10
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +9 -9
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/admin-delete/route.js +3 -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 +3 -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 +3 -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 +3 -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/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js +9 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/company-scores/route.js +3 -2
- 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 +3 -2
- package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/export/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/export/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/export/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/import/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/import/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/import/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/import/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/import/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/import/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/restart/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/restart/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/restart/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/restart/route.js +8 -0
- package/.next/standalone/.next/server/app/api/data/restart/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/restart/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/reveal/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/data/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/data/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/data/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/data/route.js +7 -0
- package/.next/standalone/.next/server/app/api/data/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/data/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js +3 -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 +3 -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 +3 -2
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js +3 -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 +3 -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 +3 -2
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/settings/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/settings/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/settings/route.js +9 -0
- package/.next/standalone/.next/server/app/api/settings/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js +8 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route/build-manifest.json +12 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js +8 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.map +5 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/api/setup-profile/route.js +3 -2
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js +3 -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 +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 +3 -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 +3 -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 +2 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js +2 -1
- package/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json +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 +12 -12
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +12 -12
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +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 +12 -12
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +11 -11
- 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.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 +12 -12
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +11 -11
- 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 +12 -12
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +11 -11
- 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 +12 -12
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/settings/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/settings/page/build-manifest.json +20 -0
- package/.next/standalone/.next/server/app/settings/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/settings/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/settings/page.js +13 -0
- package/.next/standalone/.next/server/app/settings/page.js.map +5 -0
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/settings.html +1 -0
- package/.next/standalone/.next/server/app/settings.meta +26 -0
- package/.next/standalone/.next/server/app/settings.rsc +24 -0
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +24 -0
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +28 -0
- 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 +12 -12
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app-paths-manifest.json +10 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0i5hdu4._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljcioj._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0uag-k5._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0um1uey._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1t3rugi._.js +3 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +3 -0
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +3 -0
- package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +21 -3
- package/.next/standalone/.next/server/chunks/_1fn30_l._.js +3 -0
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +2 -1
- package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1mxn_lb._.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_company-scores_legacy_route_actions_1ncspu_.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_export_route_actions_1lkimty.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_import_route_actions_1eji0kd.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_restart_route_actions_00_-u6o.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_reveal_route_actions_0-moqtn.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_data_route_actions_0j0w5ep.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_route_actions_1bpm9ac.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_sector-preview_route_actions_0w79454.js +3 -0
- package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_settings_sector-suggestions_route_actions_1eoqugp.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +155 -0
- package/.next/standalone/.next/server/chunks/{lib_rpc_0mc73lk.js → lib_rpc_00tx2sm.js} +1 -1
- package/.next/standalone/.next/server/chunks/lib_rpc_02-qa4d.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_02ndsg2.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_08q5vp6.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0_8i3ft.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +5 -2
- package/.next/standalone/.next/server/chunks/lib_rpc_0huvw-3.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0ip2vdh.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0jzisgh.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_0yi9xvd.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1jyhd0o.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1kn59-i.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1q2jkza.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1vpm1sk.js +3 -0
- package/.next/standalone/.next/server/chunks/lib_rpc_1x6p_31.js +3 -0
- package/.next/standalone/.next/server/chunks/node_modules_next_1zc5q0a._.js +158 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0mocm6d._.js → [root-of-the-server]__0an6blh._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1m0255u._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0bipr5s._.js → [root-of-the-server]__1z1j3ek._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_07u8byv._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_08r_mlf._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{_0ggabjc._.js → _0942v8n._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1djpk8t._.js → _0hl_t7r._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_0tb83dw._.js +132 -0
- package/.next/standalone/.next/server/chunks/ssr/_1-87bs1._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_17gui6a._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_settings_page_actions_11x4dq5.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +4 -4
- 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 +5 -5
- package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/lib_0i8v-s3._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1f8t_rp._.js +23 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1nkgb45._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_01xbj_9._.js → node_modules_1wax83z._.js} +3 -3
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_00nap8h._.js → node_modules_next_dist_1bunoni._.js} +2 -2
- package/.next/standalone/.next/server/edge/chunks/[root-of-the-server]__0pco7a6._.js +2 -2
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +15 -7
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +4 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/prefetch-hints.json +14 -0
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/06x3jiiz96m5t.js +1 -0
- package/.next/standalone/.next/static/chunks/{34at5d2ifl62i.js → 0ngx9s6-zgshe.js} +5 -5
- package/.next/standalone/.next/static/chunks/0q-_khndfxubv.js +2 -0
- package/.next/standalone/.next/static/chunks/1c79veqedvubt.js +1 -0
- package/.next/standalone/.next/static/chunks/1chp3nx45meg5.js +44 -0
- package/.next/standalone/.next/static/chunks/1irqj0lf-fu3d.js +1 -0
- package/.next/standalone/.next/static/chunks/1uadqylrod5_v.js +1 -0
- package/.next/standalone/.next/static/chunks/23u0zclgwpc4d.js +1 -0
- package/.next/standalone/.next/static/chunks/289ktj97di6zg.js +1 -0
- package/.next/standalone/.next/static/chunks/2b3lmf8e6uj8m.js +16 -0
- package/.next/standalone/.next/static/chunks/2jz311xl1pp_8.js +1 -0
- package/.next/standalone/.next/static/chunks/3npq5yd7c4dmn.js +2 -0
- package/.next/standalone/.next/static/qqqcxvzBUizkECrT4swyK/_clientMiddlewareManifest.js +14 -0
- package/.next/standalone/CHANGELOG.md +298 -0
- package/.next/standalone/CONTRIBUTING.md +5 -2
- package/.next/standalone/README.md +138 -30
- package/.next/standalone/SECURITY.md +117 -10
- package/.next/standalone/app/api/company-scores/legacy/route.js +32 -0
- package/.next/standalone/app/api/company-scores/route.js +20 -11
- package/.next/standalone/app/api/data/export/route.js +49 -0
- package/.next/standalone/app/api/data/import/route.js +83 -0
- package/.next/standalone/app/api/data/restart/route.js +37 -0
- package/.next/standalone/app/api/data/reveal/route.js +14 -0
- package/.next/standalone/app/api/data/route.js +39 -0
- package/.next/standalone/app/api/ingest/route.js +15 -47
- package/.next/standalone/app/api/scraper/route.js +264 -125
- package/.next/standalone/app/api/settings/route.js +58 -0
- package/.next/standalone/app/api/settings/sector-preview/route.js +38 -0
- package/.next/standalone/app/api/settings/sector-suggestions/route.js +20 -0
- package/.next/standalone/app/api/update/route.js +188 -23
- package/.next/standalone/app/avatars/[file]/route.js +4 -2
- package/.next/standalone/app/components/CompanyScores.js +28 -7
- package/.next/standalone/app/components/EmptyState.js +8 -0
- package/.next/standalone/app/components/ForceGraph.js +39 -35
- package/.next/standalone/app/components/LegacyScoresCard.js +129 -0
- package/.next/standalone/app/components/Sidebar.js +11 -10
- package/.next/standalone/app/components/UpdatePanel.js +306 -119
- package/.next/standalone/app/components/UserProvider.js +4 -3
- package/.next/standalone/app/components/settings/DataSection.js +437 -0
- package/.next/standalone/app/components/settings/SectorSection.js +445 -0
- package/.next/standalone/app/components/ui.js +62 -0
- package/.next/standalone/app/launch/page.js +30 -20
- package/.next/standalone/app/page.js +13 -0
- package/.next/standalone/app/paths/page.js +12 -4
- package/.next/standalone/app/profile/page.js +41 -8
- package/.next/standalone/app/queue/page.js +8 -2
- package/.next/standalone/app/settings/page.js +96 -0
- package/.next/standalone/app/setup/page.js +32 -16
- package/.next/standalone/bin/args.mjs +44 -0
- package/.next/standalone/bin/six-degrees.mjs +9 -15
- package/.next/standalone/lib/companies.js +44 -119
- package/.next/standalone/lib/csv.js +8 -0
- package/.next/standalone/lib/data-export.js +170 -0
- package/.next/standalone/lib/data-folder.js +238 -0
- package/.next/standalone/lib/data-import.js +878 -0
- package/.next/standalone/lib/db-client.js +48 -3
- package/.next/standalone/lib/durable.js +73 -0
- package/.next/standalone/lib/gate.js +90 -1
- package/.next/standalone/lib/ingest.js +40 -0
- package/.next/standalone/lib/legacy-offer.js +185 -0
- package/.next/standalone/lib/legacy-scores.js +77 -0
- package/.next/standalone/lib/linkedin-limits.js +124 -1
- package/.next/standalone/lib/rpc.js +121 -13
- package/.next/standalone/lib/sample-stats.js +16 -0
- package/.next/standalone/lib/scan-progress.js +13 -0
- package/.next/standalone/lib/scan-state.js +53 -0
- package/.next/standalone/lib/scanner-python.js +685 -0
- package/.next/standalone/lib/scanner-setup.js +104 -0
- package/.next/standalone/lib/scoring.js +747 -138
- package/.next/standalone/lib/scraper-client.js +9 -5
- package/.next/standalone/lib/sector-directory.js +1532 -0
- package/.next/standalone/lib/sector-focus.js +163 -0
- package/.next/standalone/lib/sector-labels.js +81 -0
- package/.next/standalone/lib/settings-effects.js +59 -0
- package/.next/standalone/lib/settings.js +83 -0
- package/.next/standalone/lib/updater-job.js +838 -0
- package/.next/standalone/lib/updater.js +494 -0
- package/.next/standalone/middleware.js +25 -28
- package/.next/standalone/next.config.mjs +19 -3
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +1 -2
- package/.next/standalone/scripts/apply-update.sh +482 -0
- package/.next/standalone/scripts/build-app.mjs +251 -9
- package/.next/standalone/scripts/requirements.txt +106 -4
- package/.next/standalone/scripts/test-release-server.mjs +143 -0
- package/.next/standalone/server.js +1 -1
- package/.next/static/chunks/06x3jiiz96m5t.js +1 -0
- package/.next/static/chunks/{34at5d2ifl62i.js → 0ngx9s6-zgshe.js} +5 -5
- package/.next/static/chunks/0q-_khndfxubv.js +2 -0
- package/.next/static/chunks/1c79veqedvubt.js +1 -0
- package/.next/static/chunks/1chp3nx45meg5.js +44 -0
- package/.next/static/chunks/1irqj0lf-fu3d.js +1 -0
- package/.next/static/chunks/1uadqylrod5_v.js +1 -0
- package/.next/static/chunks/23u0zclgwpc4d.js +1 -0
- package/.next/static/chunks/289ktj97di6zg.js +1 -0
- package/.next/static/chunks/2b3lmf8e6uj8m.js +16 -0
- package/.next/static/chunks/2jz311xl1pp_8.js +1 -0
- package/.next/static/chunks/3npq5yd7c4dmn.js +2 -0
- package/.next/static/qqqcxvzBUizkECrT4swyK/_clientMiddlewareManifest.js +14 -0
- package/CHANGELOG.md +298 -0
- package/README.md +138 -30
- package/SECURITY.md +117 -10
- package/bin/args.mjs +44 -0
- package/bin/six-degrees.mjs +9 -15
- package/lib/companies.js +44 -119
- package/lib/csv.js +8 -0
- package/lib/data-export.js +170 -0
- package/lib/data-folder.js +238 -0
- package/lib/data-import.js +878 -0
- package/lib/db-client.js +48 -3
- package/lib/durable.js +73 -0
- package/lib/gate.js +90 -1
- package/lib/ingest.js +40 -0
- package/lib/legacy-offer.js +185 -0
- package/lib/legacy-scores.js +77 -0
- package/lib/linkedin-limits.js +124 -1
- package/lib/rpc.js +121 -13
- package/lib/sample-stats.js +16 -0
- package/lib/scan-progress.js +13 -0
- package/lib/scan-state.js +53 -0
- package/lib/scanner-python.js +685 -0
- package/lib/scanner-setup.js +104 -0
- package/lib/scoring.js +747 -138
- package/lib/scraper-client.js +9 -5
- package/lib/sector-directory.js +1532 -0
- package/lib/sector-focus.js +163 -0
- package/lib/sector-labels.js +81 -0
- package/lib/settings-effects.js +59 -0
- package/lib/settings.js +83 -0
- package/lib/updater-job.js +838 -0
- package/lib/updater.js +494 -0
- package/package.json +1 -2
- package/scripts/requirements.txt +106 -4
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0jrmmj-._.js +0 -150
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qx548g._.js +0 -151
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1an3leo._.js +0 -150
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1m8zedk._.js +0 -155
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1zor0ys._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0_rp-01._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0hzdk79._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0ow7u5r._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0t0zc2d._.js +0 -3
- package/.next/standalone/.next/server/chunks/_0wa631d._.js +0 -3
- package/.next/standalone/.next/server/chunks/_13ccnao._.js +0 -3
- package/.next/standalone/.next/server/chunks/_13es063._.js +0 -3
- package/.next/standalone/.next/server/chunks/_142872j._.js +0 -3
- package/.next/standalone/.next/server/chunks/_18wsb_a._.js +0 -8
- package/.next/standalone/.next/server/chunks/_1e-4h5h._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1gvvd7n._.js +0 -158
- package/.next/standalone/.next/server/chunks/_1moda66._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1p6ghzv._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1xmmi_v._.js +0 -3
- package/.next/standalone/.next/server/chunks/_1z-yrlf._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0bf3x4q._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +0 -4
- package/.next/standalone/.next/static/ZGTiDrZ5NHGETgGdlhssu/_clientMiddlewareManifest.js +0 -6
- package/.next/standalone/.next/static/chunks/0jk64vo17avsb.js +0 -1
- package/.next/standalone/.next/static/chunks/0s65dsrthylo6.js +0 -2
- package/.next/standalone/.next/static/chunks/0uyfdhi8dek85.js +0 -16
- package/.next/standalone/.next/static/chunks/220-ne82aus0c.js +0 -44
- package/.next/standalone/.next/static/chunks/229haorf0f19b.js +0 -2
- package/.next/standalone/.next/static/chunks/2g54uafnwuakc.js +0 -1
- package/.next/standalone/.next/static/chunks/2spwqs6b6dx13.js +0 -1
- package/.next/standalone/.next/static/chunks/38dlepuubiox0.js +0 -1
- package/.next/standalone/scripts/score-connections.sql +0 -80
- package/.next/standalone/scripts/score_new_connections.sql +0 -77
- package/.next/standalone/site/app.js +0 -84
- package/.next/standalone/site/index.html +0 -221
- package/.next/standalone/site/style.css +0 -155
- package/.next/standalone/site/video/install-mac-poster.jpg +0 -0
- package/.next/standalone/site/video/install-mac.mp4 +0 -0
- package/.next/standalone/site/video/linux-poster.jpg +0 -0
- package/.next/standalone/site/video/linux.mp4 +0 -0
- package/.next/standalone/site/video/scan-poster.jpg +0 -0
- package/.next/standalone/site/video/scan.mp4 +0 -0
- package/.next/static/ZGTiDrZ5NHGETgGdlhssu/_clientMiddlewareManifest.js +0 -6
- package/.next/static/chunks/0jk64vo17avsb.js +0 -1
- package/.next/static/chunks/0s65dsrthylo6.js +0 -2
- package/.next/static/chunks/0uyfdhi8dek85.js +0 -16
- package/.next/static/chunks/220-ne82aus0c.js +0 -44
- package/.next/static/chunks/229haorf0f19b.js +0 -2
- package/.next/static/chunks/2g54uafnwuakc.js +0 -1
- package/.next/static/chunks/2spwqs6b6dx13.js +0 -1
- package/.next/static/chunks/38dlepuubiox0.js +0 -1
- package/scripts/score_new_connections.sql +0 -77
- /package/.next/standalone/.next/static/{ZGTiDrZ5NHGETgGdlhssu → qqqcxvzBUizkECrT4swyK}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{ZGTiDrZ5NHGETgGdlhssu → qqqcxvzBUizkECrT4swyK}/_ssgManifest.js +0 -0
- /package/.next/static/{ZGTiDrZ5NHGETgGdlhssu → qqqcxvzBUizkECrT4swyK}/_buildManifest.js +0 -0
- /package/.next/static/{ZGTiDrZ5NHGETgGdlhssu → qqqcxvzBUizkECrT4swyK}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,37711,e=>{"use strict";var t=e.i(43476),r=e.i(71645);e.s(["default",0,function(){let[e,n]=(0,r.useState)(null);return((0,r.useEffect)(()=>{let e=!0;return fetch("/api/update").then(e=>e.json()).then(t=>{e&&t?.restartNeeded&&n(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(0,0,0,0.16)",padding:"1px 6px",borderRadius:4},children:"Ctrl-C"})," in the terminal, then ",(0,t.jsx)("code",{style:{background:"rgba(0,0,0,0.16)",padding:"1px 6px",borderRadius:4},children:"npm run dev"}),"."]}),(0,t.jsx)("button",{onClick:()=>n(null),style:{border:"none",background:"rgba(0,0,0,0.18)",color:"#1a1200",borderRadius:6,padding:"3px 10px",fontWeight:700,cursor:"pointer"},children:"Dismiss"})]}):null}])},15812,64745,e=>{"use strict";var t=e.i(43476),r=e.i(71645),n=e.i(65084),l=e.i(47167),a=e.i(7837);let u="true"===l.default.env.NEXT_PUBLIC_DEMO_MODE,o={id:"synthetic-demo-user",name:"You",headline:"Sample network"},s=null;async function i(){if(s)return s;let e=await fetch("/demo-data.json",{cache:"no-cache"});if(!e.ok)throw Error("demo-data.json not found — run: node scripts/gen-synthetic.mjs");let t=await e.json();return s={degree1:t.degree1||[],degree2:t.degree2||[]}}async function d(){let e=await i();return(0,a.saveSessionNetwork)({degree1:e.degree1,degree2:e.degree2,source:"sample"}),{degree1:e.degree1.length,degree2:e.degree2.length}}e.s(["DEMO_USER",0,o,"IS_DEMO",0,u,"loadDemoNetwork",0,i,"loadSampleIntoSession",0,d],64745);let c=(0,r.createContext)({userId:null,userName:null,userProfile:null,ready:!1});e.s(["default",0,function({children:e}){let[l,s]=(0,r.useState)(null),[i,d]=(0,r.useState)(null),[f,p]=(0,r.useState)(null),[h,m]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{if(u){s(o.id),d(o.name),p({name:o.name,headline:o.headline,role:"",company:"",industry:"",sectors:[],goals:[],linkedin_url:""}),m(!0);return}if((0,a.hasCsvNetwork)()){s(a.CSV_USER.id),d(a.CSV_USER.name),p({name:a.CSV_USER.name,headline:"Imported from your LinkedIn CSV",role:"",company:"",industry:"",sectors:[],goals:[],linkedin_url:""}),m(!0);return}fetch("/api/users?me=1").then(e=>e.json()).then(e=>{let t=e.user;if(!t)throw Error("no profile");(0,n.setUser)(t.id,t.name),s(t.id),d(t.name),p({name:t.name,headline:t.headline||"",role:t.role||"",company:t.company||"",industry:t.industry||"",sectors:t.sectors||[],goals:t.goals||[],linkedin_url:t.linkedin_url||""})}).catch(()=>{(0,n.hasUser)()&&(s((0,n.getUserId)()),d((0,n.getUserName)()))}).finally(()=>m(!0))},[]),(0,t.jsx)(c.Provider,{value:{userId:l,userName:i,userProfile:f,ready:h,login:(e,t)=>{(0,n.setUser)(e,t),s(e),d(t),fetch(`/api/users?id=${e}`).then(e=>e.json()).then(e=>{e.user&&p({name:e.user.name,headline:e.user.headline||"",role:e.user.role||"",company:e.user.company||"",industry:e.user.industry||"",sectors:e.user.sectors||[],goals:e.user.goals||[],linkedin_url:e.user.linkedin_url||""})}).catch(()=>{})}},children:e})},"useUser",0,function(){return(0,r.useContext)(c)}],15812)},28298,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useRouterBFCache",{enumerable:!0,get:function(){return l}});let n=e.r(71645);function l(e,t,r){let[l,a]=(0,n.useState)(()=>({tree:e,cacheNode:t,stateKey:r,next:null}));if(l.tree===e)return l;let u={tree:e,cacheNode:t,stateKey:r,next:null},o=1,s=l,i=u;for(;null!==s&&o<1;){if(s.stateKey===r){i.next=s.next;break}{o++;let e={tree:s.tree,cacheNode:s.cacheNode,stateKey:s.stateKey,next:null};i.next=e,i=e}s=s.next}return a(u),u}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},47257,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ClientPageRoot",{enumerable:!0,get:function(){return i}});let n=e.r(43476),l=e.r(8372),a=e.r(71645),u=e.r(33906),o=e.r(61994),s=e.r(15783);function i({Component:e,serverProvidedParams:t}){let r,d;if(null!==t)r=t.searchParams,d=t.params;else{let e=(0,a.use)(l.LayoutRouterContext);d=null!==e?e.parentParams:{},r=(0,u.urlSearchParamsToParsedUrlQuery)((0,a.use)(o.SearchParamsContext))}let c=(0,s.createClientSearchParams)(r),f=(0,s.createClientParams)(d);return(0,n.jsx)(e,{params:f,searchParams:c})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},92825,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ClientSegmentRoot",{enumerable:!0,get:function(){return o}});let n=e.r(43476),l=e.r(8372),a=e.r(71645),u=e.r(15783);function o({Component:e,slots:t,serverProvidedParams:r}){let s;if(null!==r)s=r.params;else{let e=(0,a.use)(l.LayoutRouterContext);s=null!==e?e.parentParams:{}}let i=(0,u.createClientParams)(s);return(0,n.jsx)(e,{...t,params:i})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},68017,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"HTTPAccessFallbackBoundary",{enumerable:!0,get:function(){return d}});let n=e.r(90809),l=e.r(43476),a=n._(e.r(71645)),u=e.r(90373),o=e.r(54394),s=e.r(8372);class i extends a.default.Component{constructor(e){super(e),this.state={triggeredStatus:void 0,previousPathname:e.pathname}}componentDidCatch(){}static getDerivedStateFromError(e){if((0,o.isHTTPAccessFallbackError)(e))return{triggeredStatus:(0,o.getAccessFallbackHTTPStatus)(e)};throw e}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.triggeredStatus?{triggeredStatus:void 0,previousPathname:e.pathname}:{triggeredStatus:t.triggeredStatus,previousPathname:e.pathname}}render(){let{notFound:e,forbidden:t,unauthorized:r,children:n}=this.props,{triggeredStatus:a}=this.state,u={[o.HTTPAccessErrorStatus.NOT_FOUND]:e,[o.HTTPAccessErrorStatus.FORBIDDEN]:t,[o.HTTPAccessErrorStatus.UNAUTHORIZED]:r};if(a){let s=a===o.HTTPAccessErrorStatus.NOT_FOUND&&e,i=a===o.HTTPAccessErrorStatus.FORBIDDEN&&t,d=a===o.HTTPAccessErrorStatus.UNAUTHORIZED&&r;return s||i||d?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("meta",{name:"robots",content:"noindex"}),!1,u[a]]}):n}return n}}function d({notFound:e,forbidden:t,unauthorized:r,children:n}){let o=(0,u.useUntrackedPathname)(),c=(0,a.useContext)(s.MissingSlotContext);return e||t||r?(0,l.jsx)(i,{pathname:o,notFound:e,forbidden:t,unauthorized:r,missingSlots:c,children:n}):(0,l.jsx)(l.Fragment,{children:n})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},22976,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={InstantValidationBoundaryContext:function(){return a},PlaceValidationBoundaryBelowThisLevel:function(){return u},RenderValidationBoundaryAtThisLevel:function(){return o},SlotMarker:function(){return s}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let a=null,u=null,o=null,s=null;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},77694,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={InstantValidationBoundaryContext:function(){return a.InstantValidationBoundaryContext},PlaceValidationBoundaryBelowThisLevel:function(){return a.PlaceValidationBoundaryBelowThisLevel},RenderValidationBoundaryAtThisLevel:function(){return a.RenderValidationBoundaryAtThisLevel},SlotMarker:function(){return a.SlotMarker}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let a=e.r(22976);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},39756,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0});var n={LoadingBoundaryProvider:function(){return C},default:function(){return R}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let a=e.r(55682),u=e.r(90809),o=e.r(43476),s=u._(e.r(71645)),i=a._(e.r(74080)),d=e.r(8372),c=e.r(1244),f=e.r(72383),p=e.r(91915),h=e.r(58442),m=e.r(68017);e.r(77694);let y=e.r(70725),g=e.r(28298);e.r(74180);let b=e.r(61994),_=e.r(33906),v=e.r(95871);i.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function j(e,t,r){let n=e.getClientRects();if(0===n.length)return 0;let l=1/0;for(let e=0;e<n.length;e++){let t=n[e];t.top<l&&(l=t.top)}return l>=r()&&l<=t?1:2}s.default.Component;let P=function(e){let t=s.default.useRef(null);return(0,s.useLayoutEffect)(()=>{let{focusAndScrollRef:r,cacheNode:n}=e,l=r.forceScroll?r.scrollRef:n.scrollRef;if(null===l||!l.current)return;let a=null,u=r.hashFragment;if(u){var o;if(null===(a="top"===(o=u)?document.body:document.getElementById(o)??document.getElementsByName(o)[0]??null)){l.current=!1,r.onlyHashChange=!1,r.hashFragment=null;return}}else a=t.current;if(null===a)return;let s=!1;(0,p.disableSmoothScrollDuringRouteTransition)(()=>{let e=document.documentElement,t=null,r=null,n=null,o=()=>{var r,l;let a,u;return null===n&&(r=e,l=t,n=!Number.isFinite(u=Number.parseFloat(a=getComputedStyle(r).scrollPaddingTop))||u<0?0:a.endsWith("px")?u:a.endsWith("%")?u/100*l:0),n};(u||(t=e.clientHeight,0!==(r=j(a,t,o))))&&((s=!0,l.current=!1,u)?a.scrollIntoView():1!==r&&(e.scrollTop=0,2===j(a,t,o)&&a.scrollIntoView()))},{dontForceLayout:!0,onlyHashChange:r.onlyHashChange}),s&&(r.onlyHashChange=!1,r.hashFragment=null)},void 0),(0,o.jsx)(s.Fragment,{ref:t,children:e.children})};function x({children:e,cacheNode:t}){let r=(0,s.useContext)(d.GlobalLayoutRouterContext);if(!r)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});return(0,o.jsx)(P,{focusAndScrollRef:r.focusAndScrollRef,cacheNode:t,children:e})}function O({tree:e,segmentPath:t,debugNameContext:r,cacheNode:n,params:l,url:a,isActive:u}){let i,f=(0,s.useContext)(d.GlobalLayoutRouterContext);if((0,s.useContext)(b.NavigationPromisesContext),!f)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});let p=null!==n?n:(0,s.use)(c.unresolvedThenable),h=null!==p.prefetchRsc?p.prefetchRsc:p.rsc,m=(0,s.useDeferredValue)(p.rsc,h);if((0,v.isDeferredRsc)(m)){let e=(0,s.use)(m);null===e&&(0,s.use)(c.unresolvedThenable),i=e}else null===m&&(0,s.use)(c.unresolvedThenable),i=m;let y=i;return(0,o.jsx)(d.LayoutRouterContext.Provider,{value:{parentTree:e,parentCacheNode:p,parentSegmentPath:t,parentParams:l,parentLoadingData:null,debugNameContext:r,url:a,isActive:u},children:y})}function C({loading:e,children:t}){let r=(0,s.use)(d.LayoutRouterContext);return null===r?t:(0,o.jsx)(d.LayoutRouterContext.Provider,{value:{parentTree:r.parentTree,parentCacheNode:r.parentCacheNode,parentSegmentPath:r.parentSegmentPath,parentParams:r.parentParams,parentLoadingData:e,debugNameContext:r.debugNameContext,url:r.url,isActive:r.isActive},children:t})}function S({name:e,loading:t,children:r}){if(null!==t){let n=t[0],l=t[1],a=t[2];return(0,o.jsx)(s.Suspense,{name:e,fallback:(0,o.jsxs)(o.Fragment,{children:[l,a,n]}),children:r})}return(0,o.jsx)(o.Fragment,{children:r})}function R({parallelRouterKey:e,error:t,errorStyles:r,errorScripts:n,templateStyles:l,templateScripts:a,template:u,notFound:i,forbidden:p,unauthorized:b,segmentViewBoundaries:v}){let j=(0,s.useContext)(d.LayoutRouterContext);if(!j)throw Object.defineProperty(Error("invariant expected layout router to be mounted"),"__NEXT_ERROR_CODE",{value:"E56",enumerable:!1,configurable:!0});let{parentTree:P,parentCacheNode:C,parentSegmentPath:T,parentParams:M,parentLoadingData:E,url:N,isActive:F,debugNameContext:k}=j,B=P[0],A=null===T?[e]:T.concat([B,e]),D=P[1][e],w=C.slots;(void 0===D||null===w)&&(0,s.use)(c.unresolvedThenable);let L=D[0],U=w[e]??null,I=(0,y.createRouterCacheKey)(L,!0),H=(0,g.useRouterBFCache)(D,U,I),V=[];do{let e=H.tree,s=H.cacheNode,c=H.stateKey,y=e[0],g=M;if(Array.isArray(y)){let e=y[0],t=y[1],r=y[2],n=(0,_.getParamValueFromCacheKey)(t,r);null!==n&&(g={...M,[e]:n})}let v=function(e){if("/"===e)return"/";if("string"==typeof e)if("(__SLOT__)"===e)return;else return e+"/";return e[1]+"/"}(y),j=v??k,P=void 0===v?void 0:k,C=(0,o.jsxs)(x,{cacheNode:s,children:[(0,o.jsx)(f.ErrorBoundary,{errorComponent:t,errorStyles:r,errorScripts:n,children:(0,o.jsx)(S,{name:P,loading:E,children:(0,o.jsx)(m.HTTPAccessFallbackBoundary,{notFound:i,forbidden:p,unauthorized:b,children:(0,o.jsxs)(h.RedirectBoundary,{children:[(0,o.jsx)(O,{url:N,tree:e,params:g,cacheNode:s,segmentPath:A,debugNameContext:j,isActive:F&&c===I}),null]})})})}),null]}),R=(0,o.jsxs)(d.TemplateContext.Provider,{value:C,children:[l,a,u]},c);V.push(R),H=H.next}while(null!==H)return V}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},37457,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return o}});let n=e.r(90809),l=e.r(43476),a=n._(e.r(71645)),u=e.r(8372);function o(){let e=(0,a.useContext)(u.TemplateContext);return(0,l.jsx)(l.Fragment,{children:e})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},6831,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderParamsFromClient",{enumerable:!0,get:function(){return l}});let n=new WeakMap;function l(e){let t=n.get(e);if(t)return t;let r=Promise.resolve(e);return n.set(e,r),r}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},97689,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(6831).createRenderParamsFromClient;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},93504,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return l}});let n=new WeakMap;function l(e){let t=n.get(e);if(t)return t;let r=Promise.resolve(e);return n.set(e,r),r}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},66996,(e,t,r)=>{"use strict";e.i(47167),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(93504).createRenderSearchParamsFromClient;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},15783,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={createClientParams:function(){return a.createRenderParamsFromClient},createClientSearchParams:function(){return u.createRenderSearchParamsFromClient}};for(var l in n)Object.defineProperty(r,l,{enumerable:!0,get:n[l]});let a=e.r(97689),u=e.r(66996);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},27201,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"IconMark",{enumerable:!0,get:function(){return l}});let n=e.r(43476),l=()=>"u">typeof window?null:(0,n.jsx)("meta",{name:"«nxt-icon»"})},91915,(e,t,r)=>{"use strict";function n(e,t={}){if(t.onlyHashChange)return void e();let r=document.documentElement;if("smooth"!==r.dataset.scrollBehavior)return void e();let l=r.style.scrollBehavior;r.style.scrollBehavior="auto",t.dontForceLayout||r.getClientRects(),e(),r.style.scrollBehavior=l}e.i(47167),Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"disableSmoothScrollDuringRouteTransition",{enumerable:!0,get:function(){return n}})}]);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,85957,e=>{"use strict";var t=e.i(43476),n=e.i(71645),o=e.i(18566),r=e.i(40996),i=e.i(19821),l=e.i(64745),s=e.i(7837),a=e.i(2776);e.i(47716);var d=e.i(36534),c=e.i(77899),p=e.i(17983),h=e.i(43079),u=e.i(23731),f=e.i(22016);let g=e=>`${e.name} ${e.was} → ${e.estimated?"estimated":e.now}`,y=e=>({padding:"6px 12px",borderRadius:7,cursor:"pointer",fontSize:12,fontWeight:700,border:e?"none":"1px solid rgba(255,255,255,0.15)",background:e?"linear-gradient(135deg, #00ff88, #3498DB)":"transparent",color:e?"#000":"#cfd8d8"});function x({onAnswered:e}){var o;let r,i,[l,a]=(0,n.useState)(null),[d,c]=(0,n.useState)(!1),[p,h]=(0,n.useState)(()=>new Set),[u,f]=(0,n.useState)(!1),[m,b]=(0,n.useState)(null);if((0,n.useEffect)(()=>{if((0,s.csvNetworkSource)())return;let e=!1;return fetch("/api/company-scores/legacy").then(e=>e.json()).then(t=>{!e&&t.offer?.companies?.length&&(a(t.offer),h(new Set(t.offer.companies.map(e=>e.name))))}).catch(()=>{}),()=>{e=!0}},[]),!l)return null;let j=async t=>{f(!0),b(null);try{let n=await fetch("/api/company-scores/legacy",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({keep:t})}),o=await n.json();if(!n.ok&&!o.kept)throw Error(o.error||"Could not save your answer.");a(null),e?.({kept:o.kept||[],scored:o.scored||0,error:n.ok?null:o.error})}catch(e){b(e.message)}finally{f(!1)}};return(0,t.jsxs)("section",{"aria-label":"Built-in scores changed",style:{marginBottom:14,padding:14,borderRadius:10,border:"1px solid rgba(255,215,0,0.35)",background:"rgba(255,215,0,0.06)",fontSize:12.5,color:"#cfd8d8",lineHeight:1.6},children:[(0,t.jsx)("b",{style:{color:"#fff"},children:"Built-in scores changed in this version:"})," ",(r=(o=l.companies).slice(0,3).map(g).join(", "),(i=o.length-3)>0?`${r} and ${i} more`:r),"."," ","Keep any of the old ones as your own?",(0,t.jsx)("div",{style:{marginTop:4,color:"#8b9a9a"},children:"The built-in list now holds only companies most professionals would recognise, scored the same for everyone; anything else is estimated from your network. A score you keep is yours, like one you set below, and Auto hands it back."}),d&&(0,t.jsx)("ul",{style:{listStyle:"none",padding:0,margin:"10px 0 0",display:"grid",gap:4},children:l.companies.map(e=>(0,t.jsx)("li",{children:(0,t.jsxs)("label",{style:{display:"flex",gap:8,alignItems:"baseline",cursor:"pointer"},children:[(0,t.jsx)("input",{type:"checkbox",checked:p.has(e.name),disabled:u,onChange:()=>{let t;return t=e.name,h(e=>{let n=new Set(e);return n.has(t)?n.delete(t):n.add(t),n})}}),(0,t.jsxs)("span",{children:[(0,t.jsx)("b",{style:{color:"#fff"},children:e.name})," ",e.was," → ",e.estimated?`estimated (${e.now})`:e.now,(0,t.jsxs)("span",{style:{color:"#778"},children:[` \xb7 ${e.people} ${1===e.people?"person":"people"} there now`,e.names.length>1&&` \xb7 for ${e.names.join(", ")}`]})]})]})},e.name))}),(0,t.jsxs)("div",{style:{display:"flex",gap:8,marginTop:10,flexWrap:"wrap"},children:[d?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("button",{disabled:u||!p.size,onClick:()=>j([...p]),style:{...y(!0),opacity:u||!p.size?.5:1},children:["Keep ",p.size," ",1===p.size?"score":"scores"]}),(0,t.jsx)("button",{disabled:u,onClick:()=>c(!1),style:y(!1),children:"Back"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{disabled:u,onClick:()=>j(l.companies.map(e=>e.name)),style:y(!0),children:"Keep all"}),(0,t.jsx)("button",{disabled:u,onClick:()=>c(!0),style:y(!1),children:"Choose…"})]}),(0,t.jsx)("button",{disabled:u,onClick:()=>j([]),style:y(!1),children:"No thanks"})]}),m&&(0,t.jsx)("div",{role:"alert",style:{marginTop:8,color:"#e74c3c"},children:m})]})}let m="1px solid rgba(255,255,255,0.1)",b={yours:{label:"your score",color:"#00ff88"},known:{label:"known list",color:"#3498DB"},network:{label:"estimated: many of your people",color:"#FF6B35"},default:{label:"unknown company",color:"#778"}};async function j(){let e=await fetch("/api/company-scores"),t=await e.json();if(!e.ok)throw Error(t.error||"Could not load company scores");return t.companies}function k(){let[e,t]=(0,n.useState)(null),[o,r]=(0,n.useState)(null);return(0,n.useEffect)(()=>{let e=!1;return j().then(n=>{e||t(n)}).catch(t=>{e||r(t.message)}),()=>{e=!0}},[]),{companies:e,error:o,setScore:(0,n.useCallback)(async(e,n)=>{let o=await fetch("/api/company-scores",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e,score:n})}),r=await o.json();if(!o.ok)throw Error(r.error||"Could not save");return t(await j()),r},[]),reload:(0,n.useCallback)(async()=>t(await j()),[])}}function w({company:e,onSet:o,compact:r}){let[i,l]=(0,n.useState)(!1),s=async t=>{l(!0);try{await o(e.name,"auto"===t?null:Number(t))}finally{l(!1)}};return(0,t.jsxs)("select",{disabled:i,value:"yours"===e.source?String(e.score):"auto",onChange:e=>s(e.target.value),title:"Set this company's score. Auto uses the known list or an estimate.",style:{padding:r?"2px 4px":"4px 6px",borderRadius:6,border:m,background:"#11131c",color:"#dfe6e9",fontSize:12},children:[(0,t.jsxs)("option",{value:"auto",children:["Auto (","yours"===e.source?e.suggested??"est.":e.score,")"]}),[10,9,8,7,6,5,4,3,2,1].map(e=>(0,t.jsx)("option",{value:e,children:e},e))]})}function v({onRescored:e}){let{companies:o,error:r,setScore:i,reload:l}=k(),[s,a]=(0,n.useState)(""),[d,c]=(0,n.useState)("all"),[p,h]=(0,n.useState)(150),[u,g]=(0,n.useState)(null),y=e=>{g(e),setTimeout(()=>g(null),3500)},j=async(t,n)=>{let o=await i(t,n);y(`${t}: ${null==n?"back to auto":`set to ${n}`} \xb7 rescored ${o.scored} people`),e?.()},S=async({kept:t,scored:n,error:o})=>{if(!t.length)return y("Keeping the new built-in scores.");y(o||`Kept ${t.length} old ${1===t.length?"score":"scores"} as your own \xb7 rescored ${n} people`),await l().catch(()=>{}),e?.()},C=(0,n.useMemo)(()=>{if(!o)return[];let e=s.trim().toLowerCase();return o.filter(t=>(!e||t.name.toLowerCase().includes(e))&&("all"===d||t.source===d))},[o,s,d]);if(r)return(0,t.jsx)("div",{style:{padding:24,color:"#e74c3c"},children:r});if(!o)return(0,t.jsx)("div",{style:{padding:24,color:"#778"},children:"Loading companies…"});let z=e=>o.filter(t=>t.source===e).length;return(0,t.jsxs)("div",{style:{flex:1,overflow:"auto",padding:16},children:[(0,t.jsxs)("div",{style:{maxWidth:980,margin:"0 auto"},children:[(0,t.jsx)(x,{onAnswered:S}),(0,t.jsxs)("div",{style:{padding:14,borderRadius:10,border:m,background:"rgba(255,255,255,0.03)",fontSize:12.5,color:"#cfd8d8",lineHeight:1.6},children:[(0,t.jsx)("b",{style:{color:"#fff"},children:"How a power score works."})," power = ",(0,t.jsx)("b",{children:"title"})," × ",(0,t.jsx)("b",{children:"company weight"})," + bonus. The title (student 1 … founder or C-suite 10) comes from someone’s current role, with former roles at 70%. The company weight runs from 0.615 (no company found) to 1.0 (a company scored 10), so seniority counts for more at a bigger company. The bonus is at most +1.5, for investor, YC, an audience in the millions or the top award of any field, and counts half at an unknown company. A 1st-degree person whose circle is unusually strong gets up to +1 more. S ≥ 7.5 · A ≥ 5.5 · B ≥ 4 · C ≥ 2.5.",(0,t.jsxs)("div",{style:{marginTop:6,color:"#8b9a9a"},children:["So a VP at a 10 scores 9.0, a founder at an unknown company 6.7, a director at an unknown company 5.0, and an intern at a 10 scores 2.0. Set a company’s score below and everyone there is rescored. Companies in the sectors you pick in ",(0,t.jsx)(f.default,{href:"/settings#sector",style:{color:"#3498DB"},children:"Settings"})," get +1 or +2; a score you set is never changed."]})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",flexWrap:"wrap",margin:"14px 0 10px"},children:[(0,t.jsx)("input",{value:s,onChange:e=>a(e.target.value),placeholder:"Find a company",style:{padding:"6px 10px",borderRadius:7,border:m,background:"rgba(255,255,255,0.05)",color:"#fff",fontSize:13,minWidth:180}}),[["all",`All ${o.length}`],["known",`Known list ${z("known")}`],["yours",`Yours ${z("yours")}`],["network",`Estimated ${z("network")}`],["default",`Unknown ${z("default")}`]].map(([e,n])=>(0,t.jsx)("button",{onClick:()=>c(e),style:{padding:"5px 10px",borderRadius:7,border:m,cursor:"pointer",fontSize:11.5,fontWeight:600,background:d===e?"rgba(52,152,219,0.25)":"transparent",color:d===e?"#cfe6f7":"#8b9a9a"},children:n},e))]}),(0,t.jsxs)("div",{style:{borderRadius:10,border:m,overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 70px 70px 70px 60px 180px 110px",gap:8,padding:"8px 12px",fontSize:10.5,letterSpacing:.6,color:"#8b9a9a",background:"rgba(255,255,255,0.04)"},children:[(0,t.jsx)("span",{children:"COMPANY"}),(0,t.jsx)("span",{style:{textAlign:"right"},children:"PEOPLE"}),(0,t.jsx)("span",{style:{textAlign:"right"},children:"YOU KNOW"}),(0,t.jsx)("span",{style:{textAlign:"right"},children:"DIRECTOR+"}),(0,t.jsx)("span",{style:{textAlign:"right"},children:"SCORE"}),(0,t.jsx)("span",{children:"SOURCE"}),(0,t.jsx)("span",{children:"SET"})]}),C.slice(0,p).map(e=>(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 70px 70px 70px 60px 180px 110px",gap:8,padding:"7px 12px",alignItems:"center",borderTop:"1px solid rgba(255,255,255,0.05)",fontSize:12.5},children:[(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[(0,t.jsx)("span",{title:`${e.industry.label} (inferred)`,style:{width:8,height:8,borderRadius:"50%",background:e.industry.color,flexShrink:0}}),(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name})]}),(0,t.jsx)("span",{style:{textAlign:"right"},children:e.people}),(0,t.jsx)("span",{style:{textAlign:"right",color:e.d1?"#00ff88":"#556"},children:e.d1}),(0,t.jsx)("span",{style:{textAlign:"right",color:e.senior?"#FFD700":"#556"},children:e.senior}),(0,t.jsx)("b",{style:{textAlign:"right",fontSize:15},children:e.score}),(0,t.jsxs)("span",{style:{fontSize:11,color:b[e.source]?.color},children:[b[e.source]?.label,e.sectorBonus>0&&(0,t.jsxs)("span",{style:{color:"#00ff88"},children:[" + ",e.sectorBonus," your sector"]})]}),(0,t.jsx)(w,{company:e,onSet:j,compact:!0})]},e.name))]}),C.length>p&&(0,t.jsxs)("button",{onClick:()=>h(e=>e+300),style:{marginTop:10,padding:"7px 14px",borderRadius:8,border:m,background:"rgba(255,255,255,0.05)",color:"#dfe6e9",cursor:"pointer",fontSize:12},children:["Show more (",C.length-p," left)"]})]}),u&&(0,t.jsx)("div",{role:"status",style:{position:"fixed",bottom:24,left:"50%",transform:"translateX(-50%)",padding:"10px 18px",borderRadius:24,background:"linear-gradient(135deg, #00ff88, #3498DB)",color:"#000",fontWeight:800,fontSize:13,zIndex:50},children:u})]})}var S=e.i(89154);let C={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},z="1px solid rgba(255,255,255,0.1)",M=[...S.INDUSTRIES,S.UNKNOWN_INDUSTRY];function B(e){let t=0x811c9dc5;for(let n=0;n<e.length;n++)t=Math.imul(t^e.charCodeAt(n),0x1000193);return(t>>>0)%1e3/1e3}function F({value:e,onChange:n,options:o}){return(0,t.jsx)("div",{style:{display:"flex",borderRadius:7,overflow:"hidden",border:z},children:o.map(([o,r])=>(0,t.jsx)("button",{onClick:()=>n(o),style:{padding:"5px 10px",fontSize:11.5,fontWeight:600,border:"none",cursor:"pointer",background:e===o?"rgba(52,152,219,0.25)":"transparent",color:e===o?"#cfe6f7":"#8b9a9a"},children:r},o))})}function $(e,t){return("all"===t.degree||String(e.degree)===t.degree)&&("senior"!==t.seniority||!!(0,S.isSenior)(e.headline))&&("csuite"!==t.seniority||!((0,S.getSeniority)(e.headline).level<6))&&("SA"!==t.tier||"S"===e.tier||"A"===e.tier)}function R({d1:e=[],d2:o=[],d3:r=[],tab:i="map",onOpenCompany:l}){let[s,a]=(0,n.useState)({degree:"all",seniority:"all",tier:"all"}),[d,c]=(0,n.useState)(()=>new Set),[p,h]=(0,n.useState)(""),[u,f]=(0,n.useState)(null),g=(0,n.useMemo)(()=>[...e,...o,...r],[e,o,r]),y=(0,n.useMemo)(()=>(0,S.buildCompanyIndex)(g),[g]),x=(0,n.useMemo)(()=>(0,S.companyLinks)(e,o),[e,o]),m=(0,n.useMemo)(()=>{let e=p.trim().toLowerCase(),t=[];for(let n of y.values()){if(d.has(n.industry.key)||e&&!n.name.toLowerCase().includes(e))continue;let o=n.people.filter(e=>$(e,s));o.length&&t.push({...n,shown:o})}return t.sort((e,t)=>t.shown.length-e.shown.length)},[y,s,d,p]),b=(0,n.useMemo)(()=>{let e=new Map(M.map(e=>[e.key,{...e,people:[],companies:new Map}])),t=new Set;for(let n of g){let o=n.profile_url||`id:${n.id}`;if(t.has(o)||(t.add(o),!$(n,s)))continue;let r=(0,S.companyOf)(n),i=r?y.get(r)?.industry||(0,S.industryOf)(r,n.headline):(0,S.industryOf)(null,n.headline),l=e.get(i.key);l.people.push(n),r&&l.companies.set(r,(l.companies.get(r)||0)+1)}return[...e.values()].filter(e=>e.people.length).sort((e,t)=>t.people.length-e.people.length)},[g,y,s]),j=u?.kind==="company"?y.get(u.key):u?.kind==="industry"?b.find(e=>e.key===u.key):null;return(0,t.jsxs)("div",{style:{display:"flex",flex:1,minHeight:0},children:[(0,t.jsxs)("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},children:[(0,t.jsx)(A,{filters:s,setFilters:a,query:p,setQuery:h,industries:b,hidden:d,setHidden:c,onIndustry:e=>f({kind:"industry",key:e})}),"map"===i?(0,t.jsx)(W,{companies:m,links:x,focus:u,onCompany:e=>f({kind:"company",key:e}),onIndustry:e=>f({kind:"industry",key:e}),onClear:()=>f(null)}):(0,t.jsx)(I,{industries:b,index:y,d1:e,d2:o,onIndustry:e=>f({kind:"industry",key:e}),onCompany:e=>f({kind:"company",key:e})})]}),j&&(0,t.jsx)(O,{focus:u,data:j,index:y,links:x,d1:e,d2:o,filters:s,onClose:()=>f(null),onCompany:e=>f({kind:"company",key:e}),onOpenCompany:l})]})}function A({filters:e,setFilters:n,query:o,setQuery:r,industries:i,hidden:l,setHidden:s,onIndustry:a}){let d=(e,t)=>n(n=>({...n,[e]:t}));return(0,t.jsxs)("div",{style:{padding:"10px 16px",borderBottom:z,display:"flex",flexDirection:"column",gap:8},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,flexWrap:"wrap",alignItems:"center"},children:[(0,t.jsx)("input",{value:o,onChange:e=>r(e.target.value),placeholder:"Find a company",style:{padding:"6px 10px",borderRadius:7,border:z,background:"rgba(255,255,255,0.05)",color:"#fff",fontSize:13,minWidth:170}}),(0,t.jsx)(F,{value:e.degree,onChange:e=>d("degree",e),options:[["all","All degrees"],["1","1st"],["2","2nd"],["3","3rd"]]}),(0,t.jsx)(F,{value:e.seniority,onChange:e=>d("seniority",e),options:[["all","Any level"],["senior","Director+"],["csuite","C-suite"]]}),(0,t.jsx)(F,{value:e.tier,onChange:e=>d("tier",e),options:[["all","All tiers"],["SA","S & A only"]]})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:[i.map(e=>{let n=l.has(e.key);return(0,t.jsxs)("span",{style:{display:"inline-flex",borderRadius:14,border:`1px solid ${e.color}55`,overflow:"hidden",opacity:n?.4:1},children:[(0,t.jsx)("button",{title:n?"Show on the map":"Hide from the map",onClick:()=>s(t=>{let n=new Set(t);return n.has(e.key)?n.delete(e.key):n.add(e.key),n}),style:{padding:"3px 7px",border:"none",background:`${e.color}22`,cursor:"pointer",color:e.color,fontSize:11},children:"●"}),(0,t.jsxs)("button",{onClick:()=>a(e.key),title:"Analyse this industry",style:{padding:"3px 9px 3px 5px",border:"none",background:"transparent",cursor:"pointer",color:"#cfd8d8",fontSize:11.5},children:[e.label," ",(0,t.jsx)("span",{style:{color:"#778"},children:e.people.length})]})]},e.key)}),(0,t.jsx)("span",{style:{fontSize:11,color:"#667",alignSelf:"center"},children:"industries inferred from companies and headlines"})]})]})}function W({companies:e,links:o,focus:r,onCompany:i,onIndustry:l,onClear:s}){let a=(0,n.useRef)(null),{w:f,h:g}=function(e){let[t,o]=(0,n.useState)({w:0,h:0});return(0,n.useEffect)(()=>{let t=e.current;if(!t)return;let n=()=>{let e=t.getBoundingClientRect();o(t=>t.w===Math.round(e.width)&&t.h===Math.round(e.height)?t:{w:Math.round(e.width),h:Math.round(e.height)})};n();let r=new ResizeObserver(n);return r.observe(t),()=>r.disconnect()},[e]),t}(a),[y,x]=(0,n.useState)(null),m=(0,n.useMemo)(()=>{let t=e.slice(0,140),n=new Set(t.map(e=>e.name)),r=[...new Set(t.map(e=>e.industry.key))],i=new Map(r.map((e,t)=>{let n=t/Math.max(1,r.length)*Math.PI*2-Math.PI/2;return[e,{x:260*Math.cos(n),y:260*Math.sin(n)}]})),l=t.map(e=>({id:e.name,co:e,r:4+3.4*Math.sqrt(e.shown.length),x:i.get(e.industry.key).x+(B(e.name)-.5)*40,y:i.get(e.industry.key).y+(B(e.name+"#")-.5)*40})),s=o.filter(e=>n.has(e.a)&&n.has(e.b)).map(e=>({source:e.a,target:e.b,weight:e.weight,via:e.via.size})),a=(0,h.forceSimulation)(l).force("x",(function(e){var t,n,o,r=(0,u.default)(.1);function i(e){for(var r,i=0,l=t.length;i<l;++i)r=t[i],r.vx+=(o[i]-r.x)*n[i]*e}function l(){if(t){var i,l=t.length;for(n=Array(l),o=Array(l),i=0;i<l;++i)n[i]=isNaN(o[i]=+e(t[i],i,t))?0:+r(t[i],i,t)}}return"function"!=typeof e&&(e=(0,u.default)(null==e?0:+e)),i.initialize=function(e){t=e,l()},i.strength=function(e){return arguments.length?(r="function"==typeof e?e:(0,u.default)(+e),l(),i):r},i.x=function(t){return arguments.length?(e="function"==typeof t?t:(0,u.default)(+t),l(),i):e},i})(e=>i.get(e.co.industry.key).x).strength(.12)).force("y",(function(e){var t,n,o,r=(0,u.default)(.1);function i(e){for(var r,i=0,l=t.length;i<l;++i)r=t[i],r.vy+=(o[i]-r.y)*n[i]*e}function l(){if(t){var i,l=t.length;for(n=Array(l),o=Array(l),i=0;i<l;++i)n[i]=isNaN(o[i]=+e(t[i],i,t))?0:+r(t[i],i,t)}}return"function"!=typeof e&&(e=(0,u.default)(null==e?0:+e)),i.initialize=function(e){t=e,l()},i.strength=function(e){return arguments.length?(r="function"==typeof e?e:(0,u.default)(+e),l(),i):r},i.y=function(t){return arguments.length?(e="function"==typeof t?t:(0,u.default)(+t),l(),i):e},i})(e=>i.get(e.co.industry.key).y).strength(.12)).force("collide",(0,d.forceCollide)(e=>e.r+3)).force("charge",(0,p.forceManyBody)().strength(-25)).force("link",(0,c.forceLink)(s).id(e=>e.id).strength(e=>Math.min(.25,.03*e.weight)).distance(60)).stop();for(let e=0;e<320;e++)a.tick();let f=l.flatMap(e=>[e.x-e.r,e.x+e.r]),g=l.flatMap(e=>[e.y-e.r,e.y+e.r]),y=l.length?{x:Math.min(...f)-60,y:Math.min(...g)-40,w:Math.max(...f)-Math.min(...f)+120,h:Math.max(...g)-Math.min(...g)+80}:{x:-300,y:-300,w:600,h:600},x=r.map(e=>{let t=l.filter(t=>t.co.industry.key===e),n=t.reduce((e,t)=>e+t.x,0)/t.length,o=t.reduce((e,t)=>e+t.y,0)/t.length,r=Math.hypot(n,o)||1,i=n/r,s=o/r,a=Math.max(...t.map(e=>(e.x-n)*i+(e.y-o)*s+e.r));return{key:e,x:n+i*(a+16),y:o+s*(a+16)+4,anchor:i>.35?"start":i<-.35?"end":"middle",ind:(0,S.industryByKey)(e)}});for(let e of x){let t=7.5*e.ind.label.length,n="start"===e.anchor?e.x:"end"===e.anchor?e.x-t:e.x-t/2,o=Math.max(y.x+y.w,n+t+10);y.x=Math.min(y.x,n-10),y.w=o-y.x;let r=Math.max(y.y+y.h,e.y+12);y.y=Math.min(y.y,e.y-18),y.h=r-y.y}return y.h+=Math.max(60,.1*y.h),{nodes:l,edges:s,box:y,labels:x,cut:Math.max(0,e.length-t.length)}},[e,o]),b=y||(r?.kind==="company"?r.key:null),j=r?.kind==="industry"?r.key:null,k=(0,n.useMemo)(()=>{if(!b)return null;let e=new Set([b]);for(let t of m.edges)t.source.id===b&&e.add(t.target.id),t.target.id===b&&e.add(t.source.id);return e},[b,m]),w=(0,n.useMemo)(()=>new Set(m.nodes.slice(0,28).map(e=>e.id)),[m]);return(0,t.jsxs)("div",{ref:a,style:{flex:1,minHeight:360,position:"relative"},onClick:s,children:[f>0&&(0,t.jsxs)("svg",{width:f,height:g,viewBox:`${m.box.x} ${m.box.y} ${m.box.w} ${m.box.h}`,style:{display:"block"},children:[(0,t.jsx)("g",{children:m.edges.map((e,n)=>{let o=b&&(e.source.id===b||e.target.id===b);return(0,t.jsx)("line",{x1:e.source.x,y1:e.source.y,x2:e.target.x,y2:e.target.y,stroke:o?"#FF6B35":"#8fa6c0",strokeOpacity:o?.8:b?.04:.14,strokeWidth:o?1+Math.log2(1+e.weight):.4+.5*Math.log2(1+e.weight)},n)})}),m.labels.map(e=>(0,t.jsx)("text",{x:e.x,y:e.y,textAnchor:e.anchor,fontSize:13,fontWeight:800,fill:e.ind.color,opacity:j&&j!==e.key?.25:.85,style:{cursor:"pointer"},onClick:t=>{t.stopPropagation(),l(e.key)},children:e.ind.label},e.key)),m.nodes.map(e=>{let n=k&&!k.has(e.id)||j&&e.co.industry.key!==j,o=r?.kind==="company"&&r.key===e.id;return(0,t.jsxs)("g",{transform:`translate(${e.x},${e.y})`,style:{cursor:"pointer"},opacity:n?.18:1,onMouseEnter:()=>x(e.id),onMouseLeave:()=>x(null),onClick:t=>{t.stopPropagation(),i(e.id)},children:[(0,t.jsx)("title",{children:`${e.co.name} \xb7 ${e.co.industry.label} (inferred)
|
|
2
|
+
${e.co.d1} you know \xb7 ${e.co.d2} reachable${e.co.d3?` \xb7 ${e.co.d3} further`:""}`}),(0,t.jsx)("circle",{r:e.r,fill:e.co.industry.color,fillOpacity:.75,stroke:o?"#fff":e.co.S?C.S:"rgba(0,0,0,0.35)",strokeWidth:o?2.5:e.co.S?1.5:.6}),e.co.d1>0&&(0,t.jsx)("circle",{r:e.r*Math.sqrt(e.co.d1/Math.max(1,e.co.people.length)),fill:"#fff",fillOpacity:.35}),(w.has(e.id)||e.id===b||o)&&(0,t.jsx)("text",{y:e.r+11,textAnchor:"middle",fontSize:10,fill:"#e6edf0",style:{pointerEvents:"none"},children:e.co.name})]},e.id)})]}),(0,t.jsxs)("div",{style:{position:"absolute",left:12,bottom:10,fontSize:11,color:"#778",lineHeight:1.6,pointerEvents:"none"},children:["Bubble = a company, sized by your people there; white centre = the share you already know; gold ring = an S-tier person inside.",(0,t.jsx)("br",{}),"A line = one of your connections at one company knows people at the other.",m.cut?` Showing the 140 largest; ${m.cut} smaller companies are in Industries.`:""]})]})}function T({parts:e,total:n}){return(0,t.jsx)("div",{style:{display:"flex",height:6,borderRadius:3,overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:e.map(([e,o],r)=>(0,t.jsx)("div",{style:{width:`${e/Math.max(1,n)*100}%`,background:o}},r))})}function I({industries:e,index:o,d1:r,d2:i,onIndustry:l,onCompany:s}){let a=(0,n.useMemo)(()=>{let e=new Map(r.map(e=>[e.id,e])),t=new Map;for(let e of i){let n=(0,S.companyOf)(e),r=n?o.get(n)?.industry.key:(0,S.industryOf)(null,e.headline).key;if(!r)continue;let i=t.get(r)||new Map;i.set(e.source_connection_id,(i.get(e.source_connection_id)||0)+1),t.set(r,i)}let n=new Map;for(let[o,r]of t){let[t,i]=[...r.entries()].sort((e,t)=>t[1]-e[1])[0]||[];e.get(t)&&n.set(o,{bridge:e.get(t),n:i})}return n},[o,r,i]);return(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:16},children:(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:12},children:e.map(e=>{let n=e.people.filter(e=>1===e.degree).length,o=e.people.filter(e=>2===e.degree).length,r=e.people.filter(e=>(0,S.isSenior)(e.headline)).length,i=e.people.filter(e=>"S"===e.tier).length,d=[...e.companies.entries()].sort((e,t)=>t[1]-e[1]).slice(0,3),c=a.get(e.key);return(0,t.jsxs)("div",{onClick:()=>l(e.key),style:{padding:14,borderRadius:10,border:z,borderTop:`3px solid ${e.color}`,background:"rgba(255,255,255,0.03)",cursor:"pointer"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline"},children:[(0,t.jsx)("b",{style:{fontSize:14,color:e.color},children:e.label}),(0,t.jsx)("span",{style:{fontSize:20,fontWeight:800},children:e.people.length})]}),(0,t.jsxs)("div",{style:{fontSize:11.5,color:"#8b9a9a",margin:"4px 0 6px"},children:[n," you know · ",o," reachable · ",e.companies.size," companies · ",r," director+ · ",i," S-tier"]}),(0,t.jsx)(T,{total:e.people.length,parts:[[n,"#00ff88"],[o,"#FF6B35"]]}),d.length>0&&(0,t.jsx)("div",{style:{marginTop:8,display:"flex",gap:6,flexWrap:"wrap"},children:d.map(([e,n])=>(0,t.jsxs)("button",{onClick:t=>{t.stopPropagation(),s(e)},style:{padding:"2px 8px",borderRadius:10,border:z,background:"rgba(255,255,255,0.05)",color:"#dfe6e9",fontSize:11,cursor:"pointer"},children:[e," ",(0,t.jsx)("span",{style:{color:"#778"},children:n})]},e))}),c&&(0,t.jsxs)("div",{style:{marginTop:8,fontSize:11.5,color:"#aab7b7"},children:["Best way in: ",(0,t.jsx)("b",{style:{color:C[c.bridge.tier]||"#ccc"},children:c.bridge.name})," knows ",c.n," here"]})]},e.key)})})})}function D({p:e,note:n}){return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"5px 0",fontSize:12.5},children:[(0,t.jsx)("span",{style:{width:7,height:7,borderRadius:"50%",background:C[e.tier]||"#667",flexShrink:0}}),(0,t.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,t.jsx)("div",{style:{fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,t.jsx)("div",{style:{fontSize:11,color:"#8b9a9a",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:n||e.headline})]})]})}function O({focus:e,data:o,index:r,links:i,d1:l,d2:s,filters:a,onClose:d,onCompany:c,onOpenCompany:p}){let h,u,f,g="company"===e.kind,y=o.people.filter(e=>$(e,a)),x=(0,n.useMemo)(()=>{let e=new Map;for(let t of y){let n=(0,S.getSeniority)(t.headline);e.set(n.label,{n:(e.get(n.label)?.n||0)+1,level:n.level})}return[...e.entries()].sort((e,t)=>t[1].level-e[1].level)},[y]),m=(0,n.useMemo)(()=>g?(0,S.waysInto)(o.name,l,s):null,[g,o,l,s]),b=(0,n.useMemo)(()=>g?i.filter(e=>e.a===o.name||e.b===o.name).map(e=>({name:e.a===o.name?e.b:e.a,weight:e.weight})).sort((e,t)=>t.weight-e.weight).slice(0,8):[],[g,i,o]),j=[...y].sort((e,t)=>(Number(t.power_score)||0)-(Number(e.power_score)||0)).slice(0,6),k=g?o.industry:o,w=y.filter(e=>1===e.degree).length,v=y.filter(e=>2===e.degree).length,C=g?[]:[...o.companies.entries()].sort((e,t)=>t[1]-e[1]).slice(0,10);return(0,t.jsxs)("aside",{style:{width:360,flexShrink:0,borderLeft:z,overflow:"auto",padding:16,background:"rgba(255,255,255,0.02)"},children:[(0,t.jsx)("button",{onClick:d,style:{background:"none",border:"none",color:"#888",cursor:"pointer",fontSize:12,padding:0},children:"✕ Close"}),(0,t.jsxs)("div",{style:{fontSize:10,letterSpacing:1,color:"#8b9a9a",marginTop:8},children:[g?"COMPANY":"INDUSTRY"," ANALYZER"]}),(0,t.jsx)("h2",{style:{margin:"4px 0 6px",fontSize:20},children:g?o.name:o.label}),(0,t.jsxs)("span",{style:{fontSize:11,padding:"2px 8px",borderRadius:10,background:`${k.color}22`,color:k.color},children:[k.label,g?" · inferred":""]}),g&&(0,t.jsx)(E,{name:o.name}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:8,margin:"14px 0"},children:[[w,"you know","#00ff88"],[v,"reachable","#FF6B35"],[y.filter(e=>(0,S.isSenior)(e.headline)).length,"director+","#FFD700"]].map(([e,n,o])=>(0,t.jsxs)("div",{style:{padding:8,borderRadius:8,background:"rgba(255,255,255,0.04)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:20,fontWeight:800,color:o},children:e}),(0,t.jsx)("div",{style:{fontSize:10.5,color:"#8b9a9a"},children:n})]},n))}),(0,t.jsx)(N,{title:"By level",children:x.map(([e,{n}])=>(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"110px 1fr 28px",gap:8,alignItems:"center",fontSize:11.5,marginBottom:4},children:[(0,t.jsx)("span",{style:{color:"#aab7b7"},children:e}),(0,t.jsx)(T,{total:y.length,parts:[[n,"#3498DB"]]}),(0,t.jsx)("span",{style:{color:"#778",textAlign:"right"},children:n})]},e))}),g&&m&&(0,t.jsxs)(N,{title:"Ways in",children:[m.direct.length>0&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#00ff88",margin:"2px 0"},children:["You already know ",m.direct.length," here"]}),(h=new Map(m.bridges.map(({bridge:e,n:t})=>[e.id,t])),u=[...m.direct].sort((e,t)=>(h.get(t.id)||0)-(h.get(e.id)||0)).slice(0,4),f=new Set(m.direct.map(e=>e.id)),(0,t.jsxs)(t.Fragment,{children:[u.map(e=>(0,t.jsx)(D,{p:e,note:h.get(e.id)?`works here \xb7 knows ${h.get(e.id)} here`:`works here \xb7 ${e.headline||""}`},e.id)),m.bridges.filter(({bridge:e})=>!f.has(e.id)).slice(0,5).map(({bridge:e,n})=>(0,t.jsx)(D,{p:e,note:`knows ${n} ${1===n?"person":"people"} here`},e.id))]})),!m.direct.length&&!m.bridges.length&&(0,t.jsx)("div",{style:{fontSize:12,color:"#778"},children:"No one you know links here yet."})]}),(0,t.jsx)(N,{title:g?"Most powerful people here":"Most powerful people in this industry",children:j.map(e=>(0,t.jsx)(D,{p:e,note:`${1===e.degree?"you know them":2===e.degree?"2nd degree":"3rd+"} \xb7 ${e.headline||""}`},e.id))}),g&&b.length>0&&(0,t.jsx)(N,{title:"Connected companies",children:(0,t.jsx)("div",{style:{display:"flex",gap:6,flexWrap:"wrap"},children:b.map(e=>(0,t.jsxs)("button",{onClick:()=>c(e.name),style:{padding:"3px 9px",borderRadius:10,border:z,background:`${r.get(e.name)?.industry.color||"#666"}22`,color:"#dfe6e9",fontSize:11.5,cursor:"pointer"},children:[e.name," ",(0,t.jsx)("span",{style:{color:"#778"},children:e.weight})]},e.name))})}),!g&&(0,t.jsx)(N,{title:"Companies",children:C.map(([e,n])=>(0,t.jsxs)("div",{onClick:()=>c(e),style:{display:"grid",gridTemplateColumns:"1fr 60px 24px",gap:8,alignItems:"center",fontSize:12,padding:"3px 0",cursor:"pointer"},children:[(0,t.jsx)("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),(0,t.jsx)(T,{total:C[0][1],parts:[[n,k.color]]}),(0,t.jsx)("span",{style:{color:"#778",textAlign:"right"},children:n})]},e))}),g&&p&&(0,t.jsxs)("button",{onClick:()=>p(o),style:{marginTop:14,width:"100%",padding:"10px",borderRadius:8,border:"none",cursor:"pointer",fontWeight:700,background:"linear-gradient(135deg, #00ff88, #3498DB)",color:"#000"},children:["Path to the top of ",o.name," →"]})]})}function N({title:e,children:n}){return(0,t.jsxs)("div",{style:{marginTop:14},children:[(0,t.jsx)("div",{style:{fontSize:10.5,letterSpacing:.8,color:"#8b9a9a",fontWeight:700,marginBottom:6},children:e.toUpperCase()}),n]})}function E({name:e}){let{companies:n,setScore:o}=k(),r=n?.find(t=>t.name===e);if(!r)return null;let i={yours:"your score",known:"known list",network:"estimated",default:"unknown company"}[r.source];return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginTop:10,fontSize:12,color:"#aab7b7"},children:["Company score ",(0,t.jsx)("b",{style:{color:"#fff",fontSize:15},children:r.score}),"/10 · ",i,(0,t.jsx)("span",{style:{marginLeft:"auto"},children:(0,t.jsx)(w,{company:r,onSet:o,compact:!0})})]})}var _=e.i(15812);let L=[["map","Map"],["industries","Industries"],["companies","Companies"],["scores","Scores"]];function U(){let{userId:e}=(0,_.useUser)(),[a,d]=(0,n.useState)([]),[c,p]=(0,n.useState)(null),[h,u]=(0,n.useState)([]),[g,y]=(0,n.useState)(!0),[x,m]=(0,n.useState)([]),[b,j]=(0,n.useState)([]),[k,w]=(0,n.useState)([]),C=(0,o.useSearchParams)().get("tab"),[z,M]=(0,n.useState)(()=>L.some(([e])=>e===C)?C:"map"),[B,F]=(0,n.useState)(0);(0,n.useEffect)(()=>{!l.IS_DEMO&&e&&t();async function t(){let t=(0,s.hasCsvNetwork)()?(0,s.loadCsvNetwork)():null,n=[],o=[],r=[];if(t)n=t.degree1,o=t.degree2||[];else{let t=await (0,i.loadNetwork)(e);n=t.degree1,o=t.degree2,r=t.degree3}m(n),j(o),w(r||[]);let l={},a=new Set;[...n,...o,...r].forEach(e=>{if(a.has(e.profile_url))return;a.add(e.profile_url);let t=(0,S.companyOf)(e);t&&(l[t]||(l[t]={name:t,d1:0,d2:0,d3:0,sCount:0,aCount:0,people:[]}),1===e.degree?l[t].d1++:2===e.degree?l[t].d2++:l[t].d3++,"S"===e.tier&&l[t].sCount++,"A"===e.tier&&l[t].aCount++,l[t].people.push(e))}),d(Object.values(l).filter(e=>e.d1+e.d2+e.d3>=3).sort((e,t)=>3*t.sCount+2*t.aCount+t.d1+t.d2+t.d3-(3*e.sCount+2*e.aCount+e.d1+e.d2+e.d3))),y(!1)}},[e,B]);let[$,A]=(0,n.useState)(!1),[W,T]=(0,n.useState)([]);function I(e){let t=new Set(x.map(e=>e.profile_url)),n=new Set([...x,...b].map(e=>e.profile_url));return e.map(o=>({...o,connected:t.has(o.profile_url||o.profileUrl),known:n.has(o.profile_url||o.profileUrl),seniority:(0,S.getSeniority)(o.headline),mutualCount:e.filter(e=>t.has(e.profile_url||e.profileUrl)&&e.id!==o.id).length}))}function D(e){p(e),u(I(e.people))}async function O(){if(l.IS_DEMO||!c)return;let e=!1;try{e="1"===localStorage.getItem("six-degrees-company-scan-ok")}catch{}if(!e){if(!window.confirm("Company scans are experimental: they have not been tested against live LinkedIn yet, so the results may be incomplete. Like any scan, it opens a Chrome window and counts toward the profile views LinkedIn watches.\n\nRun it anyway?"))return;try{localStorage.setItem("six-degrees-company-scan-ok","1")}catch{}}A(!0),T(["Checking the scanner..."]);let t=(0,r.notReadyMessage)(await (0,r.scraperStatus)().catch(()=>null));if(t){T([t]),A(!1);return}try{let e=await (0,r.runScrape)("company",{name:c.name,onLog:T});if(0===e.exitCode){T(e=>[...e,"Loading the new people..."]);let e=await fetch(`/api/connections?scanned_company=${encodeURIComponent(c.name)}&limit=500`),t=(await e.json()).connections||[];t.length?(u(I(t)),T(e=>[...e,`${t.length} people at ${c.name}.`])):T(e=>[...e,"Nothing new was found."])}}catch(e){T([e.message||"Failed to start the scan"])}finally{A(!1)}}let N={},E=0;h.forEach(e=>{let t=e.seniority.key;N[t]||(N[t]={...e.seniority,people:[]}),e.connected&&E++;let n=Math.min(90,12*e.mutualCount);e.seniority.level<=1?n+=20:e.seniority.level<=2?n+=10:e.seniority.level>=5&&(n-=10),n=Math.max(5,Math.min(95,n)),e.connected&&(n=100);let o=null;if(2===e.degree&&e.source_connection_id){let t=x.find(t=>t.id===e.source_connection_id);t&&(o=t.name)}let r={0:5,1:10,2:20,3:35,4:50,5:75,6:100}[e.seniority.level]||10;N[t].people.push({...e,likelihood:n,bridgeName:o,xp:r})}),Object.values(N).forEach(e=>e.people.sort((e,t)=>t.likelihood-e.likelihood));let U=Object.values(N).sort((e,t)=>t.level-e.level);return l.IS_DEMO?(0,t.jsxs)("div",{style:{minHeight:"100vh",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,background:"#0a0a1a",color:"rgba(255,255,255,0.7)",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[(0,t.jsx)("h1",{style:{fontSize:20,fontWeight:700,margin:0,color:"#fff"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{fontSize:13,margin:0},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(f.default,{href:"/",style:{fontSize:13,color:"#888",textDecoration:"none"},children:"← Back to the network"})]}):g?(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff"},children:"Loading..."}):(0,t.jsxs)("div",{style:{height:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,t.jsx)("header",{style:{padding:"14px 24px",borderBottom:"1px solid rgba(255,255,255,0.1)",flexShrink:0},children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12},children:[(0,t.jsxs)(f.default,{href:"/",style:{display:"flex",alignItems:"center",gap:6,color:"#888",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(255,255,255,0.06)",border:"1px solid rgba(255,255,255,0.1)"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"←"})," Map"]}),(0,t.jsx)("h1",{style:{fontSize:20,fontWeight:700,margin:0,background:"linear-gradient(135deg, #00ff88, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Paths"}),!c&&(0,t.jsx)("div",{style:{display:"flex",gap:4,marginLeft:8,padding:3,borderRadius:8,background:"rgba(255,255,255,0.05)"},children:L.map(([e,n])=>(0,t.jsx)("button",{onClick:()=>M(e),style:{padding:"5px 12px",borderRadius:6,border:"none",cursor:"pointer",fontSize:12.5,fontWeight:700,background:z===e?"linear-gradient(135deg, #00ff88, #3498DB)":"transparent",color:z===e?"#000":"#aab"},children:n},e))}),c&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{onClick:()=>{p(null),u([])},style:{background:"none",border:"none",color:"#888",cursor:"pointer",fontSize:12},children:"← Companies"}),(0,t.jsx)("span",{style:{fontSize:13,fontWeight:600},children:c.name}),(0,t.jsxs)("span",{style:{fontSize:11,color:"#888"},children:[E,"/",h.length," connected"]}),(0,t.jsx)("button",{onClick:O,disabled:$,style:{marginLeft:"auto",padding:"5px 12px",borderRadius:6,border:"none",cursor:$?"not-allowed":"pointer",background:$?"#333":"rgba(0,255,136,0.15)",color:$?"#555":"#00ff88",fontSize:11,fontWeight:600},children:$?"Scanning...":"+ Scan Full Company"}),(0,t.jsx)("span",{title:"Not yet tested against live LinkedIn. Results may be incomplete.",style:{fontSize:9.5,fontWeight:800,letterSpacing:.6,padding:"3px 7px",borderRadius:20,border:"1px solid rgba(255,215,0,0.45)",color:"#FFD700"},children:"EXPERIMENTAL"})]})]})}),c||"scores"!==z?c||"companies"===z?(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"16px 24px"},children:(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:[!c&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("p",{style:{fontSize:13,color:"#888",marginBottom:16},children:["Pick a company to see your path to the top. Based on ",x.length+b.length," people in your network."]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:10},children:a.slice(0,60).map(e=>(0,t.jsxs)("button",{onClick:()=>D(e),style:{padding:"14px",borderRadius:10,border:"none",cursor:"pointer",textAlign:"left",background:"rgba(255,255,255,0.04)",transition:"background 0.15s",borderLeft:`3px solid ${e.sCount>0?"#FFD700":e.aCount>0?"#9B59B6":"#3498DB"}`},onMouseEnter:e=>e.currentTarget.style.background="rgba(255,255,255,0.08)",onMouseLeave:e=>e.currentTarget.style.background="rgba(255,255,255,0.04)",children:[(0,t.jsx)("div",{style:{fontSize:14,fontWeight:700,color:"#fff",marginBottom:4},children:e.name}),(0,t.jsxs)("div",{style:{display:"flex",gap:8,fontSize:10,color:"#888"},children:[(0,t.jsxs)("span",{style:{color:"#00ff88"},children:[e.d1," connected"]}),(0,t.jsxs)("span",{children:[e.d2+e.d3," locked"]})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,marginTop:4,fontSize:9},children:[e.sCount>0&&(0,t.jsxs)("span",{style:{color:"#FFD700",fontWeight:600},children:[e.sCount,"S"]}),e.aCount>0&&(0,t.jsxs)("span",{style:{color:"#9B59B6",fontWeight:600},children:[e.aCount,"A"]}),(0,t.jsxs)("span",{style:{color:"#555"},children:[e.d1+e.d2," total"]})]}),(0,t.jsx)("div",{style:{height:3,background:"rgba(255,255,255,0.08)",borderRadius:2,marginTop:6},children:(0,t.jsx)("div",{style:{height:"100%",borderRadius:2,width:`${e.d1/Math.max(e.d1+e.d2+e.d3,1)*100}%`,background:e.sCount>0?"#FFD700":"#00ff88"}})})]},e.name))})]}),$&&(0,t.jsxs)("div",{style:{padding:"10px",borderRadius:8,background:"rgba(0,255,136,0.06)",border:"1px solid rgba(0,255,136,0.2)",marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[(0,t.jsx)("div",{style:{width:6,height:6,borderRadius:"50%",background:"#00ff88",animation:"pulse 1s infinite"}}),(0,t.jsx)("span",{style:{fontSize:10,fontWeight:600,color:"#00ff88"},children:"Scanning LinkedIn..."})]}),(0,t.jsx)("div",{style:{fontFamily:"monospace",fontSize:9,color:"#777",maxHeight:60,overflow:"auto"},children:W.map((e,n)=>(0,t.jsx)("div",{children:e},n))})]}),c&&U.map(e=>(0,t.jsxs)("div",{style:{marginBottom:16},children:[(0,t.jsxs)("div",{style:{padding:"8px 12px",borderRadius:6,marginBottom:4,background:e.level>=5?"rgba(255,215,0,0.08)":e.level>=3?"rgba(155,89,182,0.08)":"rgba(52,152,219,0.08)",borderLeft:`3px solid ${e.level>=5?"#FFD700":e.level>=3?"#9B59B6":"#3498DB"}`,display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{style:{fontSize:12,fontWeight:700,color:e.level>=5?"#FFD700":e.level>=3?"#9B59B6":"#3498DB"},children:e.label}),e.level>=5&&(0,t.jsx)("span",{style:{fontSize:9,color:"#FF6B35",marginLeft:8,fontWeight:700},children:"TARGET"})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,t.jsxs)("span",{style:{fontSize:9,color:"#FF6B35",fontWeight:600},children:["+",e.people.filter(e=>!e.connected).reduce((e,t)=>e+(t.xp||0),0)," XP"]}),(0,t.jsxs)("span",{style:{fontSize:10,color:"#666"},children:[e.people.filter(e=>e.connected).length,"/",e.people.length]})]})]}),e.people.map((n,o)=>(0,t.jsx)(P,{p:n,level:e,companyPeople:h,d1Data:x,selectedCompany:c},n.id||o))]},e.key))]})}):(0,t.jsx)(R,{d1:x,d2:b,d3:k,tab:z,onOpenCompany:e=>D({...e,sCount:e.S,aCount:e.A})}):(0,t.jsx)(v,{onRescored:()=>F(e=>e+1)})]})}function P({p:e,level:o,companyPeople:r,d1Data:i,selectedCompany:l}){let[s,a]=(0,n.useState)(!1),d=new Set(i.map(e=>e.profile_url));r.filter(e=>d.has(e.profile_url||e.profileUrl));let c=r.filter(t=>(0,S.getSeniority)(t.headline).level>e.seniority.level&&!d.has(t.profile_url||t.profileUrl)),p=r.filter(t=>(0,S.getSeniority)(t.headline).level===e.seniority.level&&t.id!==e.id),h=[];if(!e.connected){let t=c.length;t>0&&h.push({icon:"⬆️",text:`Adding them gives you a mutual with ${t} people above in the hierarchy`,color:"#00ff88"});let n=p.filter(e=>d.has(e.profile_url||e.profileUrl)).length;n>0?h.push({icon:"🤝",text:`${n} people at their level already connected — high social proof`,color:"#FFD700"}):h.push({icon:"🎯",text:"First connection at this level — opens a new layer",color:"#3498DB"}),e.bridgeName&&h.push({icon:"🔗",text:`Reachable through ${e.bridgeName} — warm intro possible`,color:"#FF6B35"}),e.seniority.level>=5?h.push({icon:"👑",text:`${e.seniority.label} — decision maker, high strategic value but low accept rate`,color:"#FFD700"}):e.seniority.level>=3?h.push({icon:"📊",text:`${e.seniority.label} — middle management, good balance of access and accept rate`,color:"#9B59B6"}):h.push({icon:"✅",text:`${e.seniority.label} — highest accept rate, builds mutual foundation for people above`,color:"#00ff88"}),e.likelihood>=60?h.push({icon:"🔥",text:`${e.likelihood}% likely to accept — strong mutual overlap + approachable role`,color:"#00ff88"}):e.likelihood>=30?h.push({icon:"⚡",text:`${e.likelihood}% likely — moderate chance, add more people at their level first`,color:"#FFD700"}):h.push({icon:"🔒",text:`${e.likelihood}% likely — low chance right now, build more connections below them first`,color:"#ff5050"})}return(0,t.jsxs)("div",{style:{borderBottom:"1px solid rgba(255,255,255,0.03)"},children:[(0,t.jsxs)("div",{onClick:()=>a(!s),style:{display:"flex",alignItems:"center",gap:8,padding:"6px 8px",cursor:"pointer",opacity:e.connected?.7:1},onMouseEnter:e=>e.currentTarget.style.background="rgba(255,255,255,0.04)",onMouseLeave:e=>e.currentTarget.style.background="transparent",children:[(0,t.jsx)("span",{style:{fontSize:8,color:"#555",flexShrink:0,width:10},children:s?"▾":"▸"}),(0,t.jsx)("div",{style:{width:18,height:18,borderRadius:"50%",flexShrink:0,fontSize:8,display:"flex",alignItems:"center",justifyContent:"center",background:e.connected?"rgba(0,255,136,0.2)":"rgba(255,255,255,0.05)",color:e.connected?"#00ff88":"#555",border:`1px solid ${e.connected?"rgba(0,255,136,0.3)":"rgba(255,255,255,0.1)"}`},children:e.connected?"✓":"🔒"}),e.profile_image_url||e.imageUrl?(0,t.jsx)("img",{src:e.profile_image_url||e.imageUrl,alt:"",style:{width:26,height:26,borderRadius:"50%",objectFit:"cover",flexShrink:0},onError:e=>e.target.style.display="none"}):(0,t.jsx)("div",{style:{width:26,height:26,borderRadius:"50%",flexShrink:0,fontSize:10,fontWeight:700,background:"#333",color:"#888",display:"flex",alignItems:"center",justifyContent:"center"},children:e.name?.charAt(0)}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:11,fontWeight:600,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name}),(0,t.jsx)("div",{style:{fontSize:8,color:"#666",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.headline?.substring(0,45)})]}),!e.connected&&e.bridgeName&&(0,t.jsxs)("span",{style:{fontSize:8,color:"#FF6B35",flexShrink:0,maxWidth:55,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:["via ",e.bridgeName.split(" ")[0]]}),!e.connected&&(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,flexShrink:0},children:[(0,t.jsxs)("span",{style:{fontSize:8,fontWeight:700,color:"#FF6B35"},children:["+",e.xp]}),(0,t.jsxs)("div",{style:{fontSize:9,fontWeight:700,minWidth:30,textAlign:"right",color:e.likelihood>=60?"#00ff88":e.likelihood>=30?"#FFD700":"#ff5050"},children:[e.likelihood,"%"]})]}),!e.connected&&(0,t.jsx)("a",{href:e.profile_url||e.profileUrl,target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),style:{padding:"3px 7px",borderRadius:4,fontSize:8,fontWeight:700,background:"#0077B5",color:"#fff",textDecoration:"none",flexShrink:0},children:"Add"})]}),s&&(0,t.jsxs)("div",{style:{padding:"8px 12px 10px 44px",background:"rgba(255,255,255,0.02)",borderTop:"1px solid rgba(255,255,255,0.04)"},children:[(0,t.jsx)("div",{style:{fontSize:11,color:"#aaa",marginBottom:8},children:e.headline||"No headline available"}),(0,t.jsxs)("div",{style:{display:"flex",gap:6,alignItems:"center",marginBottom:8,flexWrap:"wrap"},children:[(0,t.jsxs)("div",{style:{display:"inline-block",padding:"2px 8px",borderRadius:4,fontSize:9,fontWeight:600,background:e.seniority.level>=5?"rgba(255,215,0,0.1)":e.seniority.level>=3?"rgba(155,89,182,0.1)":"rgba(52,152,219,0.1)",color:e.seniority.level>=5?"#FFD700":e.seniority.level>=3?"#9B59B6":"#3498DB",border:`1px solid ${e.seniority.level>=5?"rgba(255,215,0,0.2)":e.seniority.level>=3?"rgba(155,89,182,0.2)":"rgba(52,152,219,0.2)"}`},children:[e.seniority.label," · Level ",e.seniority.level]}),!e.connected&&(0,t.jsxs)("div",{style:{display:"inline-block",padding:"2px 8px",borderRadius:4,fontSize:9,fontWeight:700,background:"rgba(255,107,53,0.1)",color:"#FF6B35",border:"1px solid rgba(255,107,53,0.2)"},children:["+",e.xp," XP"]})]}),!e.connected&&h.length>0&&(0,t.jsxs)("div",{style:{marginTop:4},children:[(0,t.jsx)("div",{style:{fontSize:9,fontWeight:700,color:"#888",letterSpacing:.5,marginBottom:4},children:"STRATEGIC VALUE"}),h.map((e,n)=>(0,t.jsxs)("div",{style:{display:"flex",gap:6,alignItems:"flex-start",padding:"2px 0",fontSize:10,color:"#bbb"},children:[(0,t.jsx)("span",{style:{fontSize:11,lineHeight:1},children:e.icon}),(0,t.jsx)("span",{style:{color:e.color},children:e.text})]},n))]}),e.connected&&(0,t.jsxs)("div",{style:{fontSize:10,color:"#00ff88",fontWeight:600},children:["✓ Already connected — contributes as mutual for others at ",l?.name]})]})]})}e.s(["default",0,function(){return(0,t.jsx)(a.default,{children:(0,t.jsx)(n.Suspense,{children:(0,t.jsx)(U,{})})})}],85957)},18566,(e,t,n)=>{t.exports=e.r(76562)}]);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
self.__MIDDLEWARE_MATCHERS = [
|
|
2
|
+
{
|
|
3
|
+
"regexp": "^(?:\\/(_next\\/data\\/[^/]{1,}))?\\/api(\\.json|\\.rsc|\\.segments\\/.+\\.segment\\.rsc)?[\\/#\\?]?$",
|
|
4
|
+
"originalSource": "/api"
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"regexp": "^(?:\\/(_next\\/data\\/[^/]{1,}))?\\/api(?:\\/((?!data\\/import$).*))(\\.json|\\.rsc|\\.segments\\/.+\\.segment\\.rsc)?[\\/#\\?]?$",
|
|
8
|
+
"originalSource": "/api/((?!data/import$).*)"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"regexp": "^(?:\\/(_next\\/data\\/[^/]{1,}))?\\/avatars(?:\\/((?:[^\\/#\\?]+?)(?:\\/(?:[^\\/#\\?]+?))*))?(\\.json|\\.rsc|\\.segments\\/.+\\.segment\\.rsc)?[\\/#\\?]?$",
|
|
12
|
+
"originalSource": "/avatars/:path*"
|
|
13
|
+
}
|
|
14
|
+
];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB()
|
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,304 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.3.0] - 2026-09-26
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- **0.3.0-beta.1, promoted: this is now the Mac app and npm package everyone gets.** It adds:
|
|
13
|
+
- **Settings**, with **Updates** there too. The Mac app now updates itself: *Install and restart*, with no Terminal.
|
|
14
|
+
- **Your sector**, a directory of 49 sectors suggested from your own network. Everyone starts from the same neutral company scores.
|
|
15
|
+
- **Your data:** see where your network lives, save a copy, and move it to another computer.
|
|
16
|
+
- **The scanner's Python inside the Mac app,** so scanning needs nothing installed.
|
|
17
|
+
- **Two security fixes.**
|
|
18
|
+
|
|
19
|
+
The details are under 0.3.0-beta.1 below.
|
|
20
|
+
- **The download page** says the scanner's Python comes with the Mac app, offers *Set up the scanner* for `npx`, and gives the new size (about 195–210 MB).
|
|
21
|
+
- **Updating from 0.2.1 or older:** use the Terminal line or the download page one last time. From 0.3.0 on, it's *Install and restart* in Settings.
|
|
22
|
+
|
|
23
|
+
## [0.3.0-beta.1] - 2026-09-26 (beta: a pre-release, never installed automatically)
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- **The Mac app scans with nothing to install.** It carries its own Python (3.12) with the
|
|
27
|
+
scanner's packages already inside it, so the Scan page's first step is ticked from the
|
|
28
|
+
start: nothing to install, nothing to click, and setting up needs no internet. Scanning
|
|
29
|
+
still needs Google Chrome. The download grows by about 22 MB, to about 220 MB.
|
|
30
|
+
Playwright's own copy of Node isn't duplicated: it runs on the one the app already has.
|
|
31
|
+
The Python inside is signed like the rest of the app, uses only its own packages (your
|
|
32
|
+
own Python settings, such as `PYTHONPATH`, don't reach it), and never writes into the
|
|
33
|
+
app; nor does a scan on another Python. If macOS ever won't run it, the Scan page says
|
|
34
|
+
so and offers the other way to set the scanner up, and the app doesn't try it again
|
|
35
|
+
until you restart it, so a warning from macOS about it doesn't keep coming back.
|
|
36
|
+
- **Set up the scanner** (`npx six-degrees`, or from source). On a computer with no Python
|
|
37
|
+
the scanner can use (none at all, one older than 3.10, or Ubuntu's without
|
|
38
|
+
`python3-venv`), the Scan page no longer ends at "install it from python.org". One
|
|
39
|
+
button downloads a private copy of Python 3.12 from GitHub (python-build-standalone,
|
|
40
|
+
24 to 33 MB) into your data folder, checks it against a checksum built into Six Degrees
|
|
41
|
+
before unpacking anything, and installs the scanner's packages into it, with the
|
|
42
|
+
download's progress on the page. Only when you click it, and Stop stops it. Nothing
|
|
43
|
+
outside your data folder changes, and neither the Python nor the packages ever go into
|
|
44
|
+
a copy of your network. A stopped setup carries on from the Python already downloaded.
|
|
45
|
+
With Python 3.10 to 3.14 installed, Install works as before.
|
|
46
|
+
- **Settings.** A new page, from the ⚙ button beside the bell or *Six Degrees → Settings…*
|
|
47
|
+
(⌘,). It's the new home for **Updates**, and it shows which version this is and where
|
|
48
|
+
your network is kept. What you choose there is saved with your network, so it travels
|
|
49
|
+
with your data. *Check for Updates…* in the menu opens it and runs the check; the Scan
|
|
50
|
+
page links to it.
|
|
51
|
+
- **Your sector (Settings).** Pick up to three sectors you work in and how much to lean
|
|
52
|
+
toward them. A pick is one of twelve broad industries or one of 49 narrower sectors from a
|
|
53
|
+
built-in directory (Dental, Real Estate, Software & SaaS, Insurance, K-12 Education,
|
|
54
|
+
Beauty & Personal Care, Agriculture & Farming, Veterinary & Animal Care, Social Work &
|
|
55
|
+
Human Services, Security Services…): open an industry to see its sectors, search by a job,
|
|
56
|
+
a kind of business or a company ("dentist", "bakery", "Stripe"), or take a sector
|
|
57
|
+
suggested from your own network ("Dental: 42 people at 17 companies"). An industry
|
|
58
|
+
includes its sectors: it counts any company in one of its sectors, so Healthcare & Biotech
|
|
59
|
+
takes in a practice only the directory calls dental, and a company whose one industry the
|
|
60
|
+
built-in list or the company's own name gives. Not one known only from its people's job
|
|
61
|
+
titles: "Recruiter at Acme Widgets" doesn't make Acme a consulting firm, nor "Software
|
|
62
|
+
Engineer at Pinecrest Foods" a tech company (Paths still colours them by what their people
|
|
63
|
+
say). A directory sector goes by a fixed list of words, as whole words, in the company's
|
|
64
|
+
name or in the headlines of at least half of the people you know there; for a one-person
|
|
65
|
+
company, that person decides. Ten sectors are work every kind of company has (HR &
|
|
66
|
+
Recruiting, Marketing & Advertising, PR & Communications, Accounting & Tax, Legal,
|
|
67
|
+
Management Consulting, Software & SaaS, AI & Data, Cybersecurity, Security Services): for
|
|
68
|
+
those a job title in a headline doesn't count, so "Recruiter at Acme Widgets" doesn't make
|
|
69
|
+
Acme a recruiting firm and "Software Engineer at Chase" doesn't make a bank a software
|
|
70
|
+
company; the company's name ("Acme Staffing", "Smith CPA") or a kind of firm ("staffing
|
|
71
|
+
agency", "law firm", "SaaS") does. Nor do the industry words beside such a job ("University
|
|
72
|
+
Recruiter", "Insurance Defense Attorney", "Dental Marketing Manager"). The lists name only
|
|
73
|
+
companies known across the country, and schools by their names, not their short names
|
|
74
|
+
(UCF, NYU): a regional company or a school is placed by the words in its name and its
|
|
75
|
+
people's headlines, like everything else. There's no AI and nothing is sent anywhere: the
|
|
76
|
+
same words give the same answer on every computer, and anyone can add to the list. Companies in your sectors get +1 ("lean") or +2 ("strong") on their score,
|
|
77
|
+
once however many of your picks they're in, never above 10 and never on a score you set on
|
|
78
|
+
Paths → Scores, so the people there rank higher; the working names the sector ("4 + 1 your
|
|
79
|
+
sector: Dental"). It lifts companies, not what people claim: a reach bonus at an unknown
|
|
80
|
+
company stays halved. Before you save, it shows how many companies and people would move,
|
|
81
|
+
with examples; saving rescores everyone and reports the same count, and turning it off
|
|
82
|
+
gives back exactly the scores from before. When an update changes the directory's words,
|
|
83
|
+
scores that use it are redone on the next load. It applies to networks you've scanned: a
|
|
84
|
+
CSV import and the sample network aren't re-weighted or counted in the suggestions, and
|
|
85
|
+
the page says so when one is open. Tiers still rank how reachable someone is, not people.
|
|
86
|
+
The profile's *Your Sectors* now shows what you picked (it was always empty), and Paths →
|
|
87
|
+
Scores marks the companies your sector lifted. `/paths?tab=scores` opens Paths on its
|
|
88
|
+
Scores tab.
|
|
89
|
+
- **Settings → Your data.** Where your network is kept, with *Copy the path* and *Show in
|
|
90
|
+
Finder*; what it takes up (your network, profile photos, backups); every backup with its
|
|
91
|
+
date and why it was made; and whether a LinkedIn sign-in is kept here. The folder can't be
|
|
92
|
+
moved from the app, and the page says why.
|
|
93
|
+
- **Move your network to another computer.** *Save a copy of my network* makes one
|
|
94
|
+
`.sixdegrees` file: your network, your settings, the scanner's progress, skip lists and
|
|
95
|
+
LinkedIn budget, and the profile photos of the people in it unless you untick them. Your
|
|
96
|
+
LinkedIn sign-in is never in it; you sign in again on the new computer. There, *Import*
|
|
97
|
+
checks the file first and changes nothing if it isn't whole and undamaged, from this
|
|
98
|
+
version or an older one. It replaces the network there (the two are never merged, and a
|
|
99
|
+
network that has people asks you to confirm how many it replaces) the next time Six
|
|
100
|
+
Degrees starts, after keeping a copy of what was there in `backups/`; the README says how
|
|
101
|
+
to put it back. The LinkedIn search budget belongs to the account, so that computer keeps
|
|
102
|
+
its own: searches made on either computer still count, and a pause on scanning stays. The
|
|
103
|
+
Mac app finishes with *Restart now*; with `npx six-degrees`, stop it and start it again.
|
|
104
|
+
Refused while a scan, or setting up the scanner, runs (it says which), scans wait until
|
|
105
|
+
the import is finished, and the import waits while another copy of Six Degrees has the
|
|
106
|
+
same folder open.
|
|
107
|
+
- **Install and restart, in the Mac app: updating without Terminal.** When *Check for
|
|
108
|
+
Updates…* finds a newer version, one more click installs it. The app downloads that
|
|
109
|
+
release from GitHub (about 220 MB), checks it against the release's published checksums
|
|
110
|
+
and checks that the app's code signature is intact, and gets it ready while you keep
|
|
111
|
+
working. Then it closes, puts the new version in its place and opens it on Settings,
|
|
112
|
+
which says how it went ("Updated to 0.2.2"). Your network isn't touched, and the new
|
|
113
|
+
version backs it up before it opens it.
|
|
114
|
+
- Nothing is downloaded until you click Install, and it never happens by itself. It
|
|
115
|
+
installs the version the check showed you; if a newer one came out in between, it asks
|
|
116
|
+
you to check again.
|
|
117
|
+
- If the new version can't be put in place, won't open, or closes before its first page
|
|
118
|
+
appears, your previous version is put back and reopened, and Settings says why. Once
|
|
119
|
+
the new version has started, the previous one is kept, zipped, in
|
|
120
|
+
`~/Library/Caches/Six Degrees` until the next update: the way back if the new one
|
|
121
|
+
misbehaves later.
|
|
122
|
+
- While it swaps the app, it stops only the app's own programs. A Terminal or an editor
|
|
123
|
+
open in the app's folder is left alone.
|
|
124
|
+
- When the app can't replace itself (it's running from the disk image, from a folder your
|
|
125
|
+
user can't change, another user installed it or has it open, or your network is kept
|
|
126
|
+
inside the app), it says why and what to do. Where the Terminal line helps, it gives
|
|
127
|
+
you the line and says what it will do; where the line would delete your network, it
|
|
128
|
+
doesn't offer it. The npm and source copies keep their Terminal lines.
|
|
129
|
+
- Copies of 0.2.1 and older don't have the button: update them with the Terminal line
|
|
130
|
+
once more.
|
|
131
|
+
|
|
132
|
+
### Changed
|
|
133
|
+
- The Scan page's first step is now **Set up the scanner**. When it can't use this
|
|
134
|
+
computer's Python, it says which one it found and why. Install no longer updates pip
|
|
135
|
+
first: everything it downloads is a pinned file. It leaves out pip settings that would
|
|
136
|
+
put the packages somewhere else (`PIP_TARGET`, `PIP_PREFIX`, `PIP_ROOT`, `PIP_USER`;
|
|
137
|
+
your index, proxy and certificate settings still apply), and it checks that the scanner
|
|
138
|
+
can load them before it says it has finished.
|
|
139
|
+
- **The scanner's Python packages are pinned**: exact versions (Playwright 1.63.0, requests
|
|
140
|
+
2.34.2, Pillow 12.3.0 and everything they need) and the checksum of every file pip may
|
|
141
|
+
install. Only ready-built files (wheels), so nothing is built from source on your
|
|
142
|
+
computer, and pip refuses any file that isn't the one pinned. They need Python 3.10 to
|
|
143
|
+
3.14 (the newest Playwright needs 3.10, and 3.14 is the newest the pinned files are built
|
|
144
|
+
for); a Python that already has the scanner's packages keeps working as it is.
|
|
145
|
+
- **The Queue and the person panel go by company scores, not a list of names.** Both kept
|
|
146
|
+
their own list of one person's favourite companies (Snap, Polymarket, Whatnot…), matched
|
|
147
|
+
anywhere in a headline: "Metadata Analyst" counted as Meta, "Snapdragon" as Snap, and an
|
|
148
|
+
ex-Googler as someone at Google. Now the Queue adds its +1 when the company someone's
|
|
149
|
+
score is built on scores 8 or more, once, and the panel's "top-tier company" and "former"
|
|
150
|
+
notes name a company that scores 8 or more, with its score: the one the score was built
|
|
151
|
+
on, when someone has two roles alike. That's the curated list's major companies and up, or
|
|
152
|
+
any company you score that high on Paths → Scores or lift there with *Your sector*.
|
|
153
|
+
- **Built-in company scores are the same for everyone.** The built-in list of well-known
|
|
154
|
+
companies, which every network's scores start from, held some personal and regional
|
|
155
|
+
picks: Snap at 9 as "home turf", UCF at 5 as a "local institution", and a group of 6s
|
|
156
|
+
from one network and one region. One written rule now decides who is on it: companies most US
|
|
157
|
+
professionals would recognise (household names, Fortune 500-sized companies, top
|
|
158
|
+
investment, consulting, law and accounting firms, frontier AI labs, top national
|
|
159
|
+
universities), scored on one scale from 7 to 10. Snap goes from 9 to 8, like Pinterest,
|
|
160
|
+
Reddit and X, and MrBeast from 8 to 7. 32 companies leave the list, among them UCF, the
|
|
161
|
+
University of Florida, AdventHealth, Polymarket, Kalshi and Anduril; they're estimated from
|
|
162
|
+
your network like any other company, and you can score any of them on Paths → Scores. If
|
|
163
|
+
your scanned network had people at a company whose score changed, Paths → Scores offers
|
|
164
|
+
once to keep the old scores as your own: keep all, choose, or no thanks. It offers each old
|
|
165
|
+
score only for its own company's names (a Snap-on person isn't counted under Snap), and
|
|
166
|
+
closes on its own when your network has nothing to offer. Not for a new database, a CSV
|
|
167
|
+
import or the sample. The words that guess a company's industry lose the same kind of
|
|
168
|
+
picks: "UCF" (education), "Snap", "Lens" and "AR" (media; "AR Specialist" is accounts
|
|
169
|
+
receivable), Polymarket, Anduril, Sandia and Whatnot ("whatnot" is also a word), and
|
|
170
|
+
"growth", a job title: "Head of Growth at Acme Software" works at a software company, and
|
|
171
|
+
"Summit Growth Equity" is an investment firm, not media ("growth marketing" is still
|
|
172
|
+
marketing). Your network is rescored once, automatically, on the first load after
|
|
173
|
+
updating.
|
|
174
|
+
- **The reach bonus counts the top award of every field.** It named four awards, from
|
|
175
|
+
advertising, TV, music and the web (Cannes Lions, the Emmys, the Grammys, the Webbys), so
|
|
176
|
+
a Pulitzer, an Oscar, a Nobel Prize or an Olympic medal earned nothing. Now it's the top
|
|
177
|
+
honour of each field: the Nobel, the Pulitzer, the Peabody, the Emmy, the Grammy, the
|
|
178
|
+
Oscar, the Tony, the Webby, the Clio and Cannes Lions, the James Beard, the Turing Award,
|
|
179
|
+
the Fields Medal, the Pritzker Prize, MacArthur Fellows, Rhodes Scholars, Olympians and
|
|
180
|
+
Paralympians, as well as "award-winning" and "prize-winning". A name that is also a
|
|
181
|
+
company's or a person's counts only as a claim ("Oscar-winning", "Tony Award", "Emmy
|
|
182
|
+
nominee"): Oscar Health, Peabody Energy and Clio get nothing, and "Emmy" or "Grammy"
|
|
183
|
+
anywhere in a headline no longer counts on its own. Your network is rescored once,
|
|
184
|
+
automatically, on the first load after updating; stored scores now carry a fingerprint of
|
|
185
|
+
scoring's rules as well as its lists, so a later change to them rescores the same way.
|
|
186
|
+
- **Two industries have plainer names.** "Finance, VC & Crypto" is "Finance & Investing"
|
|
187
|
+
and "Marketing, Media & Creator" is "Marketing & Media", in Settings, Paths and the
|
|
188
|
+
working beside a score. Crypto and the creator economy are sectors of their own in the
|
|
189
|
+
directory (Crypto & Web3, Creator Economy). What you picked stays picked.
|
|
190
|
+
- **The built-in company list reaches well beyond tech and finance.** 112 companies most US
|
|
191
|
+
professionals would recognise join it, taken from named sources so anyone can check the
|
|
192
|
+
choice: the household names of the Fortune 100 (CVS Health, Costco, Ford, UPS, State Farm,
|
|
193
|
+
Verizon, ExxonMobil…); the largest household names in health care, retail, food, hotels,
|
|
194
|
+
autos, airlines, telecoms, energy, shipping and news (Kaiser Permanente, Mayo Clinic,
|
|
195
|
+
McDonald's, Marriott, Honda, Delta, DHL, The New York Times…); nine of the ten largest US
|
|
196
|
+
law firms (Kirkland & Ellis, Latham & Watkins…); the largest private equity firms
|
|
197
|
+
(Blackstone, KKR, Apollo); and the top 20 national universities (Princeton, Yale, Johns
|
|
198
|
+
Hopkins…). They're scored on the same 7 to 10 scale as the companies already on it.
|
|
199
|
+
Nothing already on the list changes, so there's nothing to keep; your network is rescored
|
|
200
|
+
once, automatically, on the first load after updating. "Home Depot" now counts as a
|
|
201
|
+
company: it used to be dropped along with phrases like "at home".
|
|
202
|
+
- **Each company has one industry, used everywhere.** The curated list now names each
|
|
203
|
+
company's industry, so Adobe, Pfizer or MIT (no industry word in the name) no longer
|
|
204
|
+
take whatever their people's headlines say. Otherwise the name decides, else what
|
|
205
|
+
most of the people there say; a tie stays unclear. Paths' colours, the Scores list and
|
|
206
|
+
the "not for schools" rule in the company estimate now agree, where before each person's
|
|
207
|
+
own headline could put the same company in a different industry. Your network is
|
|
208
|
+
rescored once, automatically, on the first load after updating.
|
|
209
|
+
|
|
210
|
+
### Removed
|
|
211
|
+
- **The retired SQL scorers.** `scripts/score_new_connections.sql`, the hosted-era scoring
|
|
212
|
+
model retired in 0.1.10, still shipped inside the Mac app and the npm package, headed
|
|
213
|
+
"CANONICAL SCORER" and holding the old list's personal picks. Nothing read it (imports
|
|
214
|
+
score with `lib/scoring.js`). It and its repo-only twin, `scripts/score-connections.sql`,
|
|
215
|
+
are deleted; git history keeps them.
|
|
216
|
+
|
|
217
|
+
### Fixed
|
|
218
|
+
- **Students and school clubs read the same at every school.** The title rules named two
|
|
219
|
+
schools, UCF and UF: "President, UCF Marketing Club" counted as a student's club role and
|
|
220
|
+
"CS @ UCF" as a student, while "VP, NYU Finance Society" counted as a VP and "CS @ NYU" as
|
|
221
|
+
someone working at NYU. A school's short name in capitals (UCF, NYU, USC, BYU…) now counts
|
|
222
|
+
for every school, and an alumni club or a parents' association is no longer taken for a
|
|
223
|
+
student club. What that costs: a short name is two to four capitals that start or end with
|
|
224
|
+
a U, so companies and unions that look like one are set aside by name (the curated list's
|
|
225
|
+
companies, such as UPS, and UBS, UFC, UPMC, UnitedHealth's UHG and UHC, UA, UL, ULA, UTC,
|
|
226
|
+
the UAW, USW, SEIU, UFCW and UFT): "Finance @ UBS" works in finance, and "President, UAW
|
|
227
|
+
Local 600 Chapter" leads a union local. A school whose short name is on that list isn't read
|
|
228
|
+
from it; with a short name only a club or a society counts as a school's, or an association
|
|
229
|
+
named for a field of study ("USC Trojan Marketing Association"), so a chapter named only by
|
|
230
|
+
one ("President, UCF Chapter of IEEE") reads as the title it says; and a company's short name
|
|
231
|
+
that isn't on the list still reads as a school's in "Marketing @ …".
|
|
232
|
+
- **Companies that share a name with a well-known one are themselves.** The curated list's
|
|
233
|
+
names matched anything that started with them: Snap-on, Snap Finance and Specs Optical
|
|
234
|
+
counted as Snap, Harvard Pilgrim Health Care and Stanford Health Care as the universities,
|
|
235
|
+
Kellogg Brown & Root as Kellanova, Fidelity National Financial and Fidelity Bank as
|
|
236
|
+
Fidelity, Warner Music Group as Warner Bros. Discovery, J&J Snack Foods as Johnson &
|
|
237
|
+
Johnson, Toyota of Orlando and Coca-Cola Consolidated as the automaker and Coca-Cola, Citi
|
|
238
|
+
Trends as Citi, Merrill Gardens as Bank of America and Merck Millipore as Merck. A name
|
|
239
|
+
other companies share now matches only in its own company's forms ("Snap Inc.", "Harvard
|
|
240
|
+
Business School"); a dealership, a bottler, a venue or a company spun off keeps its own
|
|
241
|
+
name. So does a credential, a program or gig work on a company's platform, which used to
|
|
242
|
+
read as a job there when written first in a headline: "AWS Certified Solutions Architect"
|
|
243
|
+
was a role at Amazon (10), and "Uber Driver", "Airbnb Superhost", "Twitch Streamer",
|
|
244
|
+
"LinkedIn Top Voice" and "Google Alum" were at theirs. The sector directory reads names the
|
|
245
|
+
same way. Best Buy and Best Western count as companies (they were dropped with "at best"),
|
|
246
|
+
and so do Home Instead and Home Chef (dropped with "at home"). Chase Corporation and
|
|
247
|
+
Merrill Corporation aren't read as the banks once "Corporation" is trimmed, and a name
|
|
248
|
+
with initials is read in full: "J.P. Morgan" was cut to "J.P" and matched nothing, and
|
|
249
|
+
"J. Crew", "T. Rowe Price", "U.S. Bank" and "St. Jude Children's Research Hospital" lost
|
|
250
|
+
everything after the first full stop.
|
|
251
|
+
- **Paths groups people under the companies their scores are built on.** It merged
|
|
252
|
+
company names by a list of its own, which also folded other companies in: Oxford,
|
|
253
|
+
Hartford and Bradford counted as Ford, Bainbridge as Bain, and Mitsubishi UFJ, a bank, as
|
|
254
|
+
"Mitsubishi Power". Paths now names each company as the score does, from the one built-in
|
|
255
|
+
list, in its bubbles, its Companies list and its ways in; the score itself no longer reads
|
|
256
|
+
Mitsubishi's bank, lender or landlord as Mitsubishi. The launch page no longer claims "80+
|
|
257
|
+
company normalizations".
|
|
258
|
+
- **A refresh's notifications count who is new, and who scored high.** New connections were
|
|
259
|
+
the ones missing from a lookup of the first hundred, so a refresh of known people past a
|
|
260
|
+
hundred announced "10 new connections found!", and genuinely new ones were never announced.
|
|
261
|
+
"High-value connection" went by famous names anywhere in the headline ("Metadata Engineer",
|
|
262
|
+
"Engineer at Snap-on"). Now new means added by that refresh, and high-value means the model
|
|
263
|
+
scored them S or A.
|
|
264
|
+
- **The launch page's formula** is the one the app scores with, `T × (0.45 + 0.055 × C) + R +
|
|
265
|
+
B`, with S from 7.5. It showed the sum retired in 0.1.10.
|
|
266
|
+
- **The launch page shows the sample network's numbers, not one person's.** Its counters,
|
|
267
|
+
degree counts and feature cards were one real network's (2,438 connections, 25 bridges,
|
|
268
|
+
798 recommendations…) shown as if they were the app's, and its footer named a company. They
|
|
269
|
+
are now counted from the invented sample network that comes with the app (873 connections,
|
|
270
|
+
14 bridges, 748 people, 19 companies), and the page says so; the footer says the app is
|
|
271
|
+
open source (MIT). Its S tier card said 7.0+; S starts at 7.5. The public demo's profile no
|
|
272
|
+
longer names a company either.
|
|
273
|
+
- **Paths → Scores misstated the company weight.** It runs from 0.615 when no company is
|
|
274
|
+
found, not 0.56, up to 1.0 for a company scored 10.
|
|
275
|
+
- **Schools named like a company on the curated list were scored as that company.**
|
|
276
|
+
"Kellogg School of Management" counted as Kellanova (7), "Warner University" as Warner
|
|
277
|
+
Bros. Discovery (8), "Campbell University" as Campbell's (7) and "Chase College of Law" as
|
|
278
|
+
JPMorgan Chase (9). A name that says school, college or university now only matches a
|
|
279
|
+
school on the list. Bain Capital, a private equity firm, has its own entry (finance, still
|
|
280
|
+
9) instead of being read as Bain & Company (consulting).
|
|
281
|
+
- **A relative `--data-dir` stays where you meant it.** `npx six-degrees --data-dir
|
|
282
|
+
my-network` used to keep that network inside npm's own cache (the server runs from the
|
|
283
|
+
package's folder), where clearing the cache deleted it; the Mac app looked for it inside
|
|
284
|
+
the app. It's now the folder from where you ran the command, the home folder when the
|
|
285
|
+
Mac app is opened with `open`, and `--data-dir=~/copy` means your home folder too.
|
|
286
|
+
- **No "Six Degrees stopped" error when something else closes the app.** When the
|
|
287
|
+
installer (or logging out) stops a running copy, the app's server ends with code 143
|
|
288
|
+
rather than by the signal, and the Mac app took any exit code for a crash. It now quits
|
|
289
|
+
quietly; a real crash is still reported.
|
|
290
|
+
|
|
291
|
+
### Security
|
|
292
|
+
- **Pages on other local ports can no longer send the app commands.** The check that refuses
|
|
293
|
+
writes from other websites trusted the browser's "same-site" label. A site ignores the
|
|
294
|
+
port, so a page served by any other app or dev server on `127.0.0.1` counted as the same
|
|
295
|
+
site and could POST to `/api/update` and `/api/scraper`. A same-site write must now carry
|
|
296
|
+
an `Origin` that is exactly this app's host and port. The app's own pages are unaffected.
|
|
297
|
+
- **Websites can no longer read or change the network through DNS rebinding.** A site can
|
|
298
|
+
make its own domain point at `127.0.0.1`; the browser then treats the app as that site's
|
|
299
|
+
own origin, so the page could read `/api/network` and the photos, and send writes. While
|
|
300
|
+
the app is bound to loopback, requests to `/api` and `/avatars` must now be addressed to
|
|
301
|
+
`127.0.0.1`, `localhost` or `[::1]`; any other name gets a 421.
|
|
302
|
+
- The four new actions in Settings → Your data (save a copy, import, restart, show the
|
|
303
|
+
folder) are gated like the routes that delete data or start processes: never reachable
|
|
304
|
+
from another machine. An imported file is treated as untrusted and checked in full before
|
|
305
|
+
anything changes ([SECURITY.md](SECURITY.md)).
|
|
306
|
+
|
|
9
307
|
## [0.2.1] - 2026-09-25
|
|
10
308
|
|
|
11
309
|
### Added
|