six-degrees 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +14 -14
  4. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  5. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  10. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  13. package/.next/standalone/.next/server/app/_not-found.rsc +20 -19
  14. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +20 -19
  15. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +16 -15
  16. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  17. package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/update/route.js +1 -1
  45. package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/import/page.js +1 -1
  50. package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
  52. package/.next/standalone/.next/server/app/import.html +1 -1
  53. package/.next/standalone/.next/server/app/import.rsc +24 -23
  54. package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +24 -23
  55. package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
  56. package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +18 -17
  57. package/.next/standalone/.next/server/app/index.html +1 -1
  58. package/.next/standalone/.next/server/app/index.rsc +22 -21
  59. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +18 -17
  60. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +22 -21
  61. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  62. package/.next/standalone/.next/server/app/launch/page.js +1 -1
  63. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/launch.html +2 -2
  66. package/.next/standalone/.next/server/app/launch.rsc +24 -23
  67. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +24 -23
  68. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
  69. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +18 -17
  70. package/.next/standalone/.next/server/app/page.js +1 -1
  71. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  73. package/.next/standalone/.next/server/app/paths/page.js +1 -1
  74. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  76. package/.next/standalone/.next/server/app/paths.html +1 -1
  77. package/.next/standalone/.next/server/app/paths.rsc +24 -23
  78. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +24 -23
  79. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
  80. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +18 -17
  81. package/.next/standalone/.next/server/app/profile/page.js +1 -1
  82. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  83. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  84. package/.next/standalone/.next/server/app/profile.html +1 -1
  85. package/.next/standalone/.next/server/app/profile.rsc +24 -23
  86. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +24 -23
  87. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
  88. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +18 -17
  89. package/.next/standalone/.next/server/app/queue/page.js +1 -1
  90. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/queue.html +1 -1
  93. package/.next/standalone/.next/server/app/queue.rsc +24 -23
  94. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +24 -23
  95. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
  96. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +18 -17
  97. package/.next/standalone/.next/server/app/scores/page.js +1 -1
  98. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  99. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  100. package/.next/standalone/.next/server/app/scores.html +1 -1
  101. package/.next/standalone/.next/server/app/scores.rsc +24 -23
  102. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +24 -23
  103. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
  104. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +18 -17
  105. package/.next/standalone/.next/server/app/settings/page.js +1 -1
  106. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/settings.html +1 -1
  109. package/.next/standalone/.next/server/app/settings.rsc +24 -23
  110. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +24 -23
  111. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  112. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +18 -17
  113. package/.next/standalone/.next/server/app/setup/page.js +1 -1
  114. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/setup.html +1 -1
  117. package/.next/standalone/.next/server/app/setup.rsc +24 -23
  118. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +24 -23
  119. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  120. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +18 -17
  121. package/.next/standalone/.next/server/app/social/page.js +1 -1
  122. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  123. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  124. package/.next/standalone/.next/server/app/social.html +1 -1
  125. package/.next/standalone/.next/server/app/social.rsc +24 -23
  126. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +24 -23
  127. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
  128. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +18 -17
  129. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0-rnla2._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/[root-of-the-server]__00la_y0._.js +1 -1
  131. package/.next/standalone/.next/server/chunks/[root-of-the-server]__05_3-22._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/[root-of-the-server]__07t47cm._.js +1 -1
  133. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0cj5jqc._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0e0fei3._.js +1 -1
  135. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljnyho._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0o5-tcg._.js +1 -1
  137. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0qrnous._.js +1 -1
  138. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
  139. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0um1uey._.js +1 -1
  140. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0wmexuc._.js +1 -1
  141. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0xu34sz._.js +1 -1
  142. package/.next/standalone/.next/server/chunks/[root-of-the-server]__133knx1._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/[root-of-the-server]__13dx4sd._.js +1 -1
  144. package/.next/standalone/.next/server/chunks/[root-of-the-server]__14ou7j5._.js +1 -1
  145. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15-17hl._.js +1 -1
  146. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15wc9e-._.js +1 -1
  147. package/.next/standalone/.next/server/chunks/[root-of-the-server]__16iu0hv._.js +1 -1
  148. package/.next/standalone/.next/server/chunks/[root-of-the-server]__18bcnu4._.js +3 -0
  149. package/.next/standalone/.next/server/chunks/[root-of-the-server]__19b7mig._.js +1 -1
  150. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1bbcwub._.js +2 -2
  151. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1eris29._.js +1 -1
  152. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1gjo_cq._.js +1 -1
  153. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1qcm08_._.js +1 -1
  155. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1rphsdk._.js +1 -1
  156. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +2 -2
  157. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1w25q0m._.js +1 -1
  158. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20rwfdw._.js +2 -2
  159. package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
  160. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +2 -2
  161. package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +5 -5
  162. package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +5 -5
  163. package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +5 -5
  164. package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +9 -9
  165. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08oxiqh._.js +3 -0
  166. package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +1 -1
  167. package/.next/standalone/.next/server/chunks/ssr/_08g31gm._.js +3 -0
  168. package/.next/standalone/.next/server/chunks/ssr/_0gk_ofx._.js +3 -0
  169. package/.next/standalone/.next/server/chunks/ssr/_0nwsf93._.js +3 -0
  170. package/.next/standalone/.next/server/chunks/ssr/_0vho1lb._.js +3 -0
  171. package/.next/standalone/.next/server/chunks/ssr/{_0jdkqgi._.js → _1-658fq._.js} +2 -2
  172. package/.next/standalone/.next/server/chunks/ssr/_1bc46kz._.js +3 -0
  173. package/.next/standalone/.next/server/chunks/ssr/_1f_n00p._.js +3 -0
  174. package/.next/standalone/.next/server/chunks/ssr/_1fm1ih_._.js +9 -0
  175. package/.next/standalone/.next/server/chunks/ssr/_1k2nmbw._.js +9 -0
  176. package/.next/standalone/.next/server/chunks/ssr/_2105jz8._.js +3 -0
  177. package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +1 -1
  178. package/.next/standalone/.next/server/chunks/ssr/app_components_0t908t-._.js +3 -0
  179. package/.next/standalone/.next/server/chunks/ssr/app_components_0uuff77._.js +13 -0
  180. package/.next/standalone/.next/server/chunks/ssr/app_components_1j3q-h5._.js +13 -0
  181. package/.next/standalone/.next/server/chunks/ssr/{_0gtv9jb._.js → app_components_CompanyScores_1g0mytz.js} +2 -2
  182. package/.next/standalone/.next/server/chunks/ssr/app_components_settings_SectorPicker_1c-29qw.js +1 -1
  183. package/.next/standalone/.next/server/chunks/ssr/app_import_page_1fmu6_l.js +1 -1
  184. package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +14 -12
  185. package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
  186. package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
  187. package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +6 -6
  188. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
  189. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +4 -4
  190. package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
  191. package/.next/standalone/.next/server/chunks/ssr/{lib_0i8v-s3._.js → lib_1c4ieuw._.js} +2 -2
  192. package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +1 -1
  193. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  194. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  195. package/.next/standalone/.next/server/pages/404.html +1 -1
  196. package/.next/standalone/.next/server/pages/500.html +1 -1
  197. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  198. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  199. package/.next/standalone/.next/static/chunks/02pq76u7y4v9-.js +22 -0
  200. package/.next/standalone/.next/static/chunks/0cmq0exd4d0h9.js +1 -0
  201. package/.next/{static/chunks/2wgz9ietkqqe6.js → standalone/.next/static/chunks/0i02yxppzds1o.js} +1 -1
  202. package/.next/standalone/.next/static/chunks/0m_p4k-q2qh--.js +1 -0
  203. package/.next/standalone/.next/static/chunks/0oyslj62jkubd.js +1 -0
  204. package/.next/standalone/.next/static/chunks/{1x_ysly42-teq.css → 0vo-l8hxneba6.css} +1 -1
  205. package/.next/{static/chunks/3sowbvbaj1s6n.js → standalone/.next/static/chunks/0ws7zy0w57ufi.js} +1 -1
  206. package/.next/standalone/.next/static/chunks/0yh8z2tbrc5i_.js +1 -0
  207. package/.next/standalone/.next/static/chunks/172e10mi-tpo_.js +34 -0
  208. package/.next/standalone/.next/static/chunks/1ei5vbe2uw6fl.js +1 -0
  209. package/.next/standalone/.next/static/chunks/1f7_pl_wq7lh3.js +11 -0
  210. package/.next/standalone/.next/static/chunks/1jzbe7zdx9vbj.js +2 -0
  211. package/.next/standalone/.next/static/chunks/1m3017gp790pw.js +45 -0
  212. package/.next/standalone/.next/static/chunks/1t20e8u0st7ep.js +1 -0
  213. package/.next/standalone/.next/static/chunks/2-ch9rm27eril.js +11 -0
  214. package/.next/standalone/.next/static/chunks/2ldv-v3s9yaif.js +1 -0
  215. package/.next/standalone/.next/static/chunks/3bp284gjf7dyq.js +1 -0
  216. package/.next/standalone/.next/static/chunks/3k1f6clbn3gj3.js +7 -0
  217. package/.next/standalone/.next/static/chunks/3l4t8je6iguzc.js +1 -0
  218. package/.next/standalone/.next/static/chunks/{0muwt9bykzr-1.js → 3tplzuc9jk-tl.js} +1 -1
  219. package/.next/standalone/.next/static/chunks/42m0bqr8pbovz.js +11 -0
  220. package/.next/standalone/CHANGELOG.md +61 -0
  221. package/.next/standalone/README.md +22 -8
  222. package/.next/standalone/app/api/scraper/route.js +40 -3
  223. package/.next/standalone/app/api/update/route.js +12 -6
  224. package/.next/standalone/app/components/AppHeader.js +257 -0
  225. package/.next/standalone/app/components/Avatar.js +2 -1
  226. package/.next/standalone/app/components/ChainView.js +12 -12
  227. package/.next/standalone/app/components/FilterPanel.js +20 -12
  228. package/.next/standalone/app/components/ForceGraph.js +163 -25
  229. package/.next/standalone/app/components/GalaxyLab.js +43 -12
  230. package/.next/standalone/app/components/GridView.js +4 -4
  231. package/.next/standalone/app/components/LinkedInLimits.js +2 -1
  232. package/.next/standalone/app/components/ListView.js +3 -3
  233. package/.next/standalone/app/components/NoteDetail.js +2 -1
  234. package/.next/standalone/app/components/OnboardingGate.js +2 -2
  235. package/.next/standalone/app/components/OutlinkQuest.js +2 -1
  236. package/.next/standalone/app/components/PathsAnalyzer.js +3 -2
  237. package/.next/standalone/app/components/PeopleMap.js +2 -1
  238. package/.next/standalone/app/components/RingsView.js +3 -3
  239. package/.next/standalone/app/components/ScanTrail.js +85 -0
  240. package/.next/standalone/app/components/SeparationView.js +100 -77
  241. package/.next/standalone/app/components/Sidebar.js +4 -4
  242. package/.next/standalone/app/components/TheirCircle.js +2 -1
  243. package/.next/standalone/app/components/ThemeLoader.js +9 -0
  244. package/.next/standalone/app/components/UpdatePanel.js +20 -2
  245. package/.next/standalone/app/components/settings/AppearanceSection.js +226 -0
  246. package/.next/standalone/app/components/settings/NetworkHealthSection.js +2 -1
  247. package/.next/standalone/app/components/ui.js +2 -1
  248. package/.next/standalone/app/globals.css +70 -2
  249. package/.next/standalone/app/import/page.js +3 -3
  250. package/.next/standalone/app/layout.js +11 -2
  251. package/.next/standalone/app/page.js +69 -215
  252. package/.next/standalone/app/paths/page.js +8 -21
  253. package/.next/standalone/app/profile/page.js +11 -10
  254. package/.next/standalone/app/queue/page.js +8 -21
  255. package/.next/standalone/app/scores/page.js +1 -1
  256. package/.next/standalone/app/settings/page.js +7 -3
  257. package/.next/standalone/app/setup/page.js +83 -88
  258. package/.next/standalone/app/social/Crm.js +2 -1
  259. package/.next/standalone/app/social/SocialHub.js +2 -2
  260. package/.next/standalone/app/social/page.js +1 -1
  261. package/.next/standalone/lib/data-import.js +1 -0
  262. package/.next/standalone/lib/galaxy-export.js +2 -1
  263. package/.next/standalone/lib/galaxy-lab.js +24 -8
  264. package/.next/standalone/lib/level.js +51 -0
  265. package/.next/standalone/lib/release.js +13 -7
  266. package/.next/standalone/lib/scanner-python.js +38 -8
  267. package/.next/standalone/lib/scraper-client.js +2 -1
  268. package/.next/standalone/lib/separation.js +4 -2
  269. package/.next/standalone/lib/theme-store.js +61 -0
  270. package/.next/standalone/lib/themes.js +186 -0
  271. package/.next/standalone/lib/tiers.js +2 -8
  272. package/.next/standalone/package-lock.json +2 -2
  273. package/.next/standalone/package.json +4 -4
  274. package/.next/standalone/scripts/build-desktop.mjs +325 -0
  275. package/.next/standalone/scripts/build-site.mjs +85 -15
  276. package/.next/standalone/scripts/gen-test-network.mjs +93 -0
  277. package/.next/standalone/scripts/next.mjs +20 -0
  278. package/.next/standalone/scripts/readme_buttons.py +3 -0
  279. package/.next/standalone/scripts/requirements.txt +18 -1
  280. package/.next/standalone/scripts/site-news.mjs +54 -9
  281. package/.next/standalone/scripts/smoke-desktop.mjs +177 -0
  282. package/.next/standalone/scripts/windows/six-degrees.iss +100 -0
  283. package/.next/static/chunks/02pq76u7y4v9-.js +22 -0
  284. package/.next/static/chunks/0cmq0exd4d0h9.js +1 -0
  285. package/.next/{standalone/.next/static/chunks/2wgz9ietkqqe6.js → static/chunks/0i02yxppzds1o.js} +1 -1
  286. package/.next/static/chunks/0m_p4k-q2qh--.js +1 -0
  287. package/.next/static/chunks/0oyslj62jkubd.js +1 -0
  288. package/.next/static/chunks/{1x_ysly42-teq.css → 0vo-l8hxneba6.css} +1 -1
  289. package/.next/{standalone/.next/static/chunks/3sowbvbaj1s6n.js → static/chunks/0ws7zy0w57ufi.js} +1 -1
  290. package/.next/static/chunks/0yh8z2tbrc5i_.js +1 -0
  291. package/.next/static/chunks/172e10mi-tpo_.js +34 -0
  292. package/.next/static/chunks/1ei5vbe2uw6fl.js +1 -0
  293. package/.next/static/chunks/1f7_pl_wq7lh3.js +11 -0
  294. package/.next/static/chunks/1jzbe7zdx9vbj.js +2 -0
  295. package/.next/static/chunks/1m3017gp790pw.js +45 -0
  296. package/.next/static/chunks/1t20e8u0st7ep.js +1 -0
  297. package/.next/static/chunks/2-ch9rm27eril.js +11 -0
  298. package/.next/static/chunks/2ldv-v3s9yaif.js +1 -0
  299. package/.next/static/chunks/3bp284gjf7dyq.js +1 -0
  300. package/.next/static/chunks/3k1f6clbn3gj3.js +7 -0
  301. package/.next/static/chunks/3l4t8je6iguzc.js +1 -0
  302. package/.next/static/chunks/{0muwt9bykzr-1.js → 3tplzuc9jk-tl.js} +1 -1
  303. package/.next/static/chunks/42m0bqr8pbovz.js +11 -0
  304. package/CHANGELOG.md +61 -0
  305. package/README.md +22 -8
  306. package/lib/data-import.js +1 -0
  307. package/lib/galaxy-export.js +2 -1
  308. package/lib/galaxy-lab.js +24 -8
  309. package/lib/level.js +51 -0
  310. package/lib/release.js +13 -7
  311. package/lib/scanner-python.js +38 -8
  312. package/lib/scraper-client.js +2 -1
  313. package/lib/separation.js +4 -2
  314. package/lib/theme-store.js +61 -0
  315. package/lib/themes.js +186 -0
  316. package/lib/tiers.js +2 -8
  317. package/package.json +4 -4
  318. package/scripts/requirements.txt +18 -1
  319. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0ljcioj._.js +0 -3
  320. package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16hs8kw._.js +0 -3
  321. package/.next/standalone/.next/server/chunks/ssr/_01kacen._.js +0 -3
  322. package/.next/standalone/.next/server/chunks/ssr/_0xi-fbs._.js +0 -3
  323. package/.next/standalone/.next/server/chunks/ssr/_0xmwmfv._.js +0 -3
  324. package/.next/standalone/.next/server/chunks/ssr/_1-b9hj7._.js +0 -9
  325. package/.next/standalone/.next/server/chunks/ssr/_112ewem._.js +0 -3
  326. package/.next/standalone/.next/server/chunks/ssr/_16ab63q._.js +0 -3
  327. package/.next/standalone/.next/server/chunks/ssr/_1fxm0-s._.js +0 -3
  328. package/.next/standalone/.next/server/chunks/ssr/_1ra1d3r._.js +0 -9
  329. package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +0 -3
  330. package/.next/standalone/.next/server/chunks/ssr/lib_13rapwj._.js +0 -3
  331. package/.next/standalone/.next/static/chunks/03bziijw5srol.js +0 -1
  332. package/.next/standalone/.next/static/chunks/0bgq8wmopl_ig.js +0 -7
  333. package/.next/standalone/.next/static/chunks/0ezus6p2eb-vg.js +0 -1
  334. package/.next/standalone/.next/static/chunks/0g_fy2034bp0x.js +0 -34
  335. package/.next/standalone/.next/static/chunks/0q5dru4q6gxl5.js +0 -22
  336. package/.next/standalone/.next/static/chunks/0w-byiwb2zax8.js +0 -2
  337. package/.next/standalone/.next/static/chunks/1g7jcovdejc9-.js +0 -1
  338. package/.next/standalone/.next/static/chunks/1i51yylxdzht1.js +0 -1
  339. package/.next/standalone/.next/static/chunks/1zf8swaasjf1e.js +0 -43
  340. package/.next/standalone/.next/static/chunks/2dwtoszeq91us.js +0 -1
  341. package/.next/standalone/.next/static/chunks/2rqtpccruavf2.js +0 -1
  342. package/.next/standalone/.next/static/chunks/30x3oq_st7a5r.js +0 -1
  343. package/.next/standalone/.next/static/chunks/355ryio1b7sm1.js +0 -1
  344. package/.next/standalone/.next/static/chunks/3ap5hgma7n0o7.js +0 -1
  345. package/.next/standalone/.next/static/chunks/3fci6qi39-1n5.js +0 -1
  346. package/.next/static/chunks/03bziijw5srol.js +0 -1
  347. package/.next/static/chunks/0bgq8wmopl_ig.js +0 -7
  348. package/.next/static/chunks/0ezus6p2eb-vg.js +0 -1
  349. package/.next/static/chunks/0g_fy2034bp0x.js +0 -34
  350. package/.next/static/chunks/0q5dru4q6gxl5.js +0 -22
  351. package/.next/static/chunks/0w-byiwb2zax8.js +0 -2
  352. package/.next/static/chunks/1g7jcovdejc9-.js +0 -1
  353. package/.next/static/chunks/1i51yylxdzht1.js +0 -1
  354. package/.next/static/chunks/1zf8swaasjf1e.js +0 -43
  355. package/.next/static/chunks/2dwtoszeq91us.js +0 -1
  356. package/.next/static/chunks/2rqtpccruavf2.js +0 -1
  357. package/.next/static/chunks/30x3oq_st7a5r.js +0 -1
  358. package/.next/static/chunks/355ryio1b7sm1.js +0 -1
  359. package/.next/static/chunks/3ap5hgma7n0o7.js +0 -1
  360. package/.next/static/chunks/3fci6qi39-1n5.js +0 -1
  361. /package/.next/standalone/.next/static/{I-cj79yE2IZ8taX2dZGp3 → dQUvvVSXqbkEFC3-CNcwT}/_buildManifest.js +0 -0
  362. /package/.next/standalone/.next/static/{I-cj79yE2IZ8taX2dZGp3 → dQUvvVSXqbkEFC3-CNcwT}/_clientMiddlewareManifest.js +0 -0
  363. /package/.next/standalone/.next/static/{I-cj79yE2IZ8taX2dZGp3 → dQUvvVSXqbkEFC3-CNcwT}/_ssgManifest.js +0 -0
  364. /package/.next/static/{I-cj79yE2IZ8taX2dZGp3 → dQUvvVSXqbkEFC3-CNcwT}/_buildManifest.js +0 -0
  365. /package/.next/static/{I-cj79yE2IZ8taX2dZGp3 → dQUvvVSXqbkEFC3-CNcwT}/_clientMiddlewareManifest.js +0 -0
  366. /package/.next/static/{I-cj79yE2IZ8taX2dZGp3 → dQUvvVSXqbkEFC3-CNcwT}/_ssgManifest.js +0 -0
package/lib/themes.js ADDED
@@ -0,0 +1,186 @@
1
+ // Themes: how the app looks, chosen in Settings → Appearance (Blake, 2026-10-03:
2
+ // "2 ways they can edit the back round color, dots about everything you need to
3
+ // have it custom to that person like battle field 4 does but then also have our
4
+ // own custom uis ... obsidian ... google glass ... a super analytical one ...
5
+ // space etc this is for larpers after all").
6
+ //
7
+ // Two ways: a preset (THEMES), or a preset with your own changes on top
8
+ // (`custom`, every field optional). Either comes down to a handful of CSS
9
+ // variables on the page (themeVars), a backdrop the stylesheet draws
10
+ // (app/globals.css, html[data-backdrop]), and the dot colours the map draws with
11
+ // (TIER_COLORS, a live object every view reads).
12
+ //
13
+ // Every theme is dark underneath, so the text, which is light everywhere, reads
14
+ // on all of them: a theme changes what's behind it, not the words.
15
+ //
16
+ // What arrives from storage or a pasted theme code is untrusted: cleanTheme
17
+ // keeps only #rrggbb colours, the listed choices and numbers in range, so
18
+ // nothing else can reach the stylesheet.
19
+
20
+ export const BACKDROPS = ['none', 'stars', 'grid', 'glow', 'horizon'];
21
+ export const FONTS = {
22
+ system: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
23
+ rounded: 'ui-rounded, "SF Pro Rounded", "Nunito", -apple-system, BlinkMacSystemFont, sans-serif',
24
+ mono: 'ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace',
25
+ serif: 'ui-serif, "New York", Georgia, "Times New Roman", serif',
26
+ };
27
+ export const LINE_MODES = ['tier', 'one'];
28
+
29
+ /**
30
+ * A theme. `bg` is the colour behind everything, `bg2` the second colour of its
31
+ * backdrop, `panel` the side panels' tint and `glass` how see-through and
32
+ * blurred they are (0 solid, 1 frosted glass). `tiers` are the dots, `you` your
33
+ * own dot, `lines` how the map's lines are coloured ('tier', as the person they
34
+ * lead to, or 'one', all `line`).
35
+ */
36
+ export const STANDARD = Object.freeze({
37
+ id: 'standard', name: 'Standard', blurb: 'The original: deep navy, gold, purple and blue.',
38
+ bg: '#0a0a1a', bg2: '#1a1440', backdrop: 'none', panel: '#0a0f1e', glass: 0.35, accent: '#3498db',
39
+ tiers: Object.freeze({ S: '#ffd700', A: '#9b59b6', B: '#3498db', C: '#95a5a6', D: '#bdc3c7' }),
40
+ you: '#ffffff', lines: 'tier', line: '#5a6274', font: 'system',
41
+ });
42
+
43
+ export const THEMES = Object.freeze([
44
+ STANDARD,
45
+ Object.freeze({
46
+ id: 'contrast', name: 'High contrast', blurb: 'Pure black, the brightest dots, solid panels. Easiest to read.',
47
+ bg: '#000000', bg2: '#000000', backdrop: 'none', panel: '#000000', glass: 0, accent: '#4cc9f0',
48
+ tiers: Object.freeze({ S: '#ffe500', A: '#d08bff', B: '#4cc9f0', C: '#e6e6e6', D: '#ffffff' }),
49
+ you: '#ffffff', lines: 'tier', line: '#8a8a8a', font: 'system',
50
+ }),
51
+ Object.freeze({
52
+ id: 'obsidian', name: 'Obsidian', blurb: 'Graphite and violet, grey links: the note-taking app’s graph.',
53
+ bg: '#1e1e1e', bg2: '#262626', backdrop: 'none', panel: '#262626', glass: 0.1, accent: '#8a7cf7',
54
+ tiers: Object.freeze({ S: '#e0c25a', A: '#a88bfa', B: '#7aa2f7', C: '#9aa0a6', D: '#c7c7c7' }),
55
+ you: '#a88bfa', lines: 'one', line: '#5c5c5c', font: 'system',
56
+ }),
57
+ Object.freeze({
58
+ id: 'glass', name: 'Glass', blurb: 'Frosted panels over slow colour: a heads-up display, see-through.',
59
+ bg: '#0b1020', bg2: '#5b21b6', backdrop: 'glow', panel: '#ffffff', glass: 0.9, accent: '#7dd3fc',
60
+ tiers: Object.freeze({ S: '#fde68a', A: '#f0abfc', B: '#7dd3fc', C: '#cbd5e1', D: '#e2e8f0' }),
61
+ you: '#ffffff', lines: 'tier', line: '#94a3b8', font: 'rounded',
62
+ }),
63
+ Object.freeze({
64
+ id: 'analyst', name: 'Analyst', blurb: 'A data terminal: a grid, monospace, colour-blind-safe dots.',
65
+ bg: '#0d1117', bg2: '#161b22', backdrop: 'grid', panel: '#161b22', glass: 0, accent: '#58a6ff',
66
+ tiers: Object.freeze({ S: '#e69f00', A: '#cc79a7', B: '#56b4e9', C: '#009e73', D: '#8b949e' }),
67
+ you: '#f0f6fc', lines: 'one', line: '#30363d', font: 'mono',
68
+ }),
69
+ Object.freeze({
70
+ id: 'space', name: 'Space', blurb: 'Your network as a star chart: deep black, a nebula, stars behind it all.',
71
+ bg: '#04050d', bg2: '#2b1055', backdrop: 'stars', panel: '#0b0d1f', glass: 0.5, accent: '#a78bfa',
72
+ tiers: Object.freeze({ S: '#ffd166', A: '#c77dff', B: '#4cc9f0', C: '#adb5bd', D: '#6c757d' }),
73
+ you: '#ffffff', lines: 'tier', line: '#3a3f5c', font: 'system',
74
+ }),
75
+ Object.freeze({
76
+ id: 'synthwave', name: 'Synthwave', blurb: 'Neon on a purple horizon. For the larpers.',
77
+ bg: '#1a0b2e', bg2: '#ff2a6d', backdrop: 'horizon', panel: '#24103f', glass: 0.4, accent: '#ff2a6d',
78
+ tiers: Object.freeze({ S: '#ffe66d', A: '#ff2a6d', B: '#05d9e8', C: '#d1f7ff', D: '#8c7aa9' }),
79
+ you: '#ffffff', lines: 'tier', line: '#7a3b9e', font: 'rounded',
80
+ }),
81
+ ]);
82
+
83
+ const HEX = /^#[0-9a-f]{6}$/;
84
+ const colour = (v) => {
85
+ const s = String(v ?? '').trim().toLowerCase();
86
+ const short = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(s);
87
+ const full = short ? `#${short[1]}${short[1]}${short[2]}${short[2]}${short[3]}${short[3]}` : s;
88
+ return HEX.test(full) ? full : null;
89
+ };
90
+ const COLOUR_KEYS = ['bg', 'bg2', 'panel', 'accent', 'you', 'line'];
91
+ export const TIER_KEYS = ['S', 'A', 'B', 'C', 'D'];
92
+
93
+ export const presetOf = (id) => THEMES.find((t) => t.id === id) || STANDARD;
94
+
95
+ /**
96
+ * A saved or pasted choice made safe: { base, custom }, where custom holds only
97
+ * the fields that are valid and differ from nothing in particular (they are
98
+ * your changes, kept as you made them).
99
+ */
100
+ export function cleanTheme(raw) {
101
+ const base = presetOf(raw?.base).id;
102
+ const c = raw?.custom && typeof raw.custom === 'object' ? raw.custom : {};
103
+ const custom = {};
104
+ for (const k of COLOUR_KEYS) { const v = colour(c[k]); if (v) custom[k] = v; }
105
+ if (c.tiers && typeof c.tiers === 'object') {
106
+ const tiers = {};
107
+ for (const t of TIER_KEYS) { const v = colour(c.tiers[t]); if (v) tiers[t] = v; }
108
+ if (Object.keys(tiers).length) custom.tiers = tiers;
109
+ }
110
+ if (BACKDROPS.includes(c.backdrop)) custom.backdrop = c.backdrop;
111
+ if (Object.hasOwn(FONTS, c.font ?? '')) custom.font = c.font;
112
+ if (LINE_MODES.includes(c.lines)) custom.lines = c.lines;
113
+ const glass = Number(c.glass);
114
+ if (c.glass != null && Number.isFinite(glass)) custom.glass = Math.round(Math.min(1, Math.max(0, glass)) * 100) / 100;
115
+ return { base, custom };
116
+ }
117
+
118
+ /** The theme a choice comes to: its preset with your changes on top. */
119
+ export function resolveTheme(choice) {
120
+ const { base, custom } = cleanTheme(choice);
121
+ const preset = presetOf(base);
122
+ return {
123
+ ...preset,
124
+ ...custom,
125
+ tiers: { ...preset.tiers, ...(custom.tiers || {}) },
126
+ id: base,
127
+ customised: Object.keys(custom).length > 0,
128
+ };
129
+ }
130
+
131
+ const rgb = (hex) => [1, 3, 5].map((i) => parseInt(hex.slice(i, i + 2), 16));
132
+ const rgba = (hex, a) => `rgba(${rgb(hex).join(', ')}, ${a})`;
133
+
134
+ /**
135
+ * The CSS variables a choice sets on the page. Every value is built here from
136
+ * cleaned colours and numbers, never copied from what was saved.
137
+ */
138
+ export function themeVars(choice) {
139
+ const t = resolveTheme(choice);
140
+ const glass = Math.min(1, Math.max(0, Number(t.glass) || 0));
141
+ return {
142
+ '--sd-bg': t.bg,
143
+ '--sd-bg2': t.bg2,
144
+ '--sd-accent': t.accent,
145
+ // The side panels: the theme's tint, more see-through and more blurred the more glass.
146
+ '--sd-panel': rgba(t.panel, Math.round((0.92 - 0.82 * glass) * 100) / 100),
147
+ '--sd-panel-blur': `blur(${Math.round(8 + 28 * glass)}px) saturate(${(1 + 0.6 * glass).toFixed(2)})`,
148
+ // The header: clear, or frosted on a glass theme.
149
+ '--sd-header': glass >= 0.6 ? rgba(t.panel, 0.06) : 'transparent',
150
+ '--sd-header-blur': glass >= 0.6 ? 'blur(18px) saturate(1.4)' : 'none',
151
+ '--sd-font': FONTS[t.font] || FONTS.system,
152
+ '--sd-tier-s': t.tiers.S, '--sd-tier-a': t.tiers.A, '--sd-tier-b': t.tiers.B, '--sd-tier-c': t.tiers.C, '--sd-tier-d': t.tiers.D,
153
+ };
154
+ }
155
+
156
+ /** What the html element carries for the stylesheet: the theme and its backdrop. */
157
+ export function themeAttrs(choice) {
158
+ const t = resolveTheme(choice);
159
+ return { theme: t.id, backdrop: t.backdrop };
160
+ }
161
+
162
+ // A theme code to share: the choice as base64 JSON, behind a short prefix.
163
+ const PREFIX = 'sd-theme:';
164
+ export function encodeTheme(choice) {
165
+ const json = JSON.stringify(cleanTheme(choice));
166
+ const b64 = typeof btoa === 'function' ? btoa(json) : Buffer.from(json, 'utf8').toString('base64');
167
+ return PREFIX + b64;
168
+ }
169
+ /** A pasted code, cleaned; null if it isn't one. */
170
+ export function decodeTheme(code) {
171
+ const s = String(code || '').trim();
172
+ if (!s.startsWith(PREFIX) || s.length > 2000) return null;
173
+ try {
174
+ const b64 = s.slice(PREFIX.length);
175
+ const json = typeof atob === 'function' ? atob(b64) : Buffer.from(b64, 'base64').toString('utf8');
176
+ const raw = JSON.parse(json);
177
+ return raw && typeof raw === 'object' ? cleanTheme(raw) : null;
178
+ } catch { return null; }
179
+ }
180
+
181
+ // The dot colours every view draws with: one object, filled from the theme in
182
+ // use before anything draws (lib/theme-store.js), so the many views that read
183
+ // it stay as they are. On the server it holds Standard's.
184
+ export const TIER_COLORS = { ...STANDARD.tiers };
185
+ // The rest of what the map draws from a theme: your dot, and its lines.
186
+ export const MAP_LOOK = { you: STANDARD.you, lines: STANDARD.lines, line: STANDARD.line, bg: STANDARD.bg };
package/lib/tiers.js CHANGED
@@ -15,14 +15,8 @@ export const TIER_COLORS = {
15
15
  D: '#6b7280',
16
16
  };
17
17
 
18
- /** The palette the older views use. Kept separate so nothing shifts under them. */
19
- export const TIER_COLORS_CLASSIC = {
20
- S: '#FFD700',
21
- A: '#9B59B6',
22
- B: '#3498DB',
23
- C: '#95A5A6',
24
- D: '#BDC3C7',
25
- };
18
+ /** The palette most views use: the theme's dot colours (lib/themes.js), Standard's to begin with. */
19
+ export { TIER_COLORS as TIER_COLORS_CLASSIC } from './themes.js';
26
20
 
27
21
  export const TIER_LABELS = {
28
22
  S: 'S · Highest leverage',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "six-degrees",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Map your professional network as a galaxy — leverage tiers, bridges into new circles, and the shortest path to anyone. Runs locally on your own data.",
5
5
  "license": "MIT",
6
6
  "author": "Blake Burford",
@@ -53,12 +53,12 @@
53
53
  "scripts/update.mjs"
54
54
  ],
55
55
  "scripts": {
56
- "dev": "NEXT_TELEMETRY_DISABLED=1 SIX_DEGREES_BIND=127.0.0.1 next dev -H 127.0.0.1",
56
+ "dev": "node scripts/next.mjs dev -H 127.0.0.1",
57
57
  "predev": "node scripts/check-node.mjs && node scripts/check-stale-server.mjs",
58
58
  "fresh": "node scripts/check-node.mjs && node scripts/sandbox.mjs",
59
- "build": "NEXT_TELEMETRY_DISABLED=1 next build && node scripts/prepare-standalone.mjs",
59
+ "build": "node scripts/next.mjs build && node scripts/prepare-standalone.mjs",
60
60
  "prebuild": "node scripts/check-node.mjs",
61
- "start": "NEXT_TELEMETRY_DISABLED=1 SIX_DEGREES_BIND=127.0.0.1 next start -H 127.0.0.1",
61
+ "start": "node scripts/next.mjs start -H 127.0.0.1",
62
62
  "lint": "eslint",
63
63
  "test": "node --test tests/*.test.mjs",
64
64
  "gen:demo": "node scripts/gen-synthetic.mjs",
@@ -14,6 +14,7 @@
14
14
  # Drives the user's own Google Chrome (channel="chrome"), so no browser is downloaded.
15
15
  # Its wheel carries Playwright's driver, which it needs.
16
16
  playwright==1.63.0 \
17
+ --hash=sha256:2f9a707a6c6c91157ed77bff2b8caeb04b3c8d46e70d585fc134298cbe4b5cc6 \
17
18
  --hash=sha256:354e15b29503565fc598b89f16fbe070459343bef9d7498a93e304864000c6a7 \
18
19
  --hash=sha256:84c540759e8e7f01e690e197e04060f48899d37cea322299f255843273d3385d \
19
20
  --hash=sha256:ad21bc07516b187965a7521c5cf0df0bd657b17482eaad74335272d35a2b07de \
@@ -24,17 +25,22 @@ playwright==1.63.0 \
24
25
  greenlet==3.5.6 \
25
26
  --hash=sha256:1c20ea32a73d17b9b60e3371240e17b0068120c98a5ec01a224a7dd8c89733ba \
26
27
  --hash=sha256:45bfd2b51e38aaa5f9849f114d9c7c1d75f69187c849b3549cd64c465283abfa \
28
+ --hash=sha256:5b602b4201b965a8354d74e232364a66ff243dd142e350d035f46169bb36e13d \
29
+ --hash=sha256:7ac4abb3877c43af320392c664774eef6fa2cc063c79a55fc02d844a3cbe7395 \
27
30
  --hash=sha256:8cddea1b8339451c2fb3388e138347b6126744f33b611bdb55b7357361cfef46 \
28
31
  --hash=sha256:95e7c44d072db623a1aab04ce488cf9533294a77ed9d072cd503a3596f4106ac \
29
32
  --hash=sha256:975736b002ed080d124cf81a79cb7e05cb26d6b3f5c7a7b651c0fcce70353aa1 \
30
33
  --hash=sha256:9a09d59bef1db94f384b5bcc2d523694d338f3df6b757aeeaf7baca5d0c0be88 \
31
34
  --hash=sha256:a5876d0a60355af98d535c47f6cd6eb0f8a432396dab26845d380b92f8412422 \
32
35
  --hash=sha256:a6a4b98a9132e0f45c9fc245a63894cfd8c45fb7a0d6bffc5eab3ec327cf7324 \
36
+ --hash=sha256:a6b4ff33f7e011bbaa148238d131c4fd4f8afbab3c104ddfbdb2b12b74ff7016 \
33
37
  --hash=sha256:b7d501d5eb5d4f67207df364752ad697465b834268744be7581c18d81d35d41d \
34
38
  --hash=sha256:c59acfa8eb73a1e0d484392dc002bdf001fd4ce73394e0132df3d1ab6093d7cb \
35
39
  --hash=sha256:c75116c9de79949de23006e2d9b35ee82874c594fcf5c0311b439acaa14b8441 \
40
+ --hash=sha256:dad3d233d441a022c1f7155f0fb9d5aff7b97c1ea8c7dfa02cce586b16ab2d0b \
36
41
  --hash=sha256:e85880b538e59a59f55117b81f208a6660ad5ac328aad9305f812d9b8bc67a0f \
37
42
  --hash=sha256:eed88b64a5e5da72d6a71cdc5aaeefaa5ced9b748f8d19f89800b339961dad39 \
43
+ --hash=sha256:f8f0bd690e1a41294ac87905e8121c81a3761ec2583c768f13467428606c8c7a \
38
44
  --hash=sha256:f96f0e30b5a95c7631b12bfe214cbc90ec8fe8cfa36920596c10514a65743519 \
39
45
  --hash=sha256:f98e8215e172f567ce80eeaed9107fb4d32b6c44f26983d9b8334658136a205a
40
46
 
@@ -54,23 +60,29 @@ certifi==2026.7.22 \
54
60
  charset-normalizer==3.5.1 \
55
61
  --hash=sha256:15f024313246a4ed976c60f440bb8d257815513a681d212ff74fd46f7d715a90 \
56
62
  --hash=sha256:2f06b7eae9dbe77fe1d644ca244dad508de8d302870a43f3c559b521270938a0 \
63
+ --hash=sha256:3617ac3cfd8b9888f145ad89dd6e692285834b0201c6074a5eeaad3fd4d668c2 \
57
64
  --hash=sha256:41876ee62a3dddf48ff1121ad8f0798032aa03f2fd35f21f34a4cab14f18d8d2 \
58
65
  --hash=sha256:4582c27e8c889d64811987b5967fbd3ae0c823fe1fd933b543d55ac20bb475fa \
59
66
  --hash=sha256:5b6d1386bf0096d26d3a863dc0a487a5b4eb9aa93cf5ba69683d29dde6b9d60f \
60
67
  --hash=sha256:62b55f6722735a6c472f88361cde6640608773d9443cebdbb51abf436a1fcdd3 \
61
68
  --hash=sha256:6df0ec430f9a831772c23ca5a224cba36517a58a84bb32c32bb59a9fa67c47f6 \
69
+ --hash=sha256:70055ff39b97c99e7ae40ea3e393fb62aa2e44dbd9b29f8d14f42fb0025c3959 \
62
70
  --hash=sha256:94d78ecec2605a8d0398b0f365d5f12a63248438516f5dac536a5eff7337df4a \
63
71
  --hash=sha256:96eefc178f8636b9c760c5829345307fd81cfae9ab1e80997dbddeb0f54ee9a3 \
64
72
  --hash=sha256:a6dac12ff6b846103483683f60c5f8fee205121adc58ffd87e90a90a3af69e99 \
65
73
  --hash=sha256:aa2bb0b37202dca27175591f761108b5d34096ade1191ffe4808bdf6b1571488 \
74
+ --hash=sha256:aea996a6aba25260827c9ea511d1addfde2da9eb686ac961838509086188b7e6 \
66
75
  --hash=sha256:b9af956078716df40d985fb0dfeb2c2120c5ca92ba4ff4b388acfd01cdc14d08 \
76
+ --hash=sha256:be47f99644b208bff7766314013f9acf57b056b04191d570d68ad14022cf5b1d \
67
77
  --hash=sha256:c428c6c31eb5f4277d7f8eccaf767fbd548ddd5ce3c8b4f4cbbfab3d96b5904c \
78
+ --hash=sha256:c658c50ac0c98cd755a2dd50b7977d3bca7df401dcc47fbdfa87db53ef7d4e8b \
68
79
  --hash=sha256:c7b742bf31c88566b4bb6335a7f393bb322e580b6bb98df7bd0c25e6e3519ce8 \
69
80
  --hash=sha256:cee5dd7c6fb5dd52a0fe2a740f9bc6e3593f5f8b1788bde49de02086f30182b2 \
70
81
  --hash=sha256:d1ee1e296209fdce05b81b663250eefa02213a2da7b41bf26f7829b8ba3545aa \
71
82
  --hash=sha256:e90251c0c7bdd54a100a0dce3c07b7e637278c93af29dbf78ebb89a58c4bac7d \
72
83
  --hash=sha256:e9fbdce1e47394b09bc9f26ab117dfc8d6491977a11d86f592bb42c779db2fda \
73
- --hash=sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30
84
+ --hash=sha256:eda059b6bc8bc0812d626fd91a7ce01bf583df0a61296eff390fd94141a34e30 \
85
+ --hash=sha256:f9b1e28d0e8dbfa858abdba91d6b547beaf2df1a59bec6da6faae7b96a4991a9
74
86
 
75
87
  idna==3.20 \
76
88
  --hash=sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c
@@ -82,13 +94,17 @@ urllib3==2.8.0 \
82
94
  pillow==12.3.0 \
83
95
  --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \
84
96
  --hash=sha256:0847a763afefb695bc912d7c131e7e0632d4edc1d8698f58ddabec8e46b8b6d3 \
97
+ --hash=sha256:1cca606cd25738df4ed873d5ad46bbdb3d83b5cbca291f6b4ff13a4df6b0bbe8 \
85
98
  --hash=sha256:23d27a3e0307ec2244cc51e7287b919aa68d097504ebe19df4e76a98a3eea5bd \
86
99
  --hash=sha256:251bf95b67017e27b13d82f5b326234ca62d70f9cf4c2b9032de2358a3b12c7b \
100
+ --hash=sha256:300557495eb45ebb8aec96c2da9c4be642fbf7cd937278b4013ba894ea8eb0eb \
87
101
  --hash=sha256:37d6d0a00072fd2948eb22bce7e1475f34569d90c87c59f7a2ec59541b77f7a6 \
88
102
  --hash=sha256:5594fc43d548a7ed94949d139aa1341b270f1863f11cfd37f5a6c8b778a6b67f \
89
103
  --hash=sha256:6c0016e7b354317c4e9e525b937ac8596c38d2d232b419529b9cd7a1cd46e39a \
90
104
  --hash=sha256:78cb2c6865a35ab8ff8b75fd122f6033b92a62c82801110e48ddd6c936a45d91 \
91
105
  --hash=sha256:7a743ff716f746fc19a9557f60dab1600d4613255f8a7aeb3cdde4db7eb15a66 \
106
+ --hash=sha256:8e95e1385e4998ae9694eeaa4730ba5457ff61185b3a55e2e7bea0880aef452a \
107
+ --hash=sha256:a2b55dd6b2a4c4b7d87ffa56bdb33fdc5fdb9a462173861a7bc097f17d91cb09 \
92
108
  --hash=sha256:ba09209fbe443b4acccebe845d8a138b89a8f4fbaeedd44953490b5315d5e965 \
93
109
  --hash=sha256:ba54cfebe86920a559a7c4d6b9050791c20513650a1952ebe3368c7dc70306f8 \
94
110
  --hash=sha256:bcb46e2f9feff8d06323983bd83ed00c201fdcab3d74973e7072a889b3979fcd \
@@ -99,6 +115,7 @@ pillow==12.3.0 \
99
115
  --hash=sha256:e9aeb04d6aef139de265b29683e119b638208f88cf73cdd1658aa07221165321 \
100
116
  --hash=sha256:f0606c8bf2cdefea14a43530f7657cbbb7ecf1c4222512492ef4a4434a9501ec \
101
117
  --hash=sha256:f7401aebd7f581d7f83a439d87d474999317ee099218e5ad25d125290990ba65 \
118
+ --hash=sha256:fdafc9cce40277e0f7a0feabce0ee50dd2fa1800f3b38015e51296b5e814048d \
102
119
  --hash=sha256:ffd0c5368496f41b0944be820fcb7a838aa6e623d250b01acf2643939c3f99d7
103
120
 
104
121
  # Windows only: Python there has no time zone database (docs/brain/DESKTOP.md D3).
@@ -1,3 +0,0 @@
1
- module.exports=[70406,(e,t,r)=>{t.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,t,r)=>{t.exports=e.x("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js",()=>require("next/dist/compiled/next-server/app-page-turbo.runtime.prod.js"))},56704,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-async-storage.external.js",()=>require("next/dist/server/app-render/work-async-storage.external.js"))},32319,(e,t,r)=>{t.exports=e.x("next/dist/server/app-render/work-unit-async-storage.external.js",()=>require("next/dist/server/app-render/work-unit-async-storage.external.js"))},59043,(e,t,r)=>{t.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},93695,(e,t,r)=>{t.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},74533,(e,t,r)=>{t.exports=e.x("node:child_process",()=>require("node:child_process"))},66680,(e,t,r)=>{t.exports=e.x("node:crypto",()=>require("node:crypto"))},2157,(e,t,r)=>{t.exports=e.x("node:fs",()=>require("node:fs"))},12714,(e,t,r)=>{t.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},60526,(e,t,r)=>{t.exports=e.x("node:os",()=>require("node:os"))},50227,(e,t,r)=>{t.exports=e.x("node:path",()=>require("node:path"))},81111,(e,t,r)=>{t.exports=e.x("node:stream",()=>require("node:stream"))},10960,e=>{"use strict";var t=e.i(2157),r=e.i(50227),n=e.i(60526);function s(){for(let e of[process.env.SIX_DEGREES_ROOT,process.cwd(),r.default.join(process.cwd(),".."),r.default.join(process.cwd(),"..","..")].filter(Boolean))if((0,t.existsSync)(r.default.join(e,"scripts","scrape.py")))return e;return null}e.s(["dataDir",0,function(){return process.env.SIX_DEGREES_HOME||r.default.join(n.default.homedir(),".six-degrees")},"isGitCheckout",0,function(){let e=s();return!!(e&&(0,t.existsSync)(r.default.join(e,".git")))},"projectRoot",0,s])},12506,1348,e=>{"use strict";e.s(["compareVersions",0,function(e,t){let r=e=>String(e||"").replace(/^v/i,"").split(/[-+]/)[0].split(".").map(e=>Number.parseInt(e,10)||0),n=r(e),s=r(t);for(let e=0;e<Math.max(n.length,s.length);e++){let t=(n[e]||0)-(s[e]||0);if(0!==t)return t>0?1:-1}return 0},"installKind",0,function(e=process.env,t=""){return["mac-app","source","npm"].includes(e.SIX_DEGREES_INSTALL)?e.SIX_DEGREES_INSTALL:/\.app\/Contents\/Resources/.test(t||"")?"mac-app":"npm"},"repoSlug",0,function(e){let t=("string"==typeof e?e:e?.url||"").match(/github\.com[/:]([^/]+)\/([^/.#?]+)/);return t?`${t[1]}/${t[2]}`:null},"updateCommand",0,function(e,t,{dataDir:r}={}){if("mac-app"===e)return`curl -fsSL https://raw.githubusercontent.com/${t}/main/install.sh | bash`;if("source"===e)return"git pull && npm ci && npm run build && npm run start:packaged";let n=r&&`'${String(r).replace(/'/g,"'\\''")}'`;return n?`npx six-degrees@latest --data-dir ${n}`:"npx six-degrees@latest"}],12506);let t=Symbol.for("six-degrees.scan-state");function r(){let e=globalThis[t];return e?.running!==!0?null:"string"==typeof e.action&&e.action?e.action:"scan"}function n(e){switch(e){case"install":return"The scanner's packages are being installed";case"setup":return"The scanner is being set up";case"login":return"The LinkedIn sign-in window is open";case"photos":return"Profile photos are being saved";default:return"A scan is running"}}e.s(["busyRefusal",0,function(e,t=r()){return t?`${n(t)}. ${e}`:null},"registerScanState",0,function(e){return globalThis[t]||(globalThis[t]=e),globalThis[t]},"runningNow",0,n,"scannerJob",0,r],1348)},98199,e=>{"use strict";var t=e.i(50227),r=e.i(12506);let n="Six Degrees.app",s="SHA256SUMS",i=Object.freeze({apiBase:"https://api.github.com",downloadBase:"https://github.com"}),o=(e,t)=>({refusal:{code:e,message:t}}),a={arm64:"Apple Silicon",x64:"Intel"},l={0x1000007:"x64",0x100000c:"arm64"};e.s(["APP_BUNDLE_NAME",0,n,"BUNDLE_ID",0,"com.blakeburford.sixdegrees","CHIP_LABEL",0,a,"GITHUB",0,i,"UPDATE_HANDOFF_EXIT_CODE",0,76,"chipOf",0,function({sysctlArm64:e,processArch:t}={}){return"1"===String(e??"").trim()||"arm64"===t?"arm64":"x64"},"digestsMatch",0,function(e,t){let r=String(e||"").toLowerCase(),n=String(t||"").toLowerCase();return/^[0-9a-f]{64}$/.test(r)&&r===n},"foreignAppProcesses",0,function(e,{bundles:t=[],uid:r}){let n=t.filter(Boolean).map(e=>`${e}/Contents/`);if(!n.length||!Number.isInteger(r))return[];let s=[];for(let t of String(e||"").split("\n")){let e=t.match(/^\s*(\d+)\s+(\d+)\s+(.+)$/);e&&Number(e[1])!==r&&n.some(t=>e[3].startsWith(t))&&s.push(Number(e[2]))}return s},"helperArgs",0,function({target:e,staged:t,keepDir:r,statusFile:n,from:s,to:i,pids:o=[],waitSeconds:a=30,logFile:l,work:u,relaunch:d=[],confirmFile:p,confirmWaitSeconds:c=600}){let f=["--target",e,"--staged",t,"--keep",r,"--status",n,"--from",s,"--to",i,"--wait",String(a)];for(let e of o)Number.isInteger(e)&&e>1&&f.push("--pid",String(e));return p&&f.push("--confirm",p,"--confirm-wait",String(c)),l&&f.push("--log",l),u&&f.push("--work",u),[...f,"--",...d]},"installerTarget",0,function({applicationsWritable:e=!0,home:r=""}={}){return e?t.default.join("/Applications",n):t.default.join(r,"Applications",n)},"lastUpdateReport",0,function(e,{runningVersion:t,now:s=Date.now(),maxAgeDays:i=7}={}){if(!e||"object"!=typeof e||"string"!=typeof e.to)return null;let o=Date.parse(e.at);if(!Number.isFinite(o)||s-o>864e5*i)return null;let a=e.to,l="string"==typeof e.reason&&e.reason.trim()?e.reason.trim().replace(/\.$/,""):null,u={at:new Date(o).toISOString(),from:e.from||null,to:a,previous:"string"==typeof e.previous?e.previous:null},d=t?(0,r.compareVersions)(t,a):null,p=`The update to ${a} didn't finish${l?`: ${l}`:""}.`;switch(e.outcome){case"installed":case"started":if(0===d)return{...u,tone:"ok",text:`Updated to ${a}.`};if(d>0)return null;if("installed"===e.outcome)return{...u,tone:"bad",text:`Version ${a} was installed, but this copy is ${t}. If you have two copies of Six Degrees, open the one in Applications.`};return{...u,tone:"bad",text:`The update to ${a} didn't finish, and it didn't say why.${e.log?` Its log is ${e.log}.`:""}`};case"not-applied":if(null!==d&&d>=0)return null;return{...u,tone:"bad",text:`${p} Nothing was changed.`};case"rolled-back":if(null!==d&&d>=0)return null;return{...u,tone:"bad",text:`${p} Your previous version was put back.`};case"failed":if(null!==d&&d>=0)return null;return{...u,tone:"bad",text:`${p}${e.previous?` Your previous version is safe, in a hidden folder: ${e.previous}. To use it again, rename it to ${n} (in Finder, Shift-Command-. shows hidden files). Or install the newest version: Check for updates, below.`:""}`};default:return null}},"leftoversBeside",0,function(e,t){let r=`.${t}.`,n=[];for(let t of e){if("string"!=typeof t||!t.startsWith(r))continue;let e=t.slice(r.length);if("incoming"===e){n.push({name:t,kind:"incoming",pid:null});continue}let s=e.match(/^(previous|failed)-(\d+)(?:-\d+)?$/);s&&n.push({name:t,kind:s[1],pid:Number(s[2])})}return n},"machoArchs",0,function(e){let t=new Set;if(!e||e.length<8)return t;let r=e=>{l[e>>>0]&&t.add(l[e>>>0])},n=e.readUInt32LE(0);if(0xfeedfacf===n||0xfeedface===n)return r(e.readUInt32LE(4)),t;let s=e.readUInt32BE(0);if(0xcafebabe===s||0xcafebabf===s){let n=e.readUInt32BE(4),i=0xcafebabf===s?32:20;if(n<1||n>16)return t;for(let t=0;t<n;t++){let n=8+t*i;if(n+4>e.length)break;r(e.readUInt32BE(n))}}return t},"parseSha256Sums",0,function(e){let t=new Map;for(let r of String(e||"").split("\n")){let e=r.replace(/\r$/,"").match(/^([0-9a-fA-F]{64}) [ *](.+)$/);if(!e)continue;let[,n,s]=e,i=n.toLowerCase();t.has(s)&&t.get(s)!==i?t.set(s,null):t.set(s,i)}return t},"planFromRelease",0,function(e,{currentVersion:t,chip:n,slug:l,downloadBase:u=i.downloadBase}){if(!e||"object"!=typeof e||!e.tag_name)return o("no-release","GitHub did not describe a release.");let d=String(e.tag_name),p=d.replace(/^v/i,"");if(e.draft||e.prerelease||p.includes("-"))return o("prerelease",`Version ${p} is a test version, so it isn't installed from here.`);if(!/^\d+(\.\d+){1,3}$/.test(p))return o("bad-version",`GitHub's newest release has a version this app doesn't understand (${d}).`);if(0>=(0,r.compareVersions)(p,t))return o("not-newer",`You already have ${t}, and the newest version is ${p}.`);let c=Array.isArray(e.assets)?e.assets:[],f=e=>c.find(t=>t&&t.name===e)||null,m=f(`Six-Degrees-${p}-${n}.dmg`);if(!m)return o("no-download",`Version ${p} has no download for this Mac (${a[n]||n}).`);let h=f(s);if(!h)return o("no-checksums",`Version ${p} was published without its checksum file (${s}), so its download can't be checked.`);let g=`${u}/${l}/releases/download/${encodeURIComponent(d)}/`;for(let e of[m,h])if(e.browser_download_url!==g+encodeURIComponent(e.name))return o("unexpected-address",`GitHub listed ${e.name} at an unexpected address, so it wasn't downloaded.`);let x=Number(m.size)>0?Number(m.size):null;return x&&x>0x40000000?o("too-large",`The download for version ${p} is unexpectedly large, so it wasn't downloaded.`):{plan:{version:p,tag:d,notes:"string"==typeof e.html_url?e.html_url:null,dmg:{name:m.name,url:m.browser_download_url,size:x},sums:{name:h.name,url:h.browser_download_url}}}},"relaunchArgs",0,function({dataDir:e}={}){let r=["--after-update"];return e&&r.push("--data-dir",t.default.resolve(e)),r},"releaseSource",0,function(e={}){let t=e?.SIX_DEGREES_TEST_RELEASES;if(!t)return{...i,test:!1};let r=null;try{r=new URL(String(t))}catch{}return!r||"http:"!==r.protocol||"127.0.0.1"!==r.hostname||""===r.port||"/"!==r.pathname||r.search||r.hash||r.username||r.password?{...i,test:!1}:{apiBase:r.origin,downloadBase:r.origin,test:!0}},"stagingPath",0,function(e){return t.default.join(t.default.dirname(e),`.${t.default.basename(e)}.incoming`)},"terminalFallback",0,function({bundle:e,refusalCode:t=null,installsTo:r,dataDir:n=null}){if("data-inside-app"===t||"database-elsewhere"===t||"not-owner"===t&&e===r)return null;let s=n?{dataDir:n}:{};return e&&e===r?{mode:"replace",...s}:{mode:"elsewhere",installsTo:r,...s}},"versionAtLeast",0,function(e,t){return(0,r.compareVersions)(e,t)>=0}])}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__0ljcioj._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[9272,a=>{a.v({className:"geist_2ae47f08-module__h69qWW__className",variable:"geist_2ae47f08-module__h69qWW__variable"})},79474,a=>{a.v({className:"geist_mono_eb58308d-module__w_p2Lq__className",variable:"geist_mono_eb58308d-module__w_p2Lq__variable"})},26230,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/components/ScanStatusBar.js from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/ScanStatusBar.js","default")},21043,a=>{"use strict";var b=a.i(26230);a.n(b)},88999,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/components/SocialAutoSync.js from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/SocialAutoSync.js","default")},25493,a=>{"use strict";var b=a.i(88999);a.n(b)},62925,a=>{"use strict";var b=a.i(7997),c=a.i(9272);let d={className:c.default.className,style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"}};null!=c.default.variable&&(d.variable=c.default.variable);var e=a.i(79474);let f={className:e.default.className,style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"}};null!=e.default.variable&&(f.variable=e.default.variable);var g=a.i(68354),h=a.i(42041),i=a.i(21043),j=a.i(25493);a.s(["default",0,function({children:a}){return(0,b.jsx)("html",{lang:"en",className:`${d.variable} ${f.variable}`,children:(0,b.jsx)("body",{style:{margin:0,padding:0,background:"#0a0a1a"},children:(0,b.jsxs)(g.default,{children:[a,(0,b.jsx)(h.default,{}),(0,b.jsx)(i.default,{}),(0,b.jsx)(j.default,{})]})})})},"metadata",0,{title:"Six Degrees",description:"Maps your LinkedIn network: who you know, who they know, and the shortest path to someone you haven't met. Runs on your own computer; nothing is uploaded.",viewport:"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"}],62925)},19325,function(a){a.n(a.i(62925))},61143,a=>{"use strict";a.s(["default",()=>b]);let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/components/StaleServerBanner.js from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/StaleServerBanner.js","default")},42041,a=>{"use strict";var b=a.i(61143);a.n(b)},69067,a=>{"use strict";a.s(["default",()=>c,"useUser",()=>d]);var b=a.i(11857);let c=(0,b.registerClientReference)(function(){throw Error("Attempted to call the default export of [project]/app/components/UserProvider.js from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/UserProvider.js","default"),d=(0,b.registerClientReference)(function(){throw Error("Attempted to call useUser() from the server but useUser is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/app/components/UserProvider.js","useUser")},68354,a=>{"use strict";var b=a.i(69067);a.n(b)}];
2
-
3
- //# sourceMappingURL=%5Broot-of-the-server%5D__16hs8kw._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[41798,a=>{"use strict";var b=a.i(87924),c=a.i(38246),d=a.i(58834);let e=[{key:"network",label:"Network Circle",short:"Circle",on:{background:"#fff",color:"#000"},off:{background:"transparent",color:"#888"}},{key:"degrees",label:"Degrees",on:{background:"linear-gradient(135deg, #FFD700, #FF6B35)",color:"#000"},off:{background:"rgba(255,255,255,0.12)",color:"#fff"}},{key:"separation",label:"Separation",on:{background:"linear-gradient(135deg, #00E5FF, #FFD700 55%, #FF7043)",color:"#000"},off:{background:"rgba(255,255,255,0.12)",color:"#fff"}}],f=[{key:"paths",href:"/paths",label:"Paths",color:"#00ff88",on:"linear-gradient(135deg, #00ff88, #3498DB)",demo:!0},{key:"outlink",href:"/queue",label:"Outlink",color:"#FF6B35",on:"linear-gradient(135deg, #FF6B35, #FFD700)",own:!0},{key:"scan",href:"/setup",label:"Scan",color:"#666",on:"linear-gradient(135deg, #00ff88, #1abc9c)",own:!0}];a.s(["default",0,function({active:a,isMobile:g=!1,csvMode:h=!1,onMode:i,children:j,after:k}){let l={padding:g?"6px 10px":"8px 16px",borderRadius:6,border:"none",fontSize:g?11:13,fontWeight:600,textDecoration:"none"};return(0,b.jsxs)("div",{id:"main-tabs",style:{display:"flex",gap:g?2:4,background:"rgba(255,255,255,0.08)",borderRadius:8,padding:g?2:3,flexWrap:g?"wrap":"nowrap"},children:[e.map(d=>{let e={...l,cursor:"pointer",...a===d.key?d.on:d.off},f=g&&d.short?d.short:d.label;return i?(0,b.jsx)("button",{type:"button",onClick:()=>i(d.key),style:e,children:f},d.key):(0,b.jsx)(c.default,{href:`/?mode=${d.key}`,style:{...e,display:"flex",alignItems:"center"},children:f},d.key)}),j,f.filter(a=>!d.IS_DEMO&&(!a.own||!h)).map(d=>{let e=a===d.key;return(0,b.jsxs)(c.default,{href:d.href,title:d.title,"aria-current":e?"page":void 0,style:{...l,display:"flex",alignItems:"center",gap:4,background:e?d.on:"rgba(255,255,255,0.06)",color:e?"#000":d.color},children:[d.label,d.badge&&(0,b.jsx)("span",{style:{fontSize:9,opacity:.7,marginLeft:2},children:d.badge})]},d.key)}),k]})}])},36839,a=>{"use strict";var b=a.i(87924),c=a.i(75857);a.s(["default",0,function({children:a}){let{userId:d,ready:e}=(0,c.useUser)();return e&&d?a:(0,b.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff",padding:24,textAlign:"center",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:e?(0,b.jsxs)("div",{style:{maxWidth:420},children:[(0,b.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,b.jsx)("div",{style:{color:"#888",fontSize:14,lineHeight:1.6},children:"The page loaded but the app behind it is not answering. If you started it from a terminal, check that window for an error, then reload this page."})]}):(0,b.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},76892,24475,a=>{"use strict";var b=a.i(72131),c=a.i(90231);let d=Object.freeze({known:!1,sent:new Set,mine:new Map,version:0}),e=new Set,f=d,g=null,h=new Map;function i(a=f.sent,b=f.known){for(let c of(f=Object.freeze({known:b,sent:a,mine:new Map(h),version:f.version+1}),[...e]))c()}function j(a){return e.add(a),g||f.known||(g=fetch("/api/outreach").then(a=>a.ok?a.json():null).then(a=>{a&&i(new Set((a.pending||[]).map(c.keyFor)),!0)}).catch(()=>{}).finally(()=>{g=null})),()=>e.delete(a)}function k(){return f}async function l(a){let b=await fetch("/api/outreach",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}),c=await b.json().catch(()=>({}));if(!b.ok)throw Error(c.error||"Could not save that.");return c}async function m(a,{bridgeId:b}={}){let d=(0,c.keyFor)(a),e=h.has(d)?h.get(d):void 0;h.set(d,!0),i();try{return await l({action:"mark-sent",connectionId:a.id,profileUrl:a.profile_url,bridgeId:b})}catch(a){throw void 0===e?h.delete(d):h.set(d,e),i(),a}}async function n(a){let b=(0,c.keyFor)(a),d=h.has(b)?h.get(b):void 0;h.set(b,!1),i();try{return await l({action:"undo",connectionId:a.id,profileUrl:a.profile_url})}catch(a){throw void 0===d?h.delete(b):h.set(b,d),i(),a}}a.s(["REQUESTS_UNKNOWN",0,d,"hasRequest",0,function(a,b=f){if(!a)return!1;let d=(0,c.keyFor)(a);return b.mine.has(d)?b.mine.get(d):b.known?b.sent.has(d):"pending"===a.unlock_status||"sent"===a.outreach_status},"markRequested",0,m,"requestCount",0,function(a=f){let b=new Set(a.known?a.sent:[]);for(let[c,d]of a.mine)d?b.add(c):b.delete(c);return b.size},"requestsNow",0,k,"undoRequest",0,n,"watchRequests",0,j],24475),a.s(["default",0,function(){return(0,b.useSyncExternalStore)(j,k,()=>d)}],76892)},23310,a=>{"use strict";async function b(a){let b=a?`/api/network?userId=${encodeURIComponent(a)}`:"/api/network",c=await fetch(b);if(!c.ok)throw Error(`Failed to load network (${c.status})`);let d=await c.json();return{degree1:d.degree1||[],degree2:d.degree2||[],degree3:d.degree3||[],ties:Number(d.ties)||0}}a.s(["loadNetwork",0,b])},91443,81273,a=>{"use strict";let b={fast:{label:"Fast",pagePause:20,chunkCooldown:60,profileGap:60},medium:{label:"Medium",pagePause:45,chunkCooldown:180,profileGap:90},slow:{label:"Slow",pagePause:90,chunkCooldown:300,profileGap:120}},c=a=>b[a]||b.fast;function d(a,b){let d=c(a),e=Math.max(0,Math.floor(Number(b)||0));return e*(6+d.pagePause)+Math.floor(e/10)*d.chunkCooldown}a.s(["PACES",0,b,"PACE_NAMES",0,["slow","medium","fast"],"durationText",0,function(a){if(!(a>=60))return"under a minute";let b=Math.round(a/60);if(b<60)return`about ${b} min`;let c=Math.floor(b/60),d=b%60;return`about ${c} h${d?` ${d} min`:""}`},"paceOf",0,c,"paceSeconds",0,d,"searchesPerHour",0,function(a){let b=c(a);return Math.round(3600/(6+b.pagePause+b.chunkCooldown/10))}],81273);var e=a.i(90231);function f(a,b){return a?b.scanned.has(a.id)||a.profile_url&&b.read?.has((0,e.keyFor)(a))?"scanned":a.profile_url&&b.hidden.has((0,e.keyFor)(a))?"hidden":"todo":"todo"}function g(a,b){if(!a||1!==a.degree||null==a.unlocked_from_bridge_id)return null;let c=f(a,b);return"todo"===c?"ready":c}a.s(["circleScanCost",0,function(a=100,b="fast"){let c=Math.max(1,Math.min(100,Math.round(a)||100)),e=b&&"fast"!==b?Math.max(5,Math.round(d(b,c)/60)):c>=100?55:Math.max(5,Math.round(.55*c));return{profileViews:1,searches:c,minutes:e}},"circleState",0,f,"reachIndex",0,function(a=[],b=[],c={}){let d=new Set;for(let a of b||[])a?.source_connection_id!=null&&d.add(a.source_connection_id);let f=new Set;for(let a of c?.skips||[])a?.profileUrl&&f.add((0,e.keyFor)({profile_url:a.profileUrl}));let g=new Set;for(let a of c?.read||[])a&&g.add((0,e.keyFor)({profile_url:a}));let h=new Map;for(let[a,b]of Object.entries(c?.lists||{}))a&&b&&h.set((0,e.keyFor)({profile_url:a}),b);let i=new Map;for(let b of a||[]){let a=b?.unlocked_from_bridge_id;if(null==a||1!==b.degree)continue;let c=i.get(a);c||i.set(a,c=[]),c.push(b)}return{scanned:d,read:g,hidden:f,reachedFrom:i,lists:h}},"reachState",0,g,"readyByCircle",0,function(a){let b=new Map;for(let[c,d]of a.reachedFrom){let e=d.filter(b=>"ready"===g(b,a)).length;e&&b.set(c,e)}return b},"readyToScan",0,function(a,b){return(a||[]).filter(a=>"ready"===g(a,b)).sort(e.compareBridges)},"scanBars",0,function(a,b){let c=f(a,b),d=a?.profile_url?b.lists?.get((0,e.keyFor)(a)):null;return"hidden"===c?null:d?d.more?d.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*d.pages/d.total)))):2:5:"scanned"===c?2:null}],91443)},90231,56377,a=>{"use strict";let b=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,c="/avatars/";function d(a){return"string"==typeof a&&a.startsWith(c)&&b.test(a.slice(c.length))?a:null}a.s(["localPhoto",0,d],56377);let e={S:0,A:1,B:2,C:3,D:4};function f(a){let b=parseFloat(a?.power_score);return Number.isFinite(b)?b:0}function g(a){return Math.round(10*f(a))/10}function h(a){return String(a?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${a?.id}`}let i=(a,b)=>String(a??"").localeCompare(String(b??""),void 0,{numeric:!0});function j(a,b){return(e[a.tier]??9)-(e[b.tier]??9)||f(b)-f(a)||String(a.name||"").localeCompare(String(b.name||""))||i(a.id,b.id)}function k(a,b){return a.bridge&&b.bridge?j(a.bridge,b.bridge):a.bridge?-1:b.bridge?1:i(a.id,b.id)}function l(a,b){return b.score-a.score||b.waysIn-a.waysIn||k(a.routes[0]||m,b.routes[0]||m)||String(a.person.name||"").localeCompare(String(b.person.name||""))||(a.key<b.key?-1:+(a.key>b.key))}let m={id:null,bridge:null};function n(a){let b=String(a||"").trim().split(/\s+/).filter(Boolean);return b.length<2?b[0]||"":`${b[0]} ${b[b.length-1].charAt(0)}.`}function o(a,b){let c=String(a||"");return b<=1?c?"…":"":c.length>b?`${c.slice(0,b-1)}…`:c}a.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,j,"comparePower",0,l,"convergeLayout",0,function(a,b=800,c=!1,{cards:d=!1,mutuals:e=0}={}){let f=d?46:c?40:34,g=Math.round(b*(c?.44:.36)),h=Math.round(b*(c?.8:d?.6:.62)),i=[],j=null;for(let b of a?.routes||[])b.bridge?i.push({id:b.id,bridge:b.bridge,unresolved:!1,count:1}):j?j.count++:i.push(j={id:null,bridge:null,unresolved:!0,count:1});let k=Math.max(0,Math.floor(Number(e)||0)-(a?.waysIn||0)),l=Math.min(60,k),m=d?12:11,p=d?220:c?96:120,q=Math.max(1,Math.floor(p/m)+1),r=Math.ceil(l/q),s=l?40+r*m:0,t=Math.max(0,i.length-1)*f+s,u=Math.max(c?190:d?250:220,32+t+48),v=u/2,w=v-t/2,x=Math.max(4,Math.floor((g-10-42)/6)),y=i.map((a,b)=>{let c=a.unresolved?`can't be named (${a.count})`:a.bridge.name||"";return{...a,x:g,y:w+b*f,r:6,primary:0===b&&!a.unresolved,label:c.length<=x?c:o(a.unresolved?c:n(c),x)}}),z={x:h,y:v,r:17*!d,rings:d?[]:[32,50,70].filter(a=>a<=v-4)},A=y.map(b=>({key:a?.key,bridgeId:b.id,primary:b.primary,unresolved:b.unresolved,tier:b.bridge?.tier??null,x1:b.x,y1:b.y,x2:z.x,y2:z.y})),B={x:20,y:v,r:14},C=y.map(a=>({id:a.id,x1:B.x,y1:B.y,x2:a.x,y2:a.y})),D=a?[{key:a.key,p:a,x:z.x,y:z.y,r:z.r,rings:z.rings,big:!0,label:""}]:[],E=w+Math.max(0,i.length-1)*f+40,F=d?g-236+8:g-p,G=Array.from({length:l},(a,b)=>({x:F+b%q*m,y:E+Math.floor(b/q)*m})),H=a?.waysIn?a.waysIn/(a.waysIn+k):1;return{width:b,height:u,you:B,target:z,people:D,bridges:y,links:A,spokes:C,ghosts:G,unscanned:k,ghostLabel:l?{x:F,y:E-13}:null,drawn:H}},"keyFor",0,h,"mapCount",0,function(a,b=10){let c=Math.max(0,Math.min(100,Number(a)||0));return c<=50?b:Math.max(1,Math.round(b*(100-c)/50))},"mostMutuals",0,function(a=[],b=()=>0,c=7){return[...a].sort((a,c)=>Math.max(b(c)||0,c.waysIn)-Math.max(b(a)||0,a.waysIn)||c.waysIn-a.waysIn||l(a,c)).slice(0,c)},"routeIndex",0,function(a=[]){let b=new Map;for(let c of a||[]){let a=h(c),d=b.get(a);d||(d=new Set,b.set(a,d)),d.add(c.source_connection_id??null)}return b},"routesFor",0,function(a,b,c){return a?[...b?.get(h(a))??(null!=a.source_connection_id?new Set([a.source_connection_id]):new Set)].map(a=>({id:a,bridge:c?.get(a)??null})).sort(k):[]},"score",0,f,"score1",0,g,"separationPeople",0,function(a=[],b=[]){let c=new Map;for(let a of b||[])c.set(a.id,a);let e=new Map,f=new Map;for(let b of a||[]){let a=h(b);f.set(b.id,a);let c=e.get(a);c?function(a,b){let c=g(a)-g(b);if(c)return c>0;let e=!!d(a.profile_image_url);return!!d(b.profile_image_url)!==e?e:0>i(a.id,b.id)}(b,c.person)&&(c.person=b):(c={key:a,person:b,rowIds:[],routeIds:new Set},e.set(a,c)),c.rowIds.push(b.id),c.routeIds.add(b.source_connection_id??null)}let j={people:e.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},m=new Set,n=new Set,o=new Set,p=[];for(let a of e.values()){let b=[...a.routeIds].map(a=>({id:a,bridge:c.get(a)??null}));b.sort(k);let d=b.filter(a=>a.bridge);for(let a of b)(a.bridge?m:n).add(a.id);if(!d.length)for(let a of(j.peopleOnlyUnresolved++,b))o.add(a.id);let{person:e}=a,f=e.tier;void 0!==j.byTier[f]&&j.byTier[f]++,b.length>1&&j.multi++,p.push({key:a.key,person:e,score:g(e),tier:f,routes:b,waysIn:b.length,rowIds:a.rowIds,haystack:[e.name,e.headline,e.company,e.role,...d.map(a=>a.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return j.bridges=m.size,j.unresolvedIds=n.size,j.onlyUnresolvedVia=o.size,p.sort(l),function(a){for(let b=0;b<a.length;b++){let c=a[b],d=a[b-1],e=d&&d.score===c.score&&d.waysIn===c.waysIn;c.rank=e?d.rank:b+1,e&&(c.tied=!0,d.tied=!0)}}(p),{people:p,rowToKey:f,summary:j}},"shortName",0,n,"summitLayout",0,function(a=[],b=800,c=!1,{cards:d=!1}={}){let e=d?50:c?36:26,f=Math.round(.42*b),g=Math.round(.58*b),h=a.map((a,c)=>{var f;return{key:a.key,p:a,x:g,y:16+c*e,r:d?0:(f=a.waysIn)>=4?8.5:3===f?7:2===f?5.5:4,label:o(`#${a.rank}${a.tied?"=":""} ${a.person.name||""}`,Math.floor((b-g-60)/6.2))}}),i=new Map,k="\0unresolved";for(let a of h)for(let b of a.p.routes){let c=b.bridge?b.id:k,d=i.get(c);d||(d={id:b.bridge?b.id:null,bridge:b.bridge,unresolved:!b.bridge,ys:[],count:0},i.set(c,d)),d.count++,d.ys.push(a.y)}let l=[...i.values()].map(a=>({...a,bary:a.ys.reduce((a,b)=>a+b,0)/a.ys.length}));l.sort((a,b)=>a.bary-b.bary||a.unresolved-b.unresolved||(a.bridge&&b.bridge?j(a.bridge,b.bridge):0));let m=h.length?h[h.length-1].y:16,p=function(a=[],b=18,c=0){let d=[];a.forEach((a,c)=>{for(d.push({sum:a-c*b,count:1});d.length>1&&d[d.length-2].sum/d[d.length-2].count>d[d.length-1].sum/d[d.length-1].count;){let a=d.pop();d[d.length-1].sum+=a.sum,d[d.length-1].count+=a.count}});let e=d.flatMap(a=>Array(a.count).fill(a.sum/a.count)).map((a,c)=>a+c*b),f=e.length&&e[0]<c?c-e[0]:0;return e.map(a=>a+f)}(l.map(a=>a.bary),d?36:18,16),q=Math.max(4,Math.floor((f-10-42)/6));l.forEach((a,b)=>{if(a.x=f,a.y=p[b],a.r=5,a.unresolved)a.label=o(`can't be named (${a.count})`,q);else{let b=a.bridge.name||"";a.label=b.length<=q?b:o(n(b),q)}delete a.ys});let r=new Map(l.map(a=>[a.unresolved?k:a.id,a]));for(let a of l)a.onlyFor=0,a.bestFor=0;for(let a of h){let b=a.p.routes[0],c=b?r.get(b.bridge?b.id:k):null;c&&c.bestFor++,1===a.p.waysIn&&c&&c.onlyFor++}let s=[];for(let a of h){let b=new Set;a.p.routes.forEach((c,d)=>{let e=c.bridge?c.id:k;if(b.has(e))return;b.add(e);let f=r.get(e);s.push({key:a.key,bridgeId:f.id,primary:0===d&&!f.unresolved,unresolved:f.unresolved,tier:f.bridge?.tier??null,x1:f.x,y1:f.y,x2:a.x,y2:a.y})})}let t=Math.max(m,l.length?l[l.length-1].y:0),u=h.length?Math.ceil(t+16):0,v={x:20,y:h.length?(16+Math.max(m,t))/2:16,r:14},w=l.map(a=>({id:a.id,x1:v.x,y1:v.y,x2:a.x,y2:a.y}));return{width:b,height:u,you:v,people:h,bridges:l,links:s,spokes:w}}],90231)},76939,a=>{"use strict";a.s(["TIER_COLORS_CLASSIC",0,{S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},"TIER_ORDER",0,["S","A","B","C","D"],"initialsFor",0,function(a){let b=String(a||"").trim().split(/\s+/).filter(Boolean);return 0===b.length?"?":(b[0].charAt(0)+(b.length>1?b[b.length-1].charAt(0):"")).toUpperCase()}])}];
2
-
3
- //# sourceMappingURL=_01kacen._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[66537,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(50944),e=a.i(38246),f=a.i(37732),g=a.i(7846),h=a.i(63033);let i={full:"Scanning your network",refresh:"Checking for new connections",bridge:"Scanning a circle",resume:"Carrying on with a circle","resume-all":"Carrying on with circles","auto-bridge":"Auto-Bridge","auto-bridge-retry":"Auto-Bridge",rescrape:"Re-scanning a circle",login:"Signing in to LinkedIn",setup:"Setting up the scanner",company:"Scanning a company",photos:"Saving photos",messages:"Reading your messages list","messages-full":"Reading your whole messages history"};a.s(["default",0,function(){let a,j,[k,l]=(0,c.useState)(()=>(0,f.scannerNow)()),[m,n]=(0,c.useState)(!1),[o,p]=(0,c.useState)(!1),[q,r]=(0,c.useState)(!1),s=(0,c.useSyncExternalStore)(g.watchAllDay,g.allDayNow,()=>!1),t=(0,c.useSyncExternalStore)(h.watchActivities,h.activitiesNow,h.noActivities),u=(0,c.useSyncExternalStore)(h.watchNotchTabs,h.notchTabsNow,h.noNotchTabs);(0,c.useEffect)(()=>(0,f.watchScanner)(()=>{let a=(0,f.scannerNow)();l(a),a.running||n(!1)}),[]);let v=(0,d.usePathname)(),[w,x]=(0,c.useState)(null),[y,z]=(0,c.useState)(null);(0,c.useEffect)(()=>{let a=null,b=null,c=0,d=()=>{c=0;let d=document.querySelector("header");d!==a&&(b?.disconnect(),b=null,(a=d)&&(b=new ResizeObserver(e)).observe(a));let f=a?Math.round(a.getBoundingClientRect().bottom):null;x(a=>a===f?a:f);let g=document.getElementById("main-tabs")?.getBoundingClientRect(),h=g&&g.width?Math.round(g.left+g.width/2):null;z(a=>a===h?a:h)},e=()=>{c||(c=requestAnimationFrame(d))};e();let f=new MutationObserver(e);return f.observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",e),()=>{cancelAnimationFrame(c),b?.disconnect(),f.disconnect(),window.removeEventListener("resize",e)}},[v]);let A=!!k?.running,B=t[t.length-1]||null,C=A||B||s,D=!!(C||u);if((0,c.useEffect)(()=>((0,h.setNotchShown)(D),()=>(0,h.setNotchShown)(!1)),[D]),!C&&!u)return null;let E=k?.progress,F=E?.kind==="batch"&&E.total?`${E.current||E.done||0} of ${E.total}`:E?.kind==="walk"&&E.total?`${(E.done||0).toLocaleString()} of ${E.total.toLocaleString()}`:E?.kind==="saving"?"saving":null,G=E?.total?Math.min(1,(E.current||E.done||0)/E.total):B?.progress??null,H=k?.budget,I=A?[...k.log||[]].reverse().find(a=>a&&a.trim())?.trim():null,J=o||q,K=A?"#00ff88":B?"warn"===B.tone?"#FFD700":"#3498DB":"#556",L=A?i[k.action]||"Scanning":B?B.label:"Auto scan",M=A?F:B?B.detail:null,N=null!=y?`clamp(170px, ${y}px, calc(100vw - 170px))`:"50%";return(0,b.jsxs)("div",{onMouseLeave:()=>p(!1),style:{position:"fixed",left:N,top:w??"var(--scan-bar-top, 94px)",transform:"translateX(-50%)",zIndex:60,maxWidth:"calc(100vw - 16px)",padding:J&&C?"4px 6px 10px":"4px 6px 5px",borderRadius:"0 0 14px 14px",border:`1px solid ${A?"rgba(0,255,136,0.25)":"rgba(255,255,255,0.1)"}`,borderTop:"none",background:"rgba(8,10,22,0.96)",color:"#cfd8d8",fontSize:12,opacity:u||A||B||J?1:.55,boxShadow:A?"0 6px 20px rgba(0,0,0,0.35)":"none",transition:"padding 0.18s ease, opacity 0.18s ease"},children:[(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:4,overflowX:"auto"},children:[u&&(0,b.jsx)("div",{role:"tablist","aria-label":"View",style:{display:"flex",gap:2},children:u.items.map(a=>{let c=a.key===u.current;return(0,b.jsxs)("button",{role:"tab","aria-selected":c,title:a.title,onClick:()=>u.onPick(a.key),style:{display:"flex",alignItems:"center",gap:6,padding:"5px 11px",borderRadius:8,border:"none",cursor:"pointer",whiteSpace:"nowrap",fontSize:12,fontWeight:600,background:c?"rgba(52,152,219,0.22)":"transparent",color:c?"#cfe6f7":"#8b9aa8"},children:[a.icon&&(0,b.jsx)("span",{"aria-hidden":"true",children:a.icon}),a.label]},a.key)})}),u&&C&&(0,b.jsx)("span",{"aria-hidden":"true",style:{width:1,alignSelf:"stretch",margin:"3px 4px",background:"rgba(255,255,255,0.12)"}}),C&&(0,b.jsxs)("button",{onMouseEnter:()=>p(!0),onClick:()=>r(a=>!a),"aria-expanded":J,title:J?"Close":"Open",style:{display:"flex",alignItems:"center",gap:8,background:"none",border:"none",color:"inherit",font:"inherit",cursor:"pointer",padding:"5px 8px",whiteSpace:"nowrap"},children:[(0,b.jsx)("span",{className:A?"notch-pulse":void 0,style:{width:7,height:7,borderRadius:"50%",background:K,flexShrink:0}}),(0,b.jsxs)("span",{role:"status","aria-live":"polite",style:{display:"flex",alignItems:"center",gap:8},children:[(0,b.jsx)("b",{style:{color:A||B?"#fff":"#b8c4c4",fontWeight:600},children:L}),M&&(0,b.jsx)("span",{style:{color:"#8b9a9a"},children:M})]}),!A&&!B&&J&&(0,b.jsx)("span",{style:{color:"#8b9a9a"},children:"ready · press Auto scan beside Scan to start"})]})]}),C&&null!=G&&(0,b.jsx)("div",{style:{height:2,margin:"3px 6px 0",borderRadius:2,background:"rgba(255,255,255,0.08)",overflow:"hidden"},children:(0,b.jsx)("div",{style:{width:`${Math.round(100*G)}%`,height:"100%",background:A?"#00ff88":"#3498DB",transition:"width 0.4s ease"}})}),J&&A&&(0,b.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:12,margin:"8px 8px 0",flexWrap:"wrap"},children:[k.target?.name&&(0,b.jsx)("span",{children:k.target.name}),H&&(0,b.jsxs)("span",{style:{color:(a=H.searches,(j=H.cap)?a/j>=.9?"#ff6b6b":a/j>=.6?"#FFD700":"#00ff88":"#8b9a9a")},title:"Searches on your LinkedIn account in the last 24 hours, and your daily budget",children:[H.searches,H.cap?` of ${H.cap}`:""," searches today"]}),I&&(0,b.jsx)("span",{style:{color:"#667",maxWidth:280,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:I,children:I}),(0,b.jsx)(e.default,{href:"/setup",style:{color:"#3498DB",textDecoration:"none"},children:"Details"}),(0,b.jsx)("button",{onClick:async()=>{n(!0);try{await (0,f.stopScrape)()}catch{n(!1)}},disabled:m,title:"Stops after saving what's been read; Resume on the Scan page carries on from the same page",style:{padding:"3px 10px",borderRadius:8,fontSize:12,cursor:m?"default":"pointer",background:"rgba(255,107,107,0.12)",color:"#ff9b9b",border:"1px solid rgba(255,107,107,0.35)"},children:m?"Stopping…":"Stop"})]}),J&&!A&&B?.detail&&(0,b.jsx)("div",{style:{margin:"6px 8px 0",color:"#8b9a9a"},children:B.detail})]})}])},59617,a=>{"use strict";var b=a.i(72131),c=a.i(37732),d=a.i(58834);let e=!1;a.s(["default",0,function(){return(0,b.useEffect)(()=>{if(d.IS_DEMO||e)return;let a=()=>{};return fetch("/api/social").then(a=>a.json()).then(({social:b})=>{if(!b?.autoSync||e)return;let d=b.liveAt?Date.parse(b.liveAt):0,f=new Date().getHours();Date.now()-d<864e5||f<9||f>=19||(a=(0,c.watchScanner)(()=>{let b=(0,c.scannerNow)();b.known&&!e&&(e=!0,a(),b.running||(0,c.beginScrape)("messages").catch(()=>{}))}))}).catch(()=>{}),()=>a()},[]),null}])},17372,a=>{"use strict";var b=a.i(87924),c=a.i(72131);a.s(["default",0,function(){let[a,d]=(0,c.useState)(null);return((0,c.useEffect)(()=>{let a=!0;return fetch("/api/update").then(a=>a.json()).then(b=>{a&&b?.restartNeeded&&d(b)}).catch(()=>{}),()=>{a=!1}},[]),a)?(0,b.jsxs)("div",{role:"status",style:{position:"fixed",left:0,right:0,bottom:0,zIndex:9999,background:"linear-gradient(90deg, #FFD700, #FF6B35)",color:"#1a1200",padding:"9px 16px",fontSize:13,fontWeight:600,lineHeight:1.5,display:"flex",alignItems:"center",justifyContent:"center",gap:10,flexWrap:"wrap",textAlign:"center"},children:[(0,b.jsxs)("span",{children:["You have newer code on disk (",a.sha,") than this server is running (",a.bootSha,"). Restart it to see the changes — ",(0,b.jsx)("code",{style:{background:"rgba(0,0,0,0.16)",padding:"1px 6px",borderRadius:4},children:"Ctrl-C"})," in the terminal, then ",(0,b.jsx)("code",{style:{background:"rgba(0,0,0,0.16)",padding:"1px 6px",borderRadius:4},children:"npm run dev"}),"."]}),(0,b.jsx)("button",{onClick:()=>d(null),style:{border:"none",background:"rgba(0,0,0,0.18)",color:"#1a1200",borderRadius:6,padding:"3px 10px",fontWeight:700,cursor:"pointer"},children:"Dismiss"})]}):null}])},75857,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(73167),e=a.i(58834),f=a.i(42510);let g=(0,c.createContext)({userId:null,userName:null,userProfile:null,ready:!1});a.s(["default",0,function({children:a}){let[h,i]=(0,c.useState)(null),[j,k]=(0,c.useState)(null),[l,m]=(0,c.useState)(null),[n,o]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(e.IS_DEMO){i(e.DEMO_USER.id),k(e.DEMO_USER.name),m({name:e.DEMO_USER.name,headline:e.DEMO_USER.headline,role:"",company:"",industry:"",sectors:[],goals:[],linkedin_url:""}),o(!0);return}if((0,f.hasCsvNetwork)()){i(f.CSV_USER.id),k(f.CSV_USER.name),m({name:f.CSV_USER.name,headline:"Imported from your LinkedIn CSV",role:"",company:"",industry:"",sectors:[],goals:[],linkedin_url:""}),o(!0);return}fetch("/api/users?me=1").then(a=>a.json()).then(a=>{let b=a.user;if(!b)throw Error("no profile");(0,d.setUser)(b.id,b.name),i(b.id),k(b.name),m({name:b.name,headline:b.headline||"",role:b.role||"",company:b.company||"",industry:b.industry||"",sectors:b.sectors||[],goals:b.goals||[],linkedin_url:b.linkedin_url||""})}).catch(()=>{(0,d.hasUser)()&&(i((0,d.getUserId)()),k((0,d.getUserName)()))}).finally(()=>o(!0))},[]),(0,b.jsx)(g.Provider,{value:{userId:h,userName:j,userProfile:l,ready:n,login:(a,b)=>{(0,d.setUser)(a,b),i(a),k(b),fetch(`/api/users?id=${a}`).then(a=>a.json()).then(a=>{a.user&&m({name:a.user.name,headline:a.user.headline||"",role:a.user.role||"",company:a.user.company||"",industry:a.user.industry||"",sectors:a.user.sectors||[],goals:a.user.goals||[],linkedin_url:a.user.linkedin_url||""})}).catch(()=>{})}},children:a})},"useUser",0,function(){return(0,c.useContext)(g)}])},58834,a=>{"use strict";var b=a.i(42510);let c="true"===process.env.NEXT_PUBLIC_DEMO_MODE,d=null;async function e(){if(d)return d;let a=await fetch("/demo-data.json",{cache:"no-cache"});if(!a.ok)throw Error("demo-data.json not found — run: node scripts/gen-synthetic.mjs");let b=await a.json();return d={degree1:b.degree1||[],degree2:b.degree2||[]}}async function f(){let a=await e();return(0,b.saveSessionNetwork)({degree1:a.degree1,degree2:a.degree2,source:"sample"}),{degree1:a.degree1.length,degree2:a.degree2.length}}a.s(["DEMO_USER",0,{id:"synthetic-demo-user",name:"You",headline:"Sample network"},"IS_DEMO",0,c,"loadDemoNetwork",0,e,"loadSampleIntoSession",0,f])},7846,a=>{"use strict";var b=a.i(37732);let c=(a,b)=>{try{let c=localStorage.getItem(a);return null===c?b:JSON.parse(c)}catch{return b}};a.s(["allDayNow",0,function(){try{return"true"===localStorage.getItem("six-degrees-experimental-auto")}catch{return!1}},"startAutoScan",0,function(){let a=c("six-degrees-bridge-order","newest");return(0,b.beginScrape)("auto-bridge",{experimental:!0,maxBridges:10,order:a,tiers:"score"===a?["S","A"]:[],maxPages:c("six-degrees-bridge-pages-v2",100),deeper:c("six-degrees-bridge-finish",!0)})},"watchAllDay",0,function(a){return window.addEventListener("storage",a),window.addEventListener("six-degrees:experimental",a),()=>{window.removeEventListener("storage",a),window.removeEventListener("six-degrees:experimental",a)}}])},63033,a=>{"use strict";let b=new Set,c=[],d=[],e=new Set,f=null,g=new Set,h=!1;a.s(["activitiesNow",0,()=>c,"noActivities",0,()=>d,"noNotch",0,()=>!1,"noNotchTabs",0,()=>null,"notchShownNow",0,()=>h,"notchTabsNow",0,()=>f,"setNotchShown",0,function(a){!!a!==h&&(h=!!a,g.forEach(a=>a()))},"setNotchTabs",0,function(a){f=a&&Array.isArray(a.items)&&a.items.length>1?a:null,e.forEach(a=>a())},"showActivity",0,function(a){return a?.id?(c=[...c.filter(b=>b.id!==a.id),a],b.forEach(a=>a()),()=>{var d;return d=a.id,void(c.some(a=>a.id===d)&&(c=c.filter(a=>a.id!==d),b.forEach(a=>a())))}):()=>{}},"watchActivities",0,function(a){return b.add(a),()=>b.delete(a)},"watchNotchShown",0,function(a){return g.add(a),()=>g.delete(a)},"watchNotchTabs",0,function(a){return e.add(a),()=>e.delete(a)}])},37732,a=>{"use strict";async function b(){let a=await fetch("/api/scraper");if(!a.ok)throw Error("Could not reach the app.");return a.json()}Symbol.for("six-degrees.scan-state");let c="six-degrees-hide-chrome";function d(a,b={},e=function(a="u">typeof localStorage?localStorage:null){try{return!0===JSON.parse(a?.getItem(c)||"false")}catch{return!1}}()){return{action:a,...b,...e?{headless:!0}:{}}}async function e(a,b,c={}){let f=await fetch("/api/scraper",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d(a,{...b?{name:b}:{},...c}))}),g=await f.json().catch(()=>({}));if(!f.ok)throw Error(g.error||"Could not start the scanner.");return g}async function f(a){let b=await fetch(`/api/scraper?resume=${encodeURIComponent(a)}`);return b.ok?(await b.json()).resume??null:null}let g=Object.freeze({skips:[],read:[]});async function h(){try{let a=await fetch("/api/scraper?reach=1");if(!a.ok)return g;let b=await a.json();return{skips:Array.isArray(b.skips)?b.skips:[],read:Array.isArray(b.read)?b.read:[]}}catch{return g}}async function i(a){let b=await fetch(`/api/scraper?person=${encodeURIComponent(a)}`);return b.ok?b.json():{person:null}}async function j(){await fetch("/api/scraper",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"cancel"})})}let k=Object.freeze({known:!1,running:!1,pending:!1,action:null,target:null,startedAt:null,progress:null,log:[],finished:[]}),l=new Set,m=k,n=JSON.stringify(m),o=null,p=null,q=0,r=!1,s=new Set;function t(a){let b=JSON.stringify(a);if(b!==n)for(let c of(n=b,m=Object.freeze(a),[...l]))c()}async function u(){(!("u">typeof document&&document.hidden)||m.running)&&await function(){if(p&&p.epoch===q)return p.promise;let a=q,b=fetch("/api/scraper?job=1").then(a=>a.ok?a.json():null).then(b=>{a===q&&function(a){if(!a||"object"!=typeof a)return;let b=!0===a.running;b&&null!=a.startedAt&&s.add(a.startedAt);let c=(Array.isArray(a.recent)?a.recent:[]).filter(a=>s.has(a.startedAt)).map(c=>({...c,log:!b&&c.startedAt===a.startedAt&&Array.isArray(a.log)?a.log:[]}));t({known:!0,running:b||r,pending:r&&!b,action:b?a.action??null:r?m.action:null,target:b?a.target??null:r?m.target:null,startedAt:b?a.startedAt??null:null,progress:b?a.progress??null:null,budget:b?a.budget??null:null,log:b&&Array.isArray(a.log)?a.log:[],finished:c})}(b)}).catch(()=>{}).finally(()=>{p?.promise===b&&(p=null)});return p={epoch:a,promise:b},b}(),clearTimeout(o),o=l.size?setTimeout(u,m.running?1500:5e3):null}function v(a){return l.add(a),1===l.size&&u(),()=>{l.delete(a),l.size||(clearTimeout(o),o=null)}}async function w(a,{name:b,id:c,onLog:d,...f}={}){let g;q++,r=!0,t({...m,known:!0,running:!0,pending:!0,action:a,target:b||c?{id:c??null,name:b??null}:null,startedAt:null,progress:null,log:[]});try{g=await e(a,b,{...c?{id:c}:{},...f})}catch(a){throw r=!1,q++,m.pending&&t({...m,running:!1,pending:!1,action:null,target:null,log:[]}),u(),a}r=!1,q++;let h=g?.startedAt??null;null!=h&&s.add(h);let i=new Promise(a=>{let b=v(()=>{m.running&&m.startedAt===h&&d?.(m.log);let c=null==h?m.running?null:{exitCode:null,failure:null,log:[]}:m.finished.find(a=>a.startedAt===h);c&&(b(),c.log.length&&d?.(c.log),a(c))});u()});return{startedAt:h,ended:i}}function x(a){return!!a?.target&&["bridge","rescrape","resume"].includes(a.action)}a.s(["HIDE_CHROME_KEY",0,c,"NO_SCAN_NOTES",0,g,"SCANNER_UNKNOWN",0,k,"beginScrape",0,w,"busyReason",0,function(a=m){if(!a?.running)return null;let b=a.target?.name;switch(a.action){case"bridge":case"rescrape":case"resume":return b?`${b}’s circle is being scanned`:"A circle is being scanned";case"company":return b?`${b} is being scanned`:"A company is being scanned";case"auto-bridge":case"auto-bridge-retry":case"resume-all":return"Your bridges are being mapped, one by one";case"full":case"refresh":return"Your own connections are being scanned";default:switch(a.action){case"install":return"The scanner's packages are being installed";case"setup":return"The scanner is being set up";case"login":return"The LinkedIn sign-in window is open";case"photos":return"Profile photos are being saved";default:return"A scan is running"}}},"isCircleScan",0,x,"loadScanNotes",0,h,"notReadyMessage",0,function(a){if(!a)return"Could not reach the app.";let b=a.checks||{};return b.scriptsFound?b.dependencies?b.chrome?null:"Google Chrome is not installed.":b.python||b.download?"The scanner is not set up yet — open Scan to set it up.":"No Python 3.10 to 3.14 is installed on this machine.":"The scanner files are missing from this install."},"pickedPerson",0,i,"resumePoint",0,f,"runScrape",0,function(a,b={}){return w(a,b).then(a=>a.ended)},"scanRequest",0,d,"scannerNow",0,function(){return m},"scansCircleOf",0,function(a,b){if(!x(a)||!b)return!1;let{id:c,name:d}=a.target;return c&&b.id?c===b.id:!!d&&d===b.name},"scraperStatus",0,b,"stopScrape",0,j,"watchScanner",0,v],37732)},69789,(a,b,c)=>{"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d={actionAsyncStorage:function(){return f.actionAsyncStorage},workAsyncStorage:function(){return g.workAsyncStorage},workUnitAsyncStorage:function(){return h.workUnitAsyncStorage}};for(var e in d)Object.defineProperty(c,e,{enumerable:!0,get:d[e]});let f=a.r(20635),g=a.r(56704),h=a.r(32319);("function"==typeof c.default||"object"==typeof c.default&&null!==c.default)&&void 0===c.default.__esModule&&(Object.defineProperty(c.default,"__esModule",{value:!0}),Object.assign(c.default,c),b.exports=c.default)}];
2
-
3
- //# sourceMappingURL=_0xi-fbs._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[36839,a=>{"use strict";var b=a.i(87924),c=a.i(75857);a.s(["default",0,function({children:a}){let{userId:d,ready:e}=(0,c.useUser)();return e&&d?a:(0,b.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff",padding:24,textAlign:"center",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:e?(0,b.jsxs)("div",{style:{maxWidth:420},children:[(0,b.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,b.jsx)("div",{style:{color:"#888",fontSize:14,lineHeight:1.6},children:"The page loaded but the app behind it is not answering. If you started it from a terminal, check that window for an error, then reload this page."})]}):(0,b.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},45889,a=>{"use strict";var b=a.i(90231);function c(a=[],d=[]){let e=new Set((d||[]).map(b.keyFor)),f=new Map;for(let c of a||[]){let a=c?.source_connection_id;if(null==a)continue;let d=(0,b.keyFor)(c);if(e.has(d))continue;let g=f.get(d);g||f.set(d,g=new Set),g.add(a)}let g=new Map;for(let a of f.values())for(let b of a){let c=g.get(b)||{reach:0,only:0,total:0};c.reach+=1/a.size,c.total+=1,1===a.size&&(c.only+=1),g.set(b,c)}return g}a.s(["bridgeOverlap",0,function(a=[],d=[]){let e=c(a,d),f=new Set((d||[]).map(b.keyFor)),g=new Map;for(let c of a||[]){let a=c?.source_connection_id;if(null==a)continue;let d=(0,b.keyFor)(c);if(f.has(d))continue;let e=g.get(d);e||g.set(d,e=new Set),e.add(a)}let h=new Map;for(let a of g.values()){if(a.size<2)continue;let b=[...a];for(let a=0;a<b.length;a++)for(let c=a+1;c<b.length;c++){let d=b[a]<b[c]?`${b[a]}|${b[c]}`:`${b[c]}|${b[a]}`;h.set(d,(h.get(d)||0)+1)}}let i=new Map;for(let[a,b]of h){let[c,d]=a.split("|"),f=e.get(c).total+e.get(d).total-b,g=f?b/f:0;for(let[a,e]of[[c,d],[d,c]]){let c=i.get(a);(!c||g>c.share)&&i.set(a,{with:e,share:g,shared:b})}}return i},"exclusiveReach",0,c,"redundancy",0,function(a=[],b=[]){let d=c(a,b),e=0,f=0;for(let a of d.values())e+=a.reach,f+=a.only;return e?1-f/e:0}])},23310,a=>{"use strict";async function b(a){let b=a?`/api/network?userId=${encodeURIComponent(a)}`:"/api/network",c=await fetch(b);if(!c.ok)throw Error(`Failed to load network (${c.status})`);let d=await c.json();return{degree1:d.degree1||[],degree2:d.degree2||[],degree3:d.degree3||[],ties:Number(d.ties)||0}}a.s(["loadNetwork",0,b])},91443,81273,a=>{"use strict";let b={fast:{label:"Fast",pagePause:20,chunkCooldown:60,profileGap:60},medium:{label:"Medium",pagePause:45,chunkCooldown:180,profileGap:90},slow:{label:"Slow",pagePause:90,chunkCooldown:300,profileGap:120}},c=a=>b[a]||b.fast;function d(a,b){let d=c(a),e=Math.max(0,Math.floor(Number(b)||0));return e*(6+d.pagePause)+Math.floor(e/10)*d.chunkCooldown}a.s(["PACES",0,b,"PACE_NAMES",0,["slow","medium","fast"],"durationText",0,function(a){if(!(a>=60))return"under a minute";let b=Math.round(a/60);if(b<60)return`about ${b} min`;let c=Math.floor(b/60),d=b%60;return`about ${c} h${d?` ${d} min`:""}`},"paceOf",0,c,"paceSeconds",0,d,"searchesPerHour",0,function(a){let b=c(a);return Math.round(3600/(6+b.pagePause+b.chunkCooldown/10))}],81273);var e=a.i(90231);function f(a,b){return a?b.scanned.has(a.id)||a.profile_url&&b.read?.has((0,e.keyFor)(a))?"scanned":a.profile_url&&b.hidden.has((0,e.keyFor)(a))?"hidden":"todo":"todo"}function g(a,b){if(!a||1!==a.degree||null==a.unlocked_from_bridge_id)return null;let c=f(a,b);return"todo"===c?"ready":c}a.s(["circleScanCost",0,function(a=100,b="fast"){let c=Math.max(1,Math.min(100,Math.round(a)||100)),e=b&&"fast"!==b?Math.max(5,Math.round(d(b,c)/60)):c>=100?55:Math.max(5,Math.round(.55*c));return{profileViews:1,searches:c,minutes:e}},"circleState",0,f,"reachIndex",0,function(a=[],b=[],c={}){let d=new Set;for(let a of b||[])a?.source_connection_id!=null&&d.add(a.source_connection_id);let f=new Set;for(let a of c?.skips||[])a?.profileUrl&&f.add((0,e.keyFor)({profile_url:a.profileUrl}));let g=new Set;for(let a of c?.read||[])a&&g.add((0,e.keyFor)({profile_url:a}));let h=new Map;for(let[a,b]of Object.entries(c?.lists||{}))a&&b&&h.set((0,e.keyFor)({profile_url:a}),b);let i=new Map;for(let b of a||[]){let a=b?.unlocked_from_bridge_id;if(null==a||1!==b.degree)continue;let c=i.get(a);c||i.set(a,c=[]),c.push(b)}return{scanned:d,read:g,hidden:f,reachedFrom:i,lists:h}},"reachState",0,g,"readyByCircle",0,function(a){let b=new Map;for(let[c,d]of a.reachedFrom){let e=d.filter(b=>"ready"===g(b,a)).length;e&&b.set(c,e)}return b},"readyToScan",0,function(a,b){return(a||[]).filter(a=>"ready"===g(a,b)).sort(e.compareBridges)},"scanBars",0,function(a,b){let c=f(a,b),d=a?.profile_url?b.lists?.get((0,e.keyFor)(a)):null;return"hidden"===c?null:d?d.more?d.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*d.pages/d.total)))):2:5:"scanned"===c?2:null}],91443)},90231,56377,a=>{"use strict";let b=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,c="/avatars/";function d(a){return"string"==typeof a&&a.startsWith(c)&&b.test(a.slice(c.length))?a:null}a.s(["localPhoto",0,d],56377);let e={S:0,A:1,B:2,C:3,D:4};function f(a){let b=parseFloat(a?.power_score);return Number.isFinite(b)?b:0}function g(a){return Math.round(10*f(a))/10}function h(a){return String(a?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${a?.id}`}let i=(a,b)=>String(a??"").localeCompare(String(b??""),void 0,{numeric:!0});function j(a,b){return(e[a.tier]??9)-(e[b.tier]??9)||f(b)-f(a)||String(a.name||"").localeCompare(String(b.name||""))||i(a.id,b.id)}function k(a,b){return a.bridge&&b.bridge?j(a.bridge,b.bridge):a.bridge?-1:b.bridge?1:i(a.id,b.id)}function l(a,b){return b.score-a.score||b.waysIn-a.waysIn||k(a.routes[0]||m,b.routes[0]||m)||String(a.person.name||"").localeCompare(String(b.person.name||""))||(a.key<b.key?-1:+(a.key>b.key))}let m={id:null,bridge:null};function n(a){let b=String(a||"").trim().split(/\s+/).filter(Boolean);return b.length<2?b[0]||"":`${b[0]} ${b[b.length-1].charAt(0)}.`}function o(a,b){let c=String(a||"");return b<=1?c?"…":"":c.length>b?`${c.slice(0,b-1)}…`:c}a.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,j,"comparePower",0,l,"convergeLayout",0,function(a,b=800,c=!1,{cards:d=!1,mutuals:e=0}={}){let f=d?46:c?40:34,g=Math.round(b*(c?.44:.36)),h=Math.round(b*(c?.8:d?.6:.62)),i=[],j=null;for(let b of a?.routes||[])b.bridge?i.push({id:b.id,bridge:b.bridge,unresolved:!1,count:1}):j?j.count++:i.push(j={id:null,bridge:null,unresolved:!0,count:1});let k=Math.max(0,Math.floor(Number(e)||0)-(a?.waysIn||0)),l=Math.min(60,k),m=d?12:11,p=d?220:c?96:120,q=Math.max(1,Math.floor(p/m)+1),r=Math.ceil(l/q),s=l?40+r*m:0,t=Math.max(0,i.length-1)*f+s,u=Math.max(c?190:d?250:220,32+t+48),v=u/2,w=v-t/2,x=Math.max(4,Math.floor((g-10-42)/6)),y=i.map((a,b)=>{let c=a.unresolved?`can't be named (${a.count})`:a.bridge.name||"";return{...a,x:g,y:w+b*f,r:6,primary:0===b&&!a.unresolved,label:c.length<=x?c:o(a.unresolved?c:n(c),x)}}),z={x:h,y:v,r:17*!d,rings:d?[]:[32,50,70].filter(a=>a<=v-4)},A=y.map(b=>({key:a?.key,bridgeId:b.id,primary:b.primary,unresolved:b.unresolved,tier:b.bridge?.tier??null,x1:b.x,y1:b.y,x2:z.x,y2:z.y})),B={x:20,y:v,r:14},C=y.map(a=>({id:a.id,x1:B.x,y1:B.y,x2:a.x,y2:a.y})),D=a?[{key:a.key,p:a,x:z.x,y:z.y,r:z.r,rings:z.rings,big:!0,label:""}]:[],E=w+Math.max(0,i.length-1)*f+40,F=d?g-236+8:g-p,G=Array.from({length:l},(a,b)=>({x:F+b%q*m,y:E+Math.floor(b/q)*m})),H=a?.waysIn?a.waysIn/(a.waysIn+k):1;return{width:b,height:u,you:B,target:z,people:D,bridges:y,links:A,spokes:C,ghosts:G,unscanned:k,ghostLabel:l?{x:F,y:E-13}:null,drawn:H}},"keyFor",0,h,"mapCount",0,function(a,b=10){let c=Math.max(0,Math.min(100,Number(a)||0));return c<=50?b:Math.max(1,Math.round(b*(100-c)/50))},"mostMutuals",0,function(a=[],b=()=>0,c=7){return[...a].sort((a,c)=>Math.max(b(c)||0,c.waysIn)-Math.max(b(a)||0,a.waysIn)||c.waysIn-a.waysIn||l(a,c)).slice(0,c)},"routeIndex",0,function(a=[]){let b=new Map;for(let c of a||[]){let a=h(c),d=b.get(a);d||(d=new Set,b.set(a,d)),d.add(c.source_connection_id??null)}return b},"routesFor",0,function(a,b,c){return a?[...b?.get(h(a))??(null!=a.source_connection_id?new Set([a.source_connection_id]):new Set)].map(a=>({id:a,bridge:c?.get(a)??null})).sort(k):[]},"score",0,f,"score1",0,g,"separationPeople",0,function(a=[],b=[]){let c=new Map;for(let a of b||[])c.set(a.id,a);let e=new Map,f=new Map;for(let b of a||[]){let a=h(b);f.set(b.id,a);let c=e.get(a);c?function(a,b){let c=g(a)-g(b);if(c)return c>0;let e=!!d(a.profile_image_url);return!!d(b.profile_image_url)!==e?e:0>i(a.id,b.id)}(b,c.person)&&(c.person=b):(c={key:a,person:b,rowIds:[],routeIds:new Set},e.set(a,c)),c.rowIds.push(b.id),c.routeIds.add(b.source_connection_id??null)}let j={people:e.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},m=new Set,n=new Set,o=new Set,p=[];for(let a of e.values()){let b=[...a.routeIds].map(a=>({id:a,bridge:c.get(a)??null}));b.sort(k);let d=b.filter(a=>a.bridge);for(let a of b)(a.bridge?m:n).add(a.id);if(!d.length)for(let a of(j.peopleOnlyUnresolved++,b))o.add(a.id);let{person:e}=a,f=e.tier;void 0!==j.byTier[f]&&j.byTier[f]++,b.length>1&&j.multi++,p.push({key:a.key,person:e,score:g(e),tier:f,routes:b,waysIn:b.length,rowIds:a.rowIds,haystack:[e.name,e.headline,e.company,e.role,...d.map(a=>a.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return j.bridges=m.size,j.unresolvedIds=n.size,j.onlyUnresolvedVia=o.size,p.sort(l),function(a){for(let b=0;b<a.length;b++){let c=a[b],d=a[b-1],e=d&&d.score===c.score&&d.waysIn===c.waysIn;c.rank=e?d.rank:b+1,e&&(c.tied=!0,d.tied=!0)}}(p),{people:p,rowToKey:f,summary:j}},"shortName",0,n,"summitLayout",0,function(a=[],b=800,c=!1,{cards:d=!1}={}){let e=d?50:c?36:26,f=Math.round(.42*b),g=Math.round(.58*b),h=a.map((a,c)=>{var f;return{key:a.key,p:a,x:g,y:16+c*e,r:d?0:(f=a.waysIn)>=4?8.5:3===f?7:2===f?5.5:4,label:o(`#${a.rank}${a.tied?"=":""} ${a.person.name||""}`,Math.floor((b-g-60)/6.2))}}),i=new Map,k="\0unresolved";for(let a of h)for(let b of a.p.routes){let c=b.bridge?b.id:k,d=i.get(c);d||(d={id:b.bridge?b.id:null,bridge:b.bridge,unresolved:!b.bridge,ys:[],count:0},i.set(c,d)),d.count++,d.ys.push(a.y)}let l=[...i.values()].map(a=>({...a,bary:a.ys.reduce((a,b)=>a+b,0)/a.ys.length}));l.sort((a,b)=>a.bary-b.bary||a.unresolved-b.unresolved||(a.bridge&&b.bridge?j(a.bridge,b.bridge):0));let m=h.length?h[h.length-1].y:16,p=function(a=[],b=18,c=0){let d=[];a.forEach((a,c)=>{for(d.push({sum:a-c*b,count:1});d.length>1&&d[d.length-2].sum/d[d.length-2].count>d[d.length-1].sum/d[d.length-1].count;){let a=d.pop();d[d.length-1].sum+=a.sum,d[d.length-1].count+=a.count}});let e=d.flatMap(a=>Array(a.count).fill(a.sum/a.count)).map((a,c)=>a+c*b),f=e.length&&e[0]<c?c-e[0]:0;return e.map(a=>a+f)}(l.map(a=>a.bary),d?36:18,16),q=Math.max(4,Math.floor((f-10-42)/6));l.forEach((a,b)=>{if(a.x=f,a.y=p[b],a.r=5,a.unresolved)a.label=o(`can't be named (${a.count})`,q);else{let b=a.bridge.name||"";a.label=b.length<=q?b:o(n(b),q)}delete a.ys});let r=new Map(l.map(a=>[a.unresolved?k:a.id,a]));for(let a of l)a.onlyFor=0,a.bestFor=0;for(let a of h){let b=a.p.routes[0],c=b?r.get(b.bridge?b.id:k):null;c&&c.bestFor++,1===a.p.waysIn&&c&&c.onlyFor++}let s=[];for(let a of h){let b=new Set;a.p.routes.forEach((c,d)=>{let e=c.bridge?c.id:k;if(b.has(e))return;b.add(e);let f=r.get(e);s.push({key:a.key,bridgeId:f.id,primary:0===d&&!f.unresolved,unresolved:f.unresolved,tier:f.bridge?.tier??null,x1:f.x,y1:f.y,x2:a.x,y2:a.y})})}let t=Math.max(m,l.length?l[l.length-1].y:0),u=h.length?Math.ceil(t+16):0,v={x:20,y:h.length?(16+Math.max(m,t))/2:16,r:14},w=l.map(a=>({id:a.id,x1:v.x,y1:v.y,x2:a.x,y2:a.y}));return{width:b,height:u,you:v,people:h,bridges:l,links:s,spokes:w}}],90231)},76939,a=>{"use strict";a.s(["TIER_COLORS_CLASSIC",0,{S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},"TIER_ORDER",0,["S","A","B","C","D"],"initialsFor",0,function(a){let b=String(a||"").trim().split(/\s+/).filter(Boolean);return 0===b.length?"?":(b[0].charAt(0)+(b.length>1?b[b.length-1].charAt(0):"")).toUpperCase()}])}];
2
-
3
- //# sourceMappingURL=_0xmwmfv._.js.map