six-degrees 0.4.9 → 0.4.11

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 (242) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +4 -4
  5. package/.next/standalone/.next/routes-manifest.json +6 -0
  6. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.rsc +13 -13
  15. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
  16. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +12 -12
  17. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  18. package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/social/crm/route/app-paths-manifest.json +3 -0
  42. package/.next/standalone/.next/server/app/api/social/crm/route/build-manifest.json +12 -0
  43. package/.next/standalone/.next/server/app/api/social/crm/route/server-reference-manifest.json +4 -0
  44. package/.next/standalone/.next/server/app/api/social/crm/route.js +10 -0
  45. package/.next/standalone/.next/server/app/api/social/crm/route.js.map +5 -0
  46. package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -0
  47. package/.next/standalone/.next/server/app/api/social/crm/route_client-reference-manifest.js +3 -0
  48. package/.next/standalone/.next/server/app/api/social/messages/route.js +4 -3
  49. package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/social/route.js +4 -3
  51. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/import.html +1 -1
  60. package/.next/standalone/.next/server/app/import.rsc +15 -15
  61. package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +15 -15
  62. package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +14 -14
  64. package/.next/standalone/.next/server/app/index.html +1 -1
  65. package/.next/standalone/.next/server/app/index.rsc +15 -15
  66. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  67. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  68. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  69. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/launch.html +2 -2
  72. package/.next/standalone/.next/server/app/launch.rsc +15 -15
  73. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +15 -15
  74. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
  75. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +14 -14
  76. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/paths.html +1 -1
  81. package/.next/standalone/.next/server/app/paths.rsc +15 -15
  82. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +15 -15
  83. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
  84. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +14 -14
  85. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/profile.html +1 -1
  88. package/.next/standalone/.next/server/app/profile.rsc +15 -15
  89. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +15 -15
  90. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
  91. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +14 -14
  92. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/queue.html +1 -1
  95. package/.next/standalone/.next/server/app/queue.rsc +15 -15
  96. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +15 -15
  97. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
  98. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +14 -14
  99. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/scores.html +1 -1
  102. package/.next/standalone/.next/server/app/scores.rsc +15 -15
  103. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +15 -15
  104. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
  105. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +14 -14
  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 +15 -15
  110. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +15 -15
  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 +14 -14
  113. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/setup.html +1 -1
  116. package/.next/standalone/.next/server/app/setup.rsc +15 -15
  117. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +15 -15
  118. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  119. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +14 -14
  120. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/social.html +1 -1
  123. package/.next/standalone/.next/server/app/social.rsc +15 -15
  124. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +15 -15
  125. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
  126. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +14 -14
  127. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  128. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__06mi9k2._.js → [root-of-the-server]__05_3-22._.js} +7 -2
  129. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +8 -0
  131. package/.next/standalone/.next/server/chunks/_0ea9qwy._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/_1_fynia._.js +4 -4
  133. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/_1oqfuh8._.js +3 -0
  135. package/.next/standalone/.next/server/chunks/_1xh07bp._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_social_crm_route_actions_0d1aflv.js +3 -0
  137. package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +7 -7
  138. package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +3 -0
  139. package/.next/standalone/.next/server/chunks/lib_rpc_05gt5ya.js +3 -0
  140. package/.next/standalone/.next/server/chunks/ssr/_0-85h6g._.js +3 -0
  141. package/.next/standalone/.next/server/chunks/ssr/_08cfj2b._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/ssr/_0c_y09g._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +1 -1
  145. package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
  146. package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/app_scores_page_09wepvv.js +1 -1
  148. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +1 -1
  150. package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +2 -1
  151. package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +3 -0
  152. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  153. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  154. package/.next/standalone/.next/server/pages/404.html +1 -1
  155. package/.next/standalone/.next/server/pages/500.html +1 -1
  156. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  158. package/.next/standalone/.next/static/chunks/0a5iadnmt9u9k.js +1 -0
  159. package/.next/standalone/.next/static/chunks/15sjx07xhpn6p.js +1 -0
  160. package/.next/standalone/.next/static/chunks/{054zdthcnyd2h.js → 160wjb73ddwqd.js} +1 -1
  161. package/.next/standalone/.next/static/chunks/1a74dky22dxd6.js +1 -0
  162. package/.next/standalone/.next/static/chunks/{04bbi55urkrd6.js → 1c_n0973t07l0.js} +1 -1
  163. package/.next/standalone/.next/static/chunks/{0bo1dxn5gwzpk.css → 1x_ysly42-teq.css} +1 -1
  164. package/.next/standalone/.next/static/chunks/{1_mohm2643nxp.js → 236f0jtp68j_h.js} +1 -1
  165. package/.next/standalone/.next/static/chunks/297e1z34yi--z.js +1 -0
  166. package/.next/standalone/.next/static/chunks/2_ak6qjxb6oa5.js +1 -0
  167. package/.next/standalone/.next/static/chunks/{38wwtni5e1ec1.js → 39hr8d-b2ibtw.js} +1 -1
  168. package/.next/standalone/.next/static/chunks/3ui4d-uqkqj5d.js +2 -0
  169. package/.next/{static/chunks/1z_rt4jteewqp.js → standalone/.next/static/chunks/3zw8bv7-mc4n6.js} +1 -1
  170. package/.next/standalone/CHANGELOG.md +57 -0
  171. package/.next/standalone/app/api/data/export/route.js +2 -1
  172. package/.next/standalone/app/api/scraper/route.js +5 -1
  173. package/.next/standalone/app/api/social/crm/route.js +37 -0
  174. package/.next/standalone/app/api/social/messages/route.js +44 -8
  175. package/.next/standalone/app/api/social/route.js +80 -22
  176. package/.next/standalone/app/components/GalaxyLab.js +4 -1
  177. package/.next/standalone/app/components/ScanStatusBar.js +97 -71
  178. package/.next/standalone/app/components/settings/DataSection.js +12 -3
  179. package/.next/standalone/app/globals.css +15 -0
  180. package/.next/standalone/app/paths/page.js +0 -2
  181. package/.next/standalone/app/profile/page.js +0 -2
  182. package/.next/standalone/app/queue/page.js +0 -2
  183. package/.next/standalone/app/scores/page.js +0 -2
  184. package/.next/standalone/app/settings/page.js +0 -2
  185. package/.next/standalone/app/setup/page.js +0 -2
  186. package/.next/standalone/app/social/Crm.js +683 -0
  187. package/.next/standalone/app/social/Thread.js +90 -0
  188. package/.next/standalone/app/social/page.js +71 -62
  189. package/.next/standalone/lib/data-export.js +10 -4
  190. package/.next/standalone/lib/data-folder.js +9 -0
  191. package/.next/standalone/lib/data-import.js +13 -3
  192. package/.next/standalone/lib/island.js +36 -0
  193. package/.next/standalone/lib/linkedin-export.js +267 -46
  194. package/.next/standalone/lib/social-crm.js +415 -0
  195. package/.next/standalone/lib/social-store.js +13 -6
  196. package/.next/standalone/package-lock.json +2 -2
  197. package/.next/standalone/package.json +1 -1
  198. package/.next/standalone/scripts/scrape.py +126 -22
  199. package/.next/static/chunks/0a5iadnmt9u9k.js +1 -0
  200. package/.next/static/chunks/15sjx07xhpn6p.js +1 -0
  201. package/.next/static/chunks/{054zdthcnyd2h.js → 160wjb73ddwqd.js} +1 -1
  202. package/.next/static/chunks/1a74dky22dxd6.js +1 -0
  203. package/.next/static/chunks/{04bbi55urkrd6.js → 1c_n0973t07l0.js} +1 -1
  204. package/.next/static/chunks/{0bo1dxn5gwzpk.css → 1x_ysly42-teq.css} +1 -1
  205. package/.next/static/chunks/{1_mohm2643nxp.js → 236f0jtp68j_h.js} +1 -1
  206. package/.next/static/chunks/297e1z34yi--z.js +1 -0
  207. package/.next/static/chunks/2_ak6qjxb6oa5.js +1 -0
  208. package/.next/static/chunks/{38wwtni5e1ec1.js → 39hr8d-b2ibtw.js} +1 -1
  209. package/.next/static/chunks/3ui4d-uqkqj5d.js +2 -0
  210. package/.next/{standalone/.next/static/chunks/1z_rt4jteewqp.js → static/chunks/3zw8bv7-mc4n6.js} +1 -1
  211. package/CHANGELOG.md +57 -0
  212. package/lib/data-export.js +10 -4
  213. package/lib/data-folder.js +9 -0
  214. package/lib/data-import.js +13 -3
  215. package/lib/island.js +36 -0
  216. package/lib/linkedin-export.js +267 -46
  217. package/lib/social-crm.js +415 -0
  218. package/lib/social-store.js +13 -6
  219. package/package.json +1 -1
  220. package/scripts/scrape.py +126 -22
  221. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08f5awg._.js +0 -8
  222. package/.next/standalone/.next/server/chunks/lib_18cr1gi._.js +0 -8
  223. package/.next/standalone/.next/server/chunks/ssr/_0ezj4e0._.js +0 -3
  224. package/.next/standalone/.next/server/chunks/ssr/_1errbuf._.js +0 -3
  225. package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +0 -3
  226. package/.next/standalone/.next/static/chunks/2bftn9gubwf0w.js +0 -1
  227. package/.next/standalone/.next/static/chunks/2pw6_osz1n_te.js +0 -1
  228. package/.next/standalone/.next/static/chunks/39csdcx7yv227.js +0 -1
  229. package/.next/standalone/.next/static/chunks/3yzlf70j5t0-o.js +0 -1
  230. package/.next/standalone/.next/static/chunks/3z-swu5pet507.js +0 -1
  231. package/.next/standalone/app/social/Conversations.js +0 -246
  232. package/.next/static/chunks/2bftn9gubwf0w.js +0 -1
  233. package/.next/static/chunks/2pw6_osz1n_te.js +0 -1
  234. package/.next/static/chunks/39csdcx7yv227.js +0 -1
  235. package/.next/static/chunks/3yzlf70j5t0-o.js +0 -1
  236. package/.next/static/chunks/3z-swu5pet507.js +0 -1
  237. /package/.next/standalone/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_buildManifest.js +0 -0
  238. /package/.next/standalone/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_clientMiddlewareManifest.js +0 -0
  239. /package/.next/standalone/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_ssgManifest.js +0 -0
  240. /package/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_buildManifest.js +0 -0
  241. /package/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_clientMiddlewareManifest.js +0 -0
  242. /package/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_ssgManifest.js +0 -0
package/scripts/scrape.py CHANGED
@@ -59,7 +59,18 @@ _ENV_LOCAL = _load_env_local()
59
59
  # a server they don't control.
60
60
  APP_URL = os.getenv("APP_URL", "http://localhost:3000")
61
61
  MESSAGING_URL = "https://www.linkedin.com/messaging/"
62
+ # The daily sync reads the top of your messages list: this many scrolls.
62
63
  MESSAGE_SCROLLS = 15
64
+ # Full history (--messages --full-history, the Social tab's "Read my whole
65
+ # history"): keep scrolling until the list stops growing, but never past these
66
+ # ceilings, at the same fixed pace as everything else the scanner does.
67
+ MESSAGE_HISTORY_SCROLLS = 60
68
+ MESSAGE_HISTORY_MAX = 1000
69
+ # Scrolls in a row that bring no conversation it hadn't seen: the end of the list.
70
+ MESSAGE_HISTORY_STILL = 3
71
+ # Seconds after each scroll for the list to load. Fixed, on purpose: the
72
+ # scanner is openly slow, never made to look like a person with random waits.
73
+ MESSAGE_WAIT = 4
63
74
 
64
75
  CONNECTIONS_URL = "https://www.linkedin.com/mynetwork/invite-connect/connections/"
65
76
 
@@ -2068,14 +2079,54 @@ def voyager_conversations(payload):
2068
2079
  return out
2069
2080
 
2070
2081
 
2071
- def sync_messages(headless=False):
2082
+ def conversation_id(c):
2083
+ """One conversation, however many of LinkedIn's responses mention it: its link, else who's in it."""
2084
+ return c.get("url") or ",".join(c.get("people") or [])
2085
+
2086
+
2087
+ def tally_conversations(seen, convos):
2088
+ """Add these conversations to `seen` (id -> conversation, the newest activity
2089
+ kept) and say how many it didn't have before. The full-history read stops
2090
+ when scrolling stops bringing new ones."""
2091
+ new = 0
2092
+ for c in convos:
2093
+ k = conversation_id(c)
2094
+ if not k:
2095
+ continue
2096
+ if k not in seen:
2097
+ new += 1
2098
+ seen[k] = c
2099
+ elif c.get("at", 0) >= seen[k].get("at", 0):
2100
+ seen[k] = c
2101
+ return new
2102
+
2103
+
2104
+ def history_done(new_per_scroll, found, max_scrolls=MESSAGE_HISTORY_SCROLLS,
2105
+ max_found=MESSAGE_HISTORY_MAX, still=MESSAGE_HISTORY_STILL):
2106
+ """Why a full-history read should stop now, or None to scroll again.
2107
+ `new_per_scroll` is how many new conversations each scroll so far brought;
2108
+ `found` how many there are in all."""
2109
+ if found >= max_found:
2110
+ return f"reached {max_found:,} conversations, the most one read takes"
2111
+ if len(new_per_scroll) >= max_scrolls:
2112
+ return f"reached {max_scrolls} scrolls, the most one read takes"
2113
+ if len(new_per_scroll) >= still and not any(new_per_scroll[-still:]):
2114
+ return "the list stopped growing: that's the whole history"
2115
+ return None
2116
+
2117
+
2118
+ def sync_messages(headless=False, full_history=False):
2072
2119
  """Experimental: read your LinkedIn messages list once, for the Social tab. Opens
2073
2120
  Messaging in your own Chrome, scrolls the list a few times, and keeps from LinkedIn's
2074
- own data who each 1:1 conversation is with, when it was last active, whether it has
2075
- unread messages, its link and who wrote last. The newest message's words go to the
2076
- app only while Keep my messages is on there. No search budget."""
2121
+ own data who each conversation is with, when it was last active, whether it has
2122
+ unread messages, its link and who wrote last. The newest message's words (1:1 only)
2123
+ go to the app only while Keep my messages is on there. No search budget.
2124
+
2125
+ full_history: keep scrolling until no new conversations load (history_done), for
2126
+ the whole list rather than its top. Same fixed waits; opens no conversation."""
2077
2127
  from playwright.sync_api import sync_playwright
2078
2128
  kept = []
2129
+ seen = {}
2079
2130
  with sync_playwright() as p:
2080
2131
  browser = p.chromium.launch_persistent_context(
2081
2132
  user_data_dir=get_scraper_profile_path(), headless=headless, channel="chrome",
@@ -2086,13 +2137,38 @@ def sync_messages(headless=False):
2086
2137
  browser.close()
2087
2138
  return
2088
2139
  page.on("response", lambda r: kept.append(r) if "/voyager/api/" in r.url and "messag" in r.url.lower() else None)
2089
- print("Opening your messages list...")
2140
+
2141
+ def wait(seconds):
2142
+ # Playwright hands over the responses that came in only while it's
2143
+ # being called, so wait through it, not with time.sleep.
2144
+ try:
2145
+ page.wait_for_timeout(seconds * 1000)
2146
+ except Exception:
2147
+ time.sleep(seconds)
2148
+
2149
+ def read_new():
2150
+ got = kept[:]
2151
+ del kept[:len(got)]
2152
+ convos = []
2153
+ for r in got:
2154
+ try:
2155
+ data = r.json()
2156
+ except Exception:
2157
+ continue
2158
+ _wire_sample(data, prefix="messages")
2159
+ convos.extend(voyager_conversations(data))
2160
+ return tally_conversations(seen, convos)
2161
+
2162
+ print("Opening your messages list" + (", to read its whole history..." if full_history else "..."))
2090
2163
  try:
2091
2164
  page.goto(MESSAGING_URL, wait_until="domcontentloaded")
2092
2165
  except Exception:
2093
2166
  pass
2094
- time.sleep(6)
2095
- for i in range(MESSAGE_SCROLLS):
2167
+ wait(6)
2168
+ read_new()
2169
+ scrolls = MESSAGE_HISTORY_SCROLLS if full_history else MESSAGE_SCROLLS
2170
+ new_per_scroll = []
2171
+ for i in range(scrolls):
2096
2172
  if stop_requested() or _window_closed(page):
2097
2173
  break
2098
2174
  try:
@@ -2105,19 +2181,21 @@ def sync_messages(headless=False):
2105
2181
  if (l) l.scrollTop = l.scrollHeight; }""")
2106
2182
  except Exception:
2107
2183
  pass
2108
- print(f" Reading the list ({i + 1} of {MESSAGE_SCROLLS})...", flush=True)
2109
- time.sleep(4)
2110
- convos = []
2111
- for r in kept:
2112
- try:
2113
- data = r.json()
2114
- except Exception:
2115
- continue
2116
- _wire_sample(data, prefix="messages")
2117
- convos.extend(voyager_conversations(data))
2184
+ wait(MESSAGE_WAIT)
2185
+ new_per_scroll.append(read_new())
2186
+ if full_history:
2187
+ print(f" Reading the list (scroll {i + 1}, {len(seen):,} conversations so far)...", flush=True)
2188
+ why = history_done(new_per_scroll, len(seen))
2189
+ if why:
2190
+ print(f" Stopping: {why}.", flush=True)
2191
+ break
2192
+ else:
2193
+ print(f" Reading the list ({i + 1} of {scrolls})...", flush=True)
2118
2194
  browser.close()
2119
- _me, people = live_people(convos)
2120
- print(f" Found {len(convos)} conversations in LinkedIn's data, {len(people)} with one person.")
2195
+ convos = list(seen.values())
2196
+ me, people = live_people(convos)
2197
+ groups = live_groups(convos, me)
2198
+ print(f" Found {len(convos)} conversations in LinkedIn's data: {len(people)} with one person, {len(groups)} groups.")
2121
2199
  # The newest message's words go to the app only if Keep my messages is on
2122
2200
  # there. The app checks too; this way they don't even leave the scanner.
2123
2201
  keep = False
@@ -2131,14 +2209,37 @@ def sync_messages(headless=False):
2131
2209
  if v.get("preview"):
2132
2210
  v["preview"]["text"] = None
2133
2211
  try:
2134
- r = requests.put(f"{APP_URL}/api/social", json={"live": people}, headers=app_headers(), timeout=30)
2212
+ r = requests.put(f"{APP_URL}/api/social", json={"live": people, "groups": groups}, headers=app_headers(), timeout=60)
2135
2213
  got = r.json() if r.ok else {}
2136
2214
  matched, unmatched = got.get("people", 0), got.get("unmatched", 0)
2137
- print(f" Saved for the Social tab: {matched} matched to your connections, {unmatched} not.")
2215
+ print(f" Saved for the Social tab: {matched} of your connections, {unmatched} people who aren't connections, "
2216
+ f"{len(groups)} groups.")
2138
2217
  except Exception as e:
2139
2218
  print(f" Couldn't save them: {e}")
2140
2219
 
2141
2220
 
2221
+ def live_groups(convos, me):
2222
+ """The messages sync's group conversations: who's in them (everyone but you,
2223
+ with their names for the app to match to your connections; it keeps the names
2224
+ only of people who aren't), when each was last active, unread, its link and
2225
+ whether someone else wrote last. No words: a group's newest message isn't sent."""
2226
+ groups = {}
2227
+ for c in convos:
2228
+ others = [u for u in c["people"] if u != me]
2229
+ if len(others) < 2:
2230
+ continue
2231
+ k = conversation_id(c)
2232
+ if k in groups and c["at"] <= groups[k]["last"]:
2233
+ continue
2234
+ latest = c.get("latest")
2235
+ sender = latest.get("from") if latest else None
2236
+ groups[k] = {"threadUrl": c.get("url"), "people": others,
2237
+ "names": {u: n for u, n in (c.get("names") or {}).items() if u in others},
2238
+ "last": c["at"], "unread": c["unread"],
2239
+ "lastFromThem": (sender != me) if sender in c["people"] else None}
2240
+ return list(groups.values())
2241
+
2242
+
2142
2243
  def live_people(convos):
2143
2244
  """The messages sync's conversations, per person: you are the one in the most
2144
2245
  conversations, and only the 1:1 ones are kept. For each person, their newest
@@ -4207,6 +4308,9 @@ Examples:
4207
4308
  parser.add_argument("--company", type=str, help="Scan everyone the app can see at one company")
4208
4309
  parser.add_argument("--messages", action="store_true",
4209
4310
  help="Experimental: read your messages list once for the Social tab (who, when, unread; the newest message's words only if Keep my messages is on)")
4311
+ parser.add_argument("--full-history", action="store_true",
4312
+ help=f"With --messages: keep scrolling until the whole list has loaded (at most {MESSAGE_HISTORY_SCROLLS} scrolls "
4313
+ f"or {MESSAGE_HISTORY_MAX:,} conversations), not just its top")
4210
4314
  parser.add_argument("--experimental", action="store_true",
4211
4315
  help="Auto-Bridge, experimental: all-day pacing (sittings, rests, daytime only, "
4212
4316
  "waits for the daily budget) and reading LinkedIn's own data beside the page text")
@@ -4305,7 +4409,7 @@ Examples:
4305
4409
  done = sum(1 for r in results if r.get("status") == "done")
4306
4410
  print(f"\nDone. {done}/{len(results)} bridges mapped.")
4307
4411
  elif args.messages:
4308
- sync_messages(headless=args.headless)
4412
+ sync_messages(headless=args.headless, full_history=args.full_history)
4309
4413
  elif args.search:
4310
4414
  scrape_full(headless=args.headless)
4311
4415
  elif args.full:
@@ -1,8 +0,0 @@
1
- module.exports=[70406,(e,r,t)=>{r.exports=e.x("next/dist/compiled/@opentelemetry/api",()=>require("next/dist/compiled/@opentelemetry/api"))},18622,(e,r,t)=>{r.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,r,t)=>{r.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,r,t)=>{r.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,r,t)=>{r.exports=e.x("next/dist/server/runtime-reacts.external.js",()=>require("next/dist/server/runtime-reacts.external.js"))},93695,(e,r,t)=>{r.exports=e.x("next/dist/shared/lib/no-fallback-error.external.js",()=>require("next/dist/shared/lib/no-fallback-error.external.js"))},74533,(e,r,t)=>{r.exports=e.x("node:child_process",()=>require("node:child_process"))},66680,(e,r,t)=>{r.exports=e.x("node:crypto",()=>require("node:crypto"))},2157,(e,r,t)=>{r.exports=e.x("node:fs",()=>require("node:fs"))},12714,(e,r,t)=>{r.exports=e.x("node:fs/promises",()=>require("node:fs/promises"))},60526,(e,r,t)=>{r.exports=e.x("node:os",()=>require("node:os"))},50227,(e,r,t)=>{r.exports=e.x("node:path",()=>require("node:path"))},81111,(e,r,t)=>{r.exports=e.x("node:stream",()=>require("node:stream"))},93836,19307,e=>{"use strict";e.i(68835);var r=e.i(1746);let t=e=>String(e||"").split(",")[0].normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().replace(/[^a-z0-9 ]+/g," ").replace(/\s+/g," ").trim(),n=/^https:\/\/www\.linkedin\.com\/messaging\/[\w\-/%=.]*$/;e.s(["conversationList",0,function(e=[],r={}){let t=(Array.isArray(e)?e:[]).map(e=>({...e,unread:null,threadUrl:null})),n=new Map;for(let e of t){if(e.group||e.people?.length!==1)continue;let r=n.get(e.people[0]);(!r||(e.last||0)>(r.last||0))&&n.set(e.people[0],e)}for(let[e,s]of Object.entries(r||{})){if(!s||"object"!=typeof s)continue;let r=n.get(e);r||(r={id:`live:${e}`,people:[e],group:!1,last:null,lastFromThem:null,count:null,unread:null,threadUrl:null},t.push(r),n.set(e,r)),s.last&&(!r.last||s.last>r.last)&&(r.last=s.last,"boolean"==typeof s.lastFromThem&&(r.lastFromThem=s.lastFromThem)),r.unread=Number.isFinite(s.unread)?s.unread:r.unread,r.threadUrl=s.threadUrl||r.threadUrl}return t},"matchLive",0,function(e={},s=[]){let i=new Map,l=new Map;for(let e of s){let n=(0,r.keyFor)(e);i.set(n,n);let s=t(e.name);s&&l.set(s,l.has(s)?null:n)}let o={},a=0;for(let[s,u]of Object.entries(e||{})){if(!u||"object"!=typeof u)continue;let e=i.get((0,r.keyFor)({profile_url:s}))||l.get(t(u.name))||null;if(!e){a+=1;continue}let c=Number(u.last)||null;o[e]&&(o[e].last||0)>=(c||0)||(o[e]={last:c,unread:Number.isFinite(Number(u.unread))&&null!==u.unread?Number(u.unread):null,threadUrl:function(e){let r=String(e||"").trim();return n.test(r)?r:null}(u.threadUrl),lastFromThem:"boolean"==typeof u.lastFromThem?u.lastFromThem:null,preview:function(e){if(!e||"object"!=typeof e)return null;let r=Number(e.t)||null,t="string"==typeof e.text?e.text.slice(0,2e4):null;return r||t?{t:r,fromMe:!0===e.fromMe,text:t}:null}(u.preview)})}return{live:o,unmatched:a}}],93836);var s=e.i(2157),i=e.i(50227),l=e.i(88431),o=e.i(88602);let a={file:null,mtimeMs:0,size:0,data:null};function u(e,r=null){try{return JSON.parse((0,s.readFileSync)(e,"utf8"))??r}catch{return r}}e.s(["deleteMessages",0,function(e){e&&((0,s.rmSync)(e.messages,{force:!0}),(0,s.rmSync)(e.incoming,{force:!0}),a.file=null)},"readJson",0,u,"readMessages",0,function(e){let r;try{r=(0,s.statSync)(e)}catch{return{threads:{},previews:{}}}if(a.file===e&&a.mtimeMs===r.mtimeMs&&a.size===r.size)return a.data;let t=u(e,{}),n={threads:t?.threads&&"object"==typeof t.threads?t.threads:{},previews:t?.previews&&"object"==typeof t.previews?t.previews:{}};return Object.assign(a,{file:e,mtimeMs:r.mtimeMs,size:r.size,data:n}),n},"socialFiles",0,function(){let e=(0,o.resolveProfile)({create:!1});if(!e?.id||!/^[\w-]+$/.test(String(e.id)))return null;let r=(0,l.dataDir)(),t=i.default.join(r,`social-messages-${e.id}.json`);return{profileId:e.id,social:i.default.join(r,`social-${e.id}.json`),messages:t,incoming:`${t}.incoming`}},"writeJsonAtomic",0,function(e,r){let t=`${e}.${process.pid}.tmp`;(0,s.writeFileSync)(t,JSON.stringify(r)),(0,s.renameSync)(t,e),a.file===e&&(a.file=null)}],19307)},88602,e=>{"use strict";var r=e.i(88431);e.s(["networkCounts",0,function(e){let t=Object.fromEntries((0,r.getDb)().prepare("SELECT degree, COUNT(*) AS n FROM linkedin_connections WHERE user_id = ? GROUP BY degree").all(e).map(e=>[e.degree,e.n]));return{first:t[1]||0,second:t[2]||0,third:t[3]||0}},"resolveProfile",0,function({create:e=!0}={}){let[t]=(0,r.getDb)().prepare(`
2
- SELECT u.*,
3
- (SELECT COUNT(*) FROM linkedin_connections c WHERE c.user_id = u.id) AS connections
4
- FROM users u
5
- ORDER BY connections DESC, u.created_at ASC, u.rowid ASC
6
- `).all().map(e=>(0,r.decodeRow)("users",e));if(t)return t;if(!e)return null;let n=(0,r.newId)();return(0,r.getDb)().prepare("INSERT INTO users (id, name) VALUES (?, ?)").run(n,"You"),{...(0,r.decodeRow)("users",(0,r.getDb)().prepare("SELECT * FROM users WHERE id = ?").get(n)),connections:0}}])},12506,1348,e=>{"use strict";e.s(["compareVersions",0,function(e,r){let t=e=>String(e||"").replace(/^v/i,"").split(/[-+]/)[0].split(".").map(e=>Number.parseInt(e,10)||0),n=t(e),s=t(r);for(let e=0;e<Math.max(n.length,s.length);e++){let r=(n[e]||0)-(s[e]||0);if(0!==r)return r>0?1:-1}return 0},"installKind",0,function(e=process.env,r=""){return["mac-app","source","npm"].includes(e.SIX_DEGREES_INSTALL)?e.SIX_DEGREES_INSTALL:/\.app\/Contents\/Resources/.test(r||"")?"mac-app":"npm"},"repoSlug",0,function(e){let r=("string"==typeof e?e:e?.url||"").match(/github\.com[/:]([^/]+)\/([^/.#?]+)/);return r?`${r[1]}/${r[2]}`:null},"updateCommand",0,function(e,r,{dataDir:t}={}){if("mac-app"===e)return`curl -fsSL https://raw.githubusercontent.com/${r}/main/install.sh | bash`;if("source"===e)return"git pull && npm ci && npm run build && npm run start:packaged";let n=t&&`'${String(t).replace(/'/g,"'\\''")}'`;return n?`npx six-degrees@latest --data-dir ${n}`:"npx six-degrees@latest"}],12506);let r=Symbol.for("six-degrees.scan-state");function t(){let e=globalThis[r];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,r=t()){return r?`${n(r)}. ${e}`:null},"registerScanState",0,function(e){return globalThis[r]||(globalThis[r]=e),globalThis[r]},"runningNow",0,n,"scannerJob",0,t],1348)},1746,e=>{"use strict";e.s(["keyFor",0,function(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}])}];
7
-
8
- //# sourceMappingURL=%5Broot-of-the-server%5D__08f5awg._.js.map
@@ -1,8 +0,0 @@
1
- module.exports=[93836,19307,e=>{"use strict";e.i(68835);var t=e.i(1746);let r=e=>String(e||"").split(",")[0].normalize("NFD").replace(/[̀-ͯ]/g,"").toLowerCase().replace(/[^a-z0-9 ]+/g," ").replace(/\s+/g," ").trim(),n=/^https:\/\/www\.linkedin\.com\/messaging\/[\w\-/%=.]*$/;e.s(["conversationList",0,function(e=[],t={}){let r=(Array.isArray(e)?e:[]).map(e=>({...e,unread:null,threadUrl:null})),n=new Map;for(let e of r){if(e.group||e.people?.length!==1)continue;let t=n.get(e.people[0]);(!t||(e.last||0)>(t.last||0))&&n.set(e.people[0],e)}for(let[e,l]of Object.entries(t||{})){if(!l||"object"!=typeof l)continue;let t=n.get(e);t||(t={id:`live:${e}`,people:[e],group:!1,last:null,lastFromThem:null,count:null,unread:null,threadUrl:null},r.push(t),n.set(e,t)),l.last&&(!t.last||l.last>t.last)&&(t.last=l.last,"boolean"==typeof l.lastFromThem&&(t.lastFromThem=l.lastFromThem)),t.unread=Number.isFinite(l.unread)?l.unread:t.unread,t.threadUrl=l.threadUrl||t.threadUrl}return r},"matchLive",0,function(e={},l=[]){let i=new Map,s=new Map;for(let e of l){let n=(0,t.keyFor)(e);i.set(n,n);let l=r(e.name);l&&s.set(l,s.has(l)?null:n)}let o={},u=0;for(let[l,a]of Object.entries(e||{})){if(!a||"object"!=typeof a)continue;let e=i.get((0,t.keyFor)({profile_url:l}))||s.get(r(a.name))||null;if(!e){u+=1;continue}let c=Number(a.last)||null;o[e]&&(o[e].last||0)>=(c||0)||(o[e]={last:c,unread:Number.isFinite(Number(a.unread))&&null!==a.unread?Number(a.unread):null,threadUrl:function(e){let t=String(e||"").trim();return n.test(t)?t:null}(a.threadUrl),lastFromThem:"boolean"==typeof a.lastFromThem?a.lastFromThem:null,preview:function(e){if(!e||"object"!=typeof e)return null;let t=Number(e.t)||null,r="string"==typeof e.text?e.text.slice(0,2e4):null;return t||r?{t,fromMe:!0===e.fromMe,text:r}:null}(a.preview)})}return{live:o,unmatched:u}}],93836);var l=e.i(2157),i=e.i(50227),s=e.i(88431),o=e.i(88602);let u={file:null,mtimeMs:0,size:0,data:null};function a(e,t=null){try{return JSON.parse((0,l.readFileSync)(e,"utf8"))??t}catch{return t}}e.s(["deleteMessages",0,function(e){e&&((0,l.rmSync)(e.messages,{force:!0}),(0,l.rmSync)(e.incoming,{force:!0}),u.file=null)},"readJson",0,a,"readMessages",0,function(e){let t;try{t=(0,l.statSync)(e)}catch{return{threads:{},previews:{}}}if(u.file===e&&u.mtimeMs===t.mtimeMs&&u.size===t.size)return u.data;let r=a(e,{}),n={threads:r?.threads&&"object"==typeof r.threads?r.threads:{},previews:r?.previews&&"object"==typeof r.previews?r.previews:{}};return Object.assign(u,{file:e,mtimeMs:t.mtimeMs,size:t.size,data:n}),n},"socialFiles",0,function(){let e=(0,o.resolveProfile)({create:!1});if(!e?.id||!/^[\w-]+$/.test(String(e.id)))return null;let t=(0,s.dataDir)(),r=i.default.join(t,`social-messages-${e.id}.json`);return{profileId:e.id,social:i.default.join(t,`social-${e.id}.json`),messages:r,incoming:`${r}.incoming`}},"writeJsonAtomic",0,function(e,t){let r=`${e}.${process.pid}.tmp`;(0,l.writeFileSync)(r,JSON.stringify(t)),(0,l.renameSync)(r,e),u.file===e&&(u.file=null)}],19307)},88602,e=>{"use strict";var t=e.i(88431);e.s(["networkCounts",0,function(e){let r=Object.fromEntries((0,t.getDb)().prepare("SELECT degree, COUNT(*) AS n FROM linkedin_connections WHERE user_id = ? GROUP BY degree").all(e).map(e=>[e.degree,e.n]));return{first:r[1]||0,second:r[2]||0,third:r[3]||0}},"resolveProfile",0,function({create:e=!0}={}){let[r]=(0,t.getDb)().prepare(`
2
- SELECT u.*,
3
- (SELECT COUNT(*) FROM linkedin_connections c WHERE c.user_id = u.id) AS connections
4
- FROM users u
5
- ORDER BY connections DESC, u.created_at ASC, u.rowid ASC
6
- `).all().map(e=>(0,t.decodeRow)("users",e));if(r)return r;if(!e)return null;let n=(0,t.newId)();return(0,t.getDb)().prepare("INSERT INTO users (id, name) VALUES (?, ?)").run(n,"You"),{...(0,t.decodeRow)("users",(0,t.getDb)().prepare("SELECT * FROM users WHERE id = ?").get(n)),connections:0}}])},1746,e=>{"use strict";e.s(["keyFor",0,function(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}])}];
7
-
8
- //# sourceMappingURL=lib_18cr1gi._.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…"})})}])},1328,76433,a=>{"use strict";var b=a.i(90231),c=a.i(42510);function d(a){let b=String(a||"").trim();if(!b)return null;let c=b.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2}))?(?:\s*UTC)?$/);if(c)return Date.UTC(+c[1],c[2]-1,+c[3],+c[4],+c[5],+(c[6]||0));if(c=b.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2,4}),?\s+(\d{1,2}):(\d{2})\s*(AM|PM)?$/i)){let a=100>+c[3]?2e3+ +c[3]:+c[3],b=c[4]%12;return"PM"===(c[6]||"").toUpperCase()&&(b+=12),Date.UTC(a,c[1]-1,+c[2],b,+c[5])}if(c=b.match(/^([A-Za-z]{3,9})\s+(\d{4})$/)){let a=Date.parse(`1 ${c[1]} ${c[2]} UTC`);return Number.isNaN(a)?null:a}let d=Date.parse(/\d{4}$/.test(b)?`${b} UTC`:b);return Number.isNaN(d)?null:d}let e=a=>(0,b.keyFor)({profile_url:a});function f(a=[]){let b=new Map;for(let c of a){let a=e(c["sender profile url"]),d=c["conversation id"];d&&a&&(b.has(a)||b.set(a,new Set),b.get(a).add(d))}let c=null;for(let[a,d]of b)(!c||d.size>b.get(c).size)&&(c=a);return c}function g(a,b){if(!a||!a.total)return"never";let c=b-a.last;return c<=2592e6||a.recent>=3?"warm":c<=31536e6?"cool":"dormant"}a.s(["buildConversations",0,function(a=[],{keepText:b=!1}={}){let c=f(a),g=new Map;for(let f of a){let a=e(f["sender profile url"]),h=f["conversation id"];if(!h||!a)continue;let i=d(f.date);if(null==i)continue;g.has(h)||g.set(h,{id:h,title:"",everyone:new Set,messages:[]});let j=g.get(h);j.everyone.add(a),String(f["recipient profile urls"]||"").split(/[,;\s]+/).filter(Boolean).forEach(a=>j.everyone.add(e(a)));let k={t:i,fromMe:a===c};b&&(k.text=[f.subject,f.content].map(a=>String(a||"").trim()).filter(Boolean).join("\n\n"),!j.title&&f["conversation title"]&&(j.title=String(f["conversation title"]).trim())),j.messages.push(k)}let h=[];for(let a of g.values()){if(!a.everyone.has(c))continue;let d=[...a.everyone].filter(a=>a&&a!==c).sort();if(!d.length)continue;a.messages.sort((a,b)=>a.t-b.t);let e={id:a.id,people:d,group:d.length>1,messages:a.messages};b&&(e.title=a.title),h.push(e)}return{self:c,conversations:h}},"careerChapters",0,function(a=[],b=[],c=Date.now()){let f=a.map(a=>({company:a["company name"]||"",title:a.title||"",from:d(a["started on"]),to:d(a["finished on"])})).filter(a=>a.company&&null!=a.from).sort((a,b)=>a.from-b.from),g=b.map(a=>({url:e(a.url||a.profile_url),t:d(a["connected on"]||a.connected_on)})).filter(a=>null!=a.t);return f.map(a=>{let b=a.to??c,d=g.filter(c=>c.t>=a.from&&c.t<b);return{...a,to:a.to,made:d.length,people:d.map(a=>a.url)}})},"conversationSummary",0,function(a){let b=a.messages[a.messages.length-1];return{id:a.id,people:a.people,group:a.group,last:b?b.t:null,lastFromThem:b?!b.fromMe:null,count:a.messages.length}},"invitationSplit",0,function(a=[]){let b=0,c=0;for(let d of a){let a=String(d.direction||"").toUpperCase();"INCOMING"===a?b+=1:"OUTGOING"===a&&(c+=1)}return{incoming:b,outgoing:c,total:b+c}},"messageStats",0,function(a=[]){let b=f(a),c=new Map;for(let b of a){let a=e(b["sender profile url"]),f=b["conversation id"];if(!f||!a)continue;let g=String(b["recipient profile urls"]||"").split(/[,;\s]+/).filter(Boolean).map(e),h=d(b.date);if(null==h)continue;c.has(f)||c.set(f,{people:new Set,msgs:[]});let i=c.get(f);i.people.add(a),g.forEach(a=>i.people.add(a)),i.msgs.push({from:a,t:h})}let g=0,h=new Map;for(let a of c.values()){let c=[...a.people].filter(a=>a!==b);if(1!==c.length||!a.people.has(b))continue;let d=c[0],e=h.get(d)||{last:0,lastFromThem:!1,total:0,times:[]};for(let c of a.msgs)e.total+=1,e.times.push(c.t),c.t>=e.last&&(e.last=c.t,e.lastFromThem=c.from!==b),c.t>g&&(g=c.t);h.set(d,e)}for(let a of h.values())a.recent=a.times.filter(a=>a>g-7776e6).length,delete a.times;return{self:b,asOf:g||null,people:h}},"postingEffect",0,function(a=[],b=[]){let c=a.map(a=>({t:d(a.date),link:a.sharelink||a["share link"]||""})).filter(a=>null!=a.t).sort((a,b)=>a.t-b.t),e=b.map(a=>d(a["connected on"]||a.connected_on)).filter(a=>null!=a).sort((a,b)=>a-b);if(!e.length)return{posts:[],usualWeek:0,afterPosts:0};let f=Math.max(6048e5,e[e.length-1]-e[0]),g=e.length/f*6048e5,h=c.map(a=>({...a,week:e.filter(b=>b>=a.t&&b<a.t+6048e5).length})),i=h.length?h.reduce((a,b)=>a+b.week,0)/h.length:0;return{posts:h,usualWeek:g,afterPosts:i}},"readTable",0,function(a,b){let d=(0,c.parseCsv)(String(a||"")),e=d.findIndex(a=>a.some(a=>a.trim().toLowerCase()===b.toLowerCase()));if(e<0)return[];let f=d[e].map(a=>a.trim().toLowerCase());return d.slice(e+1).filter(a=>a.some(a=>a.trim())).map(a=>Object.fromEntries(f.map((b,c)=>[b,(a[c]??"").trim()])))},"repliesWaiting",0,function(a){let b=[];for(let[c,d]of a.people){let e=a.asOf-d.last;d.lastFromThem&&e>=2592e5&&e<=2592e6&&b.push({url:c,days:Math.round(e/864e5),total:d.total})}return b.sort((a,b)=>a.days-b.days)},"sortConversations",0,function(a=[],b=()=>null){let c=a=>a.group||!0!==a.lastFromThem?1:0,d=a=>({S:0,A:1})[b(a)]??2;return[...a].sort((a,b)=>c(a)-c(b)||d(a)-d(b)||(b.last||0)-(a.last||0))},"warmthOf",0,g],76433);let h="six-degrees-galaxy-lab",i="six-degrees-galaxy-layouts",j=Object.freeze({on:!1,gravity:0,rings:1,push:15,pull:1,distance:1,dotSize:1,lines:1,sizeBy:"power",names:"key",branch:!0,colourBy:"tier",speed:15,loop:!1,labels:!0}),k=["gravity","rings","push","pull","distance","dotSize","lines","sizeBy","names","branch","colourBy","speed","loop"],l=Object.freeze({gravity:.25,rings:0,push:25,pull:2.5,distance:.35,sizeBy:"reach"}),m=new Set,n=null;function o(){return n||(n=function(){try{let a=JSON.parse(localStorage.getItem(h)||"null");return a&&"object"==typeof a?{...j,...a}:j}catch{return j}}()),n}function p(a){n=null===a?{...j,on:o().on,labels:o().labels}:{...o(),...a};try{localStorage.setItem(h,JSON.stringify(n))}catch{}m.forEach(a=>a())}let q=null,r=new Set;function s(){if(!q){try{q=JSON.parse(localStorage.getItem(i)||"[]")}catch{q=[]}Array.isArray(q)||(q=[])}return q}function t(a){q=a;try{localStorage.setItem(i,JSON.stringify(a))}catch{}r.forEach(a=>a())}let u=new Set,v={at:null,playing:!1,min:null,max:null,of:0,find:"",fly:0,found:0,social:void 0},w=null;function x(a){let b={...v,...a};Object.keys(a).every(a=>Object.is(b[a],v[a]))||(v=b,u.forEach(a=>a()))}function y(){cancelAnimationFrame(w),w=null,x({playing:!1})}let z=null;function A(a){let c=new Map;for(let[d,e]of Object.entries(a?.people||{}))c.set((0,b.keyFor)({profile_url:d}),{...e});for(let[d,e]of Object.entries(a?.live||{})){let a=(0,b.keyFor)({profile_url:d}),f=c.get(a)||{total:0,recent:0};e.last&&(!f.last||e.last>f.last)&&(f.last=e.last,"boolean"==typeof e.lastFromThem&&(f.lastFromThem=e.lastFromThem)),f.unread=e.unread,f.total=Math.max(f.total||0,1),c.set(a,f)}let d=Math.max(a?.asOf||0,a?.liveAt&&Date.parse(a.liveAt)||0);for(let a of c.values())(a.last||0)>d&&(d=a.last);return{merged:c,asOf:d,chapters:a?.chapters||[],posts:a?.posts?.posts||[]}}let B={1:"#4FC3F7",2:"#BA68C8",3:"#FFB74D"},C=["#FF6B6B","#4ECDC4","#FFD93D","#A29BFE","#00B894","#FD79A8","#74B9FF","#E17055"],D={warm:"#FF7043",cool:"#4FC3F7",dormant:"#8D6E63",never:"#546E7A"},E="#4a5568",F=a=>String(a||"").trim().toLowerCase();a.s(["CLUSTERS",0,l,"LAB_DEFAULTS",0,j,"applyLayout",0,function(a){let b=s().find(b=>b.name===a);b&&p(Object.fromEntries(k.filter(a=>a in b.settings).map(a=>[a,b.settings[a]])))},"bornTimes",0,function(a,b){let c=new Map(a.map(a=>[a.id,a])),d=new Map,e=(a,f=0)=>{if(d.has(a.id))return d.get(a.id);let g=-1/0,h=b.get(a.id);if(1===a.degree||null==h||f>6){let b=a.connected_date?Date.parse(a.connected_date):NaN;g=Number.isNaN(b)?-1/0:b}return null!=h&&c.has(h)&&f<=6&&(g=Math.max(g,e(c.get(h),f+1))),d.set(a.id,g),g};return a.map(a=>e(a))},"chapterAt",0,function(a,b){let c=null;for(let d of a?.chapters||[])Number.isFinite(d.from)&&d.from<=b&&(!c||d.from>c.from)&&(c=d);return c&&(!Number.isFinite(c.to)||c.to>b)?c:null},"clockNow",0,()=>v,"colourScheme",0,function(a,c,d,e){if("degree"===a)return{of:a=>B[Math.min(a.degree||1,3)],legend:[["1st",B[1]],["2nd",B[2]],["3rd+",B[3]]]};if("company"===a){let a=new Map;for(let b of c){let c=F(b.company);if(!c)continue;let d=a.get(c)||{name:String(b.company).trim(),n:0};d.n+=1,a.set(c,d)}let b=[...a.entries()].filter(([,a])=>a.n>1).sort((a,b)=>b[1].n-a[1].n).slice(0,C.length),d=new Map(b.map(([a],b)=>[a,C[b]]));return{of:a=>d.get(F(a.company))||E,legend:[...b.map(([,a],b)=>[a.name,C[b]]),["Other",E]]}}return"warmth"===a&&e?{of:a=>1===(a.degree||1)?D[g(e.merged.get((0,b.keyFor)(a)),e.asOf)]:"#2d3748",legend:[["Warm",D.warm],["Cool",D.cool],["Dormant",D.dormant],["Never messaged",D.never]]}:{of:a=>d[a.tier]||"#666",legend:Object.entries(d)}},"effectiveLab",0,a=>a.on?a:a.labels===j.labels?j:{...j,labels:a.labels},"findMatches",0,function(a,b){let c=String(b||"").trim().toLowerCase();if(c.length<2)return null;let d=new Set;for(let b of a)[b.name,b.company,b.role,b.headline].some(a=>a&&String(a).toLowerCase().includes(c))&&d.add(b.id);return d},"forgetLayout",0,function(a){t(s().filter(b=>b.name!==a))},"labNow",0,o,"layoutsNow",0,s,"loadSocial",0,function(){return z||(z=fetch("/api/social").then(a=>a.ok?a.json():{}).then(a=>{x({social:a.social?A(a.social):null})}).catch(()=>x({social:null}))),z},"mergeSocial",0,A,"milestones",0,function(a){let b=[];for(let c of a?.chapters||[])Number.isFinite(c.from)&&b.push({t:c.from,kind:"job",label:c.company});for(let c of a?.posts||[])Number.isFinite(c.t)&&b.push({t:c.t,kind:"post",label:"You posted"});return b.sort((a,b)=>a.t-b.t)},"pause",0,y,"play",0,function a(){if(null==v.min||null==v.max||v.max<=v.min)return;let b=v.max-v.min,c=1e3*Math.max(1,Number(o().speed)||15),d=null==v.at||v.at>=v.max?v.min:v.at,e=performance.now()-(d-v.min)/b*c;x({at:d,playing:!0});let f=d=>{let g=Math.min(v.max,v.min+(d-e)/c*b);if(x({at:g}),g>=v.max){w=null,x({playing:!1}),o().loop&&setTimeout(()=>{w||v.at!==v.max||(x({at:v.min}),a())},1200);return}w=requestAnimationFrame(f)};cancelAnimationFrame(w),w=requestAnimationFrame(f)},"reachCounts",0,function(a,b){let c=new Map(a.map(a=>[a.id,0]));for(let d of a){let a=b.get(d.id);for(let d=0;null!=a&&d<7;d++)c.set(a,(c.get(a)||0)+1),a=b.get(a)}return c},"saveLayout",0,function(a){let b=String(a||"").trim().slice(0,40);if(!b)return;let c=o(),d=Object.fromEntries(k.map(a=>[a,c[a]]));t([...s().filter(a=>a.name!==b),{name:b,settings:d}])},"setClock",0,x,"setLab",0,p,"stopReplay",0,function(){y(),x({at:null})},"watchClock",0,function(a){return u.add(a),()=>u.delete(a)},"watchLab",0,function(a){m.add(a);let b=b=>{b.key===h&&(n=null,a())};return window.addEventListener("storage",b),()=>{m.delete(a),window.removeEventListener("storage",b)}},"watchLayouts",0,function(a){return r.add(a),()=>r.delete(a)}],1328)},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])},56377,a=>{"use strict";let b=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,c="/avatars/";a.s(["localPhoto",0,function(a){return"string"==typeof a&&a.startsWith(c)&&b.test(a.slice(c.length))?a:null}])},90231,a=>{"use strict";var b=a.i(56377);let c={S:0,A:1,B:2,C:3,D:4};function d(a){let b=parseFloat(a?.power_score);return Number.isFinite(b)?b:0}function e(a){return Math.round(10*d(a))/10}function f(a){return String(a?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${a?.id}`}let g=(a,b)=>String(a??"").localeCompare(String(b??""),void 0,{numeric:!0});function h(a,b){return(c[a.tier]??9)-(c[b.tier]??9)||d(b)-d(a)||String(a.name||"").localeCompare(String(b.name||""))||g(a.id,b.id)}function i(a,b){return a.bridge&&b.bridge?h(a.bridge,b.bridge):a.bridge?-1:b.bridge?1:g(a.id,b.id)}function j(a,b){return b.score-a.score||b.waysIn-a.waysIn||i(a.routes[0]||k,b.routes[0]||k)||String(a.person.name||"").localeCompare(String(b.person.name||""))||(a.key<b.key?-1:+(a.key>b.key))}let k={id:null,bridge:null};function l(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 m(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,h,"compareWaysIn",0,function(a,b){return b.waysIn-a.waysIn||j(a,b)},"keyFor",0,f,"routeIndex",0,function(a=[]){let b=new Map;for(let c of a||[]){let a=f(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(f(a))??(null!=a.source_connection_id?new Set([a.source_connection_id]):new Set)].map(a=>({id:a,bridge:c?.get(a)??null})).sort(i):[]},"score",0,d,"score1",0,e,"separationPeople",0,function(a=[],c=[]){let d=new Map;for(let a of c||[])d.set(a.id,a);let h=new Map,k=new Map;for(let c of a||[]){let a=f(c);k.set(c.id,a);let d=h.get(a);d?function(a,c){let d=e(a)-e(c);if(d)return d>0;let f=!!(0,b.localPhoto)(a.profile_image_url);return!!(0,b.localPhoto)(c.profile_image_url)!==f?f:0>g(a.id,c.id)}(c,d.person)&&(d.person=c):(d={key:a,person:c,rowIds:[],routeIds:new Set},h.set(a,d)),d.rowIds.push(c.id),d.routeIds.add(c.source_connection_id??null)}let l={people:h.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 h.values()){let b=[...a.routeIds].map(a=>({id:a,bridge:d.get(a)??null}));b.sort(i);let c=b.filter(a=>a.bridge);for(let a of b)(a.bridge?m:n).add(a.id);if(!c.length)for(let a of(l.peopleOnlyUnresolved++,b))o.add(a.id);let{person:f}=a,g=f.tier;void 0!==l.byTier[g]&&l.byTier[g]++,b.length>1&&l.multi++,p.push({key:a.key,person:f,score:e(f),tier:g,routes:b,waysIn:b.length,rowIds:a.rowIds,haystack:[f.name,f.headline,f.company,f.role,...c.map(a=>a.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return l.bridges=m.size,l.unresolvedIds=n.size,l.onlyUnresolvedVia=o.size,p.sort(j),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:k,summary:l}},"shortName",0,l,"summitLayout",0,function(a=[],b=800,c=!1){let d=c?36:26,e=Math.round(.42*b),f=Math.round(.58*b),g=a.map((a,c)=>{var e;return{key:a.key,p:a,x:f,y:16+c*d,r:(e=a.waysIn)>=4?8.5:3===e?7:2===e?5.5:4,label:m(`#${a.rank}${a.tied?"=":""} ${a.person.name||""}`,Math.floor((b-f-60)/6.2))}}),i=new Map,j="\0unresolved";for(let a of g)for(let b of a.p.routes){let c=b.bridge?b.id:j,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 k=[...i.values()].map(a=>({...a,bary:a.ys.reduce((a,b)=>a+b,0)/a.ys.length}));k.sort((a,b)=>a.bary-b.bary||a.unresolved-b.unresolved||(a.bridge&&b.bridge?h(a.bridge,b.bridge):0));let n=g.length?g[g.length-1].y:16,o=k.length>1?Math.max(18,(n-16)/(k.length-1)):0,p=Math.max(4,Math.floor((e-10-42)/6));k.forEach((a,b)=>{if(a.x=e,a.y=1===k.length?(16+n)/2:16+b*o,a.r=5,a.unresolved)a.label=m(`can't be named (${a.count})`,p);else{let b=a.bridge.name||"";a.label=b.length<=p?b:m(l(b),p)}delete a.ys});let q=new Map(k.map(a=>[a.unresolved?j:a.id,a])),r=[];for(let a of g){let b=new Set;a.p.routes.forEach((c,d)=>{let e=c.bridge?c.id:j;if(b.has(e))return;b.add(e);let f=q.get(e);r.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 s=Math.max(n,k.length?k[k.length-1].y:0),t=g.length?Math.ceil(s+16):0,u={x:20,y:g.length?(16+Math.max(n,s))/2:16,r:14},v=k.map(a=>({id:a.id,x1:u.x,y1:u.y,x2:a.x,y2:a.y}));return{width:b,height:t,you:u,people:g,bridges:k,links:r,spokes:v}}])}];
2
-
3
- //# sourceMappingURL=_0ezj4e0._.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…"})})}])},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)},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}])},1328,76433,a=>{"use strict";var b=a.i(90231),c=a.i(42510);function d(a){let b=String(a||"").trim();if(!b)return null;let c=b.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2}))?(?:\s*UTC)?$/);if(c)return Date.UTC(+c[1],c[2]-1,+c[3],+c[4],+c[5],+(c[6]||0));if(c=b.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2,4}),?\s+(\d{1,2}):(\d{2})\s*(AM|PM)?$/i)){let a=100>+c[3]?2e3+ +c[3]:+c[3],b=c[4]%12;return"PM"===(c[6]||"").toUpperCase()&&(b+=12),Date.UTC(a,c[1]-1,+c[2],b,+c[5])}if(c=b.match(/^([A-Za-z]{3,9})\s+(\d{4})$/)){let a=Date.parse(`1 ${c[1]} ${c[2]} UTC`);return Number.isNaN(a)?null:a}let d=Date.parse(/\d{4}$/.test(b)?`${b} UTC`:b);return Number.isNaN(d)?null:d}let e=a=>(0,b.keyFor)({profile_url:a});function f(a=[]){let b=new Map;for(let c of a){let a=e(c["sender profile url"]),d=c["conversation id"];d&&a&&(b.has(a)||b.set(a,new Set),b.get(a).add(d))}let c=null;for(let[a,d]of b)(!c||d.size>b.get(c).size)&&(c=a);return c}function g(a,b){if(!a||!a.total)return"never";let c=b-a.last;return c<=2592e6||a.recent>=3?"warm":c<=31536e6?"cool":"dormant"}a.s(["buildConversations",0,function(a=[],{keepText:b=!1}={}){let c=f(a),g=new Map;for(let f of a){let a=e(f["sender profile url"]),h=f["conversation id"];if(!h||!a)continue;let i=d(f.date);if(null==i)continue;g.has(h)||g.set(h,{id:h,title:"",everyone:new Set,messages:[]});let j=g.get(h);j.everyone.add(a),String(f["recipient profile urls"]||"").split(/[,;\s]+/).filter(Boolean).forEach(a=>j.everyone.add(e(a)));let k={t:i,fromMe:a===c};b&&(k.text=[f.subject,f.content].map(a=>String(a||"").trim()).filter(Boolean).join("\n\n"),!j.title&&f["conversation title"]&&(j.title=String(f["conversation title"]).trim())),j.messages.push(k)}let h=[];for(let a of g.values()){if(!a.everyone.has(c))continue;let d=[...a.everyone].filter(a=>a&&a!==c).sort();if(!d.length)continue;a.messages.sort((a,b)=>a.t-b.t);let e={id:a.id,people:d,group:d.length>1,messages:a.messages};b&&(e.title=a.title),h.push(e)}return{self:c,conversations:h}},"careerChapters",0,function(a=[],b=[],c=Date.now()){let f=a.map(a=>({company:a["company name"]||"",title:a.title||"",from:d(a["started on"]),to:d(a["finished on"])})).filter(a=>a.company&&null!=a.from).sort((a,b)=>a.from-b.from),g=b.map(a=>({url:e(a.url||a.profile_url),t:d(a["connected on"]||a.connected_on)})).filter(a=>null!=a.t);return f.map(a=>{let b=a.to??c,d=g.filter(c=>c.t>=a.from&&c.t<b);return{...a,to:a.to,made:d.length,people:d.map(a=>a.url)}})},"conversationSummary",0,function(a){let b=a.messages[a.messages.length-1];return{id:a.id,people:a.people,group:a.group,last:b?b.t:null,lastFromThem:b?!b.fromMe:null,count:a.messages.length}},"invitationSplit",0,function(a=[]){let b=0,c=0;for(let d of a){let a=String(d.direction||"").toUpperCase();"INCOMING"===a?b+=1:"OUTGOING"===a&&(c+=1)}return{incoming:b,outgoing:c,total:b+c}},"messageStats",0,function(a=[]){let b=f(a),c=new Map;for(let b of a){let a=e(b["sender profile url"]),f=b["conversation id"];if(!f||!a)continue;let g=String(b["recipient profile urls"]||"").split(/[,;\s]+/).filter(Boolean).map(e),h=d(b.date);if(null==h)continue;c.has(f)||c.set(f,{people:new Set,msgs:[]});let i=c.get(f);i.people.add(a),g.forEach(a=>i.people.add(a)),i.msgs.push({from:a,t:h})}let g=0,h=new Map;for(let a of c.values()){let c=[...a.people].filter(a=>a!==b);if(1!==c.length||!a.people.has(b))continue;let d=c[0],e=h.get(d)||{last:0,lastFromThem:!1,total:0,times:[]};for(let c of a.msgs)e.total+=1,e.times.push(c.t),c.t>=e.last&&(e.last=c.t,e.lastFromThem=c.from!==b),c.t>g&&(g=c.t);h.set(d,e)}for(let a of h.values())a.recent=a.times.filter(a=>a>g-7776e6).length,delete a.times;return{self:b,asOf:g||null,people:h}},"postingEffect",0,function(a=[],b=[]){let c=a.map(a=>({t:d(a.date),link:a.sharelink||a["share link"]||""})).filter(a=>null!=a.t).sort((a,b)=>a.t-b.t),e=b.map(a=>d(a["connected on"]||a.connected_on)).filter(a=>null!=a).sort((a,b)=>a-b);if(!e.length)return{posts:[],usualWeek:0,afterPosts:0};let f=Math.max(6048e5,e[e.length-1]-e[0]),g=e.length/f*6048e5,h=c.map(a=>({...a,week:e.filter(b=>b>=a.t&&b<a.t+6048e5).length})),i=h.length?h.reduce((a,b)=>a+b.week,0)/h.length:0;return{posts:h,usualWeek:g,afterPosts:i}},"readTable",0,function(a,b){let d=(0,c.parseCsv)(String(a||"")),e=d.findIndex(a=>a.some(a=>a.trim().toLowerCase()===b.toLowerCase()));if(e<0)return[];let f=d[e].map(a=>a.trim().toLowerCase());return d.slice(e+1).filter(a=>a.some(a=>a.trim())).map(a=>Object.fromEntries(f.map((b,c)=>[b,(a[c]??"").trim()])))},"repliesWaiting",0,function(a){let b=[];for(let[c,d]of a.people){let e=a.asOf-d.last;d.lastFromThem&&e>=2592e5&&e<=2592e6&&b.push({url:c,days:Math.round(e/864e5),total:d.total})}return b.sort((a,b)=>a.days-b.days)},"sortConversations",0,function(a=[],b=()=>null){let c=a=>a.group||!0!==a.lastFromThem?1:0,d=a=>({S:0,A:1})[b(a)]??2;return[...a].sort((a,b)=>c(a)-c(b)||d(a)-d(b)||(b.last||0)-(a.last||0))},"warmthOf",0,g],76433);let h="six-degrees-galaxy-lab",i="six-degrees-galaxy-layouts",j=Object.freeze({on:!1,gravity:0,rings:1,push:15,pull:1,distance:1,dotSize:1,lines:1,sizeBy:"power",names:"key",branch:!0,colourBy:"tier",speed:15,loop:!1,labels:!0}),k=["gravity","rings","push","pull","distance","dotSize","lines","sizeBy","names","branch","colourBy","speed","loop"],l=Object.freeze({gravity:.25,rings:0,push:25,pull:2.5,distance:.35,sizeBy:"reach"}),m=new Set,n=null;function o(){return n||(n=function(){try{let a=JSON.parse(localStorage.getItem(h)||"null");return a&&"object"==typeof a?{...j,...a}:j}catch{return j}}()),n}function p(a){n=null===a?{...j,on:o().on,labels:o().labels}:{...o(),...a};try{localStorage.setItem(h,JSON.stringify(n))}catch{}m.forEach(a=>a())}let q=null,r=new Set;function s(){if(!q){try{q=JSON.parse(localStorage.getItem(i)||"[]")}catch{q=[]}Array.isArray(q)||(q=[])}return q}function t(a){q=a;try{localStorage.setItem(i,JSON.stringify(a))}catch{}r.forEach(a=>a())}let u=new Set,v={at:null,playing:!1,min:null,max:null,of:0,find:"",fly:0,found:0,social:void 0},w=null;function x(a){let b={...v,...a};Object.keys(a).every(a=>Object.is(b[a],v[a]))||(v=b,u.forEach(a=>a()))}function y(){cancelAnimationFrame(w),w=null,x({playing:!1})}let z=null;function A(a){let c=new Map;for(let[d,e]of Object.entries(a?.people||{}))c.set((0,b.keyFor)({profile_url:d}),{...e});for(let[d,e]of Object.entries(a?.live||{})){let a=(0,b.keyFor)({profile_url:d}),f=c.get(a)||{total:0,recent:0};e.last&&(!f.last||e.last>f.last)&&(f.last=e.last,"boolean"==typeof e.lastFromThem&&(f.lastFromThem=e.lastFromThem)),f.unread=e.unread,f.total=Math.max(f.total||0,1),c.set(a,f)}let d=Math.max(a?.asOf||0,a?.liveAt&&Date.parse(a.liveAt)||0);for(let a of c.values())(a.last||0)>d&&(d=a.last);return{merged:c,asOf:d,chapters:a?.chapters||[],posts:a?.posts?.posts||[]}}let B={1:"#4FC3F7",2:"#BA68C8",3:"#FFB74D"},C=["#FF6B6B","#4ECDC4","#FFD93D","#A29BFE","#00B894","#FD79A8","#74B9FF","#E17055"],D={warm:"#FF7043",cool:"#4FC3F7",dormant:"#8D6E63",never:"#546E7A"},E="#4a5568",F=a=>String(a||"").trim().toLowerCase();a.s(["CLUSTERS",0,l,"LAB_DEFAULTS",0,j,"applyLayout",0,function(a){let b=s().find(b=>b.name===a);b&&p(Object.fromEntries(k.filter(a=>a in b.settings).map(a=>[a,b.settings[a]])))},"bornTimes",0,function(a,b){let c=new Map(a.map(a=>[a.id,a])),d=new Map,e=(a,f=0)=>{if(d.has(a.id))return d.get(a.id);let g=-1/0,h=b.get(a.id);if(1===a.degree||null==h||f>6){let b=a.connected_date?Date.parse(a.connected_date):NaN;g=Number.isNaN(b)?-1/0:b}return null!=h&&c.has(h)&&f<=6&&(g=Math.max(g,e(c.get(h),f+1))),d.set(a.id,g),g};return a.map(a=>e(a))},"chapterAt",0,function(a,b){let c=null;for(let d of a?.chapters||[])Number.isFinite(d.from)&&d.from<=b&&(!c||d.from>c.from)&&(c=d);return c&&(!Number.isFinite(c.to)||c.to>b)?c:null},"clockNow",0,()=>v,"colourScheme",0,function(a,c,d,e){if("degree"===a)return{of:a=>B[Math.min(a.degree||1,3)],legend:[["1st",B[1]],["2nd",B[2]],["3rd+",B[3]]]};if("company"===a){let a=new Map;for(let b of c){let c=F(b.company);if(!c)continue;let d=a.get(c)||{name:String(b.company).trim(),n:0};d.n+=1,a.set(c,d)}let b=[...a.entries()].filter(([,a])=>a.n>1).sort((a,b)=>b[1].n-a[1].n).slice(0,C.length),d=new Map(b.map(([a],b)=>[a,C[b]]));return{of:a=>d.get(F(a.company))||E,legend:[...b.map(([,a],b)=>[a.name,C[b]]),["Other",E]]}}return"warmth"===a&&e?{of:a=>1===(a.degree||1)?D[g(e.merged.get((0,b.keyFor)(a)),e.asOf)]:"#2d3748",legend:[["Warm",D.warm],["Cool",D.cool],["Dormant",D.dormant],["Never messaged",D.never]]}:{of:a=>d[a.tier]||"#666",legend:Object.entries(d)}},"effectiveLab",0,a=>a.on?a:a.labels===j.labels?j:{...j,labels:a.labels},"findMatches",0,function(a,b){let c=String(b||"").trim().toLowerCase();if(c.length<2)return null;let d=new Set;for(let b of a)[b.name,b.company,b.role,b.headline].some(a=>a&&String(a).toLowerCase().includes(c))&&d.add(b.id);return d},"forgetLayout",0,function(a){t(s().filter(b=>b.name!==a))},"labNow",0,o,"layoutsNow",0,s,"loadSocial",0,function(){return z||(z=fetch("/api/social").then(a=>a.ok?a.json():{}).then(a=>{x({social:a.social?A(a.social):null})}).catch(()=>x({social:null}))),z},"mergeSocial",0,A,"milestones",0,function(a){let b=[];for(let c of a?.chapters||[])Number.isFinite(c.from)&&b.push({t:c.from,kind:"job",label:c.company});for(let c of a?.posts||[])Number.isFinite(c.t)&&b.push({t:c.t,kind:"post",label:"You posted"});return b.sort((a,b)=>a.t-b.t)},"pause",0,y,"play",0,function a(){if(null==v.min||null==v.max||v.max<=v.min)return;let b=v.max-v.min,c=1e3*Math.max(1,Number(o().speed)||15),d=null==v.at||v.at>=v.max?v.min:v.at,e=performance.now()-(d-v.min)/b*c;x({at:d,playing:!0});let f=d=>{let g=Math.min(v.max,v.min+(d-e)/c*b);if(x({at:g}),g>=v.max){w=null,x({playing:!1}),o().loop&&setTimeout(()=>{w||v.at!==v.max||(x({at:v.min}),a())},1200);return}w=requestAnimationFrame(f)};cancelAnimationFrame(w),w=requestAnimationFrame(f)},"reachCounts",0,function(a,b){let c=new Map(a.map(a=>[a.id,0]));for(let d of a){let a=b.get(d.id);for(let d=0;null!=a&&d<7;d++)c.set(a,(c.get(a)||0)+1),a=b.get(a)}return c},"saveLayout",0,function(a){let b=String(a||"").trim().slice(0,40);if(!b)return;let c=o(),d=Object.fromEntries(k.map(a=>[a,c[a]]));t([...s().filter(a=>a.name!==b),{name:b,settings:d}])},"setClock",0,x,"setLab",0,p,"stopReplay",0,function(){y(),x({at:null})},"watchClock",0,function(a){return u.add(a),()=>u.delete(a)},"watchLab",0,function(a){m.add(a);let b=b=>{b.key===h&&(n=null,a())};return window.addEventListener("storage",b),()=>{m.delete(a),window.removeEventListener("storage",b)}},"watchLayouts",0,function(a){return r.add(a),()=>r.delete(a)}],1328)},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])},56377,a=>{"use strict";let b=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,c="/avatars/";a.s(["localPhoto",0,function(a){return"string"==typeof a&&a.startsWith(c)&&b.test(a.slice(c.length))?a:null}])},91443,a=>{"use strict";var b=a.i(90231);function c(a,c){return a?c.scanned.has(a.id)||a.profile_url&&c.read?.has((0,b.keyFor)(a))?"scanned":a.profile_url&&c.hidden.has((0,b.keyFor)(a))?"hidden":"todo":"todo"}function d(a,b){if(!a||1!==a.degree||null==a.unlocked_from_bridge_id)return null;let d=c(a,b);return"todo"===d?"ready":d}a.s(["circleScanCost",0,function(a=100){let b=Math.max(1,Math.min(100,Math.round(a)||100));return{profileViews:1,searches:b,minutes:b>=100?55:Math.max(5,Math.round(.55*b))}},"circleState",0,c,"reachIndex",0,function(a=[],c=[],d={}){let e=new Set;for(let a of c||[])a?.source_connection_id!=null&&e.add(a.source_connection_id);let f=new Set;for(let a of d?.skips||[])a?.profileUrl&&f.add((0,b.keyFor)({profile_url:a.profileUrl}));let g=new Set;for(let a of d?.read||[])a&&g.add((0,b.keyFor)({profile_url:a}));let h=new Map;for(let[a,c]of Object.entries(d?.lists||{}))a&&c&&h.set((0,b.keyFor)({profile_url:a}),c);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:e,read:g,hidden:f,reachedFrom:i,lists:h}},"reachState",0,d,"readyByCircle",0,function(a){let b=new Map;for(let[c,e]of a.reachedFrom){let f=e.filter(b=>"ready"===d(b,a)).length;f&&b.set(c,f)}return b},"readyToScan",0,function(a,c){return(a||[]).filter(a=>"ready"===d(a,c)).sort(b.compareBridges)},"scanBars",0,function(a,d){let e=c(a,d),f=a?.profile_url?d.lists?.get((0,b.keyFor)(a)):null;return"hidden"===e?null:f?f.more?f.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*f.pages/f.total)))):2:5:"scanned"===e?2:null}])},90231,a=>{"use strict";var b=a.i(56377);let c={S:0,A:1,B:2,C:3,D:4};function d(a){let b=parseFloat(a?.power_score);return Number.isFinite(b)?b:0}function e(a){return Math.round(10*d(a))/10}function f(a){return String(a?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${a?.id}`}let g=(a,b)=>String(a??"").localeCompare(String(b??""),void 0,{numeric:!0});function h(a,b){return(c[a.tier]??9)-(c[b.tier]??9)||d(b)-d(a)||String(a.name||"").localeCompare(String(b.name||""))||g(a.id,b.id)}function i(a,b){return a.bridge&&b.bridge?h(a.bridge,b.bridge):a.bridge?-1:b.bridge?1:g(a.id,b.id)}function j(a,b){return b.score-a.score||b.waysIn-a.waysIn||i(a.routes[0]||k,b.routes[0]||k)||String(a.person.name||"").localeCompare(String(b.person.name||""))||(a.key<b.key?-1:+(a.key>b.key))}let k={id:null,bridge:null};function l(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 m(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,h,"compareWaysIn",0,function(a,b){return b.waysIn-a.waysIn||j(a,b)},"keyFor",0,f,"routeIndex",0,function(a=[]){let b=new Map;for(let c of a||[]){let a=f(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(f(a))??(null!=a.source_connection_id?new Set([a.source_connection_id]):new Set)].map(a=>({id:a,bridge:c?.get(a)??null})).sort(i):[]},"score",0,d,"score1",0,e,"separationPeople",0,function(a=[],c=[]){let d=new Map;for(let a of c||[])d.set(a.id,a);let h=new Map,k=new Map;for(let c of a||[]){let a=f(c);k.set(c.id,a);let d=h.get(a);d?function(a,c){let d=e(a)-e(c);if(d)return d>0;let f=!!(0,b.localPhoto)(a.profile_image_url);return!!(0,b.localPhoto)(c.profile_image_url)!==f?f:0>g(a.id,c.id)}(c,d.person)&&(d.person=c):(d={key:a,person:c,rowIds:[],routeIds:new Set},h.set(a,d)),d.rowIds.push(c.id),d.routeIds.add(c.source_connection_id??null)}let l={people:h.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 h.values()){let b=[...a.routeIds].map(a=>({id:a,bridge:d.get(a)??null}));b.sort(i);let c=b.filter(a=>a.bridge);for(let a of b)(a.bridge?m:n).add(a.id);if(!c.length)for(let a of(l.peopleOnlyUnresolved++,b))o.add(a.id);let{person:f}=a,g=f.tier;void 0!==l.byTier[g]&&l.byTier[g]++,b.length>1&&l.multi++,p.push({key:a.key,person:f,score:e(f),tier:g,routes:b,waysIn:b.length,rowIds:a.rowIds,haystack:[f.name,f.headline,f.company,f.role,...c.map(a=>a.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return l.bridges=m.size,l.unresolvedIds=n.size,l.onlyUnresolvedVia=o.size,p.sort(j),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:k,summary:l}},"shortName",0,l,"summitLayout",0,function(a=[],b=800,c=!1){let d=c?36:26,e=Math.round(.42*b),f=Math.round(.58*b),g=a.map((a,c)=>{var e;return{key:a.key,p:a,x:f,y:16+c*d,r:(e=a.waysIn)>=4?8.5:3===e?7:2===e?5.5:4,label:m(`#${a.rank}${a.tied?"=":""} ${a.person.name||""}`,Math.floor((b-f-60)/6.2))}}),i=new Map,j="\0unresolved";for(let a of g)for(let b of a.p.routes){let c=b.bridge?b.id:j,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 k=[...i.values()].map(a=>({...a,bary:a.ys.reduce((a,b)=>a+b,0)/a.ys.length}));k.sort((a,b)=>a.bary-b.bary||a.unresolved-b.unresolved||(a.bridge&&b.bridge?h(a.bridge,b.bridge):0));let n=g.length?g[g.length-1].y:16,o=k.length>1?Math.max(18,(n-16)/(k.length-1)):0,p=Math.max(4,Math.floor((e-10-42)/6));k.forEach((a,b)=>{if(a.x=e,a.y=1===k.length?(16+n)/2:16+b*o,a.r=5,a.unresolved)a.label=m(`can't be named (${a.count})`,p);else{let b=a.bridge.name||"";a.label=b.length<=p?b:m(l(b),p)}delete a.ys});let q=new Map(k.map(a=>[a.unresolved?j:a.id,a])),r=[];for(let a of g){let b=new Set;a.p.routes.forEach((c,d)=>{let e=c.bridge?c.id:j;if(b.has(e))return;b.add(e);let f=q.get(e);r.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 s=Math.max(n,k.length?k[k.length-1].y:0),t=g.length?Math.ceil(s+16):0,u={x:20,y:g.length?(16+Math.max(n,s))/2:16,r:14},v=k.map(a=>({id:a.id,x1:u.x,y1:u.y,x2:a.x,y2:a.y}));return{width:b,height:t,you:u,people:g,bridges:k,links:r,spokes:v}}])},76939,a=>{"use strict";a.s(["TIER_COLORS",0,{S:"#f6c344",A:"#a78bfa",B:"#60a5fa",C:"#94a3b8",D:"#6b7280"},"TIER_COLORS_CLASSIC",0,{S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},"TIER_ORDER",0,["S","A","B","C","D"],"TIER_RING_RADIUS",0,{S:150,A:230,B:310,C:390,D:470},"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=_1errbuf._.js.map
@@ -1,3 +0,0 @@
1
- module.exports=[16874,a=>{"use strict";var b=a.i(87924);let c="1px solid rgba(255,255,255,0.1)";function d({children:a,style:c}){return(0,b.jsx)("div",{style:{fontSize:13.5,color:"#8b9a9a",lineHeight:1.6,marginTop:4,...c},children:a})}a.s(["Body",0,d,"Btn",0,function({children:a,onClick:d,disabled:e,primary:f,tone:g,type:h="button"}){return(0,b.jsx)("button",{type:h,onClick:d,disabled:e,style:{padding:"9px 18px",borderRadius:7,fontSize:13.5,fontWeight:650,color:e?"#667":"#fff",border:c,background:e?"rgba(255,255,255,0.05)":"bad"===g?"rgba(255,80,80,0.15)":f?"linear-gradient(135deg, #9B59B6, #3498DB)":"rgba(255,255,255,0.08)",cursor:e?"not-allowed":"pointer"},children:a})},"FONT",0,'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',"LINE",0,c,"Mono",0,function({children:a}){return(0,b.jsx)("code",{style:{background:"rgba(255,255,255,0.08)",padding:"1px 5px",borderRadius:4,wordBreak:"break-all"},children:a})},"Section",0,function({id:a,title:e,intro:f,children:g}){return(0,b.jsxs)("section",{id:a,style:{padding:"24px 0",borderBottom:c,scrollMarginTop:16},children:[(0,b.jsx)("h2",{style:{fontSize:16,fontWeight:650,margin:"0 0 6px"},children:e}),f&&(0,b.jsx)(d,{style:{marginTop:0,marginBottom:12},children:f}),g]})},"Status",0,function({children:a,tone:c}){return(0,b.jsxs)("div",{role:"status",style:{marginTop:10,padding:"10px 14px",borderRadius:8,fontSize:13.5,lineHeight:1.6,color:"ok"===c?"#00ff88":"bad"===c?"#ff7676":"#e8e8ee",background:"ok"===c?"rgba(0,255,136,0.08)":"bad"===c?"rgba(255,80,80,0.08)":"rgba(255,255,255,0.05)",border:`1px solid ${"ok"===c?"rgba(0,255,136,0.3)":"bad"===c?"rgba(255,80,80,0.3)":"rgba(255,255,255,0.12)"}`},children:["ok"===c&&"✓ ",a]})}])}];
2
-
3
- //# sourceMappingURL=app_components_ui_0pdmz2z.js.map
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),n=e.i(15812);e.s(["default",0,function({children:e}){let{userId:r,ready:i}=(0,n.useUser)();return i&&r?e:(0,t.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:i?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.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,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},99201,e=>{"use strict";var t=e.i(43476),n=e.i(71645),r=e.i(19821),i=e.i(5258),o=e.i(48235);let l={height:10,borderRadius:6},s={background:"rgba(52,152,219,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(52,152,219,0.2)"};function a({degree1:e=[],degree2:n=[],skips:r=[]}){let c=function(e=[],t=[],n=[]){let r=(0,o.reachIndex)(e,t,{skips:n}),i=e=>{let t=(0,o.circleState)(e,r);return"scanned"===t?"mapped":t},l={mapped:0,hidden:0,todo:0},s={};for(let t of e){let e=i(t);l[e]+=1;let n=t.tier||"D";s[n]=s[n]||{mapped:0,hidden:0,todo:0,total:0},s[n][e]+=1,s[n].total+=1}let a=e.length,d=l.mapped+l.hidden;return{...l,total:a,resolved:d,percent:a?Math.round(d/a*100):0,batches:Math.ceil(l.todo/25),byTier:s}}(e,n,r);if(!c.total)return null;let u=e=>c.total?e/c.total*100:0,g=0===c.todo;return(0,t.jsxs)("div",{style:s,children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:10},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"#3498DB"},children:"2nd-degree mapping"}),(0,t.jsx)("span",{style:{fontSize:12,color:g?"#00ff88":"#8b9a9a",fontWeight:600},children:g?"Everything reachable is mapped":`${c.percent}%`})]}),(0,t.jsxs)("div",{style:{...l,display:"flex",overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:[(0,t.jsx)("div",{style:{width:`${u(c.mapped)}%`,background:"#00ff88"}}),(0,t.jsx)("div",{style:{width:`${u(c.hidden)}%`,background:"rgba(255,255,255,0.22)"}})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:16,marginTop:10,fontSize:12,flexWrap:"wrap"},children:[(0,t.jsx)(d,{color:"#00ff88",label:"mapped",value:c.mapped}),(0,t.jsx)(d,{color:"rgba(255,255,255,0.35)",label:"hidden",value:c.hidden}),(0,t.jsx)(d,{color:"rgba(255,255,255,0.12)",label:"to go",value:c.todo}),(0,t.jsxs)("span",{style:{color:"#667",marginLeft:"auto"},children:["of ",c.total]})]}),c.hidden>0&&(0,t.jsx)("p",{style:{fontSize:11.5,color:"#667",margin:"10px 0 0",lineHeight:1.6},children:"Hidden means they keep their connections private — that will not change, and it does not count against you."}),!g&&(0,t.jsxs)("p",{style:{fontSize:11.5,color:"#8b9a9a",margin:"10px 0 0",lineHeight:1.6},children:[c.todo," left — about ",(0,t.jsxs)("b",{children:[c.batches," ",1===c.batches?"batch":"batches"]})," of ",25,". Run one, leave it a while, run another. Long unbroken runs are what gets an account restricted."]}),(0,t.jsx)("div",{style:{marginTop:16,display:"flex",flexDirection:"column",gap:7},children:["S","A","B","C","D"].filter(e=>c.byTier[e]?.total).map(e=>{let n=c.byTier[e];return(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,fontSize:11},children:[(0,t.jsx)("span",{style:{width:14,color:i.TIER_COLORS_CLASSIC[e],fontWeight:700},children:e}),(0,t.jsxs)("div",{style:{flex:1,height:5,borderRadius:3,display:"flex",overflow:"hidden",background:"rgba(255,255,255,0.06)"},children:[(0,t.jsx)("div",{style:{width:`${n.mapped/n.total*100}%`,background:i.TIER_COLORS_CLASSIC[e]}}),(0,t.jsx)("div",{style:{width:`${n.hidden/n.total*100}%`,background:"rgba(255,255,255,0.22)"}})]}),(0,t.jsxs)("span",{style:{color:"#667",width:62,textAlign:"right"},children:[n.mapped,"/",n.total]})]},e)})})]})}function d({color:e,label:n,value:r}){return(0,t.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:6,color:"#8b9a9a"},children:[(0,t.jsx)("span",{style:{width:8,height:8,borderRadius:2,background:e}}),(0,t.jsx)("b",{style:{color:"#e2e8f0"},children:r})," ",n]})}var c=e.i(64745),u=e.i(2776),g=e.i(15812),h=e.i(69083),f=e.i(22016);let p={1:"Observer",11:"Connector",31:"Networker",51:"Strategist",76:"Architect"};function y(){let{userId:e,userName:i,userProfile:o}=(0,g.useUser)(),l=o||{name:i||"User",headline:"",sectors:[],goals:[]},[s,d]=(0,n.useState)(null),[u,y]=(0,n.useState)(!0),[b,x]=(0,n.useState)([]),[v,S]=(0,n.useState)({total:0,sent:0,accepted:0}),[j,k]=(0,n.useState)({degree1:[],degree2:[],skips:[]}),[w,C]=(0,n.useState)(null);if((0,n.useEffect)(()=>{!c.IS_DEMO&&e&&t();async function t(){fetch("/api/settings").then(e=>e.json().then(t=>e.ok&&t.settings?t:Promise.reject(Error(t.error)))).then(e=>C(e.settings.sectorFocus||{sectors:[],strength:"lean"})).catch(()=>C({failed:!0}));let t=await (0,r.loadNetwork)(e),n=t.degree1,i=t.degree2,o={S:0,A:0,B:0,C:0,D:0};n.forEach(e=>{o[e.tier]=(o[e.tier]||0)+1});let l={S:0,A:0,B:0,C:0,D:0};i.forEach(e=>{l[e.tier]=(l[e.tier]||0)+1});let s=[...new Set(i.map(e=>e.source_connection_id).filter(Boolean))].length,a=n.filter(e=>e.is_catalyst).length,c={};n.forEach(e=>{e.company&&(c[e.company]=(c[e.company]||0)+1)});let u=Object.entries(c).sort((e,t)=>t[1]-e[1]).slice(0,10),g=100*o.S+40*o.A+15*o.B+5*o.C+ +o.D+200*s+150*a+50*l.S+n.length,h=Math.floor(Math.sqrt(g/10)),f=h*h*10,p=(h+1)*(h+1)*10;d({d1Count:n.length,d2Count:i.length,tiers:o,d2Tiers:l,clusters:s,catalysts:a,networkPower:g,level:h,xpProgress:(g-f)/(p-f)*100,topCompanies:u,unlockedPaths:0}),fetch("/api/scraper").then(e=>e.json()).then(e=>k({degree1:n,degree2:i,skips:e.skips||[]})).catch(()=>k({degree1:n,degree2:i,skips:[]})),fetch(`/api/notifications?userId=${e}`).then(e=>e.json()).then(e=>x(e.notifications||[])).catch(()=>{}),fetch("/api/queue").then(e=>e.json()).then(e=>{let t=e.items||[];S({total:t.length,sent:t.filter(e=>"sent"===e.status).length,accepted:t.filter(e=>"accepted"===e.status).length})}).catch(()=>{}),y(!1)}},[e]),c.IS_DEMO)return(0,t.jsxs)("div",{style:{minHeight:"100vh",background:"#0a0a1a",color:"rgba(255,255,255,0.7)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:12,textAlign:"center",padding:24,fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'},children:[(0,t.jsx)("h2",{style:{margin:0,fontSize:20,fontWeight:700,color:"#fff"},children:"Not part of the demo"}),(0,t.jsx)("p",{style:{margin:0,fontSize:13},children:"The public demo includes the Network Circle and Degrees views only."}),(0,t.jsx)(f.default,{href:"/",style:{fontSize:12,color:"rgba(255,255,255,0.5)",textDecoration:"none"},children:"← Back to the network"})]});if(u)return(0,t.jsx)("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:"#0a0a1a",color:"#fff"},children:"Loading profile..."});let B={S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},I=[{label:"First S-Tier",done:s.tiers.S>0,icon:"👑"},{label:"100 Connections",done:s.d1Count>=100,icon:"🔗"},{label:"500 Connections",done:s.d1Count>=500,icon:"🌐"},{label:"First Cluster",done:s.clusters>0,icon:"🔭"},{label:"10 Clusters",done:s.clusters>=10,icon:"🏰"},{label:"50 S-Tier",done:s.tiers.S>=50,icon:"💎"},{label:"Catalyst Found",done:s.catalysts>0,icon:"⚡"},{label:"Level 25",done:s.level>=25,icon:"🎯"},{label:"Level 50",done:s.level>=50,icon:"🚀"},{label:"D2 S-Tier > 50",done:s.d2Tiers.S>=50,icon:"🌟"}];return(0,t.jsxs)("div",{style:{height:"100vh",background:"#0a0a1a",color:"#fff",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,t.jsxs)("header",{style:{padding:"16px 24px",borderBottom:"1px solid rgba(255,255,255,0.1)",display:"flex",alignItems:"center",gap:16},children:[(0,t.jsxs)(f.default,{href:"/",style:{display:"flex",alignItems:"center",gap:6,color:"#888",textDecoration:"none",fontSize:13,fontWeight:600,padding:"6px 14px",borderRadius:6,background:"rgba(255,255,255,0.06)",border:"1px solid rgba(255,255,255,0.1)"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:"←"})," Back to Map"]}),(0,t.jsx)("h1",{style:{fontSize:22,fontWeight:700,margin:0,background:"linear-gradient(135deg, #FFD700, #9B59B6, #3498DB)",WebkitBackgroundClip:"text",WebkitTextFillColor:"transparent"},children:"Profile"})]}),(0,t.jsx)("div",{id:"scan-bar-slot"}),(0,t.jsx)("div",{style:{flex:1,overflow:"auto",padding:"30px 20px"},children:(0,t.jsxs)("div",{style:{maxWidth:700,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.05)",borderRadius:16,padding:32,marginBottom:24,border:"1px solid rgba(255,215,0,0.2)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{width:100,height:100,borderRadius:"50%",margin:"0 auto 16px",background:"linear-gradient(135deg, #FFD700, #FF6B35)",display:"flex",alignItems:"center",justifyContent:"center",fontSize:36,fontWeight:800,color:"#000",boxShadow:"0 0 30px rgba(255,215,0,0.3)"},children:s.level}),(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,marginBottom:4},children:l.name}),(0,t.jsx)("div",{style:{fontSize:14,color:"#888",marginBottom:4},children:l.headline}),(0,t.jsx)("div",{style:{display:"inline-block",padding:"4px 16px",borderRadius:20,background:"rgba(255,215,0,0.15)",border:"1px solid rgba(255,215,0,0.3)",color:"#FFD700",fontSize:13,fontWeight:700,marginBottom:16},children:function(e){let t="Observer";for(let[n,r]of Object.entries(p))e>=parseInt(n)&&(t=r);return t}(s.level)}),(0,t.jsxs)("div",{style:{maxWidth:300,margin:"0 auto"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:10,color:"#666",marginBottom:4},children:[(0,t.jsxs)("span",{children:["Level ",s.level]}),(0,t.jsxs)("span",{children:["Level ",s.level+1]})]}),(0,t.jsx)("div",{style:{height:8,background:"rgba(255,255,255,0.1)",borderRadius:4},children:(0,t.jsx)("div",{style:{height:"100%",width:`${Math.min(s.xpProgress,100)}%`,background:"linear-gradient(90deg, #FFD700, #FF6B35)",borderRadius:4,transition:"width 1s ease"}})}),(0,t.jsxs)("div",{style:{fontSize:10,color:"#888",marginTop:4},children:["Network Power: ",s.networkPower.toLocaleString()]})]})]}),(0,t.jsx)(a,{degree1:j.degree1,degree2:j.degree2,skips:j.skips}),(0,t.jsxs)("div",{style:{background:"rgba(255,107,53,0.06)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,107,53,0.2)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0,color:"#FF6B35"},children:"Queue Progress"}),(0,t.jsx)(f.default,{href:"/queue",style:{fontSize:11,color:"#FF6B35",textDecoration:"none",fontWeight:600},children:"View Queue →"})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#FFA500"},children:v.total}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"In Queue"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#3498DB"},children:v.sent}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"Sent"})]}),(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:"#00ff88"},children:v.accepted}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888"},children:"Accepted"})]})]})]}),b.length>0&&(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Recent Activity (",b.filter(e=>!e.seen).length," new)"]}),(0,t.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6,maxHeight:200,overflowY:"auto"},children:b.slice(0,10).map(e=>(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center",padding:"6px 8px",borderRadius:6,background:e.seen?"transparent":"rgba(255,215,0,0.05)",borderLeft:e.seen?"none":"2px solid #FFD700"},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.icon||"📌"}),(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("div",{style:{fontSize:12,fontWeight:600,color:e.seen?"#888":"#fff"},children:e.title}),e.message&&(0,t.jsx)("div",{style:{fontSize:10,color:"#666"},children:e.message})]}),(0,t.jsx)("span",{style:{fontSize:9,color:"#555",flexShrink:0},children:new Date(e.created_at).toLocaleDateString()})]},e.id))})]}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:12,marginBottom:24},children:[(0,t.jsx)(m,{label:"Connections",value:s.d1Count}),(0,t.jsx)(m,{label:"Degree-2 Reach",value:s.d2Count}),(0,t.jsx)(m,{label:"Clusters",value:s.clusters}),(0,t.jsx)(m,{label:"S-Tier",value:s.tiers.S,color:"#FFD700"}),(0,t.jsx)(m,{label:"A-Tier",value:s.tiers.A,color:"#9B59B6"}),(0,t.jsx)(m,{label:"Catalysts",value:s.catalysts,color:"#00ff88"})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Tier Distribution"}),["S","A","B","C","D"].map(e=>{let n=s.tiers[e]||0,r=s.d1Count>0?n/s.d1Count*100:0;return(0,t.jsxs)("div",{style:{marginBottom:8},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",fontSize:11,marginBottom:2},children:[(0,t.jsxs)("span",{style:{color:B[e],fontWeight:600},children:[e,"-Tier"]}),(0,t.jsxs)("span",{style:{color:"#888"},children:[n," (",r.toFixed(1),"%)"]})]}),(0,t.jsx)("div",{style:{height:6,background:"rgba(255,255,255,0.08)",borderRadius:3},children:(0,t.jsx)("div",{style:{height:"100%",width:`${r}%`,background:B[e],borderRadius:3}})})]},e)})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Degree-2 Reach"}),(0,t.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"#FF6B35"},children:s.d2Count}),(0,t.jsx)("div",{style:{fontSize:11,color:"#888"},children:"People reachable via bridges"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:24,fontWeight:700,color:"#FFD700"},children:s.d2Tiers.S}),(0,t.jsx)("div",{style:{fontSize:11,color:"#888"},children:"S-Tier degree-2"})]})]})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:["Milestones (",I.filter(e=>e.done).length,"/",I.length,")"]}),(0,t.jsx)("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:8},children:I.map((e,n)=>(0,t.jsxs)("div",{style:{padding:"8px 10px",borderRadius:8,fontSize:12,background:e.done?"rgba(255,215,0,0.08)":"rgba(255,255,255,0.02)",border:`1px solid ${e.done?"rgba(255,215,0,0.2)":"rgba(255,255,255,0.05)"}`,color:e.done?"#FFD700":"#555",display:"flex",alignItems:"center",gap:6},children:[(0,t.jsx)("span",{style:{fontSize:16},children:e.done?e.icon:"🔒"}),(0,t.jsx)("span",{style:{fontWeight:e.done?600:400},children:e.label})]},n))})]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,marginBottom:24,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,marginTop:0,marginBottom:12},children:"Top Companies in Your Network"}),s.topCompanies.map(([e,n],r)=>(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",padding:"4px 0",borderBottom:r<s.topCompanies.length-1?"1px solid rgba(255,255,255,0.04)":"none",fontSize:12},children:[(0,t.jsx)("span",{children:e}),(0,t.jsx)("span",{style:{color:"#888"},children:n})]},r))]}),(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:12,padding:20,border:"1px solid rgba(255,255,255,0.08)"},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:12},children:[(0,t.jsx)("h3",{style:{fontSize:14,fontWeight:700,margin:0},children:"Your Sectors"}),(0,t.jsxs)(f.default,{href:"/scores#sector",style:{fontSize:11,color:"#3498DB",textDecoration:"none",fontWeight:600},children:[w?.sectors?.length?"Change":w&&!w.failed?"Pick on Scores":"Scores"," →"]})]}),w?w.failed?(0,t.jsx)("div",{style:{fontSize:12,color:"#ff7676"},children:"Couldn’t load your sectors. Reload this page, or open Settings to see them."}):w.sectors?.length?(0,t.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:6,alignItems:"center"},children:[w.sectors.map(e=>{let n=(0,h.sectorByKey)(e);return(0,t.jsx)("span",{style:{padding:"4px 12px",borderRadius:20,fontSize:11,fontWeight:600,background:`${n.color}26`,border:`1px solid ${n.color}66`,color:n.color},children:n.label},e)}),(0,t.jsxs)("span",{style:{fontSize:11,color:"#888"},children:["strong"===w.strength?"Strong":"Lean",": companies here count for more in your scores."]})]}):(0,t.jsx)("div",{style:{fontSize:12,color:"#888"},children:"None picked. Pick up to three in Settings and companies in them count for more in your scores."}):(0,t.jsx)("div",{style:{fontSize:12,color:"#888"},children:"Loading…"})]})]})})]})}function m({label:e,value:n,color:r}){return(0,t.jsxs)("div",{style:{background:"rgba(255,255,255,0.04)",borderRadius:10,padding:"14px 12px",border:"1px solid rgba(255,255,255,0.08)",textAlign:"center"},children:[(0,t.jsx)("div",{style:{fontSize:22,fontWeight:700,color:r||"#fff"},children:n}),(0,t.jsx)("div",{style:{fontSize:10,color:"#888",marginTop:2},children:e})]})}e.s(["default",0,function(){return(0,t.jsx)(u.default,{children:(0,t.jsx)(y,{})})}],99201)},89154,e=>{"use strict";var t=e.i(90179);function n(e){let n=(0,t.readTitle)(e);return{key:n.key,label:n.label,level:n.level}}function r(e){return(0,t.currentCompany)(e)}let i=[{key:"defense",label:"Government, Defense & Aerospace",color:"#7f8c8d",words:/\b(government|federal|state of|county|city of|defen[cs]e|army|navy|air force|marine corps|military|dod|nasa|aerospace|lockheed|northrop|boeing|raytheon|l3harris|leidos|blue origin|spacex|public sector)\b/i},{key:"finance",label:"Finance & Investing",color:"#2ecc71",words:/\b(bank|banking|capital|ventures?|vc|investments?|investor|fund|private equity|growth equity|asset management|wealth|trading|trader|hedge|crypto|blockchain|web3|defi|fintech|stripe|coinbase|blackrock|robinhood|goldman|morgan stanley|jpmorgan|chase|bny|mellon|wells fargo|citi|citigroup|capital one|fidelity|vanguard|schwab|visa|mastercard|amex|american express|paypal|insurance|accounting|cpa|financial)\b/i},{key:"health",label:"Healthcare & Biotech",color:"#e74c3c",words:/\b(health|healthcare|medical|medicine|hospital|clinic|pharma|pharmaceutical|biotech|nurse|nursing|physician|doctor|dental|therapy|therapist|wellness)\b/i},{key:"education",label:"Education",color:"#f1c40f",words:/\b(university|college|school|education|student|professor|teacher|academy|phd|faculty|alumni)\b/i},{key:"media",label:"Marketing & Media",color:"#e67e22",words:/\b(marketing|brand|branding|advertising|agency|media|content|social media|creative|creator|influencer|pr|public relations|communications|tiktok|pinterest|youtube|growth marketing)\b/i},{key:"entertainment",label:"Entertainment & Gaming",color:"#9b59b6",words:/\b(entertainment|film|movie|music|records|gaming|games?|esports|studio|studios|netflix|disney|spotify|hollywood|theater|theatre|sports)\b/i},{key:"tech",label:"Tech, Software & AI",color:"#3498db",words:/\b(software|saas|engineer|engineering|developer|tech|technology|technologies|ai|artificial intelligence|machine learning|ml|data|cloud|cyber|security|devops|product manager|google|microsoft|apple|meta|amazon|nvidia|openai|anthropic|palantir|salesforce|oracle|ibm|intel|app|apps|startup|platform|labs?)\b/i},{key:"consulting",label:"Consulting, Legal & Services",color:"#1abc9c",words:/\b(consulting|consultant|consultancy|deloitte|accenture|mckinsey|kpmg|pwc|ey|bain|bcg|legal|law|lawyer|attorney|paralegal|recruiting|recruiter|staffing|talent)\b/i},{key:"realestate",label:"Real Estate & Construction",color:"#d35400",words:/\b(real estate|realtor|realty|property|properties|construction|architecture|architect|mortgage|homes|housing|builders?)\b/i},{key:"consumer",label:"Retail, Consumer & Hospitality",color:"#ff79c6",words:/\b(retail|e-?commerce|shopify|consumer|cpg|fashion|apparel|beauty|cosmetics|food|beverage|restaurant|hospitality|hotel|travel|tourism|coca-cola|nike|store|shop)\b/i},{key:"industry",label:"Manufacturing, Energy & Logistics",color:"#95a5a6",words:/\b(manufacturing|energy|oil|gas|solar|utilities|automotive|tesla|siemens|ge|general electric|honeywell|3m|logistics|supply chain|shipping|freight|fedex|ups|industrial|mining|chemicals?)\b/i},{key:"nonprofit",label:"Nonprofit & Community",color:"#bdc3c7",words:/\b(nonprofit|non-profit|foundation|charity|ngo|church|ministry|volunteer)\b/i}],o={key:"unknown",label:"Unclear",color:"#555c66"},l=Object.fromEntries([...i,o].map(e=>[e.key,e])),s=e=>l[e]||o;function a(e,t){for(let n of[e,t]){if(!n)continue;let e=i.find(e=>e.words.test(n));if(e)return e}return o}let d=(e,t)=>a(e,t).key,c=e=>n(e).level>=4;e.s(["INDUSTRIES",0,i,"UNKNOWN_INDUSTRY",0,o,"buildCompanyIndex",0,function(e=[]){let n=new Map,r=e=>(n.has(e)||n.set(e,(0,t.rolesWithCompanies)(e)),n.get(e)),{industries:i}=(0,t.networkCompanies)(e,{industryOf:d,rolesOf:r}),o=new Map;for(let t of e){let e=t.profile_url||`id:${t.id}`,n=o.get(e);(!n||(t.degree||9)<(n.degree||9))&&o.set(e,t)}let l=new Map;for(let e of o.values()){let t=r(e).find(e=>!e.former)?.company;if(!t)continue;let n=l.get(t);n||(n={name:t,people:[],d1:0,d2:0,d3:0,S:0,A:0,senior:0},l.set(t,n)),n.people.push(e),1===e.degree?n.d1++:2===e.degree?n.d2++:n.d3++,"S"===e.tier&&n.S++,"A"===e.tier&&n.A++,c(e.headline)&&n.senior++}for(let e of l.values())e.industry=s(i.get(e.name));return l},"companyLinks",0,function(e=[],t=[]){let n=new Map;for(let t of e){let e=r(t);e&&n.set(t.id,e)}let i=new Map;for(let e of t){let t=n.get(e.source_connection_id),o=r(e);if(!t||!o||t===o)continue;let[l,s]=t<o?[t,o]:[o,t],a=`${l}\u0000${s}`,d=i.get(a);d||(d={a:l,b:s,weight:0,via:new Set},i.set(a,d)),d.weight++,d.via.add(e.source_connection_id)}return[...i.values()]},"companyOf",0,r,"getSeniority",0,n,"industryByKey",0,s,"industryOf",0,a,"isSenior",0,c,"waysInto",0,function(e,t=[],n=[]){let i=t.filter(t=>r(t)===e),o=new Map;for(let t of n)r(t)===e&&o.set(t.source_connection_id,(o.get(t.source_connection_id)||0)+1);let l=new Map(t.map(e=>[e.id,e]));return{direct:i,bridges:[...o.entries()].map(([e,t])=>({bridge:l.get(e),n:t})).filter(e=>e.bridge).sort((e,t)=>t.n-e.n||(Number(t.bridge.power_score)||0)-(Number(e.bridge.power_score)||0))}}])},19821,e=>{"use strict";async function t(e){let t=e?`/api/network?userId=${encodeURIComponent(e)}`:"/api/network",n=await fetch(t);if(!n.ok)throw Error(`Failed to load network (${n.status})`);let r=await n.json();return{degree1:r.degree1||[],degree2:r.degree2||[],degree3:r.degree3||[],ties:Number(r.ties)||0}}e.s(["loadNetwork",0,t])},36774,e=>{"use strict";let t=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,n="/avatars/";e.s(["localPhoto",0,function(e){return"string"==typeof e&&e.startsWith(n)&&t.test(e.slice(n.length))?e:null}])},48235,e=>{"use strict";var t=e.i(7214);function n(e,n){return e?n.scanned.has(e.id)||e.profile_url&&n.read?.has((0,t.keyFor)(e))?"scanned":e.profile_url&&n.hidden.has((0,t.keyFor)(e))?"hidden":"todo":"todo"}function r(e,t){if(!e||1!==e.degree||null==e.unlocked_from_bridge_id)return null;let r=n(e,t);return"todo"===r?"ready":r}e.s(["circleScanCost",0,function(e=100){let t=Math.max(1,Math.min(100,Math.round(e)||100));return{profileViews:1,searches:t,minutes:t>=100?55:Math.max(5,Math.round(.55*t))}},"circleState",0,n,"reachIndex",0,function(e=[],n=[],r={}){let i=new Set;for(let e of n||[])e?.source_connection_id!=null&&i.add(e.source_connection_id);let o=new Set;for(let e of r?.skips||[])e?.profileUrl&&o.add((0,t.keyFor)({profile_url:e.profileUrl}));let l=new Set;for(let e of r?.read||[])e&&l.add((0,t.keyFor)({profile_url:e}));let s=new Map;for(let[e,n]of Object.entries(r?.lists||{}))e&&n&&s.set((0,t.keyFor)({profile_url:e}),n);let a=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let n=a.get(e);n||a.set(e,n=[]),n.push(t)}return{scanned:i,read:l,hidden:o,reachedFrom:a,lists:s}},"reachState",0,r,"readyByCircle",0,function(e){let t=new Map;for(let[n,i]of e.reachedFrom){let o=i.filter(t=>"ready"===r(t,e)).length;o&&t.set(n,o)}return t},"readyToScan",0,function(e,n){return(e||[]).filter(e=>"ready"===r(e,n)).sort(t.compareBridges)},"scanBars",0,function(e,r){let i=n(e,r),o=e?.profile_url?r.lists?.get((0,t.keyFor)(e)):null;return"hidden"===i?null:o?o.more?o.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*o.pages/o.total)))):2:5:"scanned"===i?2:null}])},69083,e=>{"use strict";var t=e.i(89154);let n=new Map(t.INDUSTRIES.map(e=>[e.key,e.color])),r=new Map([...t.INDUSTRIES.map(e=>[e.key,Object.freeze({key:e.key,label:e.label,color:e.color,group:e.key,kind:"industry"})]),...Object.entries({software:["Software & SaaS","tech","function"],"ai-data":["AI & Data","tech","function"],cybersecurity:["Cybersecurity","tech","function"],telecom:["Telecom","tech","industry"],fintech:["Fintech & Payments","finance","industry"],banking:["Banking & Lending","finance","industry"],"vc-pe":["Venture Capital & Private Equity","finance","industry"],wealth:["Wealth & Asset Management","finance","industry"],insurance:["Insurance","finance","industry"],accounting:["Accounting & Tax","finance","function"],crypto:["Crypto & Web3","finance","industry"],hospitals:["Hospitals & Clinics","health","industry"],dental:["Dental","health","industry"],"pharma-biotech":["Pharma & Biotech","health","industry"],"medical-devices":["Medical Devices","health","industry"],"mental-health":["Mental Health","health","industry"],"fitness-wellness":["Fitness & Wellness","health","industry"],veterinary:["Veterinary & Animal Care","health","industry"],k12:["K-12 Education","education","industry"],"higher-ed":["Higher Education","education","industry"],"marketing-advertising":["Marketing & Advertising","media","function"],"pr-comms":["PR & Communications","media","function"],"media-publishing":["Media & Publishing","media","industry"],"creator-economy":["Creator Economy","media","industry"],"film-tv-music":["Film, TV & Music","entertainment","industry"],"gaming-esports":["Gaming & Esports","entertainment","industry"],sports:["Sports","entertainment","industry"],"ecommerce-retail":["E-commerce & Retail","consumer","industry"],"consumer-goods":["Consumer Goods","consumer","industry"],restaurants:["Restaurants & Food Service","consumer","industry"],"hospitality-travel":["Hospitality & Travel","consumer","industry"],"beauty-personal-care":["Beauty & Personal Care","consumer","industry"],logistics:["Logistics & Supply Chain","industry","industry"],manufacturing:["Manufacturing","industry","industry"],energy:["Energy & Utilities","industry","industry"],automotive:["Automotive","industry","industry"],agriculture:["Agriculture & Farming","industry","industry"],"aerospace-defense":["Aerospace & Defense","defense","industry"],military:["Military","defense","industry"],government:["Government & Public Sector","defense","industry"],legal:["Legal","consulting","function"],"management-consulting":["Management Consulting","consulting","function"],"hr-recruiting":["HR & Recruiting","consulting","function"],"security-services":["Security Services","consulting","function"],"real-estate":["Real Estate","realestate","industry"],"construction-trades":["Construction & Trades","realestate","industry"],charities:["Nonprofits & Charities","nonprofit","industry"],"social-work":["Social Work & Human Services","nonprofit","industry"],faith:["Faith & Ministry","nonprofit","industry"]}).map(([e,[r,i,o]])=>[e,Object.freeze({key:e,label:r,color:n.get(i)||t.UNKNOWN_INDUSTRY.color,group:i,kind:o})])]);e.s(["sectorByKey",0,function(e){return r.get(e)||{key:e,label:t.UNKNOWN_INDUSTRY.label,color:t.UNKNOWN_INDUSTRY.color,group:null,kind:null}}])},7214,e=>{"use strict";var t=e.i(36774);let n={S:0,A:1,B:2,C:3,D:4};function r(e){let t=parseFloat(e?.power_score);return Number.isFinite(t)?t:0}function i(e){return Math.round(10*r(e))/10}function o(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}let l=(e,t)=>String(e??"").localeCompare(String(t??""),void 0,{numeric:!0});function s(e,t){return(n[e.tier]??9)-(n[t.tier]??9)||r(t)-r(e)||String(e.name||"").localeCompare(String(t.name||""))||l(e.id,t.id)}function a(e,t){return e.bridge&&t.bridge?s(e.bridge,t.bridge):e.bridge?-1:t.bridge?1:l(e.id,t.id)}function d(e,t){return t.score-e.score||t.waysIn-e.waysIn||a(e.routes[0]||c,t.routes[0]||c)||String(e.person.name||"").localeCompare(String(t.person.name||""))||(e.key<t.key?-1:+(e.key>t.key))}let c={id:null,bridge:null};function u(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length<2?t[0]||"":`${t[0]} ${t[t.length-1].charAt(0)}.`}function g(e,t){let n=String(e||"");return t<=1?n?"…":"":n.length>t?`${n.slice(0,t-1)}…`:n}e.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,s,"compareWaysIn",0,function(e,t){return t.waysIn-e.waysIn||d(e,t)},"keyFor",0,o,"routeIndex",0,function(e=[]){let t=new Map;for(let n of e||[]){let e=o(n),r=t.get(e);r||(r=new Set,t.set(e,r)),r.add(n.source_connection_id??null)}return t},"routesFor",0,function(e,t,n){return e?[...t?.get(o(e))??(null!=e.source_connection_id?new Set([e.source_connection_id]):new Set)].map(e=>({id:e,bridge:n?.get(e)??null})).sort(a):[]},"score",0,r,"score1",0,i,"separationPeople",0,function(e=[],n=[]){let r=new Map;for(let e of n||[])r.set(e.id,e);let s=new Map,c=new Map;for(let n of e||[]){let e=o(n);c.set(n.id,e);let r=s.get(e);r?function(e,n){let r=i(e)-i(n);if(r)return r>0;let o=!!(0,t.localPhoto)(e.profile_image_url);return!!(0,t.localPhoto)(n.profile_image_url)!==o?o:0>l(e.id,n.id)}(n,r.person)&&(r.person=n):(r={key:e,person:n,rowIds:[],routeIds:new Set},s.set(e,r)),r.rowIds.push(n.id),r.routeIds.add(n.source_connection_id??null)}let u={people:s.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},g=new Set,h=new Set,f=new Set,p=[];for(let e of s.values()){let t=[...e.routeIds].map(e=>({id:e,bridge:r.get(e)??null}));t.sort(a);let n=t.filter(e=>e.bridge);for(let e of t)(e.bridge?g:h).add(e.id);if(!n.length)for(let e of(u.peopleOnlyUnresolved++,t))f.add(e.id);let{person:o}=e,l=o.tier;void 0!==u.byTier[l]&&u.byTier[l]++,t.length>1&&u.multi++,p.push({key:e.key,person:o,score:i(o),tier:l,routes:t,waysIn:t.length,rowIds:e.rowIds,haystack:[o.name,o.headline,o.company,o.role,...n.map(e=>e.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return u.bridges=g.size,u.unresolvedIds=h.size,u.onlyUnresolvedVia=f.size,p.sort(d),function(e){for(let t=0;t<e.length;t++){let n=e[t],r=e[t-1],i=r&&r.score===n.score&&r.waysIn===n.waysIn;n.rank=i?r.rank:t+1,i&&(n.tied=!0,r.tied=!0)}}(p),{people:p,rowToKey:c,summary:u}},"shortName",0,u,"summitLayout",0,function(e=[],t=800,n=!1){let r=n?36:26,i=Math.round(.42*t),o=Math.round(.58*t),l=e.map((e,n)=>{var i;return{key:e.key,p:e,x:o,y:16+n*r,r:(i=e.waysIn)>=4?8.5:3===i?7:2===i?5.5:4,label:g(`#${e.rank}${e.tied?"=":""} ${e.person.name||""}`,Math.floor((t-o-60)/6.2))}}),a=new Map,d="\0unresolved";for(let e of l)for(let t of e.p.routes){let n=t.bridge?t.id:d,r=a.get(n);r||(r={id:t.bridge?t.id:null,bridge:t.bridge,unresolved:!t.bridge,ys:[],count:0},a.set(n,r)),r.count++,r.ys.push(e.y)}let c=[...a.values()].map(e=>({...e,bary:e.ys.reduce((e,t)=>e+t,0)/e.ys.length}));c.sort((e,t)=>e.bary-t.bary||e.unresolved-t.unresolved||(e.bridge&&t.bridge?s(e.bridge,t.bridge):0));let h=l.length?l[l.length-1].y:16,f=c.length>1?Math.max(18,(h-16)/(c.length-1)):0,p=Math.max(4,Math.floor((i-10-42)/6));c.forEach((e,t)=>{if(e.x=i,e.y=1===c.length?(16+h)/2:16+t*f,e.r=5,e.unresolved)e.label=g(`can't be named (${e.count})`,p);else{let t=e.bridge.name||"";e.label=t.length<=p?t:g(u(t),p)}delete e.ys});let y=new Map(c.map(e=>[e.unresolved?d:e.id,e])),m=[];for(let e of l){let t=new Set;e.p.routes.forEach((n,r)=>{let i=n.bridge?n.id:d;if(t.has(i))return;t.add(i);let o=y.get(i);m.push({key:e.key,bridgeId:o.id,primary:0===r&&!o.unresolved,unresolved:o.unresolved,tier:o.bridge?.tier??null,x1:o.x,y1:o.y,x2:e.x,y2:e.y})})}let b=Math.max(h,c.length?c[c.length-1].y:0),x=l.length?Math.ceil(b+16):0,v={x:20,y:l.length?(16+Math.max(h,b))/2:16,r:14},S=c.map(e=>({id:e.id,x1:v.x,y1:v.y,x2:e.x,y2:e.y}));return{width:t,height:x,you:v,people:l,bridges:c,links:m,spokes:S}}])},5258,e=>{"use strict";e.s(["TIER_COLORS",0,{S:"#f6c344",A:"#a78bfa",B:"#60a5fa",C:"#94a3b8",D:"#6b7280"},"TIER_COLORS_CLASSIC",0,{S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},"TIER_ORDER",0,["S","A","B","C","D"],"TIER_RING_RADIUS",0,{S:150,A:230,B:310,C:390,D:470},"initialsFor",0,function(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return 0===t.length?"?":(t[0].charAt(0)+(t.length>1?t[t.length-1].charAt(0):"")).toUpperCase()}])}]);
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,2776,e=>{"use strict";var t=e.i(43476),n=e.i(15812);e.s(["default",0,function({children:e}){let{userId:r,ready:o}=(0,n.useUser)();return o&&r?e:(0,t.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:o?(0,t.jsxs)("div",{style:{maxWidth:420},children:[(0,t.jsx)("div",{style:{fontSize:18,fontWeight:700,marginBottom:8},children:"Can’t reach Six Degrees’ local server"}),(0,t.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,t.jsx)("div",{style:{fontSize:18,fontWeight:600},children:"Loading…"})})}])},28867,86106,e=>{"use strict";var t=e.i(71645),n=e.i(7214);let r=Object.freeze({known:!1,sent:new Set,mine:new Map,version:0}),o=new Set,l=r,i=null,a=new Map;function s(e=l.sent,t=l.known){for(let n of(l=Object.freeze({known:t,sent:e,mine:new Map(a),version:l.version+1}),[...o]))n()}function u(e){return o.add(e),i||l.known||(i=fetch("/api/outreach").then(e=>e.ok?e.json():null).then(e=>{e&&s(new Set((e.pending||[]).map(n.keyFor)),!0)}).catch(()=>{}).finally(()=>{i=null})),()=>o.delete(e)}function c(){return l}async function f(e){let t=await fetch("/api/outreach",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await t.json().catch(()=>({}));if(!t.ok)throw Error(n.error||"Could not save that.");return n}async function d(e,{bridgeId:t}={}){let r=(0,n.keyFor)(e),o=a.has(r)?a.get(r):void 0;a.set(r,!0),s();try{return await f({action:"mark-sent",connectionId:e.id,profileUrl:e.profile_url,bridgeId:t})}catch(e){throw void 0===o?a.delete(r):a.set(r,o),s(),e}}async function p(e){let t=(0,n.keyFor)(e),r=a.has(t)?a.get(t):void 0;a.set(t,!1),s();try{return await f({action:"undo",connectionId:e.id,profileUrl:e.profile_url})}catch(e){throw void 0===r?a.delete(t):a.set(t,r),s(),e}}e.s(["REQUESTS_UNKNOWN",0,r,"hasRequest",0,function(e,t=l){if(!e)return!1;let r=(0,n.keyFor)(e);return t.mine.has(r)?t.mine.get(r):t.known?t.sent.has(r):"pending"===e.unlock_status||"sent"===e.outreach_status},"markRequested",0,d,"requestCount",0,function(e=l){let t=new Set(e.known?e.sent:[]);for(let[n,r]of e.mine)r?t.add(n):t.delete(n);return t.size},"requestsNow",0,c,"undoRequest",0,p,"watchRequests",0,u],86106),e.s(["default",0,function(){return(0,t.useSyncExternalStore)(u,c,()=>r)}],28867)},64666,e=>{"use strict";var t=e.i(7214);function n(e=[],r=[]){let o=new Set((r||[]).map(t.keyFor)),l=new Map;for(let n of e||[]){let e=n?.source_connection_id;if(null==e)continue;let r=(0,t.keyFor)(n);if(o.has(r))continue;let i=l.get(r);i||l.set(r,i=new Set),i.add(e)}let i=new Map;for(let e of l.values())for(let t of e){let n=i.get(t)||{reach:0,only:0,total:0};n.reach+=1/e.size,n.total+=1,1===e.size&&(n.only+=1),i.set(t,n)}return i}e.s(["bridgeOverlap",0,function(e=[],r=[]){let o=n(e,r),l=new Set((r||[]).map(t.keyFor)),i=new Map;for(let n of e||[]){let e=n?.source_connection_id;if(null==e)continue;let r=(0,t.keyFor)(n);if(l.has(r))continue;let o=i.get(r);o||i.set(r,o=new Set),o.add(e)}let a=new Map;for(let e of i.values()){if(e.size<2)continue;let t=[...e];for(let e=0;e<t.length;e++)for(let n=e+1;n<t.length;n++){let r=t[e]<t[n]?`${t[e]}|${t[n]}`:`${t[n]}|${t[e]}`;a.set(r,(a.get(r)||0)+1)}}let s=new Map;for(let[e,t]of a){let[n,r]=e.split("|"),l=o.get(n).total+o.get(r).total-t,i=l?t/l:0;for(let[e,o]of[[n,r],[r,n]]){let n=s.get(e);(!n||i>n.share)&&s.set(e,{with:o,share:i,shared:t})}}return s},"exclusiveReach",0,n,"redundancy",0,function(e=[],t=[]){let r=n(e,t),o=0,l=0;for(let e of r.values())o+=e.reach,l+=e.only;return o?1-l/o:0}])},39160,84278,e=>{"use strict";var t=e.i(7214),n=e.i(7837);function r(e){let t=String(e||"").trim();if(!t)return null;let n=t.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2})(?::(\d{2}))?(?:\s*UTC)?$/);if(n)return Date.UTC(+n[1],n[2]-1,+n[3],+n[4],+n[5],+(n[6]||0));if(n=t.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2,4}),?\s+(\d{1,2}):(\d{2})\s*(AM|PM)?$/i)){let e=100>+n[3]?2e3+ +n[3]:+n[3],t=n[4]%12;return"PM"===(n[6]||"").toUpperCase()&&(t+=12),Date.UTC(e,n[1]-1,+n[2],t,+n[5])}if(n=t.match(/^([A-Za-z]{3,9})\s+(\d{4})$/)){let e=Date.parse(`1 ${n[1]} ${n[2]} UTC`);return Number.isNaN(e)?null:e}let r=Date.parse(/\d{4}$/.test(t)?`${t} UTC`:t);return Number.isNaN(r)?null:r}let o=e=>(0,t.keyFor)({profile_url:e});function l(e=[]){let t=new Map;for(let n of e){let e=o(n["sender profile url"]),r=n["conversation id"];r&&e&&(t.has(e)||t.set(e,new Set),t.get(e).add(r))}let n=null;for(let[e,r]of t)(!n||r.size>t.get(n).size)&&(n=e);return n}function i(e,t){if(!e||!e.total)return"never";let n=t-e.last;return n<=2592e6||e.recent>=3?"warm":n<=31536e6?"cool":"dormant"}e.s(["buildConversations",0,function(e=[],{keepText:t=!1}={}){let n=l(e),i=new Map;for(let l of e){let e=o(l["sender profile url"]),a=l["conversation id"];if(!a||!e)continue;let s=r(l.date);if(null==s)continue;i.has(a)||i.set(a,{id:a,title:"",everyone:new Set,messages:[]});let u=i.get(a);u.everyone.add(e),String(l["recipient profile urls"]||"").split(/[,;\s]+/).filter(Boolean).forEach(e=>u.everyone.add(o(e)));let c={t:s,fromMe:e===n};t&&(c.text=[l.subject,l.content].map(e=>String(e||"").trim()).filter(Boolean).join("\n\n"),!u.title&&l["conversation title"]&&(u.title=String(l["conversation title"]).trim())),u.messages.push(c)}let a=[];for(let e of i.values()){if(!e.everyone.has(n))continue;let r=[...e.everyone].filter(e=>e&&e!==n).sort();if(!r.length)continue;e.messages.sort((e,t)=>e.t-t.t);let o={id:e.id,people:r,group:r.length>1,messages:e.messages};t&&(o.title=e.title),a.push(o)}return{self:n,conversations:a}},"careerChapters",0,function(e=[],t=[],n=Date.now()){let l=e.map(e=>({company:e["company name"]||"",title:e.title||"",from:r(e["started on"]),to:r(e["finished on"])})).filter(e=>e.company&&null!=e.from).sort((e,t)=>e.from-t.from),i=t.map(e=>({url:o(e.url||e.profile_url),t:r(e["connected on"]||e.connected_on)})).filter(e=>null!=e.t);return l.map(e=>{let t=e.to??n,r=i.filter(n=>n.t>=e.from&&n.t<t);return{...e,to:e.to,made:r.length,people:r.map(e=>e.url)}})},"conversationSummary",0,function(e){let t=e.messages[e.messages.length-1];return{id:e.id,people:e.people,group:e.group,last:t?t.t:null,lastFromThem:t?!t.fromMe:null,count:e.messages.length}},"invitationSplit",0,function(e=[]){let t=0,n=0;for(let r of e){let e=String(r.direction||"").toUpperCase();"INCOMING"===e?t+=1:"OUTGOING"===e&&(n+=1)}return{incoming:t,outgoing:n,total:t+n}},"messageStats",0,function(e=[]){let t=l(e),n=new Map;for(let t of e){let e=o(t["sender profile url"]),l=t["conversation id"];if(!l||!e)continue;let i=String(t["recipient profile urls"]||"").split(/[,;\s]+/).filter(Boolean).map(o),a=r(t.date);if(null==a)continue;n.has(l)||n.set(l,{people:new Set,msgs:[]});let s=n.get(l);s.people.add(e),i.forEach(e=>s.people.add(e)),s.msgs.push({from:e,t:a})}let i=0,a=new Map;for(let e of n.values()){let n=[...e.people].filter(e=>e!==t);if(1!==n.length||!e.people.has(t))continue;let r=n[0],o=a.get(r)||{last:0,lastFromThem:!1,total:0,times:[]};for(let n of e.msgs)o.total+=1,o.times.push(n.t),n.t>=o.last&&(o.last=n.t,o.lastFromThem=n.from!==t),n.t>i&&(i=n.t);a.set(r,o)}for(let e of a.values())e.recent=e.times.filter(e=>e>i-7776e6).length,delete e.times;return{self:t,asOf:i||null,people:a}},"postingEffect",0,function(e=[],t=[]){let n=e.map(e=>({t:r(e.date),link:e.sharelink||e["share link"]||""})).filter(e=>null!=e.t).sort((e,t)=>e.t-t.t),o=t.map(e=>r(e["connected on"]||e.connected_on)).filter(e=>null!=e).sort((e,t)=>e-t);if(!o.length)return{posts:[],usualWeek:0,afterPosts:0};let l=Math.max(6048e5,o[o.length-1]-o[0]),i=o.length/l*6048e5,a=n.map(e=>({...e,week:o.filter(t=>t>=e.t&&t<e.t+6048e5).length})),s=a.length?a.reduce((e,t)=>e+t.week,0)/a.length:0;return{posts:a,usualWeek:i,afterPosts:s}},"readTable",0,function(e,t){let r=(0,n.parseCsv)(String(e||"")),o=r.findIndex(e=>e.some(e=>e.trim().toLowerCase()===t.toLowerCase()));if(o<0)return[];let l=r[o].map(e=>e.trim().toLowerCase());return r.slice(o+1).filter(e=>e.some(e=>e.trim())).map(e=>Object.fromEntries(l.map((t,n)=>[t,(e[n]??"").trim()])))},"repliesWaiting",0,function(e){let t=[];for(let[n,r]of e.people){let o=e.asOf-r.last;r.lastFromThem&&o>=2592e5&&o<=2592e6&&t.push({url:n,days:Math.round(o/864e5),total:r.total})}return t.sort((e,t)=>e.days-t.days)},"sortConversations",0,function(e=[],t=()=>null){let n=e=>e.group||!0!==e.lastFromThem?1:0,r=e=>({S:0,A:1})[t(e)]??2;return[...e].sort((e,t)=>n(e)-n(t)||r(e)-r(t)||(t.last||0)-(e.last||0))},"warmthOf",0,i],84278);let a="six-degrees-galaxy-lab",s="six-degrees-galaxy-layouts",u=Object.freeze({on:!1,gravity:0,rings:1,push:15,pull:1,distance:1,dotSize:1,lines:1,sizeBy:"power",names:"key",branch:!0,colourBy:"tier",speed:15,loop:!1,labels:!0}),c=["gravity","rings","push","pull","distance","dotSize","lines","sizeBy","names","branch","colourBy","speed","loop"],f=Object.freeze({gravity:.25,rings:0,push:25,pull:2.5,distance:.35,sizeBy:"reach"}),d=new Set,p=null;function m(){return p||(p=function(){try{let e=JSON.parse(localStorage.getItem(a)||"null");return e&&"object"==typeof e?{...u,...e}:u}catch{return u}}()),p}function g(e){p=null===e?{...u,on:m().on,labels:m().labels}:{...m(),...e};try{localStorage.setItem(a,JSON.stringify(p))}catch{}d.forEach(e=>e())}let h=null,y=new Set;function w(){if(!h){try{h=JSON.parse(localStorage.getItem(s)||"[]")}catch{h=[]}Array.isArray(h)||(h=[])}return h}function b(e){h=e;try{localStorage.setItem(s,JSON.stringify(e))}catch{}y.forEach(e=>e())}let S=new Set,v={at:null,playing:!1,min:null,max:null,of:0,find:"",fly:0,found:0,social:void 0},k=null;function F(e){let t={...v,...e};Object.keys(e).every(e=>Object.is(t[e],v[e]))||(v=t,S.forEach(e=>e()))}function M(){cancelAnimationFrame(k),k=null,F({playing:!1})}let C=null;function _(e){let n=new Map;for(let[r,o]of Object.entries(e?.people||{}))n.set((0,t.keyFor)({profile_url:r}),{...o});for(let[r,o]of Object.entries(e?.live||{})){let e=(0,t.keyFor)({profile_url:r}),l=n.get(e)||{total:0,recent:0};o.last&&(!l.last||o.last>l.last)&&(l.last=o.last,"boolean"==typeof o.lastFromThem&&(l.lastFromThem=o.lastFromThem)),l.unread=o.unread,l.total=Math.max(l.total||0,1),n.set(e,l)}let r=Math.max(e?.asOf||0,e?.liveAt&&Date.parse(e.liveAt)||0);for(let e of n.values())(e.last||0)>r&&(r=e.last);return{merged:n,asOf:r,chapters:e?.chapters||[],posts:e?.posts?.posts||[]}}let x={1:"#4FC3F7",2:"#BA68C8",3:"#FFB74D"},I=["#FF6B6B","#4ECDC4","#FFD93D","#A29BFE","#00B894","#FD79A8","#74B9FF","#E17055"],O={warm:"#FF7043",cool:"#4FC3F7",dormant:"#8D6E63",never:"#546E7A"},B="#4a5568",N=e=>String(e||"").trim().toLowerCase();e.s(["CLUSTERS",0,f,"LAB_DEFAULTS",0,u,"applyLayout",0,function(e){let t=w().find(t=>t.name===e);t&&g(Object.fromEntries(c.filter(e=>e in t.settings).map(e=>[e,t.settings[e]])))},"bornTimes",0,function(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map,o=(e,l=0)=>{if(r.has(e.id))return r.get(e.id);let i=-1/0,a=t.get(e.id);if(1===e.degree||null==a||l>6){let t=e.connected_date?Date.parse(e.connected_date):NaN;i=Number.isNaN(t)?-1/0:t}return null!=a&&n.has(a)&&l<=6&&(i=Math.max(i,o(n.get(a),l+1))),r.set(e.id,i),i};return e.map(e=>o(e))},"chapterAt",0,function(e,t){let n=null;for(let r of e?.chapters||[])Number.isFinite(r.from)&&r.from<=t&&(!n||r.from>n.from)&&(n=r);return n&&(!Number.isFinite(n.to)||n.to>t)?n:null},"clockNow",0,()=>v,"colourScheme",0,function(e,n,r,o){if("degree"===e)return{of:e=>x[Math.min(e.degree||1,3)],legend:[["1st",x[1]],["2nd",x[2]],["3rd+",x[3]]]};if("company"===e){let e=new Map;for(let t of n){let n=N(t.company);if(!n)continue;let r=e.get(n)||{name:String(t.company).trim(),n:0};r.n+=1,e.set(n,r)}let t=[...e.entries()].filter(([,e])=>e.n>1).sort((e,t)=>t[1].n-e[1].n).slice(0,I.length),r=new Map(t.map(([e],t)=>[e,I[t]]));return{of:e=>r.get(N(e.company))||B,legend:[...t.map(([,e],t)=>[e.name,I[t]]),["Other",B]]}}return"warmth"===e&&o?{of:e=>1===(e.degree||1)?O[i(o.merged.get((0,t.keyFor)(e)),o.asOf)]:"#2d3748",legend:[["Warm",O.warm],["Cool",O.cool],["Dormant",O.dormant],["Never messaged",O.never]]}:{of:e=>r[e.tier]||"#666",legend:Object.entries(r)}},"effectiveLab",0,e=>e.on?e:e.labels===u.labels?u:{...u,labels:e.labels},"findMatches",0,function(e,t){let n=String(t||"").trim().toLowerCase();if(n.length<2)return null;let r=new Set;for(let t of e)[t.name,t.company,t.role,t.headline].some(e=>e&&String(e).toLowerCase().includes(n))&&r.add(t.id);return r},"forgetLayout",0,function(e){b(w().filter(t=>t.name!==e))},"labNow",0,m,"layoutsNow",0,w,"loadSocial",0,function(){return C||(C=fetch("/api/social").then(e=>e.ok?e.json():{}).then(e=>{F({social:e.social?_(e.social):null})}).catch(()=>F({social:null}))),C},"mergeSocial",0,_,"milestones",0,function(e){let t=[];for(let n of e?.chapters||[])Number.isFinite(n.from)&&t.push({t:n.from,kind:"job",label:n.company});for(let n of e?.posts||[])Number.isFinite(n.t)&&t.push({t:n.t,kind:"post",label:"You posted"});return t.sort((e,t)=>e.t-t.t)},"pause",0,M,"play",0,function e(){if(null==v.min||null==v.max||v.max<=v.min)return;let t=v.max-v.min,n=1e3*Math.max(1,Number(m().speed)||15),r=null==v.at||v.at>=v.max?v.min:v.at,o=performance.now()-(r-v.min)/t*n;F({at:r,playing:!0});let l=r=>{let i=Math.min(v.max,v.min+(r-o)/n*t);if(F({at:i}),i>=v.max){k=null,F({playing:!1}),m().loop&&setTimeout(()=>{k||v.at!==v.max||(F({at:v.min}),e())},1200);return}k=requestAnimationFrame(l)};cancelAnimationFrame(k),k=requestAnimationFrame(l)},"reachCounts",0,function(e,t){let n=new Map(e.map(e=>[e.id,0]));for(let r of e){let e=t.get(r.id);for(let r=0;null!=e&&r<7;r++)n.set(e,(n.get(e)||0)+1),e=t.get(e)}return n},"saveLayout",0,function(e){let t=String(e||"").trim().slice(0,40);if(!t)return;let n=m(),r=Object.fromEntries(c.map(e=>[e,n[e]]));b([...w().filter(e=>e.name!==t),{name:t,settings:r}])},"setClock",0,F,"setLab",0,g,"stopReplay",0,function(){M(),F({at:null})},"watchClock",0,function(e){return S.add(e),()=>S.delete(e)},"watchLab",0,function(e){d.add(e);let t=t=>{t.key===a&&(p=null,e())};return window.addEventListener("storage",t),()=>{d.delete(e),window.removeEventListener("storage",t)}},"watchLayouts",0,function(e){return y.add(e),()=>y.delete(e)}],39160)},19821,e=>{"use strict";async function t(e){let t=e?`/api/network?userId=${encodeURIComponent(e)}`:"/api/network",n=await fetch(t);if(!n.ok)throw Error(`Failed to load network (${n.status})`);let r=await n.json();return{degree1:r.degree1||[],degree2:r.degree2||[],degree3:r.degree3||[],ties:Number(r.ties)||0}}e.s(["loadNetwork",0,t])},36774,e=>{"use strict";let t=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,n="/avatars/";e.s(["localPhoto",0,function(e){return"string"==typeof e&&e.startsWith(n)&&t.test(e.slice(n.length))?e:null}])},48235,e=>{"use strict";var t=e.i(7214);function n(e,n){return e?n.scanned.has(e.id)||e.profile_url&&n.read?.has((0,t.keyFor)(e))?"scanned":e.profile_url&&n.hidden.has((0,t.keyFor)(e))?"hidden":"todo":"todo"}function r(e,t){if(!e||1!==e.degree||null==e.unlocked_from_bridge_id)return null;let r=n(e,t);return"todo"===r?"ready":r}e.s(["circleScanCost",0,function(e=100){let t=Math.max(1,Math.min(100,Math.round(e)||100));return{profileViews:1,searches:t,minutes:t>=100?55:Math.max(5,Math.round(.55*t))}},"circleState",0,n,"reachIndex",0,function(e=[],n=[],r={}){let o=new Set;for(let e of n||[])e?.source_connection_id!=null&&o.add(e.source_connection_id);let l=new Set;for(let e of r?.skips||[])e?.profileUrl&&l.add((0,t.keyFor)({profile_url:e.profileUrl}));let i=new Set;for(let e of r?.read||[])e&&i.add((0,t.keyFor)({profile_url:e}));let a=new Map;for(let[e,n]of Object.entries(r?.lists||{}))e&&n&&a.set((0,t.keyFor)({profile_url:e}),n);let s=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let n=s.get(e);n||s.set(e,n=[]),n.push(t)}return{scanned:o,read:i,hidden:l,reachedFrom:s,lists:a}},"reachState",0,r,"readyByCircle",0,function(e){let t=new Map;for(let[n,o]of e.reachedFrom){let l=o.filter(t=>"ready"===r(t,e)).length;l&&t.set(n,l)}return t},"readyToScan",0,function(e,n){return(e||[]).filter(e=>"ready"===r(e,n)).sort(t.compareBridges)},"scanBars",0,function(e,r){let o=n(e,r),l=e?.profile_url?r.lists?.get((0,t.keyFor)(e)):null;return"hidden"===o?null:l?l.more?l.total?Math.max(1,Math.min(4,Math.round(5*Math.min(1,10*l.pages/l.total)))):2:5:"scanned"===o?2:null}])},7214,e=>{"use strict";var t=e.i(36774);let n={S:0,A:1,B:2,C:3,D:4};function r(e){let t=parseFloat(e?.power_score);return Number.isFinite(t)?t:0}function o(e){return Math.round(10*r(e))/10}function l(e){return String(e?.profile_url||"").split(/[?#]/)[0].replace(/\/+$/,"")||`id:${e?.id}`}let i=(e,t)=>String(e??"").localeCompare(String(t??""),void 0,{numeric:!0});function a(e,t){return(n[e.tier]??9)-(n[t.tier]??9)||r(t)-r(e)||String(e.name||"").localeCompare(String(t.name||""))||i(e.id,t.id)}function s(e,t){return e.bridge&&t.bridge?a(e.bridge,t.bridge):e.bridge?-1:t.bridge?1:i(e.id,t.id)}function u(e,t){return t.score-e.score||t.waysIn-e.waysIn||s(e.routes[0]||c,t.routes[0]||c)||String(e.person.name||"").localeCompare(String(t.person.name||""))||(e.key<t.key?-1:+(e.key>t.key))}let c={id:null,bridge:null};function f(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return t.length<2?t[0]||"":`${t[0]} ${t[t.length-1].charAt(0)}.`}function d(e,t){let n=String(e||"");return t<=1?n?"…":"":n.length>t?`${n.slice(0,t-1)}…`:n}e.s(["TIERS",0,["S","A","B","C","D"],"compareBridges",0,a,"compareWaysIn",0,function(e,t){return t.waysIn-e.waysIn||u(e,t)},"keyFor",0,l,"routeIndex",0,function(e=[]){let t=new Map;for(let n of e||[]){let e=l(n),r=t.get(e);r||(r=new Set,t.set(e,r)),r.add(n.source_connection_id??null)}return t},"routesFor",0,function(e,t,n){return e?[...t?.get(l(e))??(null!=e.source_connection_id?new Set([e.source_connection_id]):new Set)].map(e=>({id:e,bridge:n?.get(e)??null})).sort(s):[]},"score",0,r,"score1",0,o,"separationPeople",0,function(e=[],n=[]){let r=new Map;for(let e of n||[])r.set(e.id,e);let a=new Map,c=new Map;for(let n of e||[]){let e=l(n);c.set(n.id,e);let r=a.get(e);r?function(e,n){let r=o(e)-o(n);if(r)return r>0;let l=!!(0,t.localPhoto)(e.profile_image_url);return!!(0,t.localPhoto)(n.profile_image_url)!==l?l:0>i(e.id,n.id)}(n,r.person)&&(r.person=n):(r={key:e,person:n,rowIds:[],routeIds:new Set},a.set(e,r)),r.rowIds.push(n.id),r.routeIds.add(n.source_connection_id??null)}let f={people:a.size,byTier:{S:0,A:0,B:0,C:0,D:0},multi:0,bridges:0,unresolvedIds:0,peopleOnlyUnresolved:0,onlyUnresolvedVia:0},d=new Set,p=new Set,m=new Set,g=[];for(let e of a.values()){let t=[...e.routeIds].map(e=>({id:e,bridge:r.get(e)??null}));t.sort(s);let n=t.filter(e=>e.bridge);for(let e of t)(e.bridge?d:p).add(e.id);if(!n.length)for(let e of(f.peopleOnlyUnresolved++,t))m.add(e.id);let{person:l}=e,i=l.tier;void 0!==f.byTier[i]&&f.byTier[i]++,t.length>1&&f.multi++,g.push({key:e.key,person:l,score:o(l),tier:i,routes:t,waysIn:t.length,rowIds:e.rowIds,haystack:[l.name,l.headline,l.company,l.role,...n.map(e=>e.bridge.name)].filter(Boolean).join("\n").toLowerCase(),rank:0,tied:!1})}return f.bridges=d.size,f.unresolvedIds=p.size,f.onlyUnresolvedVia=m.size,g.sort(u),function(e){for(let t=0;t<e.length;t++){let n=e[t],r=e[t-1],o=r&&r.score===n.score&&r.waysIn===n.waysIn;n.rank=o?r.rank:t+1,o&&(n.tied=!0,r.tied=!0)}}(g),{people:g,rowToKey:c,summary:f}},"shortName",0,f,"summitLayout",0,function(e=[],t=800,n=!1){let r=n?36:26,o=Math.round(.42*t),l=Math.round(.58*t),i=e.map((e,n)=>{var o;return{key:e.key,p:e,x:l,y:16+n*r,r:(o=e.waysIn)>=4?8.5:3===o?7:2===o?5.5:4,label:d(`#${e.rank}${e.tied?"=":""} ${e.person.name||""}`,Math.floor((t-l-60)/6.2))}}),s=new Map,u="\0unresolved";for(let e of i)for(let t of e.p.routes){let n=t.bridge?t.id:u,r=s.get(n);r||(r={id:t.bridge?t.id:null,bridge:t.bridge,unresolved:!t.bridge,ys:[],count:0},s.set(n,r)),r.count++,r.ys.push(e.y)}let c=[...s.values()].map(e=>({...e,bary:e.ys.reduce((e,t)=>e+t,0)/e.ys.length}));c.sort((e,t)=>e.bary-t.bary||e.unresolved-t.unresolved||(e.bridge&&t.bridge?a(e.bridge,t.bridge):0));let p=i.length?i[i.length-1].y:16,m=c.length>1?Math.max(18,(p-16)/(c.length-1)):0,g=Math.max(4,Math.floor((o-10-42)/6));c.forEach((e,t)=>{if(e.x=o,e.y=1===c.length?(16+p)/2:16+t*m,e.r=5,e.unresolved)e.label=d(`can't be named (${e.count})`,g);else{let t=e.bridge.name||"";e.label=t.length<=g?t:d(f(t),g)}delete e.ys});let h=new Map(c.map(e=>[e.unresolved?u:e.id,e])),y=[];for(let e of i){let t=new Set;e.p.routes.forEach((n,r)=>{let o=n.bridge?n.id:u;if(t.has(o))return;t.add(o);let l=h.get(o);y.push({key:e.key,bridgeId:l.id,primary:0===r&&!l.unresolved,unresolved:l.unresolved,tier:l.bridge?.tier??null,x1:l.x,y1:l.y,x2:e.x,y2:e.y})})}let w=Math.max(p,c.length?c[c.length-1].y:0),b=i.length?Math.ceil(w+16):0,S={x:20,y:i.length?(16+Math.max(p,w))/2:16,r:14},v=c.map(e=>({id:e.id,x1:S.x,y1:S.y,x2:e.x,y2:e.y}));return{width:t,height:b,you:S,people:i,bridges:c,links:y,spokes:v}}])},5258,e=>{"use strict";e.s(["TIER_COLORS",0,{S:"#f6c344",A:"#a78bfa",B:"#60a5fa",C:"#94a3b8",D:"#6b7280"},"TIER_COLORS_CLASSIC",0,{S:"#FFD700",A:"#9B59B6",B:"#3498DB",C:"#95A5A6",D:"#BDC3C7"},"TIER_ORDER",0,["S","A","B","C","D"],"TIER_RING_RADIUS",0,{S:150,A:230,B:310,C:390,D:470},"initialsFor",0,function(e){let t=String(e||"").trim().split(/\s+/).filter(Boolean);return 0===t.length?"?":(t[0].charAt(0)+(t.length>1?t[t.length-1].charAt(0):"")).toUpperCase()}])}]);