six-degrees 0.3.0 → 0.4.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 +1 -0
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +34 -6
- package/.next/standalone/.next/routes-manifest.json +6 -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.nft.json +1 -1
- 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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
- 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.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/outreach/route.js +3 -3
- package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/import/page.js.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/scores/page/app-paths-manifest.json +3 -0
- package/.next/standalone/.next/server/app/scores/page/build-manifest.json +20 -0
- package/.next/standalone/.next/server/app/scores/page/next-font-manifest.json +11 -0
- package/.next/standalone/.next/server/app/scores/page/react-loadable-manifest.json +1 -0
- package/.next/standalone/.next/server/app/scores/page/server-reference-manifest.json +4 -0
- package/.next/standalone/.next/server/app/scores/page.js +13 -0
- package/.next/standalone/.next/server/app/scores/page.js.map +5 -0
- package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -0
- package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +3 -0
- package/.next/standalone/.next/server/app/scores.html +1 -0
- package/.next/standalone/.next/server/app/scores.meta +26 -0
- package/.next/standalone/.next/server/app/scores.rsc +24 -0
- package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +24 -0
- package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +4 -0
- package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +28 -0
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings.html +1 -1
- package/.next/standalone/.next/server/app/settings.rsc +12 -12
- package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +12 -12
- package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +11 -11
- 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 +1 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__0rc27za._.js +8 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +1 -1
- package/.next/standalone/.next/server/chunks/_02twlca._.js +10 -0
- package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0lw8_i0._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -6
- package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
- package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +3 -2
- package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +5 -5
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0an6blh._.js → [root-of-the-server]__0zzcbqg._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1194jps._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__1z1j3ek._.js → [root-of-the-server]__19ip1qq._.js} +2 -2
- package/.next/standalone/.next/server/chunks/ssr/_01f38ty._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0223v9s._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0bcf13g._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0cu6-an._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0wxbq78._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_0z88zcl._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_17gui6a._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1cyxocj._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1gpbbw9._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_scores_page_actions_0x-w58n.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_launch_page_19t0dyd.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +4 -4
- package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +4 -0
- 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_scores_page_09wepvv.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/lib_1bn38gs._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/node_modules_next_0x3i8za._.js +131 -0
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_next_dist_1bunoni._.js → node_modules_next_dist_1v8aef8._.js} +2 -2
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/.next/server/next-font-manifest.json +4 -0
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/prefetch-hints.json +14 -0
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/static/chunks/0_yurn4q91vq8.js +16 -0
- package/.next/standalone/.next/static/chunks/0d_mh-06srh2k.js +1 -0
- package/.next/standalone/.next/static/chunks/0x3oadfikvb1c.js +1 -0
- package/.next/standalone/.next/static/chunks/1d5hl1io798n2.js +1 -0
- package/.next/standalone/.next/static/chunks/1qt67cvj9sjwi.js +1 -0
- package/.next/{static/chunks/1chp3nx45meg5.js → standalone/.next/static/chunks/1roznk7hkjes1.js} +1 -1
- package/.next/standalone/.next/static/chunks/2_bf2n4gstad9.js +33 -0
- package/.next/standalone/.next/static/chunks/36gbwek52x_w-.js +2 -0
- package/.next/standalone/.next/static/chunks/3a55suosthntc.js +1 -0
- package/.next/standalone/.next/static/chunks/3fq1zq-6cfwbc.js +1 -0
- package/.next/standalone/.next/static/chunks/3nbnio971zlji.js +2 -0
- package/.next/standalone/.next/static/chunks/3s6awp3qq9s7w.js +1 -0
- package/.next/standalone/CHANGELOG.md +134 -0
- package/.next/standalone/README.md +30 -15
- package/.next/standalone/app/api/company-scores/legacy/route.js +1 -1
- package/.next/standalone/app/api/company-scores/route.js +1 -1
- package/.next/standalone/app/api/ingest/route.js +17 -1
- package/.next/standalone/app/api/outreach/route.js +107 -44
- package/.next/standalone/app/api/scraper/route.js +69 -8
- package/.next/standalone/app/api/settings/sector-preview/route.js +3 -2
- package/.next/standalone/app/api/settings/sector-suggestions/route.js +1 -1
- package/.next/standalone/app/components/CompanyScores.js +16 -10
- package/.next/standalone/app/components/LegacyScoresCard.js +1 -1
- package/.next/standalone/app/components/OrbitGraph.js +30 -0
- package/.next/standalone/app/components/PathsAnalyzer.js +1 -1
- package/.next/standalone/app/components/SeparationView.js +96 -14
- package/.next/standalone/app/components/Sidebar.js +258 -239
- package/.next/standalone/app/components/TheirCircle.js +293 -0
- package/.next/standalone/app/components/settings/SectorSection.js +5 -5
- package/.next/standalone/app/components/settings/TierSection.js +104 -0
- package/.next/standalone/app/components/useRequests.js +12 -0
- package/.next/standalone/app/components/useScanner.js +13 -0
- package/.next/standalone/app/components/views.js +1 -3
- package/.next/standalone/app/launch/page.js +4 -1
- package/.next/standalone/app/page.js +55 -51
- package/.next/standalone/app/paths/page.js +17 -12
- package/.next/standalone/app/profile/page.js +3 -3
- package/.next/standalone/app/queue/page.js +38 -50
- package/.next/standalone/app/scores/page.js +72 -0
- package/.next/standalone/app/settings/page.js +15 -3
- package/.next/standalone/db/schema.js +1 -0
- package/.next/standalone/lib/circle.js +169 -0
- package/.next/standalone/lib/companies.js +1 -1
- package/.next/standalone/lib/csv.js +17 -4
- package/.next/standalone/lib/db-client.js +1 -0
- package/.next/standalone/lib/ingest.js +12 -0
- package/.next/standalone/lib/legacy-offer.js +7 -6
- package/.next/standalone/lib/legacy-scores.js +2 -2
- package/.next/standalone/lib/rarity.js +80 -0
- package/.next/standalone/lib/requests-client.js +113 -0
- package/.next/standalone/lib/rpc.js +26 -15
- package/.next/standalone/lib/score-guess.js +60 -0
- package/.next/standalone/lib/scoring.js +1002 -61
- package/.next/standalone/lib/scraper-client.js +208 -17
- package/.next/standalone/lib/sector-directory.js +1 -1
- package/.next/standalone/lib/sector-focus.js +4 -3
- package/.next/standalone/lib/settings-effects.js +19 -1
- package/.next/standalone/lib/settings.js +4 -1
- package/.next/standalone/package-lock.json +2 -2
- package/.next/standalone/package.json +2 -2
- package/.next/standalone/public/demo-data.json +1 -1
- package/.next/standalone/scripts/gen-synthetic.mjs +1 -1
- package/.next/standalone/scripts/scrape.py +62 -0
- package/.next/static/chunks/0_yurn4q91vq8.js +16 -0
- package/.next/static/chunks/0d_mh-06srh2k.js +1 -0
- package/.next/static/chunks/0x3oadfikvb1c.js +1 -0
- package/.next/static/chunks/1d5hl1io798n2.js +1 -0
- package/.next/static/chunks/1qt67cvj9sjwi.js +1 -0
- package/.next/{standalone/.next/static/chunks/1chp3nx45meg5.js → static/chunks/1roznk7hkjes1.js} +1 -1
- package/.next/static/chunks/2_bf2n4gstad9.js +33 -0
- package/.next/static/chunks/36gbwek52x_w-.js +2 -0
- package/.next/static/chunks/3a55suosthntc.js +1 -0
- package/.next/static/chunks/3fq1zq-6cfwbc.js +1 -0
- package/.next/static/chunks/3nbnio971zlji.js +2 -0
- package/.next/static/chunks/3s6awp3qq9s7w.js +1 -0
- package/CHANGELOG.md +134 -0
- package/README.md +30 -15
- package/db/schema.js +1 -0
- package/lib/circle.js +169 -0
- package/lib/companies.js +1 -1
- package/lib/csv.js +17 -4
- package/lib/db-client.js +1 -0
- package/lib/ingest.js +12 -0
- package/lib/legacy-offer.js +7 -6
- package/lib/legacy-scores.js +2 -2
- package/lib/rarity.js +80 -0
- package/lib/requests-client.js +113 -0
- package/lib/rpc.js +26 -15
- package/lib/score-guess.js +60 -0
- package/lib/scoring.js +1002 -61
- package/lib/scraper-client.js +208 -17
- package/lib/sector-directory.js +1 -1
- package/lib/sector-focus.js +4 -3
- package/lib/settings-effects.js +19 -1
- package/lib/settings.js +4 -1
- package/package.json +2 -2
- package/public/demo-data.json +1 -1
- package/scripts/scrape.py +62 -0
- package/.next/standalone/.next/server/chunks/[root-of-the-server]__1t3rugi._.js +0 -3
- package/.next/standalone/.next/server/chunks/lib_rpc_0jzisgh.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_07u8byv._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_08r_mlf._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0942v8n._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0hl_t7r._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_0tb83dw._.js +0 -132
- package/.next/standalone/.next/server/chunks/ssr/lib_0i8v-s3._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_16vay6l._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/node_modules_1kciwn4._.js +0 -3
- package/.next/standalone/.next/static/chunks/06x3jiiz96m5t.js +0 -1
- package/.next/standalone/.next/static/chunks/08k1crid-05dt.js +0 -1
- package/.next/standalone/.next/static/chunks/0ngx9s6-zgshe.js +0 -33
- package/.next/standalone/.next/static/chunks/0q-_khndfxubv.js +0 -2
- package/.next/standalone/.next/static/chunks/1c79veqedvubt.js +0 -1
- package/.next/standalone/.next/static/chunks/1irqj0lf-fu3d.js +0 -1
- package/.next/standalone/.next/static/chunks/1uadqylrod5_v.js +0 -1
- package/.next/standalone/.next/static/chunks/23u0zclgwpc4d.js +0 -1
- package/.next/standalone/.next/static/chunks/289ktj97di6zg.js +0 -1
- package/.next/standalone/.next/static/chunks/2b3lmf8e6uj8m.js +0 -16
- package/.next/standalone/.next/static/chunks/3npq5yd7c4dmn.js +0 -2
- package/.next/standalone/app/components/BridgeRing.js +0 -753
- package/.next/static/chunks/06x3jiiz96m5t.js +0 -1
- package/.next/static/chunks/08k1crid-05dt.js +0 -1
- package/.next/static/chunks/0ngx9s6-zgshe.js +0 -33
- package/.next/static/chunks/0q-_khndfxubv.js +0 -2
- package/.next/static/chunks/1c79veqedvubt.js +0 -1
- package/.next/static/chunks/1irqj0lf-fu3d.js +0 -1
- package/.next/static/chunks/1uadqylrod5_v.js +0 -1
- package/.next/static/chunks/23u0zclgwpc4d.js +0 -1
- package/.next/static/chunks/289ktj97di6zg.js +0 -1
- package/.next/static/chunks/2b3lmf8e6uj8m.js +0 -16
- package/.next/static/chunks/3npq5yd7c4dmn.js +0 -2
- /package/.next/standalone/.next/static/{qqqcxvzBUizkECrT4swyK → NnWlxbDF24KhrU1eHiEnv}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{qqqcxvzBUizkECrT4swyK → NnWlxbDF24KhrU1eHiEnv}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{qqqcxvzBUizkECrT4swyK → NnWlxbDF24KhrU1eHiEnv}/_ssgManifest.js +0 -0
- /package/.next/static/{qqqcxvzBUizkECrT4swyK → NnWlxbDF24KhrU1eHiEnv}/_buildManifest.js +0 -0
- /package/.next/static/{qqqcxvzBUizkECrT4swyK → NnWlxbDF24KhrU1eHiEnv}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{qqqcxvzBUizkECrT4swyK → NnWlxbDF24KhrU1eHiEnv}/_ssgManifest.js +0 -0
|
@@ -49,6 +49,7 @@ CREATE TABLE IF NOT EXISTS linkedin_connections (
|
|
|
49
49
|
unlocked_from_bridge_id TEXT,
|
|
50
50
|
unlocked_from_name TEXT,
|
|
51
51
|
outreach_status TEXT,
|
|
52
|
+
mutual_count INTEGER, -- LinkedIn's count of mutual connections (2nd degree), when a scan read one
|
|
52
53
|
scanned_company TEXT,
|
|
53
54
|
score_why TEXT,
|
|
54
55
|
user_id TEXT,
|
|
@@ -144,12 +145,12 @@ CREATE TABLE IF NOT EXISTS user_profile (
|
|
|
144
145
|
created_at TEXT DEFAULT (datetime('now')),
|
|
145
146
|
updated_at TEXT DEFAULT (datetime('now'))
|
|
146
147
|
);
|
|
147
|
-
`;e.s(["SCHEMA_SQL",0,a],28681);let o="0.
|
|
148
|
+
`;e.s(["SCHEMA_SQL",0,a],28681);let o="0.4.0-beta.1";e.s(["APP_VERSION",0,o],48170);var s=e.x("node:sqlite",()=>require("node:sqlite"),!0),l=e.i(12714),c=e.i(12506);let u=["/api/admin-delete","/api/admin-update","/api/delete-cluster","/api/setup-profile","/api/scraper","/api/update","/api/data/export","/api/data/import","/api/data/restart","/api/data/reveal"],d=new Set(["127.0.0.1","::1","localhost"]),f=new Set(["127.0.0.1","localhost","[::1]","0.0.0.0"]);function p(e){return d.has(String(e||"").toLowerCase())}function h({method:e,pathname:t,headers:n,env:r={}}){let i=e=>n?.get?.(e)??null,a=r.SIX_DEGREES_BIND||r.HOSTNAME;if(function({bind:e,host:t}){let n;if(!p(e)||!t)return!1;try{n=new URL(`http://${t}`).hostname.toLowerCase()}catch{return!0}return!f.has(n)}({bind:a,host:i("host")}))return{status:421,error:"This app only answers to 127.0.0.1 and localhost."};if(function({method:e,secFetchSite:t,origin:n,host:r}){if(!e||!["POST","PUT","PATCH","DELETE"].includes(e.toUpperCase()))return!1;if(t){if("same-origin"===t||"none"===t)return!1;if("same-site"!==t||!n)return!0}if(n)try{let e=new URL(n).host;return!!r&&e!==r}catch{return!0}return!1}({method:e,secFetchSite:i("sec-fetch-site"),origin:i("origin"),host:i("host")}))return{status:403,error:"Cross-site requests are not accepted. This app only answers to pages it serves."};if(!u.some(e=>t===e||t.startsWith(`${e}/`)))return null;let o=function({bind:e,token:t,bearer:n}){return t&&function(e,t){if("string"!=typeof e||"string"!=typeof t||e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e.charCodeAt(r)^t.charCodeAt(r);return 0===n}(n,t)?{allow:!0,reason:"valid admin token"}:p(e)?{allow:!0,reason:"server is bound to loopback; only this machine can connect"}:t?{allow:!1,status:401,reason:"missing or incorrect admin token"}:{allow:!1,status:503,reason:"server is not bound to loopback and no ADMIN_TOKEN is configured"}}({bind:a,token:r.ADMIN_TOKEN,bearer:(i("authorization")||"").replace(/^Bearer\s+/i,"")});return o.allow?null:{status:o.status,error:o.reason}}e.s(["requestRefusal",0,h],54090);var m=e.i(1348);let T=new Set(["ENOENT","EINVAL","ENOTSUP","ENOSYS","EISDIR","EPERM","EBADF"]);function E(e){let t;try{t=n.default.openSync(e,"r")}catch(e){if(T.has(e.code))return;throw e}try{n.default.fsyncSync(t)}catch(e){if(!T.has(e.code))throw e}finally{n.default.closeSync(t)}}function y(e,t){let r=`${e}.${process.pid}.tmp`;try{let i=n.default.openSync(r,"w");try{n.default.writeFileSync(i,t),n.default.fsyncSync(i)}finally{n.default.closeSync(i)}n.default.renameSync(r,e)}catch(e){throw n.default.rmSync(r,{force:!0}),e}E(i.default.dirname(e))}let S=function(e){let t=n.default.openSync(e,"r");try{n.default.fsyncSync(t)}finally{n.default.closeSync(t)}},g=function(e,t){y(e,`${JSON.stringify(t,null,2)}
|
|
148
149
|
`)},w=[25,50,100,200,500],_=[100,250,500,1e3,0],A="America/Los_Angeles";function b(e){try{return JSON.parse((0,n.readFileSync)(e,"utf8"))}catch{return null}}function N(e=Date.now()){let t=Object.fromEntries(new Intl.DateTimeFormat("en-US",{timeZone:A,year:"numeric",month:"numeric"}).formatToParts(new Date(e)).map(e=>[e.type,e.value])),n=Number(t.year),r=Number(t.month),i=Date.UTC(n,r-1,1,8);for(let e=0;e<2;e++)i=Date.UTC(n,r-1,1,-function(e){let t=(new Intl.DateTimeFormat("en-US",{timeZone:A,timeZoneName:"shortOffset"}).formatToParts(new Date(e)).find(e=>"timeZoneName"===e.type)?.value||"GMT-8").match(/GMT([+-]\d+)(?::(\d+))?/);return t?Number(t[1]):-8}(i));return i}function R(e){let t=b(i.default.join(e,"scan-limits.json"))||{},n=(e,t)=>Number.isInteger(e)&&e>=0?e:t;return{daily:n(t.daily,50),monthly:n(t.monthly,250)}}let I="linkedin-activity.json",O="linkedin-cooldown.json",L="scan-limits.json",x=e=>!!e&&"object"==typeof e&&!Array.isArray(e),D=e=>void 0===e||Array.isArray(e)&&e.every(e=>"number"==typeof e&&Number.isFinite(e)&&e>=0),k=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0;function F(e,t){if(!x(t))return"it is not a JSON object";if(e===I){if(!D(t.searches)||!D(t.profiles))return"its record of searches is not a list of times"}else if(e===O){if(!k(t.until))return"its pause has no end time";if(void 0!==t.reason&&"string"!=typeof t.reason)return"its pause has a reason that is not text";if(void 0!==t.set_at&&!k(t.set_at))return"its pause has a start time that is not a time"}else if(e===L){if(void 0!==t.daily&&!w.includes(t.daily))return`its daily limit (${String(t.daily).slice(0,20)}) is not one Six Degrees offers`;if(void 0!==t.monthly&&!_.includes(t.monthly))return`its monthly limit (${String(t.monthly).slice(0,20)}) is not one Six Degrees offers`}return null}function X(e=[],t=[]){let n=e=>e.reduce((e,t)=>e.set(t,(e.get(t)||0)+1),new Map),r=n(e);for(let[e,i]of n(t))i>(r.get(e)||0)&&r.set(e,i);return[...r].sort((e,t)=>e[0]-t[0]).flatMap(([e,t])=>Array(t).fill(e))}function $(e){if(void 0===e)return[];if(!Array.isArray(e))return null;let t=e.map(Number);return t.every(Number.isFinite)?t:null}let j=e=>{try{return(0,n.lstatSync)(e),!0}catch{return!1}};function v({dir:e,from:t}){let n=t=>i.default.join(e,t),r=e=>{let n=b(i.default.join(t,e));return x(n)&&!F(e,n)?n:null},a=r(I);if(a){let e=j(n(I))?b(n(I)):{},t=x(e)?$(e.searches):null,r=x(e)?$(e.profiles):null;t&&r&&g(n(I),{searches:X(t,a.searches),profiles:X(r,a.profiles)})}let o=r(O);if(o){let e=b(n(O)),t=Number.isFinite(Number(e?.until))?Number(e.until):-1/0;o.until>t&&g(n(O),{until:o.until,reason:o.reason??"LinkedIn pushed back",set_at:o.set_at??null})}let s=r(L);s&&!j(n(L))&&g(n(L),{daily:s.daily??50,monthly:s.monthly??250})}e.s(["budgetFileProblem",0,F,"liftCooldown",0,function(e){try{(0,n.unlinkSync)(i.default.join(e,"linkedin-cooldown.json"))}catch{}},"linkedinState",0,function(e,t=Date.now()){let r=R(e),a=function(e,t=Date.now()){let r=i.default.join(e,"linkedin-activity.json"),a=(0,n.existsSync)(r)?b(r):{searches:[],profiles:[]};if(!a||"object"!=typeof a)return{searchesToday:1/0,searchesMonth:0,profilesToday:0,unreadable:!0};let o=(Array.isArray(a.searches)?a.searches:[]).map(Number),s=(Array.isArray(a.profiles)?a.profiles:[]).map(Number),l=t/1e3-86400,c=N(t)/1e3;return{searchesToday:o.filter(e=>e>l).length,searchesMonth:o.filter(e=>e>=c).length,profilesToday:s.filter(e=>e>l).length}}(e,t),o=(e,t)=>e?Math.max(0,e-t):null;return{...a,limits:r,leftToday:o(r.daily,a.searchesToday),leftMonth:o(r.monthly,a.searchesMonth),monthResets:function(e=Date.now()){let t=N(e);return N(t+3456e6)}(t),cooldown:function(e,t=Date.now()){let n=b(i.default.join(e,"linkedin-cooldown.json")),r=1e3*Number(n?.until);return n&&Number.isFinite(r)&&!(r<=t)?{until:r,reason:String(n.reason||"LinkedIn pushed back"),setAt:1e3*Number(n.set_at)||null}:null}(e,t)}},"mergeBudgetFiles",0,v,"writeLimits",0,function(e,{daily:t,monthly:r}){var a;let o,s=R(e),l={daily:w.includes(t)?t:s.daily,monthly:_.includes(r)?r:s.monthly};return a=i.default.join(e,"scan-limits.json"),o=`${a}.${process.pid}.${Date.now()}.tmp`,(0,n.writeFileSync)(o,JSON.stringify(l,null,2)),(0,n.renameSync)(o,a),l}],41238);var U=e.i(74533);let C=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,M=["bridge-progress.json","bridge-skips.json","bridge-unclear.json"],P=["scan-limits.json","linkedin-activity.json","linkedin-cooldown.json"],G=[...M,...P],q="import-pending",B="before-import-",Y=".export-",W=".import-upload-",J=".python-setup-",K=[Y,W,J],V=/^import-pending\.(done|cancelled)-/;function H(e){try{return(0,n.lstatSync)(e).isDirectory()?(0,n.readdirSync)(e):[]}catch{return[]}}function z(e,t=()=>!0){let r=0,a=0;for(let o of H(e))if(t(o))try{let t=(0,n.lstatSync)(i.default.join(e,o));t.isFile()&&(r++,a+=t.size)}catch{}return{count:r,bytes:a}}function Q(e,{now:t=Date.now(),maxAgeMs:r=36e5}={}){let a=[];try{a=(0,n.readdirSync)(e)}catch{return 0}let o=0;for(let s of a){let a=K.some(e=>s.startsWith(e));if(!a&&!V.test(s))continue;let l=i.default.join(e,s);try{let e=(0,n.lstatSync)(l);if(!e.isDirectory()||a&&t-e.mtimeMs<r)continue;(0,n.rmSync)(l,{recursive:!0,force:!0}),o++}catch{}}return o}e.s(["AVATAR_FILE",0,C,"BUDGET_FILES",0,P,"EXPORT_WORK_PREFIX",0,Y,"IMPORT_BACKUP_PREFIX",0,B,"NETWORK_FILES",0,M,"PENDING_DIR",0,q,"SETUP_WORK_PREFIX",0,J,"TRAVELLING_FILES",0,G,"UPLOAD_WORK_PREFIX",0,W,"folderReport",0,function({dir:e,dbFile:t,autoPrefix:r,inNetwork:a=null}){let o=i.default.join(e,"avatars");return{dataDir:e,dbFile:t,databaseBytes:["","-wal","-shm"].reduce((e,r)=>e+function(e){try{let t=(0,n.lstatSync)(e);return t.isFile()?t.size:0}catch{return 0}}(t+r),0),photos:z(o,e=>C.test(e)),photosInCopy:a?z(o,e=>C.test(e)&&a.has(e)):null,backups:function(e,{autoPrefix:t}={}){let r=[];try{r=(0,n.readdirSync)(e)}catch{return[]}let a=[];for(let o of r){let r;if(o.startsWith(".")||o.endsWith(".partial"))continue;let s=i.default.join(e,o);try{r=(0,n.lstatSync)(s)}catch{continue}(r.isFile()||r.isDirectory())&&a.push({name:o,bytes:r.isFile()?r.size:function e(t,r={left:5e4}){let a=0,o=[];try{o=(0,n.readdirSync)(t)}catch{return 0}for(let s of o){if(r.left--<=0)break;let o=i.default.join(t,s);try{let t=(0,n.lstatSync)(o);t.isDirectory()?a+=e(o,r):t.isFile()&&(a+=t.size)}catch{}}return a}(s),modifiedAt:r.mtimeMs,kind:t&&o.startsWith(t)?"auto":o.startsWith(B)?"import":"manual",folder:r.isDirectory()})}return a.sort((e,t)=>t.modifiedAt-e.modifiedAt||t.name.localeCompare(e.name))}(i.default.join(i.default.dirname(t),"backups"),{autoPrefix:r}),linkedinSignIn:(0,n.existsSync)(i.default.join(e,"chrome-profile"))}},"namesInFolder",0,H,"revealFolder",0,function(e,{platform:t=process.platform,spawnImpl:n=U.spawn,waitMs:r=3e3}={}){let i=function(e=process.platform){return"darwin"===e?"open":"linux"===e?"xdg-open":null}(t);return i?new Promise(t=>{let a,o=null,s=!1,l=e=>{s||(s=!0,clearTimeout(o),t(e))};try{a=n(i,[e],{stdio:"ignore",detached:!0})}catch(e){l({ok:!1,message:`It couldn't be opened (${e.message}).`});return}a.on("error",e=>l({ok:!1,message:"ENOENT"===e.code?`This computer has no ${i}, so there is no file browser to open it with.`:`It couldn't be opened (${e.message}).`})),a.on("exit",e=>l(0===e?{ok:!0}:{ok:!1,message:`The file browser didn't open (${i} stopped with code ${e}).`})),o=setTimeout(()=>{try{a.unref()}catch{}l({ok:!0})},r)}):Promise.resolve({ok:!1,message:"There is no file browser to open it with on this computer."})},"sweepLeftovers",0,Q],44033);var Z=e.x("node:sqlite",()=>require("node:sqlite"),!0),ee=e.i(66680);let et={sd_export_manifest:"CREATE TABLE sd_export_manifest (key TEXT PRIMARY KEY, value TEXT NOT NULL)",sd_export_files:"CREATE TABLE sd_export_files (path TEXT PRIMARY KEY, bytes BLOB NOT NULL, sha256 TEXT NOT NULL)"};function en(e){return(0,ee.createHash)("sha256").update(e).digest("hex")}function er(e){return`'${String(e).replace(/'/g,"''")}'`}function ei(e){return[...e.matchAll(/CREATE TABLE IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function ea(e){return[...e.matchAll(/CREATE (?:UNIQUE )?INDEX IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function eo(e,t="main"){try{return e.prepare(`SELECT count(DISTINCT profile_url) AS n FROM ${t}.linkedin_connections`).get().n}catch{return 0}}function es(e){return new Set(e.prepare(`SELECT DISTINCT substr(profile_image_url, 10) AS name FROM linkedin_connections
|
|
149
150
|
WHERE substr(profile_image_url, 1, 9) = '/avatars/'`).all().map(e=>e.name))}e.s(["EXPORT_FORMAT",0,1,"EXPORT_TABLES",0,et,"appIndexes",0,ea,"appTables",0,ei,"buildExport",0,function(e,{dir:t,outFile:r,includePhotos:a=!0,appVersion:o,schemaSql:s,now:l=new Date}){let c;e.exec(`VACUUM INTO ${er(r)}`);let u=new Z.DatabaseSync(r);try{u.exec("PRAGMA journal_mode = DELETE"),u.exec(`${Object.values(et).join(";\n")};`),u.exec("BEGIN"),a||u.exec("UPDATE linkedin_connections SET profile_image_url = NULL WHERE profile_image_url LIKE '/avatars/%'"),u.exec("DELETE FROM app_meta WHERE key = 'last_import'");let e=u.prepare("INSERT INTO sd_export_files (path, bytes, sha256) VALUES (?, ?, ?)"),r=0,d=0,f=a?es(u):null;for(let o of function(e,{includePhotos:t=!0,photos:r=null}={}){let a=e=>{try{return(0,n.lstatSync)(e).isFile()}catch{return!1}},o=[];for(let t of G){let n=i.default.join(e,t);a(n)&&o.push({rel:t,abs:n})}if(t)for(let t of H(i.default.join(e,"avatars")).sort()){if(!C.test(t)||r&&!r.has(t))continue;let n=i.default.join(e,"avatars",t);a(n)&&o.push({rel:`avatars/${t}`,abs:n})}return o}(t,{includePhotos:a,photos:f})){let t;try{t=(0,n.readFileSync)(o.abs)}catch{continue}e.run(o.rel,t,en(t)),d++,o.rel.startsWith("avatars/")&&r++}let p={};for(let e of ei(s))try{p[e]=u.prepare(`SELECT count(*) AS n FROM "${e}"`).get().n}catch{p[e]=0}let h="";try{h=u.prepare("SELECT value FROM app_meta WHERE key = 'scoring_version'").get()?.value??""}catch{}let m=eo(u),T={format:1,app_version:o,scoring_version:h,exported_at:l.toISOString(),include_photos:+!!a,people:m,photos:r,files:d,counts:JSON.stringify(p)},E=u.prepare("INSERT INTO sd_export_manifest (key, value) VALUES (?, ?)");for(let[e,t]of Object.entries(T))E.run(e,String(t));u.exec("COMMIT"),c={people:m,photos:r,files:d,counts:p}}catch(e){try{u.exec("ROLLBACK")}catch{}throw e}finally{u.close()}return{...c,bytes:(0,n.statSync)(r).size}},"countPeople",0,eo,"exportFileName",0,function(e=new Date){let t=e=>String(e).padStart(2,"0");return`Six Degrees backup ${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}.sixdegrees`},"referencedPhotos",0,es,"sha256",0,en,"sqlString",0,er],92375);let el="/api/data/import",ec=Buffer.from("SQLite format 3\0","latin1");class eu extends Error{constructor(e,{status:t=400,...n}={}){super(e),this.status=t,this.extra=n}}function ed(e){let t=e/1024/1024;return`${t<10?t.toFixed(1):Math.round(t)} MB`}let ef=e=>String(e).slice(0,80);async function ep(e,t,{declared:n}){let r=await (0,l.open)(t,"wx",384),i=0;try{if(e)for await(let t of e){let e=t instanceof Uint8Array?t:new Uint8Array(t);if((i+=e.byteLength)>n)throw new eu("The file was bigger than the size it was sent with, so nothing was imported. Try again.");for(let t=0;t<e.byteLength;){let{bytesWritten:n}=await r.write(e,t,e.byteLength-t);t+=n}}}finally{await r.close()}if(i!==n)throw new eu(`The file didn't arrive whole (${i} of ${n} bytes), so nothing was imported. Try again.`);return i}function eh(e){return"string"!=typeof e?null:G.includes(e)?"file":e.startsWith("avatars/")&&C.test(e.slice(8))?"photo":null}let em=["users","linkedin_connections",...Object.keys(et)],eT=Object.freeze({tables:[],indexes:[],columns:{}}),eE=e=>{try{return(0,n.lstatSync)(e),!0}catch{return!1}};function ey(e){let t=Buffer.alloc(ec.length),r=(0,n.openSync)(e,"r");try{let e=(0,n.readSync)(r,t,0,t.length,0);return 0===e||e===t.length&&t.equals(ec)}finally{(0,n.closeSync)(r)}}function eS(e){try{return JSON.parse((0,n.readFileSync)(e,"utf8"))}catch{return null}}function eg(e,t){try{(0,n.renameSync)(e,t)}catch(r){if("EXDEV"!==r.code)throw r;(0,n.cpSync)(e,t,{recursive:!0}),(0,n.lstatSync)(t).isFile()&&S(t),(0,n.rmSync)(e,{recursive:!0,force:!0})}}function ew(e,t){let r=`${t}.partial`;(0,n.rmSync)(r,{force:!0});try{let a=new s.DatabaseSync(e);try{a.exec(`VACUUM INTO ${er(r)}`)}finally{a.close()}S(r),(0,n.renameSync)(r,t),E(i.default.dirname(t))}catch(e){throw(0,n.rmSync)(r,{force:!0}),e}}function e_(e,t){let n=null,r=null;try{let i=(n=new s.DatabaseSync(t,{readOnly:!0})).prepare("PRAGMA quick_check").all();if(1!==i.length||"ok"!==i[0].quick_check)return!1;(r=new s.DatabaseSync(e)).exec("PRAGMA query_only = ON");let a=e=>e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'").all().map(e=>e.name),o=(e,t)=>e.prepare(`SELECT count(*) AS n FROM "${t.replace(/"/g,'""')}"`).get().n,l=new Set(a(n));return a(r).every(e=>l.has(e)&&o(r,e)===o(n,e))}catch{return!1}finally{n?.close(),r?.close()}}function eA(e){let t=i.default.join(e,q);if(!eE(i.default.join(t,"READY")))return null;let r=eS(i.default.join(t,"READY"))||{},a=eS(i.default.join(t,"APPLYING")),o=null;try{o=(0,n.readFileSync)(i.default.join(t,"ERROR"),"utf8").trim()||null}catch{}let s=!!(a&&("start"!==a.phase||a.keptAsIs));return{...r,started:s,error:o}}function eb({dir:e,dbFile:t,now:r=new Date,copyDatabase:a=ew}){Q(e,{now:r.getTime()});let o=i.default.join(e,q);if(!eE(i.default.join(o,"READY")))return null;let l=eS(i.default.join(o,"READY"))||{},c=i.default.join(o,"APPLYING"),u=eS(c)||{stamp:r.toISOString().replace(/[:.]/g,"-"),phase:"start"},d=()=>y(c,JSON.stringify(u)),f=e=>{u.phase=e,d()},p=i.default.dirname(t),h=i.default.join(p,"backups"),m=i.default.join(h,`${B}${u.stamp}.sqlite`),T=i.default.join(h,`${B}${u.stamp}-files`),g=i.default.join(o,"data.sqlite"),w=["-wal","-shm","-journal"],_=()=>{for(let e of w)eE(`${t}${e}`)&&!eE(`${m}${e}`)&&eg(`${t}${e}`,`${m}${e}`);eE(t)&&!eE(m)&&eg(t,m),E(h),E(p)},A=!1,b=()=>{(0,n.mkdirSync)(h,{recursive:!0});try{if(!ey(t))throw Error("it is not a SQLite database");a(t,m),A=!0}catch(e){for(let e of["",...w])(0,n.rmSync)(`${m}${e}`,{force:!0});(0,n.rmSync)(`${m}.partial`,{force:!0}),u.keptAsIs=String(e.message||e).slice(0,200),d(),_()}};try{eE(c)||d();let r=["start","database-kept","files-kept"].includes(u.phase);if("start"===u.phase&&(!eE(g)||!function(e){let t=null;try{(t=new s.DatabaseSync(e)).exec("PRAGMA query_only = ON");let n=t.prepare("PRAGMA quick_check").all();return 1===n.length&&"ok"===n[0].quick_check&&1===t.prepare("SELECT count(*) AS n FROM sqlite_master WHERE type = 'table' AND name = 'linkedin_connections'").get().n}catch{return!1}finally{t?.close()}}(g)))throw Error("the imported network waiting here is damaged. Cancel the import and import the file again");if(r&&!u.keptAsIs&&eE(t)&&ey(t)&&function(e){let t=null;try{return(t=new s.DatabaseSync(e)).exec("PRAGMA locking_mode = EXCLUSIVE"),t.prepare("SELECT count(*) AS n FROM sqlite_master").get(),!1}catch(e){return 5===e.errcode||6===e.errcode||/database (table )?is locked/i.test(String(e.message))}finally{try{t?.close()}catch{}}}(t))throw Error("another copy of Six Degrees has this network open (one started with npx six-degrees or npm run dev, perhaps). Quit that copy, then restart this one");if(r&&u.keptAsIs&&_(),"start"===u.phase&&(!u.keptAsIs&&eE(t)&&b(),f("database-kept")),"database-kept"===u.phase){let t=()=>(0,n.mkdirSync)(T,{recursive:!0});for(let n of["avatars",...M]){let r=i.default.join(e,n);eE(r)&&(t(),eg(r,i.default.join(T,n)))}for(let r of P){let a=i.default.join(e,r);eE(a)&&(0,n.lstatSync)(a).isFile()&&(t(),(0,n.copyFileSync)(a,i.default.join(T,r)),S(i.default.join(T,r)))}eE(T)&&E(T),E(h),E(e),f("files-kept")}if("files-kept"===u.phase){if(eE(g)){if(!u.keptAsIs&&eE(t)){let e=A&&e_(t,m);if(e||(b(),e=!!u.keptAsIs||e_(t,m)),!e)throw Error("the copy of the network here couldn't be checked, so it wasn't replaced")}for(let e of w)(0,n.rmSync)(`${t}${e}`,{force:!0});(0,n.mkdirSync)(p,{recursive:!0}),eg(g,t),E(p)}f("database-placed")}if("database-placed"===u.phase){let t=i.default.join(o,"files"),r=i.default.join(t,"avatars");if(eE(r)){for(let t of((0,n.mkdirSync)(i.default.join(e,"avatars"),{recursive:!0}),H(r)))eg(i.default.join(r,t),i.default.join(e,"avatars",t));E(i.default.join(e,"avatars"))}for(let n of M){let r=i.default.join(t,n);eE(r)&&eg(r,i.default.join(e,n))}v({dir:e,from:t}),E(e),f("done")}}catch(e){try{(0,n.writeFileSync)(i.default.join(o,"ERROR"),`${e.message}
|
|
150
151
|
`)}catch{}throw e}let N=`${o}.done-${u.stamp}`;(0,n.renameSync)(o,N),(0,n.rmSync)(N,{recursive:!0,force:!0});let R=t=>{let n=i.default.relative(e,t);return!n||n.startsWith("..")||i.default.isAbsolute(n)?t:n};return{appliedAt:r.toISOString(),stagedAt:l.stagedAt??null,exportedAt:l.exportedAt??null,fromVersion:l.fromVersion??null,people:l.people??null,photos:l.photos??null,replacedPeople:l.replacedPeople??null,keptDatabase:eE(m)?R(m):null,keptFiles:eE(T)?R(T):null,keptAsIs:u.keptAsIs??null}}function eN(e,t){e.prepare(`INSERT INTO app_meta (key, value) VALUES ('last_import', ?)
|
|
151
152
|
ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(JSON.stringify(t))}function eR(){let e=process.env.SIX_DEGREES_HOME||i.default.join((0,r.homedir)(),".six-degrees");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e}e.s(["IMPORT_ROUTE",0,el,"ImportError",0,eu,"MAX_IMPORT_BYTES",0,0x10000000,"admitImport",0,function(e,{env:t,scanRunning:n,pending:r,currentPeople:i,max:a=0x10000000}){let o=h({method:e.method,pathname:el,headers:e.headers,env:t});if(o)return{refused:o};let s=Number(e.headers.get("x-six-degrees-size")),l=i(),c=function({scanRunning:e,pending:t,declared:n,currentPeople:r=0,confirmedPeople:i,max:a=0x10000000}){return e?new eu(`${(0,m.runningNow)(e)}. Let it finish, or stop it on the Scan page, then import.`,{status:409}):t?new eu("An import is already waiting to finish. Restart Six Degrees to finish it, or cancel it first.",{status:409}):!Number.isSafeInteger(n)||n<=0?new eu("Choose a Six Degrees export (a .sixdegrees file) to import."):n>a?new eu(`That file is ${ed(n)}. This copy can import files up to ${ed(a)}.`,{status:413}):r>0&&i!==r?new eu(`This copy already has ${r.toLocaleString("en-US")} people. Confirm that the import replaces them.`,{status:409,needsConfirm:!0,people:r}):null}({scanRunning:n(),pending:r(),declared:s,currentPeople:l,confirmedPeople:Number(e.headers.get("x-six-degrees-replace")),max:a});return c?{refused:{status:c.status,error:c.message,...c.extra}}:{declared:s,currentPeople:l}},"applyPendingImport",0,eb,"cancelPendingImport",0,function(e){let t=eA(e);if(!t)return{cancelled:!1,reason:"none"};if(t.started)return{cancelled:!1,reason:"started"};let r=i.default.join(e,q),a=`${r}.cancelled-${Date.now()}`;return(0,n.renameSync)(r,a),(0,n.rmSync)(a,{recursive:!0,force:!0}),{cancelled:!0}},"lastImport",0,function(e){try{let t=e.prepare("SELECT value FROM app_meta WHERE key = 'last_import'").get()?.value,n=t?JSON.parse(t):null;return n&&"object"==typeof n?n:null}catch{return null}},"pendingImport",0,eA,"receiveUpload",0,ep,"recordImport",0,eN,"restartAdvice",0,function({kind:e,code:t,dataDir:n=null}){let r="It finishes the import as it starts.";if(t)return{canRestart:!0,how:"Click Restart now to finish it: Six Degrees restarts, which takes a few seconds, and finishes the import as it starts."};if("mac-app"===e)return{canRestart:!1,how:`Quit Six Degrees (⌘Q) and open it again. ${r}`};if("npm"===e){let e=n?` --data-dir '${String(n).replace(/'/g,"'\\''")}'`:"";return{canRestart:!1,how:`Stop Six Degrees with Ctrl-C in its Terminal window, then start it again. ${r}`,command:`npx six-degrees${e}`}}return"source"===e?{canRestart:!1,how:`Stop Six Degrees with Ctrl-C in its Terminal window, then start it again. ${r}`,command:"npm run start:packaged"}:{canRestart:!1,how:`Stop the server with Ctrl-C and start it again the way you started it. ${r}`}},"restartCodeFrom",0,function(e=process.env){let t=Number(e.SIX_DEGREES_RESTART_CODE);return Number.isInteger(t)&&t>1&&t<126?t:null},"stageImport",0,function(e,{dir:t,applySchema:r,schemaSql:a,appVersion:o,replacedPeople:l=0,now:u=new Date,retired:d=eT}){let f=function(e,{applySchema:t,schemaSql:r,appVersion:i,retired:a=eT}){let o,l=Buffer.alloc(100),u=0,d=(0,n.openSync)(e,"r");try{u=(0,n.readSync)(d,l,0,100,0)}finally{(0,n.closeSync)(d)}if(u<100||!l.subarray(0,16).equals(ec))throw new eu("This isn't a Six Degrees export (a .sixdegrees file), so nothing was imported.");try{o=new s.DatabaseSync(e,{readOnly:!0})}catch(e){throw new eu(`This file couldn't be opened (${e.message}), so nothing was imported.`)}try{let e;o.exec("PRAGMA trusted_schema = OFF; PRAGMA query_only = ON; PRAGMA cell_size_check = ON;");try{e=o.prepare("PRAGMA integrity_check").all()}catch(t){e=[{integrity_check:t.message}]}if(1!==e.length||"ok"!==e[0].integrity_check)throw new eu("This file is damaged (its database fails SQLite's own check), so nothing was imported. Export it again on the other computer.");let n=function(e,t){let n=new s.DatabaseSync(":memory:");try{e(n),n.exec(`${Object.values(et).join(";\n")};`);let r=new Map;for(let e of[...ei(t),...Object.keys(et)]){let t=n.prepare(`PRAGMA table_info("${e}")`).all();r.set(e,{required:t.filter(e=>e.pk>0||e.notnull&&null===e.dflt_value).map(e=>e.name),allowed:new Set(t.map(e=>e.name))})}return{tables:r,indexes:new Set(ea(t))}}finally{n.close()}}(t,r),l=(e,t)=>new eu(`This file holds something a Six Degrees export never does (the ${ef(e)} “${ef(t)}”), so nothing was imported.`),u=new Map(o.prepare("PRAGMA main.table_list").all().map(e=>[e.name,e])),d=o.prepare("SELECT type, name, tbl_name FROM sqlite_master").all(),f=e=>n.tables.has(e)||a.tables.includes(e);for(let e of d){if("table"===e.type){let t=u.get(e.name)?.type;if("table"!==t)throw l(`${t||"unknown"} table`,e.name);if(f(e.name))continue}if(!("index"===e.type&&(n.indexes.has(e.name)||a.indexes.includes(e.name)||String(e.name).startsWith("sqlite_autoindex_")&&f(e.tbl_name))))throw l(e.type,e.name)}let p=new Set(d.filter(e=>"table"===e.type).map(e=>e.name));if(!p.has("sd_export_manifest")||!p.has("sd_export_files"))throw new eu("This is a database but not a Six Degrees export, so nothing was imported. Make one on the other computer with Settings → Your data → Save a copy.");for(let[e,{required:t,allowed:r}]of n.tables){if(!p.has(e)){if(!em.includes(e))continue;throw new eu(`This export has no “${e}” table, so nothing was imported.`)}let n=o.prepare(`PRAGMA table_xinfo("${e}")`).all(),i=n.map(e=>e.name),s=a.columns[e]||[];if(!(0===u.get(e).wr&&n.every(e=>0===e.hidden&&(r.has(e.name)||s.includes(e.name)))&&t.every(e=>i.includes(e))))throw new eu(`This export's “${e}” table isn't laid out the way Six Degrees makes it, so nothing was imported.`)}let h=Object.fromEntries(o.prepare("SELECT key, value FROM sd_export_manifest").all().map(e=>[e.key,e.value])),m=Number(h.format);if(1!==m)throw new eu(Number.isInteger(m)&&m>1?"This export was made by a newer Six Degrees than this copy. Update this copy first, then import it.":"This file's export details aren't ones Six Degrees writes, so nothing was imported.");let T=String(h.app_version??"");if(!/^v?\d+\.\d+\.\d+/.test(T))throw new eu("This file doesn't say which version of Six Degrees made it, so nothing was imported.");if((0,c.compareVersions)(T,i)>0)throw new eu(`This file comes from Six Degrees ${ef(T)}, which is newer than this copy (${i}). Update this copy first, then import it.`);let E=null;try{E=JSON.parse(h.counts)}catch{}if(!E||"object"!=typeof E||Array.isArray(E))throw new eu("This file's export details aren't ones Six Degrees writes, so nothing was imported.");let y=(e,t,n)=>new eu(`This file's ${e} doesn't match its own export details (${t}, where they say ${ef(n)}), so nothing was imported. Export it again on the other computer.`);for(let e of p){if(Object.hasOwn(et,e))continue;let t=o.prepare(`SELECT count(*) AS n FROM "${e}"`).get().n;if(!Object.hasOwn(E,e)||Number(E[e])!==t)throw y(`“${e}” table`,`${t} rows`,E[e]??"nothing")}for(let[e,t]of Object.entries(E))if(!p.has(e)&&0!==Number(t))throw y(`“${ef(e)}” table`,"no table",t);let S=0,g=0,w=o.prepare("SELECT bytes, sha256 FROM sd_export_files WHERE path = ?");for(let{path:e}of o.prepare("SELECT path FROM sd_export_files").all()){let t,n=eh(e);if(!n)throw new eu(`This file carries “${ef(e)}”, which an export never includes, so nothing was imported.`);let r=w.get(e);if(!(r?.bytes instanceof Uint8Array)||en(r.bytes)!==r.sha256)throw new eu(`“${e}” inside this file is damaged (it doesn't match its checksum), so nothing was imported.`);if("photo"===n){S++;continue}try{t=JSON.parse(Buffer.from(r.bytes).toString("utf8"))}catch{t=void 0}if(!t||"object"!=typeof t||Array.isArray(t))throw new eu(`“${e}” inside this file can't be read, so nothing was imported.`);let i=P.includes(e)?F(e,t):null;if(i)throw new eu(`“${e}” inside this file can't be used (${i}), so nothing was imported.`);g++}if(Number(h.files)!==S+g)throw y("list of files",`${S+g} files`,h.files??"nothing");return{fromVersion:T,exportedAt:h.exported_at||null,people:eo(o),photos:S,files:g}}catch(e){if(e instanceof eu)throw e;throw new eu(`This file couldn't be read as a Six Degrees export (${ef(e.message)}), so nothing was imported.`)}finally{o.close()}}(e,{applySchema:r,schemaSql:a,appVersion:o,retired:d}),p=i.default.dirname(e),h=i.default.join(p,"files"),m=i.default.join(p,"data.sqlite"),T=[],y=new s.DatabaseSync(m);try{y.exec("PRAGMA trusted_schema = OFF; PRAGMA cell_size_check = ON;"),r(y),y.exec(`ATTACH DATABASE ${er(e)} AS up`);try{for(let e of(y.exec("BEGIN"),ei(a))){let t=new Set(y.prepare(`PRAGMA main.table_info("${e}")`).all().map(e=>e.name)),n=y.prepare(`PRAGMA up.table_info("${e}")`).all().filter(e=>t.has(e.name)).map(e=>`"${e.name}"`).join(", ");n&&y.exec(`INSERT INTO main."${e}" (${n}) SELECT ${n} FROM up."${e}" ORDER BY rowid`)}y.exec("COMMIT")}catch(e){try{y.exec("ROLLBACK")}catch{}throw new eu(`This export's network doesn't fit this copy's database (${e.message}), so nothing was imported.`)}(0,n.mkdirSync)(i.default.join(h,"avatars"),{recursive:!0});let t=y.prepare("SELECT bytes, sha256 FROM up.sd_export_files WHERE path = ?");for(let{path:e}of y.prepare("SELECT path FROM up.sd_export_files").all()){let r=t.get(e),a=eh(e);if(!a||!(r?.bytes instanceof Uint8Array)||en(r.bytes)!==r.sha256)throw new eu(`“${ef(e)}” inside this file is damaged, so nothing was imported.`);(0,n.writeFileSync)(i.default.join(h,e),r.bytes,{flag:"wx"}),"file"===a&&T.push(i.default.join(h,e))}}finally{y.close()}(0,n.rmSync)(e,{force:!0});let g={stagedAt:u.toISOString(),exportedAt:f.exportedAt,fromVersion:f.fromVersion,people:f.people,photos:f.photos,replacedPeople:l};for(let e of((0,n.writeFileSync)(i.default.join(p,"READY"),`${JSON.stringify(g,null,2)}
|
|
152
|
-
`),[m,...T,i.default.join(p,"READY")]))S(e);for(let e of[i.default.join(h,"avatars"),h,p])E(e);return(0,n.renameSync)(p,i.default.join(t,q)),E(t),g}],19041);let eI={users:["sectors","goals","company_prestige_config"],user_profile:["sectors","goals","company_prestige_config"],linkedin_connections:["influence_signals"],notifications:["data"],queue_items:[],user_stats:[]},eO={linkedin_connections:["is_catalyst"],notifications:["seen"],users:[],user_profile:[],queue_items:[],user_stats:[]},eL=null,ex=Symbol.for("six-degrees.db-opened");function eD(){return process.env.SIX_DEGREES_DB||i.default.join(eR(),"six-degrees.sqlite")}function ek(e){e.exec(a),function(e){for(let[t,n,r]of eF)e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===n)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${n} ${r}`)}(e)}let eF=[["linkedin_connections","score_why","TEXT"]],eX="auto-before-";e.s(["AUTO_BACKUP_PREFIX",0,eX,"applySchema",0,ek,"dataDir",0,eR,"dbFile",0,eD,"decodeRow",0,function(e,t){if(!t)return t;let n={...t};for(let t of eI[e]||[])if("string"==typeof n[t])try{n[t]=JSON.parse(n[t])}catch{}for(let t of eO[e]||[])(0===n[t]||1===n[t])&&(n[t]=!!n[t]);return n},"encodeValue",0,function(e,t,n){return void 0===n?null:(eI[e]||[]).includes(t)?null===n?null:JSON.stringify(n):(eO[e]||[]).includes(t)?null===n?null:+!!n:"boolean"==typeof n?+!!n:null!==n&&"object"==typeof n?JSON.stringify(n):n},"getDb",0,function(){if(eL)return eL;let e=eD(),r=null;if(!globalThis[ex])try{(r=eb({dir:eR(),dbFile:e}))&&console.log(`Six Degrees: finished the import (${r.people} people). What was here before: ${r.keptDatabase||"nothing to keep"}.`)}catch(e){console.error(`Six Degrees: could not finish the import (will try again next start): ${e.message}`)}globalThis[ex]=!0,eL=new t.DatabaseSync(e);try{let t=function(e,{dir:t,version:r,keep:a=5,now:o=new Date}){let s=i.default.join(t,"app-version"),l=null;try{l=(0,n.readFileSync)(s,"utf8").trim()}catch{}if(l===r)return null;let c=null;if(e.prepare("SELECT count(*) AS n FROM sqlite_master WHERE type = 'table' AND name = 'linkedin_connections'").get().n>0){let s=i.default.join(t,"backups");(0,n.mkdirSync)(s,{recursive:!0});let l=o.toISOString().replace(/[:.]/g,"-");for(let{f:t}of(c=i.default.join(s,`${eX}${r}-${l}.sqlite`),e.exec(`VACUUM INTO '${c.replace(/'/g,"''")}'`),(0,n.readdirSync)(s).filter(e=>e.startsWith(eX)&&e.endsWith(".sqlite")).map(e=>({f:e,at:(0,n.statSync)(i.default.join(s,e)).mtimeMs})).sort((e,t)=>t.at-e.at||t.f.localeCompare(e.f)).slice(a)))(0,n.rmSync)(i.default.join(s,t),{force:!0})}return(0,n.writeFileSync)(s,`${r}
|
|
153
|
+
`),[m,...T,i.default.join(p,"READY")]))S(e);for(let e of[i.default.join(h,"avatars"),h,p])E(e);return(0,n.renameSync)(p,i.default.join(t,q)),E(t),g}],19041);let eI={users:["sectors","goals","company_prestige_config"],user_profile:["sectors","goals","company_prestige_config"],linkedin_connections:["influence_signals"],notifications:["data"],queue_items:[],user_stats:[]},eO={linkedin_connections:["is_catalyst"],notifications:["seen"],users:[],user_profile:[],queue_items:[],user_stats:[]},eL=null,ex=Symbol.for("six-degrees.db-opened");function eD(){return process.env.SIX_DEGREES_DB||i.default.join(eR(),"six-degrees.sqlite")}function ek(e){e.exec(a),function(e){for(let[t,n,r]of eF)e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===n)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${n} ${r}`)}(e)}let eF=[["linkedin_connections","score_why","TEXT"],["linkedin_connections","mutual_count","INTEGER"]],eX="auto-before-";e.s(["AUTO_BACKUP_PREFIX",0,eX,"applySchema",0,ek,"dataDir",0,eR,"dbFile",0,eD,"decodeRow",0,function(e,t){if(!t)return t;let n={...t};for(let t of eI[e]||[])if("string"==typeof n[t])try{n[t]=JSON.parse(n[t])}catch{}for(let t of eO[e]||[])(0===n[t]||1===n[t])&&(n[t]=!!n[t]);return n},"encodeValue",0,function(e,t,n){return void 0===n?null:(eI[e]||[]).includes(t)?null===n?null:JSON.stringify(n):(eO[e]||[]).includes(t)?null===n?null:+!!n:"boolean"==typeof n?+!!n:null!==n&&"object"==typeof n?JSON.stringify(n):n},"getDb",0,function(){if(eL)return eL;let e=eD(),r=null;if(!globalThis[ex])try{(r=eb({dir:eR(),dbFile:e}))&&console.log(`Six Degrees: finished the import (${r.people} people). What was here before: ${r.keptDatabase||"nothing to keep"}.`)}catch(e){console.error(`Six Degrees: could not finish the import (will try again next start): ${e.message}`)}globalThis[ex]=!0,eL=new t.DatabaseSync(e);try{let t=function(e,{dir:t,version:r,keep:a=5,now:o=new Date}){let s=i.default.join(t,"app-version"),l=null;try{l=(0,n.readFileSync)(s,"utf8").trim()}catch{}if(l===r)return null;let c=null;if(e.prepare("SELECT count(*) AS n FROM sqlite_master WHERE type = 'table' AND name = 'linkedin_connections'").get().n>0){let s=i.default.join(t,"backups");(0,n.mkdirSync)(s,{recursive:!0});let l=o.toISOString().replace(/[:.]/g,"-");for(let{f:t}of(c=i.default.join(s,`${eX}${r}-${l}.sqlite`),e.exec(`VACUUM INTO '${c.replace(/'/g,"''")}'`),(0,n.readdirSync)(s).filter(e=>e.startsWith(eX)&&e.endsWith(".sqlite")).map(e=>({f:e,at:(0,n.statSync)(i.default.join(s,e)).mtimeMs})).sort((e,t)=>t.at-e.at||t.f.localeCompare(e.f)).slice(a)))(0,n.rmSync)(i.default.join(s,t),{force:!0})}return(0,n.writeFileSync)(s,`${r}
|
|
153
154
|
`),c}(eL,{dir:i.default.dirname(e),version:o});t&&console.log(`Six Degrees ${o}: backed up your data first → ${t}`)}catch(e){console.error(`Six Degrees: could not back up your data before ${o} (will try again next start): ${e.message}`)}if(ek(eL),r)try{eN(eL,r)}catch{}return eL},"newId",0,function(){return crypto.randomUUID()},"nowIso",0,function(){return new Date().toISOString()}],88431)}];
|
|
154
155
|
|
|
155
156
|
//# sourceMappingURL=lib_db-client_15le7cw.js.map
|