six-degrees 0.4.9 → 0.4.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  3. package/.next/standalone/.next/build-manifest.json +3 -3
  4. package/.next/standalone/.next/prerender-manifest.json +4 -4
  5. package/.next/standalone/.next/routes-manifest.json +6 -0
  6. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  10. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  12. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  14. package/.next/standalone/.next/server/app/_not-found.rsc +13 -13
  15. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +13 -13
  16. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +12 -12
  17. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  18. package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  38. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/social/crm/route/app-paths-manifest.json +3 -0
  42. package/.next/standalone/.next/server/app/api/social/crm/route/build-manifest.json +12 -0
  43. package/.next/standalone/.next/server/app/api/social/crm/route/server-reference-manifest.json +4 -0
  44. package/.next/standalone/.next/server/app/api/social/crm/route.js +10 -0
  45. package/.next/standalone/.next/server/app/api/social/crm/route.js.map +5 -0
  46. package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -0
  47. package/.next/standalone/.next/server/app/api/social/crm/route_client-reference-manifest.js +3 -0
  48. package/.next/standalone/.next/server/app/api/social/messages/route.js +4 -3
  49. package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/api/social/route.js +4 -3
  51. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
  53. package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  54. package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
  55. package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
  56. package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
  57. package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
  58. package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
  59. package/.next/standalone/.next/server/app/import.html +1 -1
  60. package/.next/standalone/.next/server/app/import.rsc +15 -15
  61. package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +15 -15
  62. package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +2 -2
  63. package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +14 -14
  64. package/.next/standalone/.next/server/app/index.html +1 -1
  65. package/.next/standalone/.next/server/app/index.rsc +15 -15
  66. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +14 -14
  67. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +15 -15
  68. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  69. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  70. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  71. package/.next/standalone/.next/server/app/launch.html +2 -2
  72. package/.next/standalone/.next/server/app/launch.rsc +15 -15
  73. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +15 -15
  74. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +2 -2
  75. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +14 -14
  76. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  77. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  79. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  80. package/.next/standalone/.next/server/app/paths.html +1 -1
  81. package/.next/standalone/.next/server/app/paths.rsc +15 -15
  82. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +15 -15
  83. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +2 -2
  84. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +14 -14
  85. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  86. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  87. package/.next/standalone/.next/server/app/profile.html +1 -1
  88. package/.next/standalone/.next/server/app/profile.rsc +15 -15
  89. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +15 -15
  90. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +2 -2
  91. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +14 -14
  92. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  93. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  94. package/.next/standalone/.next/server/app/queue.html +1 -1
  95. package/.next/standalone/.next/server/app/queue.rsc +15 -15
  96. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +15 -15
  97. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +2 -2
  98. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +14 -14
  99. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  100. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  101. package/.next/standalone/.next/server/app/scores.html +1 -1
  102. package/.next/standalone/.next/server/app/scores.rsc +15 -15
  103. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +15 -15
  104. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +2 -2
  105. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +14 -14
  106. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  107. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  108. package/.next/standalone/.next/server/app/settings.html +1 -1
  109. package/.next/standalone/.next/server/app/settings.rsc +15 -15
  110. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +15 -15
  111. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  112. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +14 -14
  113. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  114. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  115. package/.next/standalone/.next/server/app/setup.html +1 -1
  116. package/.next/standalone/.next/server/app/setup.rsc +15 -15
  117. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +15 -15
  118. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +2 -2
  119. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +14 -14
  120. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  121. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  122. package/.next/standalone/.next/server/app/social.html +1 -1
  123. package/.next/standalone/.next/server/app/social.rsc +15 -15
  124. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +15 -15
  125. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +2 -2
  126. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +14 -14
  127. package/.next/standalone/.next/server/app-paths-manifest.json +1 -0
  128. package/.next/standalone/.next/server/chunks/{[root-of-the-server]__06mi9k2._.js → [root-of-the-server]__05_3-22._.js} +7 -2
  129. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0t3v1a1._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/[root-of-the-server]__1tir0vc._.js +8 -0
  131. package/.next/standalone/.next/server/chunks/_0ea9qwy._.js +1 -1
  132. package/.next/standalone/.next/server/chunks/_1_fynia._.js +4 -4
  133. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
  134. package/.next/standalone/.next/server/chunks/_1oqfuh8._.js +3 -0
  135. package/.next/standalone/.next/server/chunks/_1xh07bp._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/_next-internal_server_app_api_social_crm_route_actions_0d1aflv.js +3 -0
  137. package/.next/standalone/.next/server/chunks/lib_db-client_15le7cw.js +7 -7
  138. package/.next/standalone/.next/server/chunks/lib_linkedin-export_12imqxg.js +3 -0
  139. package/.next/standalone/.next/server/chunks/lib_rpc_05gt5ya.js +3 -0
  140. package/.next/standalone/.next/server/chunks/ssr/_0-85h6g._.js +3 -0
  141. package/.next/standalone/.next/server/chunks/ssr/_08cfj2b._.js +3 -0
  142. package/.next/standalone/.next/server/chunks/ssr/_0c_y09g._.js +1 -1
  143. package/.next/standalone/.next/server/chunks/ssr/app_page_1fazqbf.js +1 -1
  144. package/.next/standalone/.next/server/chunks/ssr/app_paths_page_1ol90m7.js +1 -1
  145. package/.next/standalone/.next/server/chunks/ssr/app_profile_page_0u3-l5y.js +1 -1
  146. package/.next/standalone/.next/server/chunks/ssr/app_queue_page_0c6znd6.js +1 -1
  147. package/.next/standalone/.next/server/chunks/ssr/app_scores_page_09wepvv.js +1 -1
  148. package/.next/standalone/.next/server/chunks/ssr/app_settings_page_1f8mjj_.js +1 -1
  149. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +1 -1
  150. package/.next/standalone/.next/server/chunks/ssr/app_social_page_0h7zxda.js +2 -1
  151. package/.next/standalone/.next/server/chunks/ssr/lib_galaxy-lab_108_lu-.js +3 -0
  152. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  153. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  154. package/.next/standalone/.next/server/pages/404.html +1 -1
  155. package/.next/standalone/.next/server/pages/500.html +1 -1
  156. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  157. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  158. package/.next/standalone/.next/static/chunks/0a5iadnmt9u9k.js +1 -0
  159. package/.next/standalone/.next/static/chunks/15sjx07xhpn6p.js +1 -0
  160. package/.next/standalone/.next/static/chunks/{054zdthcnyd2h.js → 160wjb73ddwqd.js} +1 -1
  161. package/.next/standalone/.next/static/chunks/1a74dky22dxd6.js +1 -0
  162. package/.next/standalone/.next/static/chunks/{04bbi55urkrd6.js → 1c_n0973t07l0.js} +1 -1
  163. package/.next/standalone/.next/static/chunks/{0bo1dxn5gwzpk.css → 1x_ysly42-teq.css} +1 -1
  164. package/.next/standalone/.next/static/chunks/{1_mohm2643nxp.js → 236f0jtp68j_h.js} +1 -1
  165. package/.next/standalone/.next/static/chunks/297e1z34yi--z.js +1 -0
  166. package/.next/standalone/.next/static/chunks/2_ak6qjxb6oa5.js +1 -0
  167. package/.next/standalone/.next/static/chunks/{38wwtni5e1ec1.js → 39hr8d-b2ibtw.js} +1 -1
  168. package/.next/standalone/.next/static/chunks/3ui4d-uqkqj5d.js +2 -0
  169. package/.next/{static/chunks/1z_rt4jteewqp.js → standalone/.next/static/chunks/3zw8bv7-mc4n6.js} +1 -1
  170. package/.next/standalone/CHANGELOG.md +57 -0
  171. package/.next/standalone/app/api/data/export/route.js +2 -1
  172. package/.next/standalone/app/api/scraper/route.js +5 -1
  173. package/.next/standalone/app/api/social/crm/route.js +37 -0
  174. package/.next/standalone/app/api/social/messages/route.js +44 -8
  175. package/.next/standalone/app/api/social/route.js +80 -22
  176. package/.next/standalone/app/components/GalaxyLab.js +4 -1
  177. package/.next/standalone/app/components/ScanStatusBar.js +97 -71
  178. package/.next/standalone/app/components/settings/DataSection.js +12 -3
  179. package/.next/standalone/app/globals.css +15 -0
  180. package/.next/standalone/app/paths/page.js +0 -2
  181. package/.next/standalone/app/profile/page.js +0 -2
  182. package/.next/standalone/app/queue/page.js +0 -2
  183. package/.next/standalone/app/scores/page.js +0 -2
  184. package/.next/standalone/app/settings/page.js +0 -2
  185. package/.next/standalone/app/setup/page.js +0 -2
  186. package/.next/standalone/app/social/Crm.js +683 -0
  187. package/.next/standalone/app/social/Thread.js +90 -0
  188. package/.next/standalone/app/social/page.js +71 -62
  189. package/.next/standalone/lib/data-export.js +10 -4
  190. package/.next/standalone/lib/data-folder.js +9 -0
  191. package/.next/standalone/lib/data-import.js +13 -3
  192. package/.next/standalone/lib/island.js +36 -0
  193. package/.next/standalone/lib/linkedin-export.js +267 -46
  194. package/.next/standalone/lib/social-crm.js +415 -0
  195. package/.next/standalone/lib/social-store.js +13 -6
  196. package/.next/standalone/package-lock.json +2 -2
  197. package/.next/standalone/package.json +1 -1
  198. package/.next/standalone/scripts/scrape.py +126 -22
  199. package/.next/static/chunks/0a5iadnmt9u9k.js +1 -0
  200. package/.next/static/chunks/15sjx07xhpn6p.js +1 -0
  201. package/.next/static/chunks/{054zdthcnyd2h.js → 160wjb73ddwqd.js} +1 -1
  202. package/.next/static/chunks/1a74dky22dxd6.js +1 -0
  203. package/.next/static/chunks/{04bbi55urkrd6.js → 1c_n0973t07l0.js} +1 -1
  204. package/.next/static/chunks/{0bo1dxn5gwzpk.css → 1x_ysly42-teq.css} +1 -1
  205. package/.next/static/chunks/{1_mohm2643nxp.js → 236f0jtp68j_h.js} +1 -1
  206. package/.next/static/chunks/297e1z34yi--z.js +1 -0
  207. package/.next/static/chunks/2_ak6qjxb6oa5.js +1 -0
  208. package/.next/static/chunks/{38wwtni5e1ec1.js → 39hr8d-b2ibtw.js} +1 -1
  209. package/.next/static/chunks/3ui4d-uqkqj5d.js +2 -0
  210. package/.next/{standalone/.next/static/chunks/1z_rt4jteewqp.js → static/chunks/3zw8bv7-mc4n6.js} +1 -1
  211. package/CHANGELOG.md +57 -0
  212. package/lib/data-export.js +10 -4
  213. package/lib/data-folder.js +9 -0
  214. package/lib/data-import.js +13 -3
  215. package/lib/island.js +36 -0
  216. package/lib/linkedin-export.js +267 -46
  217. package/lib/social-crm.js +415 -0
  218. package/lib/social-store.js +13 -6
  219. package/package.json +1 -1
  220. package/scripts/scrape.py +126 -22
  221. package/.next/standalone/.next/server/chunks/[root-of-the-server]__08f5awg._.js +0 -8
  222. package/.next/standalone/.next/server/chunks/lib_18cr1gi._.js +0 -8
  223. package/.next/standalone/.next/server/chunks/ssr/_0ezj4e0._.js +0 -3
  224. package/.next/standalone/.next/server/chunks/ssr/_1errbuf._.js +0 -3
  225. package/.next/standalone/.next/server/chunks/ssr/app_components_ui_0pdmz2z.js +0 -3
  226. package/.next/standalone/.next/static/chunks/2bftn9gubwf0w.js +0 -1
  227. package/.next/standalone/.next/static/chunks/2pw6_osz1n_te.js +0 -1
  228. package/.next/standalone/.next/static/chunks/39csdcx7yv227.js +0 -1
  229. package/.next/standalone/.next/static/chunks/3yzlf70j5t0-o.js +0 -1
  230. package/.next/standalone/.next/static/chunks/3z-swu5pet507.js +0 -1
  231. package/.next/standalone/app/social/Conversations.js +0 -246
  232. package/.next/static/chunks/2bftn9gubwf0w.js +0 -1
  233. package/.next/static/chunks/2pw6_osz1n_te.js +0 -1
  234. package/.next/static/chunks/39csdcx7yv227.js +0 -1
  235. package/.next/static/chunks/3yzlf70j5t0-o.js +0 -1
  236. package/.next/static/chunks/3z-swu5pet507.js +0 -1
  237. /package/.next/standalone/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_buildManifest.js +0 -0
  238. /package/.next/standalone/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_clientMiddlewareManifest.js +0 -0
  239. /package/.next/standalone/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_ssgManifest.js +0 -0
  240. /package/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_buildManifest.js +0 -0
  241. /package/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_clientMiddlewareManifest.js +0 -0
  242. /package/.next/static/{yPlsfKhdS8MMtyXF7twSZ → jqE2D3zWqSGz5su948Azf}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- module.exports=[81638,e=>{"use strict";let t;var n=e.i(74533),r=e.i(2157),i=e.i(50227),o=e.i(10960),a=e.i(88602);let s=/LinkedIn reports (\d+) connections/,l=/^Downloading Python [\d.]+: ([\d.]+) of ([\d.]+) MB$/,u=/(\d+)\s*\/\s*(\d+)\s+collected/,d=/Collected all (\d+) connections/,c=/\[(\d+)\/(\d+)\]/,p=/^(Collected \d+ connections|Pushing \d+ connections|\s*Sent \d+ →|\s*Updating \d+ profile images|\s*\[image_store\]|\s*Images \d+-\d+)/;function h(e,t){return t?{done:Math.min(e,t),total:t,kind:"walk"}:null}var f=e.i(41238);function g(e,t){try{let n=JSON.parse((0,r.readFileSync)(i.default.join(e,"bridge-progress.json"),"utf8")),o=n?.[String(t||"default")];return o&&"object"==typeof o?o:{}}catch{return{}}}function m(e){try{return JSON.parse((0,r.readFileSync)(i.default.join(e,"bridge-unclear.json"),"utf8"))||{}}catch{return{}}}function y(e,t,n={},r={}){let i=[];for(let o of e){let e=o.profile_url,a=e?n[e]:void 0;if(!t.has(o.id)&&!a)continue;let s=function(e){if(!e)return 11;if(e.hidden||!e.more)return null;let t=(Number(e.pages)||0)+1;return t<=100?t:null}(a);null!=s&&i.push({id:o.id,name:o.name,tier:o.tier,profileUrl:e,pagesRead:s-1,nextPage:s,legacy:!a,at:a?.at||null,unclear:Number(r?.[e]?.n)||0,connected:o.connected_date||null,created:o.created_at||null})}let o=e=>`${+!!e.connected}|${e.connected||e.created||""}`;return i.sort((e,t)=>(e.unclear>=2)-(t.unclear>=2)||o(t).localeCompare(o(e))),i}var b=e.i(88431),w=e.i(1348),v=e.i(19041),_=e.i(98612),S=e.i(1746),R=e.i(66680),E=e.i(12714),T=e.i(98199),x=e.i(26525);let k=Object.freeze({release:"20260814",version:"3.12.14",builds:Object.freeze({"darwin-arm64":Object.freeze({file:"cpython-3.12.14+20260814-aarch64-apple-darwin-install_only.tar.gz",sha256:"4572133a5542f306b9bdb155da5800f9e38950cd0a98d469b832ce256fe299ea",size:0x17fc7f8}),"darwin-x64":Object.freeze({file:"cpython-3.12.14+20260814-x86_64-apple-darwin-install_only.tar.gz",sha256:"1a94c83264731e9603fbea78e57e7ca8f20e7d91eb866627ac2304621b0f6f1f",size:0x17b03bb}),"linux-x64":Object.freeze({file:"cpython-3.12.14+20260814-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",sha256:"5acfa3e9ba26b51ae161c83aff278da915b590d22373a424b2ba55b8afe91fcc",size:0x208fdfb}),"linux-arm64":Object.freeze({file:"cpython-3.12.14+20260814-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",sha256:"2d8e17dfd732102cfeb18e0e1fa6769b24caa034e159981129590fe409c7157a",size:0x1bdd3eb})})}),C=Object.freeze({min:[3,10],max:[3,14]}),N=Object.freeze(["/usr/bin/python3","python3","python","python3.14","python3.13","python3.12","python3.11","python3.10"]);function P(e,t=C){let n=String(e||"").match(/^(\d+)\.(\d+)/);if(!n)return!1;let r=[Number(n[1]),Number(n[2])],i=(e,t)=>e[0]-t[0]||e[1]-t[1];return i(r,t.min)>=0&&0>=i(r,t.max)}let D="import requests; from PIL import Image; from playwright.sync_api import sync_playwright",A=`import sys
1
+ module.exports=[81638,e=>{"use strict";let t;var n=e.i(74533),r=e.i(2157),i=e.i(50227),o=e.i(10960),a=e.i(88602);let s=/LinkedIn reports (\d+) connections/,l=/^Downloading Python [\d.]+: ([\d.]+) of ([\d.]+) MB$/,u=/(\d+)\s*\/\s*(\d+)\s+collected/,d=/Collected all (\d+) connections/,c=/\[(\d+)\/(\d+)\]/,p=/^(Collected \d+ connections|Pushing \d+ connections|\s*Sent \d+ →|\s*Updating \d+ profile images|\s*\[image_store\]|\s*Images \d+-\d+)/;function h(e,t){return t?{done:Math.min(e,t),total:t,kind:"walk"}:null}var f=e.i(41238);function g(e,t){try{let n=JSON.parse((0,r.readFileSync)(i.default.join(e,"bridge-progress.json"),"utf8")),o=n?.[String(t||"default")];return o&&"object"==typeof o?o:{}}catch{return{}}}function m(e){try{return JSON.parse((0,r.readFileSync)(i.default.join(e,"bridge-unclear.json"),"utf8"))||{}}catch{return{}}}function y(e,t,n={},r={}){let i=[];for(let o of e){let e=o.profile_url,a=e?n[e]:void 0;if(!t.has(o.id)&&!a)continue;let s=function(e){if(!e)return 11;if(e.hidden||!e.more)return null;let t=(Number(e.pages)||0)+1;return t<=100?t:null}(a);null!=s&&i.push({id:o.id,name:o.name,tier:o.tier,profileUrl:e,pagesRead:s-1,nextPage:s,legacy:!a,at:a?.at||null,unclear:Number(r?.[e]?.n)||0,connected:o.connected_date||null,created:o.created_at||null})}let o=e=>`${+!!e.connected}|${e.connected||e.created||""}`;return i.sort((e,t)=>(e.unclear>=2)-(t.unclear>=2)||o(t).localeCompare(o(e))),i}var b=e.i(88431),w=e.i(1348),v=e.i(19041),_=e.i(98612),R=e.i(1746),S=e.i(66680),E=e.i(12714),T=e.i(98199),x=e.i(26525);let k=Object.freeze({release:"20260814",version:"3.12.14",builds:Object.freeze({"darwin-arm64":Object.freeze({file:"cpython-3.12.14+20260814-aarch64-apple-darwin-install_only.tar.gz",sha256:"4572133a5542f306b9bdb155da5800f9e38950cd0a98d469b832ce256fe299ea",size:0x17fc7f8}),"darwin-x64":Object.freeze({file:"cpython-3.12.14+20260814-x86_64-apple-darwin-install_only.tar.gz",sha256:"1a94c83264731e9603fbea78e57e7ca8f20e7d91eb866627ac2304621b0f6f1f",size:0x17b03bb}),"linux-x64":Object.freeze({file:"cpython-3.12.14+20260814-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz",sha256:"5acfa3e9ba26b51ae161c83aff278da915b590d22373a424b2ba55b8afe91fcc",size:0x208fdfb}),"linux-arm64":Object.freeze({file:"cpython-3.12.14+20260814-aarch64-unknown-linux-gnu-install_only_stripped.tar.gz",sha256:"2d8e17dfd732102cfeb18e0e1fa6769b24caa034e159981129590fe409c7157a",size:0x1bdd3eb})})}),C=Object.freeze({min:[3,10],max:[3,14]}),N=Object.freeze(["/usr/bin/python3","python3","python","python3.14","python3.13","python3.12","python3.11","python3.10"]);function P(e,t=C){let n=String(e||"").match(/^(\d+)\.(\d+)/);if(!n)return!1;let r=[Number(n[1]),Number(n[2])],i=(e,t)=>e[0]-t[0]||e[1]-t[1];return i(r,t.min)>=0&&0>=i(r,t.max)}let D="import requests; from PIL import Image; from playwright.sync_api import sync_playwright",A=`import sys
2
2
  print("version %d.%d.%d" % sys.version_info[:3])
3
3
  try:
4
4
  import venv, ensurepip
@@ -9,17 +9,17 @@ try:
9
9
  ${D}
10
10
  print("imports")
11
11
  except Exception as e:
12
- print("missing %s: %s" % (type(e).__name__, (str(e).splitlines() or [""])[0][:200]))`;function O(e){let t={version:null,venv:!1,imports:!1,missing:null};for(let n of String(e||"").split("\n").map(e=>e.trim()))n.startsWith("version ")?t.version=n.slice(8).trim()||null:"venv"===n?t.venv=!0:"imports"===n?t.imports=!0:n.startsWith("missing ")&&(t.missing=n.slice(8).trim()||null);return t}let j=Object.freeze(["-E","-s","-B","-u"]);function I(e=process.env){let t={};for(let[n,r]of Object.entries(e))n.startsWith("PYTHON")||(t[n]=r);return t.PYTHONNOUSERSITE="1",t.PYTHONDONTWRITEBYTECODE="1",t}function $(e=process.env){return{...e,PYTHONDONTWRITEBYTECODE:"1"}}let M=new Set(["target","prefix","root","user"]);function F(e=process.env){let t={};for(let[n,r]of Object.entries(e))n.startsWith("PIP_")&&M.has(n.slice(4).toLowerCase().replace(/_/g,"-"))||(t[n]=r);return t}function H(e){return i.default.join(e,"venv")}function L(e,t=process.platform){return"win32"===t?i.default.join(H(e),"Scripts","python.exe"):i.default.join(H(e),"bin","python")}let U="python";function W(e){return i.default.join(e,U,"bin","python3")}function z(e,t,{timeoutMs:r=8e3,env:i}={}){return new Promise(o=>{let a,s="",l="",u=!1,d=e=>{u||(u=!0,o(e))};try{a=(0,n.spawn)(e,t,{stdio:["ignore","pipe","pipe"],...i?{env:i}:{}})}catch(e){d({ok:!1,stdout:s,stderr:l,problem:e.message});return}let c=(e,t)=>e.length<16384?e+t.toString():e;a.stdout.on("data",e=>{s=c(s,e)}),a.stderr.on("data",e=>{l=c(l,e)});let p=setTimeout(()=>{try{a.kill("SIGKILL")}catch{}d({ok:!1,stdout:s,stderr:l,problem:`it didn't answer within ${Math.round(r/1e3)} seconds`})},r);a.on("error",e=>{clearTimeout(p),d({ok:!1,stdout:s,stderr:l,problem:"ENOENT"===e.code?"it isn't there":e.message})}),a.on("close",(e,t)=>{clearTimeout(p);let n=l.trim().split("\n").pop()||"";d({ok:0===e,stdout:s,stderr:l,problem:0===e?null:t?`it was stopped (${t})`:n||`it exited with ${e}`})})})}async function q({bundled:e="",app:t="",dataDir:n,probe:o=z,exists:a=r.default.existsSync,host:s=null,systemCandidates:l=N,timeouts:u={own:2e4,other:8e3},env:d=process.env}={}){let c={run:null,own:null,base:null,systemFound:null,download:null};if(e){let n=t&&i.default.resolve(e).startsWith(`${i.default.resolve(t)}${i.default.sep}`)?"bundled":"custom",r=await o(e,[...j,"-c",A],{timeoutMs:u.own,env:I(d)}),a=O(r.stdout);if(r.ok&&a.imports)return c.run={path:e,source:n,version:a.version},c;c.own={source:n,problem:a.missing||r.problem||"it didn't start"}}let p=L(n);if(a(p)){let e=await o(p,["-c",A],{timeoutMs:u.other,env:d}),t=O(e.stdout);if(e.ok&&t.imports)return c.run={path:p,source:"venv",version:t.version},c}let h=[];for(let e of l){let t=await o(e,["-c",A],{timeoutMs:u.other,env:d}),n=O(t.stdout);if(n.version){if(t.ok&&n.imports)return c.run={path:e,source:"system",version:n.version},c;h.push({path:e,version:n.version,venv:n.venv})}}let f=h.find(e=>e.venv&&P(e.version));if(f)return c.base={path:f.path,source:"system",version:f.version},c;let g=h.find(e=>P(e.version))||h[0];c.systemFound=g?{version:g.version,venv:g.venv}:null;let m=W(n);if(a(m)){let e=await o(m,[...j,"-c",A],{timeoutMs:u.other,env:I(d)}),t=O(e.stdout);if(e.ok&&t.venv)return c.base={path:m,source:"downloaded",version:t.version},c}return c.download=function(e,t=k){let n=e&&Object.hasOwn(t.builds,e)?t.builds[e]:null;return n?{key:e,version:t.version,release:t.release,...n,url:function(e,t=k){return`https://github.com/astral-sh/python-build-standalone/releases/download/${t.release}/${encodeURIComponent(e.file)}`}(n,t)}:null}(s),c}class G extends Error{}let B=(...e)=>(globalThis.fetch?._nextOriginalFetch||globalThis.fetch)(...e),K=e=>(e/1048576).toFixed(1);async function X(e,t,{sha256:n,size:r,signal:i,onProgress:o,idleMs:a=3e4,fetchImpl:s=B,from:l="GitHub"}={}){if(!/^[0-9a-f]{64}$/.test(String(n))||!(Number.isInteger(r)&&r>0))throw new G("There is no pinned checksum for this download, so it wasn't started.");let u=`${t}.part`,d=new AbortController,c=i?AbortSignal.any([i,d.signal]):d.signal,p=null,h=()=>{clearTimeout(p),p=setTimeout(()=>d.abort(new G(`The download stopped for ${Math.round(a/1e3)} seconds. Check your connection and try again.`)),a)};h();let f=await E.default.open(u,"w"),g=(0,R.createHash)("sha256"),m=0,y=!1;try{let t=await s(e,{signal:c,redirect:"follow",cache:"no-store",headers:{Accept:"application/octet-stream","User-Agent":"six-degrees-scanner-setup"}});if(!t.ok||!t.body)throw new G(`${l} answered ${t.status} to the download. Try again later.`);let i=Number(t.headers.get("content-length"))||null;if(i&&i!==r)throw new G(`The download isn't the size it should be (${i} bytes, not ${r}), so it was stopped.`);for await(let e of t.body){if(h(),(m+=e.byteLength)>r)throw new G("The download is bigger than it should be, so it was stopped.");g.update(e);let t=0;for(;t<e.byteLength;){let{bytesWritten:n}=await f.write(e,t,e.byteLength-t);t+=n}o?.(m,r)}if(m!==r)throw new G("The download ended early. Try again.");let a=g.digest("hex");if(a!==n)throw new G("The download doesn't match the checksum Six Degrees has for it, so it was deleted and nothing was unpacked.");return y=!0,a}catch(e){if(c.aborted&&c.reason instanceof Error)throw c.reason;throw e}finally{clearTimeout(p),await f.close(),y?await E.default.rename(u,t):await E.default.rm(u,{force:!0})}}async function Y(e,t,n){let o=i.default.join(e,"python");if(!await E.default.lstat(i.default.join(o,"bin","python3")).catch(()=>null))throw new G("The download didn't contain the Python it should have.");let a=i.default.join(t,U);return r.default.existsSync(a)&&await E.default.rename(a,i.default.join(n,"python-before")),await E.default.rename(o,a),W(t)}let V=(0,w.registerScanState)({running:!1,action:null,target:null,recent:[],log:[],startedAt:null,exitCode:null,child:null,abort:null,stopping:!1,stderrTail:[],failure:null});function J(e){for(let t of String(e).split("\n")){let e=t.replace(/\s+$/,"");e&&V.log.push(e)}V.log.length>500&&V.log.splice(0,V.log.length-500)}function Z(){try{let e=(0,r.readFileSync)(i.default.join((0,o.dataDir)(),"bridge-skips.json"),"utf8"),t=JSON.parse(e);return Object.entries(t).map(([e,t])=>({profileUrl:e,name:t?.name??"",reason:t?.reason??"",at:t?.at??null}))}catch{return[]}}function Q(){let e=[],t={};try{let n=(0,a.resolveProfile)({create:!1});if(n){let r=g((0,o.dataDir)(),n.id);for(let[n,i]of(e=Object.keys(r),Object.entries(r)))t[n]={pages:Number(i?.pages)||0,more:!!i?.more,total:Number(i?.total)||null}}}catch{}return{skips:Z(),read:e,lists:t}}let ee={at:0,value:null},et=null,en=0;function er(){en++,ee={at:0,value:null},et=null}let ei=Symbol.for("six-degrees.python-looker"),eo=globalThis[ei]??=function({choose:e=q,now:t=Date.now,retryMs:n=6e4}={}){let r=null,i=null;return async function(o,a={}){if(o&&r?.path===o)return{run:r,own:null,base:null,systemFound:null,download:null};let s=!!o&&i?.path===o&&(!1===i.own.retry||t()-i.at<n),l=await e({...a,bundled:s?"":o});if(s)return{...l,own:i.own};if(o&&l.run?.path===o)r=l.run;else if(o&&l.own){let e="bundled"===l.own.source?{...l.own,retry:!1}:l.own;return i={path:o,at:t(),own:e},{...l,own:e}}return l}}();async function ea(){let e=(0,o.projectRoot)(),n=await eo(process.env.SIX_DEGREES_PYTHON||"",{app:process.env.SIX_DEGREES_APP||"",dataDir:(0,o.dataDir)(),host:(void 0===t&&(t=function({platform:e=process.platform,arch:t=process.arch,sysctlArm64:n=""}={}){return"darwin"===e?`darwin-${(0,T.chipOf)({sysctlArm64:n,processArch:t})}`:"linux"===e&&("x64"===t||"arm64"===t)?`linux-${t}`:null}({sysctlArm64:""})),t)});return{root:e,python:n,chrome:(0,r.existsSync)("/opt/google/chrome/chrome"),signedIn:(0,r.existsSync)(i.default.join((0,o.dataDir)(),"chrome-profile","Default","Cookies"))}}function es(){if(Date.now()-ee.at<4e3&&ee.value)return Promise.resolve(ee.value);if(et)return et;let e=en,t=ea().then(t=>(e===en&&(ee={at:Date.now(),value:t}),t)).finally(()=>{et===t&&(et=null)});return et=t,t}async function el(){let e=await es(),t={first:0,second:0,third:0},n=null;try{(n=(0,a.resolveProfile)({create:!1}))&&(t=(0,a.networkCounts)(n.id))}catch{}let r=0;try{r=(0,_.waitingPhotoCount)((0,b.getDb)())}catch{}let i=e.python;return{ready:!!(e.root&&i.run&&e.chrome),checks:{scriptsFound:!!e.root,python:!!(i.run||i.base),pythonPath:i.run?.path||i.base?.path||null,pythonVersion:i.run?.version||i.base?.version||null,pythonSource:i.run?.source||null,dependencies:!!i.run,ownPython:i.own,installFrom:i.base?{source:i.base.source,version:i.base.version}:null,systemPython:i.systemFound,download:i.download?{version:i.download.version,size:i.download.size,from:"github.com"}:null,chrome:e.chrome,signedIn:e.signedIn},network:t,photosWaiting:r,...eu(),skips:Z(),linkedin:(0,f.linkedinState)((0,o.dataDir)()),paused:function(e){if(!e)return[];try{let t=(0,b.getDb)(),n=t.prepare(`SELECT id, name, tier, profile_url, connected_date, created_at
12
+ print("missing %s: %s" % (type(e).__name__, (str(e).splitlines() or [""])[0][:200]))`;function O(e){let t={version:null,venv:!1,imports:!1,missing:null};for(let n of String(e||"").split("\n").map(e=>e.trim()))n.startsWith("version ")?t.version=n.slice(8).trim()||null:"venv"===n?t.venv=!0:"imports"===n?t.imports=!0:n.startsWith("missing ")&&(t.missing=n.slice(8).trim()||null);return t}let j=Object.freeze(["-E","-s","-B","-u"]);function I(e=process.env){let t={};for(let[n,r]of Object.entries(e))n.startsWith("PYTHON")||(t[n]=r);return t.PYTHONNOUSERSITE="1",t.PYTHONDONTWRITEBYTECODE="1",t}function $(e=process.env){return{...e,PYTHONDONTWRITEBYTECODE:"1"}}let M=new Set(["target","prefix","root","user"]);function F(e=process.env){let t={};for(let[n,r]of Object.entries(e))n.startsWith("PIP_")&&M.has(n.slice(4).toLowerCase().replace(/_/g,"-"))||(t[n]=r);return t}function H(e){return i.default.join(e,"venv")}function L(e,t=process.platform){return"win32"===t?i.default.join(H(e),"Scripts","python.exe"):i.default.join(H(e),"bin","python")}let U="python";function W(e){return i.default.join(e,U,"bin","python3")}function z(e,t,{timeoutMs:r=8e3,env:i}={}){return new Promise(o=>{let a,s="",l="",u=!1,d=e=>{u||(u=!0,o(e))};try{a=(0,n.spawn)(e,t,{stdio:["ignore","pipe","pipe"],...i?{env:i}:{}})}catch(e){d({ok:!1,stdout:s,stderr:l,problem:e.message});return}let c=(e,t)=>e.length<16384?e+t.toString():e;a.stdout.on("data",e=>{s=c(s,e)}),a.stderr.on("data",e=>{l=c(l,e)});let p=setTimeout(()=>{try{a.kill("SIGKILL")}catch{}d({ok:!1,stdout:s,stderr:l,problem:`it didn't answer within ${Math.round(r/1e3)} seconds`})},r);a.on("error",e=>{clearTimeout(p),d({ok:!1,stdout:s,stderr:l,problem:"ENOENT"===e.code?"it isn't there":e.message})}),a.on("close",(e,t)=>{clearTimeout(p);let n=l.trim().split("\n").pop()||"";d({ok:0===e,stdout:s,stderr:l,problem:0===e?null:t?`it was stopped (${t})`:n||`it exited with ${e}`})})})}async function q({bundled:e="",app:t="",dataDir:n,probe:o=z,exists:a=r.default.existsSync,host:s=null,systemCandidates:l=N,timeouts:u={own:2e4,other:8e3},env:d=process.env}={}){let c={run:null,own:null,base:null,systemFound:null,download:null};if(e){let n=t&&i.default.resolve(e).startsWith(`${i.default.resolve(t)}${i.default.sep}`)?"bundled":"custom",r=await o(e,[...j,"-c",A],{timeoutMs:u.own,env:I(d)}),a=O(r.stdout);if(r.ok&&a.imports)return c.run={path:e,source:n,version:a.version},c;c.own={source:n,problem:a.missing||r.problem||"it didn't start"}}let p=L(n);if(a(p)){let e=await o(p,["-c",A],{timeoutMs:u.other,env:d}),t=O(e.stdout);if(e.ok&&t.imports)return c.run={path:p,source:"venv",version:t.version},c}let h=[];for(let e of l){let t=await o(e,["-c",A],{timeoutMs:u.other,env:d}),n=O(t.stdout);if(n.version){if(t.ok&&n.imports)return c.run={path:e,source:"system",version:n.version},c;h.push({path:e,version:n.version,venv:n.venv})}}let f=h.find(e=>e.venv&&P(e.version));if(f)return c.base={path:f.path,source:"system",version:f.version},c;let g=h.find(e=>P(e.version))||h[0];c.systemFound=g?{version:g.version,venv:g.venv}:null;let m=W(n);if(a(m)){let e=await o(m,[...j,"-c",A],{timeoutMs:u.other,env:I(d)}),t=O(e.stdout);if(e.ok&&t.venv)return c.base={path:m,source:"downloaded",version:t.version},c}return c.download=function(e,t=k){let n=e&&Object.hasOwn(t.builds,e)?t.builds[e]:null;return n?{key:e,version:t.version,release:t.release,...n,url:function(e,t=k){return`https://github.com/astral-sh/python-build-standalone/releases/download/${t.release}/${encodeURIComponent(e.file)}`}(n,t)}:null}(s),c}class G extends Error{}let B=(...e)=>(globalThis.fetch?._nextOriginalFetch||globalThis.fetch)(...e),K=e=>(e/1048576).toFixed(1);async function X(e,t,{sha256:n,size:r,signal:i,onProgress:o,idleMs:a=3e4,fetchImpl:s=B,from:l="GitHub"}={}){if(!/^[0-9a-f]{64}$/.test(String(n))||!(Number.isInteger(r)&&r>0))throw new G("There is no pinned checksum for this download, so it wasn't started.");let u=`${t}.part`,d=new AbortController,c=i?AbortSignal.any([i,d.signal]):d.signal,p=null,h=()=>{clearTimeout(p),p=setTimeout(()=>d.abort(new G(`The download stopped for ${Math.round(a/1e3)} seconds. Check your connection and try again.`)),a)};h();let f=await E.default.open(u,"w"),g=(0,S.createHash)("sha256"),m=0,y=!1;try{let t=await s(e,{signal:c,redirect:"follow",cache:"no-store",headers:{Accept:"application/octet-stream","User-Agent":"six-degrees-scanner-setup"}});if(!t.ok||!t.body)throw new G(`${l} answered ${t.status} to the download. Try again later.`);let i=Number(t.headers.get("content-length"))||null;if(i&&i!==r)throw new G(`The download isn't the size it should be (${i} bytes, not ${r}), so it was stopped.`);for await(let e of t.body){if(h(),(m+=e.byteLength)>r)throw new G("The download is bigger than it should be, so it was stopped.");g.update(e);let t=0;for(;t<e.byteLength;){let{bytesWritten:n}=await f.write(e,t,e.byteLength-t);t+=n}o?.(m,r)}if(m!==r)throw new G("The download ended early. Try again.");let a=g.digest("hex");if(a!==n)throw new G("The download doesn't match the checksum Six Degrees has for it, so it was deleted and nothing was unpacked.");return y=!0,a}catch(e){if(c.aborted&&c.reason instanceof Error)throw c.reason;throw e}finally{clearTimeout(p),await f.close(),y?await E.default.rename(u,t):await E.default.rm(u,{force:!0})}}async function Y(e,t,n){let o=i.default.join(e,"python");if(!await E.default.lstat(i.default.join(o,"bin","python3")).catch(()=>null))throw new G("The download didn't contain the Python it should have.");let a=i.default.join(t,U);return r.default.existsSync(a)&&await E.default.rename(a,i.default.join(n,"python-before")),await E.default.rename(o,a),W(t)}let V=(0,w.registerScanState)({running:!1,action:null,target:null,recent:[],log:[],startedAt:null,exitCode:null,child:null,abort:null,stopping:!1,stderrTail:[],failure:null});function J(e){for(let t of String(e).split("\n")){let e=t.replace(/\s+$/,"");e&&V.log.push(e)}V.log.length>500&&V.log.splice(0,V.log.length-500)}function Z(){try{let e=(0,r.readFileSync)(i.default.join((0,o.dataDir)(),"bridge-skips.json"),"utf8"),t=JSON.parse(e);return Object.entries(t).map(([e,t])=>({profileUrl:e,name:t?.name??"",reason:t?.reason??"",at:t?.at??null}))}catch{return[]}}function Q(){let e=[],t={};try{let n=(0,a.resolveProfile)({create:!1});if(n){let r=g((0,o.dataDir)(),n.id);for(let[n,i]of(e=Object.keys(r),Object.entries(r)))t[n]={pages:Number(i?.pages)||0,more:!!i?.more,total:Number(i?.total)||null}}}catch{}return{skips:Z(),read:e,lists:t}}let ee={at:0,value:null},et=null,en=0;function er(){en++,ee={at:0,value:null},et=null}let ei=Symbol.for("six-degrees.python-looker"),eo=globalThis[ei]??=function({choose:e=q,now:t=Date.now,retryMs:n=6e4}={}){let r=null,i=null;return async function(o,a={}){if(o&&r?.path===o)return{run:r,own:null,base:null,systemFound:null,download:null};let s=!!o&&i?.path===o&&(!1===i.own.retry||t()-i.at<n),l=await e({...a,bundled:s?"":o});if(s)return{...l,own:i.own};if(o&&l.run?.path===o)r=l.run;else if(o&&l.own){let e="bundled"===l.own.source?{...l.own,retry:!1}:l.own;return i={path:o,at:t(),own:e},{...l,own:e}}return l}}();async function ea(){let e=(0,o.projectRoot)(),n=await eo(process.env.SIX_DEGREES_PYTHON||"",{app:process.env.SIX_DEGREES_APP||"",dataDir:(0,o.dataDir)(),host:(void 0===t&&(t=function({platform:e=process.platform,arch:t=process.arch,sysctlArm64:n=""}={}){return"darwin"===e?`darwin-${(0,T.chipOf)({sysctlArm64:n,processArch:t})}`:"linux"===e&&("x64"===t||"arm64"===t)?`linux-${t}`:null}({sysctlArm64:""})),t)});return{root:e,python:n,chrome:(0,r.existsSync)("/opt/google/chrome/chrome"),signedIn:(0,r.existsSync)(i.default.join((0,o.dataDir)(),"chrome-profile","Default","Cookies"))}}function es(){if(Date.now()-ee.at<4e3&&ee.value)return Promise.resolve(ee.value);if(et)return et;let e=en,t=ea().then(t=>(e===en&&(ee={at:Date.now(),value:t}),t)).finally(()=>{et===t&&(et=null)});return et=t,t}async function el(){let e=await es(),t={first:0,second:0,third:0},n=null;try{(n=(0,a.resolveProfile)({create:!1}))&&(t=(0,a.networkCounts)(n.id))}catch{}let r=0;try{r=(0,_.waitingPhotoCount)((0,b.getDb)())}catch{}let i=e.python;return{ready:!!(e.root&&i.run&&e.chrome),checks:{scriptsFound:!!e.root,python:!!(i.run||i.base),pythonPath:i.run?.path||i.base?.path||null,pythonVersion:i.run?.version||i.base?.version||null,pythonSource:i.run?.source||null,dependencies:!!i.run,ownPython:i.own,installFrom:i.base?{source:i.base.source,version:i.base.version}:null,systemPython:i.systemFound,download:i.download?{version:i.download.version,size:i.download.size,from:"github.com"}:null,chrome:e.chrome,signedIn:e.signedIn},network:t,photosWaiting:r,...eu(),skips:Z(),linkedin:(0,f.linkedinState)((0,o.dataDir)()),paused:function(e){if(!e)return[];try{let t=(0,b.getDb)(),n=t.prepare(`SELECT id, name, tier, profile_url, connected_date, created_at
13
13
  FROM linkedin_connections WHERE user_id = ? AND degree = 1`).all(e),r=new Set(t.prepare(`SELECT DISTINCT source_connection_id AS id FROM linkedin_connections
14
14
  WHERE user_id = ? AND degree = 2 AND source_connection_id IS NOT NULL`).all(e).map(e=>e.id));return y(n,r,g((0,o.dataDir)(),e),m((0,o.dataDir)()))}catch{return[]}}(n?.id)}}function eu(){return{running:V.running,action:V.action,target:V.target,startedAt:V.startedAt,exitCode:V.exitCode,failure:V.running?null:V.failure,progress:V.running?function(e,t){if(!Array.isArray(e)||0===e.length)return null;if("setup"===t){let t=String(e[e.length-1]).match(l);return t&&Number(t[2])?{done:Math.min(Number(t[1]),Number(t[2])),total:Number(t[2]),kind:"download"}:null}if("full"===t||"refresh"===t){for(let t=e.length-1;t>=0;t--){let n=String(e[t]);if(p.test(n))return{kind:"saving"};let r=n.match(d);if(r)return h(Number(r[1]),Number(r[1]));let i=n.match(u);if(i)return h(Number(i[1]),Number(i[2]));let o=n.match(s);if(o)return h(0,Number(o[1]))}return null}if(t&&(t.startsWith("auto-bridge")||"resume-all"===t))for(let t=e.length-1;t>=0;t--){let n=String(e[t]).match(c);if(n){let e=Number(n[1]),t=Number(n[2]);if(!t)return null;return{done:Math.min(e-1,t),total:t,current:e,kind:"batch"}}}return null}(V.log,V.action):null,log:V.log.slice(-120),recent:V.recent,budget:V.running?function(){try{let e=(0,f.linkedinState)((0,o.dataDir)());return{searches:e.searchesToday??0,cap:e.limits?.daily??null,profiles:e.profilesToday??0,profileCap:e.limits?.profiles??null}}catch{return null}}():null}}async function ed(e){let t=new URL(e?.url||"http://127.0.0.1/api/scraper").searchParams;return t.has("job")?Response.json(eu()):t.has("resume")?Response.json({resume:function(e){try{let t=(0,a.resolveProfile)({create:!1});if(!t)return null;let n=(0,b.getDb)(),r=n.prepare(`SELECT id, name, tier, profile_url, connected_date, created_at
15
15
  FROM linkedin_connections WHERE id = ? AND user_id = ? AND degree = 1`).get(String(e??""),t.id);if(!r)return null;let i=n.prepare("SELECT 1 FROM linkedin_connections WHERE user_id = ? AND degree = 2 AND source_connection_id = ? LIMIT 1").get(t.id,r.id),[s]=y([r],new Set(i?[r.id]:[]),g((0,o.dataDir)(),t.id),m((0,o.dataDir)()));return s?{nextPage:s.nextPage,pagesRead:s.pagesRead,legacy:s.legacy}:null}catch{return null}}(t.get("resume"))}):t.has("reach")?Response.json(Q()):t.has("person")?Response.json(function(e){try{let t=(0,a.resolveProfile)({create:!1});if(!t)return{person:null};let n=(0,b.getDb)(),r=n.prepare(`SELECT id, name, tier, power_score, degree, profile_url, unlocked_from_bridge_id, unlocked_from_name
16
- FROM linkedin_connections WHERE id = ? AND user_id = ? AND degree = 1`).get(String(e??""),t.id);if(!r)return{person:null};let i=n.prepare("SELECT 1 FROM linkedin_connections WHERE user_id = ? AND degree = 2 AND source_connection_id = ? LIMIT 1").get(t.id,r.id),o=function(e=[],t=[],n={}){let r=new Set;for(let e of t||[])e?.source_connection_id!=null&&r.add(e.source_connection_id);let i=new Set;for(let e of n?.skips||[])e?.profileUrl&&i.add((0,S.keyFor)({profile_url:e.profileUrl}));let o=new Set;for(let e of n?.read||[])e&&o.add((0,S.keyFor)({profile_url:e}));let a=new Map;for(let[e,t]of Object.entries(n?.lists||{}))e&&t&&a.set((0,S.keyFor)({profile_url:e}),t);let s=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let n=s.get(e);n||s.set(e,n=[]),n.push(t)}return{scanned:r,read:o,hidden:i,reachedFrom:s,lists:a}}([],i?[{source_connection_id:r.id}]:[],Q());return{person:{id:r.id,name:r.name,tier:r.tier,power_score:r.power_score,unlocked_from_bridge_id:r.unlocked_from_bridge_id,unlocked_from_name:r.unlocked_from_name},circle:r?o.scanned.has(r.id)||r.profile_url&&o.read?.has((0,S.keyFor)(r))?"scanned":r.profile_url&&o.hidden.has((0,S.keyFor)(r))?"hidden":"todo":"todo"}}catch{return{person:null}}}(t.get("person"))):Response.json(await el())}let ec={install:{label:"Installing the scanner’s Python packages"},setup:{label:"Setting up the scanner"},login:{flag:"--login",label:"Opening LinkedIn so you can sign in"},full:{flag:"--full",label:"Scanning your whole network"},refresh:{flag:"--refresh",label:"Checking for new connections"},"auto-bridge":{flag:"--auto-bridge",label:"Mapping every bridge in turn"},"auto-bridge-retry":{flag:"--auto-bridge --retry-private",label:"Mapping every bridge, hidden ones included"},bridge:{flag:"--bridge",needsName:!0,byId:!0,label:"Mapping the circle behind"},resume:{flag:"--bridge-url",needsId:!0,label:"Carrying on with",searches:!0},"resume-all":{flag:"--auto-bridge --only-unfinished",label:"Carrying on with every paused list",searches:!0},rescrape:{flag:"--rescrape",needsName:!0,label:"Re-mapping the circle behind"},company:{flag:"--company",needsName:!0,label:"Scanning"},messages:{flag:"--messages",label:"Reading your messages list"},photos:{flag:"--save-photos",label:"Saving profile photos to this computer"}};async function ep(e){let t,s={};try{s=await e.json()}catch{}let l=String(s.action||"");if("cancel"===l)return!function(){if(V.abort){V.stopping=!0,J("Stopping…"),V.abort.abort(new G("Stopped."));return}let e=V.child;if(!e)return;V.stopping=!0,J("Stopping…");let t=e.pid;try{process.kill(-t,"SIGTERM")}catch{try{e.kill("SIGTERM")}catch{}}setTimeout(()=>{if(V.child&&V.child.pid===t){J("Still running — forcing it.");try{process.kill(-t,"SIGKILL")}catch{try{e.kill("SIGKILL")}catch{}}}},2e4)}(),Response.json({ok:!0,cancelled:!0});if("set-limits"===l){let e=(0,f.writeLimits)((0,o.dataDir)(),{daily:s.daily,monthly:s.monthly,profiles:s.profiles});return Response.json({ok:!0,limits:e})}if("lift-cooldown"===l)return(0,f.liftCooldown)((0,o.dataDir)()),Response.json({ok:!0});if(!Object.hasOwn(ec,l))return Response.json({error:`Unknown action '${l}'`},{status:400});let u=ec[l],d=Number.isInteger(s.maxBridges)&&s.maxBridges>0?Math.min(s.maxBridges,500):0,c=Array.isArray(s.tiers)?s.tiers.map(e=>String(e).toUpperCase()).filter(e=>"SABCD".includes(e)&&1===e.length):[],p="score"===s.order?"score":"newest",h=[10,25,50,100].includes(s.maxPages)?s.maxPages:100,g=l.startsWith("auto-bridge")||["bridge","rescrape","resume","resume-all"].includes(l),m=!0===s.deeper&&(l.startsWith("auto-bridge")||"bridge"===l),y=u.needsId||u.byId&&!!s.id,w=null;if(u.needsName&&!y){let e;if(!(w=!(e=String(s.name??"").trim())||e.length>120||/[\u0000-\u001f]/.test(e)?null:e))return Response.json({error:"A name is required for this action."},{status:400})}let _=null,S=null;if(y){try{var R;let e,t=(0,a.resolveProfile)({create:!1});S=t&&(0,b.getDb)().prepare("SELECT name, profile_url FROM linkedin_connections WHERE id = ? AND user_id = ? AND degree = 1").get(String(s.id??""),t.id),_=S?.profile_url&&(R=S.profile_url,(e=String(R??"").trim()).length>400||/[\u0000-\u001f\s]/.test(e)?null:/^https?:\/\/([a-z]{2,3}\.|www\.)?linkedin\.com\/in\/[^/?#]+\/?$/i.test(e)?e:null)}catch{_=null}if(!_)return Response.json({error:"That connection could not be found."},{status:400})}let E="string"==typeof s.id&&/^[\w-]{1,64}$/.test(s.id)?s.id:null,T=w||_?{id:E,name:w||S?.name||null}:null,k=u.searches||l.startsWith("auto-bridge")||["bridge","rescrape","company","full","refresh"].includes(l);if(!["install","setup","login"].includes(l)&&(0,v.pendingImport)((0,o.dataDir)()))return Response.json({error:"An import is waiting to finish. Restart Six Degrees first (Settings → Your data), then scan."},{status:409});let C=(0,f.linkedinState)((0,o.dataDir)()).cooldown;if(k&&C)return Response.json({error:`Scanning is paused until ${new Date(C.until).toLocaleString()} — ${C.reason}.`,cooldown:C},{status:409});if(V.running)return Response.json({error:"Something is already running.",action:V.action},{status:409});let N=(0,o.projectRoot)();if(!N)return Response.json({error:"Could not find scripts/scrape.py next to the app."},{status:500});er();let P=(await es()).python;if(V.running)return Response.json({error:"Something is already running.",action:V.action},{status:409});let A=null;if("install"===l||"setup"===l){let e=function(e,t,{root:n,data:o,say:a}){if(t.run)return{status:409,error:"bundled"===t.run.source?"The scanner is already set up: its Python comes with the app.":"The scanner is already set up."};let s=t.base;if("install"===e&&!s)return t.download?{status:409,error:"This computer has no Python the scanner can use. Use Set up the scanner instead."}:{status:500,error:"No Python 3.10 to 3.14 is installed, or none is on this app’s PATH."};if("setup"===e&&s?.source==="system")return{status:409,error:`This computer already has Python ${s.version}, so nothing needs downloading. Use Install instead.`};if("setup"===e&&!s&&!t.download)return{status:409,error:"There is no Python download for this computer. Install Python 3.10 to 3.14, then reload."};let l=i.default.join(n,"scripts","requirements.txt"),u=e=>(function({base:e,dataDir:t,requirements:n}){let r="downloaded"===e.source,i=L(t);return[{cmd:e.path,args:[...r?j:[],"-m","venv","--clear",H(t)],...r?{env:I}:{},note:"Creating the scanner’s own Python environment"},{cmd:i,args:["-m","pip","install","--disable-pip-version-check","--no-input","-r",n],env:F,note:"Installing Playwright, requests and Pillow"},{cmd:i,args:["-c",function(e=D){return`import sys
16
+ FROM linkedin_connections WHERE id = ? AND user_id = ? AND degree = 1`).get(String(e??""),t.id);if(!r)return{person:null};let i=n.prepare("SELECT 1 FROM linkedin_connections WHERE user_id = ? AND degree = 2 AND source_connection_id = ? LIMIT 1").get(t.id,r.id),o=function(e=[],t=[],n={}){let r=new Set;for(let e of t||[])e?.source_connection_id!=null&&r.add(e.source_connection_id);let i=new Set;for(let e of n?.skips||[])e?.profileUrl&&i.add((0,R.keyFor)({profile_url:e.profileUrl}));let o=new Set;for(let e of n?.read||[])e&&o.add((0,R.keyFor)({profile_url:e}));let a=new Map;for(let[e,t]of Object.entries(n?.lists||{}))e&&t&&a.set((0,R.keyFor)({profile_url:e}),t);let s=new Map;for(let t of e||[]){let e=t?.unlocked_from_bridge_id;if(null==e||1!==t.degree)continue;let n=s.get(e);n||s.set(e,n=[]),n.push(t)}return{scanned:r,read:o,hidden:i,reachedFrom:s,lists:a}}([],i?[{source_connection_id:r.id}]:[],Q());return{person:{id:r.id,name:r.name,tier:r.tier,power_score:r.power_score,unlocked_from_bridge_id:r.unlocked_from_bridge_id,unlocked_from_name:r.unlocked_from_name},circle:r?o.scanned.has(r.id)||r.profile_url&&o.read?.has((0,R.keyFor)(r))?"scanned":r.profile_url&&o.hidden.has((0,R.keyFor)(r))?"hidden":"todo":"todo"}}catch{return{person:null}}}(t.get("person"))):Response.json(await el())}let ec={install:{label:"Installing the scanner’s Python packages"},setup:{label:"Setting up the scanner"},login:{flag:"--login",label:"Opening LinkedIn so you can sign in"},full:{flag:"--full",label:"Scanning your whole network"},refresh:{flag:"--refresh",label:"Checking for new connections"},"auto-bridge":{flag:"--auto-bridge",label:"Mapping every bridge in turn"},"auto-bridge-retry":{flag:"--auto-bridge --retry-private",label:"Mapping every bridge, hidden ones included"},bridge:{flag:"--bridge",needsName:!0,byId:!0,label:"Mapping the circle behind"},resume:{flag:"--bridge-url",needsId:!0,label:"Carrying on with",searches:!0},"resume-all":{flag:"--auto-bridge --only-unfinished",label:"Carrying on with every paused list",searches:!0},rescrape:{flag:"--rescrape",needsName:!0,label:"Re-mapping the circle behind"},company:{flag:"--company",needsName:!0,label:"Scanning"},messages:{flag:"--messages",label:"Reading your messages list"},"messages-full":{flag:"--messages --full-history",label:"Reading your whole messages history"},photos:{flag:"--save-photos",label:"Saving profile photos to this computer"}};async function ep(e){let t,s={};try{s=await e.json()}catch{}let l=String(s.action||"");if("cancel"===l)return!function(){if(V.abort){V.stopping=!0,J("Stopping…"),V.abort.abort(new G("Stopped."));return}let e=V.child;if(!e)return;V.stopping=!0,J("Stopping…");let t=e.pid;try{process.kill(-t,"SIGTERM")}catch{try{e.kill("SIGTERM")}catch{}}setTimeout(()=>{if(V.child&&V.child.pid===t){J("Still running — forcing it.");try{process.kill(-t,"SIGKILL")}catch{try{e.kill("SIGKILL")}catch{}}}},2e4)}(),Response.json({ok:!0,cancelled:!0});if("set-limits"===l){let e=(0,f.writeLimits)((0,o.dataDir)(),{daily:s.daily,monthly:s.monthly,profiles:s.profiles});return Response.json({ok:!0,limits:e})}if("lift-cooldown"===l)return(0,f.liftCooldown)((0,o.dataDir)()),Response.json({ok:!0});if(!Object.hasOwn(ec,l))return Response.json({error:`Unknown action '${l}'`},{status:400});let u=ec[l],d=Number.isInteger(s.maxBridges)&&s.maxBridges>0?Math.min(s.maxBridges,500):0,c=Array.isArray(s.tiers)?s.tiers.map(e=>String(e).toUpperCase()).filter(e=>"SABCD".includes(e)&&1===e.length):[],p="score"===s.order?"score":"newest",h=[10,25,50,100].includes(s.maxPages)?s.maxPages:100,g=l.startsWith("auto-bridge")||["bridge","rescrape","resume","resume-all"].includes(l),m=!0===s.deeper&&(l.startsWith("auto-bridge")||"bridge"===l),y=u.needsId||u.byId&&!!s.id,w=null;if(u.needsName&&!y){let e;if(!(w=!(e=String(s.name??"").trim())||e.length>120||/[\u0000-\u001f]/.test(e)?null:e))return Response.json({error:"A name is required for this action."},{status:400})}let _=null,R=null;if(y){try{var S;let e,t=(0,a.resolveProfile)({create:!1});R=t&&(0,b.getDb)().prepare("SELECT name, profile_url FROM linkedin_connections WHERE id = ? AND user_id = ? AND degree = 1").get(String(s.id??""),t.id),_=R?.profile_url&&(S=R.profile_url,(e=String(S??"").trim()).length>400||/[\u0000-\u001f\s]/.test(e)?null:/^https?:\/\/([a-z]{2,3}\.|www\.)?linkedin\.com\/in\/[^/?#]+\/?$/i.test(e)?e:null)}catch{_=null}if(!_)return Response.json({error:"That connection could not be found."},{status:400})}let E="string"==typeof s.id&&/^[\w-]{1,64}$/.test(s.id)?s.id:null,T=w||_?{id:E,name:w||R?.name||null}:null,k=u.searches||l.startsWith("auto-bridge")||["bridge","rescrape","company","full","refresh"].includes(l);if(!["install","setup","login"].includes(l)&&(0,v.pendingImport)((0,o.dataDir)()))return Response.json({error:"An import is waiting to finish. Restart Six Degrees first (Settings → Your data), then scan."},{status:409});let C=(0,f.linkedinState)((0,o.dataDir)()).cooldown;if(k&&C)return Response.json({error:`Scanning is paused until ${new Date(C.until).toLocaleString()} — ${C.reason}.`,cooldown:C},{status:409});if(V.running)return Response.json({error:"Something is already running.",action:V.action},{status:409});let N=(0,o.projectRoot)();if(!N)return Response.json({error:"Could not find scripts/scrape.py next to the app."},{status:500});er();let P=(await es()).python;if(V.running)return Response.json({error:"Something is already running.",action:V.action},{status:409});let A=null;if("install"===l||"setup"===l){let e=function(e,t,{root:n,data:o,say:a}){if(t.run)return{status:409,error:"bundled"===t.run.source?"The scanner is already set up: its Python comes with the app.":"The scanner is already set up."};let s=t.base;if("install"===e&&!s)return t.download?{status:409,error:"This computer has no Python the scanner can use. Use Set up the scanner instead."}:{status:500,error:"No Python 3.10 to 3.14 is installed, or none is on this app’s PATH."};if("setup"===e&&s?.source==="system")return{status:409,error:`This computer already has Python ${s.version}, so nothing needs downloading. Use Install instead.`};if("setup"===e&&!s&&!t.download)return{status:409,error:"There is no Python download for this computer. Install Python 3.10 to 3.14, then reload."};let l=i.default.join(n,"scripts","requirements.txt"),u=e=>(function({base:e,dataDir:t,requirements:n}){let r="downloaded"===e.source,i=L(t);return[{cmd:e.path,args:[...r?j:[],"-m","venv","--clear",H(t)],...r?{env:I}:{},note:"Creating the scanner’s own Python environment"},{cmd:i,args:["-m","pip","install","--disable-pip-version-check","--no-input","-r",n],env:F,note:"Installing Playwright, requests and Pillow"},{cmd:i,args:["-c",function(e=D){return`import sys
17
17
  try:
18
18
  ${e}
19
19
  except Exception as e:
20
20
  first = (str(e).splitlines() or [""])[0][:200]
21
21
  sys.stderr.write("pip said it installed them, but the scanner's environment can't load them (%s: %s). A pip setting may send packages somewhere else: pip config list shows yours.\\n" % (type(e).__name__, first))
22
22
  sys.exit(1)
23
- print("The scanner's packages load in its environment.")`}()],note:"Checking that they load"}]})({base:e,dataDir:o,requirements:l});if(s)return{plan:u(s),cleanup:null};let d=t.download;(0,r.mkdirSync)(o,{recursive:!0}),function(e,{now:t=Date.now(),maxAgeMs:n=36e5}={}){let o=[];try{o=r.default.readdirSync(e)}catch{return}for(let a of o){if(!a.startsWith(x.SETUP_WORK_PREFIX))continue;let o=i.default.join(e,a);try{let e=r.default.lstatSync(o);e.isDirectory()&&t-e.mtimeMs>n&&r.default.rmSync(o,{recursive:!0,force:!0})}catch{}}}(o);let c=(0,r.mkdtempSync)(i.default.join(o,x.SETUP_WORK_PREFIX)),p=i.default.join(c,d.file),h=-1;return{plan:[{note:`Downloading Python ${d.version} from GitHub (${K(d.size)} MB)`,run:async({signal:e})=>{await X(d.url,p,{sha256:d.sha256,size:d.size,signal:e,onProgress:(e,t)=>{let n=Math.floor(e/t*10);n>h&&(h=n,a(`Downloading Python ${d.version}: ${K(e)} of ${K(t)} MB`))}}),a("Its checksum matches the one Six Degrees has for it.")}},{cmd:"tar",args:["-xzf",p,"-C",c],note:"Unpacking it"},{run:()=>Y(c,o,c)},...u({path:W(o),source:"downloaded"})],cleanup:()=>(0,r.rmSync)(c,{recursive:!0,force:!0})}}(l,P,{root:N,data:(0,o.dataDir)(),say:J});if(e.error)return Response.json({error:e.error},{status:e.status});({plan:t,cleanup:A}=e)}else{if(!P.run)return Response.json({error:"The scanner’s packages are not installed yet. Do step 1 first."},{status:409});t=[function(e,t,n=[]){let r=e?.source==="bundled"||e?.source==="custom";return{cmd:e.path,args:[...r?j:[],t,...n],env:r?I:$}}(P.run,i.default.join(N,"scripts","scrape.py"),[...w?[`${u.flag}=${w}`]:_?[`--bridge-url=${_}`]:u.flag.split(" "),..._&&"bridge"===l&&!m?["--from-start"]:[],...d&&(l.startsWith("auto-bridge")||"resume-all"===l)?[`--max-bridges=${d}`]:[],...c.length&&l.startsWith("auto-bridge")?[`--tiers=${c.join(",")}`]:[],...l.startsWith("auto-bridge")?[`--order=${p}`]:[],...!0===s.experimental&&l.startsWith("auto-bridge")?["--experimental"]:[],...g?[`--max-pages=${l.startsWith("resume")?100:h}`]:[],...m?["--deeper"]:[],...!0===s.headless&&"login"!==l?["--headless"]:[]])]}let O=e.headers.get("host")||"127.0.0.1:3000",M=O.includes(":")?O.split(":").pop():"80";V.running=!0,V.stopping=!1,V.action=l,V.target=T,V.exitCode=null,V.startedAt=Date.now(),V.log=[u.label+(T?.name?` ${T.name}…`:"…")],V.stderrTail=[],V.failure=null,er();let U="";try{U=(0,a.resolveProfile)().id}catch{}let z={...process.env,SIX_DEGREES_USER_ID:U,APP_URL:`http://127.0.0.1:${M}`,PYTHONUNBUFFERED:"1",SIX_DEGREES_ROOT:N,SIX_DEGREES_FROM_APP:"1"};function q(e){if(0!==e&&!V.stopping&&V.stderrTail.length){let e=new Set(V.log),t=V.stderrTail.filter(t=>!e.has(t));t.length&&J(t.join("\n"));let n=V.stderrTail.filter(e=>!/Warning|warnings\.warn\(/.test(e)).slice(-6);V.failure=n.length?n:null}if(J(V.stopping?"Stopped.":0===e?"Finished.":`Stopped (exit ${e}).`),V.stopping=!1,V.running=!1,V.child=null,V.abort=null,V.exitCode=e,V.recent=[{action:V.action,target:V.target,startedAt:V.startedAt,exitCode:e,failure:V.failure},...V.recent].slice(0,5),A)try{A()}catch{}er()}return!function e(r){let i;if(r>=t.length)return q(0);let o=t[r];if(o.note&&J(o.note+"…"),o.run){let t=new AbortController;V.abort=t,Promise.resolve().then(()=>o.run({signal:t.signal})).then(()=>{if(V.abort=null,V.stopping)return q(0);e(r+1)},e=>{if(V.abort=null,V.stopping)return q(0);V.stderrTail.push(e instanceof G?e.message:`Could not finish: ${e.message}`),q(1)});return}try{i=(0,n.spawn)(o.cmd,o.args,{cwd:N,env:o.env?o.env(z):z,detached:!0})}catch(e){return J(`Could not start: ${e.message}`),q(-1)}V.child=i,i.stdout.on("data",e=>J(e.toString())),i.stderr.on("data",e=>{let t=e.toString();for(let e of t.split("\n")){let t=e.replace(/\s+$/,"");t&&V.stderrTail.push(t)}V.stderrTail.length>20&&V.stderrTail.splice(0,V.stderrTail.length-20),/error|Error|Traceback|No module|failed|externally-managed/.test(t)&&J(t)}),i.on("error",e=>{J(`Could not start: ${e.message}`),q(-1)}),i.on("close",t=>V.stopping?q(t??0):0===t||o.tolerant?void e(r+1):q(t))}(0),Response.json({ok:!0,action:l,startedAt:V.startedAt})}e.s(["GET",0,ed,"POST",0,ep],81638)},14974,e=>{"use strict";var t=e.i(47909),n=e.i(74017),r=e.i(96250),i=e.i(59756),o=e.i(61916),a=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),f=e.i(26937),g=e.i(10372),m=e.i(93695);e.i(52474);var y=e.i(220);let b=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/scraper/route",pathname:"/api/scraper",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/scraper/route.js",nextConfigOutput:"standalone",userland:()=>e.r(81638),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:v,serverHooks:_}=b;async function S(e,t,r){r.requestMeta&&(0,i.setRequestMeta)(e,r.requestMeta),b.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/scraper/route";w=w.replace(/\/index$/,"")||"/";let v=await b.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:_,deploymentId:S,params:R,nextConfig:E,parsedUrl:T,isDraftMode:x,prerenderManifest:k,routerServerContext:C,isOnDemandRevalidate:N,revalidateOnlyGenerated:P,resolvedPathname:D,clientReferenceManifest:A,serverActionsManifest:O}=v,j=(0,s.normalizeAppPath)(w),I=!!(k.dynamicRoutes[j]||k.routes[D]),$=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,T,!1):t.end("This page could not be found"),null);if(I&&!x){let e=!!k.routes[D],t=k.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await $();throw new m.NoFallbackError}}let M=null;!I||b.isDev||x||(M="/index"===(M=D)?"/":M);let F=!0===b.isDev||!I,H=I&&!F;O&&A&&(0,a.setManifestsSingleton)({page:w,clientReferenceManifest:A,serverActionsManifest:O});let L=e.method||"GET",U=(0,o.getTracer)(),W=U.getActiveScopeSpan(),z=!!(null==C?void 0:C.isWrappedByNextServer),q=!!(0,i.getRequestMeta)(e,"minimalMode"),G=(0,i.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,E,k,q);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let B={params:R,previewProps:k.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts,useCacheTimeout:E.experimental.useCacheTimeout},cacheComponents:!!E.cacheComponents,validationLevel:E.experimental.instantInsights.validationLevel,supportsDynamicResponse:F,incrementalCache:G,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:E.cacheLife,staticPageGenerationTimeout:E.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,i)=>b.onRequestError(e,t,r,i,C)},sharedContext:{buildId:_,deploymentId:S}},K=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),Y=u.NextRequestAdapter.fromNodeNextRequest(K,(0,u.signalFromNodeResponse)(t)),V=async({previousCacheEntry:n})=>{try{if(!q&&N&&P&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await b.handle(Y,B);e.fetchMetrics=B.renderOpts.fetchMetrics;let o=B.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let a=B.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(K,X,i,o),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);a&&(t[g.NEXT_CACHE_TAGS_HEADER]=a),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,r=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=g.INFINITE_CACHE?!1!==n&&n>0?E.expireTime:void 0:B.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==n?void 0:n.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:N})},!1,C),t}},J=async(i,a)=>{try{var s,l;let i=await b.handleResponse({req:e,nextConfig:E,cacheKey:M,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:P,responseGenerator:V,waitUntil:r.waitUntil,isMinimalMode:q});if(!I)return;if((null==i||null==(s=i.value)?void 0:s.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(l=i.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});q||t.setHeader("x-nextjs-cache",N?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(i.value.headers);q&&I||o.delete(g.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,f.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(K,X,new Response(i.value.body,{headers:o,status:i.value.status||200}));return}catch(t){if(t instanceof m.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:N})},!1,C),I)throw t;await (0,p.sendResponse)(K,X,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:o.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let n=U.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route")||j,s=`${L} ${r}`;i.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),i.updateName(s),a&&a!==i&&(a.setAttribute("http.route",r),a.updateName(s))})()}};if(z&&W)await J(W,void 0);else{let t=U.getActiveScopeSpan();await U.withPropagatedContext(e.headers,()=>U.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:o.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>J(e,t)),void 0,!z)}}e.s(["handler",0,S,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:v})},"routeModule",0,b,"serverHooks",0,_,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,v])}];
23
+ print("The scanner's packages load in its environment.")`}()],note:"Checking that they load"}]})({base:e,dataDir:o,requirements:l});if(s)return{plan:u(s),cleanup:null};let d=t.download;(0,r.mkdirSync)(o,{recursive:!0}),function(e,{now:t=Date.now(),maxAgeMs:n=36e5}={}){let o=[];try{o=r.default.readdirSync(e)}catch{return}for(let a of o){if(!a.startsWith(x.SETUP_WORK_PREFIX))continue;let o=i.default.join(e,a);try{let e=r.default.lstatSync(o);e.isDirectory()&&t-e.mtimeMs>n&&r.default.rmSync(o,{recursive:!0,force:!0})}catch{}}}(o);let c=(0,r.mkdtempSync)(i.default.join(o,x.SETUP_WORK_PREFIX)),p=i.default.join(c,d.file),h=-1;return{plan:[{note:`Downloading Python ${d.version} from GitHub (${K(d.size)} MB)`,run:async({signal:e})=>{await X(d.url,p,{sha256:d.sha256,size:d.size,signal:e,onProgress:(e,t)=>{let n=Math.floor(e/t*10);n>h&&(h=n,a(`Downloading Python ${d.version}: ${K(e)} of ${K(t)} MB`))}}),a("Its checksum matches the one Six Degrees has for it.")}},{cmd:"tar",args:["-xzf",p,"-C",c],note:"Unpacking it"},{run:()=>Y(c,o,c)},...u({path:W(o),source:"downloaded"})],cleanup:()=>(0,r.rmSync)(c,{recursive:!0,force:!0})}}(l,P,{root:N,data:(0,o.dataDir)(),say:J});if(e.error)return Response.json({error:e.error},{status:e.status});({plan:t,cleanup:A}=e)}else{if(!P.run)return Response.json({error:"The scanner’s packages are not installed yet. Do step 1 first."},{status:409});t=[function(e,t,n=[]){let r=e?.source==="bundled"||e?.source==="custom";return{cmd:e.path,args:[...r?j:[],t,...n],env:r?I:$}}(P.run,i.default.join(N,"scripts","scrape.py"),[...w?[`${u.flag}=${w}`]:_?[`--bridge-url=${_}`]:u.flag.split(" "),..._&&"bridge"===l&&!m?["--from-start"]:[],...d&&(l.startsWith("auto-bridge")||"resume-all"===l)?[`--max-bridges=${d}`]:[],...c.length&&l.startsWith("auto-bridge")?[`--tiers=${c.join(",")}`]:[],...l.startsWith("auto-bridge")?[`--order=${p}`]:[],...!0===s.experimental&&l.startsWith("auto-bridge")?["--experimental"]:[],...g?[`--max-pages=${l.startsWith("resume")?100:h}`]:[],...m?["--deeper"]:[],...!0===s.headless&&"login"!==l?["--headless"]:[]])]}let O=e.headers.get("host")||"127.0.0.1:3000",M=O.includes(":")?O.split(":").pop():"80";V.running=!0,V.stopping=!1,V.action=l,V.target=T,V.exitCode=null,V.startedAt=Date.now(),V.log=[u.label+(T?.name?` ${T.name}…`:"…")],V.stderrTail=[],V.failure=null,er();let U="";try{U=(0,a.resolveProfile)().id}catch{}let z={...process.env,SIX_DEGREES_USER_ID:U,APP_URL:`http://127.0.0.1:${M}`,PYTHONUNBUFFERED:"1",SIX_DEGREES_ROOT:N,SIX_DEGREES_FROM_APP:"1"};function q(e){if(0!==e&&!V.stopping&&V.stderrTail.length){let e=new Set(V.log),t=V.stderrTail.filter(t=>!e.has(t));t.length&&J(t.join("\n"));let n=V.stderrTail.filter(e=>!/Warning|warnings\.warn\(/.test(e)).slice(-6);V.failure=n.length?n:null}if(J(V.stopping?"Stopped.":0===e?"Finished.":`Stopped (exit ${e}).`),V.stopping=!1,V.running=!1,V.child=null,V.abort=null,V.exitCode=e,V.recent=[{action:V.action,target:V.target,startedAt:V.startedAt,exitCode:e,failure:V.failure},...V.recent].slice(0,5),A)try{A()}catch{}er()}return!function e(r){let i;if(r>=t.length)return q(0);let o=t[r];if(o.note&&J(o.note+"…"),o.run){let t=new AbortController;V.abort=t,Promise.resolve().then(()=>o.run({signal:t.signal})).then(()=>{if(V.abort=null,V.stopping)return q(0);e(r+1)},e=>{if(V.abort=null,V.stopping)return q(0);V.stderrTail.push(e instanceof G?e.message:`Could not finish: ${e.message}`),q(1)});return}try{i=(0,n.spawn)(o.cmd,o.args,{cwd:N,env:o.env?o.env(z):z,detached:!0})}catch(e){return J(`Could not start: ${e.message}`),q(-1)}V.child=i,i.stdout.on("data",e=>J(e.toString())),i.stderr.on("data",e=>{let t=e.toString();for(let e of t.split("\n")){let t=e.replace(/\s+$/,"");t&&V.stderrTail.push(t)}V.stderrTail.length>20&&V.stderrTail.splice(0,V.stderrTail.length-20),/error|Error|Traceback|No module|failed|externally-managed/.test(t)&&J(t)}),i.on("error",e=>{J(`Could not start: ${e.message}`),q(-1)}),i.on("close",t=>V.stopping?q(t??0):0===t||o.tolerant?void e(r+1):q(t))}(0),Response.json({ok:!0,action:l,startedAt:V.startedAt})}e.s(["GET",0,ed,"POST",0,ep],81638)},14974,e=>{"use strict";var t=e.i(47909),n=e.i(74017),r=e.i(96250),i=e.i(59756),o=e.i(61916),a=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),f=e.i(26937),g=e.i(10372),m=e.i(93695);e.i(52474);var y=e.i(220);let b=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/scraper/route",pathname:"/api/scraper",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/scraper/route.js",nextConfigOutput:"standalone",userland:()=>e.r(81638),...{}}),{workAsyncStorage:w,workUnitAsyncStorage:v,serverHooks:_}=b;async function R(e,t,r){r.requestMeta&&(0,i.setRequestMeta)(e,r.requestMeta),b.isDev&&(0,i.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let w="/api/scraper/route";w=w.replace(/\/index$/,"")||"/";let v=await b.prepare(e,t,{srcPage:w,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:_,deploymentId:R,params:S,nextConfig:E,parsedUrl:T,isDraftMode:x,prerenderManifest:k,routerServerContext:C,isOnDemandRevalidate:N,revalidateOnlyGenerated:P,resolvedPathname:D,clientReferenceManifest:A,serverActionsManifest:O}=v,j=(0,s.normalizeAppPath)(w),I=!!(k.dynamicRoutes[j]||k.routes[D]),$=async()=>((null==C?void 0:C.render404)?await C.render404(e,t,T,!1):t.end("This page could not be found"),null);if(I&&!x){let e=!!k.routes[D],t=k.dynamicRoutes[j];if(t&&!1===t.fallback&&!e){if(E.adapterPath)return await $();throw new m.NoFallbackError}}let M=null;!I||b.isDev||x||(M="/index"===(M=D)?"/":M);let F=!0===b.isDev||!I,H=I&&!F;O&&A&&(0,a.setManifestsSingleton)({page:w,clientReferenceManifest:A,serverActionsManifest:O});let L=e.method||"GET",U=(0,o.getTracer)(),W=U.getActiveScopeSpan(),z=!!(null==C?void 0:C.isWrappedByNextServer),q=!!(0,i.getRequestMeta)(e,"minimalMode"),G=(0,i.getRequestMeta)(e,"incrementalCache")||await b.getIncrementalCache(e,E,k,q);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let B={params:S,previewProps:k.preview,renderOpts:{experimental:{authInterrupts:!!E.experimental.authInterrupts,useCacheTimeout:E.experimental.useCacheTimeout},cacheComponents:!!E.cacheComponents,validationLevel:E.experimental.instantInsights.validationLevel,supportsDynamicResponse:F,incrementalCache:G,hmrRefreshHash:(0,i.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:E.cacheLife,staticPageGenerationTimeout:E.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,i)=>b.onRequestError(e,t,r,i,C)},sharedContext:{buildId:_,deploymentId:R}},K=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),Y=u.NextRequestAdapter.fromNodeNextRequest(K,(0,u.signalFromNodeResponse)(t)),V=async({previousCacheEntry:n})=>{try{if(!q&&N&&P&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let i=await b.handle(Y,B);e.fetchMetrics=B.renderOpts.fetchMetrics;let o=B.renderOpts.pendingWaitUntil;o&&r.waitUntil&&(r.waitUntil(o),o=void 0);let a=B.renderOpts.collectedTags;if(!I)return await (0,p.sendResponse)(K,X,i,o),null;{let e=await i.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(i.headers);a&&(t[g.NEXT_CACHE_TAGS_HEADER]=a),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,r=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=g.INFINITE_CACHE?!1!==n&&n>0?E.expireTime:void 0:B.renderOpts.collectedExpire;return{value:{kind:y.CachedRouteKind.APP_ROUTE,status:i.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==n?void 0:n.isStale)&&await b.onRequestError(e,t,{routerKind:"App Router",routePath:w,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:N})},!1,C),t}},J=async(i,a)=>{try{var s,l;let i=await b.handleResponse({req:e,nextConfig:E,cacheKey:M,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:N,revalidateOnlyGenerated:P,responseGenerator:V,waitUntil:r.waitUntil,isMinimalMode:q});if(!I)return;if((null==i||null==(s=i.value)?void 0:s.kind)!==y.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==i||null==(l=i.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});q||t.setHeader("x-nextjs-cache",N?"REVALIDATED":i.isMiss?"MISS":i.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(i.value.headers);q&&I||o.delete(g.NEXT_CACHE_TAGS_HEADER),!i.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,f.getCacheControlHeader)(i.cacheControl)),await (0,p.sendResponse)(K,X,new Response(i.value.body,{headers:o,status:i.value.status||200}));return}catch(t){if(t instanceof m.NoFallbackError||await b.onRequestError(e,t,{routerKind:"App Router",routePath:j,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:H,isOnDemandRevalidate:N})},!1,C),I)throw t;await (0,p.sendResponse)(K,X,new Response(null,{status:500}));return}finally{(()=>{if(!i)return;let e=t.statusCode;i.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(i.setStatus({code:o.SpanStatusCode.ERROR}),i.setAttribute("error.type",e.toString()));let n=U.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route")||j,s=`${L} ${r}`;i.setAttributes({"next.route":r,"http.route":r,"next.span_name":s}),i.updateName(s),a&&a!==i&&(a.setAttribute("http.route",r),a.updateName(s))})()}};if(z&&W)await J(W,void 0);else{let t=U.getActiveScopeSpan();await U.withPropagatedContext(e.headers,()=>U.trace(d.BaseServerSpan.handleRequest,{spanName:`${L} ${w}`,kind:o.SpanKind.SERVER,attributes:{"http.method":L,"http.target":e.url}},e=>J(e,t)),void 0,!z)}}e.s(["handler",0,R,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:w,workUnitAsyncStorage:v})},"routeModule",0,b,"serverHooks",0,_,"workAsyncStorage",0,w,"workUnitAsyncStorage",0,v])}];
24
24
 
25
25
  //# sourceMappingURL=_1_fynia._.js.map
@@ -1,4 +1,4 @@
1
- module.exports=[24214,(e,t,n)=>{t.exports={name:"six-degrees",version:"0.4.9",description:"Map your professional network as a galaxy — leverage tiers, bridges into new circles, and the shortest path to anyone. Runs locally on your own data.",license:"MIT",author:"Blake Burford",repository:{type:"git",url:"git+https://github.com/blakeb056/six-degrees.git"},bugs:{url:"https://github.com/blakeb056/six-degrees/issues"},homepage:"https://sixdegreesapp.com/",keywords:["linkedin","network","graph","visualization","d3","local-first","networking","career"],engines:{node:">=22.13"},os:["darwin","linux"],private:!1,bin:{"six-degrees":"bin/six-degrees.mjs"},files:["bin/",".next/standalone/",".next/static/","public/","db/","lib/","scripts/scrape.py","scripts/image_store.py","scripts/requirements.txt","README.md","LICENSE","CHANGELOG.md","SECURITY.md","scripts/check-node.mjs","scripts/audit-avatars.mjs","scripts/check-stale-server.mjs","scripts/update.mjs"],scripts:{dev:"NEXT_TELEMETRY_DISABLED=1 SIX_DEGREES_BIND=127.0.0.1 next dev -H 127.0.0.1",predev:"node scripts/check-node.mjs && node scripts/check-stale-server.mjs",fresh:"node scripts/check-node.mjs && node scripts/sandbox.mjs",build:"NEXT_TELEMETRY_DISABLED=1 next build && node scripts/prepare-standalone.mjs",prebuild:"node scripts/check-node.mjs",start:"NEXT_TELEMETRY_DISABLED=1 SIX_DEGREES_BIND=127.0.0.1 next start -H 127.0.0.1",lint:"eslint",test:"node --test tests/*.test.mjs","gen:demo":"node scripts/gen-synthetic.mjs",prepack:"npm run build","start:packaged":"node bin/six-degrees.mjs",scrape:"python3 scripts/scrape.py","scrape:login":"python3 scripts/scrape.py --login","scrape:server":"python3 scripts/scrape.py --server","setup:python":"python3 -m pip install -r scripts/requirements.txt","scrape:full":"python3 scripts/scrape.py --full","scrape:refresh":"python3 scripts/scrape.py --refresh","audit:avatars":"node scripts/audit-avatars.mjs","build:app":"node scripts/build-app.mjs","build:desktop":"node scripts/build-app.mjs --shell=electron",desktop:"electron desktop",update:"node scripts/update.mjs"},devDependencies:{"@electron/packager":"20.3.0",d3:"^7.9.0",electron:"44.4.5",eslint:"^9","eslint-config-next":"16.3.6",next:"16.3.6",react:"19.2.4","react-dom":"19.2.4"}}},34091,e=>{"use strict";var t=e.i(74533),n=e.i(2157),r=e.i(10960),a=e.i(60526),s=e.i(50227),i=e.i(12506),o=e.i(98199),l=e.i(66680),c=e.i(12714),u=e.i(1348);let d="/usr/bin/hdiutil",p="six-degrees-update",h=new Set(["checking","downloading","verifying","preparing","restarting"]),f=new Set(["checking","downloading","verifying","preparing"]);class m extends Error{constructor(e,t=null){super(e),this.code=t}}let g="cancelled";function w({home:e=a.default.homedir(),tmp:t=a.default.tmpdir()}={}){let n=s.default.join(e,"Library","Caches","Six Degrees");return{cacheDir:n,statusFile:s.default.join(n,"last-update.json"),confirmFile:s.default.join(n,"update-confirmed.json"),logFile:s.default.join(t,"six-degrees-update.log")}}function y(e){try{let t=JSON.parse(n.default.readFileSync(e,"utf8"));return t&&"object"==typeof t&&!Array.isArray(t)?t:null}catch{return null}}function b(e,t){n.default.mkdirSync(s.default.dirname(e),{recursive:!0});let r=`${e}.${process.pid}.tmp`;n.default.writeFileSync(r,`${JSON.stringify(t)}
1
+ module.exports=[24214,(e,t,n)=>{t.exports={name:"six-degrees",version:"0.4.11",description:"Map your professional network as a galaxy — leverage tiers, bridges into new circles, and the shortest path to anyone. Runs locally on your own data.",license:"MIT",author:"Blake Burford",repository:{type:"git",url:"git+https://github.com/blakeb056/six-degrees.git"},bugs:{url:"https://github.com/blakeb056/six-degrees/issues"},homepage:"https://sixdegreesapp.com/",keywords:["linkedin","network","graph","visualization","d3","local-first","networking","career"],engines:{node:">=22.13"},os:["darwin","linux"],private:!1,bin:{"six-degrees":"bin/six-degrees.mjs"},files:["bin/",".next/standalone/",".next/static/","public/","db/","lib/","scripts/scrape.py","scripts/image_store.py","scripts/requirements.txt","README.md","LICENSE","CHANGELOG.md","SECURITY.md","scripts/check-node.mjs","scripts/audit-avatars.mjs","scripts/check-stale-server.mjs","scripts/update.mjs"],scripts:{dev:"NEXT_TELEMETRY_DISABLED=1 SIX_DEGREES_BIND=127.0.0.1 next dev -H 127.0.0.1",predev:"node scripts/check-node.mjs && node scripts/check-stale-server.mjs",fresh:"node scripts/check-node.mjs && node scripts/sandbox.mjs",build:"NEXT_TELEMETRY_DISABLED=1 next build && node scripts/prepare-standalone.mjs",prebuild:"node scripts/check-node.mjs",start:"NEXT_TELEMETRY_DISABLED=1 SIX_DEGREES_BIND=127.0.0.1 next start -H 127.0.0.1",lint:"eslint",test:"node --test tests/*.test.mjs","gen:demo":"node scripts/gen-synthetic.mjs",prepack:"npm run build","start:packaged":"node bin/six-degrees.mjs",scrape:"python3 scripts/scrape.py","scrape:login":"python3 scripts/scrape.py --login","scrape:server":"python3 scripts/scrape.py --server","setup:python":"python3 -m pip install -r scripts/requirements.txt","scrape:full":"python3 scripts/scrape.py --full","scrape:refresh":"python3 scripts/scrape.py --refresh","audit:avatars":"node scripts/audit-avatars.mjs","build:app":"node scripts/build-app.mjs","build:desktop":"node scripts/build-app.mjs --shell=electron",desktop:"electron desktop",update:"node scripts/update.mjs"},devDependencies:{"@electron/packager":"20.3.0",d3:"^7.9.0",electron:"44.4.5",eslint:"^9","eslint-config-next":"16.3.6",next:"16.3.6",react:"19.2.4","react-dom":"19.2.4"}}},34091,e=>{"use strict";var t=e.i(74533),n=e.i(2157),r=e.i(10960),a=e.i(60526),s=e.i(50227),i=e.i(12506),o=e.i(98199),l=e.i(66680),c=e.i(12714),u=e.i(1348);let d="/usr/bin/hdiutil",p="six-degrees-update",h=new Set(["checking","downloading","verifying","preparing","restarting"]),f=new Set(["checking","downloading","verifying","preparing"]);class m extends Error{constructor(e,t=null){super(e),this.code=t}}let g="cancelled";function w({home:e=a.default.homedir(),tmp:t=a.default.tmpdir()}={}){let n=s.default.join(e,"Library","Caches","Six Degrees");return{cacheDir:n,statusFile:s.default.join(n,"last-update.json"),confirmFile:s.default.join(n,"update-confirmed.json"),logFile:s.default.join(t,"six-degrees-update.log")}}function y(e){try{let t=JSON.parse(n.default.readFileSync(e,"utf8"));return t&&"object"==typeof t&&!Array.isArray(t)?t:null}catch{return null}}function b(e,t){n.default.mkdirSync(s.default.dirname(e),{recursive:!0});let r=`${e}.${process.pid}.tmp`;n.default.writeFileSync(r,`${JSON.stringify(t)}
2
2
  `),n.default.renameSync(r,e)}function v(){let e=(e,n)=>{try{return(0,t.execFileSync)(e,n,{timeout:5e3,stdio:["ignore","pipe","ignore"]}).toString().trim()}catch{return""}};return{chip:(0,o.chipOf)({sysctlArm64:e("/usr/sbin/sysctl",["-n","hw.optional.arm64"]),processArch:process.arch}),macosVersion:e("/usr/bin/sw_vers",["-productVersion"])}}let S=Symbol.for("six-degrees.update-job");function R(){return globalThis[S]||(globalThis[S]={job:null}),globalThis[S]}function j(e){if(!e)return null;let{id:t,phase:n,version:r,notes:a,received:s,total:i,error:o,code:l,startedAt:c,endedAt:u}=e;return{id:t,phase:n,version:r,notes:a,received:s,total:i,error:o,code:l,startedAt:c,endedAt:u}}function x(){return j(R().job)}function T(e,n,{signal:r,timeoutMs:a=12e4}={}){return new Promise((s,i)=>{(0,t.execFile)(e,n,{signal:r,timeout:a,maxBuffer:8388608},(e,t,n)=>{if(e){e.detail=String(n||"").trim().split("\n").filter(Boolean).slice(-2).join(" ")||e.message,i(e);return}s(String(t))})})}let E=e=>Math.max(1,Math.round(e/1048576));function k(e,t,r){let a;try{let t=n.default.statfsSync(e);a=t.bavail*t.bsize}catch{return}if(a<t)throw new m(`There isn't enough free space ${r}: the update needs about ${E(t)} MB, and ${E(a)} MB is free.`)}async function A(e,t,n,r,a){return t.fetchImpl(e,{headers:{Accept:a,"User-Agent":p},signal:AbortSignal.any([n,AbortSignal.timeout(r)]),cache:"no-store",redirect:"follow"})}async function C(e,t,{job:n,c:r,signal:a,expectedSize:s}){let i=new AbortController,o=AbortSignal.any([a,i.signal]),u=null,d=()=>{clearTimeout(u),u=setTimeout(()=>i.abort(new m(`The download stopped for ${Math.round(r.idleMs/1e3)} seconds. Check your connection and try again.`)),r.idleMs)};d();let h=await c.default.open(t,"w"),f=(0,l.createHash)("sha256"),g=0;try{let t=await r.fetchImpl(e,{headers:{Accept:"application/octet-stream","User-Agent":p},signal:o,cache:"no-store",redirect:"follow"});if(!t.ok||!t.body)throw new m(`GitHub answered ${t.status} to the download. Try again later.`);let a=Number(t.headers.get("content-length"))||null;if(s&&a&&a!==s)throw new m("The download is not the size GitHub listed for it, so it was stopped.");let i=a||s||null;n.total=i;let l=i||r.maxBytes;for await(let e of t.body){if(d(),(g+=e.byteLength)>l)throw new m("The download is bigger than GitHub said it would be, so it was stopped.");f.update(e);let t=0;for(;t<e.byteLength;){let{bytesWritten:n}=await h.write(e,t,e.byteLength-t);t+=n}n.received=g}if(i&&g!==i)throw new m("The download ended early. Try again.");return f.digest("hex")}catch(e){if(o.aborted&&o.reason instanceof Error)throw o.reason;throw e}finally{clearTimeout(u),await h.close()}}async function $(e,t,n){let r;await c.default.mkdir(t.point,{recursive:!0});try{r=await T(d,["attach",e,"-nobrowse","-readonly","-noautoopen","-mountpoint",t.point,"-plist"],{signal:n,timeoutMs:18e4})}catch(e){if(n.aborted)throw e;throw new m(`The disk image wouldn't open (${e.detail}).`)}t.device=[...r.matchAll(/<key>dev-entry<\/key>\s*<string>([^<]+)<\/string>/g)].map(e=>e[1]).find(e=>/^\/dev\/disk\d+$/.test(e))||null}function D(e){try{return n.default.statSync(e).dev!==n.default.statSync(s.default.dirname(e)).dev}catch{return!1}}async function M({point:e,device:t},r){let a=[[],[],["-force"],["-force"],["-force"]],s=null;for(let i=0;i<a.length;i++){let o=D(e);if(!o&&(!t||!n.default.existsSync(t)))return;try{await T(d,["detach",o?e:t,...a[i]],{timeoutMs:6e4});return}catch(e){s=e,await r(1e3*(i+1))}}if(D(e)||t&&n.default.existsSync(t))throw s}async function N(e){for(let t of(await c.default.readdir(e,{recursive:!0,withFileTypes:!0}))){if(!t.isSymbolicLink())continue;let n=s.default.join(t.parentPath??t.path,t.name),r=await c.default.readlink(n),a=s.default.resolve(s.default.dirname(n),r);if(s.default.isAbsolute(r)||a!==e&&!a.startsWith(e+s.default.sep))return`${s.default.relative(e,n)} → ${r}`}return null}async function _(e,t=4096){let n=await c.default.open(e,"r");try{let e=Buffer.alloc(t),{bytesRead:r}=await n.read(e,0,t,0);return e.subarray(0,r)}finally{await n.close()}}async function B(e,{plan:t,c:n,signal:r,where:a}){let i=await c.default.lstat(e).catch(()=>null);if(!i||!i.isDirectory())throw new m(`The disk image doesn't contain ${o.APP_BUNDLE_NAME}.`);try{await T("/usr/bin/codesign",["--verify","--deep","--strict",e],{signal:r,timeoutMs:3e5})}catch(e){if(r.aborted)throw e;throw new m(`The new version's signature doesn't check out ${a} (${e.detail}), so it wasn't used.`)}let l=s.default.join(e,"Contents","Info.plist"),u=e=>T("/usr/bin/plutil",["-extract",e,"raw","-o","-",l],{signal:r,timeoutMs:15e3}).then(e=>e.trim()).catch(()=>""),[d,p,h,f]=await Promise.all([u("CFBundleIdentifier"),u("CFBundleShortVersionString"),u("LSMinimumSystemVersion"),u("CFBundleExecutable")]);if(d!==n.bundleId)throw new m(`The download isn't Six Degrees (it calls itself ${d||"nothing"}), so it wasn't used.`);if(p!==t.version)throw new m(`The download says it is version ${p||"(none)"}, not ${t.version}, so it wasn't used.`);if(h&&n.macosVersion&&!(0,o.versionAtLeast)(n.macosVersion,h))throw new m(`Version ${t.version} needs macOS ${h} or later, and this Mac has ${n.macosVersion}.`);for(let t of[f&&!f.includes("/")?s.default.join(e,"Contents","MacOS",f):null,s.default.join(e,"Contents","Resources","node")].filter(Boolean)){let e=(0,o.machoArchs)(await _(t).catch(()=>null));if(e.size){if(!e.has(n.chip))throw new m(`The download is built for ${[...e].map(e=>o.CHIP_LABEL[e]||e).join(" and ")} Macs, not this one, so it wasn't used.`);break}}let g=await N(e);if(g)throw new m(`The new version has a link that points outside it (${g}), so it wasn't used.`)}function F(){return{PATH:"/usr/bin:/bin:/usr/sbin:/sbin",HOME:a.default.homedir(),TMPDIR:a.default.tmpdir(),LANG:"en_US.UTF-8",LC_ALL:"en_US.UTF-8",...process.env.USER?{USER:process.env.USER,LOGNAME:process.env.USER}:{}}}let I=(...e)=>(globalThis.fetch?._nextOriginalFetch||globalThis.fetch)(...e),O={bundleId:o.BUNDLE_ID,apiBase:o.GITHUB.apiBase,downloadBase:o.GITHUB.downloadBase,idleMs:3e4,maxBytes:0x40000000,waitSeconds:30,confirmWaitSeconds:600,settleMs:400,scanRunning:()=>null,othersRunning:()=>[],launch:function({helper:e,args:r,cwd:a,logFile:s}){let i=F(),o=n.default.openSync(s,"w");try{let n=(0,t.spawn)("/bin/bash",[e,...r],{cwd:a,env:i,detached:!0,stdio:["ignore",o,o]});return new Promise((e,t)=>{n.once("error",t),n.once("spawn",()=>{n.unref(),e(n)})})}finally{n.default.closeSync(o)}},exit:function(){setTimeout(()=>process.exit(o.UPDATE_HANDOFF_EXIT_CODE),1200)},sleep:e=>new Promise(t=>setTimeout(t,e))};function P(e){if(e.othersRunning().length)throw new m("Another user of this Mac has Six Degrees open, so it can't be replaced now. Try again once they have quit it.")}async function H(e,r){let a={fetchImpl:I,...O,...r},{signal:i}=e.ctrl,l=null,p=null,h=null,f=!1,w=()=>{if(!f){if(p&&D(p.point))try{(0,t.execFileSync)(d,["detach",p.point,"-force"],{stdio:"ignore",timeout:15e3})}catch{}for(let e of[h,l])if(e)try{n.default.rmSync(e,{recursive:!0,force:!0})}catch{}}};process.once("exit",w);try{let t,r,d,g=await A(`${a.apiBase}/repos/${a.slug}/releases/latest`,a,i,15e3,"application/vnd.github+json");if(404===g.status)throw new m("No release has been published yet.");if(!g.ok)throw new m(`GitHub answered ${g.status}. Try again in a moment.`);let{plan:w,refusal:y}=(0,o.planFromRelease)(await g.json(),{currentVersion:a.currentVersion,chip:a.chip,slug:a.slug,downloadBase:a.downloadBase});if(y)throw new m(y.message);if(a.expectVersion&&w.version!==a.expectVersion)throw new m(`Version ${w.version} has come out since you checked, and you were offered ${a.expectVersion}. Check again, then install.`,"stale-check");r={version:w.version,notes:w.notes,total:w.dmg.size},Object.assign(e,r),P(a),l=await c.default.mkdtemp(s.default.join(a.tmpRoot,"six-degrees-update-")),k(a.tmpRoot,(w.dmg.size||0x20000000)+0x4000000,"for the download"),Object.assign(e,{phase:"downloading"});let v=await A(w.sums.url,a,i,3e4,"text/plain, application/octet-stream");if(!v.ok)throw new m(`GitHub answered ${v.status} for the checksum file. Try again later.`);let S=()=>new m("The checksum file is not what was expected, so nothing was downloaded.");if(Number(v.headers.get("content-length"))>65536)throw S();let R=await v.text();if(R.length>65536)throw S();let j=(0,o.parseSha256Sums)(R).get(w.dmg.name);if(!j)throw new m(`The checksum file doesn't list ${w.dmg.name}, so its download can't be checked.`);let x=s.default.join(l,w.dmg.name),E=await C(w.dmg.url,`${x}.part`,{job:e,c:a,signal:i,expectedSize:w.dmg.size});if(d={phase:"verifying"},Object.assign(e,d),!(0,o.digestsMatch)(j,E))throw new m("The download doesn't match the checksum published with it, so it wasn't used. Try again later.");await c.default.rename(`${x}.part`,x),Object.assign(e,{phase:"preparing"}),p={point:s.default.join(l,"mnt"),device:null},await $(x,p,i);let D=s.default.join(p.point,o.APP_BUNDLE_NAME);await B(D,{plan:w,c:a,signal:i,where:"in the disk image"});let N=Number.parseInt(await T("/usr/bin/du",["-sk",D],{signal:i,timeoutMs:12e4}),10)||0;k(s.default.dirname(a.bundle),1024*N+0x4000000,`in ${s.default.dirname(a.bundle)}`),h=(0,o.stagingPath)(a.bundle),await c.default.rm(h,{recursive:!0,force:!0});try{await T("/usr/bin/ditto",[D,h],{signal:i,timeoutMs:9e5})}catch(e){if(i.aborted)throw e;throw new m(`Could not copy the new version into ${s.default.dirname(a.bundle)} (${e.detail}).`)}if(await B(h,{plan:w,c:a,signal:i,where:"after copying"}),await T("/usr/bin/xattr",["-dr","com.apple.quarantine",h],{signal:i}).catch(()=>{}),await M(p,a.sleep),p=null,await c.default.rm(x,{force:!0}),i.aborted)throw i.reason;let _=await a.scanRunning();if(_)throw new m(`${(0,u.runningNow)(_)}, so the update was not applied. Try again when it has finished.`);if(P(a),i.aborted)throw i.reason;Object.assign(e,{phase:"restarting"});let F=s.default.join(l,"apply-update.sh");await c.default.copyFile(a.helper,F);let I=(0,o.helperArgs)({target:a.bundle,staged:h,keepDir:a.cacheDir,statusFile:a.statusFile,from:a.currentVersion,to:w.version,pids:a.pids||[process.ppid,process.pid],waitSeconds:a.waitSeconds,logFile:a.logFile,work:l,confirmFile:a.confirmFile,confirmWaitSeconds:a.confirmWaitSeconds,relaunch:(0,o.relaunchArgs)({dataDir:a.dataDir})}),O={outcome:"started",from:a.currentVersion,to:w.version,at:new Date().toISOString(),log:a.logFile};try{b(a.statusFile,O)}catch{}try{t=await a.launch({helper:F,args:I,cwd:a.tmpRoot,logFile:a.logFile}),await a.sleep(a.settleMs)}catch(e){throw n.default.rmSync(a.statusFile,{force:!0}),new m(`The update helper wouldn't start (${e.message}).`)}if(t&&(null!==t.exitCode||null!==t.signalCode)){n.default.rmSync(a.statusFile,{force:!0});let e=function(e){try{return n.default.readFileSync(e,"utf8").trim().split("\n").slice(-2).join(" ").replace(/^\S+ \S+ {2}/,"")}catch{return""}}(a.logFile);throw new m(`The update helper stopped before the app closed${e?` (${e})`:""}.`)}f=!0,a.exit()}catch(n){let t=i.aborted&&i.reason instanceof m&&i.reason.message===g;Object.assign(e,{phase:t?"cancelled":"failed",error:t?null:n instanceof m?n.message:n?.name==="TimeoutError"?"GitHub didn't answer in time. Try again in a moment.":n instanceof TypeError&&/fetch failed/i.test(n.message)?`Could not reach GitHub (${n.cause?.code||n.cause?.message||"no connection"}). Check your connection and try again.`:`The update stopped: ${n?.detail||n?.message||n}.`,code:!t&&n instanceof m?n.code:null})}finally{p&&await M(p,a.sleep).catch(()=>{}),!f&&(h&&await c.default.rm(h,{recursive:!0,force:!0}).catch(()=>{}),l&&await c.default.rm(l,{recursive:!0,force:!0}).catch(()=>{})),process.removeListener("exit",w),Object.assign(e,{endedAt:new Date().toISOString()})}}var U=e.i(24214);let L=null;function G(e,n){return new Promise(r=>{let a,s="",i="";try{a=(0,t.spawn)("git",e,{cwd:n})}catch(e){return r({code:-1,out:"",err:e.message})}let o=setTimeout(()=>{try{a.kill()}catch{}},6e4);a.stdout.on("data",e=>{s+=e.toString()}),a.stderr.on("data",e=>{i+=e.toString()}),a.on("error",e=>{clearTimeout(o),r({code:-1,out:s,err:e.message})}),a.on("close",e=>{clearTimeout(o),r({code:e,out:s.trim(),raw:s,err:i.trim()})})})}async function V(e){let[t,n,r,a]=await Promise.all([G(["rev-parse","--short","HEAD"],e),G(["log","-1","--pretty=%s"],e),G(["status","--porcelain"],e),G(["rev-parse","--abbrev-ref","HEAD"],e)]),s=(r.raw||"").split("\n").filter(e=>e.length>3).map(e=>e.slice(3).trim()).filter(Boolean),i=s.length>0&&s.every(e=>"package-lock.json"===e);return{sha:t.out,subject:n.out,branch:a.out,dirty:s,onlyLockfile:i}}function q(){let e=(0,r.dataDir)();return s.default.resolve(e)===s.default.join((0,a.homedir)(),".six-degrees")?null:e}function z(e){let t=(0,i.repoSlug)(U.default.repository),n=(0,i.installKind)(process.env,e||""),r={supported:!1,installed:!0,kind:n,version:U.default.version,slug:t,command:t?(0,i.updateCommand)(n,t,{dataDir:q()}):null};if("mac-app"===n){let e=w();!function({statusFile:e,confirmFile:t},n){let r=y(e);if(r&&"started"===r.outcome&&r.to===n&&y(t)?.version!==n)try{b(t,{version:n,pid:process.pid,at:new Date().toISOString()})}catch{return!1}}(e,U.default.version),r.lastUpdate=(0,o.lastUpdateReport)(y(e.statusFile),{runningVersion:U.default.version}),r.job=x()}let a=(0,o.releaseSource)(process.env);return a.test&&(r.testReleases=a.apiBase),r}async function K(e,t){let n=await fetch(`${t}/repos/${e}/releases/latest`,{headers:{Accept:"application/vnd.github+json","User-Agent":"six-degrees-update-check"},signal:AbortSignal.timeout(1e4),cache:"no-store"});if(404===n.status)return null;if(!n.ok)throw Error(`GitHub answered ${n.status}`);let r=await n.json();return{version:String(r.tag_name||"").replace(/^v/i,""),url:r.html_url||null,release:r}}function X(e){return{refusal:{code:"not-mac",message:"Installing an update from here works only in the Mac app."}}}function W(e,t){let r=!0;try{(0,n.accessSync)("/Applications",n.constants.W_OK)}catch{r=!1}return(0,o.terminalFallback)({bundle:e,refusalCode:t?.code||null,installsTo:(0,o.installerTarget)({applicationsWritable:r,home:(0,a.homedir)()}),dataDir:q()})}function Y(e){let r;if(!(!e||(r=R().job)&&h.has(r.phase)))try{!function({bundle:e,cacheDir:r,tmpRoot:a,statusFile:i,now:l=Date.now(),isAlive:c=function(e){try{return process.kill(e,0),!0}catch(e){return"EPERM"===e.code}},asideAgeMs:u=6e5}={}){let p=[],h=e=>l-Math.max(e.mtimeMs,e.ctimeMs),f=e=>{try{return n.default.lstatSync(e)}catch{return null}},m=e=>{try{return n.default.readdirSync(e)}catch{return[]}},g=e=>{try{n.default.rmSync(e,{recursive:!0,force:!0}),p.push(e)}catch{}},w=i?y(i):null,b=w?.outcome==="failed"&&"string"==typeof w.previous?s.default.resolve(w.previous):null;if(e){let t=s.default.dirname(e);for(let{name:n,kind:r,pid:a}of(0,o.leftoversBeside)(m(t),s.default.basename(e))){let e=s.default.join(t,n),i=f(e);i&&e!==b&&("incoming"===r?h(i)>36e5&&g(e):!c(a)&&h(i)>u&&g(e))}}if(r)for(let e of m(r)){if(!/^\.previous-[A-Za-z0-9]{6}$/.test(e)&&!/\.zip\.part$/.test(e)&&!/^(last-update|update-confirmed)\.json\.\d+\.tmp$/.test(e))continue;let t=s.default.join(r,e),n=f(t);n&&h(n)>36e5&&g(t)}if(a)for(let e of m(a)){if(!/^six-degrees-update-[A-Za-z0-9]{6}$/.test(e))continue;let n=s.default.join(a,e),r=f(n);if(!r||!r.isDirectory()||36e5>=h(r))continue;let i=s.default.join(n,"mnt");if(D(i)){try{(0,t.execFileSync)(d,["detach",i,"-force"],{stdio:"ignore",timeout:3e4})}catch{}if(D(i))continue}g(n)}}({bundle:e,tmpRoot:(0,a.tmpdir)(),...w()})}catch{}}async function J(e,c){var d;let p=z(c),y=(0,o.releaseSource)(process.env);if("update-status"===e)return Response.json({job:x()});if("cancel-install"===e){let e;return Response.json({job:((e=R().job)&&f.has(e.phase)&&e.ctrl.abort(new m(g)),j(e))})}if("check-release"===e){if(!p.slug)return Response.json({error:"This copy does not say where it was published."},{status:400});let e="mac-app"===p.kind?X(c):null;e&&Y(e.bundle);try{let t=await K(p.slug,y.apiBase),n=!!(t&&(0,i.compareVersions)(t.version,p.version)>0),r=null,a=null;if(n&&e){let n=e.refusal?null:(0,o.planFromRelease)(t.release,{currentVersion:p.version,chip:v().chip,slug:p.slug,downloadBase:y.downloadBase}),s=e.refusal||n?.refusal||null;r=s?{possible:!1,reason:s.message,code:s.code}:{possible:!0,size:n.plan.dmg.size},a=W(e.bundle,e.refusal)}return e&&(d=n?t.version:null,R().checked=d?String(d):null),Response.json({...p,latest:t&&{version:t.version,url:t.url},newer:n,install:r,fallback:a})}catch(e){return Response.json({error:`Could not reach GitHub (${e.message}). Try again in a moment.`},{status:502})}}if("install-release"===e){let e;if("mac-app"!==p.kind)return Response.json({error:"Only the Mac app can install an update itself. Use the line below instead.",command:p.command},{status:400});if(!p.slug)return Response.json({error:"This copy does not say where it was published."},{status:400});let{bundle:i,refusal:d}=X(c),f=W(i,d);if(d)return Response.json({error:d.message,refusal:d.code,fallback:f,command:p.command},{status:409});let m=(0,u.busyRefusal)("Let it finish or stop it, then install the update.");if(m)return Response.json({error:m,fallback:f,command:p.command},{status:409});let g=R().checked||null;if(!g)return Response.json({error:"Check for updates first, then install.",refusal:"not-checked",fallback:f,command:p.command},{status:409});Y(i);let b=v(),S=function(e){let t=R();if(t.job&&h.has(t.job.phase))return{error:"An update is already in progress.",job:j(t.job)};let n={id:(0,l.randomUUID)(),phase:"checking",version:null,notes:null,received:0,total:null,error:null,code:null,startedAt:new Date().toISOString(),endedAt:null,ctrl:new AbortController};t.job=n;let r=H(n,e);return{job:j(n),done:r}}({slug:p.slug,currentVersion:p.version,expectVersion:g,chip:b.chip,macosVersion:b.macosVersion,bundle:i,dataDir:(0,r.dataDir)(),helper:(e=c?s.default.join(c,"scripts","apply-update.sh"):null)&&(0,n.existsSync)(e)?e:null,tmpRoot:(0,a.tmpdir)(),...w(),apiBase:y.apiBase,downloadBase:y.downloadBase,scanRunning:u.scannerJob,othersRunning:()=>(function(e){if(!e||"function"!=typeof process.getuid)return[];let r="";try{r=(0,t.execFileSync)("/bin/ps",["-axo","uid=,pid=,comm="],{timeout:1e4,maxBuffer:0x1000000,stdio:["ignore","pipe","ignore"],env:F()}).toString()}catch{return[]}let a=e;try{a=n.default.realpathSync(e)}catch{}return(0,o.foreignAppProcesses)(r,{bundles:[e,a],uid:process.getuid()})})(i)});return S.error?Response.json({error:S.error,job:S.job},{status:409}):Response.json({job:S.job},{status:202})}return Response.json({error:"Not a git checkout."},{status:400})}async function Z(){let e=(0,r.projectRoot)();if(!(0,r.isGitCheckout)())return Response.json(z(e));let n=await V(e),a=function(e){if(null===L)try{L=(0,t.execFileSync)("git",["rev-parse","--short","HEAD"],{cwd:e}).toString().trim()}catch{L=""}return L}(e);return Response.json({supported:!0,...n,bootSha:a,restartNeeded:!!(a&&n.sha&&a!==n.sha)})}async function Q(e){let t=(0,r.projectRoot)(),n={};try{n=await e.json()}catch{}let a=String(n.action||"");if(!(0,r.isGitCheckout)())return J(a,t);if("check"===a){let e=await G(["fetch","--quiet","origin"],t);if(0!==e.code)return Response.json({error:`Could not reach GitHub: ${e.err.slice(0,200)}`},{status:502});let n=await V(t),r=`origin/${n.branch||"main"}`,[a,s]=await Promise.all([G(["rev-list","--count",`HEAD..${r}`],t),G(["log","--pretty=%h %s",`HEAD..${r}`],t)]),i=Number(a.out||0);return Response.json({...n,behind:Number.isFinite(i)?i:0,commits:(s.out||"").split("\n").filter(Boolean).slice(0,25)})}if("pull"===a){let e=await V(t);if(e.dirty.length&&!e.onlyLockfile)return Response.json({error:"There are local changes here, so nothing was updated.",dirty:e.dirty},{status:409});e.onlyLockfile&&await G(["checkout","--","package-lock.json"],t);let n=await G(["pull","--ff-only"],t);if(0!==n.code)return Response.json({error:n.err.slice(0,400)||"The update could not be applied automatically."},{status:409});let r=await V(t),a=/package(-lock)?\.json/.test(n.out);return Response.json({ok:!0,output:n.out.split("\n").slice(-40).join("\n"),sha:r.sha,subject:r.subject,needsRestart:a})}return Response.json({error:`Unknown action '${a}'`},{status:400})}e.s(["GET",0,Z,"POST",0,Q],34091)},81067,e=>{"use strict";var t=e.i(47909),n=e.i(74017),r=e.i(96250),a=e.i(59756),s=e.i(61916),i=e.i(74677),o=e.i(69741),l=e.i(16795),c=e.i(87718),u=e.i(95169),d=e.i(47587),p=e.i(66012),h=e.i(70101),f=e.i(26937),m=e.i(10372),g=e.i(93695);e.i(52474);var w=e.i(220);let y=new t.AppRouteRouteModule({definition:{kind:n.RouteKind.APP_ROUTE,page:"/api/update/route",pathname:"/api/update",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/update/route.js",nextConfigOutput:"standalone",userland:()=>e.r(34091),...{}}),{workAsyncStorage:b,workUnitAsyncStorage:v,serverHooks:S}=y;async function R(e,t,r){r.requestMeta&&(0,a.setRequestMeta)(e,r.requestMeta),y.isDev&&(0,a.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let b="/api/update/route";b=b.replace(/\/index$/,"")||"/";let v=await y.prepare(e,t,{srcPage:b,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==r.waitUntil||r.waitUntil.call(r,Promise.resolve()),null;let{buildId:S,deploymentId:R,params:j,nextConfig:x,parsedUrl:T,isDraftMode:E,prerenderManifest:k,routerServerContext:A,isOnDemandRevalidate:C,revalidateOnlyGenerated:$,resolvedPathname:D,clientReferenceManifest:M,serverActionsManifest:N}=v,_=(0,o.normalizeAppPath)(b),B=!!(k.dynamicRoutes[_]||k.routes[D]),F=async()=>((null==A?void 0:A.render404)?await A.render404(e,t,T,!1):t.end("This page could not be found"),null);if(B&&!E){let e=!!k.routes[D],t=k.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(x.adapterPath)return await F();throw new g.NoFallbackError}}let I=null;!B||y.isDev||E||(I="/index"===(I=D)?"/":I);let O=!0===y.isDev||!B,P=B&&!O;N&&M&&(0,i.setManifestsSingleton)({page:b,clientReferenceManifest:M,serverActionsManifest:N});let H=e.method||"GET",U=(0,s.getTracer)(),L=U.getActiveScopeSpan(),G=!!(null==A?void 0:A.isWrappedByNextServer),V=!!(0,a.getRequestMeta)(e,"minimalMode"),q=(0,a.getRequestMeta)(e,"incrementalCache")||await y.getIncrementalCache(e,x,k,V);null==q||q.resetRequestCache(),globalThis.__incrementalCache=q;let z={params:j,previewProps:k.preview,renderOpts:{experimental:{authInterrupts:!!x.experimental.authInterrupts,useCacheTimeout:x.experimental.useCacheTimeout},cacheComponents:!!x.cacheComponents,validationLevel:x.experimental.instantInsights.validationLevel,supportsDynamicResponse:O,incrementalCache:q,hmrRefreshHash:(0,a.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:x.cacheLife,staticPageGenerationTimeout:x.staticPageGenerationTimeout,waitUntil:r.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,n,r,a)=>y.onRequestError(e,t,r,a,A)},sharedContext:{buildId:S,deploymentId:R}},K=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),W=c.NextRequestAdapter.fromNodeNextRequest(K,(0,c.signalFromNodeResponse)(t)),Y=async({previousCacheEntry:n})=>{try{if(!V&&C&&$&&!n)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let a=await y.handle(W,z);e.fetchMetrics=z.renderOpts.fetchMetrics;let s=z.renderOpts.pendingWaitUntil;s&&r.waitUntil&&(r.waitUntil(s),s=void 0);let i=z.renderOpts.collectedTags;if(!B)return await (0,p.sendResponse)(K,X,a,s),null;{let e=await a.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(a.headers);i&&(t[m.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let n=void 0!==z.renderOpts.collectedRevalidate&&!(z.renderOpts.collectedRevalidate>=m.INFINITE_CACHE)&&z.renderOpts.collectedRevalidate,r=void 0===z.renderOpts.collectedExpire||z.renderOpts.collectedExpire>=m.INFINITE_CACHE?!1!==n&&n>0?x.expireTime:void 0:z.renderOpts.collectedExpire;return{value:{kind:w.CachedRouteKind.APP_ROUTE,status:a.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:n,expire:r}}}}catch(t){throw(null==n?void 0:n.isStale)&&await y.onRequestError(e,t,{routerKind:"App Router",routePath:b,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:P,isOnDemandRevalidate:C})},!1,A),t}},J=async(a,i)=>{try{var o,l;let a=await y.handleResponse({req:e,nextConfig:x,cacheKey:I,routeKind:n.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:C,revalidateOnlyGenerated:$,responseGenerator:Y,waitUntil:r.waitUntil,isMinimalMode:V});if(!B)return;if((null==a||null==(o=a.value)?void 0:o.kind)!==w.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==a||null==(l=a.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});V||t.setHeader("x-nextjs-cache",C?"REVALIDATED":a.isMiss?"MISS":a.isStale?"STALE":"HIT"),E&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let s=(0,h.fromNodeOutgoingHttpHeaders)(a.value.headers);V&&B||s.delete(m.NEXT_CACHE_TAGS_HEADER),!a.cacheControl||t.getHeader("Cache-Control")||s.get("Cache-Control")||s.set("Cache-Control",(0,f.getCacheControlHeader)(a.cacheControl)),await (0,p.sendResponse)(K,X,new Response(a.value.body,{headers:s,status:a.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await y.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,d.getRevalidateReason)({isStaticGeneration:P,isOnDemandRevalidate:C})},!1,A),B)throw t;await (0,p.sendResponse)(K,X,new Response(null,{status:500}));return}finally{(()=>{if(!a)return;let e=t.statusCode;a.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(a.setStatus({code:s.SpanStatusCode.ERROR}),a.setAttribute("error.type",e.toString()));let n=U.getRootSpanAttributes();if(!n)return;if(n.get("next.span_type")!==u.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${n.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let r=n.get("next.route")||_,o=`${H} ${r}`;a.setAttributes({"next.route":r,"http.route":r,"next.span_name":o}),a.updateName(o),i&&i!==a&&(i.setAttribute("http.route",r),i.updateName(o))})()}};if(G&&L)await J(L,void 0);else{let t=U.getActiveScopeSpan();await U.withPropagatedContext(e.headers,()=>U.trace(u.BaseServerSpan.handleRequest,{spanName:`${H} ${b}`,kind:s.SpanKind.SERVER,attributes:{"http.method":H,"http.target":e.url}},e=>J(e,t)),void 0,!G)}}e.s(["handler",0,R,"patchFetch",0,function(){return(0,r.patchFetch)({workAsyncStorage:b,workUnitAsyncStorage:v})},"routeModule",0,y,"serverHooks",0,S,"workAsyncStorage",0,b,"workUnitAsyncStorage",0,v])}];
3
3
 
4
4
  //# sourceMappingURL=_1itd1o_._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[17558,e=>{"use strict";var t=e.i(2157);e.i(93836);let a=new Set(Object.freeze([{id:"new",label:"New"},{id:"contacted",label:"Contacted"},{id:"replied",label:"Replied"},{id:"meeting",label:"Meeting"},{id:"won",label:"Won/Partner"},{id:"not-now",label:"Not now"}]).map(e=>e.id)),n=/^\d{4}-\d{2}-\d{2}$/,r=e=>"string"==typeof e&&e.length>0&&e.length<300;function o(){return{version:1,settings:{awaitDays:7},people:{}}}function i(e){if(!e||"object"!=typeof e)return null;let t={};a.has(e.stage)&&(t.stage=e.stage);let r=function(e){let t=Array.isArray(e)?e:"string"==typeof e?e.split(","):[],a=new Set,n=[];for(let e of t){let t=String(e??"").replace(/[\u0000-\u001f,]/g," ").replace(/\s+/g," ").trim().slice(0,40);if(!(!t||a.has(t.toLowerCase()))&&(a.add(t.toLowerCase()),n.push(t),n.length>=30))break}return n}(e.tags);r.length&&(t.tags=r),"string"==typeof e.notes&&e.notes.trim()&&(t.notes=e.notes.slice(0,2e4));let o=function(e){if("string"!=typeof e||!n.test(e))return null;let t=Date.parse(`${e}T00:00:00Z`);return Number.isNaN(t)||new Date(t).toISOString().slice(0,10)!==e?null:e}(e.followUp);return(o&&(t.followUp=o),Object.keys(t).length)?("string"!=typeof e.updatedAt||Number.isNaN(Date.parse(e.updatedAt))||(t.updatedAt=e.updatedAt),t):null}let s=e=>{let t=Math.round(Number(e));return Number.isFinite(t)&&t>=1&&t<=365?t:7};function l(e){let t=o();if(!e||"object"!=typeof e)return t;for(let[a,n]of(t.settings.awaitDays=s(e.settings?.awaitDays),Object.entries(e.people&&"object"==typeof e.people?e.people:{}))){if(!r(a))continue;let e=i(n);e&&(t.people[a]=e)}return t}var u=e.i(19307);async function d(){let e=(0,u.socialFiles)();return e?Response.json({crm:l((0,u.readJson)(e.crm,null))}):Response.json({crm:o()})}async function c(e){let t,a=(0,u.socialFiles)();if(!a)return Response.json({error:"Pick a profile first."},{status:400});try{t=await e.json()}catch{return Response.json({error:"That isn’t readable."},{status:400})}let n=function(e,{key:t,set:a,settings:n}={},o=Date.now()){let u=l(e);if(n&&"object"==typeof n&&"awaitDays"in n&&(u.settings.awaitDays=s(n.awaitDays)),r(t)&&a&&"object"==typeof a){let e={...u.people[t]||{}};for(let t of["stage","tags","notes","followUp"])t in a&&(null==a[t]||""===a[t]||Array.isArray(a[t])&&!a[t].length?delete e[t]:e[t]=a[t]);delete e.updatedAt;let n=i(e);n?u.people[t]={...n,updatedAt:new Date(o).toISOString()}:delete u.people[t]}return u}((0,u.readJson)(a.crm,null),{key:t?.key,set:t?.set,settings:t?.settings});return(0,u.writeJsonAtomic)(a.crm,n),Response.json({ok:!0,entry:t?.key&&n.people[t.key]||null,settings:n.settings})}async function p(){let e=(0,u.socialFiles)();return e&&(0,t.rmSync)(e.crm,{force:!0}),Response.json({ok:!0})}e.s(["DELETE",0,p,"GET",0,d,"PATCH",0,c],17558)},54686,e=>{"use strict";var t=e.i(47909),a=e.i(74017),n=e.i(96250),r=e.i(59756),o=e.i(61916),i=e.i(74677),s=e.i(69741),l=e.i(16795),u=e.i(87718),d=e.i(95169),c=e.i(47587),p=e.i(66012),h=e.i(70101),f=e.i(26937),g=e.i(10372),R=e.i(93695);e.i(52474);var m=e.i(220);let w=new t.AppRouteRouteModule({definition:{kind:a.RouteKind.APP_ROUTE,page:"/api/social/crm/route",pathname:"/api/social/crm",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/social/crm/route.js",nextConfigOutput:"standalone",userland:()=>e.r(17558),...{}}),{workAsyncStorage:y,workUnitAsyncStorage:v,serverHooks:E}=w;async function b(e,t,n){n.requestMeta&&(0,r.setRequestMeta)(e,n.requestMeta),w.isDev&&(0,r.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/social/crm/route";y=y.replace(/\/index$/,"")||"/";let v=await w.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!v)return t.statusCode=400,t.end("Bad Request"),null==n.waitUntil||n.waitUntil.call(n,Promise.resolve()),null;let{buildId:E,deploymentId:b,params:A,nextConfig:C,parsedUrl:T,isDraftMode:x,prerenderManifest:N,routerServerContext:S,isOnDemandRevalidate:P,revalidateOnlyGenerated:O,resolvedPathname:D,clientReferenceManifest:j,serverActionsManifest:k}=v,_=(0,s.normalizeAppPath)(y),H=!!(N.dynamicRoutes[_]||N.routes[D]),q=async()=>((null==S?void 0:S.render404)?await S.render404(e,t,T,!1):t.end("This page could not be found"),null);if(H&&!x){let e=!!N.routes[D],t=N.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await q();throw new R.NoFallbackError}}let I=null;!H||w.isDev||x||(I="/index"===(I=D)?"/":I);let M=!0===w.isDev||!H,U=H&&!M;k&&j&&(0,i.setManifestsSingleton)({page:y,clientReferenceManifest:j,serverActionsManifest:k});let F=e.method||"GET",L=(0,o.getTracer)(),$=L.getActiveScopeSpan(),K=!!(null==S?void 0:S.isWrappedByNextServer),B=!!(0,r.getRequestMeta)(e,"minimalMode"),G=(0,r.getRequestMeta)(e,"incrementalCache")||await w.getIncrementalCache(e,C,N,B);null==G||G.resetRequestCache(),globalThis.__incrementalCache=G;let J={params:A,previewProps:N.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts,useCacheTimeout:C.experimental.useCacheTimeout},cacheComponents:!!C.cacheComponents,validationLevel:C.experimental.instantInsights.validationLevel,supportsDynamicResponse:M,incrementalCache:G,hmrRefreshHash:(0,r.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:C.cacheLife,staticPageGenerationTimeout:C.staticPageGenerationTimeout,waitUntil:n.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,a,n,r)=>w.onRequestError(e,t,n,r,S)},sharedContext:{buildId:E,deploymentId:b}},V=new l.NodeNextRequest(e),W=new l.NodeNextResponse(t),X=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),z=async({previousCacheEntry:a})=>{try{if(!B&&P&&O&&!a)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await w.handle(X,J);e.fetchMetrics=J.renderOpts.fetchMetrics;let o=J.renderOpts.pendingWaitUntil;o&&n.waitUntil&&(n.waitUntil(o),o=void 0);let i=J.renderOpts.collectedTags;if(!H)return await (0,p.sendResponse)(V,W,r,o),null;{let e=await r.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(r.headers);i&&(t[g.NEXT_CACHE_TAGS_HEADER]=i),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let a=void 0!==J.renderOpts.collectedRevalidate&&!(J.renderOpts.collectedRevalidate>=g.INFINITE_CACHE)&&J.renderOpts.collectedRevalidate,n=void 0===J.renderOpts.collectedExpire||J.renderOpts.collectedExpire>=g.INFINITE_CACHE?!1!==a&&a>0?C.expireTime:void 0:J.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:a,expire:n}}}}catch(t){throw(null==a?void 0:a.isStale)&&await w.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:P})},!1,S),t}},Z=async(r,i)=>{try{var s,l;let r=await w.handleResponse({req:e,nextConfig:C,cacheKey:I,routeKind:a.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:N,isRoutePPREnabled:!1,isOnDemandRevalidate:P,revalidateOnlyGenerated:O,responseGenerator:z,waitUntil:n.waitUntil,isMinimalMode:B});if(!H)return;if((null==r||null==(s=r.value)?void 0:s.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==r||null==(l=r.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});B||t.setHeader("x-nextjs-cache",P?"REVALIDATED":r.isMiss?"MISS":r.isStale?"STALE":"HIT"),x&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(r.value.headers);B&&H||o.delete(g.NEXT_CACHE_TAGS_HEADER),!r.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,f.getCacheControlHeader)(r.cacheControl)),await (0,p.sendResponse)(V,W,new Response(r.value.body,{headers:o,status:r.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await w.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,c.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:P})},!1,S),H)throw t;await (0,p.sendResponse)(V,W,new Response(null,{status:500}));return}finally{(()=>{if(!r)return;let e=t.statusCode;r.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(r.setStatus({code:o.SpanStatusCode.ERROR}),r.setAttribute("error.type",e.toString()));let a=L.getRootSpanAttributes();if(!a)return;if(a.get("next.span_type")!==d.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${a.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let n=a.get("next.route")||_,s=`${F} ${n}`;r.setAttributes({"next.route":n,"http.route":n,"next.span_name":s}),r.updateName(s),i&&i!==r&&(i.setAttribute("http.route",n),i.updateName(s))})()}};if(K&&$)await Z($,void 0);else{let t=L.getActiveScopeSpan();await L.withPropagatedContext(e.headers,()=>L.trace(d.BaseServerSpan.handleRequest,{spanName:`${F} ${y}`,kind:o.SpanKind.SERVER,attributes:{"http.method":F,"http.target":e.url}},e=>Z(e,t)),void 0,!K)}}e.s(["handler",0,b,"patchFetch",0,function(){return(0,n.patchFetch)({workAsyncStorage:y,workUnitAsyncStorage:v})},"routeModule",0,w,"serverHooks",0,E,"workAsyncStorage",0,y,"workUnitAsyncStorage",0,v])}];
2
+
3
+ //# sourceMappingURL=_1oqfuh8._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[52224,e=>{"use strict";var t=e.i(2157),s=e.i(80998),a=e.i(88602),r=e.i(93836),n=e.i(19307);let o=e=>"string"==typeof e&&e.length>0&&e.length<300;async function i(){let e=(0,n.socialFiles)();if(!e)return Response.json({social:null});let t=(0,n.readJson)(e.social,null);if(!t)return Response.json({social:null});let{conversations:s,...a}=t;return Response.json({social:{...a,conversationCount:Array.isArray(s)?s.length:0}})}async function l(e){let t,s=(0,n.socialFiles)();if(!s)return Response.json({error:"Pick a profile first."},{status:400});try{t=await e.json()}catch{return Response.json({error:"That isn’t readable."},{status:400})}let a=(0,n.readJson)(s.social,{})||{},r={live:a.live||{},liveAt:a.liveAt||null,autoSync:!0===a.autoSync,keepMessages:!0===a.keepMessages,importedAt:new Date().toISOString(),asOf:Number(t?.asOf)||null,people:t?.people&&"object"==typeof t.people?t.people:{},conversations:function(e){if(!Array.isArray(e))return[];let t=[];for(let s of e){if(!s||"string"!=typeof s.id||!s.id||s.id.length>200||!Array.isArray(s.people))continue;let e=s.people.filter(o).slice(0,200);e.length&&t.push({id:s.id,people:e,group:!0===s.group,last:Number(s.last)||null,lastFromThem:"boolean"==typeof s.lastFromThem?s.lastFromThem:null,count:Number.isFinite(Number(s.count))?Number(s.count):null})}return t}(t?.conversations),chapters:Array.isArray(t?.chapters)?t.chapters:[],posts:t?.posts&&"object"==typeof t.posts?t.posts:null,invites:t?.invites&&"object"==typeof t.invites?t.invites:null,emails:t?.emails===!0};for(let e of Object.values(r.people))if(e&&"object"==typeof e){for(let t of Object.keys(e))["last","lastFromThem","total","recent","email"].includes(t)||delete e[t];r.emails||delete e.email}return(0,n.writeJsonAtomic)(s.social,r),Response.json({ok:!0,people:Object.keys(r.people).length,conversations:r.conversations.length})}async function u(e){let t,o=(0,n.socialFiles)();if(!o)return Response.json({error:"Pick a profile first."},{status:400});try{t=await e.json()}catch{return Response.json({error:"That isn’t readable."},{status:400})}let i=(0,n.readJson)(o.social,{})||{},l=(0,a.resolveProfile)({create:!1}),u=[];try{let e=s.db.from("linkedin_connections").select("name, profile_url, id").eq("degree",1);l?.id&&e.eq("user_id",l.id),u=(await e).data||[]}catch{}let{live:c,unmatched:p}=(0,r.matchLive)(t?.live||{},u),d={},h={};for(let[e,{preview:t,...s}]of Object.entries(c))d[e]=s,!0===i.keepMessages&&t?.text&&(h[e]=t);if((0,n.writeJsonAtomic)(o.social,{...i,live:d,liveAt:new Date().toISOString()}),Object.keys(h).length){let e=(0,n.readJson)(o.messages,{})||{};(0,n.writeJsonAtomic)(o.messages,{...e,previews:{...e.previews||{},...h}})}return Response.json({ok:!0,people:Object.keys(d).length,unmatched:p,previews:Object.keys(h).length})}async function c(e){let t=(0,n.socialFiles)();if(!t)return Response.json({error:"Pick a profile first."},{status:400});let s={};try{s=await e.json()}catch{}let a={...(0,n.readJson)(t.social,{})||{}};return"boolean"==typeof s?.autoSync&&(a.autoSync=s.autoSync),"boolean"==typeof s?.keepMessages&&(a.keepMessages=s.keepMessages),!0!==a.keepMessages&&(0,n.deleteMessages)(t),(0,n.writeJsonAtomic)(t.social,a),Response.json({ok:!0,autoSync:!0===a.autoSync,keepMessages:!0===a.keepMessages})}async function p(){let e=(0,n.socialFiles)();return e&&((0,t.rmSync)(e.social,{force:!0}),(0,n.deleteMessages)(e)),Response.json({ok:!0})}e.s(["DELETE",0,p,"GET",0,i,"PATCH",0,c,"POST",0,l,"PUT",0,u])},1958,e=>{"use strict";var t=e.i(47909),s=e.i(74017),a=e.i(96250),r=e.i(59756),n=e.i(61916),o=e.i(74677),i=e.i(69741),l=e.i(16795),u=e.i(87718),c=e.i(95169),p=e.i(47587),d=e.i(66012),h=e.i(70101),f=e.i(26937),v=e.i(10372),R=e.i(93695);e.i(52474);var g=e.i(220);let m=new t.AppRouteRouteModule({definition:{kind:s.RouteKind.APP_ROUTE,page:"/api/social/route",pathname:"/api/social",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/social/route.js",nextConfigOutput:"standalone",userland:()=>e.r(52224),...{}}),{workAsyncStorage:y,workUnitAsyncStorage:w,serverHooks:A}=m;async function b(e,t,a){a.requestMeta&&(0,r.setRequestMeta)(e,a.requestMeta),m.isDev&&(0,r.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/social/route";y=y.replace(/\/index$/,"")||"/";let w=await m.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==a.waitUntil||a.waitUntil.call(a,Promise.resolve()),null;let{buildId:A,deploymentId:b,params:E,nextConfig:C,parsedUrl:T,isDraftMode:S,prerenderManifest:k,routerServerContext:x,isOnDemandRevalidate:j,revalidateOnlyGenerated:O,resolvedPathname:P,clientReferenceManifest:N,serverActionsManifest:M}=w,_=(0,i.normalizeAppPath)(y),q=!!(k.dynamicRoutes[_]||k.routes[P]),H=async()=>((null==x?void 0:x.render404)?await x.render404(e,t,T,!1):t.end("This page could not be found"),null);if(q&&!S){let e=!!k.routes[P],t=k.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await H();throw new R.NoFallbackError}}let I=null;!q||m.isDev||S||(I="/index"===(I=P)?"/":I);let F=!0===m.isDev||!q,D=q&&!F;M&&N&&(0,o.setManifestsSingleton)({page:y,clientReferenceManifest:N,serverActionsManifest:M});let U=e.method||"GET",J=(0,n.getTracer)(),L=J.getActiveScopeSpan(),K=!!(null==x?void 0:x.isWrappedByNextServer),$=!!(0,r.getRequestMeta)(e,"minimalMode"),B=(0,r.getRequestMeta)(e,"incrementalCache")||await m.getIncrementalCache(e,C,k,$);null==B||B.resetRequestCache(),globalThis.__incrementalCache=B;let G={params:E,previewProps:k.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts,useCacheTimeout:C.experimental.useCacheTimeout},cacheComponents:!!C.cacheComponents,validationLevel:C.experimental.instantInsights.validationLevel,supportsDynamicResponse:F,incrementalCache:B,hmrRefreshHash:(0,r.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:C.cacheLife,staticPageGenerationTimeout:C.staticPageGenerationTimeout,waitUntil:a.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,s,a,r)=>m.onRequestError(e,t,a,r,x)},sharedContext:{buildId:A,deploymentId:b}},V=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),W=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),z=async({previousCacheEntry:s})=>{try{if(!$&&j&&O&&!s)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let r=await m.handle(W,G);e.fetchMetrics=G.renderOpts.fetchMetrics;let n=G.renderOpts.pendingWaitUntil;n&&a.waitUntil&&(a.waitUntil(n),n=void 0);let o=G.renderOpts.collectedTags;if(!q)return await (0,d.sendResponse)(V,X,r,n),null;{let e=await r.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(r.headers);o&&(t[v.NEXT_CACHE_TAGS_HEADER]=o),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let s=void 0!==G.renderOpts.collectedRevalidate&&!(G.renderOpts.collectedRevalidate>=v.INFINITE_CACHE)&&G.renderOpts.collectedRevalidate,a=void 0===G.renderOpts.collectedExpire||G.renderOpts.collectedExpire>=v.INFINITE_CACHE?!1!==s&&s>0?C.expireTime:void 0:G.renderOpts.collectedExpire;return{value:{kind:g.CachedRouteKind.APP_ROUTE,status:r.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:s,expire:a}}}}catch(t){throw(null==s?void 0:s.isStale)&&await m.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:j})},!1,x),t}},Z=async(r,o)=>{try{var i,l;let r=await m.handleResponse({req:e,nextConfig:C,cacheKey:I,routeKind:s.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:k,isRoutePPREnabled:!1,isOnDemandRevalidate:j,revalidateOnlyGenerated:O,responseGenerator:z,waitUntil:a.waitUntil,isMinimalMode:$});if(!q)return;if((null==r||null==(i=r.value)?void 0:i.kind)!==g.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==r||null==(l=r.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});$||t.setHeader("x-nextjs-cache",j?"REVALIDATED":r.isMiss?"MISS":r.isStale?"STALE":"HIT"),S&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let n=(0,h.fromNodeOutgoingHttpHeaders)(r.value.headers);$&&q||n.delete(v.NEXT_CACHE_TAGS_HEADER),!r.cacheControl||t.getHeader("Cache-Control")||n.get("Cache-Control")||n.set("Cache-Control",(0,f.getCacheControlHeader)(r.cacheControl)),await (0,d.sendResponse)(V,X,new Response(r.value.body,{headers:n,status:r.value.status||200}));return}catch(t){if(t instanceof R.NoFallbackError||await m.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:D,isOnDemandRevalidate:j})},!1,x),q)throw t;await (0,d.sendResponse)(V,X,new Response(null,{status:500}));return}finally{(()=>{if(!r)return;let e=t.statusCode;r.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(r.setStatus({code:n.SpanStatusCode.ERROR}),r.setAttribute("error.type",e.toString()));let s=J.getRootSpanAttributes();if(!s)return;if(s.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${s.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let a=s.get("next.route")||_,i=`${U} ${a}`;r.setAttributes({"next.route":a,"http.route":a,"next.span_name":i}),r.updateName(i),o&&o!==r&&(o.setAttribute("http.route",a),o.updateName(i))})()}};if(K&&L)await Z(L,void 0);else{let t=J.getActiveScopeSpan();await J.withPropagatedContext(e.headers,()=>J.trace(c.BaseServerSpan.handleRequest,{spanName:`${U} ${y}`,kind:n.SpanKind.SERVER,attributes:{"http.method":U,"http.target":e.url}},e=>Z(e,t)),void 0,!K)}}e.s(["handler",0,b,"patchFetch",0,function(){return(0,a.patchFetch)({workAsyncStorage:y,workUnitAsyncStorage:w})},"routeModule",0,m,"serverHooks",0,A,"workAsyncStorage",0,y,"workUnitAsyncStorage",0,w])}];
1
+ module.exports=[52224,e=>{"use strict";var t=e.i(2157),r=e.i(80998),s=e.i(88602),n=e.i(93836),o=e.i(19307);let a=e=>"string"==typeof e&&e.length>0&&e.length<300,i=e=>Number.isFinite(Number(e))&&null!==e?Number(e):null,l=e=>"string"==typeof e?e.replace(/[\u0000-\u001f]/g," ").trim().slice(0,120):"";async function u(){let e=(0,o.socialFiles)();if(!e)return Response.json({social:null});let t=(0,o.readJson)(e.social,null);if(!t)return Response.json({social:null});let{conversations:r,invitations:s,names:n,liveOthers:a,liveGroups:i,...l}=t;return Response.json({social:{...l,conversationCount:Array.isArray(r)?r.length:0}})}async function c(e){let t,r=(0,o.socialFiles)();if(!r)return Response.json({error:"Pick a profile first."},{status:400});try{t=await e.json()}catch{return Response.json({error:"That isn’t readable."},{status:400})}let s=(0,o.readJson)(r.social,{})||{},n={live:s.live||{},liveAt:s.liveAt||null,liveOthers:s.liveOthers||{},liveGroups:s.liveGroups||[],autoSync:!0===s.autoSync,keepMessages:!0===s.keepMessages,importedAt:new Date().toISOString(),asOf:Number(t?.asOf)||null,people:t?.people&&"object"==typeof t.people?t.people:{},conversations:function(e){if(!Array.isArray(e))return[];let t=[];for(let r of e){if(!r||"string"!=typeof r.id||!r.id||r.id.length>200||!Array.isArray(r.people))continue;let e=r.people.filter(a).slice(0,200);t.push({id:r.id,people:e,group:!0===r.group,kind:["sponsored","inmail"].includes(r.kind)?r.kind:null,folder:"string"==typeof r.folder&&/^[\w -]{0,30}$/.test(r.folder)?r.folder.toLowerCase():"",last:Number(r.last)||null,lastFromThem:"boolean"==typeof r.lastFromThem?r.lastFromThem:null,count:i(r.count),mine:i(r.mine)})}return t}(t?.conversations),chapters:Array.isArray(t?.chapters)?t.chapters:[],posts:t?.posts&&"object"==typeof t.posts?t.posts:null,invites:t?.invites&&"object"==typeof t.invites?t.invites:null,invitations:function(e){if(!Array.isArray(e))return[];let t=[];for(let r of e.slice(0,5e4))r&&["in","out"].includes(r.dir)&&a(r.key)&&"string"==typeof r.id&&!(r.id.length>400)&&t.push({id:r.id,dir:r.dir,key:r.key,name:l(r.name),t:Number(r.t)||null});return t}(t?.invitations),names:function(e){let t={};if(!e||"object"!=typeof e)return t;for(let[r,s]of Object.entries(e).slice(0,2e5)){let e=l(s);a(r)&&e&&(t[r]=e)}return t}(t?.names),emails:t?.emails===!0};for(let e of Object.values(n.people))if(e&&"object"==typeof e){for(let t of Object.keys(e))["last","lastFromThem","total","recent","email"].includes(t)||delete e[t];n.emails||delete e.email}return(0,o.writeJsonAtomic)(r.social,n),Response.json({ok:!0,people:Object.keys(n.people).length,conversations:n.conversations.length,invitations:n.invitations.length})}async function p(e){let t,a=(0,o.socialFiles)();if(!a)return Response.json({error:"Pick a profile first."},{status:400});try{t=await e.json()}catch{return Response.json({error:"That isn’t readable."},{status:400})}let i=(0,o.readJson)(a.social,{})||{},l=(0,s.resolveProfile)({create:!1}),u=[];try{let e=r.db.from("linkedin_connections").select("name, profile_url, id").eq("degree",1);l?.id&&e.eq("user_id",l.id),u=(await e).data||[]}catch{}let{live:c,others:p,unmatched:d}=(0,n.matchLive)(t?.live||{},u),h={},f={},v={};for(let[e,t]of[[h,c],[f,p]])for(let[r,{preview:s,...n}]of Object.entries(t))e[r]=n,!0===i.keepMessages&&s?.text&&(v[r]=s);let g={};for(let e of i.liveGroups||[])g[e.threadUrl||e.people.join(",")]=e;for(let e of(0,n.matchLiveGroups)(t?.groups||[],u)){let t=e.threadUrl||e.people.join(",");(!g[t]||(e.last||0)>=(g[t].last||0))&&(g[t]=e)}if((0,o.writeJsonAtomic)(a.social,{...i,live:(0,n.mergeLive)(i.live,h),liveOthers:(0,n.mergeLive)(i.liveOthers,f),liveGroups:Object.values(g),liveAt:new Date().toISOString()}),Object.keys(v).length){let e=(0,o.readJson)(a.messages,{})||{};(0,o.writeJsonAtomic)(a.messages,{...e,previews:{...e.previews||{},...v}})}return Response.json({ok:!0,people:Object.keys(h).length,unmatched:d,groups:Object.keys(g).length,previews:Object.keys(v).length})}async function d(e){let t=(0,o.socialFiles)();if(!t)return Response.json({error:"Pick a profile first."},{status:400});let r={};try{r=await e.json()}catch{}let s={...(0,o.readJson)(t.social,{})||{}};return"boolean"==typeof r?.autoSync&&(s.autoSync=r.autoSync),"boolean"==typeof r?.keepMessages&&(s.keepMessages=r.keepMessages),!0!==s.keepMessages&&(0,o.deleteMessages)(t),(0,o.writeJsonAtomic)(t.social,s),Response.json({ok:!0,autoSync:!0===s.autoSync,keepMessages:!0===s.keepMessages})}async function h(){let e=(0,o.socialFiles)();return e&&((0,t.rmSync)(e.social,{force:!0}),(0,o.deleteMessages)(e)),Response.json({ok:!0})}e.s(["DELETE",0,h,"GET",0,u,"PATCH",0,d,"POST",0,c,"PUT",0,p])},1958,e=>{"use strict";var t=e.i(47909),r=e.i(74017),s=e.i(96250),n=e.i(59756),o=e.i(61916),a=e.i(74677),i=e.i(69741),l=e.i(16795),u=e.i(87718),c=e.i(95169),p=e.i(47587),d=e.i(66012),h=e.i(70101),f=e.i(26937),v=e.i(10372),g=e.i(93695);e.i(52474);var m=e.i(220);let R=new t.AppRouteRouteModule({definition:{kind:r.RouteKind.APP_ROUTE,page:"/api/social/route",pathname:"/api/social",filename:"route",bundlePath:""},distDir:".next",relativeProjectDir:"",resolvedPagePath:"[project]/app/api/social/route.js",nextConfigOutput:"standalone",userland:()=>e.r(52224),...{}}),{workAsyncStorage:y,workUnitAsyncStorage:w,serverHooks:b}=R;async function A(e,t,s){s.requestMeta&&(0,n.setRequestMeta)(e,s.requestMeta),R.isDev&&(0,n.addRequestMeta)(e,"devRequestTimingInternalsEnd",process.hrtime.bigint());let y="/api/social/route";y=y.replace(/\/index$/,"")||"/";let w=await R.prepare(e,t,{srcPage:y,multiZoneDraftMode:!1});if(!w)return t.statusCode=400,t.end("Bad Request"),null==s.waitUntil||s.waitUntil.call(s,Promise.resolve()),null;let{buildId:b,deploymentId:A,params:E,nextConfig:C,parsedUrl:k,isDraftMode:T,prerenderManifest:j,routerServerContext:O,isOnDemandRevalidate:S,revalidateOnlyGenerated:x,resolvedPathname:P,clientReferenceManifest:N,serverActionsManifest:M}=w,_=(0,i.normalizeAppPath)(y),q=!!(j.dynamicRoutes[_]||j.routes[P]),H=async()=>((null==O?void 0:O.render404)?await O.render404(e,t,k,!1):t.end("This page could not be found"),null);if(q&&!T){let e=!!j.routes[P],t=j.dynamicRoutes[_];if(t&&!1===t.fallback&&!e){if(C.adapterPath)return await H();throw new g.NoFallbackError}}let I=null;!q||R.isDev||T||(I="/index"===(I=P)?"/":I);let F=!0===R.isDev||!q,U=q&&!F;M&&N&&(0,a.setManifestsSingleton)({page:y,clientReferenceManifest:N,serverActionsManifest:M});let D=e.method||"GET",L=(0,o.getTracer)(),G=L.getActiveScopeSpan(),J=!!(null==O?void 0:O.isWrappedByNextServer),K=!!(0,n.getRequestMeta)(e,"minimalMode"),$=(0,n.getRequestMeta)(e,"incrementalCache")||await R.getIncrementalCache(e,C,j,K);null==$||$.resetRequestCache(),globalThis.__incrementalCache=$;let B={params:E,previewProps:j.preview,renderOpts:{experimental:{authInterrupts:!!C.experimental.authInterrupts,useCacheTimeout:C.experimental.useCacheTimeout},cacheComponents:!!C.cacheComponents,validationLevel:C.experimental.instantInsights.validationLevel,supportsDynamicResponse:F,incrementalCache:$,hmrRefreshHash:(0,n.getRequestMeta)(e,"hmrRefreshHash"),cacheLifeProfiles:C.cacheLife,staticPageGenerationTimeout:C.staticPageGenerationTimeout,waitUntil:s.waitUntil,onClose:e=>{t.on("close",e)},onAfterTaskError:void 0,onInstrumentationRequestError:(t,r,s,n)=>R.onRequestError(e,t,s,n,O)},sharedContext:{buildId:b,deploymentId:A}},V=new l.NodeNextRequest(e),X=new l.NodeNextResponse(t),W=u.NextRequestAdapter.fromNodeNextRequest(V,(0,u.signalFromNodeResponse)(t)),z=async({previousCacheEntry:r})=>{try{if(!K&&S&&x&&!r)return t.statusCode=404,t.setHeader("x-nextjs-cache","REVALIDATED"),t.end("This page could not be found"),null;let n=await R.handle(W,B);e.fetchMetrics=B.renderOpts.fetchMetrics;let o=B.renderOpts.pendingWaitUntil;o&&s.waitUntil&&(s.waitUntil(o),o=void 0);let a=B.renderOpts.collectedTags;if(!q)return await (0,d.sendResponse)(V,X,n,o),null;{let e=await n.blob(),t=(0,h.toNodeOutgoingHttpHeaders)(n.headers);a&&(t[v.NEXT_CACHE_TAGS_HEADER]=a),!t["content-type"]&&e.type&&(t["content-type"]=e.type);let r=void 0!==B.renderOpts.collectedRevalidate&&!(B.renderOpts.collectedRevalidate>=v.INFINITE_CACHE)&&B.renderOpts.collectedRevalidate,s=void 0===B.renderOpts.collectedExpire||B.renderOpts.collectedExpire>=v.INFINITE_CACHE?!1!==r&&r>0?C.expireTime:void 0:B.renderOpts.collectedExpire;return{value:{kind:m.CachedRouteKind.APP_ROUTE,status:n.status,body:Buffer.from(await e.arrayBuffer()),headers:t},cacheControl:{revalidate:r,expire:s}}}}catch(t){throw(null==r?void 0:r.isStale)&&await R.onRequestError(e,t,{routerKind:"App Router",routePath:y,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:S})},!1,O),t}},Z=async(n,a)=>{try{var i,l;let n=await R.handleResponse({req:e,nextConfig:C,cacheKey:I,routeKind:r.RouteKind.APP_ROUTE,isFallback:!1,prerenderManifest:j,isRoutePPREnabled:!1,isOnDemandRevalidate:S,revalidateOnlyGenerated:x,responseGenerator:z,waitUntil:s.waitUntil,isMinimalMode:K});if(!q)return;if((null==n||null==(i=n.value)?void 0:i.kind)!==m.CachedRouteKind.APP_ROUTE)throw Object.defineProperty(Error(`Invariant: app-route received invalid cache entry ${null==n||null==(l=n.value)?void 0:l.kind}`),"__NEXT_ERROR_CODE",{value:"E701",enumerable:!1,configurable:!0});K||t.setHeader("x-nextjs-cache",S?"REVALIDATED":n.isMiss?"MISS":n.isStale?"STALE":"HIT"),T&&t.setHeader("Cache-Control","private, no-cache, no-store, max-age=0, must-revalidate");let o=(0,h.fromNodeOutgoingHttpHeaders)(n.value.headers);K&&q||o.delete(v.NEXT_CACHE_TAGS_HEADER),!n.cacheControl||t.getHeader("Cache-Control")||o.get("Cache-Control")||o.set("Cache-Control",(0,f.getCacheControlHeader)(n.cacheControl)),await (0,d.sendResponse)(V,X,new Response(n.value.body,{headers:o,status:n.value.status||200}));return}catch(t){if(t instanceof g.NoFallbackError||await R.onRequestError(e,t,{routerKind:"App Router",routePath:_,routeType:"route",revalidateReason:(0,p.getRevalidateReason)({isStaticGeneration:U,isOnDemandRevalidate:S})},!1,O),q)throw t;await (0,d.sendResponse)(V,X,new Response(null,{status:500}));return}finally{(()=>{if(!n)return;let e=t.statusCode;n.setAttributes({"http.status_code":e,"next.rsc":!1}),e&&e>=500&&(n.setStatus({code:o.SpanStatusCode.ERROR}),n.setAttribute("error.type",e.toString()));let r=L.getRootSpanAttributes();if(!r)return;if(r.get("next.span_type")!==c.BaseServerSpan.handleRequest)return console.warn(`Unexpected root span type '${r.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let s=r.get("next.route")||_,i=`${D} ${s}`;n.setAttributes({"next.route":s,"http.route":s,"next.span_name":i}),n.updateName(i),a&&a!==n&&(a.setAttribute("http.route",s),a.updateName(i))})()}};if(J&&G)await Z(G,void 0);else{let t=L.getActiveScopeSpan();await L.withPropagatedContext(e.headers,()=>L.trace(c.BaseServerSpan.handleRequest,{spanName:`${D} ${y}`,kind:o.SpanKind.SERVER,attributes:{"http.method":D,"http.target":e.url}},e=>Z(e,t)),void 0,!J)}}e.s(["handler",0,A,"patchFetch",0,function(){return(0,s.patchFetch)({workAsyncStorage:y,workUnitAsyncStorage:w})},"routeModule",0,R,"serverHooks",0,b,"workAsyncStorage",0,y,"workUnitAsyncStorage",0,w])}];
2
2
 
3
3
  //# sourceMappingURL=_1xh07bp._.js.map
@@ -0,0 +1,3 @@
1
+ module.exports=[18222,(e,o,d)=>{}];
2
+
3
+ //# sourceMappingURL=_next-internal_server_app_api_social_crm_route_actions_0d1aflv.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.9";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)}
162
+ `;e.s(["SCHEMA_SQL",0,a],28681);let o="0.4.11";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
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
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&&!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=/^(?:social|social-messages|crm)-[\w-]+\.json$/,J=[...B,...Y],K="import-pending",V="before-import-",H=".export-",z=".import-upload-",Q=".python-setup-",Z=[H,z,Q],ee=/^import-pending\.(done|cancelled)-/;function et(e){try{return(0,n.lstatSync)(e).isDirectory()?(0,n.readdirSync)(e):[]}catch{return[]}}function en(e,t=()=>!0){let r=0,a=0;for(let o of et(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 er(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=Z.some(e=>s.startsWith(e));if(!a&&!ee.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,H,"IMPORT_BACKUP_PREFIX",0,V,"NETWORK_FILES",0,B,"PENDING_DIR",0,K,"SETUP_WORK_PREFIX",0,Q,"SOCIAL_FILE",0,W,"TRAVELLING_FILES",0,J,"UPLOAD_WORK_PREFIX",0,z,"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:en(o,e=>M.test(e)),photosInCopy:a?en(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(V)?"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,et,"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,er],26525);var ei=e.x("node:sqlite",()=>require("node:sqlite"),!0),ea=e.i(66680);let eo={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 es(e){return(0,ea.createHash)("sha256").update(e).digest("hex")}function el(e){return`'${String(e).replace(/'/g,"''")}'`}function ec(e){return[...e.matchAll(/CREATE TABLE IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function eu(e){return[...e.matchAll(/CREATE (?:UNIQUE )?INDEX IF NOT EXISTS (\w+)/g)].map(e=>e[1])}function ef(e,t="main"){try{return e.prepare(`SELECT count(DISTINCT profile_url) AS n FROM ${t}.linkedin_connections`).get().n}catch{return 0}}function ed(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,eo,"appIndexes",0,eu,"appTables",0,ec,"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 ${el(r)}`);let f=new ei.DatabaseSync(r);try{f.exec("PRAGMA journal_mode = DELETE"),f.exec(`${Object.values(eo).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?ed(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 J){let n=i.default.join(e,t);o(n)&&s.push({rel:t,abs:n})}if(a)for(let t of et(e).sort()){let n=i.default.join(e,t);W.test(t)&&o(n)&&s.push({rel:t,abs:n})}if(t)for(let t of et(i.default.join(e,"avatars")).sort()){if(!M.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,es(t)),d++,s.rel.startsWith("avatars/")&&r++}let h={};for(let e of ec(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=ef(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,ef,"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,ed,"sha256",0,es,"sqlString",0,el],92375);let ep="/api/data/import",eh=Buffer.from("SQLite format 3\0","latin1");class eT extends Error{constructor(e,{status:t=400,...n}={}){super(e),this.status=t,this.extra=n}}function em(e){let t=e/1024/1024;return`${t<10?t.toFixed(1):Math.round(t)} MB`}let eE=e=>String(e).slice(0,80);async function ey(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 eT("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 eT(`The file didn't arrive whole (${i} of ${n} bytes), so nothing was imported. Try again.`);return i}function eS(e){return"string"!=typeof e?null:J.includes(e)?"file":W.test(e)?"social":e.startsWith("avatars/")&&M.test(e.slice(8))?"photo":null}let eg=["users","linkedin_connections",...Object.keys(eo)],ew=Object.freeze({tables:[],indexes:[],columns:{}}),e_=e=>{try{return(0,n.lstatSync)(e),!0}catch{return!1}};function eA(e){let t=Buffer.alloc(eh.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(eh)}finally{(0,n.closeSync)(r)}}function eN(e){try{return JSON.parse((0,n.readFileSync)(e,"utf8"))}catch{return null}}function eb(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 eR(e,t){let r=`${t}.partial`;(0,n.rmSync)(r,{force:!0});try{let a=new s.DatabaseSync(e);try{a.exec(`VACUUM INTO ${el(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 eI(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 eO(e){let t=i.default.join(e,K);if(!e_(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 eL({dir:e,dbFile:t,now:r=new Date,copyDatabase:a=eR}){er(e,{now:r.getTime()});let o=i.default.join(e,K);if(!e_(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,`${V}${u.stamp}.sqlite`),m=i.default.join(h,`${V}${u.stamp}-files`),g=i.default.join(o,"data.sqlite"),w=["-wal","-shm","-journal"],_=()=>{for(let e of w)e_(`${t}${e}`)&&!e_(`${T}${e}`)&&eb(`${t}${e}`,`${T}${e}`);e_(t)&&!e_(T)&&eb(t,T),E(h),E(p)},A=!1,N=()=>{(0,n.mkdirSync)(h,{recursive:!0});try{if(!eA(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{e_(c)||f();let r=["start","database-kept","files-kept"].includes(u.phase);if("start"===u.phase&&(!e_(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&&e_(t)&&eA(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&&e_(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);e_(r)&&(t(),eb(r,i.default.join(m,n)))}if(et(i.default.join(o,"files")).some(e=>W.test(e)))for(let n of et(e).filter(e=>W.test(e)))t(),eb(i.default.join(e,n),i.default.join(m,n));for(let r of Y){let a=i.default.join(e,r);e_(a)&&(0,n.lstatSync)(a).isFile()&&(t(),(0,n.copyFileSync)(a,i.default.join(m,r)),S(i.default.join(m,r)))}e_(m)&&E(m),E(h),E(e),d("files-kept")}if("files-kept"===u.phase){if(e_(g)){if(!u.keptAsIs&&e_(t)){let e=A&&eI(t,T);if(e||(N(),e=!!u.keptAsIs||eI(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}),eb(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(e_(r)){for(let t of((0,n.mkdirSync)(i.default.join(e,"avatars"),{recursive:!0}),et(r)))eb(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);e_(r)&&eb(r,i.default.join(e,n))}for(let n of et(t).filter(e=>W.test(e)))eb(i.default.join(t,n),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:e_(T)?R(T):null,keptFiles:e_(m)?R(m):null,keptAsIs:u.keptAsIs??null}}function eD(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 ex(){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,ep,"ImportError",0,eT,"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:ep,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 eT(`${(0,T.runningNow)(e)}. Let it finish, or stop it on the Scan page, then import.`,{status:409}):t?new eT("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 eT("Choose a Six Degrees export (a .sixdegrees file) to import."):n>a?new eT(`That file is ${em(n)}. This copy can import files up to ${em(a)}.`,{status:413}):r>0&&i!==r?new eT(`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,eL,"cancelPendingImport",0,function(e){let t=eO(e);if(!t)return{cancelled:!1,reason:"none"};if(t.started)return{cancelled:!1,reason:"started"};let r=i.default.join(e,K),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,eO,"receiveUpload",0,ey,"recordImport",0,eD,"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=ew}){let d=function(e,{applySchema:t,schemaSql:r,appVersion:i,retired:a=ew}){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(eh))throw new eT("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 eT(`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 eT("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(eo).join(";\n")};`);let r=new Map;for(let e of[...ec(t),...Object.keys(eo)]){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(eu(t))}}finally{n.close()}}(t,r),l=(e,t)=>new eT(`This file holds something a Six Degrees export never does (the ${eE(e)} “${eE(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 eT("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(!eg.includes(e))continue;throw new eT(`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 eT(`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 eT(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 eT("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 eT(`This file comes from Six Degrees ${eE(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 eT("This file's export details aren't ones Six Degrees writes, so nothing was imported.");let y=(e,t,n)=>new eT(`This file's ${e} doesn't match its own export details (${t}, where they say ${eE(n)}), so nothing was imported. Export it again on the other computer.`);for(let e of p){if(Object.hasOwn(eo,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(`“${eE(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=eS(e);if(!n)throw new eT(`This file carries “${eE(e)}”, which an export never includes, so nothing was imported.`);let r=w.get(e);if(!(r?.bytes instanceof Uint8Array)||es(r.bytes)!==r.sha256)throw new eT(`“${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 eT(`“${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 eT(`“${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:ef(o),photos:S,files:g}}catch(e){if(e instanceof eT)throw e;throw new eT(`This file couldn't be read as a Six Degrees export (${eE(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 ${el(e)} AS up`);try{for(let e of(y.exec("BEGIN"),ec(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 eT(`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=eS(e);if(!a||!(r?.bytes instanceof Uint8Array)||es(r.bytes)!==r.sha256)throw new eT(`“${eE(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,K)),E(t),g}],19041);let ek={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:[]},eF=null,e$=Symbol.for("six-degrees.db-opened");function ej(){return process.env.SIX_DEGREES_DB||i.default.join(ex(),"six-degrees.sqlite")}function ev(e){e.exec(a),function(e){for(let[t,n,r]of eU)e.prepare(`PRAGMA table_info(${t})`).all().some(e=>e.name===n)||e.exec(`ALTER TABLE ${t} ADD COLUMN ${n} ${r}`)}(e)}let eU=[["linkedin_connections","score_why","TEXT"],["linkedin_connections","mutual_count","INTEGER"]],eC="auto-before-";e.s(["AUTO_BACKUP_PREFIX",0,eC,"applySchema",0,ev,"dataDir",0,ex,"dbFile",0,ej,"decodeRow",0,function(e,t){if(!t)return t;let n={...t};for(let t of ek[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:(ek[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(eF)return eF;let e=ej(),r=null;if(!globalThis[e$])try{(r=eL({dir:ex(),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[e$]=!0,eF=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,`${eC}${r}-${l}.sqlite`),e.exec(`VACUUM INTO '${c.replace(/'/g,"''")}'`),(0,n.readdirSync)(s).filter(e=>e.startsWith(eC)&&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}(eF,{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(ev(eF),r)try{eD(eF,r)}catch{}return eF},"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