six-degrees 0.2.0 → 0.3.0-beta.1
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 +11 -11
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +11 -11
- 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 +13 -13
- package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +13 -13
- 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 +13 -13
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +11 -11
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +13 -13
- 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 +13 -13
- package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +13 -13
- 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 +13 -13
- package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +13 -13
- 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 +13 -13
- package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +13 -13
- 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 +13 -13
- package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +13 -13
- 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 +13 -13
- package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +13 -13
- 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]__0h1_f_2._.js +1 -1
- 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_import_page_1fmu6_l.js +1 -1
- 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/{static/chunks/34at5d2ifl62i.js → standalone/.next/static/chunks/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/2ot61qsv6_0eq.js +1 -0
- package/.next/standalone/.next/static/chunks/3npq5yd7c4dmn.js +2 -0
- package/.next/standalone/.next/static/frfHFnRYTA0Wjrw8oZJtY/_clientMiddlewareManifest.js +14 -0
- package/.next/standalone/AGENTS.md +10 -0
- package/.next/standalone/CHANGELOG.md +325 -0
- package/.next/standalone/CONTRIBUTING.md +14 -2
- package/.next/standalone/README.md +181 -53
- package/.next/standalone/SECURITY.md +120 -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 +268 -128
- 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 +197 -24
- 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 +40 -36
- package/.next/standalone/app/components/LegacyScoresCard.js +129 -0
- package/.next/standalone/app/components/Sidebar.js +19 -18
- package/.next/standalone/app/components/UpdatePanel.js +317 -99
- 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/import/page.js +3 -3
- package/.next/standalone/app/launch/page.js +30 -20
- package/.next/standalone/app/layout.js +2 -2
- package/.next/standalone/app/page.js +15 -2
- package/.next/standalone/app/paths/page.js +13 -5
- package/.next/standalone/app/profile/page.js +41 -186
- 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 +35 -19
- package/.next/standalone/bin/args.mjs +44 -0
- package/.next/standalone/bin/six-degrees.mjs +16 -17
- package/.next/standalone/install.sh +1 -1
- package/.next/standalone/lib/companies.js +44 -119
- package/.next/standalone/lib/csv.js +61 -27
- 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/release.js +5 -2
- 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 +10 -6
- 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 +103 -9
- package/.next/standalone/package.json +12 -11
- package/.next/standalone/public/demo-data.json +1 -1
- package/.next/standalone/scripts/apply-update.sh +482 -0
- package/.next/standalone/scripts/build-app.mjs +251 -9
- package/.next/standalone/scripts/gen-synthetic.mjs +16 -1
- package/.next/standalone/scripts/readme_buttons.py +89 -0
- package/.next/standalone/scripts/requirements.txt +106 -4
- package/.next/standalone/scripts/screenshots.py +2 -0
- 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/{standalone/.next/static/chunks/34at5d2ifl62i.js → static/chunks/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/2ot61qsv6_0eq.js +1 -0
- package/.next/static/chunks/3npq5yd7c4dmn.js +2 -0
- package/.next/static/frfHFnRYTA0Wjrw8oZJtY/_clientMiddlewareManifest.js +14 -0
- package/CHANGELOG.md +325 -0
- package/README.md +181 -53
- package/SECURITY.md +120 -10
- package/bin/args.mjs +44 -0
- package/bin/six-degrees.mjs +16 -17
- package/lib/companies.js +44 -119
- package/lib/csv.js +61 -27
- 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/release.js +5 -2
- 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 +10 -6
- 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 +12 -11
- package/public/demo-data.json +1 -1
- 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/N9wokeIiC9rUIGmzBhj6T/_clientMiddlewareManifest.js +0 -6
- package/.next/standalone/.next/static/chunks/1odow92u6wxz0.js +0 -1
- package/.next/standalone/.next/static/chunks/1wb_is4wsdm-u.js +0 -1
- package/.next/standalone/.next/static/chunks/1zmpcmngg5c7-.js +0 -2
- package/.next/standalone/.next/static/chunks/220-ne82aus0c.js +0 -44
- package/.next/standalone/.next/static/chunks/2rrf5kzx2fhin.js +0 -2
- package/.next/standalone/.next/static/chunks/2s_k9x4d0gi9h.js +0 -16
- package/.next/standalone/.next/static/chunks/3hsi90cejq2dg.js +0 -1
- package/.next/standalone/.next/static/chunks/3pfyuezyqd9ob.js +0 -1
- package/.next/standalone/.next/static/chunks/3ts-_4i6bfkh2.js +0 -1
- package/.next/standalone/scripts/score-connections.sql +0 -80
- package/.next/standalone/scripts/score_new_connections.sql +0 -77
- package/.next/static/N9wokeIiC9rUIGmzBhj6T/_clientMiddlewareManifest.js +0 -6
- package/.next/static/chunks/1odow92u6wxz0.js +0 -1
- package/.next/static/chunks/1wb_is4wsdm-u.js +0 -1
- package/.next/static/chunks/1zmpcmngg5c7-.js +0 -2
- package/.next/static/chunks/220-ne82aus0c.js +0 -44
- package/.next/static/chunks/2rrf5kzx2fhin.js +0 -2
- package/.next/static/chunks/2s_k9x4d0gi9h.js +0 -16
- package/.next/static/chunks/3hsi90cejq2dg.js +0 -1
- package/.next/static/chunks/3pfyuezyqd9ob.js +0 -1
- package/.next/static/chunks/3ts-_4i6bfkh2.js +0 -1
- package/scripts/score_new_connections.sql +0 -77
- /package/.next/standalone/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_ssgManifest.js +0 -0
- /package/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_buildManifest.js +0 -0
- /package/.next/static/{N9wokeIiC9rUIGmzBhj6T → frfHFnRYTA0Wjrw8oZJtY}/_ssgManifest.js +0 -0
|
@@ -1,35 +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
|
-
// "Check for updates"
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
// "Check for updates", here or in the Mac app's menu (which opens this page at
|
|
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.
|
|
10
14
|
|
|
11
15
|
export default function UpdatePanel() {
|
|
12
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 }) {
|
|
13
40
|
const [result, setResult] = useState(null);
|
|
14
41
|
const [busy, setBusy] = useState(null);
|
|
15
42
|
const [error, setError] = useState(null);
|
|
16
43
|
const [done, setDone] = useState(null);
|
|
17
44
|
|
|
45
|
+
// The menu's "Check for Updates…" runs its check here too.
|
|
18
46
|
useEffect(() => {
|
|
19
|
-
|
|
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.
|
|
20
52
|
}, []);
|
|
21
53
|
|
|
22
54
|
async function call(action) {
|
|
23
55
|
setBusy(action);
|
|
24
56
|
setError(null);
|
|
25
57
|
try {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
headers: { 'Content-Type': 'application/json' },
|
|
29
|
-
body: JSON.stringify({ action }),
|
|
30
|
-
});
|
|
31
|
-
const d = await r.json();
|
|
32
|
-
if (!r.ok) {
|
|
58
|
+
const { ok, d } = await post({ action });
|
|
59
|
+
if (!ok) {
|
|
33
60
|
setError(d.error || 'Something went wrong.');
|
|
34
61
|
if (d.dirty) setResult({ dirty: d.dirty });
|
|
35
62
|
return;
|
|
@@ -43,23 +70,8 @@ export default function UpdatePanel() {
|
|
|
43
70
|
}
|
|
44
71
|
}
|
|
45
72
|
|
|
46
|
-
if (!local) return null;
|
|
47
|
-
|
|
48
|
-
if (local.installed) return <InstalledUpdates local={local} />;
|
|
49
|
-
|
|
50
|
-
if (local.supported === false) {
|
|
51
|
-
return (
|
|
52
|
-
<Wrap>
|
|
53
|
-
<Title>Updates</Title>
|
|
54
|
-
<Body>{local.reason}</Body>
|
|
55
|
-
</Wrap>
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
73
|
return (
|
|
60
|
-
<
|
|
61
|
-
<Title>Updates</Title>
|
|
62
|
-
|
|
74
|
+
<Section id="updates" title="Updates">
|
|
63
75
|
{done ? (
|
|
64
76
|
<>
|
|
65
77
|
<Body>
|
|
@@ -77,7 +89,7 @@ export default function UpdatePanel() {
|
|
|
77
89
|
You are on <Mono>{local.sha}</Mono> — “{local.subject}”.
|
|
78
90
|
</Body>
|
|
79
91
|
|
|
80
|
-
{result && result.behind === 0 && <
|
|
92
|
+
{result && result.behind === 0 && <Status tone="ok">You’re up to date.</Status>}
|
|
81
93
|
|
|
82
94
|
{result && result.behind > 0 && (
|
|
83
95
|
<>
|
|
@@ -96,7 +108,7 @@ export default function UpdatePanel() {
|
|
|
96
108
|
</Body>
|
|
97
109
|
)}
|
|
98
110
|
|
|
99
|
-
<
|
|
111
|
+
<Row>
|
|
100
112
|
<Btn onClick={() => call('check')} disabled={!!busy}>
|
|
101
113
|
{busy === 'check' ? 'Checking…' : 'Check for updates'}
|
|
102
114
|
</Btn>
|
|
@@ -105,7 +117,7 @@ export default function UpdatePanel() {
|
|
|
105
117
|
{busy === 'pull' ? 'Updating…' : `Install ${result.behind} update${result.behind === 1 ? '' : 's'}`}
|
|
106
118
|
</Btn>
|
|
107
119
|
)}
|
|
108
|
-
</
|
|
120
|
+
</Row>
|
|
109
121
|
</>
|
|
110
122
|
)}
|
|
111
123
|
|
|
@@ -115,31 +127,99 @@ export default function UpdatePanel() {
|
|
|
115
127
|
Nothing is checked automatically and nothing about you is sent — this runs the
|
|
116
128
|
same <Mono>git fetch</Mono> and <Mono>git pull</Mono> you would type yourself.
|
|
117
129
|
</Body>
|
|
118
|
-
</
|
|
130
|
+
</Section>
|
|
119
131
|
);
|
|
120
132
|
}
|
|
121
133
|
|
|
134
|
+
// ── an installed copy ─────────────────────────────────────────────────────────
|
|
122
135
|
// The Mac app and the npm package update by installing the newer release over
|
|
123
|
-
// the top.
|
|
124
|
-
//
|
|
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
|
+
|
|
125
144
|
function InstalledUpdates({ local }) {
|
|
145
|
+
const mac = local.kind === 'mac-app';
|
|
126
146
|
const [busy, setBusy] = useState(false);
|
|
127
147
|
const [result, setResult] = useState(null);
|
|
128
148
|
const [error, setError] = useState(null);
|
|
129
149
|
const [copied, setCopied] = useState(false);
|
|
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);
|
|
161
|
+
|
|
162
|
+
// Opened from the menu's "Check for Updates…": bring the panel into view and
|
|
163
|
+
// run the check that click asked for. After an update the app opens here
|
|
164
|
+
// (#updates), to show how it went.
|
|
165
|
+
useEffect(() => {
|
|
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
|
|
171
|
+
panel()?.scrollIntoView({ block: 'center' });
|
|
172
|
+
check().then(() => panel()?.scrollIntoView({ block: 'end', behavior: 'smooth' }));
|
|
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]);
|
|
130
209
|
|
|
131
210
|
async function check() {
|
|
132
211
|
setBusy(true);
|
|
212
|
+
setResult(null);
|
|
133
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));
|
|
134
219
|
try {
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
body: JSON.stringify({ action: 'check-release' }),
|
|
139
|
-
});
|
|
140
|
-
const d = await r.json();
|
|
141
|
-
if (!r.ok) setError(d.error || 'Could not check.');
|
|
142
|
-
else setResult(d);
|
|
220
|
+
const { ok, d } = await post({ action: 'check-release' });
|
|
221
|
+
if (!ok) setError(d.error || 'Could not check.');
|
|
222
|
+
else { setResult(d); setCheckedAt(new Date()); }
|
|
143
223
|
} catch (e) {
|
|
144
224
|
setError(e.message);
|
|
145
225
|
} finally {
|
|
@@ -147,6 +227,35 @@ function InstalledUpdates({ local }) {
|
|
|
147
227
|
}
|
|
148
228
|
}
|
|
149
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
|
+
|
|
150
259
|
async function copy() {
|
|
151
260
|
try {
|
|
152
261
|
await navigator.clipboard.writeText(local.command);
|
|
@@ -157,90 +266,199 @@ function InstalledUpdates({ local }) {
|
|
|
157
266
|
}
|
|
158
267
|
}
|
|
159
268
|
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
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 });
|
|
165
284
|
|
|
166
285
|
return (
|
|
167
|
-
<
|
|
168
|
-
<
|
|
286
|
+
<Section id="updates" title="Updates">
|
|
287
|
+
{local.lastUpdate && !active && <LastUpdate report={local.lastUpdate} />}
|
|
169
288
|
<Body>You have version <Mono>{local.version}</Mono>.</Body>
|
|
170
289
|
|
|
171
|
-
{
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
{result?.newer && (
|
|
290
|
+
{active ? (
|
|
291
|
+
<Progress job={job} restarting={restarting} slow={slow} onCancel={cancel} />
|
|
292
|
+
) : (
|
|
175
293
|
<>
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
{result.latest.url && (
|
|
182
|
-
<a href={result.latest.url} target="_blank" rel="noreferrer"
|
|
183
|
-
style={{ color: '#3498DB', fontSize: 13.5 }}>
|
|
184
|
-
What changed →
|
|
185
|
-
</a>
|
|
186
|
-
)}
|
|
187
|
-
</div>
|
|
188
|
-
</>
|
|
189
|
-
)}
|
|
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>}
|
|
190
299
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
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
|
+
</>
|
|
195
359
|
)}
|
|
196
360
|
|
|
197
361
|
{error && <Body style={{ color: '#ff7676' }}>{error}</Body>}
|
|
198
362
|
|
|
199
363
|
<Body style={{ fontSize: 12, color: '#667', marginTop: 12 }}>
|
|
200
364
|
Nothing is checked automatically. The button asks GitHub for the newest version
|
|
201
|
-
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.'}
|
|
202
367
|
</Body>
|
|
203
|
-
|
|
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>
|
|
204
374
|
);
|
|
205
375
|
}
|
|
206
376
|
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
377
|
+
const megabytes = (bytes) => Math.max(1, Math.round(bytes / 1e6));
|
|
378
|
+
|
|
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}`;
|
|
397
|
+
}
|
|
213
398
|
|
|
214
|
-
function
|
|
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…';
|
|
215
407
|
return (
|
|
216
|
-
<div style={{ marginTop:
|
|
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>
|
|
217
425
|
);
|
|
218
426
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
|
|
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' });
|
|
223
431
|
return (
|
|
224
|
-
<
|
|
225
|
-
{
|
|
226
|
-
|
|
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>
|
|
227
441
|
);
|
|
228
442
|
}
|
|
229
|
-
|
|
443
|
+
|
|
444
|
+
function WhatChanged({ url }) {
|
|
445
|
+
if (!url) return null;
|
|
230
446
|
return (
|
|
231
|
-
<
|
|
232
|
-
|
|
233
|
-
</
|
|
447
|
+
<a href={url} target="_blank" rel="noreferrer" style={{ color: '#3498DB', fontSize: 13.5 }}>
|
|
448
|
+
What changed →
|
|
449
|
+
</a>
|
|
234
450
|
);
|
|
235
451
|
}
|
|
236
|
-
|
|
452
|
+
|
|
453
|
+
function Row({ children }) {
|
|
237
454
|
return (
|
|
238
|
-
<
|
|
239
|
-
padding: '9px 18px', borderRadius: 7, fontSize: 13.5, fontWeight: 650,
|
|
240
|
-
color: disabled ? '#667' : '#fff', border: LINE,
|
|
241
|
-
background: disabled ? 'rgba(255,255,255,0.05)'
|
|
242
|
-
: primary ? 'linear-gradient(135deg, #9B59B6, #3498DB)' : 'rgba(255,255,255,0.08)',
|
|
243
|
-
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
244
|
-
}}>{children}</button>
|
|
455
|
+
<div style={{ display: 'flex', gap: 10, marginTop: 12, flexWrap: 'wrap', alignItems: 'center' }}>{children}</div>
|
|
245
456
|
);
|
|
246
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;
|