six-degrees 0.4.10 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (414) 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 +9 -9
  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 +1 -1
  19. package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/admin-update/route.js +1 -1
  21. package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/bridges/route.js +1 -1
  23. package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/bulk-import/route.js +1 -1
  25. package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js +1 -1
  27. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/company-scores/route.js +1 -1
  29. package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/connections/route.js +1 -1
  31. package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/delete-cluster/route.js +1 -1
  38. package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/ingest/route.js +1 -1
  40. package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/network/route.js +1 -1
  42. package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/notifications/route.js +1 -1
  44. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/outreach/route.js +1 -1
  46. package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/queue/route.js +1 -1
  48. package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/scraper/route.js +3 -2
  50. package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/api/settings/route.js +1 -1
  52. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js +1 -1
  54. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js +1 -1
  56. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/api/setup-profile/route.js +1 -1
  58. package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
  59. package/.next/standalone/.next/server/app/api/social/crm/route/app-paths-manifest.json +3 -0
  60. package/.next/standalone/.next/server/app/api/social/crm/route/build-manifest.json +12 -0
  61. package/.next/standalone/.next/server/app/api/social/crm/route/server-reference-manifest.json +4 -0
  62. package/.next/standalone/.next/server/app/api/social/crm/route.js +10 -0
  63. package/.next/standalone/.next/server/app/api/social/crm/route.js.map +5 -0
  64. package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -0
  65. package/.next/standalone/.next/server/app/api/social/crm/route_client-reference-manifest.js +3 -0
  66. package/.next/standalone/.next/server/app/api/social/messages/route.js +4 -3
  67. package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
  68. package/.next/standalone/.next/server/app/api/social/route.js +4 -3
  69. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/api/unlock/route.js +1 -1
  71. package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
  72. package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  73. package/.next/standalone/.next/server/app/api/update-images/route.js +1 -1
  74. package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
  75. package/.next/standalone/.next/server/app/api/users/route.js +1 -1
  76. package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/import.html +1 -1
  81. package/.next/standalone/.next/server/app/import.rsc +15 -15
  82. package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +15 -15
  83. package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
  84. package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +14 -14
  85. package/.next/standalone/.next/server/app/index.html +1 -1
  86. package/.next/standalone/.next/server/app/index.rsc +15 -15
  87. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  88. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  89. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  90. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  91. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  92. package/.next/standalone/.next/server/app/launch.html +2 -2
  93. package/.next/standalone/.next/server/app/launch.rsc +15 -15
  94. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +15 -15
  95. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
  96. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +14 -14
  97. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  98. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  99. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/paths.html +1 -1
  102. package/.next/standalone/.next/server/app/paths.rsc +15 -15
  103. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +15 -15
  104. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
  105. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +14 -14
  106. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/profile.html +1 -1
  109. package/.next/standalone/.next/server/app/profile.rsc +15 -15
  110. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +15 -15
  111. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
  112. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +14 -14
  113. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/queue.html +1 -1
  116. package/.next/standalone/.next/server/app/queue.rsc +15 -15
  117. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +15 -15
  118. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
  119. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +14 -14
  120. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/scores.html +1 -1
  123. package/.next/standalone/.next/server/app/scores.rsc +15 -15
  124. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +15 -15
  125. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
  126. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +14 -14
  127. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  128. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  129. package/.next/standalone/.next/server/app/settings.html +1 -1
  130. package/.next/standalone/.next/server/app/settings.rsc +15 -15
  131. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +15 -15
  132. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  133. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +14 -14
  134. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  135. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  136. package/.next/standalone/.next/server/app/setup.html +1 -1
  137. package/.next/standalone/.next/server/app/setup.rsc +15 -15
  138. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +15 -15
  139. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  140. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +14 -14
  141. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  142. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  143. package/.next/standalone/.next/server/app/social.html +1 -1
  144. package/.next/standalone/.next/server/app/social.rsc +15 -15
  145. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +15 -15
  146. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
  147. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +14 -14
  148. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  149. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__0bat8nx._.js → [root-of-the-server]__05_3-22._.js} +2 -2
  150. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
  151. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__06mi9k2._.js → [root-of-the-server]__13dx4sd._.js} +7 -2
  152. package/.next/standalone/.next/server/chunks/[root-of-the-server]__15wc9e-._.js +3 -0
  153. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1kbl21f._.js +1 -1
  154. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +8 -0
  155. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20rwfdw._.js +8 -0
  156. package/.next/standalone/.next/server/chunks/_072jl0y._.js +1 -1
  157. package/.next/standalone/.next/server/chunks/_0ea9qwy._.js +1 -1
  158. package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
  159. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
  160. package/.next/standalone/.next/server/chunks/_1iwkh8t._.js +1 -1
  161. package/.next/standalone/.next/server/chunks/_1oqfuh8._.js +3 -0
  162. package/.next/standalone/.next/server/chunks/_1xh07bp._.js +1 -1
  163. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_social_crm_route_actions_0d1aflv.js +3 -0
  164. package/.next/standalone/.next/server/chunks/lib_0851sk0._.js +8 -0
  165. package/.next/standalone/.next/server/chunks/lib_1q7p2ro._.js +8 -0
  166. package/.next/standalone/.next/server/chunks/lib_1r6l86l._.js +8 -0
  167. package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +8 -8
  168. package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +3 -0
  169. package/.next/standalone/.next/server/chunks/lib_rpc_04s8mzr.js +3 -0
  170. package/.next/standalone/.next/server/chunks/lib_rpc_053z7as.js +3 -0
  171. package/.next/standalone/.next/server/chunks/lib_rpc_0b_-2te.js +3 -0
  172. package/.next/standalone/.next/server/chunks/lib_rpc_0dhbxdm.js +3 -0
  173. package/.next/standalone/.next/server/chunks/lib_rpc_0dxlk31.js +3 -0
  174. package/.next/standalone/.next/server/chunks/lib_rpc_0f8b-qc.js +3 -0
  175. package/.next/standalone/.next/server/chunks/lib_rpc_0pzie7_.js +3 -0
  176. package/.next/standalone/.next/server/chunks/lib_rpc_0r76fq_.js +3 -0
  177. package/.next/standalone/.next/server/chunks/lib_rpc_0ut7pjp.js +3 -0
  178. package/.next/standalone/.next/server/chunks/lib_rpc_15zyqaz.js +3 -0
  179. package/.next/standalone/.next/server/chunks/lib_rpc_18zpjtq.js +3 -0
  180. package/.next/standalone/.next/server/chunks/lib_rpc_1a8xkiz.js +3 -0
  181. package/.next/standalone/.next/server/chunks/lib_rpc_1e_55xo.js +3 -0
  182. package/.next/standalone/.next/server/chunks/lib_rpc_1oxfd1_.js +3 -0
  183. package/.next/standalone/.next/server/chunks/lib_rpc_1s0lod0.js +3 -0
  184. package/.next/standalone/.next/server/chunks/lib_scoring_1-e4ur0.js +1 -1
  185. package/.next/standalone/.next/server/chunks/ssr/_01kacen._.js +3 -0
  186. package/.next/standalone/.next/server/chunks/ssr/_03l7vge._.js +3 -0
  187. package/.next/standalone/.next/server/chunks/ssr/{_1ap1tu_._.js → _0gtv9jb._.js} +2 -2
  188. package/.next/standalone/.next/server/chunks/ssr/_0jdkqgi._.js +3 -0
  189. package/.next/standalone/.next/server/chunks/ssr/_0xi-fbs._.js +3 -0
  190. package/.next/standalone/.next/server/chunks/ssr/_0xmwmfv._.js +3 -0
  191. package/.next/standalone/.next/server/chunks/ssr/_1-b9hj7._.js +9 -0
  192. package/.next/standalone/.next/server/chunks/ssr/_112ewem._.js +3 -0
  193. package/.next/standalone/.next/server/chunks/ssr/_16ab63q._.js +3 -0
  194. package/.next/standalone/.next/server/chunks/ssr/_1fxm0-s._.js +3 -0
  195. package/.next/standalone/.next/server/chunks/ssr/_1ra1d3r._.js +9 -0
  196. package/.next/standalone/.next/server/chunks/ssr/app_141w189._.js +3 -0
  197. package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +22 -10
  198. package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +2 -2
  199. package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
  200. package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +6 -5
  201. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
  202. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +19 -3
  203. package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +1 -1
  204. package/.next/standalone/.next/server/chunks/ssr/lib_0i8v-s3._.js +1 -1
  205. package/.next/standalone/.next/server/chunks/ssr/lib_13rapwj._.js +3 -0
  206. package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +3 -0
  207. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  208. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  209. package/.next/standalone/.next/server/pages/404.html +1 -1
  210. package/.next/standalone/.next/server/pages/500.html +1 -1
  211. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  212. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  213. package/.next/standalone/.next/static/chunks/03bziijw5srol.js +1 -0
  214. package/.next/standalone/.next/static/chunks/0bgq8wmopl_ig.js +7 -0
  215. package/.next/standalone/.next/static/chunks/0ezus6p2eb-vg.js +1 -0
  216. package/.next/standalone/.next/static/chunks/0g_fy2034bp0x.js +34 -0
  217. package/.next/standalone/.next/static/chunks/0q5dru4q6gxl5.js +22 -0
  218. package/.next/standalone/.next/static/chunks/0w-byiwb2zax8.js +2 -0
  219. package/.next/standalone/.next/static/chunks/1g7jcovdejc9-.js +1 -0
  220. package/.next/standalone/.next/static/chunks/1i51yylxdzht1.js +1 -0
  221. package/.next/{static/chunks/1xptlvtcz6654.css → standalone/.next/static/chunks/1x_ysly42-teq.css} +1 -1
  222. package/.next/standalone/.next/static/chunks/1zf8swaasjf1e.js +43 -0
  223. package/.next/standalone/.next/static/chunks/2rqtpccruavf2.js +1 -0
  224. package/.next/standalone/.next/static/chunks/2wgz9ietkqqe6.js +1 -0
  225. package/.next/standalone/.next/static/chunks/30x3oq_st7a5r.js +1 -0
  226. package/.next/standalone/.next/static/chunks/355ryio1b7sm1.js +1 -0
  227. package/.next/standalone/.next/static/chunks/3ap5hgma7n0o7.js +1 -0
  228. package/.next/standalone/.next/static/chunks/3fci6qi39-1n5.js +1 -0
  229. package/.next/standalone/.next/static/chunks/{24tvdun1cb3g1.js → 3sowbvbaj1s6n.js} +1 -1
  230. package/.next/standalone/CHANGELOG.md +235 -0
  231. package/.next/standalone/app/api/data/export/route.js +2 -1
  232. package/.next/standalone/app/api/ingest/route.js +40 -1
  233. package/.next/standalone/app/api/scraper/route.js +12 -2
  234. package/.next/standalone/app/api/settings/sector-preview/route.js +2 -1
  235. package/.next/standalone/app/api/social/crm/route.js +37 -0
  236. package/.next/standalone/app/api/social/messages/route.js +44 -8
  237. package/.next/standalone/app/api/social/route.js +80 -22
  238. package/.next/standalone/app/components/AppTabs.js +59 -0
  239. package/.next/standalone/app/components/ChainView.js +303 -89
  240. package/.next/standalone/app/components/CirclePanel.js +162 -0
  241. package/.next/standalone/app/components/CompanyScores.js +2 -2
  242. package/.next/standalone/app/components/FieldStep.js +4 -4
  243. package/.next/standalone/app/components/FilterPanel.js +121 -183
  244. package/.next/standalone/app/components/ForceGraph.js +41 -3
  245. package/.next/standalone/app/components/GalaxyLab.js +26 -31
  246. package/.next/standalone/app/components/LegacyScoresCard.js +2 -2
  247. package/.next/standalone/app/components/MapControls.js +154 -0
  248. package/.next/standalone/app/components/NoteDetail.js +118 -0
  249. package/.next/standalone/app/components/PathsAnalyzer.js +147 -110
  250. package/.next/standalone/app/components/PeopleMap.js +308 -0
  251. package/.next/standalone/app/components/ScanRadar.js +129 -0
  252. package/.next/standalone/app/components/ScanStatusBar.js +72 -27
  253. package/.next/standalone/app/components/SeparationView.js +626 -118
  254. package/.next/standalone/app/components/Sidebar.js +28 -2
  255. package/.next/standalone/app/components/settings/DataSection.js +12 -3
  256. package/.next/standalone/app/components/settings/NetworkHealthSection.js +1 -1
  257. package/.next/standalone/app/components/settings/SectorSection.js +2 -2
  258. package/.next/standalone/app/components/settings/TierSection.js +1 -1
  259. package/.next/standalone/app/components/settings/TitleSection.js +149 -0
  260. package/.next/standalone/app/components/views.js +15 -14
  261. package/.next/standalone/app/globals.css +11 -0
  262. package/.next/standalone/app/page.js +89 -156
  263. package/.next/standalone/app/paths/page.js +39 -27
  264. package/.next/standalone/app/profile/page.js +33 -5
  265. package/.next/standalone/app/queue/page.js +56 -34
  266. package/.next/standalone/app/scores/page.js +16 -66
  267. package/.next/standalone/app/settings/page.js +27 -13
  268. package/.next/standalone/app/setup/page.js +298 -205
  269. package/.next/standalone/app/social/Crm.js +683 -0
  270. package/.next/standalone/app/social/SocialHub.js +374 -0
  271. package/.next/standalone/app/social/Thread.js +90 -0
  272. package/.next/standalone/app/social/page.js +10 -351
  273. package/.next/standalone/lib/chain-layout.js +105 -35
  274. package/.next/standalone/lib/data-export.js +10 -4
  275. package/.next/standalone/lib/data-folder.js +9 -0
  276. package/.next/standalone/lib/data-import.js +13 -3
  277. package/.next/standalone/lib/degrees.js +0 -6
  278. package/.next/standalone/lib/dot-rings.js +25 -0
  279. package/.next/standalone/lib/galaxy-lab.js +65 -6
  280. package/.next/standalone/lib/ingest.js +2 -0
  281. package/.next/standalone/lib/island.js +40 -0
  282. package/.next/standalone/lib/linkedin-export.js +267 -46
  283. package/.next/standalone/lib/linkedin-limits.js +6 -2
  284. package/.next/standalone/lib/map-heat.js +20 -0
  285. package/.next/standalone/lib/network-health.js +1 -1
  286. package/.next/standalone/lib/notifications.js +121 -0
  287. package/.next/standalone/lib/people-map.js +82 -0
  288. package/.next/standalone/lib/rarity.js +45 -3
  289. package/.next/standalone/lib/reach.js +7 -6
  290. package/.next/standalone/lib/rpc.js +15 -4
  291. package/.next/standalone/lib/scan-pace.js +46 -0
  292. package/.next/standalone/lib/scoring.js +39 -8
  293. package/.next/standalone/lib/scraper-client.js +19 -6
  294. package/.next/standalone/lib/sector-focus.js +4 -4
  295. package/.next/standalone/lib/separation.js +137 -10
  296. package/.next/standalone/lib/settings-effects.js +20 -11
  297. package/.next/standalone/lib/settings.js +3 -0
  298. package/.next/standalone/lib/social-crm.js +415 -0
  299. package/.next/standalone/lib/social-store.js +13 -6
  300. package/.next/standalone/lib/tier-grid.js +99 -0
  301. package/.next/standalone/lib/title-ranking.js +83 -0
  302. package/.next/standalone/package-lock.json +2 -2
  303. package/.next/standalone/package.json +1 -1
  304. package/.next/standalone/scripts/scrape.py +177 -35
  305. package/.next/static/chunks/03bziijw5srol.js +1 -0
  306. package/.next/static/chunks/0bgq8wmopl_ig.js +7 -0
  307. package/.next/static/chunks/0ezus6p2eb-vg.js +1 -0
  308. package/.next/static/chunks/0g_fy2034bp0x.js +34 -0
  309. package/.next/static/chunks/0q5dru4q6gxl5.js +22 -0
  310. package/.next/static/chunks/0w-byiwb2zax8.js +2 -0
  311. package/.next/static/chunks/1g7jcovdejc9-.js +1 -0
  312. package/.next/static/chunks/1i51yylxdzht1.js +1 -0
  313. package/.next/{standalone/.next/static/chunks/1xptlvtcz6654.css → static/chunks/1x_ysly42-teq.css} +1 -1
  314. package/.next/static/chunks/1zf8swaasjf1e.js +43 -0
  315. package/.next/static/chunks/2rqtpccruavf2.js +1 -0
  316. package/.next/static/chunks/2wgz9ietkqqe6.js +1 -0
  317. package/.next/static/chunks/30x3oq_st7a5r.js +1 -0
  318. package/.next/static/chunks/355ryio1b7sm1.js +1 -0
  319. package/.next/static/chunks/3ap5hgma7n0o7.js +1 -0
  320. package/.next/static/chunks/3fci6qi39-1n5.js +1 -0
  321. package/.next/static/chunks/{24tvdun1cb3g1.js → 3sowbvbaj1s6n.js} +1 -1
  322. package/CHANGELOG.md +235 -0
  323. package/lib/chain-layout.js +105 -35
  324. package/lib/data-export.js +10 -4
  325. package/lib/data-folder.js +9 -0
  326. package/lib/data-import.js +13 -3
  327. package/lib/degrees.js +0 -6
  328. package/lib/dot-rings.js +25 -0
  329. package/lib/galaxy-lab.js +65 -6
  330. package/lib/ingest.js +2 -0
  331. package/lib/island.js +40 -0
  332. package/lib/linkedin-export.js +267 -46
  333. package/lib/linkedin-limits.js +6 -2
  334. package/lib/map-heat.js +20 -0
  335. package/lib/network-health.js +1 -1
  336. package/lib/notifications.js +121 -0
  337. package/lib/people-map.js +82 -0
  338. package/lib/rarity.js +45 -3
  339. package/lib/reach.js +7 -6
  340. package/lib/rpc.js +15 -4
  341. package/lib/scan-pace.js +46 -0
  342. package/lib/scoring.js +39 -8
  343. package/lib/scraper-client.js +19 -6
  344. package/lib/sector-focus.js +4 -4
  345. package/lib/separation.js +137 -10
  346. package/lib/settings-effects.js +20 -11
  347. package/lib/settings.js +3 -0
  348. package/lib/social-crm.js +415 -0
  349. package/lib/social-store.js +13 -6
  350. package/lib/tier-grid.js +99 -0
  351. package/lib/title-ranking.js +83 -0
  352. package/package.json +1 -1
  353. package/scripts/scrape.py +177 -35
  354. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08f5awg._.js +0 -8
  355. package/.next/standalone/.next/server/chunks/[root-of-the-server]__17hjtzl._.js +0 -8
  356. package/.next/standalone/.next/server/chunks/[root-of-the-server]__20tmem7._.js +0 -3
  357. package/.next/standalone/.next/server/chunks/lib_18cr1gi._.js +0 -8
  358. package/.next/standalone/.next/server/chunks/lib_rpc_03i8xef.js +0 -3
  359. package/.next/standalone/.next/server/chunks/lib_rpc_08fc3rp.js +0 -3
  360. package/.next/standalone/.next/server/chunks/lib_rpc_08r2t_q.js +0 -3
  361. package/.next/standalone/.next/server/chunks/lib_rpc_0btpv1t.js +0 -3
  362. package/.next/standalone/.next/server/chunks/lib_rpc_0c9d9ti.js +0 -8
  363. package/.next/standalone/.next/server/chunks/lib_rpc_0cm2ev3.js +0 -3
  364. package/.next/standalone/.next/server/chunks/lib_rpc_0iovswz.js +0 -3
  365. package/.next/standalone/.next/server/chunks/lib_rpc_0is8flp.js +0 -3
  366. package/.next/standalone/.next/server/chunks/lib_rpc_0v8ajtd.js +0 -3
  367. package/.next/standalone/.next/server/chunks/lib_rpc_0xgmvvt.js +0 -3
  368. package/.next/standalone/.next/server/chunks/lib_rpc_144mzbf.js +0 -3
  369. package/.next/standalone/.next/server/chunks/lib_rpc_1bggi0n.js +0 -3
  370. package/.next/standalone/.next/server/chunks/lib_rpc_1dkcu9f.js +0 -3
  371. package/.next/standalone/.next/server/chunks/lib_rpc_1o0jb6w.js +0 -3
  372. package/.next/standalone/.next/server/chunks/ssr/_0c_y09g._.js +0 -3
  373. package/.next/standalone/.next/server/chunks/ssr/_0ezj4e0._.js +0 -3
  374. package/.next/standalone/.next/server/chunks/ssr/_0j4-lc3._.js +0 -3
  375. package/.next/standalone/.next/server/chunks/ssr/_0l8cxmo._.js +0 -3
  376. package/.next/standalone/.next/server/chunks/ssr/_0xkur4p._.js +0 -3
  377. package/.next/standalone/.next/server/chunks/ssr/_14iv_zy._.js +0 -3
  378. package/.next/standalone/.next/server/chunks/ssr/_15x6q32._.js +0 -3
  379. package/.next/standalone/.next/server/chunks/ssr/_1errbuf._.js +0 -3
  380. package/.next/standalone/.next/server/chunks/ssr/_212xw8q._.js +0 -3
  381. package/.next/standalone/.next/server/chunks/ssr/app_components_19c2d9c._.js +0 -3
  382. package/.next/standalone/.next/server/chunks/ssr/app_scores_page_09wepvv.js +0 -3
  383. package/.next/standalone/.next/static/chunks/07dyt47mp4s9-.js +0 -1
  384. package/.next/standalone/.next/static/chunks/0a5iadnmt9u9k.js +0 -1
  385. package/.next/standalone/.next/static/chunks/160wjb73ddwqd.js +0 -6
  386. package/.next/standalone/.next/static/chunks/1c_n0973t07l0.js +0 -2
  387. package/.next/standalone/.next/static/chunks/1e1n0kkz-psdb.js +0 -1
  388. package/.next/standalone/.next/static/chunks/206rm6j42gl_a.js +0 -1
  389. package/.next/standalone/.next/static/chunks/236f0jtp68j_h.js +0 -1
  390. package/.next/standalone/.next/static/chunks/2coxzjm_k6ilr.js +0 -1
  391. package/.next/standalone/.next/static/chunks/2kfhc58df2xyo.js +0 -1
  392. package/.next/standalone/.next/static/chunks/2pw6_osz1n_te.js +0 -1
  393. package/.next/standalone/.next/static/chunks/39hr8d-b2ibtw.js +0 -31
  394. package/.next/standalone/.next/static/chunks/3zw8bv7-mc4n6.js +0 -33
  395. package/.next/standalone/app/components/OrbitGraph.js +0 -737
  396. package/.next/standalone/app/social/Conversations.js +0 -246
  397. package/.next/static/chunks/07dyt47mp4s9-.js +0 -1
  398. package/.next/static/chunks/0a5iadnmt9u9k.js +0 -1
  399. package/.next/static/chunks/160wjb73ddwqd.js +0 -6
  400. package/.next/static/chunks/1c_n0973t07l0.js +0 -2
  401. package/.next/static/chunks/1e1n0kkz-psdb.js +0 -1
  402. package/.next/static/chunks/206rm6j42gl_a.js +0 -1
  403. package/.next/static/chunks/236f0jtp68j_h.js +0 -1
  404. package/.next/static/chunks/2coxzjm_k6ilr.js +0 -1
  405. package/.next/static/chunks/2kfhc58df2xyo.js +0 -1
  406. package/.next/static/chunks/2pw6_osz1n_te.js +0 -1
  407. package/.next/static/chunks/39hr8d-b2ibtw.js +0 -31
  408. package/.next/static/chunks/3zw8bv7-mc4n6.js +0 -33
  409. /package/.next/standalone/.next/static/{7zWJnSkfSoRhRsqY6ZKtD → I-cj79yE2IZ8taX2dZGp3}/_buildManifest.js +0 -0
  410. /package/.next/standalone/.next/static/{7zWJnSkfSoRhRsqY6ZKtD → I-cj79yE2IZ8taX2dZGp3}/_clientMiddlewareManifest.js +0 -0
  411. /package/.next/standalone/.next/static/{7zWJnSkfSoRhRsqY6ZKtD → I-cj79yE2IZ8taX2dZGp3}/_ssgManifest.js +0 -0
  412. /package/.next/static/{7zWJnSkfSoRhRsqY6ZKtD → I-cj79yE2IZ8taX2dZGp3}/_buildManifest.js +0 -0
  413. /package/.next/static/{7zWJnSkfSoRhRsqY6ZKtD → I-cj79yE2IZ8taX2dZGp3}/_clientMiddlewareManifest.js +0 -0
  414. /package/.next/static/{7zWJnSkfSoRhRsqY6ZKtD → I-cj79yE2IZ8taX2dZGp3}/_ssgManifest.js +0 -0
@@ -0,0 +1,8 @@
1
+ module.exports=[73253,e=>{"use strict";e.i(68835);let a=[{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}],s={key:"unknown",label:"Unclear",color:"#555c66"},r=Object.fromEntries([...a,s].map(e=>[e.key,e]));e.s(["INDUSTRIES",0,a,"UNKNOWN_INDUSTRY",0,s,"industryByKey",0,e=>r[e]||s,"industryKeyOf",0,(e,r)=>(function(e,r){for(let s of[e,r]){if(!s)continue;let e=a.find(e=>e.words.test(s));if(e)return e}return s})(e,r).key])},33471,51373,76407,e=>{"use strict";var a=e.i(66680),s=e.i(88431),r=e.i(68835),t=e.i(25232),i=e.i(73253),n=e.i(14223);let o={sectorFocus:n.SECTOR_FOCUS_SETTING,fieldAsked:n.FIELD_ASKED_SETTING,tierScale:r.TIER_SCALE_SETTING,titleRanking:t.TITLE_RANKING_SETTING},c="settings";class l extends Error{}function u(e){let a=e.prepare("SELECT value FROM app_meta WHERE key = ?").get(c);if(!a?.value)return{};try{let e=JSON.parse(a.value);if(e&&"object"==typeof e&&!Array.isArray(e))return e}catch{}return{}}function d(e,a=o){let s=u(e),r={};for(let[e,t]of Object.entries(a)){let a=t.default;if(Object.hasOwn(s,e))try{a=t.parse(s[e])}catch{a=t.default}r[e]=a}return r}e.s(["SettingsError",0,l,"readSettings",0,d,"writeSettings",0,function(e,a,s=o){if(!a||"object"!=typeof a||Array.isArray(a))throw new l("Settings must be an object.");let r={};for(let[e,t]of Object.entries(a)){let a=Object.hasOwn(s,e)?s[e]:null;if(!a)throw new l(`There is no setting called '${e}'.`);try{r[e]=a.parse(t)}catch(e){throw new l(e.message)}}return e.prepare(`INSERT INTO app_meta (key, value) VALUES (?, ?)
2
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(c,JSON.stringify({...u(e),...r})),d(e,s)}],51373);let m="legacy_scores_offer";e.s(["LEGACY_OFFER_KEY",0,m,"LEGACY_SCORES",0,[["Snap",9,/^(snap|snapchat)( inc)?( (specs|spectacles|(mena|emea|apac|latam|north america)( region)?))?$/,"media"],["Anduril",9,/^anduril( industries)?$/,"defense"],["Polymarket",9,/^polymarket$/,"finance"],["Kalshi",9,/^kalshi$/,"finance"],["Databricks",8,/^databricks$/,"tech"],["Figma",8,/^figma$/,"tech"],["Scale AI",8,/^(scale ai|scale\.ai|scale\.com)$/,"tech"],["Whatnot",8,/^whatnot$/,"consumer"],["Egon Zehnder",8,/^egon zehnder( international)?$/,"consulting"],["Heidrick & Struggles",8,/^heidrick( (&|and) struggles)?$/,"consulting"],["MrBeast",8,/^(mrbeast|beast industries)$/,"media"],["Whop",7,/^whop$/,"tech"],["Hims & Hers",7,/^hims( (&|and) hers( health)?)?$/,"health"],["Riot Games",7,/^riot games$/,"entertainment"],["Notion",7,/^notion( labs)?$/,"tech"],["Vercel",7,/^vercel$/,"tech"],["Plaid",7,/^plaid$/,"finance"],["Brex",7,/^brex$/,"finance"],["Ramp",7,/^ramp$/,"finance"],["Mercury",7,/^mercury$/,"finance"],["Chime",7,/^chime$/,"finance"],["U.S. Space Force",7,/^((u\.?s\.?|united states) )?space force$/,"defense"],["Grindr",6,/^grindr$/,"tech"],["Genius Sports",6,/^genius sports( group)?$/,"entertainment"],["Later",6,/^later$/,"media"],["Hard Rock Digital",6,/^hard rock digital$/,"entertainment"],["Vanta",6,/^vanta$/,"tech"],["Kaseya",6,/^kaseya$/,"tech"],["Havas",6,/^havas\b/,"media"],["VaynerMedia",6,/^vayner ?media$/,"media"],["AdventHealth",6,/^adventhealth\b/,"health"],["University of Florida",6,/^(uf|university of florida)$/,"education"],["The Athletic",6,/^the athletic( media( company)?)?$/,"media"],["UCF",5,/^(ucf|university of central florida)\b/,"education"]]],76407);var p=e.i(56029),g=e.i(19072);let h=function({known:e=r.KNOWN_COMPANIES,data:s=r.COMPANY_DATA,industries:t=i.INDUSTRIES,rules:n=r.RULE_TABLES}={}){return(0,a.createHash)("sha256").update(JSON.stringify([e.map(([e,a,s,r])=>[e,a,String(s),r]),s.map(([e,a,s,r])=>[e,a,String(s),r]),t.map(({key:e,label:a,words:s})=>[e,a,String(s)]),n],(e,a)=>a instanceof RegExp?String(a):a instanceof Set?[...a]:a)).digest("hex").slice(0,16)}();function f(e=(0,s.getDb)()){return new Map(e.prepare("SELECT name, score FROM company_scores").all().map(e=>[e.name,e.score]))}function y(e=(0,s.getDb)()){return d(e,{sectorFocus:n.SECTOR_FOCUS_SETTING}).sectorFocus}function b(e=(0,s.getDb)()){return d(e,{tierScale:r.TIER_SCALE_SETTING}).tierScale}function k(e=(0,s.getDb)()){let a=d(e,{titleRanking:t.TITLE_RANKING_SETTING}).titleRanking;return(0,t.isDefaultRanking)(a)?null:a}function v(e=(0,s.getDb)(),{withPeople:a=!1}={}){return e.prepare(`SELECT id, degree, headline, role, company, scanned_company, profile_url, source_connection_id${a?", name":""}
3
+ FROM linkedin_connections`).all()}function w(e){return(0,r.readNetwork)(e,{industryOf:i.industryKeyOf,sectorsOf:(0,p.sectorMatcher)(),groupOf:p.sectorGroup})}function $({compareWith:e}={}){let a=(0,s.getDb)(),i=v(a),o=f(a),c=y(a),l=b(a),u=k(a),d=w(i),{scores:p}=(0,r.scoreNetwork)(i,{overrides:o,focus:c,tierScale:l,titles:u,read:d}),x=void 0===e?null:(0,n.previewSectorFocus)(i,{overrides:o,read:d,from:e,to:c,tierScale:l,titles:u,examples:0}),S=a.prepare(`UPDATE linkedin_connections SET seniority_score = ?, company_prestige_score = ?, power_score = ?, tier = ?,
4
+ score_why = ?, circle_power = ?, circle_s_count = ?, circle_a_count = ?, circle_elite_pct = ?, is_catalyst = ?, catalyst_score = ?, updated_at = ?
5
+ WHERE id = ?`),j=(0,s.nowIso)();a.exec("BEGIN");try{for(let e of(!a.prepare("SELECT 1 FROM app_meta WHERE key = 'scoring_list'").get()&&a.prepare("SELECT 1 FROM linkedin_connections WHERE tier IS NOT NULL LIMIT 1").get()&&a.prepare("INSERT OR IGNORE INTO app_meta (key, value) VALUES (?, 'open')").run(m),i)){let a=p.get(e.id),s=a.circle;S.run(a.title.points,a.companyScore,a.power,a.tier,(0,r.explainScore)(a,a.boost,{sectorLabel:g.sectorLabel}),s?Math.round(100*s.circlePower)/100:0,s?.sCount||0,s?.aCount||0,s?Math.round(100*s.elitePct)/100:0,+!!s?.isCatalyst,s?.isCatalyst?s.sCount+s.aCount:0,j,e.id)}let e=a.prepare("INSERT INTO app_meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value");e.run("scoring_version",String(r.SCORING_VERSION)),e.run("scoring_list",h),e.run("scoring_focus",(0,n.focusFingerprint)(c)),e.run("scoring_tiers",l),e.run("scoring_titles",(0,t.rankingFingerprint)(u||void 0)),a.exec("COMMIT")}catch(e){throw a.exec("ROLLBACK"),e}return x?{scored:i.length,people:x.people,up:x.up,down:x.down}:{scored:i.length}}async function x(e,a={}){try{if("score_new_connections"===e||"rescore_all"===e)return{data:$(),error:null};if("rescore_if_stale"===e){let e,a;return{data:(e=(0,s.getDb)(),(a=a=>e.prepare("SELECT value FROM app_meta WHERE key = ?").get(a)?.value)("scoring_version")===String(r.SCORING_VERSION)&&a("scoring_list")===h&&a("scoring_focus")===(0,n.focusFingerprint)(y(e))&&a("scoring_tiers")===b(e)&&(a("scoring_titles")??"none")===(0,t.rankingFingerprint)(k(e)||void 0)?{scored:0}:$()),error:null}}if("increment_xp"===e)return{data:function({amount:e=0}={}){let a=(0,s.getDb)(),r=a.prepare("SELECT id, xp FROM user_stats LIMIT 1").get();if(!r){let s=crypto.randomUUID();return a.prepare("INSERT INTO user_stats (id, xp) VALUES (?, ?)").run(s,e),{xp:e}}let t=(r.xp||0)+e;return a.prepare("UPDATE user_stats SET xp = ?, last_active_at = ? WHERE id = ?").run(t,(0,s.nowIso)(),r.id),{xp:t}}(a),error:null};if("exec_sql"===e)return{data:null,error:{message:"exec_sql is not supported in the local build"}};return{data:null,error:{message:`Unknown function: ${e}`}}}catch(e){return{data:null,error:{message:e.message}}}}e.s(["companyOverrides",0,f,"readForScoring",0,w,"rescoreAll",0,$,"runRpc",0,x,"scoringRows",0,v,"sectorFocusOf",0,y,"setCompanyScores",0,function(e,a){let r=e.prepare(`INSERT INTO company_scores (id, name, score, updated_at) VALUES (?, ?, ?, ?)
6
+ ON CONFLICT(name) DO UPDATE SET score = excluded.score, updated_at = excluded.updated_at`),t=(0,s.nowIso)();for(let[e,i]of a)r.run((0,s.newId)(),e,i,t)},"tierScaleOf",0,b,"titleRankingOf",0,k],33471)},14223,19072,56029,e=>{"use strict";var a=e.i(68835),s=e.i(73253);let r=new Map(s.INDUSTRIES.map(e=>[e.key,e.color])),t=new Map([...s.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,[a,t,i]])=>[e,Object.freeze({key:e,label:a,color:r.get(t)||s.UNKNOWN_INDUSTRY.color,group:t,kind:i})])]);e.s(["sectorLabel",0,e=>t.get(e)?.label],19072);let i=["fan(s)","enthusiast(s)","lover(s)","junkie(s)","nerd(s)","buff(s)","addict(s)","hobbyist(s)","geek(s)","aficionado(s)"],n=[{key:"software",label:"Software & SaaS",group:"tech",kind:"function",words:["saas","b2b saas","paas","iaas","software as a service","software company","software companies","software startup(s)","software firm(s)","software vendor(s)","dev shop(s)"],roles:["software engineer(s)","software developer(s)","software engineering","swe","sde","full stack","fullstack","front end developer(s)","frontend developer(s)","front end engineer(s)","frontend engineer(s)","back end developer(s)","backend developer(s)","back end engineer(s)","backend engineer(s)","web developer(s)","mobile developer(s)","ios developer(s)","ios engineer(s)","android developer(s)","android engineer(s)","app developer(s)","devops","site reliability","sre","platform engineering","cloud engineer(s)","cloud architect(s)","solutions architect(s)","developer relations","devrel","developer advocate(s)","qa engineer(s)","sdet","test automation","javascript","typescript","kubernetes","open source"],names:["software"],companies:["microsoft","google","meta$","apple$","linkedin","salesforce","oracle$","adobe$","sap$","servicenow","workday","atlassian","hubspot","zoom$","zoom video","slack$","dropbox","box$","twilio","datadog","mongodb","github","gitlab","autodesk","intuit","docusign","zendesk","asana$","notion$","notion labs","figma","canva","airtable","monday com","squarespace","wix$","wix com","webflow","vercel","netlify","red hat","vmware","citrix","jetbrains","postman$","confluent","hashicorp","new relic","pagerduty","freshworks","zoho","calendly","clickup","smartsheet","retool","supabase","replit","procore","veeva","epic systems","klaviyo","rippling","gusto$","deel$","discord"]},{key:"ai-data",label:"AI & Data",group:"tech",kind:"function",words:["ai lab(s)","ai research lab(s)","ai startup(s)","ai company","ai companies"],roles:["artificial intelligence","machine learning","deep learning","reinforcement learning","generative ai","gen ai","genai","llm(s)","large language model(s)","nlp","natural language processing","computer vision","applied ai","head of ai","ai engineer(s)","ai engineering","ai researcher(s)","ai research","ai scientist(s)","ml engineer(s)","ml engineering","ml researcher(s)","ml scientist(s)","ml infrastructure","ml platform","mlops","machine learning engineer(s)","data science","data scientist(s)","data engineer(s)","data engineering","data analytics","data analyst(s)","analytics engineer(s)","big data","business intelligence","data warehouse","data warehousing","data governance","data platform(s)"],names:["ai"],companies:["openai","open ai","anthropic","cohere$","mistral$","hugging face","huggingface","databricks","snowflake$","palantir","nvidia","perplexity$","xai$","midjourney","runway ml","runwayml","datarobot","dataiku","alteryx","tableau","fivetran","dbt labs","weights & biases","labelbox","groq$","cerebras"],not:["neuro linguistic programming","nlp practitioner(s)","nlp coach","nlp coaches","llm in tax","llm in taxation","llm taxation"]},{key:"cybersecurity",label:"Cybersecurity",group:"tech",kind:"function",words:["cybersecurity company","cybersecurity companies","cybersecurity firm(s)","cybersecurity startup(s)","cybersecurity vendor(s)","cyber security firm(s)","managed security","mssp(s)"],roles:["cybersecurity","cyber security","cyber","infosec","information security","security engineer(s)","security analyst(s)","security architect(s)","security researcher(s)","security operations","soc analyst(s)","penetration tester(s)","penetration testing","pentester(s)","pen tester(s)","red team","blue team","appsec","application security","cloud security","network security","threat intelligence","threat hunter(s)","incident response","vulnerability management","vulnerability research","vulnerability researcher(s)","malware","ciso","zero trust","osint","dfir","cissp","oscp","ceh","comptia security","bug bounty","ethical hacker(s)","ethical hacking","devsecops","secops"],companies:["crowdstrike","palo alto networks","fortinet","okta","zscaler","sentinelone","cloudflare","proofpoint","rapid7","tenable","qualys","splunk","mandiant","cyberark","check point software","sophos","darktrace","wiz$","snyk","vanta$","drata","1password","lastpass","arctic wolf","huntress","mcafee","gen digital","trend micro","kaspersky","abnormal security","knowbe4","secureworks","recorded future","bishop fox","trail of bits","hackerone","bugcrowd","cisa$"],not:["cyber monday"]},{key:"telecom",label:"Telecom",group:"tech",kind:"industry",words:["telecom","telecoms","telecommunication(s)","telco(s)","wireless carrier(s)","mobile network(s)","5g","broadband","fiber optic(s)","fiber network(s)","rf engineer(s)","cell tower(s)","voip","unified communications","satellite communications"],companies:["at&t","verizon","t mobile","tmobile","sprint$","comcast","xfinity","charter communications","spectrum$","cox communications","lumen$","lumen technologies","centurylink","frontier communications","dish network","ericsson","nokia","cisco","juniper networks","qualcomm","american tower","crown castle","vodafone","telefonica","bt group","deutsche telekom","rogers communications","bell canada","telus","starlink","viasat","iridium"]},{key:"fintech",label:"Fintech & Payments",group:"finance",kind:"industry",words:["fintech","fin tech","payments","payment processing","merchant services","digital banking","neobank(s)","embedded finance","insurtech","regtech","wealthtech","buy now pay later","bnpl","card issuing","open banking","digital wallet(s)","mobile payments"],names:["pay"],companies:["stripe","paypal","venmo","square$","block$","cash app","plaid$","brex","ramp$","mercury$","chime$","affirm$","klarna","afterpay","marqeta","adyen","checkout com","sofi$","wise$","revolut","n26","nubank","monzo","bill com","expensify","carta$","fiserv","fis$","global payments","worldpay","visa$","mastercard","american express","amex$","discover financial","green dot","melio","payoneer","remitly","western union","moneygram","zelle","shift4","nuvei","paysafe","lithic","synctera","modern treasury","rapyd","dwolla","credit karma","nerdwallet","kalshi"],not:["pay per click","pay it forward"]},{key:"banking",label:"Banking & Lending",group:"finance",kind:"industry",words:["bank","banking","banker(s)","investment banking","investment banker(s)","commercial banking","commercial banker(s)","retail banking","community bank(s)","credit union(s)","bank teller(s)","loan officer(s)","mortgage(s)","mortgage lender(s)","mortgage lending","mortgage broker(s)","mortgage advisor(s)","mortgage underwriter(s)","lending","lender(s)","loan processor(s)","loan originator(s)","credit analyst(s)","nmls"],companies:["jpmorgan","jp morgan","j p morgan","chase$","chase bank","bank of america","wells fargo","citi$","citibank","citigroup","goldman sachs","morgan stanley","us bancorp","pnc","truist","capital one","td bank","td securities","hsbc","barclays","santander","bny","state street","fifth third","keybank","ally$","ally financial","navy federal","rocket mortgage","rocket companies","quicken loans","united wholesale mortgage","lendingtree","lendingclub","upstart$","lazard","evercore","jefferies","moelis","houlihan lokey","piper sandler","rbc","royal bank of canada","bmo","scotiabank","ubs$","credit suisse","deutsche bank","bnp paribas","mufg","societe generale","nomura","federal reserve","fdic$","freddie mac","fannie mae"],not:["coldwell banker","bankers life","food bank(s)","blood bank(s)","data bank(s)","sperm bank(s)","seed bank(s)","memory bank(s)","piggy bank(s)","question bank(s)","image bank(s)","time bank(s)","west bank","left bank","river bank(s)"]},{key:"vc-pe",label:"Venture Capital & Private Equity",group:"finance",kind:"industry",words:["venture capital","venture capitalist(s)","vc","vcs","vc fund(s)","venture fund(s)","venture partner(s)","private equity","growth equity","pe fund(s)","buyout(s)","leveraged buyout(s)","lbo","fund of funds","search fund(s)","venture studio(s)"],companies:["sequoia$","sequoia capital","andreessen horowitz","a16z","accel$","accel partners","kleiner perkins","greylock","lightspeed venture","general catalyst","founders fund","y combinator","yc$","techstars","500 startups","first round capital","insight partners","tiger global","thrive capital","khosla ventures","bessemer venture","ggv capital","nea$","new enterprise associates","battery ventures","union square ventures","softbank vision fund","blackstone$","kkr$","kohlberg kravis roberts","carlyle group","apollo global","tpg$","tpg capital","bain capital","warburg pincus","vista equity","thoma bravo","silver lake","advent international","hellman & friedman","general atlantic","ares management","blue owl","cvc capital","permira","l catterton","leonard green","clayton dubilier"],not:["vc backed","venture backed","pe backed","backed by"]},{key:"wealth",label:"Wealth & Asset Management",group:"finance",kind:"industry",words:["wealth management","wealth manager(s)","wealth advisor(s)","private wealth","private banking","financial advisor(s)","financial adviser(s)","financial planner(s)","financial planning","certified financial planner(s)","cfp","chfc","registered investment advisor(s)","investment advisor(s)","asset management","investment management","portfolio manager(s)","portfolio management","hedge fund(s)","family office(s)","retirement planning","cfa","cfa charterholder(s)","equity research","investment research","trader(s)","quantitative trader(s)","quant trader(s)","trading desk","prop trading","proprietary trading","equities","fixed income","derivatives","securities","finra","series 7","series 65","series 66"],companies:["blackrock","vanguard$","vanguard group","fidelity$","fidelity investments","charles schwab","schwab$","edward jones","ameriprise","raymond james","lpl financial","northwestern mutual","pimco","t rowe price","franklin templeton","invesco","capital group","wellington management","nuveen","bridgewater$","bridgewater associates","citadel$","citadel securities","two sigma","de shaw","d e shaw","renaissance technologies","millennium management","point72","jane street","hudson river trading","jump trading","optiver","susquehanna international","virtu financial","drw$","aqr","man group","elliott management","pershing square","robinhood","wealthfront","betterment","stifel"],not:["trader joe(s)","securities law","securities litigation","securities attorney(s)","securities lawyer(s)","social security"]},{key:"insurance",label:"Insurance",group:"finance",kind:"industry",words:["insurance","insurer(s)","insurtech","reinsurance","insurance underwriter(s)","claims adjuster(s)","insurance adjuster(s)","public adjuster(s)","actuary","actuaries","actuarial","p&c","property and casualty","annuity","annuities","cpcu","title insurance"],companies:["state farm","allstate","geico","progressive$","liberty mutual","nationwide$","usaa","farmers insurance","travelers$","hartford$","chubb","aig$","american international group","metlife","prudential","new york life","northwestern mutual","massmutual","mass mutual","aflac","oscar health","root insurance","humana","unitedhealth","aetna","cigna","anthem$","anthem blue cross","elevance","centene","molina healthcare","blue cross","bcbs","marsh$","marsh mclennan","aon$","willis towers watson","wtw$","gallagher$","arthur j gallagher","brown & brown","lockton","hub international","swiss re","munich re","assurant","erie insurance","american family insurance","primerica","globe life","mutual of omaha","guardian life","lincoln financial","transamerica","john hancock","pacific life","protective life","unum"]},{key:"accounting",label:"Accounting & Tax",group:"finance",kind:"function",words:["accounting firm(s)","cpa firm(s)","public accounting","tax preparation","external audit","audit & assurance","big four","big 4"],roles:["accounting","accountant(s)","cpa","cpas","certified public accountant(s)","chartered accountant(s)","acca","tax","tax preparer(s)","tax advisor(s)","enrolled agent(s)","bookkeeper(s)","bookkeeping","auditor(s)","internal audit","accounts payable","accounts receivable","financial controller(s)","corporate controller(s)","fractional cfo(s)","forensic accounting","forensic accountant(s)","quickbooks"],companies:["deloitte","pwc$","pricewaterhousecoopers","ey$","ernst & young","kpmg","grant thornton","bdo$","bdo usa","rsm$","rsm us","crowe$","baker tilly","cliftonlarsonallen","moss adams","cbiz","marcum$","eisneramper","cherry bekaert","plante moran","h&r block","jackson hewitt","liberty tax"]},{key:"crypto",label:"Crypto & Web3",group:"finance",kind:"industry",words:["crypto","cryptocurrency","cryptocurrencies","blockchain","web3","web 3","defi","nft(s)","bitcoin","ethereum","solana","stablecoin(s)","digital asset(s)","smart contract(s)","dapp(s)","on chain","onchain","crypto exchange(s)"],companies:["coinbase","binance","kraken$","ripple$","chainalysis","consensys","opensea","uniswap","polygon labs","fireblocks","anchorage digital","paxos","bitgo","crypto com","ledger$","metamask","polymarket","tether$","galaxy digital","grayscale investments","blockchain com","bitpay","moonpay","dydx","aave","chainlink labs","mysten labs"],not:["digital asset management"]},{key:"hospitals",label:"Hospitals & Clinics",group:"health",kind:"industry",words:["hospital(s)","clinic(s)","medical center(s)","health system(s)","healthcare system(s)","urgent care","emergency room","emergency department","emergency medicine","physician(s)","doctor(s)","surgeon(s)","surgery","nurse(s)","nursing","registered nurse(s)","rn","bsn","lpn","certified nursing assistant(s)","nurse practitioner(s)","physician assistant(s)","pa c","medical assistant(s)","patient care","hospitalist(s)","pediatrician(s)","cardiologist(s)","oncologist(s)","radiologist(s)","anesthesiologist(s)","dermatologist(s)","neurologist(s)","obgyn","ob gyn","family medicine","internal medicine","primary care","pediatrics","oncology","cardiology","radiology","paramedic(s)","emt(s)","respiratory therapist(s)","physical therapist(s)","physical therapy","occupational therapist(s)","occupational therapy","speech language pathologist(s)","radiologic technologist(s)","sonographer(s)","phlebotomist(s)","pharmacist(s)","pharmacy","home health","hospice","nursing home(s)","assisted living","senior living","skilled nursing","healthcare administration","hospital administrator(s)","medical practice(s)","medical group(s)","telehealth","telemedicine","concierge medicine","chiropractor(s)","chiropractic","optometrist(s)","optometry","ophthalmologist(s)","podiatrist(s)","medical billing","medical coding","medical coder(s)","revenue cycle"],companies:["kaiser permanente","hca$","hca healthcare","tenet healthcare","commonspirit","ascension$","ascension health","providence health","trinity health","mass general","massachusetts general","mount sinai","nyu langone","johns hopkins medicine","ucla health","stanford health","memorial sloan kettering","md anderson","dana farber","cedars sinai","city of hope","one medical","oak street health","carbon health","teladoc","amwell","davita","fresenius","lifepoint health","universal health services"],not:["animal hospital(s)","animal clinic(s)","pet hospital(s)","veterinary","veterinarian(s)","legal clinic(s)","law clinic(s)","doctor of philosophy","computer doctor(s)","script doctor(s)","tree surgery"]},{key:"dental",label:"Dental",group:"health",kind:"industry",words:["dental","dentist(s)","dentistry","dds","dmd","orthodontist(s)","orthodontic(s)","orthodontia","periodontist(s)","periodontics","periodontal","endodontist(s)","endodontics","prosthodontist(s)","prosthodontics","pedodontist(s)","pediatric dentist(s)","oral surgeon(s)","oral surgery","oral and maxillofacial","maxillofacial","dental hygienist(s)","rdh","dental assistant(s)","dso","dsos","dental support organization(s)","invisalign"],companies:["align technology","henry schein","dentsply","smile direct club","smiledirectclub","clearchoice","sonrava","envista$","envista holdings","straumann","ivoclar","nobel biocare","great expressions","smile brands","bright now","affordable dentures"]},{key:"pharma-biotech",label:"Pharma & Biotech",group:"health",kind:"industry",words:["pharma","pharmaceutical(s)","biotech","biotechnology","biopharma","biopharmaceutical(s)","therapeutics","bioscience(s)","biologics","drug discovery","drug development","clinical trial(s)","clinical research","clinical research associate(s)","medical science liaison(s)","pharmaceutical sales","pharma sales","regulatory affairs","pharmacovigilance","drug safety","gene therapy","cell therapy","genomics","bioinformatics","molecular biology","immunology","vaccine(s)","life sciences","antibody","antibodies","crispr","mrna","biostatistics","biostatistician(s)","medicinal chemistry"],companies:["pfizer","moderna","johnson & johnson","j&j$","janssen","merck","msd$","abbvie","bristol myers squibb","eli lilly","lilly$","novartis","roche$","roche diagnostics","genentech","astrazeneca","gsk$","glaxosmithkline","sanofi","novo nordisk","bayer","amgen","gilead","regeneron","vertex pharmaceuticals","biogen","takeda","boehringer ingelheim","viatris","mylan","biontech","illumina","thermo fisher","iqvia","syneos","parexel","charles river laboratories","catalent","lonza","danaher","alnylam","incyte","seagen","bluebird bio","intellia","editas","insitro","23andme","ginkgo bioworks","zoetis"]},{key:"medical-devices",label:"Medical Devices",group:"health",kind:"industry",words:["medical device(s)","medical technology","medtech","med tech","medical equipment","durable medical equipment","surgical robotics","surgical device(s)","orthopedic implant(s)","medical diagnostics","in vitro diagnostics","medical imaging","biomedical engineer(s)","biomedical engineering","regulatory affairs","medical device sales","510 k"],companies:["medtronic","stryker","boston scientific","abbott$","abbott laboratories","abbott diagnostics","becton dickinson","baxter international","baxter healthcare","zimmer biomet","smith & nephew","edwards lifesciences","intuitive surgical","ge healthcare","philips healthcare","siemens healthineers","hologic","dexcom","insulet","resmed","masimo","teleflex","hillrom","hill rom","steris","conmed","globus medical","nuvasive","integra lifesciences","penumbra$","abiomed","karl storz","arthrex","exactech","butterfly network","outset medical","shockwave medical","inari medical","axonics","tandem diabetes","varian"]},{key:"mental-health",label:"Mental Health",group:"health",kind:"industry",words:["mental health","behavioral health","psychologist(s)","psychiatrist(s)","psychiatry","psychiatric","psychotherapist(s)","psychotherapy","therapist(s)","lmft","lcsw","lpc","lmhc","lcpc","lpcc","psyd","licensed clinical social worker(s)","clinical social worker(s)","licensed professional counselor(s)","marriage and family therapist(s)","mental health counselor(s)","addiction counselor(s)","addiction treatment","addiction medicine","substance abuse","behavioral therapist(s)","aba therapist(s)","applied behavior analysis","bcba","eating disorder(s)","emdr","cognitive behavioral therapy","teletherapy","online therapy"],companies:["betterhelp","talkspace","headspace","lyra health","spring health","modern health","acadia healthcare","nami$","national alliance on mental illness","the jed foundation","crisis text line"],not:["physical therapist(s)","physical therapy","occupational therapist(s)","occupational therapy","respiratory therapist(s)","respiratory therapy","massage therapist(s)","massage therapy","speech therapist(s)","speech therapy","radiation therapist(s)","radiation therapy","infusion therapy"]},{key:"fitness-wellness",label:"Fitness & Wellness",group:"health",kind:"industry",words:["fitness","gym(s)","personal trainer(s)","personal training","fitness coach","fitness coaches","strength and conditioning","crossfit","pilates","yoga","yoga teacher(s)","yoga instructor(s)","wellness","massage therapist(s)","massage therapy","nutritionist(s)","dietitian(s)","registered dietitian(s)","health coach","health coaches","wellness coach","wellness coaches","meditation","mindfulness","group fitness","fitness instructor(s)","bodybuilding","athletic trainer(s)"],companies:["planet fitness","la fitness","equinox$","equinox fitness","orangetheory","orange theory","f45","crunch fitness","anytime fitness","golds gym","24 hour fitness","life time fitness","soulcycle","peloton","barrys bootcamp","corepower yoga","club pilates","xponential fitness","whoop$","oura$","strava","myfitnesspal","noom$","weightwatchers","ww international","beachbody","hydrow","tonal$","classpass","mindbody","ymca"],not:["corporate wellness","employee wellness","financial wellness",...i]},{key:"veterinary",label:"Veterinary & Animal Care",group:"health",kind:"industry",words:["veterinary","veterinarian(s)","veterinary medicine","veterinary technician(s)","veterinary assistant(s)","vet tech(s)","vet assistant(s)","vet clinic(s)","vet hospital(s)","emergency vet","dvm","animal hospital(s)","animal clinic(s)","pet hospital(s)","animal care","animal shelter(s)","animal rescue","animal welfare","animal control","pet care","pet grooming","pet groomer(s)","dog groomer(s)","groomer(s)","dog trainer(s)","dog training","pet sitter(s)","pet sitting","dog walker(s)","kennel(s)","doggy daycare","zookeeper(s)","zoo(s)","aquarium(s)","equine","farrier(s)","animal behaviorist(s)"],companies:["banfield","vca$","vca animal hospitals","bluepearl","mars veterinary health","national veterinary associates","thrive pet healthcare","heartland veterinary partners","petvet care centers","idexx","elanco","aspca","humane society","best friends animal society","rover$","trupanion","american veterinary medical association"],not:[...i]},{key:"k12",label:"K-12 Education",group:"education",kind:"industry",words:["k 12","k12","elementary school(s)","middle school(s)","high school(s)","junior high","primary school(s)","secondary school(s)","public school(s)","charter school(s)","private school(s)","school district(s)","independent school district","isd","montessori","preschool(s)","pre k","prek","kindergarten","early childhood","teacher(s)","substitute teacher(s)","assistant principal(s)","vice principal(s)","school principal(s)","head of school","headmaster","superintendent of schools","school superintendent(s)","school board","guidance counselor(s)","school counselor(s)","school psychologist(s)","school nurse(s)","special education","special ed","ese teacher(s)","sped","paraprofessional(s)","homeschool","tutor(s)","tutoring","intermediate school(s)","preparatory school(s)","prep school(s)"],names:["elementary"],companies:["teach for america","kipp","success academy","idea public schools","khan academy","kumon","sylvan learning","mathnasium","huntington learning","varsity tutors","connections academy","kindercare","bright horizons","learning care group"],not:["yoga teacher(s)","dance teacher(s)","piano teacher(s)"]},{key:"higher-ed",label:"Higher Education",group:"education",kind:"industry",words:["university","universities","universidad","college","colleges","community college(s)","higher education","higher ed","academia","professor(s)","assistant professor(s)","associate professor(s)","adjunct professor(s)","adjunct faculty","adjunct instructor(s)","lecturer(s)","senior lecturer(s)","faculty member(s)","postdoc(s)","postdoctoral","post doctoral","phd candidate(s)","phd student(s)","doctoral candidate(s)","doctoral student(s)","graduate student(s)","grad student(s)","graduate assistant(s)","graduate research assistant(s)","research assistant(s)","graduate teaching assistant(s)","provost","dean of","associate dean(s)","assistant dean(s)","registrar","bursar","financial aid","admissions counselor(s)","college admissions","university admissions","student affairs","residence life","academic advisor(s)","academic advising","career services","alumni relations","tenure track","tenured","chancellor","vice chancellor","undergraduate","undergrad","mba candidate(s)","mba student(s)","business school(s)","school of business","law school(s)","school of law","medical school(s)","school of medicine","graduate school(s)","school of management"],companies:["mit$","massachusetts institute of technology","caltech","california institute of technology","georgia tech","georgia institute of technology","virginia tech","texas a&m","ucla$","uc berkeley","uc davis","uc san diego","uc irvine","purdue$","purdue global","rutgers","cornell$","yale$","princeton$","harvard$","harvard business school","harvard law school","harvard medical school","harvard kennedy school","stanford$","stanford gsb","penn state","ohio state$","arizona state$","georgetown$","vanderbilt$","emory$","tulane$","wharton$","wharton school","kellogg school of management","insead","london business school","columbia business school","mit sloan","duke$","coursera","edx$"],not:["college park","college hunks","credit union(s)","university health","health system(s)","hospital(s)","medical center(s)"]},{key:"marketing-advertising",label:"Marketing & Advertising",group:"media",kind:"function",words:["ad agency","ad agencies","advertising agency","advertising agencies","digital agency","digital agencies","creative agency","creative agencies","marketing agency","marketing agencies","marketing firm(s)","media agency","media agencies","martech","adtech","ad tech"],roles:["marketing","marketer(s)","advertising","branding","brand strategy","brand strategist(s)","brand manager(s)","brand marketing","copywriter(s)","copywriting","seo","sem","ppc","search engine optimization","paid media","paid social","paid search","performance marketing","growth marketing","digital marketing","content marketing","email marketing","social media marketing","social media manager(s)","influencer marketing","affiliate marketing","demand generation","demand gen","lifecycle marketing","product marketing","marketing operations","marketing ops","media buyer(s)","media buying","media planner(s)","media planning","programmatic","ad operations","ad ops","market research"],companies:["wpp$","omnicom","publicis","interpublic","ipg$","ipg mediabrands","dentsu","havas","ogilvy","bbdo","tbwa","mccann$","mccann worldgroup","leo burnett","saatchi","grey group","droga5","wieden & kennedy","r ga","vaynermedia","vayner media","vaynerx","the trade desk","mediamonks","media monks","monks$","razorfish","digitas","wunderman thompson","vml","vmly&r","groupm","group m","mindshare$","mindshare worldwide","wavemaker","horizon media","starcom","spark foundry","kantar","nielsen$","nielsen holdings","nielseniq","ipsos","semrush","criteo","taboola","outbrain","applovin","integral ad science","doubleverify","magnite","pubmatic","72andsunny","crispin porter","goodby silverstein","isobar","iprospect","merkle$","acxiom"]},{key:"pr-comms",label:"PR & Communications",group:"media",kind:"function",words:["pr agency","pr agencies","pr firm(s)","public relations agency","public relations agencies","public relations firm(s)","communications agency","communications agencies","communications firm(s)"],roles:["public relations","pr manager(s)","pr director(s)","pr specialist(s)","pr lead","pr strategist(s)","pr professional(s)","pr executive(s)","pr comms","pr communications","comms","corporate communications","strategic communications","internal communications","external communications","crisis communications","marketing communications","communications manager(s)","communications director(s)","director of communications","head of communications","communications specialist(s)","communications coordinator(s)","communications lead","communications strategist(s)","vp communications","vp of communications","media relations","press secretary","spokesperson","spokeswoman","spokesman","publicist(s)"],names:["pr"],companies:["edelman$","weber shandwick","fleishmanhillard","fleishman hillard","ketchum$","burson","bcw$","hill & knowlton","brunswick group","finsbury","teneo$","golin$","porter novelli","ruder finn","apco worldwide","sard verbinnen","kekst","mww$","praytell","prosek","zeno group","allison worldwide","cision","meltwater","muck rack","pr newswire","business wire"]},{key:"media-publishing",label:"Media & Publishing",group:"media",kind:"industry",words:["journalist(s)","journalism","reporter(s)","editor(s)","editor in chief","managing editor(s)","copy editor(s)","news","newsroom(s)","newspaper(s)","magazine(s)","publishing","publisher(s)","book publishing","broadcast journalist(s)","news anchor(s)","correspondent(s)","columnist(s)","staff writer(s)","freelance writer(s)","podcast(s)"],companies:["new york times","nyt$","washington post","wall street journal","wsj$","dow jones","news corp","gannett","usa today","tribune","hearst","conde nast","axel springer","politico","axios","the atlantic$","vox media","buzzfeed","vice media","bustle","the athletic$","bloomberg$","reuters","thomson reuters","associated press","cnn$","msnbc","cbs news","abc news","npr$","national public radio","bbc","the guardian$","the economist","financial times","forbes$","forbes media","fortune$","business insider","insider$","techcrunch","the verge$","wired$","penguin random house","harpercollins","simon & schuster","hachette","macmillan publishers","macmillan learning","scholastic","mcgraw hill","pearson$","wiley$","john wiley","elsevier","springer nature","sinclair broadcast","nexstar","tegna","iheartmedia","audacy"],not:["video editor(s)","photo editor(s)","film editor(s)","newport news","good news"]},{key:"creator-economy",label:"Creator Economy",group:"media",kind:"industry",words:["content creator(s)","creator economy","digital creator(s)","ugc","ugc creator(s)","influencer(s)","youtuber(s)","tiktoker(s)","streamer(s)","podcast(s)","podcaster(s)","podcast host(s)","podcasting","blogger(s)","vlogger(s)","creator partnership(s)","influencer marketing","content creation"],companies:["youtube","tiktok","bytedance","snap$","patreon","substack","twitch$","linktree","kajabi","teachable","cameo$","whop$","beehiiv","convertkit","jellysmack","dude perfect","mrbeast","beast industries","fourthwall","captiv8","creatoriq","ltk$","rewardstyle"]},{key:"film-tv-music",label:"Film, TV & Music",group:"entertainment",kind:"industry",words:["film","films","filmmaker(s)","filmmaking","film production","movie(s)","motion picture(s)","cinematographer(s)","cinematography","screenwriter(s)","screenwriting","showrunner(s)","tv","television","broadcasting","post production","vfx","visual effects","animator(s)","animation studio(s)","music","musician(s)","songwriter(s)","record label(s)","recording artist(s)","recording studio(s)","music producer(s)","audio engineer(s)","sound engineer(s)","dj","djs","actor(s)","actress","actresses","casting director(s)","talent agency","hollywood","production company","production companies","theatre","theater","broadway","performing arts","live music","music festival(s)","orchestra","symphony","opera","video editor(s)","film editor(s)"],names:["records","pictures"],companies:["netflix","disney","walt disney","pixar","lucasfilm","marvel","warner bros","warner music","wbd$","hbo","paramount$","paramount global","paramount pictures","paramount skydance","nbcuniversal","nbc universal","universal music","umg$","sony$","lionsgate","mgm$","metro goldwyn mayer","a24","blumhouse","legendary entertainment","dreamworks","fox$","fox corporation","fox entertainment","20th century","amc networks","regal cinemas","cinemark","imax","roku","hulu","peacock$","spotify","soundcloud","siriusxm","sirius xm","live nation","ticketmaster","aeg$","aeg presents","caa$","creative artists agency","wme$","william morris endeavor","united talent agency","def jam","interscope","bmg$","ascap","recording academy","viacom","cbs$","cbs studios","showtime","starz","a&e networks","univision","telemundo","tubi$","crunchyroll","illumination entertainment","skydance"],not:["home theater","home theatre","operating theatre","medical records","window film","window tint","plastic film","threat actor(s)","bad actor(s)",...i]},{key:"gaming-esports",label:"Gaming & Esports",group:"entertainment",kind:"industry",words:["gaming","video game(s)","videogame(s)","game developer(s)","game development","game designer(s)","game design","game studio(s)","game artist(s)","game producer(s)","gameplay","esports","e sports","esport","unreal engine","unity developer(s)","level designer(s)","game engine(s)","indie game(s)","mobile games","mobile gaming","pro gamer(s)","professional gamer(s)","twitch streamer(s)"],companies:["electronic arts","ea$","ea sports","activision","blizzard entertainment","riot games","epic games","valve$","valve corporation","ubisoft","nintendo","playstation","xbox","take two","rockstar games","2k$","2k games","bungie","bethesda softworks","bethesda game studios","zynga","roblox","unity$","unity technologies","supercell","king digital","niantic","square enix","bandai namco","sega","capcom","konami","nexon","netease games","tencent games","scopely","playtika","jam city","moon active","twitch$","faze clan","team liquid","100 thieves","cloud9","optic gaming","dreamhack","gamestop","mojang","insomniac games","naughty dog","respawn entertainment"],not:["casino(s)","sportsbook(s)","sports betting","igaming","gaming commission","gaming control","slot machine(s)",...i]},{key:"sports",label:"Sports",group:"entertainment",kind:"industry",words:["sports","athlete(s)","athletics","athletic director(s)","athletic trainer(s)","professional athlete(s)","pro athlete(s)","nfl","nba","mlb","nhl","wnba","ncaa","nwsl","pga","lpga","nascar","ufc","wwe","fifa","olympic(s)","olympian(s)","football","basketball","baseball","soccer","hockey","golf","tennis","volleyball","lacrosse","softball","wrestling","rugby","boxing","mma","track and field","head coach","head coaches","assistant coach","assistant coaches","sports marketing","sports medicine","sports management","sports business","sports betting","sportsbook(s)","fantasy sports","stadium(s)","sports broadcaster(s)","sportscaster(s)"],companies:["national football league","national basketball association","major league baseball","national hockey league","major league soccer","espn","cbs sports","turner sports","dazn","the athletic$","bleacher report","barstool sports","draftkings","fanduel","fanatics","img academy","wasserman$","wasserman media","excel sports","klutch sports","genius sports","sportradar","hudl","special olympics","arizona cardinals","atlanta falcons","baltimore ravens","buffalo bills","carolina panthers","chicago bears","cincinnati bengals","cleveland browns","dallas cowboys","denver broncos","detroit lions","green bay packers","houston texans","indianapolis colts","jacksonville jaguars","kansas city chiefs","las vegas raiders","los angeles chargers","los angeles rams","miami dolphins","minnesota vikings","new england patriots","new orleans saints","new york giants","new york jets","philadelphia eagles","pittsburgh steelers","san francisco 49ers","seattle seahawks","tampa bay buccaneers","tennessee titans","washington commanders","atlanta hawks","boston celtics","brooklyn nets","charlotte hornets","chicago bulls","cleveland cavaliers","dallas mavericks","denver nuggets","detroit pistons","golden state warriors","houston rockets","indiana pacers","la clippers","los angeles clippers","los angeles lakers","memphis grizzlies","miami heat","milwaukee bucks","minnesota timberwolves","new orleans pelicans","new york knicks","oklahoma city thunder","orlando magic","philadelphia 76ers","phoenix suns","portland trail blazers","sacramento kings","san antonio spurs","toronto raptors","utah jazz","washington wizards","arizona diamondbacks","atlanta braves","baltimore orioles","boston red sox","chicago cubs","chicago white sox","cincinnati reds","cleveland guardians","colorado rockies","detroit tigers","houston astros","kansas city royals","los angeles angels","los angeles dodgers","miami marlins","milwaukee brewers","minnesota twins","new york mets","new york yankees","oakland athletics","philadelphia phillies","pittsburgh pirates","san diego padres","san francisco giants","seattle mariners","st louis cardinals","tampa bay rays","texas rangers baseball","toronto blue jays","washington nationals","anaheim ducks","boston bruins","buffalo sabres","calgary flames","carolina hurricanes","chicago blackhawks","colorado avalanche","columbus blue jackets","dallas stars","detroit red wings","edmonton oilers","florida panthers","los angeles kings","minnesota wild","montreal canadiens","nashville predators","new jersey devils","new york islanders","new york rangers","ottawa senators","philadelphia flyers","pittsburgh penguins","san jose sharks","seattle kraken","st louis blues","tampa bay lightning","toronto maple leafs","utah mammoth","utah hockey club","vancouver canucks","vegas golden knights","washington capitals","winnipeg jets","atlanta united fc","austin fc","charlotte fc","chicago fire fc","fc cincinnati","colorado rapids","columbus crew","dc united","d c united","fc dallas","houston dynamo","inter miami","la galaxy","lafc","los angeles fc","minnesota united fc","cf montreal","nashville sc","new england revolution","new york city fc","new york red bulls","orlando city sc","orlando city soccer","philadelphia union$","portland timbers","real salt lake","san diego fc","san jose earthquakes","seattle sounders","sporting kansas city","st louis city sc","toronto fc","vancouver whitecaps"],not:["cricket wireless","alumni","alum","veteran(s)","soccer mom(s)","hockey mom(s)","baseball mom(s)","football mom(s)","sports mom(s)","soccer dad(s)","hockey dad(s)","sports dad(s)",...i]},{key:"ecommerce-retail",label:"E-commerce & Retail",group:"consumer",kind:"industry",words:["e commerce","ecommerce","ecom","online store(s)","online retail","online retailer(s)","retail","retailer(s)","amazon seller(s)","amazon fba","fba","dtc","d2c","direct to consumer","marketplace seller(s)","store manager(s)","retail associate(s)","merchandising","merchandiser(s)","visual merchandiser(s)","retail buyer(s)","category manager(s)","omnichannel","loss prevention","cashier(s)","grocery","supermarket(s)","convenience store(s)","department store(s)"],companies:["amazon$","amazon com","walmart","target$","target corporation","costco","home depot","lowes$","best buy","kroger","albertsons","safeway","whole foods","trader joes","aldi$","walgreens","cvs health","macys","nordstrom","kohls","tj maxx","tjx","ross stores","dollar general","dollar tree","family dollar","ikea","wayfair","etsy","ebay","shopify","chewy","instacart","temu$","shein","alibaba","zappos","sephora","ulta","bath & body works","victorias secret","gap$","gap inc","old navy","banana republic","h&m","zara$","inditex","uniqlo","petsmart","petco","dicks sporting goods","academy sports","sams club","7 eleven","circle k","office depot","whatnot","poshmark","depop","stockx","bigcommerce","woocommerce"],not:["retail banking","retail bank(s)","retail investor(s)","retail real estate"]},{key:"consumer-goods",label:"Consumer Goods",group:"consumer",kind:"industry",words:["cpg","consumer goods","consumer packaged goods","consumer products","fmcg","packaged food(s)","beverage brand(s)","beverage company","brewery","breweries","winery","wineries","distillery","distilleries","craft beer","cosmetics","skincare","skin care","beauty brand(s)","fragrance(s)","apparel","fashion","fashion brand(s)","fashion designer(s)","footwear","jewelry","jewellery","consumer electronics","toy company","toys","home goods","household products","personal care","pet food","confectionery","dtc brand(s)"],companies:["procter & gamble","p&g","unilever","nestle","pepsico","pepsi","coca cola","kraft heinz","general mills","kelloggs","kellanova","mondelez","mars$","mars wrigley","hershey$","hershey company","colgate palmolive","kimberly clark","clorox","church & dwight","estee lauder","loreal","lvmh","kering","nike","adidas","puma$","under armour","lululemon","new balance","levi strauss","levis$","ralph lauren","tapestry$","michael kors","pvh$","tommy hilfiger","calvin klein","hanesbrands","vf$","the north face","patagonia","yeti$","kenvue","haleon","reckitt","henkel","beiersdorf","shiseido","coty$","revlon","elf beauty","glossier","fenty","rare beauty","olaplex","anheuser busch","ab inbev","molson coors","constellation brands","diageo","pernod ricard","bacardi","brown forman","boston beer","heineken","red bull","monster beverage","celsius holdings","keurig dr pepper","tyson foods","conagra","campbell$","hormel","smucker","j m smucker","post holdings","danone","chobani","hasbro","mattel","lego","spin master","funko","dyson$","whirlpool","sharkninja","newell brands","energizer","duracell","gillette","dollar shave club","warby parker","allbirds"],not:["personal care aide(s)","personal care assistant(s)"]},{key:"restaurants",label:"Restaurants & Food Service",group:"consumer",kind:"industry",words:["restaurant(s)","restaurateur(s)","chef(s)","sous chef(s)","executive chef(s)","head chef(s)","pastry chef(s)","line cook(s)","culinary","catering","caterer(s)","food service","foodservice","food truck(s)","bakery","bakeries","pastry","cafe(s)","coffee shop(s)","barista(s)","bartender(s)","bartending","mixologist(s)","sommelier(s)","waiter(s)","waitress","waitresses","front of house","back of house","qsr","quick service restaurant(s)","fast casual","fast food","pizzeria","diner","bistro","brewpub","taproom","grill","steakhouse","tavern","eatery","bbq","sushi","taqueria"],companies:["mcdonalds","starbucks","chick fil a","chipotle","taco bell","yum brands","kfc$","pizza hut","dominos","papa johns","subway$","wendys","burger king","restaurant brands international","popeyes","tim hortons","dunkin","panera","darden","olive garden","bloomin brands","outback steakhouse","texas roadhouse","cheesecake factory","chilis","brinker","applebees","dine brands","ihop$","dennys","cracker barrel","red lobster","shake shack","sweetgreen","cava group","wingstop","raising canes","five guys","in n out","jersey mikes","jimmy johns","firehouse subs","zaxbys","sysco","us foods","aramark","compass group","sodexo","gordon food service","doordash","grubhub","opentable","first watch","buffalo wild wings","dave & busters"]},{key:"hospitality-travel",label:"Hospitality & Travel",group:"consumer",kind:"industry",words:["hospitality","hotel(s)","hotelier(s)","resort(s)","motel(s)","inn","lodging","vacation rental(s)","short term rental(s)","airbnb host(s)","travel","travel agent(s)","travel agency","travel agencies","travel advisor(s)","tourism","tour operator(s)","tour guide(s)","cruises","cruise line(s)","cruise ship(s)","cruise director(s)","airline(s)","flight attendant(s)","airline pilot(s)","commercial pilot(s)","concierge","guest services","guest experience","event planner(s)","event planning","wedding planner(s)","venue(s)","theme park(s)","amusement park(s)","casino(s)","bed and breakfast","b&b","hostel(s)","timeshare(s)"],companies:["marriott","hilton$","hilton hotels","hilton worldwide","hilton grand vacations","hyatt","ihg$","intercontinental hotels","wyndham","choice hotels","best western","accor$","four seasons","ritz carlton","mgm resorts","caesars","wynn","las vegas sands","hard rock","airbnb","vrbo","expedia","booking com","booking holdings","priceline","kayak$","tripadvisor","navan$","delta air lines","delta airlines","american airlines","united airlines","southwest airlines","jetblue","alaska airlines","spirit airlines","frontier airlines","allegiant","hawaiian airlines","lufthansa","british airways","emirates$","qatar airways","air canada","carnival$","carnival cruise","carnival corporation","royal caribbean","norwegian cruise line","universal destinations","universal parks","seaworld","united parks","six flags","cedar fair","legoland","great wolf lodge","omni hotels","loews hotels","kimpton","vacasa","evolve vacation","hertz","enterprise rent a car","enterprise mobility","avis","aimbridge","highgate hotels","sabre$"],not:["travel nurse(s)","travel nursing","travel therapist(s)","travel rn","travel healthcare","concierge medicine","concierge doctor(s)",...i]},{key:"beauty-personal-care",label:"Beauty & Personal Care",group:"consumer",kind:"industry",words:["salon(s)","hair salon(s)","nail salon(s)","beauty salon(s)","salon owner(s)","hair stylist(s)","hairstylist(s)","hairdresser(s)","barber(s)","barbershop(s)","barber shop(s)","master barber(s)","esthetician(s)","aesthetician(s)","cosmetologist(s)","cosmetology","nail technician(s)","nail tech(s)","manicurist(s)","lash artist(s)","lash technician(s)","lash extensions","brow artist(s)","microblading","makeup artist(s)","med spa(s)","medspa(s)","medical spa(s)","day spa(s)","beauty school(s)","skin care specialist(s)","skincare specialist(s)","hair removal","tanning salon(s)","spray tan"],companies:["great clips","supercuts","sport clips","fantastic sams","regis$","drybar","european wax center","sola salon studios","sola salons","ideal image","hand & stone","massage envy","the lash lounge"],not:["salon com","salon media","barber foods","barber motorsports","barber nichols",...i]},{key:"logistics",label:"Logistics & Supply Chain",group:"industry",kind:"industry",words:["logistics","supply chain","freight","freight broker(s)","freight brokerage","trucking","truck driver(s)","cdl","truck dispatcher(s)","freight dispatcher(s)","fleet manager(s)","shipping","warehouse","warehouses","warehousing","distribution center(s)","fulfillment","fulfillment center(s)","order fulfillment","last mile","3pl","third party logistics","transportation management","freight forwarding","freight forwarder(s)","customs broker(s)","customs brokerage","import export","maritime","rail freight","railroad(s)","courier(s)","delivery driver(s)","forklift","material handler(s)","logistician(s)"],companies:["fedex","ups$","united parcel service","usps$","united states postal service","dhl","xpo","ch robinson","c h robinson","j b hunt","jb hunt","schneider national","werner enterprises","knight swift","old dominion freight","ryder","penske logistics","penske truck","maersk","flexport","uber freight","project44","fourkites","samsara$","manhattan associates","blue yonder","kinaxis","expeditors","kuehne nagel","db schenker","geodis","ceva logistics","gxo","union pacific","bnsf","csx$","norfolk southern","landstar","echo global logistics","coyote logistics","tql$","total quality logistics","estes express","saia$","shipbob","shipmonk","ontrac","lasership"],not:["data warehouse(s)","data warehousing"]},{key:"manufacturing",label:"Manufacturing",group:"industry",kind:"industry",words:["manufacturing","manufacturer(s)","factory worker(s)","factory manager(s)","factory floor","plant manager(s)","production supervisor(s)","machinist(s)","cnc","cnc machinist(s)","cnc programmer(s)","welder(s)","welding","fabrication","fabricator(s)","metal fabrication","assembly line","industrial engineer(s)","manufacturing engineer(s)","process engineer(s)","lean manufacturing","injection molding","plastics","machining","industrial automation","tool and die","chemical company","chemical manufacturing","specialty chemicals","industrial manufacturing","steel","aluminum","semiconductor manufacturing"],companies:["general electric","ge$","honeywell","3m$","3m company","siemens$","caterpillar","john deere","deere & company","emerson electric","emerson$","rockwell automation","parker hannifin","eaton$","eaton corporation","illinois tool works","itw$","dover$","cummins$","cummins inc","paccar","dow$","dow chemical","dupont$","dupont de nemours","basf","lyondellbasell","eastman chemical","celanese","nucor","us steel","united states steel","alcoa","jabil","flex$","foxconn","hon hai","tsmc$","taiwan semiconductor","applied materials","lam research","asml","corning","owens corning","ppg","sherwin williams","kohler$","stanley black & decker","milwaukee tool","bosch","abb$","schneider electric","mitsubishi$","hitachi","komatsu","trane","carrier global","lennox$","lennox international","johnson controls","westinghouse"]},{key:"energy",label:"Energy & Utilities",group:"industry",kind:"industry",words:["energy","utilities","utility company","utility companies","electric utility","power plant(s)","power generation","power grid","transmission and distribution","oil and gas","oil","petroleum","natural gas","lng","drilling","refinery","refineries","oil pipeline(s)","gas pipeline(s)","renewable energy","renewables","solar","solar panel(s)","photovoltaic","wind energy","wind power","wind farm(s)","offshore wind","hydroelectric","hydrogen","nuclear energy","nuclear power","nuclear plant(s)","geothermal","battery storage","energy storage","ev charging","lineman","linemen","lineworker(s)","energy efficiency","cleantech","clean energy","carbon capture","petroleum engineer(s)","reservoir engineer(s)","landman","roughneck(s)"],companies:["exxonmobil","exxon","chevron","shell$","shell plc","shell oil","bp$","conocophillips","occidental petroleum","marathon petroleum","valero","phillips 66","halliburton","schlumberger","slb$","baker hughes","kinder morgan","enterprise products","southern company","edison international","entergy","aep$","american electric power","exelon","sunrun","sunpower","sunnova","enphase","orsted","ørsted","vestas","siemens gamesa","ge vernova","brookfield renewable","invenergy","avangrid","plug power"],not:["energy drink(s)","monster energy","energy healer(s)","energy healing","energy work","positive energy","high energy","olive oil","essential oil(s)","oil painting(s)","oil painter(s)","offensive lineman","defensive lineman"]},{key:"automotive",label:"Automotive",group:"industry",kind:"industry",words:["automotive","dealership(s)","car dealership(s)","auto dealership(s)","auto dealer(s)","car dealer(s)","car sales","auto sales","automobile(s)","auto parts","auto repair","auto body","collision repair","automotive technician(s)","auto mechanic(s)","car mechanic(s)","diesel mechanic(s)","service advisor(s)","f&i","electric vehicle(s)","autonomous vehicle(s)","autonomous driving","self driving","adas","motorsport(s)","car wash","car washes","tire","tires","ev charging"],companies:["tesla","ford$","ford motor","general motors","stellantis","chrysler","jeep$","toyota","honda","nissan","hyundai","kia$","kia motors","bmw","mercedes benz","volkswagen","audi$","porsche","volvo","subaru","mazda","rivian","lucid motors","lucid group","polestar","waymo","cruise automation","zoox","aurora innovation","carvana","carmax","autonation","penske automotive","lithia","autozone","pep boys","goodyear","bridgestone","michelin","firestone$","firestone complete auto care","magna international","aptiv","borgwarner","lear$","denso","harley davidson","polaris industries","cars com","autotrader","truecar","copart","manheim"],not:["customer service advisor(s)","client service advisor(s)","financial service advisor(s)","member service advisor(s)","guest service advisor(s)"]},{key:"agriculture",label:"Agriculture & Farming",group:"industry",kind:"industry",words:["agriculture","agricultural","agribusiness","agtech","ag tech","agronomy","agronomist(s)","farming","farmer(s)","farm(s)","farmland","farm manager(s)","farmworker(s)","farm worker(s)","ranching","rancher(s)","cattle","livestock","poultry","dairy farm(s)","dairy farmer(s)","aquaculture","fishery","fisheries","horticulture","horticulturist(s)","viticulture","grower(s)","crop science","crop production","crop protection","crop consultant(s)","precision agriculture","irrigation","hydroponics","vertical farming","agricultural engineer(s)","farm equipment","grain elevator(s)","fertilizer(s)","feed mill(s)","forestry","forester(s)"],companies:["cargill","archer daniels midland","bunge$","corteva","syngenta","nutrien","cf industries","agco$","land o lakes","farm credit","indigo ag","john deere","driscolls","dole food","fresh del monte","simplot","j r simplot","the mosaic company"],not:["state farm","farm bureau","farmers insurance","farmers mutual","farmers bank","farmers state bank","farmers national bank","farmers savings bank","farmers trust","farmers merchants","farmer mac","farmer bros","farmer brothers","farmers dog","server farm(s)","wind farm(s)","solar farm(s)","content farm(s)","link farm(s)","click farm(s)","troll farm(s)","bot farm(s)","farm to table","farm team(s)",...i]},{key:"aerospace-defense",label:"Aerospace & Defense",group:"defense",kind:"industry",words:["aerospace","aerospace engineer(s)","aerospace engineering","defense","defence","defense contractor(s)","defense industry","department of defense","dod","avionics","aviation","aircraft","aircraft mechanic(s)","a&p mechanic(s)","airframe","propulsion","rocketry","spacecraft","satellite(s)","space industry","space systems","launch vehicle(s)","missile(s)","munitions","weapons systems","uav","uavs","unmanned aircraft","unmanned aerial","counter uas","security clearance","top secret","ts sci","secret clearance","itar","flight test","flight software","astronaut(s)"],companies:["lockheed","northrop grumman","boeing","raytheon","rtx$","general dynamics","l3harris","l3 harris","bae systems","leidos","saic$","science applications international","booz allen","caci","mantech","parsons$","huntington ingalls","textron","bell textron","sikorsky","pratt & whitney","spacex","blue origin","rocket lab","relativity space","sierra space","axiom space","anduril","shield ai","palantir","kratos","aerovironment","elbit","thales","airbus","embraer","bombardier","gulfstream","cessna","spirit aerosystems","nasa$","national aeronautics and space administration","jpl$","jet propulsion laboratory","sandia","los alamos","lawrence livermore","mitre$","darpa","navair","navsea","united launch alliance","maxar","planet labs","curtiss wright","heico","transdigm","hexcel"],not:["defense attorney(s)","defense lawyer(s)","criminal defense","defense counsel","self defense","insurance defense","dui defense","legal defense","defense litigation","public defender(s)","satellite office(s)","satellite campus","satellite location(s)"]},{key:"military",label:"Military",group:"defense",kind:"industry",words:["military","army","navy","air force","marine corps","usmc","marines","coast guard","uscg","national guard","army national guard","air national guard","space force","armed forces","active duty","soldier(s)","airman","airmen","infantry","infantryman","paratrooper(s)","special forces","green beret(s)","navy seal(s)","army ranger(s)","commissioned officer(s)","noncommissioned officer(s)","nco","army officer(s)","naval officer(s)","navy officer(s)","air force officer(s)","marine officer(s)","drill sergeant(s)","sergeant major","platoon","battalion","squadron","reservist(s)","army reserve","navy reserve","air force reserve","rotc","cadet(s)","west point","naval academy","air force academy","military intelligence"],companies:["us army","u s army","united states army","us navy","u s navy","united states navy","us air force","u s air force","united states air force","usaf$","us marine corps","united states marine corps","us coast guard","united states coast guard","us space force","u s space force","united states space force","british army","royal navy","royal air force","raf$","royal marines","canadian armed forces","nato$"],not:["veteran(s)","military spouse(s)","salvation army","old navy","navy federal","navy blue","navy pier","army of","swiss army","battalion chief(s)"]},{key:"government",label:"Government & Public Sector",group:"defense",kind:"industry",words:["government","federal government","state government","local government","public sector","public servant(s)","civil servant(s)","civil service","municipal","municipality","municipalities","city council","council member(s)","councilmember(s)","councilwoman","councilman","city manager(s)","county manager(s)","county commissioner(s)","county commission","board of county commissioners","mayor","mayors office","legislator(s)","legislature","legislative","state senator(s)","state representative(s)","congressman","congresswoman","congressional","member of congress","house of representatives","white house","governors office","office of the governor","lieutenant governor","federal agency","state agency","government agency","government agencies","police","police officer(s)","police department(s)","sheriff","sheriffs office","deputy sheriff(s)","law enforcement","state trooper(s)","highway patrol","firefighter(s)","fire department(s)","fire rescue","fire chief(s)","battalion chief(s)","public safety","911 dispatcher(s)","emergency management","corrections officer(s)","correctional officer(s)","department of corrections","probation officer(s)","parole officer(s)","postal service","veterans affairs","foreign service","foreign service officer(s)","diplomat(s)","embassy","consulate","city planner(s)","urban planning","public administration","federal employee(s)","state employee(s)","public works","parks and recreation"],companies:["city of","county of","town of","township of","village of","borough of","commonwealth of","government of","usps$","united states postal service","internal revenue service","irs$","fbi$","federal bureau of investigation","cia$","central intelligence agency","nsa$","national security agency","department of homeland security","dhs$","fema$","tsa$","transportation security administration","us department of","u s department of","united states department of","department of veterans affairs","social security administration","us census bureau","census bureau","gao$","government accountability office","us senate","u s senate","united states senate","gsa$","general services administration","epa$","environmental protection agency","fda$","food and drug administration","cdc$","centers for disease control","nih$","national institutes of health","securities and exchange commission","ftc$","federal trade commission","fcc$","federal communications commission","state department","department of state","united nations","european commission","state of alabama","state of alaska","state of arizona","state of arkansas","state of california","state of colorado","state of connecticut","state of delaware","state of florida","state of georgia","state of hawaii","state of idaho","state of illinois","state of indiana","state of iowa","state of kansas","state of kentucky","state of louisiana","state of maine","state of maryland","state of massachusetts","state of michigan","state of minnesota","state of mississippi","state of missouri","state of montana","state of nebraska","state of nevada","state of new hampshire","state of new jersey","state of new mexico","state of new york","state of north carolina","state of north dakota","state of ohio","state of oklahoma","state of oregon","state of pennsylvania","state of rhode island","state of south carolina","state of south dakota","state of tennessee","state of texas","state of utah","state of vermont","state of virginia","state of washington","state of west virginia","state of wisconsin","state of wyoming"],not:["student government","city of hope","government affairs","government relations","government sales"]},{key:"legal",label:"Legal",group:"consulting",kind:"function",words:["law firm(s)","law office(s)","law group","legal services","attorney at law","attorneys at law","legaltech","legal tech","bar association"],roles:["law","lawyer(s)","attorney(s)","legal","esq","esquire","paralegal(s)","legal assistant(s)","legal secretary","litigator(s)","litigation","counsel","of counsel","legal counsel","associate attorney(s)","juris doctor","jd candidate(s)","law student(s)","law clerk(s)","judicial clerk(s)","circuit judge(s)","district judge(s)","federal judge(s)","magistrate(s)","district attorney(s)","public defender(s)","prosecutor(s)","e discovery","ediscovery","intellectual property","patent attorney(s)","patent agent(s)","notary public","mediator(s)","arbitrator(s)","arbitration"],companies:["kirkland & ellis","latham & watkins","skadden","baker mckenzie","dla piper","sidley austin","white & case","jones day","sullivan & cromwell","cravath","wachtell","davis polk","gibson dunn","paul weiss","simpson thacher","cooley$","cooley llp","wilson sonsini","goodwin procter","ropes & gray","morgan lewis","morgan & morgan","greenberg traurig","holland & knight","hogan lovells","norton rose fulbright","clifford chance","freshfields","linklaters","allen & overy","a&o shearman","mayer brown","king & spalding","orrick","perkins coie","fenwick & west","quinn emanuel","williams & connolly","weil gotshal","proskauer","debevoise","milbank","covington & burling","arnold & porter","mcdermott will","fish & richardson","foley & lardner","bryan cave","littler","jackson lewis","ogletree","fisher phillips","legalzoom","rocket lawyer","clio$","lexisnexis","westlaw"],not:["law enforcement","general counsel","in house counsel","corporate counsel","chief legal officer(s)","legal sea foods","legal & general"]},{key:"management-consulting",label:"Management Consulting",group:"consulting",kind:"function",words:["management consulting","strategy consulting","business consulting","operations consulting","mbb","big four","big 4"],roles:["management consultant(s)","strategy consultant(s)"],companies:["mckinsey","boston consulting group","bcg$","bcg x","bain$","bain & company","deloitte","accenture","pwc$","pricewaterhousecoopers","ey$","ey parthenon","ernst & young","kpmg","oliver wyman","kearney$","a t kearney","roland berger","l e k consulting","lek consulting","booz allen hamilton","capgemini","huron consulting","alvarez & marsal","fti consulting","guidehouse","protiviti","west monroe partners","slalom","zs associates","gartner","simon kucher","putnam associates","charles river associates","cornerstone research","analysis group","navigant","ankura","the bridgespan group","dalberg"]},{key:"hr-recruiting",label:"HR & Recruiting",group:"consulting",kind:"function",words:["staffing agency","staffing agencies","staffing firm(s)","staffing company","staffing companies","recruitment agency","recruitment agencies","recruiting agency","recruiting agencies","recruiting firm(s)","executive search","peo","professional employer organization","rpo","recruitment process outsourcing","workforce solutions","hr tech","hrtech","hr consulting"],roles:["human resources","human resource","hr","hris","hrbp","hr business partner(s)","people operations","people ops","people & culture","talent acquisition","talent management","recruiter(s)","recruiting","recruitment","technical recruiter(s)","headhunter(s)","staffing","talent sourcing","sourcer(s)","employer branding","compensation and benefits","total rewards","benefits administration","payroll","hr consultant(s)","shrm","shrm cp","shrm scp","sphr","phr","learning and development","l&d","organizational development","dei","diversity equity and inclusion","employee relations","labor relations"],companies:["robert half","randstad","adecco","manpowergroup","manpower$","kelly services","kforce","insight global","teksystems","aerotek","allegis","korn ferry","spencer stuart","heidrick","egon zehnder","russell reynolds","michael page","pagegroup","express employment","aya healthcare","amn healthcare","cross country healthcare","indeed$","glassdoor","ziprecruiter","adp$","automatic data processing","paychex","paylocity","paycom","paycor","ukg$","justworks","trinet","insperity","bamboohr","greenhouse software","culture amp","hirevue","cielo talent","alexander mann","hudson rpo","workday"],not:["24 hr"]},{key:"security-services",label:"Security Services",group:"consulting",kind:"function",words:["security company","security companies","security firm(s)","security services","private security","security guard company","guard services","security patrol","executive protection","close protection","alarm company","alarm monitoring"],roles:["security guard(s)","security officer(s)","armed security","unarmed security","armed guard(s)","unarmed guard(s)","bodyguard(s)","event security","campus security","site security","security supervisor(s)","personal protection","protection agent(s)","loss prevention officer(s)"],companies:["allied universal","securitas","gardaworld","garda world","g4s","adt$","adt security","brinks","brinks home","pinkerton","prosegur","vivint","simplisafe","us security associates","guardsmark"],not:["information security","cyber security","it security","data security","network security","cloud security","application security","managed security","national security","homeland security","social security","food security","job security","financial security","security clearance","security operations center","chief security officer(s)","security token(s)","security analyst(s)","security engineer(s)","security architect(s)","security researcher(s)"]},{key:"real-estate",label:"Real Estate",group:"realestate",kind:"industry",words:["real estate","realtor(s)","realty","real estate agent(s)","property management","property manager(s)","commercial real estate","cre","residential real estate","real estate investor(s)","real estate investing","real estate investment(s)","reit(s)","leasing agent(s)","leasing consultant(s)","leasing specialist(s)","apartment leasing","listing agent(s)","buyers agent(s)","title company","title insurance","escrow","land acquisition","real estate developer(s)","real estate development","property development","property developer(s)","multifamily","multi family","investment property","rental property","rental properties","home inspector(s)"],names:["properties"],companies:["keller williams","coldwell banker","re max","remax","century 21","compass$","redfin","zillow","opendoor","offerpad","berkshire hathaway homeservices","howard hanna","douglas elliman","corcoran$","corcoran group","cbre","jll$","jones lang lasalle","cushman & wakefield","colliers","newmark","marcus & millichap","eastdil","prologis","simon property group","greystar","equity residential","avalonbay","camden property","invitation homes","american homes 4 rent","costar","loopnet","apartments com","realpage","yardi","appfolio","wework","regus","iwg$","first american","fidelity national financial","fidelity national title","old republic title","stewart title"]},{key:"construction-trades",label:"Construction & Trades",group:"realestate",kind:"industry",words:["construction","general contractor(s)","roofing contractor(s)","building contractor(s)","licensed contractor(s)","electrical contractor(s)","plumbing contractor(s)","hvac contractor(s)","home builder(s)","homebuilder(s)","custom home builder(s)","construction superintendent(s)","site superintendent(s)","project superintendent(s)","general superintendent(s)","foreman","foremen","carpenter(s)","carpentry","electrician(s)","plumber(s)","plumbing","hvac","roofer(s)","roofing","masonry","drywall","concrete","excavation","paving","landscaping","landscaper(s)","landscape architect(s)","painting contractor(s)","handyman","remodeling","renovation(s)","home improvement","cabinetry","flooring","estimator(s)","preconstruction","civil engineer(s)","civil engineering","structural engineer(s)","structural engineering","architecture firm(s)","architectural","licensed architect(s)","registered architect(s)","bim","journeyman","journeymen","ironworker(s)","welder(s)","heavy equipment operator(s)","crane operator(s)","building inspector(s)"],names:["builders","contractors","contracting"],companies:["bechtel","fluor","kiewit","skanska","whiting turner","gilbane","mortenson","mccarthy building","hensel phelps","aecom","jacobs$","jacobs engineering","stantec","wsp$","wsp global","kimley horn","gensler","hok$","perkins&will","perkins and will","skidmore owings","lennar","dr horton","d r horton","pulte","pultegroup","toll brothers","nvr$","kb home","taylor morrison","meritage homes","david weekley homes","m i homes","ashton woods","vulcan materials","martin marietta","cemex","summit materials","quikrete","united rentals","sunbelt rentals","herc rentals","angi$","homeadvisor","thumbtack","emcor","quanta services","mastec","dycom","comfort systems","roto rooter","mr rooter"],not:["concrete results","under construction","brand builder(s)","team builder(s)","community builder(s)","government contractor(s)","defense contractor(s)","independent contractor(s)","government contracting","damage estimator(s)","collision estimator(s)","auto estimator(s)"]},{key:"charities",label:"Nonprofits & Charities",group:"nonprofit",kind:"industry",words:["nonprofit(s)","non profit(s)","not for profit","not for profits","501 c 3","501c3","ngo","ngos","charity","charities","charitable","philanthropy","philanthropies","philanthropic","humanitarian","grant writer(s)","grant writing","grants manager(s)","major gifts","annual giving","planned giving","donor relations","volunteer coordinator(s)","volunteer management","food bank(s)","food pantry","homeless shelter(s)","community organizer(s)","community foundation(s)","social services"],names:["foundation"],companies:["american red cross","red cross","united way","habitat for humanity","salvation army","goodwill$","goodwill industries","ymca","ywca","boys & girls club","big brothers big sisters","make a wish","feeding america","meals on wheels","unicef","save the children","world vision","doctors without borders","medecins sans frontieres","oxfam","world wildlife fund","the nature conservancy","sierra club","american cancer society","american heart association","alzheimers association","march of dimes","susan g komen","teach for america","americorps","peace corps","kiva$","givedirectly","wikimedia","aclu$","american civil liberties union","amnesty international","human rights watch","special olympics","national urban league","naacp","junior achievement","city year"],not:["foundation medicine","foundation capital","foundation building","foundation financial","foundation repair","foundation model(s)"]},{key:"social-work",label:"Social Work & Human Services",group:"nonprofit",kind:"industry",words:["social work","social worker(s)","msw","bsw","lmsw","human services","social services","child welfare","child protective services","foster care","adoption agency","adoption agencies","family services","youth services","community services","case worker(s)","caseworker(s)","family support","homeless services","housing assistance","refugee resettlement","domestic violence","victim advocate(s)","victim services","youth worker(s)","residential counselor(s)","direct support professional(s)","group home(s)","developmental disabilities","intellectual disabilities","reentry services","reentry specialist(s)"],companies:["catholic charities","volunteers of america","boys town","national association of social workers","nasw$","childrens home society"],not:[...i]},{key:"faith",label:"Faith & Ministry",group:"nonprofit",kind:"industry",words:["church","churches","ministry","ministries","pastor(s)","senior pastor(s)","associate pastor(s)","youth pastor(s)","worship leader(s)","worship pastor(s)","chaplain(s)","missionary","missionaries","ordained minister(s)","youth minister(s)","priest(s)","deacon(s)","diocese","archdiocese","parish","parishes","synagogue(s)","rabbi(s)","mosque(s)","imam(s)","seminary","seminarian(s)","theology","faith based","christian ministry"],companies:["the church of jesus christ","hillsong","cru$","campus crusade","young life","fellowship of christian athletes","intervarsity","samaritans purse","compassion international","focus on the family","world relief","catholic relief services","lutheran services"],not:["ministry of","ministries of"]}],o=/^\s*(ex[-\s]|former(ly)?\b|previously\b|prev\b|past\b|retired\b)/i,c=/(?:\s(?:at\s+|@\s*)|^@|\s@)(.+)$/i,l=new Set(["for","helping","helps","serving","serves","supporting","empowering"]),u=new Set(["school","college","university","universidad"]),d=/['‘’ʼ]/g,m=/^[\x00-\x7f]*$/,p=/[a-z0-9]+(?:&[a-z0-9]+)*/g,g=/[\p{L}\p{N}]+(?:&[\p{L}\p{N}]+)*/gu,h=/\p{M}+/gu;function f(e){let a=String(e??"").toLowerCase().replace(d,""),s=p;m.test(a)||(a=a.normalize("NFKD").replace(h,""),s=g);let r=[];for(let e of a.match(s)||[])"and"!==e&&r.push(e);return r}let y=e=>e.endsWith("(s)")?[e.slice(0,-3),`${e.slice(0,-3)}s`]:[e],b=n.length,k=n.map(e=>e.key),v=new Map(k.map((e,a)=>[e,a])),w=n.map(e=>"education"===e.group),$=n.map(e=>"function"===e.kind),x=new Map,S=new Map,j=new Map,E=new Map,z=new Set,_=new Map,T=1;function O(e,a,s){for(let r of a||[])for(let a of y(r)){let r=f(a);if(!r.length)continue;let t=r.join(" "),i=e.get(t)||[];i.includes(s)||i.push(s),e.set(t,i);for(let e=1;e<r.length;e++)z.add(r.slice(0,e).join(" "));T=Math.max(T,r.length)}}n.forEach((e,a)=>{for(let s of(O(x,e.words,a),O(S,e.names,a),O("function"===e.kind?S:x,e.roles,a),"function"===e.kind&&O(E,e.roles,a),O(j,e.not,a),e.companies||[])){let e=s.endsWith("$"),r=f(e?s.slice(0,-1):s);if("the"===r[0]&&(r=r.slice(1)),!r.length)continue;let t=_.get(r[0])||[];t.push({words:r,exact:e,sector:a}),_.set(r[0],t)}});let C=Object.freeze([]);function N(e,a,s,r,t,i){let n=i&&[],o=i&&[];for(let i=0;i<e.length;i++){let c=e[i];for(let l=1;;l++){if(i<a){let e=x.get(c);if(e){for(let a of e)r.add(a);n&&l>1&&n.push([i,i+l])}if(s){let e=S.get(c);if(e)for(let a of e)r.add(a)}if(o){let e=E.get(c);e&&o.push([i,i+l,e])}}let u=j.get(c);if(u)for(let e of u)t.add(e);if(l>=T||i+l>=e.length||!z.has(c))break;c+=` ${e[i+l]}`}}if(o){for(let[e,a,s]of o)if(!n.some(([s,r])=>s<=e&&a<=r&&r-s>a-e))for(let e of s)i.add(e)}}function R(e,a){if(!e.size)return C;let s=[];for(let r of e)a.has(r)||s.push(r);return s.length?s.sort((e,a)=>e-a):C}let I=new Set(["arena","stadium","center","centre","field","park","ballpark","dome","amphitheater","amphitheatre","theater","theatre","pavilion","forum","coliseum","speedway","performing"]);function A(){let e=new Map,s=s=>(e.has(s)||e.set(s,(0,a.cleanCompany)(s)),e.get(s)),r=new Map,t=e=>{let t=r.get(e);return t||(t=function(e,s){let r=[],t=-1;for(let i of(0,a.headlineParts)(e)){if(o.test(i))continue;let e=c.exec(i),a=e?s(e[1]):null,n=f(i),u=n.length;for(let e=0;e<n.length;e++)if(l.has(n[e])){u=e;break}let d=new Set,m=new Set,p=new Set;for(let e of(N(n,u,!1,d,m,p),p))if(!m.has(e)){for(let e of d)$[e]||d.delete(e);break}a&&t<0&&(t=r.length),r.push({company:a,hits:d,vetoes:m})}return{parts:r,first:t}}(e,s),r.set(e,t)),t};return function(e,a=[]){let s=function(e){let a=f(e);if(!a.length)return C;let s=new Set,r=new Set;N(a,a.length,!0,s,r);let t=a.some(e=>u.has(e)),i=+("the"===a[0]);for(let e of _.get(a[i])||[]){if(t&&!w[e.sector])continue;let r=a.length-i;if(r<e.words.length||e.exact&&r!==e.words.length||I.has(a[i+e.words.length]))continue;let n=!0;for(let s=1;s<e.words.length&&n;s++)n=a[i+s]===e.words[s];n&&s.add(e.sector)}return R(s,r)}(e),r=null;for(let s of a){if(!s)continue;let a=function(e,a){let{parts:s,first:r}=e,t=r>=0&&s.some(e=>e.company===a),i=r<0||!t||s[r].company===a,n=new Set,o=new Set;for(let e=0;e<s.length;e++){let c=s[e];if(r<0||i&&e<r||t&&c.company===a){for(let e of c.hits)n.add(e);for(let e of c.vetoes)o.add(e)}}return R(n,o)}(t(s),e);if(a.length)for(let e of(r||=new Uint32Array(b),a))r[e]++}if(!r)return s.length?s.map(e=>k[e]):C;let i=[];for(let e=0;e<b;e++)(s.includes(e)||r[e]>=1&&2*r[e]>=a.length)&&i.push(k[e]);return i.length?i:C}}let M=Object.freeze(s.INDUSTRIES.flatMap(e=>[e.key,...n.filter(a=>a.group===e.key).map(e=>e.key)])),q=e=>v.has(e)?n[v.get(e)].group:void 0,F=function(e){let a=0x811c9dc5;for(let s=0;s<e.length;s++)a^=e.charCodeAt(s),a=Math.imul(a,0x1000193);return(a>>>0).toString(16).padStart(8,"0")}(JSON.stringify([3,[...l],[...u],[...I],n]));for(let e of n){for(let a of[e.words,e.roles,e.names,e.companies,e.not])a&&Object.freeze(a);Object.freeze(e)}Object.freeze(n),e.s(["DIRECTORY_VERSION",0,F,"SECTOR_KEYS",0,M,"sectorGroup",0,q,"sectorMatcher",0,A,"suggestSectors",0,function(e=[],a,{limit:s=5}={}){if(!a)return[];let r=k.map(()=>new Set),t=new Uint32Array(b);for(let e of a.companies.values())if(e.headcount&&e.sectors?.length)for(let a of e.sectors)t[v.get(a)]++;for(let s of e){let e=s.profile_url||`id:${s.id}`;for(let t of a.people.get(s)?.roles||[])if(!t.former&&t.company)for(let s of a.companies.get(t.company)?.sectors||C)r[v.get(s)].add(e)}return n.map((e,a)=>({key:e.key,label:e.label,group:e.group,people:r[a].size,companies:t[a]})).filter(e=>e.people>0).sort((e,a)=>a.people-e.people||a.companies-e.companies||v.get(e.key)-v.get(a.key)).slice(0,s)}],56029);let L=["S","A","B","C","D"],D=Object.keys(a.SECTOR_BONUS),U=Object.freeze({sectors:Object.freeze([]),strength:"lean"});function G(e){if(null==e)return{sectors:[],strength:"lean"};if("object"!=typeof e||Array.isArray(e))throw Error("Your sector must be a choice of sectors and a strength.");let a=e.sectors??[];if(!Array.isArray(a))throw Error("Sectors must be a list.");for(let e of a)if(!M.includes(e))throw Error(`There is no sector called '${String(e).slice(0,40)}'.`);let s=M.filter(e=>a.includes(e));if(s.length>3)throw Error("Pick up to 3 sectors.");let r=e.strength??"lean";if(!D.includes(r))throw Error("Strength is lean or strong.");return{sectors:s,strength:r}}function H(e,{version:a=F}={}){let s;try{s=G(e)}catch{return"none"}return s.sectors.length?`${s.strength}:${s.sectors.join(",")}@${a}`:"none"}let P=Object.fromEntries(L.map((e,a)=>[e,L.length-a]));function W(e,a,s,{examples:r=5,companyOf:t}={}){let i=new Map;for(let a of e){let e=a.profile_url||`id:${a.id}`,s=i.get(e);(!s||(a.degree||9)<(s.degree||9))&&i.set(e,a)}let n=[];for(let e of i.values()){let r=a(e),t=s(e);t&&r!==t&&n.push({r:e,from:r||null,to:t,up:(P[t]||0)>(P[r]||0)})}let o=n.filter(e=>e.up).sort((e,a)=>P[a.to]-P[e.to]||(e.r.degree||9)-(a.r.degree||9)),c=n.filter(e=>!e.up).sort((e,a)=>(P[a.from]||0)-(P[e.from]||0)||(e.r.degree||9)-(a.r.degree||9)),l=Math.min(o.length,r-Math.min(c.length,Math.floor(r/2))),u=Math.min(c.length,r-l),d=[...o.slice(0,l),...c.slice(0,u)];return{people:i.size,up:o.length,down:c.length,examples:d.map(e=>({name:e.r.name||"Someone",degree:e.r.degree||null,company:t?.(e.r)||null,from:e.from,to:e.to}))}}e.s(["FIELD_ASKED_SETTING",0,{default:!1,parse(e){if("boolean"!=typeof e)throw Error("Whether your field was asked is true or false.");return e}},"NO_FOCUS",0,U,"SECTOR_FOCUS_SETTING",0,{default:U,parse:G},"focusFingerprint",0,H,"parseSectorFocus",0,G,"previewSectorFocus",0,function(e=[],{overrides:s=new Map,industryOf:r,sectorsOf:t=A(),groupOf:i=q,from:n=U,to:o=U,examples:c=5,tierScale:l,titles:u=null,read:d=(0,a.readNetwork)(e,{industryOf:r,sectorsOf:t,groupOf:i})}={}){let m=(0,a.scoreNetwork)(e,{overrides:s,focus:n,tierScale:l,titles:u,read:d}),p=(0,a.scoreNetwork)(e,{overrides:s,focus:o,tierScale:l,titles:u,read:d}),g=[];for(let[e,a]of m.companyScores){let s=p.companyScores.get(e);if(!e||!s||a.score===s.score)continue;let r=s.sector||a.sector||d.companies.get(e)?.industry;g.push({name:e,from:a.score,to:s.score,sector:r,people:d.headcount.get(e)||0})}g.sort((e,a)=>a.people-e.people||e.name.localeCompare(a.name));let h=W(e,e=>m.scores.get(e.id)?.tier,e=>p.scores.get(e.id)?.tier,{examples:c,companyOf:e=>p.scores.get(e.id)?.company});return{scored:e.length,companies:g.length,companiesUp:g.filter(e=>e.to>e.from).length,companiesDown:g.filter(e=>e.to<e.from).length,companyExamples:g.slice(0,c).map(({name:e,from:a,to:s,sector:r})=>({name:e,from:a,to:s,sector:r})),...h}},"sameFocus",0,(e,a)=>H(e)===H(a),"tierMoves",0,W],14223)},25232,e=>{"use strict";var a=e.i(68835);let s=Object.freeze({points:Object.freeze({}),roles:Object.freeze([])}),r=e=>{let a=Number(e);if(!Number.isFinite(a)||a<0||a>10)throw Error("Title points go from 0 to 10.");return Math.round(2*a)/2};function t(e=s){let a=Object.keys(e.points||{}).sort().map(a=>`${a}=${e.points[a]}`).join(","),r=(e.roles||[]).map(e=>`${e.text}=${e.points}`).sort().join(",");return a||r?`${a}|${r}`:"none"}["investor","venture","angel","general partner","managing partner","principal at","vc"].map(e=>({text:e,points:10})),e.s(["TITLE_RANKING_SETTING",0,{default:s,parse(e){if(!e||"object"!=typeof e||Array.isArray(e))throw Error("A title ranking is { points, roles }.");let s={};for(let[t,i]of Object.entries(e.points||{})){if(!Object.hasOwn(a.LEVELS,t))throw Error(`There is no kind of title called '${t}'.`);let e=r(i);e!==a.LEVELS[t].points&&(s[t]=e)}let t=[],i=new Set;for(let a of Array.isArray(e.roles)?e.roles:[]){let e=String(a?.text??"").trim().toLowerCase().replace(/\s+/g," ");if(e.length<2)throw Error("A role needs at least two letters.");if(e.length>60)throw Error("Keep a role under 60 letters.");i.has(e)||(i.add(e),t.push({text:e,points:r(a.points)}))}if(t.length>20)throw Error("Up to 20 roles.");return{points:s,roles:t}}},"isDefaultRanking",0,e=>"none"===t(e),"rankingFingerprint",0,t])}];
7
+
8
+ //# sourceMappingURL=lib_1r6l86l._.js.map
@@ -159,16 +159,16 @@ CREATE TABLE IF NOT EXISTS user_profile (
159
159
  created_at TEXT DEFAULT (datetime('now')),
160
160
  updated_at TEXT DEFAULT (datetime('now'))
161
161
  );
162
- `;e.s(["SCHEMA_SQL",0,a],28681);let o="0.4.10";e.s(["APP_VERSION",0,o],48170);var s=e.x("node:sqlite",()=>require("node:sqlite"),!0),l=e.i(12714),c=e.i(12506);let u=["/api/admin-delete","/api/admin-update","/api/delete-cluster","/api/setup-profile","/api/scraper","/api/update","/api/data/export","/api/data/import","/api/data/restart","/api/data/reveal"],f=new Set(["127.0.0.1","::1","localhost"]),d=new Set(["127.0.0.1","localhost","[::1]","0.0.0.0"]);function p(e){return f.has(String(e||"").toLowerCase())}function h({method:e,pathname:t,headers:n,env:r={}}){let i=e=>n?.get?.(e)??null,a=r.SIX_DEGREES_BIND||r.HOSTNAME;if(function({bind:e,host:t}){let n;if(!p(e)||!t)return!1;try{n=new URL(`http://${t}`).hostname.toLowerCase()}catch{return!0}return!d.has(n)}({bind:a,host:i("host")}))return{status:421,error:"This app only answers to 127.0.0.1 and localhost."};if(function({method:e,secFetchSite:t,origin:n,host:r}){if(!e||!["POST","PUT","PATCH","DELETE"].includes(e.toUpperCase()))return!1;if(t){if("same-origin"===t||"none"===t)return!1;if("same-site"!==t||!n)return!0}if(n)try{let e=new URL(n).host;return!!r&&e!==r}catch{return!0}return!1}({method:e,secFetchSite:i("sec-fetch-site"),origin:i("origin"),host:i("host")}))return{status:403,error:"Cross-site requests are not accepted. This app only answers to pages it serves."};if(!u.some(e=>t===e||t.startsWith(`${e}/`)))return null;let o=function({bind:e,token:t,bearer:n}){return t&&function(e,t){if("string"!=typeof e||"string"!=typeof t||e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e.charCodeAt(r)^t.charCodeAt(r);return 0===n}(n,t)?{allow:!0,reason:"valid admin token"}:p(e)?{allow:!0,reason:"server is bound to loopback; only this machine can connect"}:t?{allow:!1,status:401,reason:"missing or incorrect admin token"}:{allow:!1,status:503,reason:"server is not bound to loopback and no ADMIN_TOKEN is configured"}}({bind:a,token:r.ADMIN_TOKEN,bearer:(i("authorization")||"").replace(/^Bearer\s+/i,"")});return o.allow?null:{status:o.status,error:o.reason}}e.s(["requestRefusal",0,h],54090);var T=e.i(1348);let m=new Set(["ENOENT","EINVAL","ENOTSUP","ENOSYS","EISDIR","EPERM","EBADF"]);function E(e){let t;try{t=n.default.openSync(e,"r")}catch(e){if(m.has(e.code))return;throw e}try{n.default.fsyncSync(t)}catch(e){if(!m.has(e.code))throw e}finally{n.default.closeSync(t)}}function y(e,t){let r=`${e}.${process.pid}.tmp`;try{let i=n.default.openSync(r,"w");try{n.default.writeFileSync(i,t),n.default.fsyncSync(i)}finally{n.default.closeSync(i)}n.default.renameSync(r,e)}catch(e){throw n.default.rmSync(r,{force:!0}),e}E(i.default.dirname(e))}let S=function(e){let t=n.default.openSync(e,"r");try{n.default.fsyncSync(t)}finally{n.default.closeSync(t)}},g=function(e,t){y(e,`${JSON.stringify(t,null,2)}
163
- `)},w=[25,50,100,200,500],_=[100,250,500,1e3,0],A=[10,25,50,100],N="America/Los_Angeles";function b(e){try{return JSON.parse((0,n.readFileSync)(e,"utf8"))}catch{return null}}function R(e=Date.now()){let t=Object.fromEntries(new Intl.DateTimeFormat("en-US",{timeZone:N,year:"numeric",month:"numeric"}).formatToParts(new Date(e)).map(e=>[e.type,e.value])),n=Number(t.year),r=Number(t.month),i=Date.UTC(n,r-1,1,8);for(let e=0;e<2;e++)i=Date.UTC(n,r-1,1,-function(e){let t=(new Intl.DateTimeFormat("en-US",{timeZone:N,timeZoneName:"shortOffset"}).formatToParts(new Date(e)).find(e=>"timeZoneName"===e.type)?.value||"GMT-8").match(/GMT([+-]\d+)(?::(\d+))?/);return t?Number(t[1]):-8}(i));return i}function I(e){let t,n=b(i.default.join(e,"scan-limits.json"))||{},r=(e,t)=>Number.isInteger(e)&&e>=0?e:t;return{daily:r(n.daily,50),monthly:r(n.monthly,250),profiles:(t=r(n.profiles,0)||50,A.filter(e=>e<=t).pop()??A[0])}}let O="linkedin-activity.json",L="linkedin-cooldown.json",D="scan-limits.json",x=e=>!!e&&"object"==typeof e&&!Array.isArray(e),k=e=>void 0===e||Array.isArray(e)&&e.every(e=>"number"==typeof e&&Number.isFinite(e)&&e>=0),X=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0;function F(e,t){if(!x(t))return"it is not a JSON object";if(e===O){if(!k(t.searches)||!k(t.profiles))return"its record of searches is not a list of times"}else if(e===L){if(!X(t.until))return"its pause has no end time";if(void 0!==t.reason&&"string"!=typeof t.reason)return"its pause has a reason that is not text";if(void 0!==t.set_at&&!X(t.set_at))return"its pause has a start time that is not a time"}else if(e===D){if(void 0!==t.daily&&!w.includes(t.daily))return`its daily limit (${String(t.daily).slice(0,20)}) is not one Six Degrees offers`;if(void 0!==t.monthly&&!_.includes(t.monthly))return`its monthly limit (${String(t.monthly).slice(0,20)}) is not one Six Degrees offers`;if(void 0!==t.profiles&&!A.includes(t.profiles))return`its limit on profile views (${String(t.profiles).slice(0,20)}) is not one Six Degrees offers`}return null}function $(e=[],t=[]){let n=e=>e.reduce((e,t)=>e.set(t,(e.get(t)||0)+1),new Map),r=n(e);for(let[e,i]of n(t))i>(r.get(e)||0)&&r.set(e,i);return[...r].sort((e,t)=>e[0]-t[0]).flatMap(([e,t])=>Array(t).fill(e))}function j(e){if(void 0===e)return[];if(!Array.isArray(e))return null;let t=e.map(Number);return t.every(Number.isFinite)?t:null}let v=e=>{try{return(0,n.lstatSync)(e),!0}catch{return!1}};function U({dir:e,from:t}){let n=t=>i.default.join(e,t),r=e=>{let n=b(i.default.join(t,e));return x(n)&&!F(e,n)?n:null},a=r(O);if(a){let e=v(n(O))?b(n(O)):{},t=x(e)?j(e.searches):null,r=x(e)?j(e.profiles):null;t&&r&&g(n(O),{searches:$(t,a.searches),profiles:$(r,a.profiles)})}let o=r(L);if(o){let e=b(n(L)),t=Number.isFinite(Number(e?.until))?Number(e.until):-1/0;o.until>t&&g(n(L),{until:o.until,reason:o.reason??"LinkedIn pushed back",set_at:o.set_at??null})}let s=r(D);s&&!v(n(D))&&g(n(D),{daily:s.daily??50,monthly:s.monthly??250,profiles:s.profiles??50})}e.s(["budgetFileProblem",0,F,"liftCooldown",0,function(e){try{(0,n.unlinkSync)(i.default.join(e,"linkedin-cooldown.json"))}catch{}},"linkedinState",0,function(e,t=Date.now()){let r=I(e),a=function(e,t=Date.now()){let r=i.default.join(e,"linkedin-activity.json"),a=(0,n.existsSync)(r)?b(r):{searches:[],profiles:[]};if(!a||"object"!=typeof a)return{searchesToday:1/0,searchesMonth:0,profilesToday:1/0,unreadable:!0};let o=(Array.isArray(a.searches)?a.searches:[]).map(Number),s=(Array.isArray(a.profiles)?a.profiles:[]).map(Number),l=t/1e3-86400,c=R(t)/1e3;return{searchesToday:o.filter(e=>e>l).length,searchesMonth:o.filter(e=>e>=c).length,profilesToday:s.filter(e=>e>l).length}}(e,t),o=(e,t)=>e?Math.max(0,e-t):null;return{...a,limits:r,leftToday:o(r.daily,a.searchesToday),leftMonth:o(r.monthly,a.searchesMonth),profilesLeftToday:o(r.profiles,a.profilesToday),monthResets:function(e=Date.now()){let t=R(e);return R(t+3456e6)}(t),cooldown:function(e,t=Date.now()){let n=b(i.default.join(e,"linkedin-cooldown.json")),r=1e3*Number(n?.until);return n&&Number.isFinite(r)&&!(r<=t)?{until:r,reason:String(n.reason||"LinkedIn pushed back"),setAt:1e3*Number(n.set_at)||null}:null}(e,t)}},"mergeBudgetFiles",0,U,"writeLimits",0,function(e,{daily:t,monthly:r,profiles:a}={}){var o;let s,l=I(e),c={daily:w.includes(t)?t:l.daily,monthly:_.includes(r)?r:l.monthly,profiles:A.includes(a)?a:l.profiles};return o=i.default.join(e,"scan-limits.json"),s=`${o}.${process.pid}.${Date.now()}.tmp`,(0,n.writeFileSync)(s,JSON.stringify(c,null,2)),(0,n.renameSync)(s,o),c}],41238);var C=e.i(74533);let M=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,P="/avatars/";function G(e){return"string"==typeof e&&e.startsWith(P)&&M.test(e.slice(P.length))?e:null}function q(e){return e.prepare(`SELECT DISTINCT profile_url AS profileUrl, profile_image_url AS imageUrl
162
+ `;e.s(["SCHEMA_SQL",0,a],28681);let o="0.5.0";e.s(["APP_VERSION",0,o],48170);var s=e.x("node:sqlite",()=>require("node:sqlite"),!0),l=e.i(12714),c=e.i(12506);let u=["/api/admin-delete","/api/admin-update","/api/delete-cluster","/api/setup-profile","/api/scraper","/api/update","/api/data/export","/api/data/import","/api/data/restart","/api/data/reveal"],f=new Set(["127.0.0.1","::1","localhost"]),d=new Set(["127.0.0.1","localhost","[::1]","0.0.0.0"]);function p(e){return f.has(String(e||"").toLowerCase())}function h({method:e,pathname:t,headers:n,env:r={}}){let i=e=>n?.get?.(e)??null,a=r.SIX_DEGREES_BIND||r.HOSTNAME;if(function({bind:e,host:t}){let n;if(!p(e)||!t)return!1;try{n=new URL(`http://${t}`).hostname.toLowerCase()}catch{return!0}return!d.has(n)}({bind:a,host:i("host")}))return{status:421,error:"This app only answers to 127.0.0.1 and localhost."};if(function({method:e,secFetchSite:t,origin:n,host:r}){if(!e||!["POST","PUT","PATCH","DELETE"].includes(e.toUpperCase()))return!1;if(t){if("same-origin"===t||"none"===t)return!1;if("same-site"!==t||!n)return!0}if(n)try{let e=new URL(n).host;return!!r&&e!==r}catch{return!0}return!1}({method:e,secFetchSite:i("sec-fetch-site"),origin:i("origin"),host:i("host")}))return{status:403,error:"Cross-site requests are not accepted. This app only answers to pages it serves."};if(!u.some(e=>t===e||t.startsWith(`${e}/`)))return null;let o=function({bind:e,token:t,bearer:n}){return t&&function(e,t){if("string"!=typeof e||"string"!=typeof t||e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e.charCodeAt(r)^t.charCodeAt(r);return 0===n}(n,t)?{allow:!0,reason:"valid admin token"}:p(e)?{allow:!0,reason:"server is bound to loopback; only this machine can connect"}:t?{allow:!1,status:401,reason:"missing or incorrect admin token"}:{allow:!1,status:503,reason:"server is not bound to loopback and no ADMIN_TOKEN is configured"}}({bind:a,token:r.ADMIN_TOKEN,bearer:(i("authorization")||"").replace(/^Bearer\s+/i,"")});return o.allow?null:{status:o.status,error:o.reason}}e.s(["requestRefusal",0,h],54090);var T=e.i(1348);let m=new Set(["ENOENT","EINVAL","ENOTSUP","ENOSYS","EISDIR","EPERM","EBADF"]);function E(e){let t;try{t=n.default.openSync(e,"r")}catch(e){if(m.has(e.code))return;throw e}try{n.default.fsyncSync(t)}catch(e){if(!m.has(e.code))throw e}finally{n.default.closeSync(t)}}function y(e,t){let r=`${e}.${process.pid}.tmp`;try{let i=n.default.openSync(r,"w");try{n.default.writeFileSync(i,t),n.default.fsyncSync(i)}finally{n.default.closeSync(i)}n.default.renameSync(r,e)}catch(e){throw n.default.rmSync(r,{force:!0}),e}E(i.default.dirname(e))}let S=function(e){let t=n.default.openSync(e,"r");try{n.default.fsyncSync(t)}finally{n.default.closeSync(t)}},g=function(e,t){y(e,`${JSON.stringify(t,null,2)}
163
+ `)},w={fast:{label:"Fast",pagePause:20,chunkCooldown:60,profileGap:60},medium:{label:"Medium",pagePause:45,chunkCooldown:180,profileGap:90},slow:{label:"Slow",pagePause:90,chunkCooldown:300,profileGap:120}},_=[25,50,100,200,500],A=[100,250,500,1e3,0],b=[10,25,50,100],N="America/Los_Angeles";function R(e){try{return JSON.parse((0,n.readFileSync)(e,"utf8"))}catch{return null}}function I(e=Date.now()){let t=Object.fromEntries(new Intl.DateTimeFormat("en-US",{timeZone:N,year:"numeric",month:"numeric"}).formatToParts(new Date(e)).map(e=>[e.type,e.value])),n=Number(t.year),r=Number(t.month),i=Date.UTC(n,r-1,1,8);for(let e=0;e<2;e++)i=Date.UTC(n,r-1,1,-function(e){let t=(new Intl.DateTimeFormat("en-US",{timeZone:N,timeZoneName:"shortOffset"}).formatToParts(new Date(e)).find(e=>"timeZoneName"===e.type)?.value||"GMT-8").match(/GMT([+-]\d+)(?::(\d+))?/);return t?Number(t[1]):-8}(i));return i}function O(e){let t,n=R(i.default.join(e,"scan-limits.json"))||{},r=(e,t)=>Number.isInteger(e)&&e>=0?e:t;return{daily:r(n.daily,50),monthly:r(n.monthly,250),profiles:(t=r(n.profiles,0)||50,b.filter(e=>e<=t).pop()??b[0]),pace:w[n.pace]?n.pace:"fast"}}let L="linkedin-activity.json",D="linkedin-cooldown.json",x="scan-limits.json",k=e=>!!e&&"object"==typeof e&&!Array.isArray(e),F=e=>void 0===e||Array.isArray(e)&&e.every(e=>"number"==typeof e&&Number.isFinite(e)&&e>=0),X=e=>"number"==typeof e&&Number.isFinite(e)&&e>=0;function $(e,t){if(!k(t))return"it is not a JSON object";if(e===L){if(!F(t.searches)||!F(t.profiles))return"its record of searches is not a list of times"}else if(e===D){if(!X(t.until))return"its pause has no end time";if(void 0!==t.reason&&"string"!=typeof t.reason)return"its pause has a reason that is not text";if(void 0!==t.set_at&&!X(t.set_at))return"its pause has a start time that is not a time"}else if(e===x){if(void 0!==t.daily&&!_.includes(t.daily))return`its daily limit (${String(t.daily).slice(0,20)}) is not one Six Degrees offers`;if(void 0!==t.monthly&&!A.includes(t.monthly))return`its monthly limit (${String(t.monthly).slice(0,20)}) is not one Six Degrees offers`;if(void 0!==t.profiles&&!b.includes(t.profiles))return`its limit on profile views (${String(t.profiles).slice(0,20)}) is not one Six Degrees offers`}return null}function j(e=[],t=[]){let n=e=>e.reduce((e,t)=>e.set(t,(e.get(t)||0)+1),new Map),r=n(e);for(let[e,i]of n(t))i>(r.get(e)||0)&&r.set(e,i);return[...r].sort((e,t)=>e[0]-t[0]).flatMap(([e,t])=>Array(t).fill(e))}function v(e){if(void 0===e)return[];if(!Array.isArray(e))return null;let t=e.map(Number);return t.every(Number.isFinite)?t:null}let U=e=>{try{return(0,n.lstatSync)(e),!0}catch{return!1}};function C({dir:e,from:t}){let n=t=>i.default.join(e,t),r=e=>{let n=R(i.default.join(t,e));return k(n)&&!$(e,n)?n:null},a=r(L);if(a){let e=U(n(L))?R(n(L)):{},t=k(e)?v(e.searches):null,r=k(e)?v(e.profiles):null;t&&r&&g(n(L),{searches:j(t,a.searches),profiles:j(r,a.profiles)})}let o=r(D);if(o){let e=R(n(D)),t=Number.isFinite(Number(e?.until))?Number(e.until):-1/0;o.until>t&&g(n(D),{until:o.until,reason:o.reason??"LinkedIn pushed back",set_at:o.set_at??null})}let s=r(x);s&&!U(n(x))&&g(n(x),{daily:s.daily??50,monthly:s.monthly??250,profiles:s.profiles??50})}e.s(["budgetFileProblem",0,$,"liftCooldown",0,function(e){try{(0,n.unlinkSync)(i.default.join(e,"linkedin-cooldown.json"))}catch{}},"linkedinState",0,function(e,t=Date.now()){let r=O(e),a=function(e,t=Date.now()){let r=i.default.join(e,"linkedin-activity.json"),a=(0,n.existsSync)(r)?R(r):{searches:[],profiles:[]};if(!a||"object"!=typeof a)return{searchesToday:1/0,searchesMonth:0,profilesToday:1/0,unreadable:!0};let o=(Array.isArray(a.searches)?a.searches:[]).map(Number),s=(Array.isArray(a.profiles)?a.profiles:[]).map(Number),l=t/1e3-86400,c=I(t)/1e3;return{searchesToday:o.filter(e=>e>l).length,searchesMonth:o.filter(e=>e>=c).length,profilesToday:s.filter(e=>e>l).length}}(e,t),o=(e,t)=>e?Math.max(0,e-t):null;return{...a,limits:r,leftToday:o(r.daily,a.searchesToday),leftMonth:o(r.monthly,a.searchesMonth),profilesLeftToday:o(r.profiles,a.profilesToday),monthResets:function(e=Date.now()){let t=I(e);return I(t+3456e6)}(t),cooldown:function(e,t=Date.now()){let n=R(i.default.join(e,"linkedin-cooldown.json")),r=1e3*Number(n?.until);return n&&Number.isFinite(r)&&!(r<=t)?{until:r,reason:String(n.reason||"LinkedIn pushed back"),setAt:1e3*Number(n.set_at)||null}:null}(e,t)}},"mergeBudgetFiles",0,C,"writeLimits",0,function(e,{daily:t,monthly:r,profiles:a,pace:o}={}){var s;let l,c=O(e),u={daily:_.includes(t)?t:c.daily,monthly:A.includes(r)?r:c.monthly,profiles:b.includes(a)?a:c.profiles,pace:w[o]?o:c.pace};return s=i.default.join(e,"scan-limits.json"),l=`${s}.${process.pid}.${Date.now()}.tmp`,(0,n.writeFileSync)(l,JSON.stringify(u,null,2)),(0,n.renameSync)(l,s),u}],41238);var M=e.i(74533);let P=/^[A-Za-z0-9_-]+\.(webp|jpg|jpeg|png)$/,G="/avatars/";function q(e){return"string"==typeof e&&e.startsWith(G)&&P.test(e.slice(G.length))?e:null}function B(e){return e.prepare(`SELECT DISTINCT profile_url AS profileUrl, profile_image_url AS imageUrl
164
164
  FROM linkedin_connections
165
165
  WHERE profile_image_url IS NOT NULL AND profile_image_url <> ''
166
166
  AND substr(profile_image_url, 1, 9) <> '/avatars/'
167
- ORDER BY profile_url`).all().filter(e=>e.profileUrl&&!G(e.imageUrl))}e.s(["AVATAR_FILE",0,M,"localPhoto",0,G,"waitingPhotoCount",0,function(e){return new Set(q(e).map(e=>e.profileUrl)).size},"waitingPhotos",0,q],98612);let B=["bridge-progress.json","bridge-skips.json","bridge-unclear.json"],Y=["scan-limits.json","linkedin-activity.json","linkedin-cooldown.json"],W=[...B,...Y],J="import-pending",K="before-import-",V=".export-",H=".import-upload-",z=".python-setup-",Q=[V,H,z],Z=/^import-pending\.(done|cancelled)-/;function ee(e){try{return(0,n.lstatSync)(e).isDirectory()?(0,n.readdirSync)(e):[]}catch{return[]}}function et(e,t=()=>!0){let r=0,a=0;for(let o of ee(e))if(t(o))try{let t=(0,n.lstatSync)(i.default.join(e,o));t.isFile()&&(r++,a+=t.size)}catch{}return{count:r,bytes:a}}function en(e,{now:t=Date.now(),maxAgeMs:r=36e5}={}){let a=[];try{a=(0,n.readdirSync)(e)}catch{return 0}let o=0;for(let s of a){let a=Q.some(e=>s.startsWith(e));if(!a&&!Z.test(s))continue;let l=i.default.join(e,s);try{let e=(0,n.lstatSync)(l);if(!e.isDirectory()||a&&t-e.mtimeMs<r)continue;(0,n.rmSync)(l,{recursive:!0,force:!0}),o++}catch{}}return o}e.s(["BUDGET_FILES",0,Y,"EXPORT_WORK_PREFIX",0,V,"IMPORT_BACKUP_PREFIX",0,K,"NETWORK_FILES",0,B,"PENDING_DIR",0,J,"SETUP_WORK_PREFIX",0,z,"TRAVELLING_FILES",0,W,"UPLOAD_WORK_PREFIX",0,H,"folderReport",0,function({dir:e,dbFile:t,autoPrefix:r,inNetwork:a=null}){let o=i.default.join(e,"avatars");return{dataDir:e,dbFile:t,databaseBytes:["","-wal","-shm"].reduce((e,r)=>e+function(e){try{let t=(0,n.lstatSync)(e);return t.isFile()?t.size:0}catch{return 0}}(t+r),0),photos:et(o,e=>M.test(e)),photosInCopy:a?et(o,e=>M.test(e)&&a.has(e)):null,backups:function(e,{autoPrefix:t}={}){let r=[];try{r=(0,n.readdirSync)(e)}catch{return[]}let a=[];for(let o of r){let r;if(o.startsWith(".")||o.endsWith(".partial"))continue;let s=i.default.join(e,o);try{r=(0,n.lstatSync)(s)}catch{continue}(r.isFile()||r.isDirectory())&&a.push({name:o,bytes:r.isFile()?r.size:function e(t,r={left:5e4}){let a=0,o=[];try{o=(0,n.readdirSync)(t)}catch{return 0}for(let s of o){if(r.left--<=0)break;let o=i.default.join(t,s);try{let t=(0,n.lstatSync)(o);t.isDirectory()?a+=e(o,r):t.isFile()&&(a+=t.size)}catch{}}return a}(s),modifiedAt:r.mtimeMs,kind:t&&o.startsWith(t)?"auto":o.startsWith(K)?"import":"manual",folder:r.isDirectory()})}return a.sort((e,t)=>t.modifiedAt-e.modifiedAt||t.name.localeCompare(e.name))}(i.default.join(i.default.dirname(t),"backups"),{autoPrefix:r}),linkedinSignIn:(0,n.existsSync)(i.default.join(e,"chrome-profile"))}},"namesInFolder",0,ee,"revealFolder",0,function(e,{platform:t=process.platform,spawnImpl:n=C.spawn,waitMs:r=3e3}={}){let i=function(e=process.platform){return"darwin"===e?"open":"linux"===e?"xdg-open":null}(t);return i?new Promise(t=>{let a,o=null,s=!1,l=e=>{s||(s=!0,clearTimeout(o),t(e))};try{a=n(i,[e],{stdio:"ignore",detached:!0})}catch(e){l({ok:!1,message:`It couldn't be opened (${e.message}).`});return}a.on("error",e=>l({ok:!1,message:"ENOENT"===e.code?`This computer has no ${i}, so there is no file browser to open it with.`:`It couldn't be opened (${e.message}).`})),a.on("exit",e=>l(0===e?{ok:!0}:{ok:!1,message:`The file browser didn't open (${i} stopped with code ${e}).`})),o=setTimeout(()=>{try{a.unref()}catch{}l({ok:!0})},r)}):Promise.resolve({ok:!1,message:"There is no file browser to open it with on this computer."})},"sweepLeftovers",0,en],26525);var er=e.x("node:sqlite",()=>require("node:sqlite"),!0),ei=e.i(66680);let ea={sd_export_manifest:"CREATE TABLE sd_export_manifest (key TEXT PRIMARY KEY, value TEXT NOT NULL)",sd_export_files:"CREATE TABLE sd_export_files (path TEXT PRIMARY KEY, bytes BLOB NOT NULL, sha256 TEXT NOT NULL)"};function eo(e){return(0,ei.createHash)("sha256").update(e).digest("hex")}function es(e){return`'${String(e).replace(/'/g,"''")}'`}function el(e){return[...e.matchAll(/CREATE TABLE IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function ec(e){return[...e.matchAll(/CREATE (?:UNIQUE )?INDEX IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function eu(e,t="main"){try{return e.prepare(`SELECT count(DISTINCT profile_url) AS n FROM ${t}.linkedin_connections`).get().n}catch{return 0}}function ef(e){return new Set(e.prepare(`SELECT DISTINCT substr(profile_image_url, 10) AS name FROM linkedin_connections
168
- WHERE substr(profile_image_url, 1, 9) = '/avatars/'`).all().map(e=>e.name))}e.s(["EXPORT_FORMAT",0,1,"EXPORT_TABLES",0,ea,"appIndexes",0,ec,"appTables",0,el,"buildExport",0,function(e,{dir:t,outFile:r,includePhotos:a=!0,appVersion:o,schemaSql:s,now:l=new Date}){let c;e.exec(`VACUUM INTO ${es(r)}`);let u=new er.DatabaseSync(r);try{u.exec("PRAGMA journal_mode = DELETE"),u.exec(`${Object.values(ea).join(";\n")};`),u.exec("BEGIN"),a||u.exec("UPDATE linkedin_connections SET profile_image_url = NULL WHERE profile_image_url LIKE '/avatars/%'"),u.exec("DELETE FROM app_meta WHERE key = 'last_import'");let e=u.prepare("INSERT INTO sd_export_files (path, bytes, sha256) VALUES (?, ?, ?)"),r=0,f=0,d=a?ef(u):null;for(let o of function(e,{includePhotos:t=!0,photos:r=null}={}){let a=e=>{try{return(0,n.lstatSync)(e).isFile()}catch{return!1}},o=[];for(let t of W){let n=i.default.join(e,t);a(n)&&o.push({rel:t,abs:n})}if(t)for(let t of ee(i.default.join(e,"avatars")).sort()){if(!M.test(t)||r&&!r.has(t))continue;let n=i.default.join(e,"avatars",t);a(n)&&o.push({rel:`avatars/${t}`,abs:n})}return o}(t,{includePhotos:a,photos:d})){let t;try{t=(0,n.readFileSync)(o.abs)}catch{continue}e.run(o.rel,t,eo(t)),f++,o.rel.startsWith("avatars/")&&r++}let p={};for(let e of el(s))try{p[e]=u.prepare(`SELECT count(*) AS n FROM "${e}"`).get().n}catch{p[e]=0}let h="";try{h=u.prepare("SELECT value FROM app_meta WHERE key = 'scoring_version'").get()?.value??""}catch{}let T=eu(u),m={format:1,app_version:o,scoring_version:h,exported_at:l.toISOString(),include_photos:+!!a,people:T,photos:r,files:f,counts:JSON.stringify(p)},E=u.prepare("INSERT INTO sd_export_manifest (key, value) VALUES (?, ?)");for(let[e,t]of Object.entries(m))E.run(e,String(t));u.exec("COMMIT"),c={people:T,photos:r,files:f,counts:p}}catch(e){try{u.exec("ROLLBACK")}catch{}throw e}finally{u.close()}return{...c,bytes:(0,n.statSync)(r).size}},"countPeople",0,eu,"exportFileName",0,function(e=new Date){let t=e=>String(e).padStart(2,"0");return`Six Degrees backup ${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}.sixdegrees`},"referencedPhotos",0,ef,"sha256",0,eo,"sqlString",0,es],92375);let ed="/api/data/import",ep=Buffer.from("SQLite format 3\0","latin1");class eh extends Error{constructor(e,{status:t=400,...n}={}){super(e),this.status=t,this.extra=n}}function eT(e){let t=e/1024/1024;return`${t<10?t.toFixed(1):Math.round(t)} MB`}let em=e=>String(e).slice(0,80);async function eE(e,t,{declared:n}){let r=await (0,l.open)(t,"wx",384),i=0;try{if(e)for await(let t of e){let e=t instanceof Uint8Array?t:new Uint8Array(t);if((i+=e.byteLength)>n)throw new eh("The file was bigger than the size it was sent with, so nothing was imported. Try again.");for(let t=0;t<e.byteLength;){let{bytesWritten:n}=await r.write(e,t,e.byteLength-t);t+=n}}}finally{await r.close()}if(i!==n)throw new eh(`The file didn't arrive whole (${i} of ${n} bytes), so nothing was imported. Try again.`);return i}function ey(e){return"string"!=typeof e?null:W.includes(e)?"file":e.startsWith("avatars/")&&M.test(e.slice(8))?"photo":null}let eS=["users","linkedin_connections",...Object.keys(ea)],eg=Object.freeze({tables:[],indexes:[],columns:{}}),ew=e=>{try{return(0,n.lstatSync)(e),!0}catch{return!1}};function e_(e){let t=Buffer.alloc(ep.length),r=(0,n.openSync)(e,"r");try{let e=(0,n.readSync)(r,t,0,t.length,0);return 0===e||e===t.length&&t.equals(ep)}finally{(0,n.closeSync)(r)}}function eA(e){try{return JSON.parse((0,n.readFileSync)(e,"utf8"))}catch{return null}}function eN(e,t){try{(0,n.renameSync)(e,t)}catch(r){if("EXDEV"!==r.code)throw r;(0,n.cpSync)(e,t,{recursive:!0}),(0,n.lstatSync)(t).isFile()&&S(t),(0,n.rmSync)(e,{recursive:!0,force:!0})}}function eb(e,t){let r=`${t}.partial`;(0,n.rmSync)(r,{force:!0});try{let a=new s.DatabaseSync(e);try{a.exec(`VACUUM INTO ${es(r)}`)}finally{a.close()}S(r),(0,n.renameSync)(r,t),E(i.default.dirname(t))}catch(e){throw(0,n.rmSync)(r,{force:!0}),e}}function eR(e,t){let n=null,r=null;try{let i=(n=new s.DatabaseSync(t,{readOnly:!0})).prepare("PRAGMA quick_check").all();if(1!==i.length||"ok"!==i[0].quick_check)return!1;(r=new s.DatabaseSync(e)).exec("PRAGMA query_only = ON");let a=e=>e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'").all().map(e=>e.name),o=(e,t)=>e.prepare(`SELECT count(*) AS n FROM "${t.replace(/"/g,'""')}"`).get().n,l=new Set(a(n));return a(r).every(e=>l.has(e)&&o(r,e)===o(n,e))}catch{return!1}finally{n?.close(),r?.close()}}function eI(e){let t=i.default.join(e,J);if(!ew(i.default.join(t,"READY")))return null;let r=eA(i.default.join(t,"READY"))||{},a=eA(i.default.join(t,"APPLYING")),o=null;try{o=(0,n.readFileSync)(i.default.join(t,"ERROR"),"utf8").trim()||null}catch{}let s=!!(a&&("start"!==a.phase||a.keptAsIs));return{...r,started:s,error:o}}function eO({dir:e,dbFile:t,now:r=new Date,copyDatabase:a=eb}){en(e,{now:r.getTime()});let o=i.default.join(e,J);if(!ew(i.default.join(o,"READY")))return null;let l=eA(i.default.join(o,"READY"))||{},c=i.default.join(o,"APPLYING"),u=eA(c)||{stamp:r.toISOString().replace(/[:.]/g,"-"),phase:"start"},f=()=>y(c,JSON.stringify(u)),d=e=>{u.phase=e,f()},p=i.default.dirname(t),h=i.default.join(p,"backups"),T=i.default.join(h,`${K}${u.stamp}.sqlite`),m=i.default.join(h,`${K}${u.stamp}-files`),g=i.default.join(o,"data.sqlite"),w=["-wal","-shm","-journal"],_=()=>{for(let e of w)ew(`${t}${e}`)&&!ew(`${T}${e}`)&&eN(`${t}${e}`,`${T}${e}`);ew(t)&&!ew(T)&&eN(t,T),E(h),E(p)},A=!1,N=()=>{(0,n.mkdirSync)(h,{recursive:!0});try{if(!e_(t))throw Error("it is not a SQLite database");a(t,T),A=!0}catch(e){for(let e of["",...w])(0,n.rmSync)(`${T}${e}`,{force:!0});(0,n.rmSync)(`${T}.partial`,{force:!0}),u.keptAsIs=String(e.message||e).slice(0,200),f(),_()}};try{ew(c)||f();let r=["start","database-kept","files-kept"].includes(u.phase);if("start"===u.phase&&(!ew(g)||!function(e){let t=null;try{(t=new s.DatabaseSync(e)).exec("PRAGMA query_only = ON");let n=t.prepare("PRAGMA quick_check").all();return 1===n.length&&"ok"===n[0].quick_check&&1===t.prepare("SELECT count(*) AS n FROM sqlite_master WHERE type = 'table' AND name = 'linkedin_connections'").get().n}catch{return!1}finally{t?.close()}}(g)))throw Error("the imported network waiting here is damaged. Cancel the import and import the file again");if(r&&!u.keptAsIs&&ew(t)&&e_(t)&&function(e){let t=null;try{return(t=new s.DatabaseSync(e)).exec("PRAGMA locking_mode = EXCLUSIVE"),t.prepare("SELECT count(*) AS n FROM sqlite_master").get(),!1}catch(e){return 5===e.errcode||6===e.errcode||/database (table )?is locked/i.test(String(e.message))}finally{try{t?.close()}catch{}}}(t))throw Error("another copy of Six Degrees has this network open (one started with npx six-degrees or npm run dev, perhaps). Quit that copy, then restart this one");if(r&&u.keptAsIs&&_(),"start"===u.phase&&(!u.keptAsIs&&ew(t)&&N(),d("database-kept")),"database-kept"===u.phase){let t=()=>(0,n.mkdirSync)(m,{recursive:!0});for(let n of["avatars",...B]){let r=i.default.join(e,n);ew(r)&&(t(),eN(r,i.default.join(m,n)))}for(let r of Y){let a=i.default.join(e,r);ew(a)&&(0,n.lstatSync)(a).isFile()&&(t(),(0,n.copyFileSync)(a,i.default.join(m,r)),S(i.default.join(m,r)))}ew(m)&&E(m),E(h),E(e),d("files-kept")}if("files-kept"===u.phase){if(ew(g)){if(!u.keptAsIs&&ew(t)){let e=A&&eR(t,T);if(e||(N(),e=!!u.keptAsIs||eR(t,T)),!e)throw Error("the copy of the network here couldn't be checked, so it wasn't replaced")}for(let e of w)(0,n.rmSync)(`${t}${e}`,{force:!0});(0,n.mkdirSync)(p,{recursive:!0}),eN(g,t),E(p)}d("database-placed")}if("database-placed"===u.phase){let t=i.default.join(o,"files"),r=i.default.join(t,"avatars");if(ew(r)){for(let t of((0,n.mkdirSync)(i.default.join(e,"avatars"),{recursive:!0}),ee(r)))eN(i.default.join(r,t),i.default.join(e,"avatars",t));E(i.default.join(e,"avatars"))}for(let n of B){let r=i.default.join(t,n);ew(r)&&eN(r,i.default.join(e,n))}U({dir:e,from:t}),E(e),d("done")}}catch(e){try{(0,n.writeFileSync)(i.default.join(o,"ERROR"),`${e.message}
169
- `)}catch{}throw e}let b=`${o}.done-${u.stamp}`;(0,n.renameSync)(o,b),(0,n.rmSync)(b,{recursive:!0,force:!0});let R=t=>{let n=i.default.relative(e,t);return!n||n.startsWith("..")||i.default.isAbsolute(n)?t:n};return{appliedAt:r.toISOString(),stagedAt:l.stagedAt??null,exportedAt:l.exportedAt??null,fromVersion:l.fromVersion??null,people:l.people??null,photos:l.photos??null,replacedPeople:l.replacedPeople??null,keptDatabase:ew(T)?R(T):null,keptFiles:ew(m)?R(m):null,keptAsIs:u.keptAsIs??null}}function eL(e,t){e.prepare(`INSERT INTO app_meta (key, value) VALUES ('last_import', ?)
170
- ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(JSON.stringify(t))}function eD(){let e=process.env.SIX_DEGREES_HOME||i.default.join((0,r.homedir)(),".six-degrees");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e}e.s(["IMPORT_ROUTE",0,ed,"ImportError",0,eh,"MAX_IMPORT_BYTES",0,0x10000000,"admitImport",0,function(e,{env:t,scanRunning:n,pending:r,currentPeople:i,max:a=0x10000000}){let o=h({method:e.method,pathname:ed,headers:e.headers,env:t});if(o)return{refused:o};let s=Number(e.headers.get("x-six-degrees-size")),l=i(),c=function({scanRunning:e,pending:t,declared:n,currentPeople:r=0,confirmedPeople:i,max:a=0x10000000}){return e?new eh(`${(0,T.runningNow)(e)}. Let it finish, or stop it on the Scan page, then import.`,{status:409}):t?new eh("An import is already waiting to finish. Restart Six Degrees to finish it, or cancel it first.",{status:409}):!Number.isSafeInteger(n)||n<=0?new eh("Choose a Six Degrees export (a .sixdegrees file) to import."):n>a?new eh(`That file is ${eT(n)}. This copy can import files up to ${eT(a)}.`,{status:413}):r>0&&i!==r?new eh(`This copy already has ${r.toLocaleString("en-US")} people. Confirm that the import replaces them.`,{status:409,needsConfirm:!0,people:r}):null}({scanRunning:n(),pending:r(),declared:s,currentPeople:l,confirmedPeople:Number(e.headers.get("x-six-degrees-replace")),max:a});return c?{refused:{status:c.status,error:c.message,...c.extra}}:{declared:s,currentPeople:l}},"applyPendingImport",0,eO,"cancelPendingImport",0,function(e){let t=eI(e);if(!t)return{cancelled:!1,reason:"none"};if(t.started)return{cancelled:!1,reason:"started"};let r=i.default.join(e,J),a=`${r}.cancelled-${Date.now()}`;return(0,n.renameSync)(r,a),(0,n.rmSync)(a,{recursive:!0,force:!0}),{cancelled:!0}},"lastImport",0,function(e){try{let t=e.prepare("SELECT value FROM app_meta WHERE key = 'last_import'").get()?.value,n=t?JSON.parse(t):null;return n&&"object"==typeof n?n:null}catch{return null}},"pendingImport",0,eI,"receiveUpload",0,eE,"recordImport",0,eL,"restartAdvice",0,function({kind:e,code:t,dataDir:n=null}){let r="It finishes the import as it starts.";if(t)return{canRestart:!0,how:"Click Restart now to finish it: Six Degrees restarts, which takes a few seconds, and finishes the import as it starts."};if("mac-app"===e)return{canRestart:!1,how:`Quit Six Degrees (⌘Q) and open it again. ${r}`};if("npm"===e){let e=n?` --data-dir '${String(n).replace(/'/g,"'\\''")}'`:"";return{canRestart:!1,how:`Stop Six Degrees with Ctrl-C in its Terminal window, then start it again. ${r}`,command:`npx six-degrees${e}`}}return"source"===e?{canRestart:!1,how:`Stop Six Degrees with Ctrl-C in its Terminal window, then start it again. ${r}`,command:"npm run start:packaged"}:{canRestart:!1,how:`Stop the server with Ctrl-C and start it again the way you started it. ${r}`}},"restartCodeFrom",0,function(e=process.env){let t=Number(e.SIX_DEGREES_RESTART_CODE);return Number.isInteger(t)&&t>1&&t<126?t:null},"stageImport",0,function(e,{dir:t,applySchema:r,schemaSql:a,appVersion:o,replacedPeople:l=0,now:u=new Date,retired:f=eg}){let d=function(e,{applySchema:t,schemaSql:r,appVersion:i,retired:a=eg}){let o,l=Buffer.alloc(100),u=0,f=(0,n.openSync)(e,"r");try{u=(0,n.readSync)(f,l,0,100,0)}finally{(0,n.closeSync)(f)}if(u<100||!l.subarray(0,16).equals(ep))throw new eh("This isn't a Six Degrees export (a .sixdegrees file), so nothing was imported.");try{o=new s.DatabaseSync(e,{readOnly:!0})}catch(e){throw new eh(`This file couldn't be opened (${e.message}), so nothing was imported.`)}try{let e;o.exec("PRAGMA trusted_schema = OFF; PRAGMA query_only = ON; PRAGMA cell_size_check = ON;");try{e=o.prepare("PRAGMA integrity_check").all()}catch(t){e=[{integrity_check:t.message}]}if(1!==e.length||"ok"!==e[0].integrity_check)throw new eh("This file is damaged (its database fails SQLite's own check), so nothing was imported. Export it again on the other computer.");let n=function(e,t){let n=new s.DatabaseSync(":memory:");try{e(n),n.exec(`${Object.values(ea).join(";\n")};`);let r=new Map;for(let e of[...el(t),...Object.keys(ea)]){let t=n.prepare(`PRAGMA table_info("${e}")`).all();r.set(e,{required:t.filter(e=>e.pk>0||e.notnull&&null===e.dflt_value).map(e=>e.name),allowed:new Set(t.map(e=>e.name))})}return{tables:r,indexes:new Set(ec(t))}}finally{n.close()}}(t,r),l=(e,t)=>new eh(`This file holds something a Six Degrees export never does (the ${em(e)} “${em(t)}”), so nothing was imported.`),u=new Map(o.prepare("PRAGMA main.table_list").all().map(e=>[e.name,e])),f=o.prepare("SELECT type, name, tbl_name FROM sqlite_master").all(),d=e=>n.tables.has(e)||a.tables.includes(e);for(let e of f){if("table"===e.type){let t=u.get(e.name)?.type;if("table"!==t)throw l(`${t||"unknown"} table`,e.name);if(d(e.name))continue}if(!("index"===e.type&&(n.indexes.has(e.name)||a.indexes.includes(e.name)||String(e.name).startsWith("sqlite_autoindex_")&&d(e.tbl_name))))throw l(e.type,e.name)}let p=new Set(f.filter(e=>"table"===e.type).map(e=>e.name));if(!p.has("sd_export_manifest")||!p.has("sd_export_files"))throw new eh("This is a database but not a Six Degrees export, so nothing was imported. Make one on the other computer with Settings → Your data → Save a copy.");for(let[e,{required:t,allowed:r}]of n.tables){if(!p.has(e)){if(!eS.includes(e))continue;throw new eh(`This export has no “${e}” table, so nothing was imported.`)}let n=o.prepare(`PRAGMA table_xinfo("${e}")`).all(),i=n.map(e=>e.name),s=a.columns[e]||[];if(!(0===u.get(e).wr&&n.every(e=>0===e.hidden&&(r.has(e.name)||s.includes(e.name)))&&t.every(e=>i.includes(e))))throw new eh(`This export's “${e}” table isn't laid out the way Six Degrees makes it, so nothing was imported.`)}let h=Object.fromEntries(o.prepare("SELECT key, value FROM sd_export_manifest").all().map(e=>[e.key,e.value])),T=Number(h.format);if(1!==T)throw new eh(Number.isInteger(T)&&T>1?"This export was made by a newer Six Degrees than this copy. Update this copy first, then import it.":"This file's export details aren't ones Six Degrees writes, so nothing was imported.");let m=String(h.app_version??"");if(!/^v?\d+\.\d+\.\d+/.test(m))throw new eh("This file doesn't say which version of Six Degrees made it, so nothing was imported.");if((0,c.compareVersions)(m,i)>0)throw new eh(`This file comes from Six Degrees ${em(m)}, which is newer than this copy (${i}). Update this copy first, then import it.`);let E=null;try{E=JSON.parse(h.counts)}catch{}if(!E||"object"!=typeof E||Array.isArray(E))throw new eh("This file's export details aren't ones Six Degrees writes, so nothing was imported.");let y=(e,t,n)=>new eh(`This file's ${e} doesn't match its own export details (${t}, where they say ${em(n)}), so nothing was imported. Export it again on the other computer.`);for(let e of p){if(Object.hasOwn(ea,e))continue;let t=o.prepare(`SELECT count(*) AS n FROM "${e}"`).get().n;if(!Object.hasOwn(E,e)||Number(E[e])!==t)throw y(`“${e}” table`,`${t} rows`,E[e]??"nothing")}for(let[e,t]of Object.entries(E))if(!p.has(e)&&0!==Number(t))throw y(`“${em(e)}” table`,"no table",t);let S=0,g=0,w=o.prepare("SELECT bytes, sha256 FROM sd_export_files WHERE path = ?");for(let{path:e}of o.prepare("SELECT path FROM sd_export_files").all()){let t,n=ey(e);if(!n)throw new eh(`This file carries “${em(e)}”, which an export never includes, so nothing was imported.`);let r=w.get(e);if(!(r?.bytes instanceof Uint8Array)||eo(r.bytes)!==r.sha256)throw new eh(`“${e}” inside this file is damaged (it doesn't match its checksum), so nothing was imported.`);if("photo"===n){S++;continue}try{t=JSON.parse(Buffer.from(r.bytes).toString("utf8"))}catch{t=void 0}if(!t||"object"!=typeof t||Array.isArray(t))throw new eh(`“${e}” inside this file can't be read, so nothing was imported.`);let i=Y.includes(e)?F(e,t):null;if(i)throw new eh(`“${e}” inside this file can't be used (${i}), so nothing was imported.`);g++}if(Number(h.files)!==S+g)throw y("list of files",`${S+g} files`,h.files??"nothing");return{fromVersion:m,exportedAt:h.exported_at||null,people:eu(o),photos:S,files:g}}catch(e){if(e instanceof eh)throw e;throw new eh(`This file couldn't be read as a Six Degrees export (${em(e.message)}), so nothing was imported.`)}finally{o.close()}}(e,{applySchema:r,schemaSql:a,appVersion:o,retired:f}),p=i.default.dirname(e),h=i.default.join(p,"files"),T=i.default.join(p,"data.sqlite"),m=[],y=new s.DatabaseSync(T);try{y.exec("PRAGMA trusted_schema = OFF; PRAGMA cell_size_check = ON;"),r(y),y.exec(`ATTACH DATABASE ${es(e)} AS up`);try{for(let e of(y.exec("BEGIN"),el(a))){let t=new Set(y.prepare(`PRAGMA main.table_info("${e}")`).all().map(e=>e.name)),n=y.prepare(`PRAGMA up.table_info("${e}")`).all().filter(e=>t.has(e.name)).map(e=>`"${e.name}"`).join(", ");n&&y.exec(`INSERT INTO main."${e}" (${n}) SELECT ${n} FROM up."${e}" ORDER BY rowid`)}y.exec("COMMIT")}catch(e){try{y.exec("ROLLBACK")}catch{}throw new eh(`This export's network doesn't fit this copy's database (${e.message}), so nothing was imported.`)}(0,n.mkdirSync)(i.default.join(h,"avatars"),{recursive:!0});let t=y.prepare("SELECT bytes, sha256 FROM up.sd_export_files WHERE path = ?");for(let{path:e}of y.prepare("SELECT path FROM up.sd_export_files").all()){let r=t.get(e),a=ey(e);if(!a||!(r?.bytes instanceof Uint8Array)||eo(r.bytes)!==r.sha256)throw new eh(`“${em(e)}” inside this file is damaged, so nothing was imported.`);(0,n.writeFileSync)(i.default.join(h,e),r.bytes,{flag:"wx"}),"file"===a&&m.push(i.default.join(h,e))}}finally{y.close()}(0,n.rmSync)(e,{force:!0});let g={stagedAt:u.toISOString(),exportedAt:d.exportedAt,fromVersion:d.fromVersion,people:d.people,photos:d.photos,replacedPeople:l};for(let e of((0,n.writeFileSync)(i.default.join(p,"READY"),`${JSON.stringify(g,null,2)}
171
- `),[T,...m,i.default.join(p,"READY")]))S(e);for(let e of[i.default.join(h,"avatars"),h,p])E(e);return(0,n.renameSync)(p,i.default.join(t,J)),E(t),g}],19041);let ex={users:["sectors","goals","company_prestige_config"],user_profile:["sectors","goals","company_prestige_config"],linkedin_connections:["influence_signals"],notifications:["data"],queue_items:[],user_stats:[]},ek={linkedin_connections:["is_catalyst"],notifications:["seen"],users:[],user_profile:[],queue_items:[],user_stats:[]},eX=null,eF=Symbol.for("six-degrees.db-opened");function e$(){return process.env.SIX_DEGREES_DB||i.default.join(eD(),"six-degrees.sqlite")}function ej(e){e.exec(a),function(e){for(let[t,n,r]of ev)e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===n)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${n} ${r}`)}(e)}let ev=[["linkedin_connections","score_why","TEXT"],["linkedin_connections","mutual_count","INTEGER"]],eU="auto-before-";e.s(["AUTO_BACKUP_PREFIX",0,eU,"applySchema",0,ej,"dataDir",0,eD,"dbFile",0,e$,"decodeRow",0,function(e,t){if(!t)return t;let n={...t};for(let t of ex[e]||[])if("string"==typeof n[t])try{n[t]=JSON.parse(n[t])}catch{}for(let t of ek[e]||[])(0===n[t]||1===n[t])&&(n[t]=!!n[t]);return n},"encodeValue",0,function(e,t,n){return void 0===n?null:(ex[e]||[]).includes(t)?null===n?null:JSON.stringify(n):(ek[e]||[]).includes(t)?null===n?null:+!!n:"boolean"==typeof n?+!!n:null!==n&&"object"==typeof n?JSON.stringify(n):n},"getDb",0,function(){if(eX)return eX;let e=e$(),r=null;if(!globalThis[eF])try{(r=eO({dir:eD(),dbFile:e}))&&console.log(`Six Degrees: finished the import (${r.people} people). What was here before: ${r.keptDatabase||"nothing to keep"}.`)}catch(e){console.error(`Six Degrees: could not finish the import (will try again next start): ${e.message}`)}globalThis[eF]=!0,eX=new t.DatabaseSync(e);try{let t=function(e,{dir:t,version:r,keep:a=5,now:o=new Date}){let s=i.default.join(t,"app-version"),l=null;try{l=(0,n.readFileSync)(s,"utf8").trim()}catch{}if(l===r)return null;let c=null;if(e.prepare("SELECT count(*) AS n FROM sqlite_master WHERE type = 'table' AND name = 'linkedin_connections'").get().n>0){let s=i.default.join(t,"backups");(0,n.mkdirSync)(s,{recursive:!0});let l=o.toISOString().replace(/[:.]/g,"-");for(let{f:t}of(c=i.default.join(s,`${eU}${r}-${l}.sqlite`),e.exec(`VACUUM INTO '${c.replace(/'/g,"''")}'`),(0,n.readdirSync)(s).filter(e=>e.startsWith(eU)&&e.endsWith(".sqlite")).map(e=>({f:e,at:(0,n.statSync)(i.default.join(s,e)).mtimeMs})).sort((e,t)=>t.at-e.at||t.f.localeCompare(e.f)).slice(a)))(0,n.rmSync)(i.default.join(s,t),{force:!0})}return(0,n.writeFileSync)(s,`${r}
172
- `),c}(eX,{dir:i.default.dirname(e),version:o});t&&console.log(`Six Degrees ${o}: backed up your data first → ${t}`)}catch(e){console.error(`Six Degrees: could not back up your data before ${o} (will try again next start): ${e.message}`)}if(ej(eX),r)try{eL(eX,r)}catch{}return eX},"newId",0,function(){return crypto.randomUUID()},"nowIso",0,function(){return new Date().toISOString()}],88431)}];
167
+ ORDER BY profile_url`).all().filter(e=>e.profileUrl&&!q(e.imageUrl))}e.s(["AVATAR_FILE",0,P,"localPhoto",0,q,"waitingPhotoCount",0,function(e){return new Set(B(e).map(e=>e.profileUrl)).size},"waitingPhotos",0,B],98612);let Y=["bridge-progress.json","bridge-skips.json","bridge-unclear.json"],W=["scan-limits.json","linkedin-activity.json","linkedin-cooldown.json"],J=/^(?:social|social-messages|crm)-[\w-]+\.json$/,K=[...Y,...W],V="import-pending",H="before-import-",z=".export-",Q=".import-upload-",Z=".python-setup-",ee=[z,Q,Z],et=/^import-pending\.(done|cancelled)-/;function en(e){try{return(0,n.lstatSync)(e).isDirectory()?(0,n.readdirSync)(e):[]}catch{return[]}}function er(e,t=()=>!0){let r=0,a=0;for(let o of en(e))if(t(o))try{let t=(0,n.lstatSync)(i.default.join(e,o));t.isFile()&&(r++,a+=t.size)}catch{}return{count:r,bytes:a}}function ei(e,{now:t=Date.now(),maxAgeMs:r=36e5}={}){let a=[];try{a=(0,n.readdirSync)(e)}catch{return 0}let o=0;for(let s of a){let a=ee.some(e=>s.startsWith(e));if(!a&&!et.test(s))continue;let l=i.default.join(e,s);try{let e=(0,n.lstatSync)(l);if(!e.isDirectory()||a&&t-e.mtimeMs<r)continue;(0,n.rmSync)(l,{recursive:!0,force:!0}),o++}catch{}}return o}e.s(["BUDGET_FILES",0,W,"EXPORT_WORK_PREFIX",0,z,"IMPORT_BACKUP_PREFIX",0,H,"NETWORK_FILES",0,Y,"PENDING_DIR",0,V,"SETUP_WORK_PREFIX",0,Z,"SOCIAL_FILE",0,J,"TRAVELLING_FILES",0,K,"UPLOAD_WORK_PREFIX",0,Q,"folderReport",0,function({dir:e,dbFile:t,autoPrefix:r,inNetwork:a=null}){let o=i.default.join(e,"avatars");return{dataDir:e,dbFile:t,databaseBytes:["","-wal","-shm"].reduce((e,r)=>e+function(e){try{let t=(0,n.lstatSync)(e);return t.isFile()?t.size:0}catch{return 0}}(t+r),0),photos:er(o,e=>P.test(e)),photosInCopy:a?er(o,e=>P.test(e)&&a.has(e)):null,backups:function(e,{autoPrefix:t}={}){let r=[];try{r=(0,n.readdirSync)(e)}catch{return[]}let a=[];for(let o of r){let r;if(o.startsWith(".")||o.endsWith(".partial"))continue;let s=i.default.join(e,o);try{r=(0,n.lstatSync)(s)}catch{continue}(r.isFile()||r.isDirectory())&&a.push({name:o,bytes:r.isFile()?r.size:function e(t,r={left:5e4}){let a=0,o=[];try{o=(0,n.readdirSync)(t)}catch{return 0}for(let s of o){if(r.left--<=0)break;let o=i.default.join(t,s);try{let t=(0,n.lstatSync)(o);t.isDirectory()?a+=e(o,r):t.isFile()&&(a+=t.size)}catch{}}return a}(s),modifiedAt:r.mtimeMs,kind:t&&o.startsWith(t)?"auto":o.startsWith(H)?"import":"manual",folder:r.isDirectory()})}return a.sort((e,t)=>t.modifiedAt-e.modifiedAt||t.name.localeCompare(e.name))}(i.default.join(i.default.dirname(t),"backups"),{autoPrefix:r}),linkedinSignIn:(0,n.existsSync)(i.default.join(e,"chrome-profile"))}},"namesInFolder",0,en,"revealFolder",0,function(e,{platform:t=process.platform,spawnImpl:n=M.spawn,waitMs:r=3e3}={}){let i=function(e=process.platform){return"darwin"===e?"open":"linux"===e?"xdg-open":null}(t);return i?new Promise(t=>{let a,o=null,s=!1,l=e=>{s||(s=!0,clearTimeout(o),t(e))};try{a=n(i,[e],{stdio:"ignore",detached:!0})}catch(e){l({ok:!1,message:`It couldn't be opened (${e.message}).`});return}a.on("error",e=>l({ok:!1,message:"ENOENT"===e.code?`This computer has no ${i}, so there is no file browser to open it with.`:`It couldn't be opened (${e.message}).`})),a.on("exit",e=>l(0===e?{ok:!0}:{ok:!1,message:`The file browser didn't open (${i} stopped with code ${e}).`})),o=setTimeout(()=>{try{a.unref()}catch{}l({ok:!0})},r)}):Promise.resolve({ok:!1,message:"There is no file browser to open it with on this computer."})},"sweepLeftovers",0,ei],26525);var ea=e.x("node:sqlite",()=>require("node:sqlite"),!0),eo=e.i(66680);let es={sd_export_manifest:"CREATE TABLE sd_export_manifest (key TEXT PRIMARY KEY, value TEXT NOT NULL)",sd_export_files:"CREATE TABLE sd_export_files (path TEXT PRIMARY KEY, bytes BLOB NOT NULL, sha256 TEXT NOT NULL)"};function el(e){return(0,eo.createHash)("sha256").update(e).digest("hex")}function ec(e){return`'${String(e).replace(/'/g,"''")}'`}function eu(e){return[...e.matchAll(/CREATE TABLE IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function ef(e){return[...e.matchAll(/CREATE (?:UNIQUE )?INDEX IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function ed(e,t="main"){try{return e.prepare(`SELECT count(DISTINCT profile_url) AS n FROM ${t}.linkedin_connections`).get().n}catch{return 0}}function ep(e){return new Set(e.prepare(`SELECT DISTINCT substr(profile_image_url, 10) AS name FROM linkedin_connections
168
+ WHERE substr(profile_image_url, 1, 9) = '/avatars/'`).all().map(e=>e.name))}e.s(["EXPORT_FORMAT",0,1,"EXPORT_TABLES",0,es,"appIndexes",0,ef,"appTables",0,eu,"buildExport",0,function(e,{dir:t,outFile:r,includePhotos:a=!0,includeSocial:o=!0,appVersion:s,schemaSql:l,now:c=new Date}){let u;e.exec(`VACUUM INTO ${ec(r)}`);let f=new ea.DatabaseSync(r);try{f.exec("PRAGMA journal_mode = DELETE"),f.exec(`${Object.values(es).join(";\n")};`),f.exec("BEGIN"),a||f.exec("UPDATE linkedin_connections SET profile_image_url = NULL WHERE profile_image_url LIKE '/avatars/%'"),f.exec("DELETE FROM app_meta WHERE key = 'last_import'");let e=f.prepare("INSERT INTO sd_export_files (path, bytes, sha256) VALUES (?, ?, ?)"),r=0,d=0,p=a?ep(f):null;for(let s of function(e,{includePhotos:t=!0,photos:r=null,includeSocial:a=!0}={}){let o=e=>{try{return(0,n.lstatSync)(e).isFile()}catch{return!1}},s=[];for(let t of K){let n=i.default.join(e,t);o(n)&&s.push({rel:t,abs:n})}if(a)for(let t of en(e).sort()){let n=i.default.join(e,t);J.test(t)&&o(n)&&s.push({rel:t,abs:n})}if(t)for(let t of en(i.default.join(e,"avatars")).sort()){if(!P.test(t)||r&&!r.has(t))continue;let n=i.default.join(e,"avatars",t);o(n)&&s.push({rel:`avatars/${t}`,abs:n})}return s}(t,{includePhotos:a,photos:p,includeSocial:o})){let t;try{t=(0,n.readFileSync)(s.abs)}catch{continue}e.run(s.rel,t,el(t)),d++,s.rel.startsWith("avatars/")&&r++}let h={};for(let e of eu(l))try{h[e]=f.prepare(`SELECT count(*) AS n FROM "${e}"`).get().n}catch{h[e]=0}let T="";try{T=f.prepare("SELECT value FROM app_meta WHERE key = 'scoring_version'").get()?.value??""}catch{}let m=ed(f),E={format:1,app_version:s,scoring_version:T,exported_at:c.toISOString(),include_photos:+!!a,people:m,photos:r,files:d,counts:JSON.stringify(h)},y=f.prepare("INSERT INTO sd_export_manifest (key, value) VALUES (?, ?)");for(let[e,t]of Object.entries(E))y.run(e,String(t));f.exec("COMMIT"),u={people:m,photos:r,files:d,counts:h}}catch(e){try{f.exec("ROLLBACK")}catch{}throw e}finally{f.close()}return{...u,bytes:(0,n.statSync)(r).size}},"countPeople",0,ed,"exportFileName",0,function(e=new Date){let t=e=>String(e).padStart(2,"0");return`Six Degrees backup ${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}.sixdegrees`},"referencedPhotos",0,ep,"sha256",0,el,"sqlString",0,ec],92375);let eh="/api/data/import",eT=Buffer.from("SQLite format 3\0","latin1");class em extends Error{constructor(e,{status:t=400,...n}={}){super(e),this.status=t,this.extra=n}}function eE(e){let t=e/1024/1024;return`${t<10?t.toFixed(1):Math.round(t)} MB`}let ey=e=>String(e).slice(0,80);async function eS(e,t,{declared:n}){let r=await (0,l.open)(t,"wx",384),i=0;try{if(e)for await(let t of e){let e=t instanceof Uint8Array?t:new Uint8Array(t);if((i+=e.byteLength)>n)throw new em("The file was bigger than the size it was sent with, so nothing was imported. Try again.");for(let t=0;t<e.byteLength;){let{bytesWritten:n}=await r.write(e,t,e.byteLength-t);t+=n}}}finally{await r.close()}if(i!==n)throw new em(`The file didn't arrive whole (${i} of ${n} bytes), so nothing was imported. Try again.`);return i}function eg(e){return"string"!=typeof e?null:K.includes(e)?"file":J.test(e)?"social":e.startsWith("avatars/")&&P.test(e.slice(8))?"photo":null}let ew=["users","linkedin_connections",...Object.keys(es)],e_=Object.freeze({tables:[],indexes:[],columns:{}}),eA=e=>{try{return(0,n.lstatSync)(e),!0}catch{return!1}};function eb(e){let t=Buffer.alloc(eT.length),r=(0,n.openSync)(e,"r");try{let e=(0,n.readSync)(r,t,0,t.length,0);return 0===e||e===t.length&&t.equals(eT)}finally{(0,n.closeSync)(r)}}function eN(e){try{return JSON.parse((0,n.readFileSync)(e,"utf8"))}catch{return null}}function eR(e,t){try{(0,n.renameSync)(e,t)}catch(r){if("EXDEV"!==r.code)throw r;(0,n.cpSync)(e,t,{recursive:!0}),(0,n.lstatSync)(t).isFile()&&S(t),(0,n.rmSync)(e,{recursive:!0,force:!0})}}function eI(e,t){let r=`${t}.partial`;(0,n.rmSync)(r,{force:!0});try{let a=new s.DatabaseSync(e);try{a.exec(`VACUUM INTO ${ec(r)}`)}finally{a.close()}S(r),(0,n.renameSync)(r,t),E(i.default.dirname(t))}catch(e){throw(0,n.rmSync)(r,{force:!0}),e}}function eO(e,t){let n=null,r=null;try{let i=(n=new s.DatabaseSync(t,{readOnly:!0})).prepare("PRAGMA quick_check").all();if(1!==i.length||"ok"!==i[0].quick_check)return!1;(r=new s.DatabaseSync(e)).exec("PRAGMA query_only = ON");let a=e=>e.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'").all().map(e=>e.name),o=(e,t)=>e.prepare(`SELECT count(*) AS n FROM "${t.replace(/"/g,'""')}"`).get().n,l=new Set(a(n));return a(r).every(e=>l.has(e)&&o(r,e)===o(n,e))}catch{return!1}finally{n?.close(),r?.close()}}function eL(e){let t=i.default.join(e,V);if(!eA(i.default.join(t,"READY")))return null;let r=eN(i.default.join(t,"READY"))||{},a=eN(i.default.join(t,"APPLYING")),o=null;try{o=(0,n.readFileSync)(i.default.join(t,"ERROR"),"utf8").trim()||null}catch{}let s=!!(a&&("start"!==a.phase||a.keptAsIs));return{...r,started:s,error:o}}function eD({dir:e,dbFile:t,now:r=new Date,copyDatabase:a=eI}){ei(e,{now:r.getTime()});let o=i.default.join(e,V);if(!eA(i.default.join(o,"READY")))return null;let l=eN(i.default.join(o,"READY"))||{},c=i.default.join(o,"APPLYING"),u=eN(c)||{stamp:r.toISOString().replace(/[:.]/g,"-"),phase:"start"},f=()=>y(c,JSON.stringify(u)),d=e=>{u.phase=e,f()},p=i.default.dirname(t),h=i.default.join(p,"backups"),T=i.default.join(h,`${H}${u.stamp}.sqlite`),m=i.default.join(h,`${H}${u.stamp}-files`),g=i.default.join(o,"data.sqlite"),w=["-wal","-shm","-journal"],_=()=>{for(let e of w)eA(`${t}${e}`)&&!eA(`${T}${e}`)&&eR(`${t}${e}`,`${T}${e}`);eA(t)&&!eA(T)&&eR(t,T),E(h),E(p)},A=!1,b=()=>{(0,n.mkdirSync)(h,{recursive:!0});try{if(!eb(t))throw Error("it is not a SQLite database");a(t,T),A=!0}catch(e){for(let e of["",...w])(0,n.rmSync)(`${T}${e}`,{force:!0});(0,n.rmSync)(`${T}.partial`,{force:!0}),u.keptAsIs=String(e.message||e).slice(0,200),f(),_()}};try{eA(c)||f();let r=["start","database-kept","files-kept"].includes(u.phase);if("start"===u.phase&&(!eA(g)||!function(e){let t=null;try{(t=new s.DatabaseSync(e)).exec("PRAGMA query_only = ON");let n=t.prepare("PRAGMA quick_check").all();return 1===n.length&&"ok"===n[0].quick_check&&1===t.prepare("SELECT count(*) AS n FROM sqlite_master WHERE type = 'table' AND name = 'linkedin_connections'").get().n}catch{return!1}finally{t?.close()}}(g)))throw Error("the imported network waiting here is damaged. Cancel the import and import the file again");if(r&&!u.keptAsIs&&eA(t)&&eb(t)&&function(e){let t=null;try{return(t=new s.DatabaseSync(e)).exec("PRAGMA locking_mode = EXCLUSIVE"),t.prepare("SELECT count(*) AS n FROM sqlite_master").get(),!1}catch(e){return 5===e.errcode||6===e.errcode||/database (table )?is locked/i.test(String(e.message))}finally{try{t?.close()}catch{}}}(t))throw Error("another copy of Six Degrees has this network open (one started with npx six-degrees or npm run dev, perhaps). Quit that copy, then restart this one");if(r&&u.keptAsIs&&_(),"start"===u.phase&&(!u.keptAsIs&&eA(t)&&b(),d("database-kept")),"database-kept"===u.phase){let t=()=>(0,n.mkdirSync)(m,{recursive:!0});for(let n of["avatars",...Y]){let r=i.default.join(e,n);eA(r)&&(t(),eR(r,i.default.join(m,n)))}if(en(i.default.join(o,"files")).some(e=>J.test(e)))for(let n of en(e).filter(e=>J.test(e)))t(),eR(i.default.join(e,n),i.default.join(m,n));for(let r of W){let a=i.default.join(e,r);eA(a)&&(0,n.lstatSync)(a).isFile()&&(t(),(0,n.copyFileSync)(a,i.default.join(m,r)),S(i.default.join(m,r)))}eA(m)&&E(m),E(h),E(e),d("files-kept")}if("files-kept"===u.phase){if(eA(g)){if(!u.keptAsIs&&eA(t)){let e=A&&eO(t,T);if(e||(b(),e=!!u.keptAsIs||eO(t,T)),!e)throw Error("the copy of the network here couldn't be checked, so it wasn't replaced")}for(let e of w)(0,n.rmSync)(`${t}${e}`,{force:!0});(0,n.mkdirSync)(p,{recursive:!0}),eR(g,t),E(p)}d("database-placed")}if("database-placed"===u.phase){let t=i.default.join(o,"files"),r=i.default.join(t,"avatars");if(eA(r)){for(let t of((0,n.mkdirSync)(i.default.join(e,"avatars"),{recursive:!0}),en(r)))eR(i.default.join(r,t),i.default.join(e,"avatars",t));E(i.default.join(e,"avatars"))}for(let n of Y){let r=i.default.join(t,n);eA(r)&&eR(r,i.default.join(e,n))}for(let n of en(t).filter(e=>J.test(e)))eR(i.default.join(t,n),i.default.join(e,n));C({dir:e,from:t}),E(e),d("done")}}catch(e){try{(0,n.writeFileSync)(i.default.join(o,"ERROR"),`${e.message}
169
+ `)}catch{}throw e}let N=`${o}.done-${u.stamp}`;(0,n.renameSync)(o,N),(0,n.rmSync)(N,{recursive:!0,force:!0});let R=t=>{let n=i.default.relative(e,t);return!n||n.startsWith("..")||i.default.isAbsolute(n)?t:n};return{appliedAt:r.toISOString(),stagedAt:l.stagedAt??null,exportedAt:l.exportedAt??null,fromVersion:l.fromVersion??null,people:l.people??null,photos:l.photos??null,replacedPeople:l.replacedPeople??null,keptDatabase:eA(T)?R(T):null,keptFiles:eA(m)?R(m):null,keptAsIs:u.keptAsIs??null}}function ex(e,t){e.prepare(`INSERT INTO app_meta (key, value) VALUES ('last_import', ?)
170
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(JSON.stringify(t))}function ek(){let e=process.env.SIX_DEGREES_HOME||i.default.join((0,r.homedir)(),".six-degrees");return(0,n.existsSync)(e)||(0,n.mkdirSync)(e,{recursive:!0}),e}e.s(["IMPORT_ROUTE",0,eh,"ImportError",0,em,"MAX_IMPORT_BYTES",0,0x10000000,"admitImport",0,function(e,{env:t,scanRunning:n,pending:r,currentPeople:i,max:a=0x10000000}){let o=h({method:e.method,pathname:eh,headers:e.headers,env:t});if(o)return{refused:o};let s=Number(e.headers.get("x-six-degrees-size")),l=i(),c=function({scanRunning:e,pending:t,declared:n,currentPeople:r=0,confirmedPeople:i,max:a=0x10000000}){return e?new em(`${(0,T.runningNow)(e)}. Let it finish, or stop it on the Scan page, then import.`,{status:409}):t?new em("An import is already waiting to finish. Restart Six Degrees to finish it, or cancel it first.",{status:409}):!Number.isSafeInteger(n)||n<=0?new em("Choose a Six Degrees export (a .sixdegrees file) to import."):n>a?new em(`That file is ${eE(n)}. This copy can import files up to ${eE(a)}.`,{status:413}):r>0&&i!==r?new em(`This copy already has ${r.toLocaleString("en-US")} people. Confirm that the import replaces them.`,{status:409,needsConfirm:!0,people:r}):null}({scanRunning:n(),pending:r(),declared:s,currentPeople:l,confirmedPeople:Number(e.headers.get("x-six-degrees-replace")),max:a});return c?{refused:{status:c.status,error:c.message,...c.extra}}:{declared:s,currentPeople:l}},"applyPendingImport",0,eD,"cancelPendingImport",0,function(e){let t=eL(e);if(!t)return{cancelled:!1,reason:"none"};if(t.started)return{cancelled:!1,reason:"started"};let r=i.default.join(e,V),a=`${r}.cancelled-${Date.now()}`;return(0,n.renameSync)(r,a),(0,n.rmSync)(a,{recursive:!0,force:!0}),{cancelled:!0}},"lastImport",0,function(e){try{let t=e.prepare("SELECT value FROM app_meta WHERE key = 'last_import'").get()?.value,n=t?JSON.parse(t):null;return n&&"object"==typeof n?n:null}catch{return null}},"pendingImport",0,eL,"receiveUpload",0,eS,"recordImport",0,ex,"restartAdvice",0,function({kind:e,code:t,dataDir:n=null}){let r="It finishes the import as it starts.";if(t)return{canRestart:!0,how:"Click Restart now to finish it: Six Degrees restarts, which takes a few seconds, and finishes the import as it starts."};if("mac-app"===e)return{canRestart:!1,how:`Quit Six Degrees (⌘Q) and open it again. ${r}`};if("npm"===e){let e=n?` --data-dir '${String(n).replace(/'/g,"'\\''")}'`:"";return{canRestart:!1,how:`Stop Six Degrees with Ctrl-C in its Terminal window, then start it again. ${r}`,command:`npx six-degrees${e}`}}return"source"===e?{canRestart:!1,how:`Stop Six Degrees with Ctrl-C in its Terminal window, then start it again. ${r}`,command:"npm run start:packaged"}:{canRestart:!1,how:`Stop the server with Ctrl-C and start it again the way you started it. ${r}`}},"restartCodeFrom",0,function(e=process.env){let t=Number(e.SIX_DEGREES_RESTART_CODE);return Number.isInteger(t)&&t>1&&t<126?t:null},"stageImport",0,function(e,{dir:t,applySchema:r,schemaSql:a,appVersion:o,replacedPeople:l=0,now:u=new Date,retired:f=e_}){let d=function(e,{applySchema:t,schemaSql:r,appVersion:i,retired:a=e_}){let o,l=Buffer.alloc(100),u=0,f=(0,n.openSync)(e,"r");try{u=(0,n.readSync)(f,l,0,100,0)}finally{(0,n.closeSync)(f)}if(u<100||!l.subarray(0,16).equals(eT))throw new em("This isn't a Six Degrees export (a .sixdegrees file), so nothing was imported.");try{o=new s.DatabaseSync(e,{readOnly:!0})}catch(e){throw new em(`This file couldn't be opened (${e.message}), so nothing was imported.`)}try{let e;o.exec("PRAGMA trusted_schema = OFF; PRAGMA query_only = ON; PRAGMA cell_size_check = ON;");try{e=o.prepare("PRAGMA integrity_check").all()}catch(t){e=[{integrity_check:t.message}]}if(1!==e.length||"ok"!==e[0].integrity_check)throw new em("This file is damaged (its database fails SQLite's own check), so nothing was imported. Export it again on the other computer.");let n=function(e,t){let n=new s.DatabaseSync(":memory:");try{e(n),n.exec(`${Object.values(es).join(";\n")};`);let r=new Map;for(let e of[...eu(t),...Object.keys(es)]){let t=n.prepare(`PRAGMA table_info("${e}")`).all();r.set(e,{required:t.filter(e=>e.pk>0||e.notnull&&null===e.dflt_value).map(e=>e.name),allowed:new Set(t.map(e=>e.name))})}return{tables:r,indexes:new Set(ef(t))}}finally{n.close()}}(t,r),l=(e,t)=>new em(`This file holds something a Six Degrees export never does (the ${ey(e)} “${ey(t)}”), so nothing was imported.`),u=new Map(o.prepare("PRAGMA main.table_list").all().map(e=>[e.name,e])),f=o.prepare("SELECT type, name, tbl_name FROM sqlite_master").all(),d=e=>n.tables.has(e)||a.tables.includes(e);for(let e of f){if("table"===e.type){let t=u.get(e.name)?.type;if("table"!==t)throw l(`${t||"unknown"} table`,e.name);if(d(e.name))continue}if(!("index"===e.type&&(n.indexes.has(e.name)||a.indexes.includes(e.name)||String(e.name).startsWith("sqlite_autoindex_")&&d(e.tbl_name))))throw l(e.type,e.name)}let p=new Set(f.filter(e=>"table"===e.type).map(e=>e.name));if(!p.has("sd_export_manifest")||!p.has("sd_export_files"))throw new em("This is a database but not a Six Degrees export, so nothing was imported. Make one on the other computer with Settings → Your data → Save a copy.");for(let[e,{required:t,allowed:r}]of n.tables){if(!p.has(e)){if(!ew.includes(e))continue;throw new em(`This export has no “${e}” table, so nothing was imported.`)}let n=o.prepare(`PRAGMA table_xinfo("${e}")`).all(),i=n.map(e=>e.name),s=a.columns[e]||[];if(!(0===u.get(e).wr&&n.every(e=>0===e.hidden&&(r.has(e.name)||s.includes(e.name)))&&t.every(e=>i.includes(e))))throw new em(`This export's “${e}” table isn't laid out the way Six Degrees makes it, so nothing was imported.`)}let h=Object.fromEntries(o.prepare("SELECT key, value FROM sd_export_manifest").all().map(e=>[e.key,e.value])),T=Number(h.format);if(1!==T)throw new em(Number.isInteger(T)&&T>1?"This export was made by a newer Six Degrees than this copy. Update this copy first, then import it.":"This file's export details aren't ones Six Degrees writes, so nothing was imported.");let m=String(h.app_version??"");if(!/^v?\d+\.\d+\.\d+/.test(m))throw new em("This file doesn't say which version of Six Degrees made it, so nothing was imported.");if((0,c.compareVersions)(m,i)>0)throw new em(`This file comes from Six Degrees ${ey(m)}, which is newer than this copy (${i}). Update this copy first, then import it.`);let E=null;try{E=JSON.parse(h.counts)}catch{}if(!E||"object"!=typeof E||Array.isArray(E))throw new em("This file's export details aren't ones Six Degrees writes, so nothing was imported.");let y=(e,t,n)=>new em(`This file's ${e} doesn't match its own export details (${t}, where they say ${ey(n)}), so nothing was imported. Export it again on the other computer.`);for(let e of p){if(Object.hasOwn(es,e))continue;let t=o.prepare(`SELECT count(*) AS n FROM "${e}"`).get().n;if(!Object.hasOwn(E,e)||Number(E[e])!==t)throw y(`“${e}” table`,`${t} rows`,E[e]??"nothing")}for(let[e,t]of Object.entries(E))if(!p.has(e)&&0!==Number(t))throw y(`“${ey(e)}” table`,"no table",t);let S=0,g=0,w=o.prepare("SELECT bytes, sha256 FROM sd_export_files WHERE path = ?");for(let{path:e}of o.prepare("SELECT path FROM sd_export_files").all()){let t,n=eg(e);if(!n)throw new em(`This file carries “${ey(e)}”, which an export never includes, so nothing was imported.`);let r=w.get(e);if(!(r?.bytes instanceof Uint8Array)||el(r.bytes)!==r.sha256)throw new em(`“${e}” inside this file is damaged (it doesn't match its checksum), so nothing was imported.`);if("photo"===n){S++;continue}try{t=JSON.parse(Buffer.from(r.bytes).toString("utf8"))}catch{t=void 0}if(!t||"object"!=typeof t||Array.isArray(t))throw new em(`“${e}” inside this file can't be read, so nothing was imported.`);let i=W.includes(e)?$(e,t):null;if(i)throw new em(`“${e}” inside this file can't be used (${i}), so nothing was imported.`);g++}if(Number(h.files)!==S+g)throw y("list of files",`${S+g} files`,h.files??"nothing");return{fromVersion:m,exportedAt:h.exported_at||null,people:ed(o),photos:S,files:g}}catch(e){if(e instanceof em)throw e;throw new em(`This file couldn't be read as a Six Degrees export (${ey(e.message)}), so nothing was imported.`)}finally{o.close()}}(e,{applySchema:r,schemaSql:a,appVersion:o,retired:f}),p=i.default.dirname(e),h=i.default.join(p,"files"),T=i.default.join(p,"data.sqlite"),m=[],y=new s.DatabaseSync(T);try{y.exec("PRAGMA trusted_schema = OFF; PRAGMA cell_size_check = ON;"),r(y),y.exec(`ATTACH DATABASE ${ec(e)} AS up`);try{for(let e of(y.exec("BEGIN"),eu(a))){let t=new Set(y.prepare(`PRAGMA main.table_info("${e}")`).all().map(e=>e.name)),n=y.prepare(`PRAGMA up.table_info("${e}")`).all().filter(e=>t.has(e.name)).map(e=>`"${e.name}"`).join(", ");n&&y.exec(`INSERT INTO main."${e}" (${n}) SELECT ${n} FROM up."${e}" ORDER BY rowid`)}y.exec("COMMIT")}catch(e){try{y.exec("ROLLBACK")}catch{}throw new em(`This export's network doesn't fit this copy's database (${e.message}), so nothing was imported.`)}(0,n.mkdirSync)(i.default.join(h,"avatars"),{recursive:!0});let t=y.prepare("SELECT bytes, sha256 FROM up.sd_export_files WHERE path = ?");for(let{path:e}of y.prepare("SELECT path FROM up.sd_export_files").all()){let r=t.get(e),a=eg(e);if(!a||!(r?.bytes instanceof Uint8Array)||el(r.bytes)!==r.sha256)throw new em(`“${ey(e)}” inside this file is damaged, so nothing was imported.`);(0,n.writeFileSync)(i.default.join(h,e),r.bytes,{flag:"wx"}),("file"===a||"social"===a)&&m.push(i.default.join(h,e))}}finally{y.close()}(0,n.rmSync)(e,{force:!0});let g={stagedAt:u.toISOString(),exportedAt:d.exportedAt,fromVersion:d.fromVersion,people:d.people,photos:d.photos,replacedPeople:l};for(let e of((0,n.writeFileSync)(i.default.join(p,"READY"),`${JSON.stringify(g,null,2)}
171
+ `),[T,...m,i.default.join(p,"READY")]))S(e);for(let e of[i.default.join(h,"avatars"),h,p])E(e);return(0,n.renameSync)(p,i.default.join(t,V)),E(t),g}],19041);let eF={users:["sectors","goals","company_prestige_config"],user_profile:["sectors","goals","company_prestige_config"],linkedin_connections:["influence_signals"],notifications:["data"],queue_items:[],user_stats:[]},eX={linkedin_connections:["is_catalyst"],notifications:["seen"],users:[],user_profile:[],queue_items:[],user_stats:[]},e$=null,ej=Symbol.for("six-degrees.db-opened");function ev(){return process.env.SIX_DEGREES_DB||i.default.join(ek(),"six-degrees.sqlite")}function eU(e){e.exec(a),function(e){for(let[t,n,r]of eC)e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===n)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${n} ${r}`)}(e)}let eC=[["linkedin_connections","score_why","TEXT"],["linkedin_connections","mutual_count","INTEGER"]],eM="auto-before-";e.s(["AUTO_BACKUP_PREFIX",0,eM,"applySchema",0,eU,"dataDir",0,ek,"dbFile",0,ev,"decodeRow",0,function(e,t){if(!t)return t;let n={...t};for(let t of eF[e]||[])if("string"==typeof n[t])try{n[t]=JSON.parse(n[t])}catch{}for(let t of eX[e]||[])(0===n[t]||1===n[t])&&(n[t]=!!n[t]);return n},"encodeValue",0,function(e,t,n){return void 0===n?null:(eF[e]||[]).includes(t)?null===n?null:JSON.stringify(n):(eX[e]||[]).includes(t)?null===n?null:+!!n:"boolean"==typeof n?+!!n:null!==n&&"object"==typeof n?JSON.stringify(n):n},"getDb",0,function(){if(e$)return e$;let e=ev(),r=null;if(!globalThis[ej])try{(r=eD({dir:ek(),dbFile:e}))&&console.log(`Six Degrees: finished the import (${r.people} people). What was here before: ${r.keptDatabase||"nothing to keep"}.`)}catch(e){console.error(`Six Degrees: could not finish the import (will try again next start): ${e.message}`)}globalThis[ej]=!0,e$=new t.DatabaseSync(e);try{let t=function(e,{dir:t,version:r,keep:a=5,now:o=new Date}){let s=i.default.join(t,"app-version"),l=null;try{l=(0,n.readFileSync)(s,"utf8").trim()}catch{}if(l===r)return null;let c=null;if(e.prepare("SELECT count(*) AS n FROM sqlite_master WHERE type = 'table' AND name = 'linkedin_connections'").get().n>0){let s=i.default.join(t,"backups");(0,n.mkdirSync)(s,{recursive:!0});let l=o.toISOString().replace(/[:.]/g,"-");for(let{f:t}of(c=i.default.join(s,`${eM}${r}-${l}.sqlite`),e.exec(`VACUUM INTO '${c.replace(/'/g,"''")}'`),(0,n.readdirSync)(s).filter(e=>e.startsWith(eM)&&e.endsWith(".sqlite")).map(e=>({f:e,at:(0,n.statSync)(i.default.join(s,e)).mtimeMs})).sort((e,t)=>t.at-e.at||t.f.localeCompare(e.f)).slice(a)))(0,n.rmSync)(i.default.join(s,t),{force:!0})}return(0,n.writeFileSync)(s,`${r}
172
+ `),c}(e$,{dir:i.default.dirname(e),version:o});t&&console.log(`Six Degrees ${o}: backed up your data first → ${t}`)}catch(e){console.error(`Six Degrees: could not back up your data before ${o} (will try again next start): ${e.message}`)}if(eU(e$),r)try{ex(e$,r)}catch{}return e$},"newId",0,function(){return crypto.randomUUID()},"nowIso",0,function(){return new Date().toISOString()}],88431)}];
173
173
 
174
174
  //# sourceMappingURL=lib_db-client_15le7cw.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[93836,19307,e=>{"use strict";e.i(68835);var t=e.i(1746);function l(e,t){let l=[];for(let n of e){let e=r(t(n));if(!e)return null;l.push(e)}return l.sort().join("|")}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\-/%=.]*$/;function i(e){let t=String(e||"").trim();return n.test(t)?t:null}function o(e=[]){let l=new Map,n=new Map;for(let i of e){let e=(0,t.keyFor)(i);l.set(e,e);let o=r(i.name);o&&n.set(o,n.has(o)?null:e)}return(e,i)=>l.get((0,t.keyFor)({profile_url:e}))||n.get(r(i))||null}let s=/^https:\/\/www\.linkedin\.com\/in\/[^/?#\s]+\/?$/,a=e=>"string"==typeof e?e.replace(/[\u0000-\u001f]/g," ").trim().slice(0,120):"";e.s(["conversationList",0,function(e=[],t={},{others:n={},groups:i=[],names:o={}}={}){let s=(Array.isArray(e)?e:[]).map(e=>({...e,unread:null,threadUrl:null})),a=new Map;for(let e of s){if(e.group||e.people?.length!==1)continue;let t=a.get(e.people[0]);(!t||(e.last||0)>(t.last||0))&&a.set(e.people[0],e)}let u=(e,t)=>{t.last&&(!e.last||t.last>e.last)&&(e.last=t.last,"boolean"==typeof t.lastFromThem&&(e.lastFromThem=t.lastFromThem)),e.unread=Number.isFinite(t.unread)?t.unread:e.unread,e.threadUrl=t.threadUrl||e.threadUrl},f=(e,t,l)=>({id:e,people:t,group:l,kind:null,folder:"",last:null,lastFromThem:null,count:null,mine:null,unread:null,threadUrl:null});for(let[e,l]of Object.entries(t||{})){if(!l||"object"!=typeof l)continue;let t=a.get(e);t||(t=f(`live:${e}`,[e],!1),s.push(t),a.set(e,t)),u(t,l)}let c=new Map;for(let[e,t]of a){let l=r(o[e]);l&&c.set(l,c.has(l)?null:t)}for(let[e,t]of Object.entries(n||{})){if(!t||"object"!=typeof t)continue;let l=a.get(e)||c.get(r(t.name))||null;l||(l=f(`live:${e}`,[e],!1),s.push(l),a.set(e,l)),l.liveKey=e,u(l,t)}let p=new Map;for(let e of s){if(!e.group)continue;let t=l(e.people,e=>o[e]);t&&p.set(t,p.has(t)?null:e)}for(let e of Array.isArray(i)?i:[]){if(!e||!Array.isArray(e.people)||!e.people.length)continue;let t=l(e.people,t=>e.names?.[t]||o[t]),r=t&&p.get(t)||null;!r&&(r=f(`live:${e.threadUrl||e.people.join(",")}`,e.people,!0),s.push(r),t&&p.set(t,r)),u(r,e)}return s},"matchLive",0,function(e={},l=[]){let r=o(l),n={},u={};for(let[l,o]of Object.entries(e||{})){if(!o||"object"!=typeof o)continue;let e=r(l,o.name),f={last:Number(o.last)||null,unread:Number.isFinite(Number(o.unread))&&null!==o.unread?Number(o.unread):null,threadUrl:i(o.threadUrl),lastFromThem:"boolean"==typeof o.lastFromThem?o.lastFromThem:null,preview:function(e){if(!e||"object"!=typeof e)return null;let t=Number(e.t)||null,l="string"==typeof e.text?e.text.slice(0,2e4):null;return t||l?{t,fromMe:!0===e.fromMe,text:l}:null}(o.preview)};if(!e){let e=(0,t.keyFor)({profile_url:l});s.test(l)&&!u[e]&&(u[e]={name:a(o.name),...f});continue}n[e]&&(n[e].last||0)>=(f.last||0)||(n[e]=f)}return{live:n,others:u,unmatched:Object.keys(u).length}},"matchLiveGroups",0,function(e=[],l=[]){let r=o(l),n=[];for(let l of Array.isArray(e)?e.slice(0,5e3):[]){if(!l||"object"!=typeof l||!Array.isArray(l.people))continue;let e=[],o={};for(let n of l.people.slice(0,200)){if("string"!=typeof n||!s.test(n))continue;let i=a(l.names?.[n]),u=r(n,i);if(u){e.push(u);continue}let f=(0,t.keyFor)({profile_url:n});e.push(f),i&&(o[f]=i)}e.length<2||n.push({threadUrl:i(l.threadUrl),people:[...new Set(e)].sort(),names:o,last:Number(l.last)||null,unread:Number.isFinite(Number(l.unread))&&null!==l.unread?Number(l.unread):null,lastFromThem:"boolean"==typeof l.lastFromThem?l.lastFromThem:null})}return n},"mergeLive",0,function(e={},t={}){let l={...e&&"object"==typeof e?e:{}};for(let[e,r]of Object.entries(t||{}))(!l[e]||(r.last||0)>=(l[e].last||0))&&(l[e]=r);return l}],93836);var u=e.i(2157),f=e.i(50227),c=e.i(88431),p=e.i(88602);let m={file:null,mtimeMs:0,size:0,data:null};function d(e,t=null){try{return JSON.parse((0,u.readFileSync)(e,"utf8"))??t}catch{return t}}e.s(["deleteMessages",0,function(e){e&&((0,u.rmSync)(e.messages,{force:!0}),(0,u.rmSync)(e.incoming,{force:!0}),m.file=null)},"readJson",0,d,"readMessages",0,function(e){let t;try{t=(0,u.statSync)(e)}catch{return{threads:{},previews:{},invites:{}}}if(m.file===e&&m.mtimeMs===t.mtimeMs&&m.size===t.size)return m.data;let l=d(e,{}),r={threads:l?.threads&&"object"==typeof l.threads?l.threads:{},previews:l?.previews&&"object"==typeof l.previews?l.previews:{},invites:l?.invites&&"object"==typeof l.invites?l.invites:{}};return Object.assign(m,{file:e,mtimeMs:t.mtimeMs,size:t.size,data:r}),r},"socialFiles",0,function(){let e=(0,p.resolveProfile)({create:!1});if(!e?.id||!/^[\w-]+$/.test(String(e.id)))return null;let t=(0,c.dataDir)(),l=f.default.join(t,`social-messages-${e.id}.json`);return{profileId:e.id,social:f.default.join(t,`social-${e.id}.json`),messages:l,crm:f.default.join(t,`crm-${e.id}.json`),incoming:`${l}.incoming`}},"writeJsonAtomic",0,function(e,t){let l=`${e}.${process.pid}.tmp`;(0,u.writeFileSync)(l,JSON.stringify(t)),(0,u.renameSync)(l,e),m.file===e&&(m.file=null)}],19307)}];
2
+
3
+ //# sourceMappingURL=lib_linkedin-export_12imqxg.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[35862,e=>{e.v(r=>Promise.all(["server/chunks/lib_1r6l86l._.js","server/chunks/lib_scoring_1-e4ur0.js"].map(r=>e.l(r))).then(()=>r(33471)))}];
2
+
3
+ //# sourceMappingURL=lib_rpc_04s8mzr.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[35862,e=>{e.v(r=>Promise.all(["server/chunks/lib_1r6l86l._.js","server/chunks/lib_scoring_1-e4ur0.js"].map(r=>e.l(r))).then(()=>r(33471)))}];
2
+
3
+ //# sourceMappingURL=lib_rpc_053z7as.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[35862,e=>{e.v(r=>Promise.all(["server/chunks/lib_1r6l86l._.js","server/chunks/lib_scoring_1-e4ur0.js"].map(r=>e.l(r))).then(()=>r(33471)))}];
2
+
3
+ //# sourceMappingURL=lib_rpc_0b_-2te.js.map