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
|
@@ -1,37 +1,62 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useState, useEffect } from 'react';
|
|
4
|
+
import { Section, Body, Mono, Status, Btn, LINE } from './ui';
|
|
4
5
|
|
|
5
6
|
// Nothing here runs on its own. The spec forbids a silent update check, and
|
|
6
7
|
// this respects that: the first network call happens when someone presses
|
|
7
8
|
// "Check for updates", here or in the Mac app's menu (which opens this page at
|
|
8
|
-
// /
|
|
9
|
-
// only reads the local state.
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
// /settings?check=updates — the same click, made from the menu). Loading the
|
|
10
|
+
// panel only reads the local state.
|
|
11
|
+
//
|
|
12
|
+
// In the Mac app, installing is a second, separate click ("Install and
|
|
13
|
+
// restart"). Nothing is downloaded before it.
|
|
12
14
|
|
|
13
15
|
export default function UpdatePanel() {
|
|
14
16
|
const [local, setLocal] = useState(null);
|
|
17
|
+
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
fetch('/api/update').then((r) => r.json()).then(setLocal).catch(() => {});
|
|
20
|
+
}, []);
|
|
21
|
+
|
|
22
|
+
if (!local) return null;
|
|
23
|
+
if (local.installed) return <InstalledUpdates local={local} />;
|
|
24
|
+
return <GitUpdates local={local} />;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
async function post(body) {
|
|
28
|
+
const r = await fetch('/api/update', {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: { 'Content-Type': 'application/json' },
|
|
31
|
+
body: JSON.stringify(body),
|
|
32
|
+
});
|
|
33
|
+
const d = await r.json().catch(() => ({}));
|
|
34
|
+
return { ok: r.ok, d };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// ── a git checkout ────────────────────────────────────────────────────────────
|
|
38
|
+
// `git fetch` and `git pull`, exactly as you would type them.
|
|
39
|
+
function GitUpdates({ local }) {
|
|
15
40
|
const [result, setResult] = useState(null);
|
|
16
41
|
const [busy, setBusy] = useState(null);
|
|
17
42
|
const [error, setError] = useState(null);
|
|
18
43
|
const [done, setDone] = useState(null);
|
|
19
44
|
|
|
45
|
+
// The menu's "Check for Updates…" runs its check here too.
|
|
20
46
|
useEffect(() => {
|
|
21
|
-
|
|
47
|
+
if (new URLSearchParams(window.location.search).get('check') !== 'updates') return;
|
|
48
|
+
document.getElementById('updates')?.scrollIntoView({ block: 'center' });
|
|
49
|
+
call('check');
|
|
50
|
+
window.history.replaceState(null, '', window.location.pathname);
|
|
51
|
+
// Runs once, when the panel appears.
|
|
22
52
|
}, []);
|
|
23
53
|
|
|
24
54
|
async function call(action) {
|
|
25
55
|
setBusy(action);
|
|
26
56
|
setError(null);
|
|
27
57
|
try {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
headers: { 'Content-Type': 'application/json' },
|
|
31
|
-
body: JSON.stringify({ action }),
|
|
32
|
-
});
|
|
33
|
-
const d = await r.json();
|
|
34
|
-
if (!r.ok) {
|
|
58
|
+
const { ok, d } = await post({ action });
|
|
59
|
+
if (!ok) {
|
|
35
60
|
setError(d.error || 'Something went wrong.');
|
|
36
61
|
if (d.dirty) setResult({ dirty: d.dirty });
|
|
37
62
|
return;
|
|
@@ -45,23 +70,8 @@ export default function UpdatePanel() {
|
|
|
45
70
|
}
|
|
46
71
|
}
|
|
47
72
|
|
|
48
|
-
if (!local) return null;
|
|
49
|
-
|
|
50
|
-
if (local.installed) return <InstalledUpdates local={local} />;
|
|
51
|
-
|
|
52
|
-
if (local.supported === false) {
|
|
53
|
-
return (
|
|
54
|
-
<Wrap>
|
|
55
|
-
<Title>Updates</Title>
|
|
56
|
-
<Body>{local.reason}</Body>
|
|
57
|
-
</Wrap>
|
|
58
|
-
);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
73
|
return (
|
|
62
|
-
<
|
|
63
|
-
<Title>Updates</Title>
|
|
64
|
-
|
|
74
|
+
<Section id="updates" title="Updates">
|
|
65
75
|
{done ? (
|
|
66
76
|
<>
|
|
67
77
|
<Body>
|
|
@@ -79,7 +89,7 @@ export default function UpdatePanel() {
|
|
|
79
89
|
You are on <Mono>{local.sha}</Mono> — “{local.subject}”.
|
|
80
90
|
</Body>
|
|
81
91
|
|
|
82
|
-
{result && result.behind === 0 && <Status ok>You’re up to date.</Status>}
|
|
92
|
+
{result && result.behind === 0 && <Status tone="ok">You’re up to date.</Status>}
|
|
83
93
|
|
|
84
94
|
{result && result.behind > 0 && (
|
|
85
95
|
<>
|
|
@@ -98,7 +108,7 @@ export default function UpdatePanel() {
|
|
|
98
108
|
</Body>
|
|
99
109
|
)}
|
|
100
110
|
|
|
101
|
-
<
|
|
111
|
+
<Row>
|
|
102
112
|
<Btn onClick={() => call('check')} disabled={!!busy}>
|
|
103
113
|
{busy === 'check' ? 'Checking…' : 'Check for updates'}
|
|
104
114
|
</Btn>
|
|
@@ -107,7 +117,7 @@ export default function UpdatePanel() {
|
|
|
107
117
|
{busy === 'pull' ? 'Updating…' : `Install ${result.behind} update${result.behind === 1 ? '' : 's'}`}
|
|
108
118
|
</Btn>
|
|
109
119
|
)}
|
|
110
|
-
</
|
|
120
|
+
</Row>
|
|
111
121
|
</>
|
|
112
122
|
)}
|
|
113
123
|
|
|
@@ -117,43 +127,98 @@ export default function UpdatePanel() {
|
|
|
117
127
|
Nothing is checked automatically and nothing about you is sent — this runs the
|
|
118
128
|
same <Mono>git fetch</Mono> and <Mono>git pull</Mono> you would type yourself.
|
|
119
129
|
</Body>
|
|
120
|
-
</
|
|
130
|
+
</Section>
|
|
121
131
|
);
|
|
122
132
|
}
|
|
123
133
|
|
|
134
|
+
// ── an installed copy ─────────────────────────────────────────────────────────
|
|
124
135
|
// The Mac app and the npm package update by installing the newer release over
|
|
125
|
-
// the top.
|
|
126
|
-
//
|
|
136
|
+
// the top. "Check for updates" asks GitHub for the newest version number, on a
|
|
137
|
+
// click only. The Mac app can then install it itself, on a second click; when
|
|
138
|
+
// it can't (or for npm), this hands over the exact line to run instead, saying
|
|
139
|
+
// what that line would do for this copy. Where it would do harm (a network
|
|
140
|
+
// kept inside the app, which the line deletes with it), it isn't offered.
|
|
141
|
+
|
|
142
|
+
const ACTIVE = ['checking', 'downloading', 'verifying', 'preparing', 'restarting'];
|
|
143
|
+
|
|
127
144
|
function InstalledUpdates({ local }) {
|
|
145
|
+
const mac = local.kind === 'mac-app';
|
|
128
146
|
const [busy, setBusy] = useState(false);
|
|
129
147
|
const [result, setResult] = useState(null);
|
|
130
148
|
const [error, setError] = useState(null);
|
|
131
149
|
const [copied, setCopied] = useState(false);
|
|
132
150
|
const [checkedAt, setCheckedAt] = useState(null);
|
|
151
|
+
const [job, setJob] = useState(local.job || null); // an install, while it runs
|
|
152
|
+
const [starting, setStarting] = useState(false);
|
|
153
|
+
const [refused, setRefused] = useState(null); // why an install couldn't start
|
|
154
|
+
const [refusedCode, setRefusedCode] = useState(null);
|
|
155
|
+
const [refusedFallback, setRefusedFallback] = useState(undefined); // the Terminal line then (see fallbackText)
|
|
156
|
+
const [gone, setGone] = useState(0); // polls that found no server: it is restarting
|
|
157
|
+
const [slow, setSlow] = useState(false);
|
|
158
|
+
|
|
159
|
+
const active = Boolean(job && ACTIVE.includes(job.phase));
|
|
160
|
+
const restarting = active && (job.phase === 'restarting' || gone > 0);
|
|
133
161
|
|
|
134
162
|
// Opened from the menu's "Check for Updates…": bring the panel into view and
|
|
135
|
-
// run the check that click asked for.
|
|
163
|
+
// run the check that click asked for. After an update the app opens here
|
|
164
|
+
// (#updates), to show how it went.
|
|
136
165
|
useEffect(() => {
|
|
137
|
-
const params = new URLSearchParams(window.location.search);
|
|
138
|
-
if (params.get('check') !== 'updates') return;
|
|
139
166
|
const panel = () => document.getElementById('updates');
|
|
167
|
+
if (window.location.hash === '#updates') panel()?.scrollIntoView({ block: 'start' });
|
|
168
|
+
if (new URLSearchParams(window.location.search).get('check') !== 'updates') return;
|
|
169
|
+
window.history.replaceState(null, '', window.location.pathname);
|
|
170
|
+
if (local.job && ACTIVE.includes(local.job.phase)) return; // an install is already under way
|
|
140
171
|
panel()?.scrollIntoView({ block: 'center' });
|
|
141
172
|
check().then(() => panel()?.scrollIntoView({ block: 'end', behavior: 'smooth' }));
|
|
142
|
-
|
|
143
|
-
|
|
173
|
+
}, [local.job]);
|
|
174
|
+
|
|
175
|
+
// Follow an install. Once it restarts, this server goes away. The next one to
|
|
176
|
+
// answer is the new version, or the old one put back; reloading shows which.
|
|
177
|
+
useEffect(() => {
|
|
178
|
+
if (!active) return undefined;
|
|
179
|
+
let alive = true;
|
|
180
|
+
const timer = setTimeout(async () => {
|
|
181
|
+
try {
|
|
182
|
+
if (restarting) {
|
|
183
|
+
const r = await fetch('/api/update', { cache: 'no-store' });
|
|
184
|
+
const d = await r.json();
|
|
185
|
+
if (!alive) return;
|
|
186
|
+
if (!d.job || d.job.id !== job.id) {
|
|
187
|
+
window.location.reload();
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
setGone(0); // the same server, still here: not restarting after all
|
|
191
|
+
setJob(d.job);
|
|
192
|
+
} else {
|
|
193
|
+
const { ok, d } = await post({ action: 'update-status' });
|
|
194
|
+
if (alive && ok && d.job) setJob(d.job);
|
|
195
|
+
}
|
|
196
|
+
} catch {
|
|
197
|
+
if (alive) setGone((n) => n + 1);
|
|
198
|
+
}
|
|
199
|
+
}, restarting ? 1500 : 600);
|
|
200
|
+
return () => { alive = false; clearTimeout(timer); };
|
|
201
|
+
}, [job, gone, active, restarting]);
|
|
202
|
+
|
|
203
|
+
// A restart takes a few seconds. After a minute, say what to do.
|
|
204
|
+
useEffect(() => {
|
|
205
|
+
if (!restarting) return undefined;
|
|
206
|
+
const timer = setTimeout(() => setSlow(true), 60000);
|
|
207
|
+
return () => clearTimeout(timer);
|
|
208
|
+
}, [restarting]);
|
|
144
209
|
|
|
145
210
|
async function check() {
|
|
146
211
|
setBusy(true);
|
|
147
212
|
setResult(null);
|
|
148
213
|
setError(null);
|
|
214
|
+
// A new check is a new start: an earlier attempt's failure no longer applies.
|
|
215
|
+
setRefused(null);
|
|
216
|
+
setRefusedCode(null);
|
|
217
|
+
setRefusedFallback(undefined);
|
|
218
|
+
setJob((j) => (j && ACTIVE.includes(j.phase) ? j : null));
|
|
149
219
|
try {
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
headers: { 'Content-Type': 'application/json' },
|
|
153
|
-
body: JSON.stringify({ action: 'check-release' }),
|
|
154
|
-
});
|
|
155
|
-
const d = await r.json();
|
|
156
|
-
if (!r.ok) setError(d.error || 'Could not check.');
|
|
220
|
+
const { ok, d } = await post({ action: 'check-release' });
|
|
221
|
+
if (!ok) setError(d.error || 'Could not check.');
|
|
157
222
|
else { setResult(d); setCheckedAt(new Date()); }
|
|
158
223
|
} catch (e) {
|
|
159
224
|
setError(e.message);
|
|
@@ -162,6 +227,35 @@ function InstalledUpdates({ local }) {
|
|
|
162
227
|
}
|
|
163
228
|
}
|
|
164
229
|
|
|
230
|
+
async function install() {
|
|
231
|
+
setStarting(true);
|
|
232
|
+
setRefused(null);
|
|
233
|
+
setRefusedCode(null);
|
|
234
|
+
setRefusedFallback(undefined);
|
|
235
|
+
setGone(0);
|
|
236
|
+
setSlow(false);
|
|
237
|
+
try {
|
|
238
|
+
const { ok, d } = await post({ action: 'install-release' });
|
|
239
|
+
if (d.job) setJob(d.job);
|
|
240
|
+
if (!ok) {
|
|
241
|
+
setRefused(d.error || 'The update could not start.');
|
|
242
|
+
setRefusedCode(d.refusal || null);
|
|
243
|
+
if ('fallback' in d) setRefusedFallback(d.fallback);
|
|
244
|
+
}
|
|
245
|
+
} catch (e) {
|
|
246
|
+
setRefused(e.message);
|
|
247
|
+
} finally {
|
|
248
|
+
setStarting(false);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
async function cancel() {
|
|
253
|
+
try {
|
|
254
|
+
const { d } = await post({ action: 'cancel-install' });
|
|
255
|
+
if (d.job) setJob(d.job);
|
|
256
|
+
} catch { /* the next poll shows where it got to */ }
|
|
257
|
+
}
|
|
258
|
+
|
|
165
259
|
async function copy() {
|
|
166
260
|
try {
|
|
167
261
|
await navigator.clipboard.writeText(local.command);
|
|
@@ -172,106 +266,199 @@ function InstalledUpdates({ local }) {
|
|
|
172
266
|
}
|
|
173
267
|
}
|
|
174
268
|
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
269
|
+
const failed = job?.phase === 'failed';
|
|
270
|
+
const canInstall = mac && result?.install?.possible;
|
|
271
|
+
// The install offered a version, and a newer one has come out since, or it
|
|
272
|
+
// was never offered one on this server: the answer is a new check, not "Try again".
|
|
273
|
+
const needsCheck = (failed && job.code === 'stale-check') || refusedCode === 'not-checked';
|
|
274
|
+
// What the Terminal line would do here (lib/updater.js terminalFallback);
|
|
275
|
+
// null for the Mac app where it must not be offered.
|
|
276
|
+
const fallback = refusedFallback !== undefined ? refusedFallback : result?.fallback;
|
|
277
|
+
// The Terminal line: always for npm and source copies, and for the Mac app
|
|
278
|
+
// whenever it can't install the update itself, or the last time it tried
|
|
279
|
+
// didn't work (so a second try that fails the same way isn't the only way),
|
|
280
|
+
// except where the line would do harm.
|
|
281
|
+
const showLine = result?.newer && (!mac || fallback)
|
|
282
|
+
&& (!canInstall || failed || refused || local.lastUpdate?.tone === 'bad');
|
|
283
|
+
const how = fallbackText({ mac, kind: local.kind, canInstall, fallback });
|
|
180
284
|
|
|
181
285
|
return (
|
|
182
|
-
<
|
|
183
|
-
<
|
|
286
|
+
<Section id="updates" title="Updates">
|
|
287
|
+
{local.lastUpdate && !active && <LastUpdate report={local.lastUpdate} />}
|
|
184
288
|
<Body>You have version <Mono>{local.version}</Mono>.</Body>
|
|
185
289
|
|
|
186
|
-
{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
You’re up to date: {result.latest.version} is the newest version.
|
|
190
|
-
{checkedAt && <span style={{ color: '#8b9a9a' }}> Checked at {checkedAt.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' })}.</span>}
|
|
191
|
-
</Status>
|
|
192
|
-
)}
|
|
193
|
-
|
|
194
|
-
{result?.newer && (
|
|
290
|
+
{active ? (
|
|
291
|
+
<Progress job={job} restarting={restarting} slow={slow} onCancel={cancel} />
|
|
292
|
+
) : (
|
|
195
293
|
<>
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
{result.latest.url && (
|
|
202
|
-
<a href={result.latest.url} target="_blank" rel="noreferrer"
|
|
203
|
-
style={{ color: '#3498DB', fontSize: 13.5 }}>
|
|
204
|
-
What changed →
|
|
205
|
-
</a>
|
|
206
|
-
)}
|
|
207
|
-
</div>
|
|
208
|
-
</>
|
|
209
|
-
)}
|
|
294
|
+
{failed && (
|
|
295
|
+
<Status tone="bad"><strong>The update didn’t finish.</strong> {job.error} Nothing was changed.</Status>
|
|
296
|
+
)}
|
|
297
|
+
{job?.phase === 'cancelled' && <Status>Cancelled. Nothing was changed.</Status>}
|
|
298
|
+
{refused && <Status tone="bad">{refused}</Status>}
|
|
210
299
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
300
|
+
{result && !result.latest && <Status>No release has been published yet.</Status>}
|
|
301
|
+
{result?.latest && !result.newer && (
|
|
302
|
+
<Status tone="ok">
|
|
303
|
+
You’re up to date: {result.latest.version} is the newest version.
|
|
304
|
+
{checkedAt && <span style={{ color: '#8b9a9a' }}> Checked at {checkedAt.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' })}.</span>}
|
|
305
|
+
</Status>
|
|
306
|
+
)}
|
|
307
|
+
|
|
308
|
+
{result?.newer && (
|
|
309
|
+
<>
|
|
310
|
+
<Body style={{ color: '#00ff88' }}>Version {result.latest.version} is available.</Body>
|
|
311
|
+
{canInstall && (
|
|
312
|
+
<>
|
|
313
|
+
<Body>
|
|
314
|
+
It downloads {result.install.size ? `about ${megabytes(result.install.size)} MB` : 'the new version'} from
|
|
315
|
+
GitHub, checks it, then closes, replaces itself and reopens. Your network isn’t touched, and a
|
|
316
|
+
backup of it is made first.
|
|
317
|
+
</Body>
|
|
318
|
+
<Row>
|
|
319
|
+
{needsCheck ? (
|
|
320
|
+
<Btn onClick={check} disabled={busy} primary>{busy ? 'Checking…' : 'Check again'}</Btn>
|
|
321
|
+
) : (
|
|
322
|
+
<Btn onClick={install} disabled={starting} primary>
|
|
323
|
+
{starting ? 'Starting…' : failed || refused ? 'Try again' : 'Install and restart'}
|
|
324
|
+
</Btn>
|
|
325
|
+
)}
|
|
326
|
+
<WhatChanged url={result.latest.url} />
|
|
327
|
+
</Row>
|
|
328
|
+
</>
|
|
329
|
+
)}
|
|
330
|
+
{mac && !canInstall && result.install?.reason && <Body>{result.install.reason}</Body>}
|
|
331
|
+
{showLine && (
|
|
332
|
+
<>
|
|
333
|
+
<Body>{how}</Body>
|
|
334
|
+
{local.testReleases ? (
|
|
335
|
+
// The line installs the real release from GitHub, not the
|
|
336
|
+
// test one, into Applications: over the copy someone uses.
|
|
337
|
+
<pre style={pre}>Not shown in test mode: it would install the real release from GitHub into Applications.</pre>
|
|
338
|
+
) : (
|
|
339
|
+
<>
|
|
340
|
+
<pre style={pre}>{local.command}</pre>
|
|
341
|
+
<Row>
|
|
342
|
+
<Btn onClick={copy} primary={!canInstall}>{copied ? 'Copied' : 'Copy'}</Btn>
|
|
343
|
+
{!canInstall && <WhatChanged url={result.latest.url} />}
|
|
344
|
+
</Row>
|
|
345
|
+
</>
|
|
346
|
+
)}
|
|
347
|
+
</>
|
|
348
|
+
)}
|
|
349
|
+
{!canInstall && !showLine && <Row><WhatChanged url={result.latest.url} /></Row>}
|
|
350
|
+
</>
|
|
351
|
+
)}
|
|
352
|
+
|
|
353
|
+
{!result?.newer && (
|
|
354
|
+
<Row>
|
|
355
|
+
<Btn onClick={check} disabled={busy}>{busy ? 'Checking…' : result ? 'Check again' : 'Check for updates'}</Btn>
|
|
356
|
+
</Row>
|
|
357
|
+
)}
|
|
358
|
+
</>
|
|
215
359
|
)}
|
|
216
360
|
|
|
217
361
|
{error && <Body style={{ color: '#ff7676' }}>{error}</Body>}
|
|
218
362
|
|
|
219
363
|
<Body style={{ fontSize: 12, color: '#667', marginTop: 12 }}>
|
|
220
364
|
Nothing is checked automatically. The button asks GitHub for the newest version
|
|
221
|
-
number and nothing about you is sent.
|
|
365
|
+
number, and nothing about you is sent.
|
|
366
|
+
{mac && ' Only a second click, Install and restart, downloads the new version.'}
|
|
222
367
|
</Body>
|
|
223
|
-
|
|
368
|
+
{local.testReleases && (
|
|
369
|
+
<Body style={{ fontSize: 12, color: '#FFD700', marginTop: 6 }}>
|
|
370
|
+
Test mode: releases are read from <Mono>{local.testReleases}</Mono> on this computer, not from GitHub.
|
|
371
|
+
</Body>
|
|
372
|
+
)}
|
|
373
|
+
</Section>
|
|
224
374
|
);
|
|
225
375
|
}
|
|
226
376
|
|
|
227
|
-
const
|
|
228
|
-
background: 'rgba(0,0,0,0.45)', border: LINE, borderRadius: 8, padding: 12,
|
|
229
|
-
margin: '8px 0 0', fontSize: 12, lineHeight: 1.7, color: '#b9c6c6',
|
|
230
|
-
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
|
|
231
|
-
whiteSpace: 'pre-wrap', maxHeight: 180, overflow: 'auto',
|
|
232
|
-
};
|
|
377
|
+
const megabytes = (bytes) => Math.max(1, Math.round(bytes / 1e6));
|
|
233
378
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
379
|
+
// What the Terminal line does, for this copy. For the Mac app that depends on
|
|
380
|
+
// where it is (lib/updater.js terminalFallback): install.sh replaces the app in
|
|
381
|
+
// Applications, and anywhere else it installs a second copy there, which only
|
|
382
|
+
// opens once this one has quit (one copy runs at a time).
|
|
383
|
+
function fallbackText({ mac, kind, canInstall, fallback }) {
|
|
384
|
+
if (!mac) {
|
|
385
|
+
return kind === 'source'
|
|
386
|
+
? 'A copy built from the source code updates by fetching the code and building it again, which it can\'t do while it runs. Stop it (Ctrl-C), then run this in the six-degrees folder. Your network stays where it is.'
|
|
387
|
+
: 'This copy runs inside the terminal that started it, so it can\'t replace itself while it runs. Stop it first (Ctrl-C), then run this to start the newest version. Your network stays where it is.';
|
|
388
|
+
}
|
|
389
|
+
if (!fallback) return null;
|
|
390
|
+
const data = fallback.dataDir
|
|
391
|
+
? ` It opens the new version on the usual data folder, not on ${fallback.dataDir}: to use that one, quit it and open it again with --data-dir, as you opened this one.`
|
|
392
|
+
: '';
|
|
393
|
+
if (fallback.mode === 'replace') {
|
|
394
|
+
return `${canInstall ? 'Or paste this into Terminal.' : 'Paste this into Terminal instead.'} It closes this app, puts the new version in its place and opens it. Your network stays where it is.${data}`;
|
|
395
|
+
}
|
|
396
|
+
return `${canInstall ? 'Or copy' : 'Copy'} this line, quit Six Degrees, then paste it into Terminal. It installs the new version at ${fallback.installsTo}, not where this copy is, and opens it: use that one from then on. Your network stays where it is.${data}`;
|
|
238
397
|
}
|
|
239
|
-
|
|
240
|
-
function
|
|
398
|
+
|
|
399
|
+
function Progress({ job, restarting, slow, onCancel }) {
|
|
400
|
+
const pct = job.total ? Math.min(100, Math.round((job.received / job.total) * 100)) : null;
|
|
401
|
+
const text = restarting ? 'Restarting… Six Degrees closes and opens again in a moment.'
|
|
402
|
+
: job.phase === 'checking' ? 'Asking GitHub for the newest version…'
|
|
403
|
+
: job.phase === 'downloading'
|
|
404
|
+
? `Downloading ${job.version}…${pct !== null ? ` ${pct}% (${megabytes(job.received)} of ${megabytes(job.total)} MB)` : ''}`
|
|
405
|
+
: job.phase === 'verifying' ? 'Checking the download…'
|
|
406
|
+
: 'Preparing the new version…';
|
|
241
407
|
return (
|
|
242
|
-
<div role="status" style={{
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
408
|
+
<div role="status" aria-live="polite" style={{ marginTop: 12 }}>
|
|
409
|
+
<Body style={{ color: '#e8e8ee' }}>{text}</Body>
|
|
410
|
+
{job.phase === 'downloading' && pct !== null && (
|
|
411
|
+
<div role="progressbar" aria-valuemin={0} aria-valuemax={100} aria-valuenow={pct} aria-label="Download"
|
|
412
|
+
style={{ height: 6, borderRadius: 3, background: 'rgba(255,255,255,0.08)', marginTop: 10, overflow: 'hidden', maxWidth: 420 }}>
|
|
413
|
+
<div style={{ width: `${pct}%`, height: '100%', background: 'linear-gradient(90deg, #9B59B6, #3498DB)', transition: 'width 0.4s ease' }} />
|
|
414
|
+
</div>
|
|
415
|
+
)}
|
|
416
|
+
{slow && (
|
|
417
|
+
<Body>This is taking longer than it should. If Six Degrees doesn’t open again by itself, open it from your Applications folder.</Body>
|
|
418
|
+
)}
|
|
419
|
+
{!restarting && (
|
|
420
|
+
<Row>
|
|
421
|
+
<Btn onClick={onCancel}>Cancel</Btn>
|
|
422
|
+
</Row>
|
|
423
|
+
)}
|
|
424
|
+
</div>
|
|
248
425
|
);
|
|
249
426
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
}
|
|
253
|
-
|
|
427
|
+
|
|
428
|
+
// How the last update went, shown once the app is back (for a week).
|
|
429
|
+
function LastUpdate({ report }) {
|
|
430
|
+
const when = new Date(report.at).toLocaleString([], { dateStyle: 'medium', timeStyle: 'short' });
|
|
254
431
|
return (
|
|
255
|
-
<
|
|
256
|
-
{
|
|
257
|
-
|
|
432
|
+
<Status tone={report.tone === 'ok' ? 'ok' : 'bad'}>
|
|
433
|
+
{report.text} <span style={{ color: '#8b9a9a' }}>({when})</span>
|
|
434
|
+
{report.tone === 'ok' && report.previous && (
|
|
435
|
+
<span style={{ display: 'block', fontSize: 12.5, color: '#8b9a9a', marginTop: 4 }}>
|
|
436
|
+
A copy of the version you had is kept in <Mono>{report.previous}</Mono> until the next update.
|
|
437
|
+
To go back to it, open that file and drag the app it gives you into your Applications folder.
|
|
438
|
+
</span>
|
|
439
|
+
)}
|
|
440
|
+
</Status>
|
|
258
441
|
);
|
|
259
442
|
}
|
|
260
|
-
|
|
443
|
+
|
|
444
|
+
function WhatChanged({ url }) {
|
|
445
|
+
if (!url) return null;
|
|
261
446
|
return (
|
|
262
|
-
<
|
|
263
|
-
|
|
264
|
-
</
|
|
447
|
+
<a href={url} target="_blank" rel="noreferrer" style={{ color: '#3498DB', fontSize: 13.5 }}>
|
|
448
|
+
What changed →
|
|
449
|
+
</a>
|
|
265
450
|
);
|
|
266
451
|
}
|
|
267
|
-
|
|
452
|
+
|
|
453
|
+
function Row({ children }) {
|
|
268
454
|
return (
|
|
269
|
-
<
|
|
270
|
-
padding: '9px 18px', borderRadius: 7, fontSize: 13.5, fontWeight: 650,
|
|
271
|
-
color: disabled ? '#667' : '#fff', border: LINE,
|
|
272
|
-
background: disabled ? 'rgba(255,255,255,0.05)'
|
|
273
|
-
: primary ? 'linear-gradient(135deg, #9B59B6, #3498DB)' : 'rgba(255,255,255,0.08)',
|
|
274
|
-
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
275
|
-
}}>{children}</button>
|
|
455
|
+
<div style={{ display: 'flex', gap: 10, marginTop: 12, flexWrap: 'wrap', alignItems: 'center' }}>{children}</div>
|
|
276
456
|
);
|
|
277
457
|
}
|
|
458
|
+
|
|
459
|
+
const pre = {
|
|
460
|
+
background: 'rgba(0,0,0,0.45)', border: LINE, borderRadius: 8, padding: 12,
|
|
461
|
+
margin: '8px 0 0', fontSize: 12, lineHeight: 1.7, color: '#b9c6c6',
|
|
462
|
+
fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
|
|
463
|
+
whiteSpace: 'pre-wrap', maxHeight: 180, overflow: 'auto',
|
|
464
|
+
};
|
|
@@ -20,14 +20,15 @@ export default function UserProvider({ children }) {
|
|
|
20
20
|
const [ready, setReady] = useState(false);
|
|
21
21
|
|
|
22
22
|
useEffect(() => {
|
|
23
|
-
// Demo mode: hand back a fixed identity so the app renders
|
|
24
|
-
// for everyone, with no onboarding
|
|
23
|
+
// Demo mode: hand back a fixed identity so the app renders the invented
|
|
24
|
+
// sample network (public/demo-data.json) for everyone, with no onboarding
|
|
25
|
+
// and no /api/users call. It names no company, as a CSV import doesn't.
|
|
25
26
|
if (IS_DEMO) {
|
|
26
27
|
setUserId(DEMO_USER.id);
|
|
27
28
|
setUserName(DEMO_USER.name);
|
|
28
29
|
setUserProfile({
|
|
29
30
|
name: DEMO_USER.name, headline: DEMO_USER.headline,
|
|
30
|
-
role: '', company: '
|
|
31
|
+
role: '', company: '', industry: '', sectors: [], goals: [], linkedin_url: '',
|
|
31
32
|
});
|
|
32
33
|
setReady(true);
|
|
33
34
|
return;
|