gemi 0.93.0 → 0.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/ai/index.js.map +2 -2
  3. package/dist/app/index.js +1 -1
  4. package/dist/bun/plugin.js +1 -1
  5. package/dist/bun/preload.js +1 -1
  6. package/dist/{chunk-g2xbpr8r.js → chunk-1hnpr3xt.js} +2 -2
  7. package/dist/{chunk-g2xbpr8r.js.map → chunk-1hnpr3xt.js.map} +1 -1
  8. package/dist/{chunk-v51a4g6w.js → chunk-2jse74pn.js} +2 -2
  9. package/dist/{chunk-v51a4g6w.js.map → chunk-2jse74pn.js.map} +1 -1
  10. package/dist/{chunk-1yt4hjqx.js → chunk-2shkf2gs.js} +2 -2
  11. package/dist/{chunk-1yt4hjqx.js.map → chunk-2shkf2gs.js.map} +1 -1
  12. package/dist/{chunk-dve6ryfd.js → chunk-2yyr5tdc.js} +1 -1
  13. package/dist/{chunk-4k4mh3gh.js → chunk-323715e8.js} +2 -2
  14. package/dist/{chunk-4k4mh3gh.js.map → chunk-323715e8.js.map} +1 -1
  15. package/dist/{chunk-xk4r9372.js → chunk-37jb6q13.js} +2 -2
  16. package/dist/{chunk-xk4r9372.js.map → chunk-37jb6q13.js.map} +1 -1
  17. package/dist/{chunk-wd9zab3e.js → chunk-38k1kjyb.js} +2 -2
  18. package/dist/{chunk-wd9zab3e.js.map → chunk-38k1kjyb.js.map} +1 -1
  19. package/dist/{chunk-aq1hjk00.js → chunk-3fjkbcra.js} +1 -1
  20. package/dist/{chunk-6qyc4e22.js → chunk-3fr22rtg.js} +2 -2
  21. package/dist/{chunk-6qyc4e22.js.map → chunk-3fr22rtg.js.map} +1 -1
  22. package/dist/{chunk-jj0ynn5t.js → chunk-56gce2z7.js} +2 -2
  23. package/dist/{chunk-jj0ynn5t.js.map → chunk-56gce2z7.js.map} +1 -1
  24. package/dist/{chunk-qs9drxja.js → chunk-5en4ydde.js} +2 -2
  25. package/dist/{chunk-qs9drxja.js.map → chunk-5en4ydde.js.map} +1 -1
  26. package/dist/{chunk-z10c81a9.js → chunk-5px4rkzf.js} +2 -2
  27. package/dist/{chunk-z10c81a9.js.map → chunk-5px4rkzf.js.map} +1 -1
  28. package/dist/{chunk-bb8e7rhf.js → chunk-7dnb21s9.js} +2 -2
  29. package/dist/{chunk-bb8e7rhf.js.map → chunk-7dnb21s9.js.map} +1 -1
  30. package/dist/chunk-7hfv5n00.js +5 -0
  31. package/dist/{chunk-cyze295m.js.map → chunk-7hfv5n00.js.map} +4 -3
  32. package/dist/{chunk-p0px3ym0.js → chunk-7kedxtbp.js} +2 -2
  33. package/dist/{chunk-p0px3ym0.js.map → chunk-7kedxtbp.js.map} +1 -1
  34. package/dist/{chunk-vpcys0ty.js → chunk-7ktsceyz.js} +2 -2
  35. package/dist/{chunk-vpcys0ty.js.map → chunk-7ktsceyz.js.map} +1 -1
  36. package/dist/{chunk-s22afmm9.js → chunk-7s5nh5mx.js} +2 -2
  37. package/dist/{chunk-s22afmm9.js.map → chunk-7s5nh5mx.js.map} +1 -1
  38. package/dist/{chunk-fz805r97.js → chunk-7vjbebst.js} +2 -2
  39. package/dist/{chunk-fz805r97.js.map → chunk-7vjbebst.js.map} +1 -1
  40. package/dist/{chunk-a1y7pa5z.js → chunk-8g99gnsd.js} +2 -2
  41. package/dist/{chunk-a1y7pa5z.js.map → chunk-8g99gnsd.js.map} +1 -1
  42. package/dist/{chunk-khvnm11p.js → chunk-9g5cpkkk.js} +2 -2
  43. package/dist/{chunk-khvnm11p.js.map → chunk-9g5cpkkk.js.map} +1 -1
  44. package/dist/{chunk-v6vsjdp7.js → chunk-9xf2fx98.js} +2 -2
  45. package/dist/{chunk-v6vsjdp7.js.map → chunk-9xf2fx98.js.map} +1 -1
  46. package/dist/{chunk-9pcsm8g3.js → chunk-adm5g1v8.js} +2 -2
  47. package/dist/{chunk-9pcsm8g3.js.map → chunk-adm5g1v8.js.map} +1 -1
  48. package/dist/{chunk-ej5mkm7t.js → chunk-b8m6zs7e.js} +2 -2
  49. package/dist/{chunk-ej5mkm7t.js.map → chunk-b8m6zs7e.js.map} +1 -1
  50. package/dist/{chunk-1wdfjmkx.js → chunk-bedkys40.js} +2 -2
  51. package/dist/{chunk-1wdfjmkx.js.map → chunk-bedkys40.js.map} +1 -1
  52. package/dist/chunk-bk4f99s4.js +5 -0
  53. package/dist/{chunk-svzdv2rf.js.map → chunk-bk4f99s4.js.map} +5 -5
  54. package/dist/{chunk-0rs8a7re.js → chunk-bk8wjf00.js} +2 -2
  55. package/dist/{chunk-0rs8a7re.js.map → chunk-bk8wjf00.js.map} +1 -1
  56. package/dist/chunk-br9p390p.js +5 -0
  57. package/dist/chunk-br9p390p.js.map +11 -0
  58. package/dist/chunk-dhe96f7z.js +5 -0
  59. package/dist/{chunk-4bh0maq0.js.map → chunk-dhe96f7z.js.map} +1 -1
  60. package/dist/{chunk-3prm2e2t.js → chunk-epwaxctc.js} +2 -2
  61. package/dist/{chunk-3prm2e2t.js.map → chunk-epwaxctc.js.map} +1 -1
  62. package/dist/{chunk-pwchwgkc.js → chunk-eqtsfvvd.js} +2 -2
  63. package/dist/{chunk-pwchwgkc.js.map → chunk-eqtsfvvd.js.map} +1 -1
  64. package/dist/{chunk-ffpm75zs.js → chunk-et6thczw.js} +2 -2
  65. package/dist/{chunk-ffpm75zs.js.map → chunk-et6thczw.js.map} +1 -1
  66. package/dist/{chunk-3m10ve1n.js → chunk-f6e2t4vb.js} +3 -3
  67. package/dist/{chunk-3m10ve1n.js.map → chunk-f6e2t4vb.js.map} +1 -1
  68. package/dist/{chunk-6ak8jfhm.js → chunk-f6veb369.js} +2 -2
  69. package/dist/{chunk-6ak8jfhm.js.map → chunk-f6veb369.js.map} +1 -1
  70. package/dist/{chunk-5y9jk4h4.js → chunk-fq03tz45.js} +2 -2
  71. package/dist/{chunk-5y9jk4h4.js.map → chunk-fq03tz45.js.map} +1 -1
  72. package/dist/{chunk-vbfwvyb8.js → chunk-ghz3e8b7.js} +2 -2
  73. package/dist/{chunk-vbfwvyb8.js.map → chunk-ghz3e8b7.js.map} +1 -1
  74. package/dist/{chunk-qrczhr16.js → chunk-h24rv10h.js} +2 -2
  75. package/dist/{chunk-qrczhr16.js.map → chunk-h24rv10h.js.map} +1 -1
  76. package/dist/{chunk-g6byqmdq.js → chunk-j2nx0dtq.js} +2 -2
  77. package/dist/{chunk-6xh4e55j.js.map → chunk-j2nx0dtq.js.map} +1 -1
  78. package/dist/chunk-j9x86xsc.js +19 -0
  79. package/dist/{chunk-g8tgp3ja.js.map → chunk-j9x86xsc.js.map} +4 -5
  80. package/dist/{chunk-7jshf4ms.js → chunk-jrp35qrk.js} +1 -1
  81. package/dist/{chunk-sppjqk4n.js → chunk-jxhznqhe.js} +3 -3
  82. package/dist/{chunk-sppjqk4n.js.map → chunk-jxhznqhe.js.map} +1 -1
  83. package/dist/{chunk-5v2rx0rk.js → chunk-kzh8bkg5.js} +2 -2
  84. package/dist/{chunk-5v2rx0rk.js.map → chunk-kzh8bkg5.js.map} +1 -1
  85. package/dist/{chunk-dwkhs81y.js → chunk-m3z60v9d.js} +2 -2
  86. package/dist/{chunk-dwkhs81y.js.map → chunk-m3z60v9d.js.map} +1 -1
  87. package/dist/{chunk-d869bd41.js → chunk-mekw2ap4.js} +2 -2
  88. package/dist/{chunk-d869bd41.js.map → chunk-mekw2ap4.js.map} +1 -1
  89. package/dist/{chunk-sqd77ksy.js → chunk-mym0zxxp.js} +3 -3
  90. package/dist/{chunk-sqd77ksy.js.map → chunk-mym0zxxp.js.map} +1 -1
  91. package/dist/{chunk-qv2sdxbq.js → chunk-n4807648.js} +3 -3
  92. package/dist/{chunk-qv2sdxbq.js.map → chunk-n4807648.js.map} +1 -1
  93. package/dist/{chunk-nvbbgbdk.js → chunk-nqabsqty.js} +4 -4
  94. package/dist/{chunk-nvbbgbdk.js.map → chunk-nqabsqty.js.map} +1 -1
  95. package/dist/{chunk-6xh4e55j.js → chunk-p3mdtnvv.js} +2 -2
  96. package/dist/{chunk-g6byqmdq.js.map → chunk-p3mdtnvv.js.map} +1 -1
  97. package/dist/{chunk-y3hdh6q6.js → chunk-qj5ts9d5.js} +2 -2
  98. package/dist/{chunk-y3hdh6q6.js.map → chunk-qj5ts9d5.js.map} +1 -1
  99. package/dist/{chunk-aawtyngp.js → chunk-qpek76vn.js} +3 -3
  100. package/dist/{chunk-aawtyngp.js.map → chunk-qpek76vn.js.map} +1 -1
  101. package/dist/{chunk-vryvdzmk.js → chunk-qqev9e50.js} +2 -2
  102. package/dist/{chunk-vryvdzmk.js.map → chunk-qqev9e50.js.map} +1 -1
  103. package/dist/{chunk-241aehp3.js → chunk-qxda7pzm.js} +2 -2
  104. package/dist/{chunk-241aehp3.js.map → chunk-qxda7pzm.js.map} +1 -1
  105. package/dist/{chunk-za1ncjh0.js → chunk-qz2p0hv5.js} +2 -2
  106. package/dist/{chunk-za1ncjh0.js.map → chunk-qz2p0hv5.js.map} +1 -1
  107. package/dist/{chunk-7k7a6h9j.js → chunk-r7qzdmew.js} +2 -2
  108. package/dist/{chunk-7k7a6h9j.js.map → chunk-r7qzdmew.js.map} +1 -1
  109. package/dist/{chunk-7bmctvep.js → chunk-safv6h9x.js} +2 -2
  110. package/dist/{chunk-7bmctvep.js.map → chunk-safv6h9x.js.map} +1 -1
  111. package/dist/{chunk-mmfstb0z.js → chunk-sh6pjjgc.js} +2 -2
  112. package/dist/{chunk-mmfstb0z.js.map → chunk-sh6pjjgc.js.map} +1 -1
  113. package/dist/{chunk-pgn3yh5k.js → chunk-ssqxzcad.js} +3 -3
  114. package/dist/{chunk-pgn3yh5k.js.map → chunk-ssqxzcad.js.map} +1 -1
  115. package/dist/{chunk-3jpetvsj.js → chunk-tcefqn3d.js} +2 -2
  116. package/dist/{chunk-3jpetvsj.js.map → chunk-tcefqn3d.js.map} +1 -1
  117. package/dist/{chunk-t328955a.js → chunk-twhf7w1x.js} +2 -2
  118. package/dist/{chunk-t328955a.js.map → chunk-twhf7w1x.js.map} +1 -1
  119. package/dist/{chunk-knw4t9e6.js → chunk-w98tp5fa.js} +2 -2
  120. package/dist/{chunk-knw4t9e6.js.map → chunk-w98tp5fa.js.map} +1 -1
  121. package/dist/{chunk-z405ks42.js → chunk-x24davqq.js} +2 -2
  122. package/dist/{chunk-z405ks42.js.map → chunk-x24davqq.js.map} +1 -1
  123. package/dist/{chunk-dmvrx8nm.js → chunk-xtqxy492.js} +3 -3
  124. package/dist/{chunk-dmvrx8nm.js.map → chunk-xtqxy492.js.map} +1 -1
  125. package/dist/chunk-ykbehyp9.js +17 -0
  126. package/dist/{chunk-c37g1gzy.js.map → chunk-ykbehyp9.js.map} +4 -3
  127. package/dist/{chunk-0n8t329w.js → chunk-z16nyxb8.js} +2 -2
  128. package/dist/{chunk-0n8t329w.js.map → chunk-z16nyxb8.js.map} +1 -1
  129. package/dist/{chunk-fx02sqe2.js → chunk-z9ydpvc8.js} +3 -3
  130. package/dist/{chunk-fx02sqe2.js.map → chunk-z9ydpvc8.js.map} +1 -1
  131. package/dist/chunk-zyw42zny.js +217 -0
  132. package/dist/chunk-zyw42zny.js.map +16 -0
  133. package/dist/config/index.js +1 -1
  134. package/dist/console/run.js +2 -2
  135. package/dist/console/run.js.map +1 -1
  136. package/dist/container/index.js +2 -2
  137. package/dist/container/index.js.map +1 -1
  138. package/dist/database/index.js +2 -2
  139. package/dist/database/index.js.map +1 -1
  140. package/dist/email/index.js +2 -2
  141. package/dist/email/index.js.map +2 -2
  142. package/dist/facades/Lock.d.ts +24 -0
  143. package/dist/facades/Lock.d.ts.map +1 -0
  144. package/dist/facades/index.d.ts +1 -0
  145. package/dist/facades/index.d.ts.map +1 -1
  146. package/dist/facades/index.js +2 -2
  147. package/dist/facades/index.js.map +1 -1
  148. package/dist/foundation/index.js +2 -2
  149. package/dist/foundation/index.js.map +1 -1
  150. package/dist/http/index.js +2 -2
  151. package/dist/http/index.js.map +1 -1
  152. package/dist/i18n/dictionaryRuntime.js +2 -2
  153. package/dist/i18n/dictionaryRuntime.js.map +1 -1
  154. package/dist/i18n/index.js +2 -2
  155. package/dist/i18n/index.js.map +1 -1
  156. package/dist/kernel/index.js +2 -2
  157. package/dist/kernel/index.js.map +2 -2
  158. package/dist/orm/index.js +2 -2
  159. package/dist/orm/index.js.map +2 -2
  160. package/dist/server/index.js +2 -2
  161. package/dist/server/index.js.map +1 -1
  162. package/dist/services/cron/CronJob.d.ts +37 -1
  163. package/dist/services/cron/CronJob.d.ts.map +1 -1
  164. package/dist/services/cron/ScheduleServiceProvider.d.ts.map +1 -1
  165. package/dist/services/cron/Scheduler.d.ts +19 -1
  166. package/dist/services/cron/Scheduler.d.ts.map +1 -1
  167. package/dist/services/index.d.ts +5 -1
  168. package/dist/services/index.d.ts.map +1 -1
  169. package/dist/services/index.js +3 -3
  170. package/dist/services/index.js.map +2 -2
  171. package/dist/services/lock/DatabaseLockStore.d.ts +84 -0
  172. package/dist/services/lock/DatabaseLockStore.d.ts.map +1 -0
  173. package/dist/services/lock/LockManager.d.ts +93 -0
  174. package/dist/services/lock/LockManager.d.ts.map +1 -0
  175. package/dist/services/lock/LockStore.d.ts +87 -0
  176. package/dist/services/lock/LockStore.d.ts.map +1 -0
  177. package/dist/services/lock/MemoryLockStore.d.ts +28 -0
  178. package/dist/services/lock/MemoryLockStore.d.ts.map +1 -0
  179. package/dist/services/lock/lockStoreContract.d.ts +13 -0
  180. package/dist/services/lock/lockStoreContract.d.ts.map +1 -0
  181. package/dist/services/queue/DatabaseQueueDriver.d.ts +7 -0
  182. package/dist/services/queue/DatabaseQueueDriver.d.ts.map +1 -1
  183. package/dist/services/queue/Job.d.ts +66 -0
  184. package/dist/services/queue/Job.d.ts.map +1 -1
  185. package/dist/services/queue/QueueDriver.d.ts +9 -0
  186. package/dist/services/queue/QueueDriver.d.ts.map +1 -1
  187. package/dist/services/queue/QueueManager.d.ts +46 -0
  188. package/dist/services/queue/QueueManager.d.ts.map +1 -1
  189. package/dist/services/queue/QueueServiceProvider.d.ts.map +1 -1
  190. package/dist/services/queue/config.d.ts +13 -0
  191. package/dist/services/queue/config.d.ts.map +1 -1
  192. package/dist/services/queue/work.js +2 -2
  193. package/dist/services/queue/work.js.map +2 -2
  194. package/dist/support/index.js +2 -2
  195. package/dist/support/index.js.map +2 -2
  196. package/package.json +1 -1
  197. package/dist/chunk-4bh0maq0.js +0 -5
  198. package/dist/chunk-c37g1gzy.js +0 -17
  199. package/dist/chunk-cyze295m.js +0 -5
  200. package/dist/chunk-g8tgp3ja.js +0 -19
  201. package/dist/chunk-rgcfqq21.js +0 -5
  202. package/dist/chunk-rgcfqq21.js.map +0 -10
  203. package/dist/chunk-svzdv2rf.js +0 -5
  204. package/dist/chunk-t4x7q9x8.js +0 -142
  205. package/dist/chunk-t4x7q9x8.js.map +0 -13
  206. /package/dist/{chunk-dve6ryfd.js.map → chunk-2yyr5tdc.js.map} +0 -0
  207. /package/dist/{chunk-aq1hjk00.js.map → chunk-3fjkbcra.js.map} +0 -0
  208. /package/dist/{chunk-7jshf4ms.js.map → chunk-jrp35qrk.js.map} +0 -0
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- import{wa as I}from"../chunk-8z37k28d.js";import{xa as A}from"../chunk-xk4r9372.js";import{Eg as b,Gg as V,Hg as H,Ig as O,Jg as W}from"../chunk-ffpm75zs.js";import{Ng as k}from"../chunk-5v2rx0rk.js";import"../chunk-bb8e7rhf.js";import{Ug as $}from"../chunk-g6byqmdq.js";var X=Symbol.for("gemi.server.devGeneration"),L={graceMs:1e4,providerTimeoutMs:5000};class Q{app;inFlight=0;waiters=new Set;constructor(z){this.app=z}track(z){return async(B,J)=>{this.inFlight++;try{return await z(B,J)}finally{if(this.inFlight--,this.inFlight===0)this.wake()}}}get pending(){return this.inFlight}async retire({graceMs:z,providerTimeoutMs:B}){try{await this.idle(z),await Promise.resolve().then(()=>this.app.shutdown({timeoutMs:B}))}catch(J){Z(J)}}idle(z){if(this.inFlight===0)return Promise.resolve();return new Promise((B)=>{let J=()=>{clearTimeout(K),this.waiters.delete(J),B()},K=setTimeout(J,z);this.waiters.add(J)})}wake(){for(let z of this.waiters)z()}}function Y(z,B=L){let J=globalThis,K=J[X];if(J[X]=z,!K||K===z||typeof K.retire!=="function")return Promise.resolve();let _=K.retire.bind(K);return Promise.resolve().then(()=>_(B)).catch(Z)}function Z(z){console.error("[gemi] Shutting down the application a reload replaced failed:",z)}class P{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new A({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=O(z.instrumentation??((B,J)=>J(B)))}async start(){process.env.ROOT_DIR=k();let z=Bun.env.NODE_ENV==="production";if(z){if(this.handleSignals)W(()=>this.stop());this.settings=V()}try{await this.app.waitForBoot()}catch(B){if(!z)this.app.shutdown({timeoutMs:L.providerTimeoutMs});throw B}if(z){let{httpProd:B}=await import("../chunk-0rs8a7re.js");this.server=await B(this.app,this.instrumentation.bind(this))}else{I();let{httpDev:B}=await import("../chunk-mmfstb0z.js"),J=new Q(this.app);this.server=await B(this.app,J.track(this.instrumentation.bind(this))),Y(J)}return this.server}stop(z={}){return this.stopping??=H({server:this.server,shutdownProviders:(B)=>this.app.shutdown(B),settings:{...this.settings??V(),...z}}),this.stopping}}export{b as isShuttingDown,P as Server};
2
+ import{wa as I}from"../chunk-8z37k28d.js";import{xa as A}from"../chunk-37jb6q13.js";import{Kg as b,Mg as V,Ng as H,Og as O,Pg as W}from"../chunk-et6thczw.js";import{Tg as k}from"../chunk-kzh8bkg5.js";import"../chunk-7dnb21s9.js";import{_g as $}from"../chunk-j2nx0dtq.js";var X=Symbol.for("gemi.server.devGeneration"),L={graceMs:1e4,providerTimeoutMs:5000};class Q{app;inFlight=0;waiters=new Set;constructor(z){this.app=z}track(z){return async(B,J)=>{this.inFlight++;try{return await z(B,J)}finally{if(this.inFlight--,this.inFlight===0)this.wake()}}}get pending(){return this.inFlight}async retire({graceMs:z,providerTimeoutMs:B}){try{await this.idle(z),await Promise.resolve().then(()=>this.app.shutdown({timeoutMs:B}))}catch(J){Z(J)}}idle(z){if(this.inFlight===0)return Promise.resolve();return new Promise((B)=>{let J=()=>{clearTimeout(K),this.waiters.delete(J),B()},K=setTimeout(J,z);this.waiters.add(J)})}wake(){for(let z of this.waiters)z()}}function Y(z,B=L){let J=globalThis,K=J[X];if(J[X]=z,!K||K===z||typeof K.retire!=="function")return Promise.resolve();let _=K.retire.bind(K);return Promise.resolve().then(()=>_(B)).catch(Z)}function Z(z){console.error("[gemi] Shutting down the application a reload replaced failed:",z)}class P{app;instrumentation;handleSignals;server;stopping;settings;constructor(z){this.app=new A({kernel:z.kernel}),this.handleSignals=z.handleSignals??!0,this.instrumentation=O(z.instrumentation??((B,J)=>J(B)))}async start(){process.env.ROOT_DIR=k();let z=Bun.env.NODE_ENV==="production";if(z){if(this.handleSignals)W(()=>this.stop());this.settings=V()}try{await this.app.waitForBoot()}catch(B){if(!z)this.app.shutdown({timeoutMs:L.providerTimeoutMs});throw B}if(z){let{httpProd:B}=await import("../chunk-bk8wjf00.js");this.server=await B(this.app,this.instrumentation.bind(this))}else{I();let{httpDev:B}=await import("../chunk-sh6pjjgc.js"),J=new Q(this.app);this.server=await B(this.app,J.track(this.instrumentation.bind(this))),Y(J)}return this.server}stop(z={}){return this.stopping??=H({server:this.server,shutdownProviders:(B)=>this.app.shutdown(B),settings:{...this.settings??V(),...z}}),this.stopping}}export{b as isShuttingDown,P as Server};
3
3
 
4
- //# debugId=21FAE25ECAFACBDC64756E2164756E21
4
+ //# debugId=D70F2A4BA2A018B664756E2164756E21
@@ -6,6 +6,6 @@
6
6
  "import { App } from \"../app\";\nimport { Kernel } from \"../kernel\";\nimport { projectRoot } from \"../support/discover\";\nimport { DevGeneration, devRetireDefaults, replaceDevGeneration } from \"./devReload\";\nimport {\n drain,\n installShutdownSignals,\n serveForShutdown,\n shutdownSettings,\n type ShutdownSettings,\n} from \"./shutdown\";\nimport { Instrumentation } from \"./types\";\nimport { watchEnv } from \"./watchEnv\";\n\nexport class Server {\n private app: App;\n private instrumentation: Instrumentation;\n private handleSignals: boolean;\n private server: Bun.Server<unknown> | undefined;\n private stopping: Promise<number> | undefined;\n private settings: ShutdownSettings | undefined;\n\n constructor(params: {\n kernel: new () => Kernel;\n instrumentation?: Instrumentation;\n /**\n * Drain on `SIGTERM`/`SIGINT` and exit — production only. `false` leaves\n * the signals to the app, which can call `stop()` itself.\n */\n handleSignals?: boolean;\n }) {\n this.app = new App({ kernel: params.kernel });\n this.handleSignals = params.handleSignals ?? true;\n this.instrumentation = serveForShutdown(\n params.instrumentation ??\n ((req: Request, next: (req: Request) => Promise<Response>) => next(req)),\n );\n }\n\n /**\n * Boots the application and starts listening. Resolves with the `Bun.Server`\n * once it is accepting requests.\n */\n async start(): Promise<Bun.Server<unknown>> {\n // Before the boot, not after: `httpDev`/`httpProd` set this too, but they\n // are imported below — after every provider's `boot()` has run — so a\n // service that resolves a path during boot used to read `undefined`\n // (`services/logging`, #423). Same rule `httpProd` computes it with, so\n // the assignment it makes a moment later is the same value.\n //\n // It doubles as the marker for \"this process is serving\": nothing else\n // sets `ROOT_DIR`, so a console command or a migration — which boot the\n // same providers through `runConsole` — can tell that it is not one, and\n // skip work that only a server should do at boot.\n process.env.ROOT_DIR = projectRoot();\n\n // Read once, ahead of the boot, so the signal handling below and the mode\n // that starts after the boot cannot disagree: whatever a provider's\n // `boot()` does to the environment, this process is the server it was\n // started as.\n const production = process.env.NODE_ENV === \"production\";\n\n if (production) {\n // Before the boot, not just before listening: the whole start-up is a\n // window in which a signal can arrive, and the slow part of it is the\n // boot — a connection pool, the config, the dictionaries. A rolling\n // update that `SIGTERM`s a pod two seconds in finds no listener\n // installed, and the default action for both signals is to kill the\n // process on the spot: no provider's `shutdown()`, no pool closed,\n // nothing flushed. Installing here makes that a drain like any other.\n // `stop()` handles a server that does not exist yet (nothing to close,\n // requests cannot be in flight) and `Application.shutdown` calls the\n // hooks of providers that registered but never booted, swallowing\n // whatever they throw — half a boot is exactly when a hook is most\n // likely to trip over something it expected `boot()` to have made.\n if (this.handleSignals) installShutdownSignals(() => this.stop());\n // Read now, so a bad value is warned about while the operator is\n // watching the deploy, not first at the shutdown it spoils — and so a\n // signal during the boot drains on the configured budget rather than on\n // whatever `stop()` reads at the time.\n this.settings = shutdownSettings();\n }\n\n // Phase two of the boot. `new App({ kernel })` already ran every provider's\n // synchronous `register()`; this awaits their `boot()` before the first\n // request is served.\n try {\n await this.app.waitForBoot();\n } catch (error) {\n // A `bun --hot` reload whose boot threw: the previous application keeps\n // serving, and this one never will, so whatever its providers opened\n // before the throw (the feature flags' warm-up, when they are on, has\n // opened the database pool by then) is closed now rather than left open\n // for good (#652). Production exits on a failed boot, which closes\n // everything anyway.\n if (!production) void this.app.shutdown({ timeoutMs: devRetireDefaults.providerTimeoutMs });\n throw error;\n }\n\n // Dynamic import so each mode only pulls in its own code: `httpDev` drags in\n // Vite (dev-only) and `httpProd` reads the built `dist/` manifests — neither\n // should load in the other environment.\n if (production) {\n const { httpProd } = await import(\"./httpProd.js\");\n this.server = await httpProd(this.app, this.instrumentation.bind(this));\n } else {\n // Dev only: reload `.env` into process.env on change so config edits take\n // effect without restarting the dev server (Bun reads `.env` only at\n // startup, even under `--hot`). No signal handling here: `bun --hot`\n // re-runs this on every reload, and a Ctrl+C in development should stop\n // the server now, not after a drain.\n watchEnv();\n const { httpDev } = await import(\"./httpDev.js\");\n const generation = new DevGeneration(this.app);\n this.server = await httpDev(this.app, generation.track(this.instrumentation.bind(this)));\n // Only now, with the new fetch handler live, has the application this\n // reload replaced stopped receiving requests; it is shut down once the\n // ones it is serving finish (#652). Not awaited, so the reload is not\n // held up by it.\n void replaceDevGeneration(generation);\n }\n return this.server;\n }\n\n /**\n * Stops the server gracefully and resolves with the exit code it earned: 0\n * when the in-flight requests drained and every provider shut down in time,\n * 1 otherwise. Does not exit the process — the signal handler does that.\n *\n * The order is `drain` in `./shutdown`: `isShuttingDown()` turns true, the\n * listener closes, in-flight requests finish under the grace period, then\n * every provider's `shutdown()` runs in reverse registration order.\n * Idempotent: a second call returns the first call's promise. Settings\n * default to the `GEMI_SHUTDOWN_*` environment variables.\n */\n stop(settings: Partial<ShutdownSettings> = {}): Promise<number> {\n this.stopping ??= drain({\n server: this.server,\n shutdownProviders: (options) => this.app.shutdown(options),\n settings: { ...(this.settings ?? shutdownSettings()), ...settings },\n });\n return this.stopping;\n }\n}\n"
7
7
  ],
8
8
  "mappings": "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",
9
- "debugId": "21FAE25ECAFACBDC64756E2164756E21",
9
+ "debugId": "D70F2A4BA2A018B664756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,7 +1,39 @@
1
1
  export type CronExpression = "@yearly" | "@annually" | "@monthly" | "@weekly" | "@daily" | "@midnight" | "@hourly" | (string & {});
2
+ import type { HeldLock } from "../lock/LockManager";
3
+ export type WithoutOverlapping = boolean | {
4
+ /**
5
+ * The lock's lease, in milliseconds: how long it outlives an instance
6
+ * that died holding it. Renewed every third of this while the tick
7
+ * runs, so it does not limit how long a tick may take. Default five
8
+ * minutes.
9
+ */
10
+ expiresAfter?: number;
11
+ };
2
12
  export declare class CronJob {
3
13
  name: string;
4
14
  cron: CronExpression;
15
+ /**
16
+ * Skips a tick while an earlier tick of this job is still running, on this
17
+ * instance or any other sharing the queue's storage. With the database
18
+ * queue driver that is a lock row in `gemi_locks`; with the memory driver
19
+ * it only covers this process.
20
+ *
21
+ * The lock is held across `onTick`, `callback` and `onComplete`, and handed
22
+ * to `callback` as its argument. If its lease is lost while the tick runs
23
+ * (the instance stalled past `expiresAfter`), `lock.lost` aborts and the
24
+ * scheduler logs it. Writes that must not land after that go through
25
+ * `lock.fence(...)`.
26
+ *
27
+ * It does not stop a second instance from running the same tick after the
28
+ * first one finished; `onOneServer` does.
29
+ */
30
+ withoutOverlapping: WithoutOverlapping;
31
+ /**
32
+ * Runs each tick on one instance only, across every instance sharing the
33
+ * queue's storage: the first to claim the tick's minute runs it, the others
34
+ * skip it. Assumes the instances' clocks agree to well within a minute.
35
+ */
36
+ onOneServer: boolean;
5
37
  /**
6
38
  * Decides whether this tick happens at all. Evaluated once per tick, before
7
39
  * anything else; returning `false` skips `onTick`, `callback` and
@@ -57,7 +89,11 @@ export declare class CronJob {
57
89
  * typecheck against it.
58
90
  */
59
91
  shouldRun(): Promise<boolean> | boolean;
60
- callback(): Promise<void> | void;
92
+ /**
93
+ * The tick's work. `lock` is the `withoutOverlapping` lock when the job
94
+ * declares one.
95
+ */
96
+ callback(_lock?: HeldLock): Promise<void> | void;
61
97
  onTick(): Promise<void> | void;
62
98
  onComplete(): Promise<void> | void;
63
99
  static exp(expression: CronExpression): CronExpression;
@@ -1 +1 @@
1
- {"version":3,"file":"CronJob.d.ts","sourceRoot":"","sources":["../../../services/cron/CronJob.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,WAAW,GACX,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,SAAS,GACT,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,qBAAa,OAAO;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACH,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAIvC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAChC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAElC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc;CAGtC"}
1
+ {"version":3,"file":"CronJob.d.ts","sourceRoot":"","sources":["../../../services/cron/CronJob.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,WAAW,GACX,UAAU,GACV,SAAS,GACT,QAAQ,GACR,WAAW,GACX,SAAS,GACT,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,MAAM,kBAAkB,GAC1B,OAAO,GACP;IACE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,qBAAa,OAAO;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,CAAC;IAErB;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,EAAE,kBAAkB,CAAS;IAE/C;;;;OAIG;IACH,WAAW,UAAS;IAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACH,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO;IAIvC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAChD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAC9B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAElC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc;CAGtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduleServiceProvider.d.ts","sourceRoot":"","sources":["../../../services/cron/ScheduleServiceProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAiBhE,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D,QAAQ;IAaR;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,IAAI;IAiCV;;;;;;;;;;;;;;;;;OAiBG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;CAsB/C"}
1
+ {"version":3,"file":"ScheduleServiceProvider.d.ts","sourceRoot":"","sources":["../../../services/cron/ScheduleServiceProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAiBhE,qBAAa,uBAAwB,SAAQ,eAAe;IAC1D,QAAQ;IAaR;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,IAAI;IAoCV;;;;;;;;;;;;;;;;;OAiBG;IACG,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;CAsB/C"}
@@ -1,3 +1,4 @@
1
+ import { LockManager } from "../lock/LockManager";
1
2
  import type { CronJob } from "./CronJob";
2
3
  import type { ScheduleConfig } from "./config";
3
4
  type BunCronHandle = Bun.CronJob;
@@ -19,7 +20,18 @@ declare global {
19
20
  * `onComplete` in particular runs whether `callback` returned or threw, closer
20
21
  * to a `finally` than to a success handler.
21
22
  */
22
- export declare function runTick(job: CronJob): Promise<void>;
23
+ export declare function runTick(job: CronJob, options?: TickOptions): Promise<void>;
24
+ /** What `runTick` needs beyond the job. */
25
+ export interface TickOptions {
26
+ /**
27
+ * The locks `withoutOverlapping` and `onOneServer` take. The scheduler
28
+ * passes the queue's, so they hold across instances sharing its storage;
29
+ * without one they hold within this process only.
30
+ */
31
+ locks?: () => LockManager;
32
+ /** The tick's time, for `onOneServer`. Default now. */
33
+ now?: number;
34
+ }
23
35
  /** A tick `drain` could not wait out. */
24
36
  export interface UnfinishedTick {
25
37
  /** The job's `name`. */
@@ -58,6 +70,7 @@ export declare class Scheduler {
58
70
  * start once the drain has begun.
59
71
  */
60
72
  private stopped;
73
+ private locks;
61
74
  constructor(config: Required<ScheduleConfig>);
62
75
  /**
63
76
  * The jobs this scheduler will run, or ran — declared in the config slice or
@@ -90,6 +103,11 @@ export declare class Scheduler {
90
103
  * are already registered.
91
104
  */
92
105
  useJobs(jobs: Array<new () => CronJob>): void;
106
+ /**
107
+ * Where `withoutOverlapping` and `onOneServer` take their locks. The
108
+ * provider hands over the queue's, resolved only when a tick needs them.
109
+ */
110
+ useLocks(locks: () => LockManager): void;
93
111
  /**
94
112
  * Schedules every configured job. Called from `ScheduleServiceProvider.boot()`
95
113
  * — never from the constructor — so a job body may resolve any service the
@@ -1 +1 @@
1
- {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../../services/cron/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK/C,KAAK,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;AAIjC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAE7E,OAAO,CAAC,MAAM,CAAC;IAMb,IAAI,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCzD;AAED,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,qBAAa,SAAS;IACpB,MAAM,CAAC,KAAK,SAAe;IAE3B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAA2B;IAE3C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuE;IAEhG;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC;IAI5C;;;;;;;;;;;;;;;;;OAiBG;IACH,IAAI,IAAI,IAAI,aAAa,CAAC,UAAU,OAAO,CAAC,CAE3C;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,OAAO,CAAC;IAItC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,GAAE,cAA6B;IAuExC;;;OAGG;IACH,IAAI;IAQJ;;;;;;;;;;;OAWG;IACG,KAAK,CAAC,SAAS,SAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkB/D,0DAA0D;IAC1D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,OAAO,CAAC,KAAK;CAWd"}
1
+ {"version":3,"file":"Scheduler.d.ts","sourceRoot":"","sources":["../../../services/cron/Scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK/C,KAAK,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;AAIjC,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAE7E,OAAO,CAAC,MAAM,CAAC;IAMb,IAAI,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DpF;AAED,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,WAAW,CAAC;IAC1B,uDAAuD;IACvD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAkCD,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,qBAAa,SAAS;IACpB,MAAM,CAAC,KAAK,SAAe;IAE3B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAA2B;IAE3C;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuE;IAEhG;;;;;;OAMG;IACH,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,KAAK,CAAkC;gBAEnC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC;IAI5C;;;;;;;;;;;;;;;;;OAiBG;IACH,IAAI,IAAI,IAAI,aAAa,CAAC,UAAU,OAAO,CAAC,CAE3C;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,OAAO,CAAC;IAItC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,WAAW;IAIjC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,GAAE,cAA6B;IAwExC;;;OAGG;IACH,IAAI;IAQJ;;;;;;;;;;;OAWG;IACG,KAAK,CAAC,SAAS,SAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkB/D,0DAA0D;IAC1D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,OAAO,CAAC,KAAK;CAWd"}
@@ -32,7 +32,11 @@ export { QueueManager, type DrainResult } from "./queue/QueueManager";
32
32
  export { MemoryQueueDriver } from "./queue/MemoryQueueDriver";
33
33
  export { DatabaseQueueDriver, type DatabaseQueueDriverOptions, type DatabaseJobStatus, } from "./queue/DatabaseQueueDriver";
34
34
  export type { QueueDriver, EnqueueJob, ClaimOptions, ClaimedJob, JobFailure, JobRelease, } from "./queue/QueueDriver";
35
- export { Job } from "./queue/Job";
35
+ export { Job, type JobThrottle, type JobConcurrency } from "./queue/Job";
36
+ export { LockManager, HeldLock, type AcquireOptions, type LockRunResult, } from "./lock/LockManager";
37
+ export { LockLostError, type LockStore } from "./lock/LockStore";
38
+ export { MemoryLockStore } from "./lock/MemoryLockStore";
39
+ export { DatabaseLockStore, type DatabaseLockStoreOptions, } from "./lock/DatabaseLockStore";
36
40
  export { EventServiceProvider } from "./events/EventServiceProvider";
37
41
  export { EventManager } from "./events/EventManager";
38
42
  export { Event, type EventClass } from "./events/Event";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Ya as gW}from"../chunk-zytmxty5.js";import{Za as d6,_a as xW,ab as MW,bb as LW,cb as DW,db as FW,eb as OW,fb as HW,gb as UW,hb as U,ib as SW,jb as fW,kb as RW,lb as kW,mb as _W,nb as CW,ob as vW,pb as bW,qb as IW,rb as TW,sb as qW,tb as hW,ub as PW,vb as wW,wb as AW,xb as yW,yb as VW}from"../chunk-svzdv2rf.js";import"../chunk-wc46df4w.js";import{Eb as s6,Fb as a6,Gb as t6,Hb as r6,Ib as e6,Jb as WW,Kb as YW,Lb as JW,Mb as ZW,Nb as GW,Ob as $W,Pb as QW,Qb as KW,Rb as XW,Sb as zW,Tb as BW}from"../chunk-g8tgp3ja.js";import{Ub as p6,Vb as l6,Wb as n6,Xb as i6,Yb as o6}from"../chunk-t4x7q9x8.js";import{bc as jW,cc as NW}from"../chunk-7bmctvep.js";import"../chunk-p0px3ym0.js";import{$c as f6,Ac as a4,Bc as g1,Bd as V6,Cc as $6,Fc as Q6,Gc as K6,Rc as j6,Sc as N6,Tc as L6,Uc as D6,Vc as F6,Wc as O6,Xc as H6,Yc as d4,Zc as U6,_c as S6,ad as R6,bd as k6,fd as _6,gd as C6,hd as v6,id as b6,jd as I6,kc as b0,kd as T6,ld as q6,md as h6,nd as P6,od as w6,qc as e0,rc as W6,sc as Y6,tc as J6,uc as Z6,vc as G6,vd as A6,zc as s4,zd as y6}from"../chunk-c37g1gzy.js";import"../chunk-sppjqk4n.js";import"../chunk-9pcsm8g3.js";import{Qe as V1,Re as A1,Se as Y1,ff as g,gf as w,kf as J1,lf as L1,mf as X6,nf as z6,of as B6,pf as x6,rf as M6,tf as D1}from"../chunk-sqd77ksy.js";import"../chunk-v6vsjdp7.js";import"../chunk-pwchwgkc.js";import"../chunk-qv2sdxbq.js";import"../chunk-vbfwvyb8.js";import"../chunk-fz805r97.js";import"../chunk-6qyc4e22.js";import{qg as g6,rg as c6,sg as E6,tg as m6,vg as u6}from"../chunk-fx02sqe2.js";import"../chunk-dwkhs81y.js";import{Ag as c}from"../chunk-cyze295m.js";import"../chunk-rgcfqq21.js";import"../chunk-241aehp3.js";import"../chunk-ffpm75zs.js";import"../chunk-5v2rx0rk.js";import"../chunk-bb8e7rhf.js";import{Ug as l4}from"../chunk-g6byqmdq.js";import{Buffer as p4}from"buffer";class n4 extends J1{client;config;constructor(...W){super();this.config=W}async connect(){let W=await import("../chunk-nvbbgbdk.js");return this.client??=new W.S3Client(...this.config),{sdk:W,client:this.client}}async put(W,{signal:Y}={}){Y?.throwIfAborted();let J,Z,G,$=process.env.BUCKET_NAME;if(W instanceof Blob)J=W,G=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,Z=W.type;else J=W.body,G=W.name,$=W.bucket??$,Z=W.contentType||(J instanceof Blob||J instanceof File?J.type:void 0);Z=Z||void 0;let Q=J instanceof p4?J:J instanceof Blob||J instanceof File?p4.from(await J.arrayBuffer()):"",{sdk:K,client:z}=await this.connect();return Y?.throwIfAborted(),await z.send(new K.PutObjectCommand({Bucket:$,Key:G,Body:Q,ContentType:Z}),{abortSignal:Y}),G}async delete(W){let Y=typeof W==="string"?W:W.name,J=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME;if(!Y)throw Error("Object name has to be specified");let{sdk:Z,client:G}=await this.connect();try{await G.send(new Z.DeleteObjectCommand({Bucket:J,Key:Y}))}catch($){if($?.name==="NoSuchKey"||$?.$metadata?.httpStatusCode===404)return;throw $}}async list(W){let{sdk:Y,client:J}=await this.connect();return await J.send(new Y.ListObjectsV2Command({Bucket:process.env.BUCKET_NAME,Prefix:W}))}async fetch(W,{signal:Y}={}){Y?.throwIfAborted();let J=process.env.BUCKET_NAME,Z;if(typeof W==="string")Z=W;else J=W.bucket??J,Z=W.name;if(!Z)throw Error("Object name has to be specified");let{sdk:G,client:$}=await this.connect();Y?.throwIfAborted();let Q=await $.send(new G.GetObjectCommand({Bucket:J,Key:Z}),{abortSignal:Y}),K=L1(Q.Body.transformToWebStream(),Y);return Y?.throwIfAborted(),new Response(K,{headers:{"Content-Type":Q.ContentType,"Content-Length":Q.ContentLength.toString(),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":Q.LastModified?.toUTCString()||"",ETag:Q.ETag||""}})}async read(W){let Y=typeof W==="string"?{name:W}:W,J=Y.bucket??process.env.BUCKET_NAME,{name:Z,range:G=null}=Y;if(!Z)throw Error("Object name has to be specified");let{sdk:$,client:Q}=await this.connect(),K;try{K=await Q.send(new $.GetObjectCommand({Bucket:J,Key:Z,Range:G?A1(G):void 0}))}catch(M){if(M?.name==="InvalidRange"||M?.$metadata?.httpStatusCode===416)throw new g(await this.size({name:Z,bucket:J}));if(M?.name==="NoSuchKey"||M?.$metadata?.httpStatusCode===404)throw new w(Z);throw M}let z=Y1(K.ContentRange),X=Boolean(z)&&K.$metadata?.httpStatusCode===206,x=z?.total??K.ContentLength??0;return{body:K.Body.transformToWebStream(),start:z?.start??0,end:z?.end??x-1,total:x,partial:X,type:K.ContentType??"application/octet-stream",etag:K.ETag||void 0,lastModified:K.LastModified,name:Z}}async size(W){let Y=typeof W==="string"?W:W.name,J=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME,{sdk:Z,client:G}=await this.connect();try{return(await G.send(new Z.HeadObjectCommand({Bucket:J,Key:Y}))).ContentLength??0}catch($){if($?.name==="NotFound"||$?.$metadata?.httpStatusCode===404)throw new w(Y);throw $}}}import{Buffer as i4}from"buffer";import{Readable as q0}from"stream";function y1(W){return W?.statusCode===404||W?.details?.errorCode==="BlobNotFound"||W?.code==="BlobNotFound"}function h0(W){return W?.statusCode===416||W?.details?.errorCode==="InvalidRange"||W?.code==="InvalidRange"}class o4 extends J1{config;serviceClientPromise=null;constructor(W={}){super();this.config=W}async serviceClient(){if(this.config.serviceClient)return this.config.serviceClient;return this.serviceClientPromise??=(async()=>{let W;try{W=await import("@azure/storage-blob")}catch{throw Error("AzureBlobDriver requires the '@azure/storage-blob' package. Install it with `bun add @azure/storage-blob`, or pass a pre-built `serviceClient`.")}let Y=this.config.connectionString??process.env.AZURE_STORAGE_CONNECTION_STRING;if(this.config.url)return new W.BlobServiceClient(this.config.url,this.config.credential);if(Y)return W.BlobServiceClient.fromConnectionString(Y);throw Error("AzureBlobDriver needs a connection string (AZURE_STORAGE_CONNECTION_STRING), a `url`, or a `serviceClient`.")})(),this.serviceClientPromise}async blob(W,Y){if(!W)throw Error("Object name has to be specified");let J=Y??this.config.container??process.env.BUCKET_NAME;if(!J)throw Error("AzureBlobDriver needs a container name, from `bucket`, the `container` config, or BUCKET_NAME.");return(await this.serviceClient()).getContainerClient(J).getBlockBlobClient(W)}async put(W,{signal:Y}={}){Y?.throwIfAborted();let J,Z,G,$;if(W instanceof Blob)J=W,G=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,Z=W.type;else J=W.body,G=W.name,$=W.bucket,Z=W.contentType??(J instanceof Blob||J instanceof File?J.type:void 0);let Q=J instanceof i4?J:i4.from(await J.arrayBuffer()),K=await this.blob(G,$);return Y?.throwIfAborted(),await K.uploadData(Q,{blobHTTPHeaders:Z?{blobContentType:Z}:void 0,abortSignal:Y}),G}async list(W){let Y=this.config.container??process.env.BUCKET_NAME,Z=(await this.serviceClient()).getContainerClient(Y),G=[];for await(let $ of Z.listBlobsFlat({prefix:W}))G.push($.name);return G}async fetch(W,{signal:Y}={}){Y?.throwIfAborted();let J=await this.download(typeof W==="string"?{name:W}:{name:W.name,bucket:W.bucket},Y);return new Response(J.body,{headers:{"Content-Type":J.type,"Content-Length":String(J.total),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":J.lastModified?.toUTCString()??"",ETag:J.etag??""}})}async read(W){return this.download(typeof W==="string"?{name:W}:W)}async download(W,Y){let{name:J,bucket:Z,range:G=null}=W,$=await this.blob(J,Z);Y?.throwIfAborted();let Q,K,z=G?.kind==="suffix"||G?.kind==="offset"&&G.end===null&&G.start===0;if(G&&z){let b=await this.size({name:J,bucket:Z}),W1=V1(G,b);if(!W1)throw new g(b);Q=W1.start,K=W1.length}else if(G?.kind==="offset")Q=G.start,K=G.end===null?void 0:G.end-G.start+1;let X;try{X=await $.download(Q,K,Y?{abortSignal:Y}:void 0)}catch(b){if(h0(b))throw new g(await this.size({name:J,bucket:Z}));if(y1(b))throw new w(J);throw b}let x=Y1(X.contentRange),M=Boolean(x),R=x?.total??X.contentLength??0,v=await P0(X);if(v instanceof ReadableStream)v=L1(v,Y);return Y?.throwIfAborted(),{body:v,start:x?.start??0,end:x?.end??R-1,total:R,partial:M,type:X.contentType??"application/octet-stream",etag:X.etag||void 0,lastModified:X.lastModified,name:J}}async size(W){let Y=typeof W==="string"?W:W.name,J=typeof W==="string"?void 0:W.bucket,Z=await this.blob(Y,J);try{return(await Z.getProperties()).contentLength??0}catch(G){if(y1(G))throw new w(Y);throw G}}async delete(W){let Y=typeof W==="string"?W:W.name,J=typeof W==="string"?void 0:W.bucket,Z=await this.blob(Y,J);try{await Z.delete()}catch(G){if(y1(G))return;throw G}}}async function P0(W){if(W.blobBody)return await W.blobBody;if(W.readableStreamBody)return q0.toWeb(W.readableStreamBody);return null}var w0=`
2
+ import{Ya as dW}from"../chunk-zytmxty5.js";import{Za as i6,_a as DW,ab as FW,bb as UW,cb as SW,db as fW,eb as RW,fb as kW,gb as _W,hb as U,ib as CW,jb as vW,kb as bW,lb as IW,mb as TW,nb as qW,ob as hW,pb as PW,qb as wW,rb as AW,sb as yW,tb as VW,ub as gW,vb as cW,wb as EW,xb as mW,yb as uW}from"../chunk-bk4f99s4.js";import"../chunk-wc46df4w.js";import{Eb as YW,Fb as JW,Gb as ZW,Hb as GW,Ib as $W,Jb as QW,Kb as KW,Lb as XW,Mb as zW,Nb as BW,Ob as xW,Pb as MW,Qb as jW,Rb as NW,Sb as LW}from"../chunk-j9x86xsc.js";import{Tb as n6,Ub as o6,Vb as s6,Wb as a6,Xb as t6,Yb as r6,Zb as e6,_b as WW}from"../chunk-zyw42zny.js";import{dc as OW,ec as HW}from"../chunk-safv6h9x.js";import"../chunk-7kedxtbp.js";import{$c as d4,Bc as s4,Cc as a4,Cd as c6,Dc as g1,Ec as $6,Ed as E6,Hc as Q6,Ic as K6,Uc as D6,Vc as F6,Wc as O6,Xc as H6,Yc as U6,Zc as S6,_c as f6,ad as R6,bd as k6,cd as _6,dd as C6,ed as v6,id as b6,jd as I6,kd as T6,ld as q6,mc as b0,md as h6,nd as P6,od as w6,pd as A6,qd as y6,rd as V6,sc as e0,tc as W6,uc as Y6,vc as J6,wc as Z6,xc as G6,yd as g6}from"../chunk-ykbehyp9.js";import"../chunk-jxhznqhe.js";import"../chunk-adm5g1v8.js";import{Te as V1,Ue as A1,Ve as Y1,if as g,jf as w,nf as J1,of as L1,pf as X6,qf as z6,rf as B6,sf as x6,uf as M6,wf as D1}from"../chunk-mym0zxxp.js";import"../chunk-9xf2fx98.js";import"../chunk-eqtsfvvd.js";import{Ff as j6,Gf as N6,Hf as L6}from"../chunk-br9p390p.js";import"../chunk-n4807648.js";import"../chunk-ghz3e8b7.js";import"../chunk-7vjbebst.js";import"../chunk-3fr22rtg.js";import{Bg as l6,wg as m6,xg as u6,yg as d6,zg as p6}from"../chunk-z9ydpvc8.js";import"../chunk-m3z60v9d.js";import{Hg as c}from"../chunk-7hfv5n00.js";import"../chunk-qxda7pzm.js";import"../chunk-et6thczw.js";import"../chunk-kzh8bkg5.js";import"../chunk-7dnb21s9.js";import{_g as l4}from"../chunk-j2nx0dtq.js";import{Buffer as p4}from"buffer";class n4 extends J1{client;config;constructor(...W){super();this.config=W}async connect(){let W=await import("../chunk-nqabsqty.js");return this.client??=new W.S3Client(...this.config),{sdk:W,client:this.client}}async put(W,{signal:Y}={}){Y?.throwIfAborted();let J,Z,G,$=process.env.BUCKET_NAME;if(W instanceof Blob)J=W,G=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,Z=W.type;else J=W.body,G=W.name,$=W.bucket??$,Z=W.contentType||(J instanceof Blob||J instanceof File?J.type:void 0);Z=Z||void 0;let Q=J instanceof p4?J:J instanceof Blob||J instanceof File?p4.from(await J.arrayBuffer()):"",{sdk:K,client:z}=await this.connect();return Y?.throwIfAborted(),await z.send(new K.PutObjectCommand({Bucket:$,Key:G,Body:Q,ContentType:Z}),{abortSignal:Y}),G}async delete(W){let Y=typeof W==="string"?W:W.name,J=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME;if(!Y)throw Error("Object name has to be specified");let{sdk:Z,client:G}=await this.connect();try{await G.send(new Z.DeleteObjectCommand({Bucket:J,Key:Y}))}catch($){if($?.name==="NoSuchKey"||$?.$metadata?.httpStatusCode===404)return;throw $}}async list(W){let{sdk:Y,client:J}=await this.connect();return await J.send(new Y.ListObjectsV2Command({Bucket:process.env.BUCKET_NAME,Prefix:W}))}async fetch(W,{signal:Y}={}){Y?.throwIfAborted();let J=process.env.BUCKET_NAME,Z;if(typeof W==="string")Z=W;else J=W.bucket??J,Z=W.name;if(!Z)throw Error("Object name has to be specified");let{sdk:G,client:$}=await this.connect();Y?.throwIfAborted();let Q=await $.send(new G.GetObjectCommand({Bucket:J,Key:Z}),{abortSignal:Y}),K=L1(Q.Body.transformToWebStream(),Y);return Y?.throwIfAborted(),new Response(K,{headers:{"Content-Type":Q.ContentType,"Content-Length":Q.ContentLength.toString(),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":Q.LastModified?.toUTCString()||"",ETag:Q.ETag||""}})}async read(W){let Y=typeof W==="string"?{name:W}:W,J=Y.bucket??process.env.BUCKET_NAME,{name:Z,range:G=null}=Y;if(!Z)throw Error("Object name has to be specified");let{sdk:$,client:Q}=await this.connect(),K;try{K=await Q.send(new $.GetObjectCommand({Bucket:J,Key:Z,Range:G?A1(G):void 0}))}catch(M){if(M?.name==="InvalidRange"||M?.$metadata?.httpStatusCode===416)throw new g(await this.size({name:Z,bucket:J}));if(M?.name==="NoSuchKey"||M?.$metadata?.httpStatusCode===404)throw new w(Z);throw M}let z=Y1(K.ContentRange),X=Boolean(z)&&K.$metadata?.httpStatusCode===206,x=z?.total??K.ContentLength??0;return{body:K.Body.transformToWebStream(),start:z?.start??0,end:z?.end??x-1,total:x,partial:X,type:K.ContentType??"application/octet-stream",etag:K.ETag||void 0,lastModified:K.LastModified,name:Z}}async size(W){let Y=typeof W==="string"?W:W.name,J=(typeof W==="string"?void 0:W.bucket)??process.env.BUCKET_NAME,{sdk:Z,client:G}=await this.connect();try{return(await G.send(new Z.HeadObjectCommand({Bucket:J,Key:Y}))).ContentLength??0}catch($){if($?.name==="NotFound"||$?.$metadata?.httpStatusCode===404)throw new w(Y);throw $}}}import{Buffer as i4}from"buffer";import{Readable as q0}from"stream";function y1(W){return W?.statusCode===404||W?.details?.errorCode==="BlobNotFound"||W?.code==="BlobNotFound"}function h0(W){return W?.statusCode===416||W?.details?.errorCode==="InvalidRange"||W?.code==="InvalidRange"}class o4 extends J1{config;serviceClientPromise=null;constructor(W={}){super();this.config=W}async serviceClient(){if(this.config.serviceClient)return this.config.serviceClient;return this.serviceClientPromise??=(async()=>{let W;try{W=await import("@azure/storage-blob")}catch{throw Error("AzureBlobDriver requires the '@azure/storage-blob' package. Install it with `bun add @azure/storage-blob`, or pass a pre-built `serviceClient`.")}let Y=this.config.connectionString??process.env.AZURE_STORAGE_CONNECTION_STRING;if(this.config.url)return new W.BlobServiceClient(this.config.url,this.config.credential);if(Y)return W.BlobServiceClient.fromConnectionString(Y);throw Error("AzureBlobDriver needs a connection string (AZURE_STORAGE_CONNECTION_STRING), a `url`, or a `serviceClient`.")})(),this.serviceClientPromise}async blob(W,Y){if(!W)throw Error("Object name has to be specified");let J=Y??this.config.container??process.env.BUCKET_NAME;if(!J)throw Error("AzureBlobDriver needs a container name, from `bucket`, the `container` config, or BUCKET_NAME.");return(await this.serviceClient()).getContainerClient(J).getBlockBlobClient(W)}async put(W,{signal:Y}={}){Y?.throwIfAborted();let J,Z,G,$;if(W instanceof Blob)J=W,G=`${Bun.randomUUIDv7()}.${W.type.split("/")[1].split(";")[0]}`,Z=W.type;else J=W.body,G=W.name,$=W.bucket,Z=W.contentType??(J instanceof Blob||J instanceof File?J.type:void 0);let Q=J instanceof i4?J:i4.from(await J.arrayBuffer()),K=await this.blob(G,$);return Y?.throwIfAborted(),await K.uploadData(Q,{blobHTTPHeaders:Z?{blobContentType:Z}:void 0,abortSignal:Y}),G}async list(W){let Y=this.config.container??process.env.BUCKET_NAME,Z=(await this.serviceClient()).getContainerClient(Y),G=[];for await(let $ of Z.listBlobsFlat({prefix:W}))G.push($.name);return G}async fetch(W,{signal:Y}={}){Y?.throwIfAborted();let J=await this.download(typeof W==="string"?{name:W}:{name:W.name,bucket:W.bucket},Y);return new Response(J.body,{headers:{"Content-Type":J.type,"Content-Length":String(J.total),"Cache-Control":"private, max-age=12000, must-revalidate","Last-Modified":J.lastModified?.toUTCString()??"",ETag:J.etag??""}})}async read(W){return this.download(typeof W==="string"?{name:W}:W)}async download(W,Y){let{name:J,bucket:Z,range:G=null}=W,$=await this.blob(J,Z);Y?.throwIfAborted();let Q,K,z=G?.kind==="suffix"||G?.kind==="offset"&&G.end===null&&G.start===0;if(G&&z){let b=await this.size({name:J,bucket:Z}),W1=V1(G,b);if(!W1)throw new g(b);Q=W1.start,K=W1.length}else if(G?.kind==="offset")Q=G.start,K=G.end===null?void 0:G.end-G.start+1;let X;try{X=await $.download(Q,K,Y?{abortSignal:Y}:void 0)}catch(b){if(h0(b))throw new g(await this.size({name:J,bucket:Z}));if(y1(b))throw new w(J);throw b}let x=Y1(X.contentRange),M=Boolean(x),R=x?.total??X.contentLength??0,v=await P0(X);if(v instanceof ReadableStream)v=L1(v,Y);return Y?.throwIfAborted(),{body:v,start:x?.start??0,end:x?.end??R-1,total:R,partial:M,type:X.contentType??"application/octet-stream",etag:X.etag||void 0,lastModified:X.lastModified,name:J}}async size(W){let Y=typeof W==="string"?W:W.name,J=typeof W==="string"?void 0:W.bucket,Z=await this.blob(Y,J);try{return(await Z.getProperties()).contentLength??0}catch(G){if(y1(G))throw new w(Y);throw G}}async delete(W){let Y=typeof W==="string"?W:W.name,J=typeof W==="string"?void 0:W.bucket,Z=await this.blob(Y,J);try{await Z.delete()}catch(G){if(y1(G))return;throw G}}}async function P0(W){if(W.blobBody)return await W.blobBody;if(W.readableStreamBody)return q0.toWeb(W.readableStreamBody);return null}var w0=`
3
3
  local currentKey = KEYS[1]
4
4
  local previousKey = KEYS[2]
5
5
  local limit = tonumber(ARGV[1])
@@ -32,6 +32,6 @@ ${W.resolution}.`;console.warn(J),console.warn("To disable this message, import
32
32
  `)return this.emit(B.DataKeepAlive);this.parser.push(Y.toString())}),this.resetKeepAliveTimeout()}initEventsFromParser(){let W=this.requestData.payloadIsError;this.parser.on(y.ParsedData,(Y)=>{if(W&&W(Y))this.emit(B.DataError,Y),this.emit(B.Error,{type:B.DataError,error:Y,message:"Twitter sent a payload that is detected as an error payload."});else this.emit(B.Data,Y)}),this.parser.on(y.ParseError,(Y)=>{this.emit(B.TweetParseError,Y),this.emit(B.Error,{type:B.TweetParseError,error:Y,message:"Failed to parse stream data."})})}resetKeepAliveTimeout(){if(this.unbindKeepAliveTimeout(),this.keepAliveTimeoutMs!==1/0)this.keepAliveTimeout=setTimeout(this.onKeepAliveTimeout,this.keepAliveTimeoutMs)}onKeepAliveTimeout(){this.emit(B.ConnectionLost),this.onConnectionError()}unbindTimeouts(){this.unbindRetryTimeout(),this.unbindKeepAliveTimeout()}unbindKeepAliveTimeout(){if(this.keepAliveTimeout)clearTimeout(this.keepAliveTimeout),this.keepAliveTimeout=void 0}unbindRetryTimeout(){if(this.retryTimeout)clearTimeout(this.retryTimeout),this.retryTimeout=void 0}closeWithoutEmit(){if(this.unbindTimeouts(),this.res)this.res.removeAllListeners(),this.res.destroy();if(this.req)this.req.removeAllListeners(),this.req.destroy()}close(){this.emit(B.ConnectionClosed),this.closeWithoutEmit()}destroy(){this.removeAllListeners(),this.close()}async clone(){let Y=await new x1(this.requestData).makeRequestAsStream(),J=this.eventNames();for(let Z of J){let G=this.listeners(Z);for(let $ of G)Y.on(Z,$)}return Y}async connect(W={}){if(typeof W.autoReconnect<"u")this.autoReconnect=W.autoReconnect;if(typeof W.autoReconnectRetries<"u")this.autoReconnectRetries=W.autoReconnectRetries==="unlimited"?1/0:W.autoReconnectRetries;if(typeof W.keepAliveTimeout<"u")this.keepAliveTimeoutMs=W.keepAliveTimeout==="disable"?1/0:W.keepAliveTimeout;if(typeof W.nextRetryTimeout<"u")this.nextRetryTimeout=W.nextRetryTimeout;this.unbindTimeouts();try{await this.reconnect()}catch(Y){if(this.emit(B.ConnectError,0),this.emit(B.Error,{type:B.ConnectError,error:Y,message:"Connect error - Initial connection just failed."}),this.autoReconnect)this.makeAutoReconnectRetry(0,Y);else throw Y}return this}async reconnect(){if(this.connectionProcessRunning)throw Error("Connection process is already running.");this.connectionProcessRunning=!0;try{let W=!0;if(this.req)W=!1,this.closeWithoutEmit();let{req:Y,res:J,originalResponse:Z}=await new x1(this.requestData).makeRequestAndResolveWhenReady();this.req=Y,this.res=J,this.originalResponse=Z,this.emit(W?B.Connected:B.Reconnected),this.parser.reset(),this.initEventsFromRequest()}finally{this.connectionProcessRunning=!1}}async onConnectionError(W=0){if(this.unbindTimeouts(),this.closeWithoutEmit(),!this.autoReconnect){this.emit(B.ConnectionClosed);return}if(W>=this.autoReconnectRetries){this.emit(B.ReconnectLimitExceeded),this.emit(B.ConnectionClosed);return}try{this.emit(B.ReconnectAttempt,W),await this.reconnect()}catch(Y){this.emit(B.ReconnectError,W),this.emit(B.Error,{type:B.ReconnectError,error:Y,message:`Reconnect error - ${W+1} attempts made yet.`}),this.makeAutoReconnectRetry(W,Y)}}makeAutoReconnectRetry(W,Y){let J=this.nextRetryTimeout(W+1,Y);this.retryTimeout=setTimeout(()=>{this.onConnectionError(W+1)},J)}async*[Symbol.asyncIterator](){let W=new K0(this);try{while(!0){if(!this.req||this.req.aborted)throw Error("Connection closed");if(W.hasStack())yield*W.popStack();let{type:Y,payload:J}=await W.nextEvent();if(Y==="error")throw J}}finally{W.destroy()}}}var S1=z0;function B0(W){var Y;if(!((Y=W.clientSettings.plugins)===null||Y===void 0?void 0:Y.length))return!1;for(let J of W.clientSettings.plugins)if(J.onRequestError||J.onResponseError)return!0;return!1}async function x0(W,Y,J,Z){let G;if(Z instanceof Q1||Z instanceof K1)G=await this.applyPluginMethod("onRequestError",{client:this,url:this.getUrlObjectFromUrlString(W.url),params:W,computedParams:Y,requestOptions:J,error:Z});else if(Z instanceof X1)G=await this.applyPluginMethod("onResponseError",{client:this,url:this.getUrlObjectFromUrlString(W.url),params:W,computedParams:Y,requestOptions:J,error:Z});if(G&&G instanceof z1)return G.value;return Promise.reject(Z)}import*as N0 from"crypto";class S{constructor(W){this.nonceLength=32,this.consumerKeys=W.consumerKeys}static percentEncode(W){return encodeURIComponent(W).replace(/!/g,"%21").replace(/\*/g,"%2A").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29")}hash(W,Y){return N0.createHmac("sha1",Y).update(W).digest("base64")}authorize(W,Y={}){let J={oauth_consumer_key:this.consumerKeys.key,oauth_nonce:this.getNonce(),oauth_signature_method:"HMAC-SHA1",oauth_timestamp:this.getTimestamp(),oauth_version:"1.0"};if(Y.key!==void 0)J.oauth_token=Y.key;if(!W.data)W.data={};return J.oauth_signature=this.getSignature(W,Y.secret,J),J}toHeader(W){let Y=j0(W),J="OAuth ";for(let Z of Y){if(Z.key.indexOf("oauth_")!==0)continue;J+=S.percentEncode(Z.key)+'="'+S.percentEncode(Z.value)+'",'}return{Authorization:J.slice(0,J.length-1)}}getNonce(){let Y="";for(let J=0;J<this.nonceLength;J++)Y+="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"[Math.trunc(Math.random()*62)];return Y}getTimestamp(){return Math.trunc(new Date().getTime()/1000)}getSignature(W,Y,J){return this.hash(this.getBaseString(W,J),this.getSigningKey(Y))}getSigningKey(W){return S.percentEncode(this.consumerKeys.secret)+"&"+S.percentEncode(W||"")}getBaseString(W,Y){return W.method.toUpperCase()+"&"+S.percentEncode(this.getBaseUrl(W.url))+"&"+S.percentEncode(this.getParameterString(W,Y))}getParameterString(W,Y){let J=j0(o0(M0(Y,M0(W.data,i0(W.url))))),Z="";for(let{key:G,value:$}of J)if($&&Array.isArray($)){$.sort();let Q="";$.forEach((K,z)=>{if(Q+=G+"="+K,z<$.length)Q+="&"}),Z+=Q}else Z+=G+"="+$+"&";return Z.slice(0,Z.length-1)}getBaseUrl(W){return W.split("?")[0]}}var M1=S;function M0(W,Y){return{...W||{},...Y||{}}}function j0(W){return Object.keys(W).sort().map((Y)=>({key:Y,value:W[Y]}))}function n0(W){let Y=W.split("&"),J={};for(let Z of Y){let[G,$=""]=Z.split("=");if(J[G]){if(!Array.isArray(J[G]))J[G]=[J[G]];J[G].push(decodeURIComponent($))}else J[G]=decodeURIComponent($)}return J}function i0(W){let Y=W.split("?");if(Y.length===1)return{};return n0(Y[1])}function o0(W){let Y={};for(let J in W){let Z=W[J];if(Z&&Array.isArray(Z))Z=Z.map((G)=>S.percentEncode(G));else Z=S.percentEncode(Z);Y[S.percentEncode(J)]=Z}return Y}class f{constructor(){this._boundary="",this._chunks=[]}bodyAppend(...W){let Y=W.map((J)=>J instanceof Buffer?J:Buffer.from(J));this._chunks.push(...Y)}append(W,Y,J){let Z=Y instanceof Buffer?Y:Y.toString(),G=this.getMultipartHeader(W,Z,J);this.bodyAppend(G,Z,f.LINE_BREAK)}getHeaders(){return{"content-type":"multipart/form-data; boundary="+this.getBoundary()}}getLength(){return this._chunks.reduce((W,Y)=>W+Y.length,this.getMultipartFooter().length)}getBuffer(){let W=[...this._chunks,this.getMultipartFooter()],Y=Buffer.alloc(this.getLength()),J=0;for(let Z of W)for(let G=0;G<Z.length;J++,G++)Y[J]=Z[G];return Y}getBoundary(){if(!this._boundary)this.generateBoundary();return this._boundary}generateBoundary(){let W="--------------------------";for(let Y=0;Y<24;Y++)W+=Math.floor(Math.random()*10).toString(16);this._boundary=W}getMultipartHeader(W,Y,J){if(!J)J=Y instanceof Buffer?f.DEFAULT_CONTENT_TYPE:"";let Z={"Content-Disposition":["form-data",`name="${W}"`],"Content-Type":J},G="";for(let[$,Q]of Object.entries(Z)){if(!Q.length)continue;G+=$+": "+H1(Q).join("; ")+f.LINE_BREAK}return"--"+this.getBoundary()+f.LINE_BREAK+G+f.LINE_BREAK}getMultipartFooter(){if(this._footerChunk)return this._footerChunk;return this._footerChunk=Buffer.from("--"+this.getBoundary()+"--"+f.LINE_BREAK)}}f.LINE_BREAK=`\r
33
33
  `;f.DEFAULT_CONTENT_TYPE="application/octet-stream";class n1{static formatQueryToString(W){let Y={};for(let J in W)if(typeof W[J]==="string")Y[J]=W[J];else if(typeof W[J]<"u")Y[J]=String(W[J]);return Y}static autoDetectBodyType(W){if(W.pathname.startsWith("/2/")||W.pathname.startsWith("/labs/2/")){if(W.password.startsWith("/2/oauth2"))return"url";return"json"}if(W.hostname==="upload.x.com"){if(W.pathname==="/1.1/media/upload.json")return"form-data";return"json"}let Y=W.pathname.split("/1.1/",2)[1];if(this.JSON_1_1_ENDPOINTS.has(Y))return"json";return"url"}static addQueryParamsToUrl(W,Y){let J=Object.entries(Y);if(J.length){let Z="";for(let[G,$]of J)Z+=(Z.length?"&":"?")+`${M1.percentEncode(G)}=${M1.percentEncode($)}`;W.search=Z}}static constructBodyParams(W,Y,J){if(W instanceof Buffer)return W;if(J==="json"){if(!Y["content-type"])Y["content-type"]="application/json;charset=UTF-8";return JSON.stringify(W)}else if(J==="url"){if(!Y["content-type"])Y["content-type"]="application/x-www-form-urlencoded;charset=UTF-8";if(Object.keys(W).length)return new URLSearchParams(W).toString().replace(/\*/g,"%2A");return""}else if(J==="raw")throw Error("You can only use raw body mode with Buffers. To give a string, use Buffer.from(str).");else{let Z=new f;for(let G in W)Z.append(G,W[G]);if(!Y["content-type"]){let G=Z.getHeaders();Y["content-type"]=G["content-type"]}return Z.getBuffer()}}static setBodyLengthHeader(W,Y){var J;if(W.headers=(J=W.headers)!==null&&J!==void 0?J:{},typeof Y==="string")W.headers["content-length"]=Buffer.byteLength(Y);else W.headers["content-length"]=Y.length}static isOAuthSerializable(W){return!(W instanceof Buffer)}static mergeQueryAndBodyForOAuth(W,Y){let J={};for(let Z in W)J[Z]=W[Z];if(this.isOAuthSerializable(Y))for(let Z in Y){let G=Y[Z];if(this.isOAuthSerializable(G))J[Z]=typeof G==="object"&&G!==null&&"toString"in G?G.toString():G}return J}static moveUrlQueryParamsIntoObject(W,Y){for(let[J,Z]of W.searchParams)Y[J]=Z;return W.search="",W}static applyRequestParametersToUrl(W,Y){return W.pathname=W.pathname.replace(/:([A-Z_-]+)/ig,(J,Z)=>{if(Y[Z]!==void 0)return String(Y[Z]);return J}),W}}n1.JSON_1_1_ENDPOINTS=new Set(["direct_messages/events/new.json","direct_messages/welcome_messages/new.json","direct_messages/welcome_messages/rules/new.json","media/metadata/create.json","collections/entries/curate.json"]);var O=n1;import*as L0 from"crypto";class V{static getCodeVerifier(){return this.generateRandomString(128)}static getCodeChallengeFromVerifier(W){return this.escapeBase64Url(L0.createHash("sha256").update(W).digest("base64"))}static getAuthHeader(W,Y){let J=encodeURIComponent(W)+":"+encodeURIComponent(Y);return Buffer.from(J).toString("base64")}static generateRandomString(W){let Y="",J="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";for(let Z=0;Z<W;Z++)Y+=J[Math.floor(Math.random()*J.length)];return Y}static escapeBase64Url(W){return W.replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}}class l{constructor(W){if(this.rateLimits={},this.clientSettings={},W)this.clientSettings=W}getRateLimits(){return this.rateLimits}saveRateLimit(W,Y){this.rateLimits[W]=Y}async send(W){var Y,J,Z,G,$;if((Y=this.clientSettings.plugins)===null||Y===void 0?void 0:Y.length){let M=await this.applyPreRequestConfigHooks(W);if(M)return M}let Q=this.getHttpRequestArgs(W),K={method:Q.method,headers:Q.headers,timeout:W.timeout,agent:this.clientSettings.httpAgent},z=W.enableRateLimitSave!==!1;if(Q.body)O.setBodyLengthHeader(K,Q.body);if((J=this.clientSettings.plugins)===null||J===void 0?void 0:J.length)await this.applyPreRequestHooks(W,Q,K);let X=new x1({url:Q.url,options:K,body:Q.body,rateLimitSaver:z?this.saveRateLimit.bind(this,Q.rawUrl):void 0,requestEventDebugHandler:W.requestEventDebugHandler,compression:(G=(Z=W.compression)!==null&&Z!==void 0?Z:this.clientSettings.compression)!==null&&G!==void 0?G:!0,forceParseMode:W.forceParseMode}).makeRequest();if(B0(this))X=this.applyResponseErrorHooks(W,Q,K,X);let x=await X;if(($=this.clientSettings.plugins)===null||$===void 0?void 0:$.length){let M=await this.applyPostRequestHooks(W,Q,K,x);if(M)return M.value}return x}sendStream(W){var Y,J;if(this.clientSettings.plugins)this.applyPreStreamRequestConfigHooks(W);let Z=this.getHttpRequestArgs(W),G={method:Z.method,headers:Z.headers,agent:this.clientSettings.httpAgent},$=W.enableRateLimitSave!==!1,Q=W.autoConnect!==!1;if(Z.body)O.setBodyLengthHeader(G,Z.body);let K={url:Z.url,options:G,body:Z.body,rateLimitSaver:$?this.saveRateLimit.bind(this,Z.rawUrl):void 0,payloadIsError:W.payloadIsError,compression:(J=(Y=W.compression)!==null&&Y!==void 0?Y:this.clientSettings.compression)!==null&&J!==void 0?J:!0},z=new S1(K);if(!Q)return z;return z.connect()}initializeToken(W){if(typeof W==="string")this.bearerToken=W;else if(typeof W==="object"&&"appKey"in W){if(this.consumerToken=W.appKey,this.consumerSecret=W.appSecret,W.accessToken&&W.accessSecret)this.accessToken=W.accessToken,this.accessSecret=W.accessSecret;this._oauth=this.buildOAuth()}else if(typeof W==="object"&&"username"in W){let Y=encodeURIComponent(W.username)+":"+encodeURIComponent(W.password);this.basicToken=Buffer.from(Y).toString("base64")}else if(typeof W==="object"&&"clientId"in W)this.clientId=W.clientId,this.clientSecret=W.clientSecret}getActiveTokens(){if(this.bearerToken)return{type:"oauth2",bearerToken:this.bearerToken};else if(this.basicToken)return{type:"basic",token:this.basicToken};else if(this.consumerSecret&&this._oauth)return{type:"oauth-1.0a",appKey:this.consumerToken,appSecret:this.consumerSecret,accessToken:this.accessToken,accessSecret:this.accessSecret};else if(this.clientId)return{type:"oauth2-user",clientId:this.clientId};return{type:"none"}}buildOAuth(){if(!this.consumerSecret||!this.consumerToken)throw Error("Invalid consumer tokens");return new M1({consumerKeys:{key:this.consumerToken,secret:this.consumerSecret}})}getOAuthAccessTokens(){if(!this.accessSecret||!this.accessToken)return;return{key:this.accessToken,secret:this.accessSecret}}getPlugins(){var W;return(W=this.clientSettings.plugins)!==null&&W!==void 0?W:[]}hasPlugins(){var W;return!!((W=this.clientSettings.plugins)===null||W===void 0?void 0:W.length)}async applyPluginMethod(W,Y){var J;let Z;for(let G of this.getPlugins()){let $=await((J=G[W])===null||J===void 0?void 0:J.call(G,Y));if($&&$ instanceof z1)Z=$}return Z}writeAuthHeaders({headers:W,bodyInSignature:Y,url:J,method:Z,query:G,body:$}){if(W={...W},this.bearerToken)W.Authorization="Bearer "+this.bearerToken;else if(this.basicToken)W.Authorization="Basic "+this.basicToken;else if(this.clientId&&this.clientSecret)W.Authorization="Basic "+V.getAuthHeader(this.clientId,this.clientSecret);else if(this.consumerSecret&&this._oauth){let Q=Y?O.mergeQueryAndBodyForOAuth(G,$):G,K=this._oauth.authorize({url:J.toString(),method:Z,data:Q},this.getOAuthAccessTokens());W={...W,...this._oauth.toHeader(K)}}return W}getUrlObjectFromUrlString(W){if(!W.startsWith("http"))W="https://"+W;return new URL(W)}getHttpRequestArgs({url:W,method:Y,query:J={},body:Z={},headers:G,forceBodyMode:$,enableAuth:Q,params:K}){let z=void 0;if(Y=Y.toUpperCase(),G=G!==null&&G!==void 0?G:{},!G["x-user-agent"])G["x-user-agent"]="Node.twitter-api-v2";let X=this.getUrlObjectFromUrlString(W),x=X.origin+X.pathname;if(K)O.applyRequestParametersToUrl(X,K);let M=O.formatQueryToString(J);if(O.moveUrlQueryParamsIntoObject(X,M),!(Z instanceof Buffer))G0(Z);let R=$!==null&&$!==void 0?$:O.autoDetectBodyType(X);if(Q!==!1){let v=l.BODY_METHODS.has(Y)&&R==="url";G=this.writeAuthHeaders({headers:G,bodyInSignature:v,method:Y,query:M,url:X,body:Z})}if(l.BODY_METHODS.has(Y))z=O.constructBodyParams(Z,G,R)||void 0;return O.addQueryParamsToUrl(X,M),{rawUrl:x,url:X,method:Y,headers:G,body:z}}async applyPreRequestConfigHooks(W){var Y;let J=this.getUrlObjectFromUrlString(W.url);for(let Z of this.getPlugins()){let G=await((Y=Z.onBeforeRequestConfig)===null||Y===void 0?void 0:Y.call(Z,{client:this,url:J,params:W}));if(G)return G}}applyPreStreamRequestConfigHooks(W){var Y;let J=this.getUrlObjectFromUrlString(W.url);for(let Z of this.getPlugins())(Y=Z.onBeforeStreamRequestConfig)===null||Y===void 0||Y.call(Z,{client:this,url:J,params:W})}async applyPreRequestHooks(W,Y,J){await this.applyPluginMethod("onBeforeRequest",{client:this,url:this.getUrlObjectFromUrlString(W.url),params:W,computedParams:Y,requestOptions:J})}async applyPostRequestHooks(W,Y,J,Z){return await this.applyPluginMethod("onAfterRequest",{client:this,url:this.getUrlObjectFromUrlString(W.url),params:W,computedParams:Y,requestOptions:J,response:Z})}applyResponseErrorHooks(W,Y,J,Z){return Z.catch(x0.bind(this,W,Y,J))}}l.BODY_METHODS=new Set(["POST","PUT","PATCH"]);class h{constructor(W,Y={}){if(this._currentUser=null,this._currentUserV2=null,W instanceof h)this._requestMaker=W._requestMaker;else this._requestMaker=new l(Y),this._requestMaker.initializeToken(W)}setPrefix(W){this._prefix=W}cloneWithPrefix(W){let Y=this.constructor(this);return Y.setPrefix(W),Y}getActiveTokens(){return this._requestMaker.getActiveTokens()}getPlugins(){return this._requestMaker.getPlugins()}getPluginOfType(W){return this.getPlugins().find((Y)=>Y instanceof W)}hasHitRateLimit(W){var Y;if(this.isRateLimitStatusObsolete(W))return!1;return((Y=this.getLastRateLimitStatus(W))===null||Y===void 0?void 0:Y.remaining)===0}isRateLimitStatusObsolete(W){let Y=this.getLastRateLimitStatus(W);if(Y===void 0)return!0;return Y.reset*1000<Date.now()}getLastRateLimitStatus(W){let Y=W.match(/^https?:\/\//)?W:this._prefix+W;return this._requestMaker.getRateLimits()[Y]}getCurrentUserObject(W=!1){if(!W&&this._currentUser){if(this._currentUser.value)return Promise.resolve(this._currentUser.value);return this._currentUser.promise}return this._currentUser=p1(()=>this.get("account/verify_credentials.json",{tweet_mode:"extended"},{prefix:T})),this._currentUser.promise}getCurrentUserV2Object(W=!1){if(!W&&this._currentUserV2){if(this._currentUserV2.value)return Promise.resolve(this._currentUserV2.value);return this._currentUserV2.promise}return this._currentUserV2=p1(()=>this.get("users/me",void 0,{prefix:I})),this._currentUserV2.promise}async get(W,Y={},{fullResponse:J,prefix:Z=this._prefix,...G}={}){if(Z)W=Z+W;let $=await this._requestMaker.send({url:W,method:"GET",query:Y,...G});return J?$:$.data}async delete(W,Y={},{fullResponse:J,prefix:Z=this._prefix,...G}={}){if(Z)W=Z+W;let $=await this._requestMaker.send({url:W,method:"DELETE",query:Y,...G});return J?$:$.data}async post(W,Y,{fullResponse:J,prefix:Z=this._prefix,...G}={}){if(Z)W=Z+W;let $=await this._requestMaker.send({url:W,method:"POST",body:Y,...G});return J?$:$.data}async put(W,Y,{fullResponse:J,prefix:Z=this._prefix,...G}={}){if(Z)W=Z+W;let $=await this._requestMaker.send({url:W,method:"PUT",body:Y,...G});return J?$:$.data}async patch(W,Y,{fullResponse:J,prefix:Z=this._prefix,...G}={}){if(Z)W=Z+W;let $=await this._requestMaker.send({url:W,method:"PATCH",body:Y,...G});return J?$:$.data}getStream(W,Y,{prefix:J=this._prefix,...Z}={}){return this._requestMaker.sendStream({url:J?J+W:W,method:"GET",query:Y,...Z})}postStream(W,Y,{prefix:J=this._prefix,...Z}={}){return this._requestMaker.sendStream({url:J?J+W:W,method:"POST",body:Y,...Z})}}class H extends h{constructor(W){if(!(W instanceof h))throw Error("You must instance SubTwitterApi instance from existing TwitterApi instance.");super(W)}}class n extends p{constructor(){super(...arguments);this.hasFinishedFetch=!1}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.push(...J),this.hasFinishedFetch=J.length===0}getNextQueryParams(W){let Y=BigInt(this._realData[this._realData.length-1].id_str);return{...this.injectQueryParams(W),max_id:(Y-BigInt(1)).toString()}}getPageLengthFromRequest(W){return W.data.length}isFetchLastOver(W){return!W.data.length}canFetchNextPage(W){return W.length>0}getItemArray(){return this.tweets}get tweets(){return this._realData}get done(){return super.done||this.hasFinishedFetch}}class i1 extends n{constructor(){super(...arguments);this._endpoint="statuses/home_timeline.json"}}class o1 extends n{constructor(){super(...arguments);this._endpoint="statuses/mentions_timeline.json"}}class R1 extends n{constructor(){super(...arguments);this._endpoint="statuses/user_timeline.json"}}class s1 extends n{constructor(){super(...arguments);this._endpoint="lists/statuses.json"}}class k1 extends n{constructor(){super(...arguments);this._endpoint="favorites/list.json"}}class a1 extends L{constructor(){super(...arguments);this._endpoint="mutes/users/list.json"}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.users.push(...J.users),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.users.length}getItemArray(){return this.users}get users(){return this._realData.users}}class t1 extends L{constructor(){super(...arguments);this._endpoint="mutes/users/ids.json",this._maxResultsWhenFetchLast=5000}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.ids.push(...J.ids),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.ids.length}getItemArray(){return this.ids}get ids(){return this._realData.ids}}class r1 extends L{constructor(){super(...arguments);this._endpoint="followers/list.json"}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.users.push(...J.users),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.users.length}getItemArray(){return this.users}get users(){return this._realData.users}}class e1 extends L{constructor(){super(...arguments);this._endpoint="followers/ids.json",this._maxResultsWhenFetchLast=5000}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.ids.push(...J.ids),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.ids.length}getItemArray(){return this.ids}get ids(){return this._realData.ids}}class W4 extends L{constructor(){super(...arguments);this._endpoint="friends/list.json"}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.users.push(...J.users),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.users.length}getItemArray(){return this.users}get users(){return this._realData.users}}class Y4 extends L{constructor(){super(...arguments);this._endpoint="friends/ids.json",this._maxResultsWhenFetchLast=5000}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.ids.push(...J.ids),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.ids.length}getItemArray(){return this.ids}get ids(){return this._realData.ids}}class J4 extends p{constructor(){super(...arguments);this._endpoint="users/search.json"}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.push(...J)}getNextQueryParams(W){var Y;let J=Number((Y=this._queryParams.page)!==null&&Y!==void 0?Y:"1");return{...this._queryParams,page:J+1,...W?{count:W}:{}}}getPageLengthFromRequest(W){return W.data.length}isFetchLastOver(W){return!W.data.length}canFetchNextPage(W){return W.length>0}getItemArray(){return this.users}get users(){return this._realData}}class _1 extends L{constructor(){super(...arguments);this._endpoint="friendships/incoming.json",this._maxResultsWhenFetchLast=5000}refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.ids.push(...J.ids),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.ids.length}getItemArray(){return this.ids}get ids(){return this._realData.ids}}class Z4 extends _1{constructor(){super(...arguments);this._endpoint="friendships/outgoing.json"}}class C1 extends L{refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.lists.push(...J.lists),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.lists.length}getItemArray(){return this.lists}get lists(){return this._realData.lists}}class G4 extends C1{constructor(){super(...arguments);this._endpoint="lists/memberships.json"}}class $4 extends C1{constructor(){super(...arguments);this._endpoint="lists/ownerships.json"}}class Q4 extends C1{constructor(){super(...arguments);this._endpoint="lists/subscriptions.json"}}class K4 extends L{refreshInstanceFromResult(W,Y){let J=W.data;if(this._rateLimit=W.rateLimit,Y)this._realData.users.push(...J.users),this._realData.next_cursor=J.next_cursor}getPageLengthFromRequest(W){return W.data.users.length}getItemArray(){return this.users}get users(){return this._realData.users}}class X4 extends K4{constructor(){super(...arguments);this._endpoint="lists/members.json"}}class z4 extends K4{constructor(){super(...arguments);this._endpoint="lists/subscribers.json"}}class i extends H{constructor(){super(...arguments);this._prefix=T}singleTweet(W,Y={}){return this.get("statuses/show.json",{tweet_mode:"extended",id:W,...Y})}tweets(W,Y={}){return this.post("statuses/lookup.json",{tweet_mode:"extended",id:W,...Y})}oembedTweet(W,Y={}){return this.get("oembed",{url:`https://x.com/i/statuses/${W}`,...Y},{prefix:"https://publish.x.com/"})}async homeTimeline(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("statuses/home_timeline.json",Y,{fullResponse:!0});return new i1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async mentionTimeline(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("statuses/mentions_timeline.json",Y,{fullResponse:!0});return new o1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async userTimeline(W,Y={}){let J={tweet_mode:"extended",user_id:W,...Y},Z=await this.get("statuses/user_timeline.json",J,{fullResponse:!0});return new R1({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:J})}async userTimelineByUsername(W,Y={}){let J={tweet_mode:"extended",screen_name:W,...Y},Z=await this.get("statuses/user_timeline.json",J,{fullResponse:!0});return new R1({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:J})}async favoriteTimeline(W,Y={}){let J={tweet_mode:"extended",user_id:W,...Y},Z=await this.get("favorites/list.json",J,{fullResponse:!0});return new k1({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:J})}async favoriteTimelineByUsername(W,Y={}){let J={tweet_mode:"extended",screen_name:W,...Y},Z=await this.get("favorites/list.json",J,{fullResponse:!0});return new k1({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:J})}user(W){return this.get("users/show.json",{tweet_mode:"extended",...W})}users(W){return this.get("users/lookup.json",{tweet_mode:"extended",...W})}verifyCredentials(W={}){return this.get("account/verify_credentials.json",W)}async listMutedUsers(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("mutes/users/list.json",Y,{fullResponse:!0});return new a1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async listMutedUserIds(W={}){let Y={stringify_ids:!0,...W},J=await this.get("mutes/users/ids.json",Y,{fullResponse:!0});return new t1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async userFriendList(W={}){let Y={...W},J=await this.get("friends/list.json",Y,{fullResponse:!0});return new W4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async userFollowerList(W={}){let Y={...W},J=await this.get("followers/list.json",Y,{fullResponse:!0});return new r1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async userFollowerIds(W={}){let Y={stringify_ids:!0,...W},J=await this.get("followers/ids.json",Y,{fullResponse:!0});return new e1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async userFollowingIds(W={}){let Y={stringify_ids:!0,...W},J=await this.get("friends/ids.json",Y,{fullResponse:!0});return new Y4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async searchUsers(W,Y={}){let J={q:W,tweet_mode:"extended",page:1,...Y},Z=await this.get("users/search.json",J,{fullResponse:!0});return new J4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:J})}friendship(W){return this.get("friendships/show.json",W)}friendships(W){return this.get("friendships/lookup.json",W)}friendshipsNoRetweets(){return this.get("friendships/no_retweets/ids.json",{stringify_ids:!0})}async friendshipsIncoming(W={}){let Y={stringify_ids:!0,...W},J=await this.get("friendships/incoming.json",Y,{fullResponse:!0});return new _1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async friendshipsOutgoing(W={}){let Y={stringify_ids:!0,...W},J=await this.get("friendships/outgoing.json",Y,{fullResponse:!0});return new Z4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}accountSettings(){return this.get("account/settings.json")}userProfileBannerSizes(W){return this.get("users/profile_banner.json",W)}list(W){return this.get("lists/show.json",{tweet_mode:"extended",...W})}lists(W={}){return this.get("lists/list.json",{tweet_mode:"extended",...W})}async listMembers(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("lists/members.json",Y,{fullResponse:!0});return new X4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}listGetMember(W){return this.get("lists/members/show.json",{tweet_mode:"extended",...W})}async listMemberships(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("lists/memberships.json",Y,{fullResponse:!0});return new G4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async listOwnerships(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("lists/ownerships.json",Y,{fullResponse:!0});return new $4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async listStatuses(W){let Y={tweet_mode:"extended",...W},J=await this.get("lists/statuses.json",Y,{fullResponse:!0});return new s1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}async listSubscribers(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("lists/subscribers.json",Y,{fullResponse:!0});return new z4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}listGetSubscriber(W){return this.get("lists/subscribers/show.json",{tweet_mode:"extended",...W})}async listSubscriptions(W={}){let Y={tweet_mode:"extended",...W},J=await this.get("lists/subscriptions.json",Y,{fullResponse:!0});return new Q4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}mediaInfo(W){return this.get("media/upload.json",{command:"STATUS",media_id:W},{prefix:_})}filterStream({autoConnect:W,...Y}={}){let J={};for(let[G,$]of Object.entries(Y))if(G==="follow"||G==="track")J[G]=$.toString();else if(G==="locations"){let Q=$;J.locations=H1(Q).map((K)=>`${K.lng},${K.lat}`).join(",")}else J[G]=$;return this.stream.postStream("statuses/filter.json",J,{autoConnect:W})}sampleStream({autoConnect:W,...Y}={}){return this.stream.getStream("statuses/sample.json",Y,{autoConnect:W})}get stream(){let W=new v1(this);return W.setPrefix(Y0),W}trendsByPlace(W,Y={}){return this.get("trends/place.json",{id:W,...Y})}trendsAvailable(){return this.get("trends/available.json")}trendsClosest(W,Y){return this.get("trends/closest.json",{lat:W,long:Y})}geoPlace(W){return this.get("geo/id/:place_id.json",void 0,{params:{place_id:W}})}geoSearch(W){return this.get("geo/search.json",W)}geoReverseGeoCode(W){return this.get("geo/reverse_geocode.json",W)}rateLimitStatuses(...W){return this.get("application/rate_limit_status.json",{resources:W})}supportedLanguages(){return this.get("help/languages.json")}}import*as P from"fs";async function B4(W){let Y=await x4(W);if(typeof Y==="number")return new Promise((J,Z)=>{P.readFile(Y,(G,$)=>{if(G)return Z(G);J($)})});else if(Y instanceof Buffer)return Y;else return Y.readFile()}function x4(W){if(typeof W==="string")return P.promises.open(W,"r");else if(typeof W==="number")return W;else if(typeof W==="object"&&!(W instanceof Buffer))return W;else if(!(W instanceof Buffer))throw Error("Given file is not valid, please check its type.");else return W}async function D0(W){if(typeof W==="number")return(await new Promise((J,Z)=>{P.fstat(W,(G,$)=>{if(G)Z(G);J($)})})).size;else if(W instanceof Buffer)return W.length;else return(await W.stat()).size}function F0(W,Y,J){if(typeof J==="string")return J;else if(typeof W==="string"&&!Y)return s0(W);else if(typeof Y==="string")return a0(Y);throw Error("You must specify type if file is a file handle or Buffer.")}function s0(W){if(W.endsWith(".jpeg")||W.endsWith(".jpg"))return N.Jpeg;if(W.endsWith(".png"))return N.Png;if(W.endsWith(".webp"))return N.Webp;if(W.endsWith(".gif"))return N.Gif;if(W.endsWith(".mpeg4")||W.endsWith(".mp4"))return N.Mp4;if(W.endsWith(".mov")||W.endsWith(".mov"))return N.Mov;if(W.endsWith(".srt"))return N.Srt;return l1({instance:"TwitterApiv1ReadWrite",method:"uploadMedia",problem:"options.mimeType is missing and filename couldn't help to resolve MIME type, so it will fallback to image/jpeg",resolution:"If you except to give filenames without extensions, please specify explicitlty the MIME type using options.mimeType"}),N.Jpeg}function a0(W){if(l1({instance:"TwitterApiv1ReadWrite",method:"uploadMedia",problem:"you're using options.type",resolution:"Remove options.type argument and migrate to options.mimeType which takes the real MIME type. If you're using type=longmp4, add options.longVideo alongside of mimeType=EUploadMimeType.Mp4"}),W==="gif")return N.Gif;if(W==="jpg")return N.Jpeg;if(W==="png")return N.Png;if(W==="webp")return N.Webp;if(W==="srt")return N.Srt;if(W==="mp4"||W==="longmp4")return N.Mp4;if(W==="mov")return N.Mov;return W}function O0(W,Y){if(W===N.Mp4||W===N.Mov)return Y==="tweet"?"TweetVideo":"DmVideo";if(W===N.Gif)return Y==="tweet"?"TweetGif":"DmGif";if(W===N.Srt)return"Subtitles";else return Y==="tweet"?"TweetImage":"DmImage"}function M4(W){return new Promise((Y)=>setTimeout(Y,W*1000))}async function j4(W,Y,J=0,Z){if(W instanceof Buffer){let $=W.slice(J,J+Y);return[$,$.length]}if(!Z)throw Error("Well, we will need a buffer to store file content.");let G;if(typeof W==="number")G=await new Promise(($,Q)=>{P.read(W,Z,0,Y,J,(K,z)=>{if(K)Q(K);$(z)})});else G=(await W.read(Z,0,Y,J)).bytesRead;return[Z,G]}var N4="media/upload.json";class o extends i{constructor(){super(...arguments);this._prefix=T}get readOnly(){return this}tweet(W,Y={}){let J={status:W,tweet_mode:"extended",...Y};return this.post("statuses/update.json",J)}async quote(W,Y,J={}){let Z="https://x.com/i/statuses/"+Y;return this.tweet(W,{...J,attachment_url:Z})}async tweetThread(W){let Y=[];for(let J of W){let Z=Y.length?Y[Y.length-1]:null,G={...typeof J==="string"?{status:J}:J},$=Z?Z.id_str:G.in_reply_to_status_id,Q=G.status;if($)Y.push(await this.reply(Q,$,G));else Y.push(await this.tweet(Q,G))}return Y}reply(W,Y,J={}){return this.tweet(W,{auto_populate_reply_metadata:!0,in_reply_to_status_id:Y,...J})}deleteTweet(W){return this.post("statuses/destroy/:id.json",{tweet_mode:"extended"},{params:{id:W}})}reportUserAsSpam(W){return this.post("users/report_spam.json",{tweet_mode:"extended",...W})}updateFriendship(W){return this.post("friendships/update.json",W)}createFriendship(W){return this.post("friendships/create.json",W)}destroyFriendship(W){return this.post("friendships/destroy.json",W)}updateAccountSettings(W){return this.post("account/settings.json",W)}updateAccountProfile(W){return this.post("account/update_profile.json",W)}async updateAccountProfileBanner(W,Y={}){let J={banner:await B4(W),...Y};return this.post("account/update_profile_banner.json",J,{forceBodyMode:"form-data"})}async updateAccountProfileImage(W,Y={}){let J={tweet_mode:"extended",image:await B4(W),...Y};return this.post("account/update_profile_image.json",J,{forceBodyMode:"form-data"})}removeAccountProfileBanner(){return this.post("account/remove_profile_banner.json")}createList(W){return this.post("lists/create.json",{tweet_mode:"extended",...W})}updateList(W){return this.post("lists/update.json",{tweet_mode:"extended",...W})}removeList(W){return this.post("lists/destroy.json",{tweet_mode:"extended",...W})}addListMembers(W){let J=W.user_id&&B1(W.user_id)||W.screen_name&&B1(W.screen_name)?"lists/members/create_all.json":"lists/members/create.json";return this.post(J,W)}removeListMembers(W){let J=W.user_id&&B1(W.user_id)||W.screen_name&&B1(W.screen_name)?"lists/members/destroy_all.json":"lists/members/destroy.json";return this.post(J,W)}subscribeToList(W){return this.post("lists/subscribers/create.json",{tweet_mode:"extended",...W})}unsubscribeOfList(W){return this.post("lists/subscribers/destroy.json",{tweet_mode:"extended",...W})}createMediaMetadata(W,Y){return this.post("media/metadata/create.json",{media_id:W,...Y},{prefix:_,forceBodyMode:"json"})}createMediaSubtitles(W,Y){return this.post("media/subtitles/create.json",{media_id:W,media_category:"TweetVideo",subtitle_info:{subtitles:Y}},{prefix:_,forceBodyMode:"json"})}deleteMediaSubtitles(W,...Y){return this.post("media/subtitles/delete.json",{media_id:W,media_category:"TweetVideo",subtitle_info:{subtitles:Y.map((J)=>({language_code:J}))}},{prefix:_,forceBodyMode:"json"})}async uploadMedia(W,Y={},J=!1){var Z;let G=(Z=Y.chunkLength)!==null&&Z!==void 0?Z:1048576,{fileHandle:$,mediaCategory:Q,fileSize:K,mimeType:z}=await this.getUploadMediaRequirements(W,Y);try{let X=await this.post(N4,{command:"INIT",total_bytes:K,media_type:z,media_category:Q,additional_owners:Y.additionalOwners,shared:Y.shared?!0:void 0},{prefix:_});await this.mediaChunkedUpload($,G,X.media_id_string,Y.maxConcurrentUploads);let x=await this.post(N4,{command:"FINALIZE",media_id:X.media_id_string},{prefix:_});if(x.processing_info&&x.processing_info.state!=="succeeded")await this.awaitForMediaProcessingCompletion(x);if(J)return x;else return x.media_id_string}finally{if(typeof W==="number")L4.close(W,()=>{});else if(typeof $==="object"&&!($ instanceof Buffer))$.close()}}async awaitForMediaProcessingCompletion(W){var Y;while(!0){W=await this.mediaInfo(W.media_id_string);let{processing_info:J}=W;if(!J||J.state==="succeeded")return;if((Y=J.error)===null||Y===void 0?void 0:Y.code){let{name:Z,message:G}=J.error;throw Error(`Failed to process media: ${Z} - ${G}.`)}if(J.state==="failed")throw Error("Failed to process the media.");if(J.check_after_secs)await M4(J.check_after_secs);else await M4(5)}}async getUploadMediaRequirements(W,{mimeType:Y,type:J,target:Z,longVideo:G}={}){let $;try{$=await x4(W);let Q=F0(W,J,Y),K;if(Q===N.Mp4&&(!Y&&!J&&Z!=="dm"||G))K="amplify_video";else K=O0(Q,Z!==null&&Z!==void 0?Z:"tweet");return{fileHandle:$,mediaCategory:K,fileSize:await D0($),mimeType:Q}}catch(Q){if(typeof W==="number")L4.close(W,()=>{});else if(typeof $==="object"&&!($ instanceof Buffer))$.close();throw Q}}async mediaChunkedUpload(W,Y,J,Z=3){let G=0;if(Z<1)throw RangeError("Bad maxConcurrentUploads parameter.");let $=W instanceof Buffer?void 0:Buffer.alloc(Y),Q,K,z=0;[Q,K]=await j4(W,Y,z,$),z+=K;let X=new Set;while(K){let x=Q.slice(0,K);if(x.length){let M=this.post(N4,{command:"APPEND",media_id:J,segment_index:G,media:x},{prefix:_});X.add(M),M.then(()=>{X.delete(M)}),G++}if(X.size>=Z)await Promise.race(X);[Q,K]=await j4(W,Y,z,$),z+=K}await Promise.all([...X])}}class H0 extends o{constructor(){super(...arguments);this._prefix=T}get readWrite(){return this}sendDm({recipient_id:W,custom_profile_id:Y,...J}){let Z={event:{type:q.Create,[q.Create]:{target:{recipient_id:W},message_data:J}}};if(Y)Z.event[q.Create].custom_profile_id=Y;return this.post("direct_messages/events/new.json",Z,{forceBodyMode:"json"})}getDmEvent(W){return this.get("direct_messages/events/show.json",{id:W})}deleteDm(W){return this.delete("direct_messages/events/destroy.json",{id:W})}async listDmEvents(W={}){let Y={...W},J=await this.get("direct_messages/events/list.json",Y,{fullResponse:!0});return new u1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}newWelcomeDm(W,Y){let J={[q.WelcomeCreate]:{name:W,message_data:Y}};return this.post("direct_messages/welcome_messages/new.json",J,{forceBodyMode:"json"})}getWelcomeDm(W){return this.get("direct_messages/welcome_messages/show.json",{id:W})}deleteWelcomeDm(W){return this.delete("direct_messages/welcome_messages/destroy.json",{id:W})}updateWelcomeDm(W,Y){let J={message_data:Y};return this.put("direct_messages/welcome_messages/update.json",J,{forceBodyMode:"json",query:{id:W}})}async listWelcomeDms(W={}){let Y={...W},J=await this.get("direct_messages/welcome_messages/list.json",Y,{fullResponse:!0});return new d1({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y})}newWelcomeDmRule(W){return this.post("direct_messages/welcome_messages/rules/new.json",{welcome_message_rule:{welcome_message_id:W}},{forceBodyMode:"json"})}getWelcomeDmRule(W){return this.get("direct_messages/welcome_messages/rules/show.json",{id:W})}deleteWelcomeDmRule(W){return this.delete("direct_messages/welcome_messages/rules/destroy.json",{id:W})}async listWelcomeDmRules(W={}){let Y={...W};return this.get("direct_messages/welcome_messages/rules/list.json",Y)}async setWelcomeDm(W,Y=!0){var J;let Z=await this.listWelcomeDmRules();if((J=Z.welcome_message_rules)===null||J===void 0?void 0:J.length){for(let G of Z.welcome_message_rules)if(await this.deleteWelcomeDmRule(G.id),Y)await this.deleteWelcomeDm(G.welcome_message_id)}return this.newWelcomeDmRule(W)}markDmAsRead(W,Y){return this.post("direct_messages/mark_read.json",{last_read_event_id:W,recipient_id:Y},{forceBodyMode:"url"})}indicateDmTyping(W){return this.post("direct_messages/indicate_typing.json",{recipient_id:W},{forceBodyMode:"url"})}async downloadDmImage(W){if(typeof W!=="string"){let J=W[q.Create].message_data.attachment;if(!J)throw Error("The given direct message doesn't contain any attachment");W=J.media.media_url_https}let Y=await this.get(W,void 0,{forceParseMode:"buffer",prefix:""});if(!Y.length)throw Error("Image not found. Make sure you are logged with credentials able to access direct messages, and check the URL.");return Y}}var v1=H0;class j{constructor(W){this.result=W}get tweets(){return j.tweets(this.result)}static tweets(W){var Y,J;return(J=(Y=W.includes)===null||Y===void 0?void 0:Y.tweets)!==null&&J!==void 0?J:[]}tweetById(W){return j.tweetById(this.result,W)}static tweetById(W,Y){return this.tweets(W).find((J)=>J.id===Y)}retweet(W){return j.retweet(this.result,W)}static retweet(W,Y){var J;let Z=((J=Y.referenced_tweets)!==null&&J!==void 0?J:[]).filter((G)=>G.type==="retweeted").map((G)=>G.id);return this.tweets(W).find((G)=>Z.includes(G.id))}quote(W){return j.quote(this.result,W)}static quote(W,Y){var J;let Z=((J=Y.referenced_tweets)!==null&&J!==void 0?J:[]).filter((G)=>G.type==="quoted").map((G)=>G.id);return this.tweets(W).find((G)=>Z.includes(G.id))}repliedTo(W){return j.repliedTo(this.result,W)}static repliedTo(W,Y){var J;let Z=((J=Y.referenced_tweets)!==null&&J!==void 0?J:[]).filter((G)=>G.type==="replied_to").map((G)=>G.id);return this.tweets(W).find((G)=>Z.includes(G.id))}author(W){return j.author(this.result,W)}static author(W,Y){let J=Y.author_id;return J?this.users(W).find((Z)=>Z.id===J):void 0}repliedToAuthor(W){return j.repliedToAuthor(this.result,W)}static repliedToAuthor(W,Y){let J=Y.in_reply_to_user_id;return J?this.users(W).find((Z)=>Z.id===J):void 0}get users(){return j.users(this.result)}static users(W){var Y,J;return(J=(Y=W.includes)===null||Y===void 0?void 0:Y.users)!==null&&J!==void 0?J:[]}userById(W){return j.userById(this.result,W)}static userById(W,Y){return this.users(W).find((J)=>J.id===Y)}pinnedTweet(W){return j.pinnedTweet(this.result,W)}static pinnedTweet(W,Y){return Y.pinned_tweet_id?this.tweets(W).find((J)=>J.id===Y.pinned_tweet_id):void 0}get media(){return j.media(this.result)}static media(W){var Y,J;return(J=(Y=W.includes)===null||Y===void 0?void 0:Y.media)!==null&&J!==void 0?J:[]}medias(W){return j.medias(this.result,W)}static medias(W,Y){var J,Z;let G=(Z=(J=Y.attachments)===null||J===void 0?void 0:J.media_keys)!==null&&Z!==void 0?Z:[];return this.media(W).filter(($)=>G.includes($.media_key))}get polls(){return j.polls(this.result)}static polls(W){var Y,J;return(J=(Y=W.includes)===null||Y===void 0?void 0:Y.polls)!==null&&J!==void 0?J:[]}poll(W){return j.poll(this.result,W)}static poll(W,Y){var J,Z;let G=(Z=(J=Y.attachments)===null||J===void 0?void 0:J.poll_ids)!==null&&Z!==void 0?Z:[];if(G.length){let $=G[0];return this.polls(W).find((Q)=>Q.id===$)}return}get places(){return j.places(this.result)}static places(W){var Y,J;return(J=(Y=W.includes)===null||Y===void 0?void 0:Y.places)!==null&&J!==void 0?J:[]}place(W){return j.place(this.result,W)}static place(W,Y){var J;let Z=(J=Y.geo)===null||J===void 0?void 0:J.place_id;return Z?this.places(W).find((G)=>G.id===Z):void 0}listOwner(W){return j.listOwner(this.result,W)}static listOwner(W,Y){let J=Y.owner_id;return J?this.users(W).find((Z)=>Z.id===J):void 0}spaceCreator(W){return j.spaceCreator(this.result,W)}static spaceCreator(W,Y){let J=Y.creator_id;return J?this.users(W).find((Z)=>Z.id===J):void 0}spaceHosts(W){return j.spaceHosts(this.result,W)}static spaceHosts(W,Y){var J;let Z=(J=Y.host_ids)!==null&&J!==void 0?J:[];return this.users(W).filter((G)=>Z.includes(G.id))}spaceSpeakers(W){return j.spaceSpeakers(this.result,W)}static spaceSpeakers(W,Y){var J;let Z=(J=Y.speaker_ids)!==null&&J!==void 0?J:[];return this.users(W).filter((G)=>Z.includes(G.id))}spaceInvitedUsers(W){return j.spaceInvitedUsers(this.result,W)}static spaceInvitedUsers(W,Y){var J;let Z=(J=Y.invited_user_ids)!==null&&J!==void 0?J:[];return this.users(W).filter((G)=>Z.includes(G.id))}}class b1 extends m1{updateIncludes(W){if(W.errors){if(!this._realData.errors)this._realData.errors=[];this._realData.errors=[...this._realData.errors,...W.errors]}if(!W.includes)return;if(!this._realData.includes)this._realData.includes={};let Y=this._realData.includes;for(let[J,Z]of Object.entries(W.includes)){if(!Y[J])Y[J]=[];Y[J]=[...Y[J],...Z]}}assertUsable(){if(this.unusable)throw Error("Unable to use this paginator to fetch more data, as it does not contain any metadata. Check .errors property for more details.")}get meta(){return this._realData.meta}get includes(){var W;if(!((W=this._realData)===null||W===void 0?void 0:W.includes))return new j(this._realData);if(this._includesInstance)return this._includesInstance;return this._includesInstance=new j(this._realData)}get errors(){var W;return(W=this._realData.errors)!==null&&W!==void 0?W:[]}get unusable(){return this.errors.length>0&&!this._realData.meta&&!this._realData.data}}class k extends b1{refreshInstanceFromResult(W,Y){var J;let Z=W.data,G=(J=Z.data)!==null&&J!==void 0?J:[];if(this._rateLimit=W.rateLimit,!this._realData.data)this._realData.data=[];if(Y)this._realData.meta.result_count+=Z.meta.result_count,this._realData.meta.next_token=Z.meta.next_token,this._realData.data.push(...G);else this._realData.meta.result_count+=Z.meta.result_count,this._realData.meta.previous_token=Z.meta.previous_token,this._realData.data.unshift(...G);this.updateIncludes(Z)}getNextQueryParams(W){return this.assertUsable(),{...this.injectQueryParams(W),pagination_token:this._realData.meta.next_token}}getPreviousQueryParams(W){return this.assertUsable(),{...this.injectQueryParams(W),pagination_token:this._realData.meta.previous_token}}getPageLengthFromRequest(W){var Y,J;return(J=(Y=W.data.data)===null||Y===void 0?void 0:Y.length)!==null&&J!==void 0?J:0}isFetchLastOver(W){var Y;return!((Y=W.data.data)===null||Y===void 0?void 0:Y.length)||!this.canFetchNextPage(W.data)}canFetchNextPage(W){var Y;return!!((Y=W.meta)===null||Y===void 0?void 0:Y.next_token)}}class D4 extends b1{refreshInstanceFromResult(W,Y){var J;let Z=W.data,G=(J=Z.data)!==null&&J!==void 0?J:[];if(this._rateLimit=W.rateLimit,!this._realData.data)this._realData.data=[];if(Y)this._realData.meta.oldest_id=Z.meta.oldest_id,this._realData.meta.result_count+=Z.meta.result_count,this._realData.meta.next_token=Z.meta.next_token,this._realData.data.push(...G);else this._realData.meta.newest_id=Z.meta.newest_id,this._realData.meta.result_count+=Z.meta.result_count,this._realData.data.unshift(...G);this.updateIncludes(Z)}getNextQueryParams(W){this.assertUsable();let Y={...this.injectQueryParams(W)};if(this._realData.meta.next_token)Y.next_token=this._realData.meta.next_token;else{if(Y.start_time)Y.since_id=this.dateStringToSnowflakeId(Y.start_time),delete Y.start_time;if(Y.end_time)delete Y.end_time;Y.until_id=this._realData.meta.oldest_id}return Y}getPreviousQueryParams(W){return this.assertUsable(),{...this.injectQueryParams(W),since_id:this._realData.meta.newest_id}}getPageLengthFromRequest(W){var Y,J;return(J=(Y=W.data.data)===null||Y===void 0?void 0:Y.length)!==null&&J!==void 0?J:0}isFetchLastOver(W){var Y;return!((Y=W.data.data)===null||Y===void 0?void 0:Y.length)||!this.canFetchNextPage(W.data)}canFetchNextPage(W){return!!W.meta.next_token}getItemArray(){return this.tweets}dateStringToSnowflakeId(W){let Y=BigInt("1288834974657"),J=new Date(W);if(isNaN(J.valueOf()))throw Error("Unable to convert start_time/end_time to a valid date. A ISO 8601 DateTime is excepted, please check your input.");return(BigInt(J.valueOf())-Y<<BigInt("22")).toString()}get tweets(){var W;return(W=this._realData.data)!==null&&W!==void 0?W:[]}get meta(){return super.meta}}class s extends k{refreshInstanceFromResult(W,Y){super.refreshInstanceFromResult(W,Y);let J=W.data;if(Y)this._realData.meta.oldest_id=J.meta.oldest_id;else this._realData.meta.newest_id=J.meta.newest_id}getItemArray(){return this.tweets}get tweets(){var W;return(W=this._realData.data)!==null&&W!==void 0?W:[]}get meta(){return super.meta}}class F4 extends D4{constructor(){super(...arguments);this._endpoint="tweets/search/recent"}}class O4 extends D4{constructor(){super(...arguments);this._endpoint="tweets/search/all"}}class H4 extends s{constructor(){super(...arguments);this._endpoint="tweets/:id/quote_tweets"}}class U4 extends s{constructor(){super(...arguments);this._endpoint="users/:id/timelines/reverse_chronological"}}class S4 extends s{constructor(){super(...arguments);this._endpoint="users/:id/tweets"}}class f4 extends s{constructor(){super(...arguments);this._endpoint="users/:id/mentions"}}class R4 extends s{constructor(){super(...arguments);this._endpoint="users/:id/bookmarks"}}class k4 extends k{get tweets(){var W;return(W=this._realData.data)!==null&&W!==void 0?W:[]}get meta(){return super.meta}getItemArray(){return this.tweets}}class _4 extends k4{constructor(){super(...arguments);this._endpoint="users/:id/liked_tweets"}}class C4 extends k4{constructor(){super(...arguments);this._endpoint="lists/:id/tweets"}}class C extends k{getItemArray(){return this.users}get users(){var W;return(W=this._realData.data)!==null&&W!==void 0?W:[]}get meta(){return super.meta}}class v4 extends C{constructor(){super(...arguments);this._endpoint="users/:id/blocking"}}class b4 extends C{constructor(){super(...arguments);this._endpoint="users/:id/muting"}}class I4 extends C{constructor(){super(...arguments);this._endpoint="users/:id/followers"}}class T4 extends C{constructor(){super(...arguments);this._endpoint="users/:id/following"}}class q4 extends C{constructor(){super(...arguments);this._endpoint="lists/:id/members"}}class h4 extends C{constructor(){super(...arguments);this._endpoint="lists/:id/followers"}}class P4 extends C{constructor(){super(...arguments);this._endpoint="tweets/:id/liking_users"}}class w4 extends C{constructor(){super(...arguments);this._endpoint="tweets/:id/retweeted_by"}}class I1 extends k{getItemArray(){return this.lists}get lists(){var W;return(W=this._realData.data)!==null&&W!==void 0?W:[]}get meta(){return super.meta}}class A4 extends I1{constructor(){super(...arguments);this._endpoint="users/:id/owned_lists"}}class y4 extends I1{constructor(){super(...arguments);this._endpoint="users/:id/list_memberships"}}class V4 extends I1{constructor(){super(...arguments);this._endpoint="users/:id/followed_lists"}}class a extends H{constructor(){super(...arguments);this._prefix=m}}class T1 extends k{getItemArray(){return this.events}get events(){var W;return(W=this._realData.data)!==null&&W!==void 0?W:[]}get meta(){return super.meta}}class g4 extends T1{constructor(){super(...arguments);this._endpoint="dm_events"}}class c4 extends T1{constructor(){super(...arguments);this._endpoint="dm_conversations/with/:participant_id/dm_events"}}class E4 extends T1{constructor(){super(...arguments);this._endpoint="dm_conversations/:dm_conversation_id/dm_events"}}class t extends H{constructor(){super(...arguments);this._prefix=I}get labs(){if(this._labs)return this._labs;return this._labs=new a(this)}async search(W,Y={}){let J=typeof W==="string"?{...Y,query:W}:{...W},Z=await this.get("tweets/search/recent",J,{fullResponse:!0});return new F4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:J})}async searchAll(W,Y={}){let J={...Y,query:W},Z=await this.get("tweets/search/all",J,{fullResponse:!0});return new O4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:J})}singleTweet(W,Y={}){return this.get("tweets/:id",Y,{params:{id:W}})}tweets(W,Y={}){return this.get("tweets",{ids:W,...Y})}tweetCountRecent(W,Y={}){return this.get("tweets/counts/recent",{query:W,...Y})}tweetCountAll(W,Y={}){return this.get("tweets/counts/all",{query:W,...Y})}async tweetRetweetedBy(W,Y={}){let{asPaginator:J,...Z}=Y,G=await this.get("tweets/:id/retweeted_by",Z,{fullResponse:!0,params:{id:W}});if(!J)return G.data;return new w4({realData:G.data,rateLimit:G.rateLimit,instance:this,queryParams:Z,sharedParams:{id:W}})}async tweetLikedBy(W,Y={}){let{asPaginator:J,...Z}=Y,G=await this.get("tweets/:id/liking_users",Z,{fullResponse:!0,params:{id:W}});if(!J)return G.data;return new P4({realData:G.data,rateLimit:G.rateLimit,instance:this,queryParams:Z,sharedParams:{id:W}})}async homeTimeline(W={}){let Y=await this.getCurrentUserV2Object(),J=await this.get("users/:id/timelines/reverse_chronological",W,{fullResponse:!0,params:{id:Y.data.id}});return new U4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:W,sharedParams:{id:Y.data.id}})}async userTimeline(W,Y={}){let J=await this.get("users/:id/tweets",Y,{fullResponse:!0,params:{id:W}});return new S4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y,sharedParams:{id:W}})}async userMentionTimeline(W,Y={}){let J=await this.get("users/:id/mentions",Y,{fullResponse:!0,params:{id:W}});return new f4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y,sharedParams:{id:W}})}async quotes(W,Y={}){let J=await this.get("tweets/:id/quote_tweets",Y,{fullResponse:!0,params:{id:W}});return new H4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:Y,sharedParams:{id:W}})}async bookmarks(W={}){let Y=await this.getCurrentUserV2Object(),J=await this.get("users/:id/bookmarks",W,{fullResponse:!0,params:{id:Y.data.id}});return new R4({realData:J.data,rateLimit:J.rateLimit,instance:this,queryParams:W,sharedParams:{id:Y.data.id}})}me(W={}){return this.get("users/me",W)}user(W,Y={}){return this.get("users/:id",Y,{params:{id:W}})}users(W,Y={}){let J=Array.isArray(W)?W.join(","):W;return this.get("users",{...Y,ids:J})}userByUsername(W,Y={}){return this.get("users/by/username/:username",Y,{params:{username:W}})}usersByUsernames(W,Y={}){return W=Array.isArray(W)?W.join(","):W,this.get("users/by",{...Y,usernames:W})}async followers(W,Y={}){let{asPaginator:J,...Z}=Y,G={id:W};if(!J)return this.get("users/:id/followers",Z,{params:G});let $=await this.get("users/:id/followers",Z,{fullResponse:!0,params:G});return new I4({realData:$.data,rateLimit:$.rateLimit,instance:this,queryParams:Z,sharedParams:G})}async following(W,Y={}){let{asPaginator:J,...Z}=Y,G={id:W};if(!J)return this.get("users/:id/following",Z,{params:G});let $=await this.get("users/:id/following",Z,{fullResponse:!0,params:G});return new T4({realData:$.data,rateLimit:$.rateLimit,instance:this,queryParams:Z,sharedParams:G})}async userLikedTweets(W,Y={}){let J={id:W},Z=await this.get("users/:id/liked_tweets",Y,{fullResponse:!0,params:J});return new _4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async userBlockingUsers(W,Y={}){let J={id:W},Z=await this.get("users/:id/blocking",Y,{fullResponse:!0,params:J});return new v4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async userMutingUsers(W,Y={}){let J={id:W},Z=await this.get("users/:id/muting",Y,{fullResponse:!0,params:J});return new b4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}list(W,Y={}){return this.get("lists/:id",Y,{params:{id:W}})}async listsOwned(W,Y={}){let J={id:W},Z=await this.get("users/:id/owned_lists",Y,{fullResponse:!0,params:J});return new A4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async listMemberships(W,Y={}){let J={id:W},Z=await this.get("users/:id/list_memberships",Y,{fullResponse:!0,params:J});return new y4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async listFollowed(W,Y={}){let J={id:W},Z=await this.get("users/:id/followed_lists",Y,{fullResponse:!0,params:J});return new V4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async listTweets(W,Y={}){let J={id:W},Z=await this.get("lists/:id/tweets",Y,{fullResponse:!0,params:J});return new C4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async listMembers(W,Y={}){let J={id:W},Z=await this.get("lists/:id/members",Y,{fullResponse:!0,params:J});return new q4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async listFollowers(W,Y={}){let J={id:W},Z=await this.get("lists/:id/followers",Y,{fullResponse:!0,params:J});return new h4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async listDmEvents(W={}){let Y=await this.get("dm_events",W,{fullResponse:!0});return new g4({realData:Y.data,rateLimit:Y.rateLimit,instance:this,queryParams:{...W}})}async listDmEventsWithParticipant(W,Y={}){let J={participant_id:W},Z=await this.get("dm_conversations/with/:participant_id/dm_events",Y,{fullResponse:!0,params:J});return new c4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}async listDmEventsOfConversation(W,Y={}){let J={dm_conversation_id:W},Z=await this.get("dm_conversations/:dm_conversation_id/dm_events",Y,{fullResponse:!0,params:J});return new E4({realData:Z.data,rateLimit:Z.rateLimit,instance:this,queryParams:{...Y},sharedParams:J})}space(W,Y={}){return this.get("spaces/:id",Y,{params:{id:W}})}spaces(W,Y={}){return this.get("spaces",{ids:W,...Y})}spacesByCreators(W,Y={}){return this.get("spaces/by/creator_ids",{user_ids:W,...Y})}searchSpaces(W){return this.get("spaces/search",W)}spaceBuyers(W,Y={}){return this.get("spaces/:id/buyers",Y,{params:{id:W}})}spaceTweets(W,Y={}){return this.get("spaces/:id/tweets",Y,{params:{id:W}})}searchStream({autoConnect:W,...Y}={}){return this.getStream("tweets/search/stream",Y,{payloadIsError:U1,autoConnect:W})}streamRules(W={}){return this.get("tweets/search/stream/rules",W)}updateStreamRules(W,Y={}){return this.post("tweets/search/stream/rules",W,{query:Y})}sampleStream({autoConnect:W,...Y}={}){return this.getStream("tweets/sample/stream",Y,{payloadIsError:U1,autoConnect:W})}sample10Stream({autoConnect:W,...Y}={}){return this.getStream("tweets/sample10/stream",Y,{payloadIsError:U1,autoConnect:W})}complianceJobs(W){return this.get("compliance/jobs",W)}complianceJob(W){return this.get("compliance/jobs/:id",void 0,{params:{id:W}})}async sendComplianceJob(W){let Y=await this.post("compliance/jobs",{type:W.type,name:W.name}),J=W.ids instanceof Buffer?W.ids:Buffer.from(W.ids.join(`
34
34
  `));return await this.put(Y.data.upload_url,J,{forceBodyMode:"raw",enableAuth:!1,headers:{"Content-Type":"text/plain"},prefix:""}),Y}async complianceJobResult(W){let Y=W;while(Y.status!=="complete"){if(Y.status==="expired"||Y.status==="failed")throw Error("Job failed to be completed.");await new Promise((Z)=>setTimeout(Z,3500)),Y=(await this.complianceJob(W.id)).data}return(await this.get(W.download_url,void 0,{enableAuth:!1,prefix:""})).trim().split(`
35
- `).filter((Z)=>Z).map((Z)=>JSON.parse(Z))}async usage(W={}){return this.get("usage/tweets",W)}community(W,Y={}){return this.get("communities/:id",Y,{params:{id:W}})}searchCommunities(W,Y={}){return this.get("communities/search",{query:W,...Y})}}class r extends a{constructor(){super(...arguments);this._prefix=m}get readOnly(){return this}}class e extends t{constructor(){super(...arguments);this._prefix=I}get readOnly(){return this}get labs(){if(this._labs)return this._labs;return this._labs=new r(this)}hideReply(W,Y){return this.put("tweets/:id/hidden",{hidden:Y},{params:{id:W}})}like(W,Y){return this.post("users/:id/likes",{tweet_id:Y},{params:{id:W}})}unlike(W,Y){return this.delete("users/:id/likes/:tweet_id",void 0,{params:{id:W,tweet_id:Y}})}retweet(W,Y){return this.post("users/:id/retweets",{tweet_id:Y},{params:{id:W}})}unretweet(W,Y){return this.delete("users/:id/retweets/:tweet_id",void 0,{params:{id:W,tweet_id:Y}})}tweet(W,Y={}){if(typeof W==="object")Y=W;else Y={text:W,...Y};return this.post("tweets",Y)}async uploadMedia(W,Y,J=1048576){let Z=Y.media_category;if(!Y.media_category){if(Y.media_type.includes("gif"))Z="tweet_gif";else if(Y.media_type.includes("image"))Z="tweet_image";else if(Y.media_type.includes("video"))Z="tweet_video"}let G={additional_owners:Y.additional_owners,media_type:Y.media_type,total_bytes:W.length,media_category:Z},Q=(await this.post("media/upload/initialize",G)).data.id,K=Math.ceil(W.length/J),z=new Uint8Array(W);for(let x=0;x<K;x++){let M=x*J,R=Math.min(M+J,W.length),v=z.slice(M,R),b=Buffer.from(v),W1={segment_index:x,media:b};await this.post(`media/upload/${Q}/append`,W1,{forceBodyMode:"form-data"})}if((await this.post(`media/upload/${Q}/finalize`)).data.processing_info)await this.waitForMediaProcessing(Q);return Q}async waitForMediaProcessing(W){var Y;let Z=(await this.get("media/upload",{command:"STATUS",media_id:W})).data.processing_info;if(!Z)return;switch(Z.state){case"succeeded":return;case"failed":throw Error(`Media processing failed: ${(Y=Z.error)===null||Y===void 0?void 0:Y.message}`);case"pending":case"in_progress":{let G=Z===null||Z===void 0?void 0:Z.check_after_secs;if(G&&G>0)await new Promise(($)=>setTimeout($,G*1000)),await this.waitForMediaProcessing(W)}}}createMediaMetadata(W,Y){return this.post("media/metadata",{id:W,metadata:Y})}reply(W,Y,J={}){var Z;let G={in_reply_to_tweet_id:Y,...(Z=J.reply)!==null&&Z!==void 0?Z:{}};return this.post("tweets",{text:W,...J,reply:G})}quote(W,Y,J={}){return this.tweet(W,{...J,quote_tweet_id:Y})}async tweetThread(W){var Y,J;let Z=[];for(let G of W){let $=Z.length?Z[Z.length-1]:null,Q={...typeof G==="string"?{text:G}:G},K=$?$.data.id:(Y=Q.reply)===null||Y===void 0?void 0:Y.in_reply_to_tweet_id,z=(J=Q.text)!==null&&J!==void 0?J:"";if(K)Z.push(await this.reply(z,K,Q));else Z.push(await this.tweet(z,Q))}return Z}deleteTweet(W){return this.delete("tweets/:id",void 0,{params:{id:W}})}async bookmark(W){let Y=await this.getCurrentUserV2Object();return this.post("users/:id/bookmarks",{tweet_id:W},{params:{id:Y.data.id}})}async deleteBookmark(W){let Y=await this.getCurrentUserV2Object();return this.delete("users/:id/bookmarks/:tweet_id",void 0,{params:{id:Y.data.id,tweet_id:W}})}follow(W,Y){return this.post("users/:id/following",{target_user_id:Y},{params:{id:W}})}unfollow(W,Y){return this.delete("users/:source_user_id/following/:target_user_id",void 0,{params:{source_user_id:W,target_user_id:Y}})}block(W,Y){return this.post("users/:id/blocking",{target_user_id:Y},{params:{id:W}})}unblock(W,Y){return this.delete("users/:source_user_id/blocking/:target_user_id",void 0,{params:{source_user_id:W,target_user_id:Y}})}mute(W,Y){return this.post("users/:id/muting",{target_user_id:Y},{params:{id:W}})}unmute(W,Y){return this.delete("users/:source_user_id/muting/:target_user_id",void 0,{params:{source_user_id:W,target_user_id:Y}})}createList(W){return this.post("lists",W)}updateList(W,Y={}){return this.put("lists/:id",Y,{params:{id:W}})}removeList(W){return this.delete("lists/:id",void 0,{params:{id:W}})}addListMember(W,Y){return this.post("lists/:id/members",{user_id:Y},{params:{id:W}})}removeListMember(W,Y){return this.delete("lists/:id/members/:user_id",void 0,{params:{id:W,user_id:Y}})}subscribeToList(W,Y){return this.post("users/:id/followed_lists",{list_id:Y},{params:{id:W}})}unsubscribeOfList(W,Y){return this.delete("users/:id/followed_lists/:list_id",void 0,{params:{id:W,list_id:Y}})}pinList(W,Y){return this.post("users/:id/pinned_lists",{list_id:Y},{params:{id:W}})}unpinList(W,Y){return this.delete("users/:id/pinned_lists/:list_id",void 0,{params:{id:W,list_id:Y}})}sendDmInConversation(W,Y){return this.post("dm_conversations/:dm_conversation_id/messages",Y,{params:{dm_conversation_id:W}})}sendDmToParticipant(W,Y){return this.post("dm_conversations/with/:participant_id/messages",Y,{params:{participant_id:W}})}createDmConversation(W){return this.post("dm_conversations",W)}}class U0 extends r{constructor(){super(...arguments);this._prefix=m}get readWrite(){return this}}var S0=U0;class f0 extends e{constructor(){super(...arguments);this._prefix=I}get readWrite(){return this}get labs(){if(this._labs)return this._labs;return this._labs=new S0(this)}}var R0=f0;class j1 extends h{get v1(){if(this._v1)return this._v1;return this._v1=new i(this)}get v2(){if(this._v2)return this._v2;return this._v2=new t(this)}async currentUser(W=!1){return await this.getCurrentUserObject(W)}async currentUserV2(W=!1){return await this.getCurrentUserV2Object(W)}search(W,Y){return this.v2.search(W,Y)}async generateAuthLink(W="oob",{authAccessType:Y,linkMode:J="authenticate",forceLogin:Z,screenName:G}={}){let $=await this.post("https://api.x.com/oauth/request_token",{oauth_callback:W,x_auth_access_type:Y}),Q=`https://api.x.com/oauth/${J}?oauth_token=${encodeURIComponent($.oauth_token)}`;if(Z!==void 0)Q+=`&force_login=${encodeURIComponent(Z)}`;if(G!==void 0)Q+=`&screen_name=${encodeURIComponent(G)}`;if(this._requestMaker.hasPlugins())this._requestMaker.applyPluginMethod("onOAuth1RequestToken",{client:this._requestMaker,url:Q,oauthResult:$});return{url:Q,...$}}async login(W){let Y=this.getActiveTokens();if(Y.type!=="oauth-1.0a")throw Error("You must setup TwitterApi instance with consumer keys to accept OAuth 1.0 login");let J=await this.post("https://api.x.com/oauth/access_token",{oauth_token:Y.accessToken,oauth_verifier:W}),Z=new this.constructor({appKey:Y.appKey,appSecret:Y.appSecret,accessToken:J.oauth_token,accessSecret:J.oauth_token_secret},this._requestMaker.clientSettings);return{accessToken:J.oauth_token,accessSecret:J.oauth_token_secret,userId:J.user_id,screenName:J.screen_name,client:Z}}async appLogin(){let W=this.getActiveTokens();if(W.type!=="oauth-1.0a")throw Error("You must setup TwitterApi instance with consumer keys to accept app-only login");let J=await new this.constructor({username:W.appKey,password:W.appSecret},this._requestMaker.clientSettings).post("https://api.x.com/oauth2/token",{grant_type:"client_credentials"});return new this.constructor(J.access_token,this._requestMaker.clientSettings)}generateOAuth2AuthLink(W,Y={}){var J,Z;if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. You can find your client ID in Twitter Developer Portal. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");let G=(J=Y.state)!==null&&J!==void 0?J:V.generateRandomString(32),$=V.getCodeVerifier(),Q=V.getCodeChallengeFromVerifier($),K=(Z=Y.scope)!==null&&Z!==void 0?Z:"",z=Array.isArray(K)?K.join(" "):K,X=new URL("https://x.com/i/oauth2/authorize"),x={response_type:"code",client_id:this._requestMaker.clientId,redirect_uri:W,state:G,code_challenge:Q,code_challenge_method:"s256",scope:z};O.addQueryParamsToUrl(X,x);let M={url:X.toString(),state:G,codeVerifier:$,codeChallenge:Q};if(this._requestMaker.hasPlugins())this._requestMaker.applyPluginMethod("onOAuth2RequestToken",{client:this._requestMaker,result:M,redirectUri:W});return M}async loginWithOAuth2({code:W,codeVerifier:Y,redirectUri:J}){if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");let Z=await this.post("https://api.x.com/2/oauth2/token",{code:W,code_verifier:Y,redirect_uri:J,grant_type:"authorization_code",client_id:this._requestMaker.clientId,client_secret:this._requestMaker.clientSecret});return this.parseOAuth2AccessTokenResult(Z)}async refreshOAuth2Token(W){if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");let Y=await this.post("https://api.x.com/2/oauth2/token",{refresh_token:W,grant_type:"refresh_token",client_id:this._requestMaker.clientId,client_secret:this._requestMaker.clientSecret});return this.parseOAuth2AccessTokenResult(Y)}async revokeOAuth2Token(W,Y="access_token"){if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");return await this.post("https://api.x.com/2/oauth2/revoke",{client_id:this._requestMaker.clientId,client_secret:this._requestMaker.clientSecret,token:W,token_type_hint:Y})}parseOAuth2AccessTokenResult(W){let Y=new this.constructor(W.access_token,this._requestMaker.clientSettings),J=W.scope.split(" ").filter((Z)=>Z);return{client:Y,expiresIn:W.expires_in,accessToken:W.access_token,scope:J,refreshToken:W.refresh_token}}}class N1 extends j1{get v1(){if(this._v1)return this._v1;return this._v1=new o(this)}get v2(){if(this._v2)return this._v2;return this._v2=new e(this)}get readOnly(){return this}}class q1 extends H{constructor(){super(...arguments);this._prefix=u}}class h1 extends q1{constructor(){super(...arguments);this._prefix=u}get readOnly(){return this}}class P1 extends H{constructor(){super(...arguments);this._prefix=d}}class w1 extends P1{constructor(){super(...arguments);this._prefix=d}get readOnly(){return this}}class k0 extends w1{constructor(){super(...arguments);this._prefix=d}get readWrite(){return this}}var _0=k0;class C0 extends h1{constructor(){super(...arguments);this._prefix=u}get readWrite(){return this}get sandbox(){if(this._sandbox)return this._sandbox;return this._sandbox=new _0(this)}}var v0=C0;class m4 extends N1{get v1(){if(this._v1)return this._v1;return this._v1=new v1(this)}get v2(){if(this._v2)return this._v2;return this._v2=new R0(this)}get readWrite(){return this}get ads(){if(this._ads)return this._ads;return this._ads=new v0(this)}static getErrors(W){var Y;if(typeof W!=="object")return[];if(!("data"in W))return[];return(Y=W.data.errors)!==null&&Y!==void 0?Y:[]}static getProfileImageInSize(W,Y){let J=W.split("/").pop(),Z=["normal","bigger","mini"],G=W;for(let Q of Z)if(J.includes(`_${Q}`)){G=W.replace(`_${Q}`,"");break}if(Y==="original")return G;let $=G.lastIndexOf(".");if($!==-1){let Q=G.slice($+1);return G.slice(0,$)+"_"+Y+"."+Q}else return G+"_"+Y}}var t0={clientId:process.env.X_CLIENT_ID,clientSecret:process.env.X_SECRET,redirectPath:"/auth/oauth/x/callback",scope:["tweet.read","users.read","offline.access"]};class I0 extends E{config;client;oauthStates=new Map;constructor(W={}){super();this.config={...t0,...W},this.client=new m4({clientId:this.config.clientId,clientSecret:this.config.clientSecret})}getRedirectUrl(){let{url:W,codeVerifier:Y,state:J}=this.client.generateOAuth2AuthLink(`${process.env.HOST_NAME}${this.config.redirectPath}`,{scope:this.config.scope});return this.oauthStates.set(J,{state:J,codeVerifier:Y}),b0.to(W),W}async onCallback(W){let Y=W.search.get("code"),J=W.search.get("state"),Z=this.oauthStates.get(J);if(!Z)throw Error("Invalid or expired OAuth state");let G=await this.client.loginWithOAuth2({code:Y,codeVerifier:Z.codeVerifier,redirectUri:`${process.env.HOST_NAME}${this.config.redirectPath}`});this.oauthStates.delete(J);let{data:$}=await G.client.v2.me({"user.fields":["name","username","entities"]}),{name:Q,email:K,id:z="",username:X}=$??{};return{name:Q,email:K,username:X,providerId:z}}}class u4{describe;rollout;when;serverOnly;salt;constructor(W={}){if(W.rollout!==void 0){let{rollout:Y}=W;if(!Number.isFinite(Y)||Y<0||Y>100)throw Error(`A feature's \`rollout\` must be a number between 0 and 100, received ${String(Y)}.`)}this.describe=W.describe,this.rollout=W.rollout,this.when=W.when,this.serverOnly=W.serverOnly??!1,this.salt=W.salt}}function r0(W={}){return new u4(W)}class T0 extends d4{rows=new Map;constructor(W={}){super();for(let[Y,J]of Object.entries(W))this.rows.set(Y,{key:Y,active:J})}async load(){return[...this.rows.values()].map((W)=>({...W}))}async write(W,Y,J){return this.rows.set(W,{key:W,active:Y,updatedBy:J.actor,updatedAt:new Date}),{actorRecorded:!0}}}export{P6 as viewRouteConfigDefaults,NW as translationConfigDefaults,A1 as toRangeHeaderValue,F6 as subjectFor,JW as scheduleConfigDefaults,V1 as resolveRange,PW as redisConfigDefaults,TW as rateLimiterConfigDefaults,n6 as queueConfigDefaults,Y1 as parseContentRange,Z6 as mintSessionToken,W6 as middlewareConfigDefaults,m6 as mailConfigDefaults,CW as logConfigDefaults,J6 as isSessionToken,L6 as inRollout,b6 as imageConfigDefaults,B6 as filesystemConfigDefaults,OW as featuresConfigDefaults,GW as eventConfigDefaults,D6 as evaluateFeature,BW as discoverListeners,KW as discoverJobs,XW as discoverCronJobs,zW as discoverCommands,jW as defineTranslationConfig,YW as defineScheduleConfig,q6 as defineRouteConfig,hW as defineRedisConfig,IW as defineRateLimiterConfig,l6 as defineQueueConfig,e0 as defineMiddlewareConfig,E6 as defineMailConfig,_W as defineLogConfig,v6 as defineImageConfig,z6 as defineFilesystemConfig,FW as defineFeaturesConfig,r0 as defineFeature,ZW as defineEventConfig,t6 as defineCommandConfig,e6 as defineCommand,Q6 as defineAuthConfig,r6 as commandConfigDefaults,N6 as bucketOf,j6 as bucketKey,K6 as authConfigDefaults,h6 as apiRouteConfigDefaults,I0 as XOAuthProvider,A6 as ViewRouteDispatcher,f6 as UndeclaredFeatureError,T0 as StaticFeatureFlagSource,C6 as Sharp,d6 as Scheduler,LW as ScheduleServiceProvider,Y6 as SESSION_TOKEN_PREFIX,n4 as S3Driver,VW as RouteServiceProvider,c6 as ResendDriver,wW as RedisServiceProvider,t4 as RedisRateLimiter,D1 as RedisManager,qW as RateLimiterServiceProvider,g1 as RateLimiterDriver,G6 as RateLimiter,g as RangeNotSatisfiableError,xW as QueueServiceProvider,o6 as QueueManager,E as OAuthProvider,bW as MiddlewareServiceProvider,T6 as MiddlewareRegistry,i6 as MemoryQueueDriver,AW as McpToolError,yW as McpRegistry,UW as MailServiceProvider,u6 as MailManager,vW as LogServiceProvider,M6 as LogManager,$W as Listener,kW as KernelIdServiceProvider,w6 as KernelId,QW as Job,$6 as InMemoryRateLimiter,RW as ImageServiceProvider,_6 as ImageOptimizationDriver,I6 as ImageManager,W0 as GoogleOAuthProvider,fW as FilesystemServiceProvider,x6 as FilesystemManager,X6 as FileSystemDriver,J1 as FileStorageDriver,w as FileNotFoundError,HW as FeaturesServiceProvider,S6 as FeatureSourceReadOnlyError,R6 as FeatureScope,O6 as FeatureReloadError,U6 as FeatureModelMissingError,k6 as FeatureManager,H6 as FeatureFlagStore,d4 as FeatureFlagSource,u4 as Feature,SW as EventServiceProvider,U as EventManager,e4 as Event,g6 as EmailDriver,p6 as DatabaseQueueDriver,DW as DatabaseFeatureFlagSource,WW as CronJob,gW as CommandRegistry,s6 as CommandFailed,a6 as Command,o4 as AzureBlobDriver,MW as AuthServiceProvider,V6 as AuthManager,y6 as ApiRouteDispatcher};
35
+ `).filter((Z)=>Z).map((Z)=>JSON.parse(Z))}async usage(W={}){return this.get("usage/tweets",W)}community(W,Y={}){return this.get("communities/:id",Y,{params:{id:W}})}searchCommunities(W,Y={}){return this.get("communities/search",{query:W,...Y})}}class r extends a{constructor(){super(...arguments);this._prefix=m}get readOnly(){return this}}class e extends t{constructor(){super(...arguments);this._prefix=I}get readOnly(){return this}get labs(){if(this._labs)return this._labs;return this._labs=new r(this)}hideReply(W,Y){return this.put("tweets/:id/hidden",{hidden:Y},{params:{id:W}})}like(W,Y){return this.post("users/:id/likes",{tweet_id:Y},{params:{id:W}})}unlike(W,Y){return this.delete("users/:id/likes/:tweet_id",void 0,{params:{id:W,tweet_id:Y}})}retweet(W,Y){return this.post("users/:id/retweets",{tweet_id:Y},{params:{id:W}})}unretweet(W,Y){return this.delete("users/:id/retweets/:tweet_id",void 0,{params:{id:W,tweet_id:Y}})}tweet(W,Y={}){if(typeof W==="object")Y=W;else Y={text:W,...Y};return this.post("tweets",Y)}async uploadMedia(W,Y,J=1048576){let Z=Y.media_category;if(!Y.media_category){if(Y.media_type.includes("gif"))Z="tweet_gif";else if(Y.media_type.includes("image"))Z="tweet_image";else if(Y.media_type.includes("video"))Z="tweet_video"}let G={additional_owners:Y.additional_owners,media_type:Y.media_type,total_bytes:W.length,media_category:Z},Q=(await this.post("media/upload/initialize",G)).data.id,K=Math.ceil(W.length/J),z=new Uint8Array(W);for(let x=0;x<K;x++){let M=x*J,R=Math.min(M+J,W.length),v=z.slice(M,R),b=Buffer.from(v),W1={segment_index:x,media:b};await this.post(`media/upload/${Q}/append`,W1,{forceBodyMode:"form-data"})}if((await this.post(`media/upload/${Q}/finalize`)).data.processing_info)await this.waitForMediaProcessing(Q);return Q}async waitForMediaProcessing(W){var Y;let Z=(await this.get("media/upload",{command:"STATUS",media_id:W})).data.processing_info;if(!Z)return;switch(Z.state){case"succeeded":return;case"failed":throw Error(`Media processing failed: ${(Y=Z.error)===null||Y===void 0?void 0:Y.message}`);case"pending":case"in_progress":{let G=Z===null||Z===void 0?void 0:Z.check_after_secs;if(G&&G>0)await new Promise(($)=>setTimeout($,G*1000)),await this.waitForMediaProcessing(W)}}}createMediaMetadata(W,Y){return this.post("media/metadata",{id:W,metadata:Y})}reply(W,Y,J={}){var Z;let G={in_reply_to_tweet_id:Y,...(Z=J.reply)!==null&&Z!==void 0?Z:{}};return this.post("tweets",{text:W,...J,reply:G})}quote(W,Y,J={}){return this.tweet(W,{...J,quote_tweet_id:Y})}async tweetThread(W){var Y,J;let Z=[];for(let G of W){let $=Z.length?Z[Z.length-1]:null,Q={...typeof G==="string"?{text:G}:G},K=$?$.data.id:(Y=Q.reply)===null||Y===void 0?void 0:Y.in_reply_to_tweet_id,z=(J=Q.text)!==null&&J!==void 0?J:"";if(K)Z.push(await this.reply(z,K,Q));else Z.push(await this.tweet(z,Q))}return Z}deleteTweet(W){return this.delete("tweets/:id",void 0,{params:{id:W}})}async bookmark(W){let Y=await this.getCurrentUserV2Object();return this.post("users/:id/bookmarks",{tweet_id:W},{params:{id:Y.data.id}})}async deleteBookmark(W){let Y=await this.getCurrentUserV2Object();return this.delete("users/:id/bookmarks/:tweet_id",void 0,{params:{id:Y.data.id,tweet_id:W}})}follow(W,Y){return this.post("users/:id/following",{target_user_id:Y},{params:{id:W}})}unfollow(W,Y){return this.delete("users/:source_user_id/following/:target_user_id",void 0,{params:{source_user_id:W,target_user_id:Y}})}block(W,Y){return this.post("users/:id/blocking",{target_user_id:Y},{params:{id:W}})}unblock(W,Y){return this.delete("users/:source_user_id/blocking/:target_user_id",void 0,{params:{source_user_id:W,target_user_id:Y}})}mute(W,Y){return this.post("users/:id/muting",{target_user_id:Y},{params:{id:W}})}unmute(W,Y){return this.delete("users/:source_user_id/muting/:target_user_id",void 0,{params:{source_user_id:W,target_user_id:Y}})}createList(W){return this.post("lists",W)}updateList(W,Y={}){return this.put("lists/:id",Y,{params:{id:W}})}removeList(W){return this.delete("lists/:id",void 0,{params:{id:W}})}addListMember(W,Y){return this.post("lists/:id/members",{user_id:Y},{params:{id:W}})}removeListMember(W,Y){return this.delete("lists/:id/members/:user_id",void 0,{params:{id:W,user_id:Y}})}subscribeToList(W,Y){return this.post("users/:id/followed_lists",{list_id:Y},{params:{id:W}})}unsubscribeOfList(W,Y){return this.delete("users/:id/followed_lists/:list_id",void 0,{params:{id:W,list_id:Y}})}pinList(W,Y){return this.post("users/:id/pinned_lists",{list_id:Y},{params:{id:W}})}unpinList(W,Y){return this.delete("users/:id/pinned_lists/:list_id",void 0,{params:{id:W,list_id:Y}})}sendDmInConversation(W,Y){return this.post("dm_conversations/:dm_conversation_id/messages",Y,{params:{dm_conversation_id:W}})}sendDmToParticipant(W,Y){return this.post("dm_conversations/with/:participant_id/messages",Y,{params:{participant_id:W}})}createDmConversation(W){return this.post("dm_conversations",W)}}class U0 extends r{constructor(){super(...arguments);this._prefix=m}get readWrite(){return this}}var S0=U0;class f0 extends e{constructor(){super(...arguments);this._prefix=I}get readWrite(){return this}get labs(){if(this._labs)return this._labs;return this._labs=new S0(this)}}var R0=f0;class j1 extends h{get v1(){if(this._v1)return this._v1;return this._v1=new i(this)}get v2(){if(this._v2)return this._v2;return this._v2=new t(this)}async currentUser(W=!1){return await this.getCurrentUserObject(W)}async currentUserV2(W=!1){return await this.getCurrentUserV2Object(W)}search(W,Y){return this.v2.search(W,Y)}async generateAuthLink(W="oob",{authAccessType:Y,linkMode:J="authenticate",forceLogin:Z,screenName:G}={}){let $=await this.post("https://api.x.com/oauth/request_token",{oauth_callback:W,x_auth_access_type:Y}),Q=`https://api.x.com/oauth/${J}?oauth_token=${encodeURIComponent($.oauth_token)}`;if(Z!==void 0)Q+=`&force_login=${encodeURIComponent(Z)}`;if(G!==void 0)Q+=`&screen_name=${encodeURIComponent(G)}`;if(this._requestMaker.hasPlugins())this._requestMaker.applyPluginMethod("onOAuth1RequestToken",{client:this._requestMaker,url:Q,oauthResult:$});return{url:Q,...$}}async login(W){let Y=this.getActiveTokens();if(Y.type!=="oauth-1.0a")throw Error("You must setup TwitterApi instance with consumer keys to accept OAuth 1.0 login");let J=await this.post("https://api.x.com/oauth/access_token",{oauth_token:Y.accessToken,oauth_verifier:W}),Z=new this.constructor({appKey:Y.appKey,appSecret:Y.appSecret,accessToken:J.oauth_token,accessSecret:J.oauth_token_secret},this._requestMaker.clientSettings);return{accessToken:J.oauth_token,accessSecret:J.oauth_token_secret,userId:J.user_id,screenName:J.screen_name,client:Z}}async appLogin(){let W=this.getActiveTokens();if(W.type!=="oauth-1.0a")throw Error("You must setup TwitterApi instance with consumer keys to accept app-only login");let J=await new this.constructor({username:W.appKey,password:W.appSecret},this._requestMaker.clientSettings).post("https://api.x.com/oauth2/token",{grant_type:"client_credentials"});return new this.constructor(J.access_token,this._requestMaker.clientSettings)}generateOAuth2AuthLink(W,Y={}){var J,Z;if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. You can find your client ID in Twitter Developer Portal. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");let G=(J=Y.state)!==null&&J!==void 0?J:V.generateRandomString(32),$=V.getCodeVerifier(),Q=V.getCodeChallengeFromVerifier($),K=(Z=Y.scope)!==null&&Z!==void 0?Z:"",z=Array.isArray(K)?K.join(" "):K,X=new URL("https://x.com/i/oauth2/authorize"),x={response_type:"code",client_id:this._requestMaker.clientId,redirect_uri:W,state:G,code_challenge:Q,code_challenge_method:"s256",scope:z};O.addQueryParamsToUrl(X,x);let M={url:X.toString(),state:G,codeVerifier:$,codeChallenge:Q};if(this._requestMaker.hasPlugins())this._requestMaker.applyPluginMethod("onOAuth2RequestToken",{client:this._requestMaker,result:M,redirectUri:W});return M}async loginWithOAuth2({code:W,codeVerifier:Y,redirectUri:J}){if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");let Z=await this.post("https://api.x.com/2/oauth2/token",{code:W,code_verifier:Y,redirect_uri:J,grant_type:"authorization_code",client_id:this._requestMaker.clientId,client_secret:this._requestMaker.clientSecret});return this.parseOAuth2AccessTokenResult(Z)}async refreshOAuth2Token(W){if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");let Y=await this.post("https://api.x.com/2/oauth2/token",{refresh_token:W,grant_type:"refresh_token",client_id:this._requestMaker.clientId,client_secret:this._requestMaker.clientSecret});return this.parseOAuth2AccessTokenResult(Y)}async revokeOAuth2Token(W,Y="access_token"){if(!this._requestMaker.clientId)throw Error("Twitter API instance is not initialized with client ID. Please build an instance with: new TwitterApi({ clientId: '<yourClientId>' })");return await this.post("https://api.x.com/2/oauth2/revoke",{client_id:this._requestMaker.clientId,client_secret:this._requestMaker.clientSecret,token:W,token_type_hint:Y})}parseOAuth2AccessTokenResult(W){let Y=new this.constructor(W.access_token,this._requestMaker.clientSettings),J=W.scope.split(" ").filter((Z)=>Z);return{client:Y,expiresIn:W.expires_in,accessToken:W.access_token,scope:J,refreshToken:W.refresh_token}}}class N1 extends j1{get v1(){if(this._v1)return this._v1;return this._v1=new o(this)}get v2(){if(this._v2)return this._v2;return this._v2=new e(this)}get readOnly(){return this}}class q1 extends H{constructor(){super(...arguments);this._prefix=u}}class h1 extends q1{constructor(){super(...arguments);this._prefix=u}get readOnly(){return this}}class P1 extends H{constructor(){super(...arguments);this._prefix=d}}class w1 extends P1{constructor(){super(...arguments);this._prefix=d}get readOnly(){return this}}class k0 extends w1{constructor(){super(...arguments);this._prefix=d}get readWrite(){return this}}var _0=k0;class C0 extends h1{constructor(){super(...arguments);this._prefix=u}get readWrite(){return this}get sandbox(){if(this._sandbox)return this._sandbox;return this._sandbox=new _0(this)}}var v0=C0;class m4 extends N1{get v1(){if(this._v1)return this._v1;return this._v1=new v1(this)}get v2(){if(this._v2)return this._v2;return this._v2=new R0(this)}get readWrite(){return this}get ads(){if(this._ads)return this._ads;return this._ads=new v0(this)}static getErrors(W){var Y;if(typeof W!=="object")return[];if(!("data"in W))return[];return(Y=W.data.errors)!==null&&Y!==void 0?Y:[]}static getProfileImageInSize(W,Y){let J=W.split("/").pop(),Z=["normal","bigger","mini"],G=W;for(let Q of Z)if(J.includes(`_${Q}`)){G=W.replace(`_${Q}`,"");break}if(Y==="original")return G;let $=G.lastIndexOf(".");if($!==-1){let Q=G.slice($+1);return G.slice(0,$)+"_"+Y+"."+Q}else return G+"_"+Y}}var t0={clientId:process.env.X_CLIENT_ID,clientSecret:process.env.X_SECRET,redirectPath:"/auth/oauth/x/callback",scope:["tweet.read","users.read","offline.access"]};class I0 extends E{config;client;oauthStates=new Map;constructor(W={}){super();this.config={...t0,...W},this.client=new m4({clientId:this.config.clientId,clientSecret:this.config.clientSecret})}getRedirectUrl(){let{url:W,codeVerifier:Y,state:J}=this.client.generateOAuth2AuthLink(`${process.env.HOST_NAME}${this.config.redirectPath}`,{scope:this.config.scope});return this.oauthStates.set(J,{state:J,codeVerifier:Y}),b0.to(W),W}async onCallback(W){let Y=W.search.get("code"),J=W.search.get("state"),Z=this.oauthStates.get(J);if(!Z)throw Error("Invalid or expired OAuth state");let G=await this.client.loginWithOAuth2({code:Y,codeVerifier:Z.codeVerifier,redirectUri:`${process.env.HOST_NAME}${this.config.redirectPath}`});this.oauthStates.delete(J);let{data:$}=await G.client.v2.me({"user.fields":["name","username","entities"]}),{name:Q,email:K,id:z="",username:X}=$??{};return{name:Q,email:K,username:X,providerId:z}}}class u4{describe;rollout;when;serverOnly;salt;constructor(W={}){if(W.rollout!==void 0){let{rollout:Y}=W;if(!Number.isFinite(Y)||Y<0||Y>100)throw Error(`A feature's \`rollout\` must be a number between 0 and 100, received ${String(Y)}.`)}this.describe=W.describe,this.rollout=W.rollout,this.when=W.when,this.serverOnly=W.serverOnly??!1,this.salt=W.salt}}function r0(W={}){return new u4(W)}class T0 extends d4{rows=new Map;constructor(W={}){super();for(let[Y,J]of Object.entries(W))this.rows.set(Y,{key:Y,active:J})}async load(){return[...this.rows.values()].map((W)=>({...W}))}async write(W,Y,J){return this.rows.set(W,{key:W,active:Y,updatedBy:J.actor,updatedAt:new Date}),{actorRecorded:!0}}}export{y6 as viewRouteConfigDefaults,HW as translationConfigDefaults,A1 as toRangeHeaderValue,U6 as subjectFor,XW as scheduleConfigDefaults,V1 as resolveRange,gW as redisConfigDefaults,AW as rateLimiterConfigDefaults,r6 as queueConfigDefaults,Y1 as parseContentRange,Z6 as mintSessionToken,W6 as middlewareConfigDefaults,p6 as mailConfigDefaults,qW as logConfigDefaults,J6 as isSessionToken,O6 as inRollout,q6 as imageConfigDefaults,B6 as filesystemConfigDefaults,RW as featuresConfigDefaults,BW as eventConfigDefaults,H6 as evaluateFeature,LW as discoverListeners,MW as discoverJobs,jW as discoverCronJobs,NW as discoverCommands,OW as defineTranslationConfig,KW as defineScheduleConfig,w6 as defineRouteConfig,VW as defineRedisConfig,wW as defineRateLimiterConfig,t6 as defineQueueConfig,e0 as defineMiddlewareConfig,d6 as defineMailConfig,TW as defineLogConfig,T6 as defineImageConfig,z6 as defineFilesystemConfig,fW as defineFeaturesConfig,r0 as defineFeature,zW as defineEventConfig,ZW as defineCommandConfig,$W as defineCommand,Q6 as defineAuthConfig,GW as commandConfigDefaults,F6 as bucketOf,D6 as bucketKey,K6 as authConfigDefaults,A6 as apiRouteConfigDefaults,I0 as XOAuthProvider,g6 as ViewRouteDispatcher,_6 as UndeclaredFeatureError,T0 as StaticFeatureFlagSource,I6 as Sharp,i6 as Scheduler,UW as ScheduleServiceProvider,Y6 as SESSION_TOKEN_PREFIX,n4 as S3Driver,uW as RouteServiceProvider,u6 as ResendDriver,cW as RedisServiceProvider,t4 as RedisRateLimiter,D1 as RedisManager,yW as RateLimiterServiceProvider,g1 as RateLimiterDriver,G6 as RateLimiter,g as RangeNotSatisfiableError,DW as QueueServiceProvider,WW as QueueManager,E as OAuthProvider,PW as MiddlewareServiceProvider,P6 as MiddlewareRegistry,e6 as MemoryQueueDriver,n6 as MemoryLockStore,EW as McpToolError,mW as McpRegistry,_W as MailServiceProvider,l6 as MailManager,hW as LogServiceProvider,M6 as LogManager,L6 as LockManager,j6 as LockLostError,xW as Listener,IW as KernelIdServiceProvider,V6 as KernelId,a6 as Job,$6 as InMemoryRateLimiter,bW as ImageServiceProvider,b6 as ImageOptimizationDriver,h6 as ImageManager,N6 as HeldLock,W0 as GoogleOAuthProvider,vW as FilesystemServiceProvider,x6 as FilesystemManager,X6 as FileSystemDriver,J1 as FileStorageDriver,w as FileNotFoundError,kW as FeaturesServiceProvider,k6 as FeatureSourceReadOnlyError,C6 as FeatureScope,S6 as FeatureReloadError,R6 as FeatureModelMissingError,v6 as FeatureManager,f6 as FeatureFlagStore,d4 as FeatureFlagSource,u4 as Feature,CW as EventServiceProvider,U as EventManager,e4 as Event,m6 as EmailDriver,s6 as DatabaseQueueDriver,o6 as DatabaseLockStore,SW as DatabaseFeatureFlagSource,QW as CronJob,dW as CommandRegistry,YW as CommandFailed,JW as Command,o4 as AzureBlobDriver,FW as AuthServiceProvider,E6 as AuthManager,c6 as ApiRouteDispatcher};
36
36
 
37
- //# debugId=899915F35F3B00B864756E2164756E21
37
+ //# debugId=8373CB14D00E7E5A64756E2164756E21