pingthings 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/README.md +12 -0
  2. package/bin/pingthings.js +17 -0
  3. package/package.json +1 -1
  4. package/packs/0ad-civilizations/manifest.json +56 -56
  5. package/packs/0ad-civilizations/sounds/alarm-alert.ogg +0 -0
  6. package/packs/0ad-civilizations/sounds/alarm-attack.ogg +0 -0
  7. package/packs/0ad-civilizations/sounds/alarm-defeat.ogg +0 -0
  8. package/packs/0ad-civilizations/sounds/alarm-no-resource.ogg +0 -0
  9. package/packs/0ad-civilizations/sounds/alarm-objective.ogg +0 -0
  10. package/packs/0ad-civilizations/sounds/alarm-research-complete.ogg +0 -0
  11. package/packs/0ad-civilizations/sounds/alarm-victory.ogg +0 -0
  12. package/packs/0ad-civilizations/sounds/greek-as-you-wish.ogg +0 -0
  13. package/packs/0ad-civilizations/sounds/greek-attack-1.ogg +0 -0
  14. package/packs/0ad-civilizations/sounds/greek-build-1.ogg +0 -0
  15. package/packs/0ad-civilizations/sounds/greek-heal-1.ogg +0 -0
  16. package/packs/0ad-civilizations/sounds/greek-march-1.ogg +0 -0
  17. package/packs/0ad-civilizations/sounds/greek-my-lord-1.ogg +0 -0
  18. package/packs/0ad-civilizations/sounds/greek-my-lord-2.ogg +0 -0
  19. package/packs/0ad-civilizations/sounds/greek-retreat-1.ogg +0 -0
  20. package/packs/0ad-civilizations/sounds/greek-what-is-it-1.ogg +0 -0
  21. package/packs/0ad-civilizations/sounds/greek-yes.ogg +0 -0
  22. package/packs/0ad-civilizations/sounds/latin-attack-1.ogg +0 -0
  23. package/packs/0ad-civilizations/sounds/latin-build-1.ogg +0 -0
  24. package/packs/0ad-civilizations/sounds/latin-fight-1.ogg +0 -0
  25. package/packs/0ad-civilizations/sounds/latin-heal-1.ogg +0 -0
  26. package/packs/0ad-civilizations/sounds/latin-hello-1.ogg +0 -0
  27. package/packs/0ad-civilizations/sounds/latin-my-lord-1.ogg +0 -0
  28. package/packs/0ad-civilizations/sounds/latin-what-is-it.ogg +0 -0
  29. package/packs/0ad-civilizations/sounds/persian-attack-1.ogg +0 -0
  30. package/packs/0ad-civilizations/sounds/persian-by-your-order.ogg +0 -0
  31. package/packs/0ad-civilizations/sounds/persian-forward-1.ogg +0 -0
  32. package/packs/0ad-civilizations/sounds/persian-i-will-go.ogg +0 -0
  33. package/packs/7kaa-soldiers/manifest.json +90 -90
  34. package/packs/7kaa-soldiers/sounds/00001-CH_A2.ogg +0 -0
  35. package/packs/7kaa-soldiers/sounds/00006-NO_V2.ogg +0 -0
  36. package/packs/7kaa-soldiers/sounds/00007-NO_V3.ogg +0 -0
  37. package/packs/7kaa-soldiers/sounds/00008-MA_V1.ogg +0 -0
  38. package/packs/7kaa-soldiers/sounds/00009-GR_V2.ogg +0 -0
  39. package/packs/7kaa-soldiers/sounds/00010-GR_V3.ogg +0 -0
  40. package/packs/7kaa-soldiers/sounds/00011-VI_V1.ogg +0 -0
  41. package/packs/7kaa-soldiers/sounds/00012-NO_A1.ogg +0 -0
  42. package/packs/7kaa-soldiers/sounds/00012-VI_V2.ogg +0 -0
  43. package/packs/7kaa-soldiers/sounds/00013-GR_V1.ogg +0 -0
  44. package/packs/7kaa-soldiers/sounds/00013-NO_A2.ogg +0 -0
  45. package/packs/7kaa-soldiers/sounds/00014-MA_A1.ogg +0 -0
  46. package/packs/7kaa-soldiers/sounds/00014-PE_V1.ogg +0 -0
  47. package/packs/7kaa-soldiers/sounds/00015-GR_A1.ogg +0 -0
  48. package/packs/7kaa-soldiers/sounds/00015-MA_V2.ogg +0 -0
  49. package/packs/7kaa-soldiers/sounds/00016-MA_V3.ogg +0 -0
  50. package/packs/7kaa-soldiers/sounds/00016-VI_A1.ogg +0 -0
  51. package/packs/7kaa-soldiers/sounds/00017-MA_V4.ogg +0 -0
  52. package/packs/7kaa-soldiers/sounds/00017-VI_A2.ogg +0 -0
  53. package/packs/7kaa-soldiers/sounds/00018-PE_A2.ogg +0 -0
  54. package/packs/7kaa-soldiers/sounds/00018-PE_V2.ogg +0 -0
  55. package/packs/7kaa-soldiers/sounds/00019-PE_V3.ogg +0 -0
  56. package/packs/7kaa-soldiers/sounds/00020-PE_A1.ogg +0 -0
  57. package/packs/7kaa-soldiers/sounds/00020-PE_V4.ogg +0 -0
  58. package/packs/7kaa-soldiers/sounds/00021-CH_A1.ogg +0 -0
  59. package/packs/7kaa-soldiers/sounds/00021-CH_V1.ogg +0 -0
  60. package/packs/7kaa-soldiers/sounds/00022-CH_V2.ogg +0 -0
  61. package/packs/7kaa-soldiers/sounds/00022-JA_A1.ogg +0 -0
  62. package/packs/7kaa-soldiers/sounds/00023-CH_V3.ogg +0 -0
  63. package/packs/7kaa-soldiers/sounds/00023-JA_A2.ogg +0 -0
  64. package/packs/7kaa-soldiers/sounds/00024-CH_V4.ogg +0 -0
  65. package/packs/7kaa-soldiers/sounds/00025-CH_V5.ogg +0 -0
  66. package/packs/7kaa-soldiers/sounds/00026-JA_V1.ogg +0 -0
  67. package/packs/7kaa-soldiers/sounds/00027-JA_V2.ogg +0 -0
  68. package/packs/7kaa-soldiers/sounds/00028-JA_V3.ogg +0 -0
  69. package/packs/7kaa-soldiers/sounds/00029-JA_V4.ogg +0 -0
  70. package/packs/7kaa-soldiers/sounds/00030-JA_V5.ogg +0 -0
  71. package/packs/7kaa-soldiers/sounds/00035-MA_V5.ogg +0 -0
  72. package/packs/7kaa-soldiers/sounds/00083-READY.ogg +0 -0
  73. package/packs/7kaa-soldiers/sounds/00084-NO_V1.ogg +0 -0
  74. package/packs/7kaa-soldiers/sounds/00085-EG_V1.ogg +0 -0
  75. package/packs/7kaa-soldiers/sounds/00086-EG_V2.ogg +0 -0
  76. package/packs/7kaa-soldiers/sounds/00087-EG_V3.ogg +0 -0
  77. package/packs/7kaa-soldiers/sounds/00088-EG_V4.ogg +0 -0
  78. package/packs/7kaa-soldiers/sounds/00089-IN_V1.ogg +0 -0
  79. package/packs/7kaa-soldiers/sounds/00090-IN_V2.ogg +0 -0
  80. package/packs/7kaa-soldiers/sounds/00091-IN_V3.ogg +0 -0
  81. package/packs/7kaa-soldiers/sounds/00092-IN_V4.ogg +0 -0
  82. package/packs/7kaa-soldiers/sounds/00093-ZU_V2.ogg +0 -0
  83. package/packs/7kaa-soldiers/sounds/00094-ZU_V3.ogg +0 -0
  84. package/packs/7kaa-soldiers/sounds/00095-ZU_V5.ogg +0 -0
  85. package/packs/7kaa-soldiers/sounds/00096-ZU_V7.ogg +0 -0
  86. package/packs/7kaa-soldiers/sounds/00097-ZU_V8.ogg +0 -0
  87. package/packs/fighting-announcer/manifest.json +62 -0
  88. package/packs/fighting-announcer/sounds/begin.ogg +0 -0
  89. package/packs/fighting-announcer/sounds/complete.ogg +0 -0
  90. package/packs/fighting-announcer/sounds/congratulations.ogg +0 -0
  91. package/packs/fighting-announcer/sounds/defeat.ogg +0 -0
  92. package/packs/fighting-announcer/sounds/failure.ogg +0 -0
  93. package/packs/fighting-announcer/sounds/fight.ogg +0 -0
  94. package/packs/fighting-announcer/sounds/final-round.ogg +0 -0
  95. package/packs/fighting-announcer/sounds/finish.ogg +0 -0
  96. package/packs/fighting-announcer/sounds/game-over.ogg +0 -0
  97. package/packs/fighting-announcer/sounds/get-set.ogg +0 -0
  98. package/packs/fighting-announcer/sounds/go.ogg +0 -0
  99. package/packs/fighting-announcer/sounds/great.ogg +0 -0
  100. package/packs/fighting-announcer/sounds/high-score.ogg +0 -0
  101. package/packs/fighting-announcer/sounds/new-record.ogg +0 -0
  102. package/packs/fighting-announcer/sounds/no-contest.ogg +0 -0
  103. package/packs/fighting-announcer/sounds/ready.ogg +0 -0
  104. package/packs/fighting-announcer/sounds/sudden-death.ogg +0 -0
  105. package/packs/fighting-announcer/sounds/victory.ogg +0 -0
  106. package/packs/fighting-announcer/sounds/you-lose.ogg +0 -0
  107. package/packs/fighting-announcer/sounds/you-win.ogg +0 -0
  108. package/packs/freedoom-arsenal/manifest.json +36 -36
  109. package/packs/freedoom-arsenal/sounds/dsbarexp.ogg +0 -0
  110. package/packs/freedoom-arsenal/sounds/dsbfg.ogg +0 -0
  111. package/packs/freedoom-arsenal/sounds/dsdoropn.ogg +0 -0
  112. package/packs/freedoom-arsenal/sounds/dsdshtgn.ogg +0 -0
  113. package/packs/freedoom-arsenal/sounds/dsgetpow.ogg +0 -0
  114. package/packs/freedoom-arsenal/sounds/dsitemup.ogg +0 -0
  115. package/packs/freedoom-arsenal/sounds/dsoof.ogg +0 -0
  116. package/packs/freedoom-arsenal/sounds/dspistol.ogg +0 -0
  117. package/packs/freedoom-arsenal/sounds/dsplasma.ogg +0 -0
  118. package/packs/freedoom-arsenal/sounds/dspldeth.ogg +0 -0
  119. package/packs/freedoom-arsenal/sounds/dspunch.ogg +0 -0
  120. package/packs/freedoom-arsenal/sounds/dsrlaunc.ogg +0 -0
  121. package/packs/freedoom-arsenal/sounds/dsrxplod.ogg +0 -0
  122. package/packs/freedoom-arsenal/sounds/dssawup.ogg +0 -0
  123. package/packs/freedoom-arsenal/sounds/dssgcock.ogg +0 -0
  124. package/packs/freedoom-arsenal/sounds/dsshotgn.ogg +0 -0
  125. package/packs/freedoom-arsenal/sounds/dsswtchn.ogg +0 -0
  126. package/packs/freedoom-arsenal/sounds/dstelept.ogg +0 -0
  127. package/packs/freedoom-arsenal/sounds/dswpnup.ogg +0 -0
  128. package/packs/kenney-interface/manifest.json +36 -36
  129. package/packs/kenney-interface/sounds/back-1.ogg +0 -0
  130. package/packs/kenney-interface/sounds/bong.ogg +0 -0
  131. package/packs/kenney-interface/sounds/click-1.ogg +0 -0
  132. package/packs/kenney-interface/sounds/close-1.ogg +0 -0
  133. package/packs/kenney-interface/sounds/confirmation-1.ogg +0 -0
  134. package/packs/kenney-interface/sounds/confirmation-2.ogg +0 -0
  135. package/packs/kenney-interface/sounds/confirmation-3.ogg +0 -0
  136. package/packs/kenney-interface/sounds/error-1.ogg +0 -0
  137. package/packs/kenney-interface/sounds/error-2.ogg +0 -0
  138. package/packs/kenney-interface/sounds/error-3.ogg +0 -0
  139. package/packs/kenney-interface/sounds/glitch-1.ogg +0 -0
  140. package/packs/kenney-interface/sounds/maximize-1.ogg +0 -0
  141. package/packs/kenney-interface/sounds/maximize-2.ogg +0 -0
  142. package/packs/kenney-interface/sounds/open-1.ogg +0 -0
  143. package/packs/kenney-interface/sounds/pluck-1.ogg +0 -0
  144. package/packs/kenney-interface/sounds/question-1.ogg +0 -0
  145. package/packs/kenney-interface/sounds/question-2.ogg +0 -0
  146. package/packs/kenney-interface/sounds/question-3.ogg +0 -0
  147. package/packs/kenney-scifi/manifest.json +36 -36
  148. package/packs/kenney-scifi/sounds/computer-1.ogg +0 -0
  149. package/packs/kenney-scifi/sounds/computer-2.ogg +0 -0
  150. package/packs/kenney-scifi/sounds/computer-3.ogg +0 -0
  151. package/packs/kenney-scifi/sounds/door-close.ogg +0 -0
  152. package/packs/kenney-scifi/sounds/door-open.ogg +0 -0
  153. package/packs/kenney-scifi/sounds/engine-1.ogg +0 -0
  154. package/packs/kenney-scifi/sounds/explosion-1.ogg +0 -0
  155. package/packs/kenney-scifi/sounds/explosion-2.ogg +0 -0
  156. package/packs/kenney-scifi/sounds/forcefield-1.ogg +0 -0
  157. package/packs/kenney-scifi/sounds/forcefield-2.ogg +0 -0
  158. package/packs/kenney-scifi/sounds/impact-1.ogg +0 -0
  159. package/packs/kenney-scifi/sounds/impact-2.ogg +0 -0
  160. package/packs/kenney-scifi/sounds/laser-large.ogg +0 -0
  161. package/packs/kenney-scifi/sounds/laser-retro.ogg +0 -0
  162. package/packs/kenney-scifi/sounds/low-explosion.ogg +0 -0
  163. package/packs/kenney-scifi/sounds/slime.ogg +0 -0
  164. package/packs/kenney-scifi/sounds/thruster-1.ogg +0 -0
  165. package/packs/kenney-scifi/sounds/thruster-2.ogg +0 -0
  166. package/packs/openarena-announcer/manifest.json +33 -33
  167. package/packs/openarena-announcer/sounds/accuracy.ogg +0 -0
  168. package/packs/openarena-announcer/sounds/assist.ogg +0 -0
  169. package/packs/openarena-announcer/sounds/defense.ogg +0 -0
  170. package/packs/openarena-announcer/sounds/denied.ogg +0 -0
  171. package/packs/openarena-announcer/sounds/excellent.ogg +0 -0
  172. package/packs/openarena-announcer/sounds/fight.ogg +0 -0
  173. package/packs/openarena-announcer/sounds/gauntlet.ogg +0 -0
  174. package/packs/openarena-announcer/sounds/humiliation.ogg +0 -0
  175. package/packs/openarena-announcer/sounds/impressive.ogg +0 -0
  176. package/packs/openarena-announcer/sounds/one.ogg +0 -0
  177. package/packs/openarena-announcer/sounds/perfect.ogg +0 -0
  178. package/packs/openarena-announcer/sounds/prepare.ogg +0 -0
  179. package/packs/openarena-announcer/sounds/sudden_death.ogg +0 -0
  180. package/packs/openarena-announcer/sounds/takenlead.ogg +0 -0
  181. package/packs/openarena-announcer/sounds/three.ogg +0 -0
  182. package/packs/openarena-announcer/sounds/two.ogg +0 -0
  183. package/packs/openarena-announcer/sounds/voc_holyshit.ogg +0 -0
  184. package/packs/openarena-announcer/sounds/youwin.ogg +0 -0
  185. package/packs/retro-8bit/manifest.json +36 -36
  186. package/packs/retro-8bit/sounds/button-1.ogg +0 -0
  187. package/packs/retro-8bit/sounds/button-2.ogg +0 -0
  188. package/packs/retro-8bit/sounds/button-3.ogg +0 -0
  189. package/packs/retro-8bit/sounds/coin-1.ogg +0 -0
  190. package/packs/retro-8bit/sounds/coin-2.ogg +0 -0
  191. package/packs/retro-8bit/sounds/coin-cluster.ogg +0 -0
  192. package/packs/retro-8bit/sounds/coin-double.ogg +0 -0
  193. package/packs/retro-8bit/sounds/damage-1.ogg +0 -0
  194. package/packs/retro-8bit/sounds/error-1.ogg +0 -0
  195. package/packs/retro-8bit/sounds/error-2.ogg +0 -0
  196. package/packs/retro-8bit/sounds/error-3.ogg +0 -0
  197. package/packs/retro-8bit/sounds/fanfare-1.ogg +0 -0
  198. package/packs/retro-8bit/sounds/fanfare-2.ogg +0 -0
  199. package/packs/retro-8bit/sounds/fanfare-3.ogg +0 -0
  200. package/packs/retro-8bit/sounds/negative-1.ogg +0 -0
  201. package/packs/retro-8bit/sounds/negative-2.ogg +0 -0
  202. package/packs/retro-8bit/sounds/powerup-1.ogg +0 -0
  203. package/packs/retro-8bit/sounds/powerup-2.ogg +0 -0
  204. package/packs/warzone2100-command/manifest.json +42 -42
  205. package/packs/warzone2100-command/sounds/construction-completed.ogg +0 -0
  206. package/packs/warzone2100-command/sounds/design-completed.ogg +0 -0
  207. package/packs/warzone2100-command/sounds/enemy-detected.ogg +0 -0
  208. package/packs/warzone2100-command/sounds/incoming-enemy-transport.ogg +0 -0
  209. package/packs/warzone2100-command/sounds/incoming-transmission.ogg +0 -0
  210. package/packs/warzone2100-command/sounds/major-research-completed.ogg +0 -0
  211. package/packs/warzone2100-command/sounds/mission-failed.ogg +0 -0
  212. package/packs/warzone2100-command/sounds/mission-objective.ogg +0 -0
  213. package/packs/warzone2100-command/sounds/mission-successful.ogg +0 -0
  214. package/packs/warzone2100-command/sounds/mission-update.ogg +0 -0
  215. package/packs/warzone2100-command/sounds/new-research-available.ogg +0 -0
  216. package/packs/warzone2100-command/sounds/nexus-laugh1.ogg +0 -0
  217. package/packs/warzone2100-command/sounds/nexus-laugh2.ogg +0 -0
  218. package/packs/warzone2100-command/sounds/power-low.ogg +0 -0
  219. package/packs/warzone2100-command/sounds/production-cancelled.ogg +0 -0
  220. package/packs/warzone2100-command/sounds/production-completed.ogg +0 -0
  221. package/packs/warzone2100-command/sounds/reinforcements-available.ogg +0 -0
  222. package/packs/warzone2100-command/sounds/research-completed.ogg +0 -0
  223. package/packs/warzone2100-command/sounds/retreat-heavy-damage.ogg +0 -0
  224. package/packs/warzone2100-command/sounds/structure-under-attack.ogg +0 -0
  225. package/packs/warzone2100-command/sounds/unit-repaired.ogg +0 -0
  226. package/packs/wesnoth-combat/manifest.json +38 -38
  227. package/packs/wesnoth-combat/sounds/axe.ogg +0 -0
  228. package/packs/wesnoth-combat/sounds/bow.ogg +0 -0
  229. package/packs/wesnoth-combat/sounds/crossbow.ogg +0 -0
  230. package/packs/wesnoth-combat/sounds/dwarf-laugh.ogg +0 -0
  231. package/packs/wesnoth-combat/sounds/explosion.ogg +0 -0
  232. package/packs/wesnoth-combat/sounds/fanfare-short.ogg +0 -0
  233. package/packs/wesnoth-combat/sounds/flame-big.ogg +0 -0
  234. package/packs/wesnoth-combat/sounds/gold.ogg +0 -0
  235. package/packs/wesnoth-combat/sounds/gryphon-shriek-1.ogg +0 -0
  236. package/packs/wesnoth-combat/sounds/hatchet.ogg +0 -0
  237. package/packs/wesnoth-combat/sounds/heal.ogg +0 -0
  238. package/packs/wesnoth-combat/sounds/lightning.ogg +0 -0
  239. package/packs/wesnoth-combat/sounds/magic-dark.ogg +0 -0
  240. package/packs/wesnoth-combat/sounds/magic-holy-1.ogg +0 -0
  241. package/packs/wesnoth-combat/sounds/magic-missile-1.ogg +0 -0
  242. package/packs/wesnoth-combat/sounds/open-chest.ogg +0 -0
  243. package/packs/wesnoth-combat/sounds/potion.ogg +0 -0
  244. package/packs/wesnoth-combat/sounds/sword-1.ogg +0 -0
  245. package/packs/wesnoth-combat/sounds/wolf-growl-1.ogg +0 -0
  246. package/packs/xonotic-announcer/manifest.json +52 -0
  247. package/packs/xonotic-announcer/sounds/1fragleft.ogg +0 -0
  248. package/packs/xonotic-announcer/sounds/airshot.ogg +0 -0
  249. package/packs/xonotic-announcer/sounds/amazing.ogg +0 -0
  250. package/packs/xonotic-announcer/sounds/awesome.ogg +0 -0
  251. package/packs/xonotic-announcer/sounds/begin.ogg +0 -0
  252. package/packs/xonotic-announcer/sounds/botlike.ogg +0 -0
  253. package/packs/xonotic-announcer/sounds/electrobitch.ogg +0 -0
  254. package/packs/xonotic-announcer/sounds/headshot.ogg +0 -0
  255. package/packs/xonotic-announcer/sounds/impressive.ogg +0 -0
  256. package/packs/xonotic-announcer/sounds/lastsecond.ogg +0 -0
  257. package/packs/xonotic-announcer/sounds/leadgained.ogg +0 -0
  258. package/packs/xonotic-announcer/sounds/narrowly.ogg +0 -0
  259. package/packs/xonotic-announcer/sounds/prepareforbattle.ogg +0 -0
  260. package/packs/xonotic-announcer/sounds/terminated.ogg +0 -0
  261. package/packs/xonotic-announcer/sounds/yoda.ogg +0 -0
  262. package/src/cli/completions.js +182 -0
  263. package/src/cli/config.js +32 -3
  264. package/src/cli/create.js +1 -1
  265. package/src/cli/doctor.js +134 -0
  266. package/src/cli/first-run.js +59 -0
  267. package/src/cli/init.js +11 -8
  268. package/src/cli/play.js +32 -2
  269. package/src/cli/random-pack.js +44 -0
  270. package/src/cli/select.js +36 -32
  271. package/src/cli/uninstall.js +5 -0
  272. package/src/cli/update.js +43 -0
  273. package/src/config.js +35 -0
  274. package/src/notify.js +19 -0
  275. package/src/player.js +17 -12
  276. package/packs/0ad-civilizations/sounds/alarm-alert.wav +0 -0
  277. package/packs/0ad-civilizations/sounds/alarm-attack.wav +0 -0
  278. package/packs/0ad-civilizations/sounds/alarm-defeat.wav +0 -0
  279. package/packs/0ad-civilizations/sounds/alarm-no-resource.wav +0 -0
  280. package/packs/0ad-civilizations/sounds/alarm-objective.wav +0 -0
  281. package/packs/0ad-civilizations/sounds/alarm-research-complete.wav +0 -0
  282. package/packs/0ad-civilizations/sounds/alarm-victory.wav +0 -0
  283. package/packs/0ad-civilizations/sounds/greek-as-you-wish.wav +0 -0
  284. package/packs/0ad-civilizations/sounds/greek-attack-1.wav +0 -0
  285. package/packs/0ad-civilizations/sounds/greek-build-1.wav +0 -0
  286. package/packs/0ad-civilizations/sounds/greek-heal-1.wav +0 -0
  287. package/packs/0ad-civilizations/sounds/greek-march-1.wav +0 -0
  288. package/packs/0ad-civilizations/sounds/greek-my-lord-1.wav +0 -0
  289. package/packs/0ad-civilizations/sounds/greek-my-lord-2.wav +0 -0
  290. package/packs/0ad-civilizations/sounds/greek-retreat-1.wav +0 -0
  291. package/packs/0ad-civilizations/sounds/greek-what-is-it-1.wav +0 -0
  292. package/packs/0ad-civilizations/sounds/greek-yes.wav +0 -0
  293. package/packs/0ad-civilizations/sounds/latin-attack-1.wav +0 -0
  294. package/packs/0ad-civilizations/sounds/latin-build-1.wav +0 -0
  295. package/packs/0ad-civilizations/sounds/latin-fight-1.wav +0 -0
  296. package/packs/0ad-civilizations/sounds/latin-heal-1.wav +0 -0
  297. package/packs/0ad-civilizations/sounds/latin-hello-1.wav +0 -0
  298. package/packs/0ad-civilizations/sounds/latin-my-lord-1.wav +0 -0
  299. package/packs/0ad-civilizations/sounds/latin-what-is-it.wav +0 -0
  300. package/packs/0ad-civilizations/sounds/persian-attack-1.wav +0 -0
  301. package/packs/0ad-civilizations/sounds/persian-by-your-order.wav +0 -0
  302. package/packs/0ad-civilizations/sounds/persian-forward-1.wav +0 -0
  303. package/packs/0ad-civilizations/sounds/persian-i-will-go.wav +0 -0
  304. package/packs/7kaa-soldiers/sounds/00001-CH_A2.wav +0 -0
  305. package/packs/7kaa-soldiers/sounds/00006-NO_V2.wav +0 -0
  306. package/packs/7kaa-soldiers/sounds/00007-NO_V3.wav +0 -0
  307. package/packs/7kaa-soldiers/sounds/00008-MA_V1.wav +0 -0
  308. package/packs/7kaa-soldiers/sounds/00009-GR_V2.wav +0 -0
  309. package/packs/7kaa-soldiers/sounds/00010-GR_V3.wav +0 -0
  310. package/packs/7kaa-soldiers/sounds/00011-VI_V1.wav +0 -0
  311. package/packs/7kaa-soldiers/sounds/00012-NO_A1.wav +0 -0
  312. package/packs/7kaa-soldiers/sounds/00012-VI_V2.wav +0 -0
  313. package/packs/7kaa-soldiers/sounds/00013-GR_V1.wav +0 -0
  314. package/packs/7kaa-soldiers/sounds/00013-NO_A2.wav +0 -0
  315. package/packs/7kaa-soldiers/sounds/00014-MA_A1.wav +0 -0
  316. package/packs/7kaa-soldiers/sounds/00014-PE_V1.wav +0 -0
  317. package/packs/7kaa-soldiers/sounds/00015-GR_A1.wav +0 -0
  318. package/packs/7kaa-soldiers/sounds/00015-MA_V2.wav +0 -0
  319. package/packs/7kaa-soldiers/sounds/00016-MA_V3.wav +0 -0
  320. package/packs/7kaa-soldiers/sounds/00016-VI_A1.wav +0 -0
  321. package/packs/7kaa-soldiers/sounds/00017-MA_V4.wav +0 -0
  322. package/packs/7kaa-soldiers/sounds/00017-VI_A2.wav +0 -0
  323. package/packs/7kaa-soldiers/sounds/00018-PE_A2.wav +0 -0
  324. package/packs/7kaa-soldiers/sounds/00018-PE_V2.wav +0 -0
  325. package/packs/7kaa-soldiers/sounds/00019-PE_V3.wav +0 -0
  326. package/packs/7kaa-soldiers/sounds/00020-PE_A1.wav +0 -0
  327. package/packs/7kaa-soldiers/sounds/00020-PE_V4.wav +0 -0
  328. package/packs/7kaa-soldiers/sounds/00021-CH_A1.wav +0 -0
  329. package/packs/7kaa-soldiers/sounds/00021-CH_V1.wav +0 -0
  330. package/packs/7kaa-soldiers/sounds/00022-CH_V2.wav +0 -0
  331. package/packs/7kaa-soldiers/sounds/00022-JA_A1.wav +0 -0
  332. package/packs/7kaa-soldiers/sounds/00023-CH_V3.wav +0 -0
  333. package/packs/7kaa-soldiers/sounds/00023-JA_A2.wav +0 -0
  334. package/packs/7kaa-soldiers/sounds/00024-CH_V4.wav +0 -0
  335. package/packs/7kaa-soldiers/sounds/00025-CH_V5.wav +0 -0
  336. package/packs/7kaa-soldiers/sounds/00026-JA_V1.wav +0 -0
  337. package/packs/7kaa-soldiers/sounds/00027-JA_V2.wav +0 -0
  338. package/packs/7kaa-soldiers/sounds/00028-JA_V3.wav +0 -0
  339. package/packs/7kaa-soldiers/sounds/00029-JA_V4.wav +0 -0
  340. package/packs/7kaa-soldiers/sounds/00030-JA_V5.wav +0 -0
  341. package/packs/7kaa-soldiers/sounds/00035-MA_V5.wav +0 -0
  342. package/packs/7kaa-soldiers/sounds/00083-READY.wav +0 -0
  343. package/packs/7kaa-soldiers/sounds/00084-NO_V1.wav +0 -0
  344. package/packs/7kaa-soldiers/sounds/00085-EG_V1.wav +0 -0
  345. package/packs/7kaa-soldiers/sounds/00086-EG_V2.wav +0 -0
  346. package/packs/7kaa-soldiers/sounds/00087-EG_V3.wav +0 -0
  347. package/packs/7kaa-soldiers/sounds/00088-EG_V4.wav +0 -0
  348. package/packs/7kaa-soldiers/sounds/00089-IN_V1.wav +0 -0
  349. package/packs/7kaa-soldiers/sounds/00090-IN_V2.wav +0 -0
  350. package/packs/7kaa-soldiers/sounds/00091-IN_V3.wav +0 -0
  351. package/packs/7kaa-soldiers/sounds/00092-IN_V4.wav +0 -0
  352. package/packs/7kaa-soldiers/sounds/00093-ZU_V2.wav +0 -0
  353. package/packs/7kaa-soldiers/sounds/00094-ZU_V3.wav +0 -0
  354. package/packs/7kaa-soldiers/sounds/00095-ZU_V5.wav +0 -0
  355. package/packs/7kaa-soldiers/sounds/00096-ZU_V7.wav +0 -0
  356. package/packs/7kaa-soldiers/sounds/00097-ZU_V8.wav +0 -0
  357. package/packs/freedoom-arsenal/sounds/dsbarexp.wav +0 -0
  358. package/packs/freedoom-arsenal/sounds/dsbfg.wav +0 -0
  359. package/packs/freedoom-arsenal/sounds/dsdoropn.wav +0 -0
  360. package/packs/freedoom-arsenal/sounds/dsdshtgn.wav +0 -0
  361. package/packs/freedoom-arsenal/sounds/dsgetpow.wav +0 -0
  362. package/packs/freedoom-arsenal/sounds/dsitemup.wav +0 -0
  363. package/packs/freedoom-arsenal/sounds/dsoof.wav +0 -0
  364. package/packs/freedoom-arsenal/sounds/dspistol.wav +0 -0
  365. package/packs/freedoom-arsenal/sounds/dsplasma.wav +0 -0
  366. package/packs/freedoom-arsenal/sounds/dspldeth.wav +0 -0
  367. package/packs/freedoom-arsenal/sounds/dspunch.wav +0 -0
  368. package/packs/freedoom-arsenal/sounds/dsrlaunc.wav +0 -0
  369. package/packs/freedoom-arsenal/sounds/dsrxplod.wav +0 -0
  370. package/packs/freedoom-arsenal/sounds/dssawup.wav +0 -0
  371. package/packs/freedoom-arsenal/sounds/dssgcock.wav +0 -0
  372. package/packs/freedoom-arsenal/sounds/dsshotgn.wav +0 -0
  373. package/packs/freedoom-arsenal/sounds/dsswtchn.wav +0 -0
  374. package/packs/freedoom-arsenal/sounds/dstelept.wav +0 -0
  375. package/packs/freedoom-arsenal/sounds/dswpnup.wav +0 -0
  376. package/packs/kenney-interface/sounds/back-1.wav +0 -0
  377. package/packs/kenney-interface/sounds/bong.wav +0 -0
  378. package/packs/kenney-interface/sounds/click-1.wav +0 -0
  379. package/packs/kenney-interface/sounds/close-1.wav +0 -0
  380. package/packs/kenney-interface/sounds/confirmation-1.wav +0 -0
  381. package/packs/kenney-interface/sounds/confirmation-2.wav +0 -0
  382. package/packs/kenney-interface/sounds/confirmation-3.wav +0 -0
  383. package/packs/kenney-interface/sounds/error-1.wav +0 -0
  384. package/packs/kenney-interface/sounds/error-2.wav +0 -0
  385. package/packs/kenney-interface/sounds/error-3.wav +0 -0
  386. package/packs/kenney-interface/sounds/glitch-1.wav +0 -0
  387. package/packs/kenney-interface/sounds/maximize-1.wav +0 -0
  388. package/packs/kenney-interface/sounds/maximize-2.wav +0 -0
  389. package/packs/kenney-interface/sounds/open-1.wav +0 -0
  390. package/packs/kenney-interface/sounds/pluck-1.wav +0 -0
  391. package/packs/kenney-interface/sounds/question-1.wav +0 -0
  392. package/packs/kenney-interface/sounds/question-2.wav +0 -0
  393. package/packs/kenney-interface/sounds/question-3.wav +0 -0
  394. package/packs/kenney-scifi/sounds/computer-1.wav +0 -0
  395. package/packs/kenney-scifi/sounds/computer-2.wav +0 -0
  396. package/packs/kenney-scifi/sounds/computer-3.wav +0 -0
  397. package/packs/kenney-scifi/sounds/door-close.wav +0 -0
  398. package/packs/kenney-scifi/sounds/door-open.wav +0 -0
  399. package/packs/kenney-scifi/sounds/engine-1.wav +0 -0
  400. package/packs/kenney-scifi/sounds/explosion-1.wav +0 -0
  401. package/packs/kenney-scifi/sounds/explosion-2.wav +0 -0
  402. package/packs/kenney-scifi/sounds/forcefield-1.wav +0 -0
  403. package/packs/kenney-scifi/sounds/forcefield-2.wav +0 -0
  404. package/packs/kenney-scifi/sounds/impact-1.wav +0 -0
  405. package/packs/kenney-scifi/sounds/impact-2.wav +0 -0
  406. package/packs/kenney-scifi/sounds/laser-large.wav +0 -0
  407. package/packs/kenney-scifi/sounds/laser-retro.wav +0 -0
  408. package/packs/kenney-scifi/sounds/low-explosion.wav +0 -0
  409. package/packs/kenney-scifi/sounds/slime.wav +0 -0
  410. package/packs/kenney-scifi/sounds/thruster-1.wav +0 -0
  411. package/packs/kenney-scifi/sounds/thruster-2.wav +0 -0
  412. package/packs/openarena-announcer/sounds/accuracy.wav +0 -0
  413. package/packs/openarena-announcer/sounds/assist.wav +0 -0
  414. package/packs/openarena-announcer/sounds/defense.wav +0 -0
  415. package/packs/openarena-announcer/sounds/denied.wav +0 -0
  416. package/packs/openarena-announcer/sounds/excellent.wav +0 -0
  417. package/packs/openarena-announcer/sounds/fight.wav +0 -0
  418. package/packs/openarena-announcer/sounds/gauntlet.wav +0 -0
  419. package/packs/openarena-announcer/sounds/humiliation.wav +0 -0
  420. package/packs/openarena-announcer/sounds/impressive.wav +0 -0
  421. package/packs/openarena-announcer/sounds/one.wav +0 -0
  422. package/packs/openarena-announcer/sounds/perfect.wav +0 -0
  423. package/packs/openarena-announcer/sounds/prepare.wav +0 -0
  424. package/packs/openarena-announcer/sounds/sudden_death.wav +0 -0
  425. package/packs/openarena-announcer/sounds/takenlead.wav +0 -0
  426. package/packs/openarena-announcer/sounds/three.wav +0 -0
  427. package/packs/openarena-announcer/sounds/two.wav +0 -0
  428. package/packs/openarena-announcer/sounds/voc_holyshit.wav +0 -0
  429. package/packs/openarena-announcer/sounds/youwin.wav +0 -0
  430. package/packs/retro-8bit/sounds/button-1.wav +0 -0
  431. package/packs/retro-8bit/sounds/button-2.wav +0 -0
  432. package/packs/retro-8bit/sounds/button-3.wav +0 -0
  433. package/packs/retro-8bit/sounds/coin-1.wav +0 -0
  434. package/packs/retro-8bit/sounds/coin-2.wav +0 -0
  435. package/packs/retro-8bit/sounds/coin-cluster.wav +0 -0
  436. package/packs/retro-8bit/sounds/coin-double.wav +0 -0
  437. package/packs/retro-8bit/sounds/damage-1.wav +0 -0
  438. package/packs/retro-8bit/sounds/error-1.wav +0 -0
  439. package/packs/retro-8bit/sounds/error-2.wav +0 -0
  440. package/packs/retro-8bit/sounds/error-3.wav +0 -0
  441. package/packs/retro-8bit/sounds/fanfare-1.wav +0 -0
  442. package/packs/retro-8bit/sounds/fanfare-2.wav +0 -0
  443. package/packs/retro-8bit/sounds/fanfare-3.wav +0 -0
  444. package/packs/retro-8bit/sounds/negative-1.wav +0 -0
  445. package/packs/retro-8bit/sounds/negative-2.wav +0 -0
  446. package/packs/retro-8bit/sounds/powerup-1.wav +0 -0
  447. package/packs/retro-8bit/sounds/powerup-2.wav +0 -0
  448. package/packs/warzone2100-command/sounds/construction-completed.wav +0 -0
  449. package/packs/warzone2100-command/sounds/design-completed.wav +0 -0
  450. package/packs/warzone2100-command/sounds/enemy-detected.wav +0 -0
  451. package/packs/warzone2100-command/sounds/incoming-enemy-transport.wav +0 -0
  452. package/packs/warzone2100-command/sounds/incoming-transmission.wav +0 -0
  453. package/packs/warzone2100-command/sounds/major-research-completed.wav +0 -0
  454. package/packs/warzone2100-command/sounds/mission-failed.wav +0 -0
  455. package/packs/warzone2100-command/sounds/mission-objective.wav +0 -0
  456. package/packs/warzone2100-command/sounds/mission-successful.wav +0 -0
  457. package/packs/warzone2100-command/sounds/mission-update.wav +0 -0
  458. package/packs/warzone2100-command/sounds/new-research-available.wav +0 -0
  459. package/packs/warzone2100-command/sounds/nexus-laugh1.wav +0 -0
  460. package/packs/warzone2100-command/sounds/nexus-laugh2.wav +0 -0
  461. package/packs/warzone2100-command/sounds/power-low.wav +0 -0
  462. package/packs/warzone2100-command/sounds/production-cancelled.wav +0 -0
  463. package/packs/warzone2100-command/sounds/production-completed.wav +0 -0
  464. package/packs/warzone2100-command/sounds/reinforcements-available.wav +0 -0
  465. package/packs/warzone2100-command/sounds/research-completed.wav +0 -0
  466. package/packs/warzone2100-command/sounds/retreat-heavy-damage.wav +0 -0
  467. package/packs/warzone2100-command/sounds/structure-under-attack.wav +0 -0
  468. package/packs/warzone2100-command/sounds/unit-repaired.wav +0 -0
  469. package/packs/wesnoth-combat/sounds/axe.wav +0 -0
  470. package/packs/wesnoth-combat/sounds/bow.wav +0 -0
  471. package/packs/wesnoth-combat/sounds/crossbow.wav +0 -0
  472. package/packs/wesnoth-combat/sounds/dwarf-laugh.wav +0 -0
  473. package/packs/wesnoth-combat/sounds/explosion.wav +0 -0
  474. package/packs/wesnoth-combat/sounds/fanfare-short.wav +0 -0
  475. package/packs/wesnoth-combat/sounds/flame-big.wav +0 -0
  476. package/packs/wesnoth-combat/sounds/gold.wav +0 -0
  477. package/packs/wesnoth-combat/sounds/gryphon-shriek-1.wav +0 -0
  478. package/packs/wesnoth-combat/sounds/hatchet.wav +0 -0
  479. package/packs/wesnoth-combat/sounds/heal.wav +0 -0
  480. package/packs/wesnoth-combat/sounds/lightning.wav +0 -0
  481. package/packs/wesnoth-combat/sounds/magic-dark.wav +0 -0
  482. package/packs/wesnoth-combat/sounds/magic-holy-1.wav +0 -0
  483. package/packs/wesnoth-combat/sounds/magic-missile-1.wav +0 -0
  484. package/packs/wesnoth-combat/sounds/open-chest.wav +0 -0
  485. package/packs/wesnoth-combat/sounds/potion.wav +0 -0
  486. package/packs/wesnoth-combat/sounds/sword-1.wav +0 -0
  487. package/packs/wesnoth-combat/sounds/wolf-growl-1.wav +0 -0
@@ -0,0 +1,43 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { readFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+
6
+ const __dirname = dirname(fileURLToPath(import.meta.url));
7
+
8
+ function showHelp() {
9
+ console.log(`
10
+ Usage: pingthings update
11
+
12
+ Check for new versions of pingthings on npm.
13
+ `);
14
+ }
15
+
16
+ export default function update(args) {
17
+ if (args.includes('--help') || args.includes('-h')) {
18
+ showHelp();
19
+ return;
20
+ }
21
+
22
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf8'));
23
+ const current = pkg.version;
24
+
25
+ console.log(`\nCurrent version: ${current}`);
26
+ console.log('Checking npm for updates...\n');
27
+
28
+ try {
29
+ const latest = execFileSync('npm', ['view', 'pingthings', 'version'], {
30
+ encoding: 'utf8',
31
+ timeout: 10000,
32
+ }).trim();
33
+
34
+ if (latest === current) {
35
+ console.log('You are on the latest version.');
36
+ } else {
37
+ console.log(`New version available: ${latest}`);
38
+ console.log(`\nRun: npm install -g pingthings@${latest}`);
39
+ }
40
+ } catch {
41
+ console.error('Could not check for updates. Are you online?');
42
+ }
43
+ }
package/src/config.js CHANGED
@@ -8,6 +8,9 @@ const DEFAULTS = {
8
8
  specificSound: null,
9
9
  volume: 100,
10
10
  eventPacks: {},
11
+ cooldown: true,
12
+ quietHours: null,
13
+ notifications: false,
11
14
  };
12
15
 
13
16
  export function getConfigDir() {
@@ -21,6 +24,10 @@ export function getConfigPath() {
21
24
  return join(getConfigDir(), 'config.json');
22
25
  }
23
26
 
27
+ export function isFirstRun() {
28
+ return !existsSync(getConfigPath());
29
+ }
30
+
24
31
  export function readConfig() {
25
32
  const configPath = getConfigPath();
26
33
  if (!existsSync(configPath)) {
@@ -45,6 +52,34 @@ export function getDefaults() {
45
52
  return { ...DEFAULTS };
46
53
  }
47
54
 
55
+ export function getLastPlayed() {
56
+ const path = join(getConfigDir(), '.last-played');
57
+ try {
58
+ return readFileSync(path, 'utf8').trim();
59
+ } catch {
60
+ return null;
61
+ }
62
+ }
63
+
64
+ export function setLastPlayed(soundPath) {
65
+ const path = join(getConfigDir(), '.last-played');
66
+ try {
67
+ writeFileSync(path, soundPath, 'utf8');
68
+ } catch {}
69
+ }
70
+
71
+ export function isQuietHours(config) {
72
+ if (!config.quietHours) return false;
73
+ const [start, end] = config.quietHours.split('-').map(Number);
74
+ if (isNaN(start) || isNaN(end)) return false;
75
+ const hour = new Date().getHours();
76
+ if (start < end) {
77
+ return hour >= start && hour < end;
78
+ }
79
+ // Wraps midnight (e.g., 22-7)
80
+ return hour >= start || hour < end;
81
+ }
82
+
48
83
  export const VALID_MODES = ['random', 'specific', 'informational'];
49
84
 
50
85
  export const VALID_EVENTS = ['done', 'permission', 'complete', 'error', 'blocked'];
package/src/notify.js ADDED
@@ -0,0 +1,19 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { platform } from 'node:os';
3
+
4
+ export function sendNotification(title, message) {
5
+ const os = platform();
6
+
7
+ if (os === 'darwin') {
8
+ spawn('osascript', [
9
+ '-e',
10
+ `display notification "${message}" with title "${title}"`,
11
+ ], { detached: true, stdio: 'ignore' }).unref();
12
+ } else if (os === 'linux') {
13
+ spawn('notify-send', [title, message], {
14
+ detached: true,
15
+ stdio: 'ignore',
16
+ }).on('error', () => {}).unref();
17
+ }
18
+ // Windows: no native CLI notification without dependencies, skip for now
19
+ }
package/src/player.js CHANGED
@@ -2,17 +2,23 @@ import { spawn, execFileSync } from 'node:child_process';
2
2
  import { existsSync } from 'node:fs';
3
3
  import { platform } from 'node:os';
4
4
 
5
+ function commandExists(cmd) {
6
+ try {
7
+ execFileSync('which', [cmd], { stdio: 'pipe' });
8
+ return true;
9
+ } catch {
10
+ return false;
11
+ }
12
+ }
13
+
5
14
  function getPlayerCommand() {
6
15
  switch (platform()) {
7
16
  case 'darwin':
8
17
  return 'afplay';
9
18
  case 'linux': {
10
- try {
11
- execFileSync('which', ['paplay'], { stdio: 'pipe' });
12
- return 'paplay';
13
- } catch {
14
- return 'aplay';
15
- }
19
+ if (commandExists('paplay')) return 'paplay';
20
+ if (commandExists('aplay')) return 'aplay';
21
+ return null;
16
22
  }
17
23
  case 'win32':
18
24
  return 'powershell';
@@ -26,20 +32,16 @@ function buildArgs(cmd, filePath, volume) {
26
32
 
27
33
  switch (cmd) {
28
34
  case 'afplay': {
29
- // afplay volume: 0.0 to 1.0
30
35
  const afplayVol = (vol / 100).toFixed(2);
31
36
  return ['-v', afplayVol, filePath];
32
37
  }
33
38
  case 'paplay': {
34
- // paplay volume: 0 to 65536 (100% = 65536)
35
39
  const paplayVol = Math.round((vol / 100) * 65536).toString();
36
40
  return ['--volume', paplayVol, filePath];
37
41
  }
38
42
  case 'aplay':
39
- // aplay doesn't support volume natively
40
43
  return [filePath];
41
44
  case 'powershell': {
42
- // PowerShell SoundPlayer doesn't support volume, but it plays the file
43
45
  const script = `(New-Object System.Media.SoundPlayer '${filePath.replace(/'/g, "''")}').PlaySync()`;
44
46
  return ['-NoProfile', '-Command', script];
45
47
  }
@@ -55,7 +57,8 @@ export function playSound(filePath, volume) {
55
57
 
56
58
  const cmd = getPlayerCommand();
57
59
  if (!cmd) {
58
- throw new Error(`Unsupported platform: ${platform()}. Supported: macOS, Linux, Windows.`);
60
+ // No audio player available — skip silently (e.g. CI environments)
61
+ return;
59
62
  }
60
63
 
61
64
  const args = buildArgs(cmd, filePath, volume);
@@ -65,6 +68,8 @@ export function playSound(filePath, volume) {
65
68
  stdio: 'ignore',
66
69
  });
67
70
 
71
+ // Handle spawn errors gracefully (command not found, permission denied)
72
+ child.on('error', () => {});
68
73
  child.unref();
69
74
  }
70
75
 
@@ -75,7 +80,7 @@ export function playSoundSync(filePath, volume) {
75
80
 
76
81
  const cmd = getPlayerCommand();
77
82
  if (!cmd) {
78
- throw new Error(`Unsupported platform: ${platform()}. Supported: macOS, Linux, Windows.`);
83
+ return;
79
84
  }
80
85
 
81
86
  const args = buildArgs(cmd, filePath, volume);
Binary file
Binary file
Binary file