flok 0.0.12 → 0.0.14

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 (867) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -4
  3. data/Rakefile +76 -10
  4. data/app/drivers/chrome/README.md +37 -22
  5. data/app/drivers/chrome/Rakefile +77 -3
  6. data/app/drivers/chrome/build_context.rb +17 -0
  7. data/app/drivers/chrome/cakery/spec.js.erb +11 -0
  8. data/app/drivers/chrome/config.yml +18 -3
  9. data/app/drivers/chrome/pipe.rb +70 -0
  10. data/app/drivers/chrome/spec/config/config.js +39 -0
  11. data/app/drivers/chrome/spec/init/qunit.js +3828 -0
  12. data/app/drivers/chrome/spec/spec/controller_debug_spec.js +16 -0
  13. data/app/drivers/chrome/spec/spec/debug_spec.js +18 -0
  14. data/app/drivers/chrome/spec/spec/sel_scope_spec.js +160 -0
  15. data/app/drivers/chrome/spec/spec/vars_spec.js +28 -0
  16. data/app/drivers/chrome/src/bench.js +19 -0
  17. data/app/drivers/chrome/src/controller.js +164 -0
  18. data/app/drivers/chrome/src/debug.js +75 -0
  19. data/app/drivers/chrome/src/dispatch.js +52 -0
  20. data/app/drivers/chrome/src/event.js +10 -0
  21. data/app/drivers/chrome/src/helpers.js +4 -4
  22. data/app/drivers/chrome/src/net.js +8 -36
  23. data/app/drivers/chrome/src/segue.js +18 -0
  24. data/app/drivers/chrome/src/sockio.js +34 -0
  25. data/app/drivers/chrome/src/timer.js +9 -0
  26. data/app/drivers/chrome/src/ui.js +192 -87
  27. data/app/drivers/chrome/src/vendor/socket.io.js +3 -0
  28. data/app/kern/controller.js +116 -0
  29. data/app/kern/dispatch.js +171 -0
  30. data/app/kern/macro.rb +24 -0
  31. data/{output.js → app/kern/mod/controller.js} +0 -0
  32. data/app/kern/mod/debug.js +120 -0
  33. data/app/kern/mod/event.js +29 -0
  34. data/app/kern/mod/net.js +17 -0
  35. data/app/kern/mod/segue.js +36 -0
  36. data/app/kern/mod/sockio.js +1 -0
  37. data/app/kern/mod/ui.js +2 -0
  38. data/app/kern/net_cb.js +25 -0
  39. data/app/kern/services/rest.rb +310 -0
  40. data/app/kern/services/timer.rb +30 -0
  41. data/app/kern/tel.js +40 -0
  42. data/bin/flok +61 -17
  43. data/docs/architecture.md +3 -15
  44. data/docs/client_api.md +21 -0
  45. data/docs/compilation.md +31 -5
  46. data/docs/controllers.md +97 -0
  47. data/docs/datatypes.md +42 -0
  48. data/docs/debug_server.md +17 -0
  49. data/docs/drivers.md +52 -0
  50. data/docs/images/flok_arch.png +0 -0
  51. data/docs/images/ui_surface_and_views.png +0 -0
  52. data/docs/images/view_and_spot.png +0 -0
  53. data/docs/interactive.md +35 -0
  54. data/docs/kernel_api.md +37 -0
  55. data/docs/messaging.md +110 -0
  56. data/docs/mod/controller.md +35 -0
  57. data/docs/mod/debug.md +32 -0
  58. data/docs/mod/debug/dump_ui.md +64 -0
  59. data/docs/mod/event.md +16 -0
  60. data/docs/mod/net.md +21 -0
  61. data/docs/mod/persist.md +36 -0
  62. data/docs/mod/sockio.md +13 -0
  63. data/docs/mod/timer.md +8 -0
  64. data/docs/mod/ui.md +40 -0
  65. data/docs/modules.md +9 -0
  66. data/docs/project.md +40 -0
  67. data/docs/project_layout.md +8 -5
  68. data/docs/rakefile.md +13 -0
  69. data/docs/scheduling.md +45 -0
  70. data/docs/services.md +74 -0
  71. data/docs/services/rest.md +21 -0
  72. data/docs/services/timer.md +21 -0
  73. data/docs/testing.md +80 -1
  74. data/flok.gemspec +4 -0
  75. data/lib/flok.rb +6 -0
  76. data/lib/flok/build.rb +75 -26
  77. data/lib/flok/interactive.rb +58 -0
  78. data/lib/flok/platform.rb +32 -0
  79. data/lib/flok/project.rb +63 -0
  80. data/lib/flok/project_template/Gemfile.erb +2 -0
  81. data/lib/flok/project_template/app/controllers/controller.rb +1 -0
  82. data/lib/flok/service_compiler_templates/services.js.erb +13 -0
  83. data/lib/flok/services_compiler.rb +94 -0
  84. data/lib/flok/user_compiler.rb +295 -0
  85. data/lib/flok/user_compiler_templates/ctable.js.erb +33 -0
  86. data/lib/flok/utilities.rb +16 -0
  87. data/lib/flok/version.rb +1 -1
  88. data/logo.png +0 -0
  89. data/opt/clojure/compiler.jar +0 -0
  90. data/opt/clojure/flokjure +53 -0
  91. data/opt/clojure/main.js +13 -0
  92. data/spec/env/etc.rb +2 -0
  93. data/spec/env/iface.rb +64 -0
  94. data/spec/env/kern.rb +128 -0
  95. data/spec/etc/cli_spec.rb +117 -0
  96. data/spec/etc/lib/build_spec.rb +188 -0
  97. data/spec/etc/lib/platform_spec.rb +33 -0
  98. data/spec/etc/lib/project_spec.rb +25 -0
  99. data/spec/etc/macro_spec.rb +35 -0
  100. data/spec/etc/service_compiler/service0.rb +10 -0
  101. data/spec/etc/services_compiler_spec.rb +41 -0
  102. data/spec/etc/user_compiler/controller0.rb +14 -0
  103. data/spec/etc/user_compiler_spec.rb +68 -0
  104. data/spec/iface/driver/assets/debug_socket_server.js +42 -0
  105. data/spec/iface/driver/assets/node_modules/socket.io/.npmignore +4 -0
  106. data/spec/iface/driver/assets/node_modules/socket.io/.travis.yml +16 -0
  107. data/spec/iface/driver/assets/node_modules/socket.io/History.md +491 -0
  108. data/spec/iface/driver/assets/node_modules/socket.io/LICENSE +22 -0
  109. data/spec/iface/driver/assets/node_modules/socket.io/Makefile +15 -0
  110. data/spec/iface/driver/assets/node_modules/socket.io/Readme.md +374 -0
  111. data/spec/iface/driver/assets/node_modules/socket.io/index.js +2 -0
  112. data/spec/iface/driver/assets/node_modules/socket.io/lib/client.js +247 -0
  113. data/spec/iface/driver/assets/node_modules/socket.io/lib/index.js +379 -0
  114. data/spec/iface/driver/assets/node_modules/socket.io/lib/namespace.js +242 -0
  115. data/spec/iface/driver/assets/node_modules/socket.io/lib/socket.js +449 -0
  116. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/.jshintrc +3 -0
  117. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/.npmignore +6 -0
  118. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/History.md +157 -0
  119. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/Makefile +33 -0
  120. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/Readme.md +156 -0
  121. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/browser.js +147 -0
  122. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/component.json +19 -0
  123. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/debug.js +197 -0
  124. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node.js +209 -0
  125. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/.npmignore +5 -0
  126. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/README.md +33 -0
  127. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/index.js +111 -0
  128. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/node_modules/ms/package.json +46 -0
  129. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/debug/package.json +73 -0
  130. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/.npmignore +6 -0
  131. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/.travis.yml +7 -0
  132. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/History.md +408 -0
  133. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/Makefile +23 -0
  134. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/README.md +517 -0
  135. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/index.js +4 -0
  136. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/engine.io.js +126 -0
  137. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/server.js +391 -0
  138. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/socket.js +393 -0
  139. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transport.js +114 -0
  140. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/index.js +36 -0
  141. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/polling-jsonp.js +108 -0
  142. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/polling-xhr.js +101 -0
  143. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/polling.js +279 -0
  144. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/lib/transports/websocket.js +110 -0
  145. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/.npmignore +3 -0
  146. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/README.md +18 -0
  147. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/lib/base64id.js +103 -0
  148. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/base64id/package.json +48 -0
  149. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/.jshintrc +3 -0
  150. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/.npmignore +6 -0
  151. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/History.md +132 -0
  152. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/Makefile +33 -0
  153. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/Readme.md +153 -0
  154. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/browser.js +144 -0
  155. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/component.json +19 -0
  156. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/debug.js +197 -0
  157. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node.js +129 -0
  158. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/.npmignore +5 -0
  159. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/README.md +33 -0
  160. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/index.js +111 -0
  161. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/node_modules/ms/package.json +46 -0
  162. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/debug/package.json +71 -0
  163. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.npmignore +17 -0
  164. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.travis.yml +45 -0
  165. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/.zuul.yml +18 -0
  166. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/History.md +100 -0
  167. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/LICENSE +22 -0
  168. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Makefile +26 -0
  169. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/Readme.md +202 -0
  170. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/index.js +2 -0
  171. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/browser.js +594 -0
  172. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/index.js +467 -0
  173. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/lib/keys.js +19 -0
  174. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.npmignore +2 -0
  175. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/.travis.yml +5 -0
  176. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/LICENCE +19 -0
  177. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/README.md +75 -0
  178. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/index.js +28 -0
  179. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/package.json +62 -0
  180. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/after/test/after-test.js +120 -0
  181. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/.npmignore +17 -0
  182. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/Makefile +8 -0
  183. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/README.md +17 -0
  184. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/index.js +29 -0
  185. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/package.json +40 -0
  186. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/arraybuffer.slice/test/slice-buffer.js +227 -0
  187. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.npmignore +1 -0
  188. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.travis.yml +6 -0
  189. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/LICENSE-MIT +22 -0
  190. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md +23 -0
  191. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/grunt.js +39 -0
  192. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js +59 -0
  193. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json +56 -0
  194. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/base64-arraybuffer/test/base64-arraybuffer_test.js +72 -0
  195. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.npmignore +2 -0
  196. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/.zuul.yml +8 -0
  197. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/Makefile +14 -0
  198. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/README.md +11 -0
  199. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/index.js +49 -0
  200. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/package.json +44 -0
  201. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/blob/test/index.js +52 -0
  202. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/.npmignore +15 -0
  203. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/History.md +5 -0
  204. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/LICENSE +20 -0
  205. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/Makefile +3 -0
  206. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/README.md +4 -0
  207. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/fixtures/big.json +1 -0
  208. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/index.js +58 -0
  209. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/README.md +54 -0
  210. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/build/build.js +209 -0
  211. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/component.json +19 -0
  212. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/index.js +3 -0
  213. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/package.json +53 -0
  214. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/package.json +39 -0
  215. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/has-binary/test.js +108 -0
  216. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/.gitattributes +2 -0
  217. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/.npmignore +20 -0
  218. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/.travis.yml +19 -0
  219. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/Gruntfile.js +72 -0
  220. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/LICENSE-GPL.txt +278 -0
  221. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/LICENSE-MIT.txt +20 -0
  222. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/README.md +119 -0
  223. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/bower.json +14 -0
  224. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/component.json +16 -0
  225. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/package.json +73 -0
  226. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/tests/generate-test-data.py +47 -0
  227. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/tests/index.html +35 -0
  228. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/tests/tests.js +242 -0
  229. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/utf8.js +239 -0
  230. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/node_modules/utf8/x.js +46 -0
  231. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/engine.io-parser/package.json +58 -0
  232. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/.npmignore +11 -0
  233. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/.travis.yml +5 -0
  234. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/History.md +322 -0
  235. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/Makefile +40 -0
  236. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/README.md +183 -0
  237. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/binding.gyp +16 -0
  238. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Makefile +355 -0
  239. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/bufferutil.node.d +1 -0
  240. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d +25 -0
  241. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/obj.target/validation/src/validation.o.d +25 -0
  242. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/.deps/Release/validation.node.d +1 -0
  243. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/bufferutil.node +0 -0
  244. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/linker.lock +0 -0
  245. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/Release/validation.node +0 -0
  246. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/binding.Makefile +6 -0
  247. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/bufferutil.target.mk +156 -0
  248. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/config.gypi +117 -0
  249. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/gyp-mac-tool +512 -0
  250. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/build/validation.target.mk +156 -0
  251. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/builderror.log +15 -0
  252. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/index.js +49 -0
  253. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/BufferPool.js +59 -0
  254. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/BufferUtil.fallback.js +47 -0
  255. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/BufferUtil.js +16 -0
  256. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/ErrorCodes.js +24 -0
  257. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Receiver.hixie.js +180 -0
  258. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Receiver.js +585 -0
  259. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Sender.hixie.js +120 -0
  260. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Sender.js +229 -0
  261. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Validation.fallback.js +12 -0
  262. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/Validation.js +16 -0
  263. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/WebSocket.js +879 -0
  264. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/WebSocketServer.js +467 -0
  265. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/lib/browser.js +43 -0
  266. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/.dntrc +37 -0
  267. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/CHANGELOG.md +216 -0
  268. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/LICENSE.md +13 -0
  269. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/README.md +1208 -0
  270. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/appveyor.yml +32 -0
  271. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/include_dirs.js +1 -0
  272. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/nan.h +2428 -0
  273. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/nan/package.json +84 -0
  274. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/.npmignore +7 -0
  275. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/Makefile +12 -0
  276. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/README.md +69 -0
  277. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/lib/options.js +86 -0
  278. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/options/package.json +51 -0
  279. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/.npmignore +3 -0
  280. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/.travis.yml +17 -0
  281. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/README.md +97 -0
  282. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/index.js +125 -0
  283. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/package.json +68 -0
  284. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/node_modules/ultron/test.js +327 -0
  285. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/package.json +78 -0
  286. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/src/bufferutil.cc +117 -0
  287. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/src/validation.cc +145 -0
  288. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/wscat/README.md +26 -0
  289. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/wscat/bin/wscat +222 -0
  290. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/node_modules/ws/wscat/package.json +28 -0
  291. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/engine.io/package.json +74 -0
  292. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/.npmignore +15 -0
  293. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/LICENSE +20 -0
  294. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/Makefile +3 -0
  295. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/README.md +4 -0
  296. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/fixtures/big.json +1 -0
  297. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/gen.js +17 -0
  298. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/index.js +57 -0
  299. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/README.md +54 -0
  300. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/build/build.js +209 -0
  301. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/component.json +19 -0
  302. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/index.js +3 -0
  303. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/node_modules/isarray/package.json +53 -0
  304. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/package.json +37 -0
  305. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/has-binary-data/test.js +108 -0
  306. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/.npmignore +1 -0
  307. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/History.md +25 -0
  308. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/Readme.md +16 -0
  309. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/index.js +144 -0
  310. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/.jshintrc +3 -0
  311. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/.npmignore +6 -0
  312. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/History.md +126 -0
  313. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/Makefile +33 -0
  314. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/Readme.md +153 -0
  315. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/browser.js +144 -0
  316. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/component.json +19 -0
  317. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/debug.js +197 -0
  318. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node.js +129 -0
  319. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/.npmignore +5 -0
  320. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/README.md +33 -0
  321. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/index.js +111 -0
  322. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/node_modules/ms/package.json +46 -0
  323. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/debug/package.json +69 -0
  324. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/.jscs.json +55 -0
  325. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/.npmignore +2 -0
  326. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/.travis.yml +18 -0
  327. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/CHANGELOG.md +151 -0
  328. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/LICENSE +21 -0
  329. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/README.md +76 -0
  330. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/index.js +70 -0
  331. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/isArguments.js +18 -0
  332. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/object-keys/package.json +82 -0
  333. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/.npmignore +5 -0
  334. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/.travis.yml +11 -0
  335. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/.zuul.yml +16 -0
  336. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/History.md +87 -0
  337. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/Makefile +11 -0
  338. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/Readme.md +73 -0
  339. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/bench/bench.js +10 -0
  340. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/bench/index.js +81 -0
  341. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/binary.js +141 -0
  342. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/index.js +396 -0
  343. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/is-buffer.js +13 -0
  344. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/LICENSE.txt +22 -0
  345. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/README.md +131 -0
  346. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/benchmark.js +3918 -0
  347. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/package.json +62 -0
  348. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/test/run-test.sh +9 -0
  349. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/benchmark/test/test.js +2074 -0
  350. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/.npmignore +2 -0
  351. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/.travis.yml +4 -0
  352. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/History.md +52 -0
  353. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/Makefile +7 -0
  354. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/Readme.md +74 -0
  355. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/bower.json +21 -0
  356. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/component.json +14 -0
  357. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/index.js +164 -0
  358. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/component-emitter/package.json +47 -0
  359. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/Readme.md +115 -0
  360. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/debug.js +137 -0
  361. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/index.js +5 -0
  362. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/lib/debug.js +147 -0
  363. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/debug/package.json +64 -0
  364. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/README.md +54 -0
  365. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/build/build.js +209 -0
  366. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/component.json +19 -0
  367. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/index.js +3 -0
  368. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/isarray/package.json +53 -0
  369. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.gitmodules +6 -0
  370. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.jamignore +10 -0
  371. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.npmignore +11 -0
  372. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/.travis.yml +33 -0
  373. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/LICENSE +20 -0
  374. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/README.md +126 -0
  375. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/lib/json3.js +861 -0
  376. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/lib/json3.min.js +18 -0
  377. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/node_modules/json3/package.json +102 -0
  378. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/node_modules/socket.io-parser/package.json +51 -0
  379. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-adapter/package.json +41 -0
  380. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/History.md +386 -0
  381. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/LICENSE +22 -0
  382. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/README.md +173 -0
  383. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/index.js +2 -0
  384. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/index.js +87 -0
  385. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/manager.js +503 -0
  386. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/on.js +24 -0
  387. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/socket.js +385 -0
  388. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/lib/url.js +73 -0
  389. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/.npmignore +1 -0
  390. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/History.md +12 -0
  391. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/Makefile +8 -0
  392. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/Readme.md +34 -0
  393. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/component.json +11 -0
  394. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/index.js +85 -0
  395. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/package.json +45 -0
  396. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/backo2/test/index.js +18 -0
  397. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/.npmignore +4 -0
  398. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/History.md +13 -0
  399. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/Makefile +7 -0
  400. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/Readme.md +64 -0
  401. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/component.json +13 -0
  402. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/index.js +23 -0
  403. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-bind/package.json +47 -0
  404. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/.npmignore +2 -0
  405. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/.travis.yml +4 -0
  406. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/History.md +52 -0
  407. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/Makefile +7 -0
  408. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/Readme.md +74 -0
  409. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/bower.json +21 -0
  410. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/component.json +14 -0
  411. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/index.js +164 -0
  412. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/component-emitter/package.json +47 -0
  413. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/Readme.md +115 -0
  414. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/debug.js +137 -0
  415. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/index.js +5 -0
  416. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/lib/debug.js +147 -0
  417. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/debug/package.json +64 -0
  418. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/.npmignore +2 -0
  419. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/.travis.yml +41 -0
  420. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/.zuul.yml +20 -0
  421. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/History.md +468 -0
  422. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/Makefile +37 -0
  423. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/README.md +265 -0
  424. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/engine.io.js +4040 -0
  425. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/index.js +2 -0
  426. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/index.js +10 -0
  427. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/socket.js +705 -0
  428. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transport.js +159 -0
  429. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/index.js +53 -0
  430. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling-jsonp.js +233 -0
  431. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling-xhr.js +384 -0
  432. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/polling.js +245 -0
  433. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/transports/websocket.js +238 -0
  434. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/lib/xmlhttprequest.js +36 -0
  435. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/.bin/wscat +190 -0
  436. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/.npmignore +3 -0
  437. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/History.md +5 -0
  438. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/Makefile +16 -0
  439. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/Readme.md +24 -0
  440. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/component.json +10 -0
  441. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/index.js +7 -0
  442. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/package.json +44 -0
  443. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/component-inherit/test/inherit.js +21 -0
  444. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/.jshintrc +3 -0
  445. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/.npmignore +6 -0
  446. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/History.md +144 -0
  447. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/Makefile +33 -0
  448. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/Readme.md +156 -0
  449. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/browser.js +147 -0
  450. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/component.json +19 -0
  451. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/debug.js +197 -0
  452. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node.js +129 -0
  453. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/.npmignore +5 -0
  454. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/README.md +33 -0
  455. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/index.js +111 -0
  456. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/node_modules/ms/package.json +46 -0
  457. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/debug/package.json +71 -0
  458. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/.npmignore +17 -0
  459. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/.travis.yml +45 -0
  460. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/.zuul.yml +18 -0
  461. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/History.md +100 -0
  462. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/LICENSE +22 -0
  463. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/Makefile +26 -0
  464. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/Readme.md +202 -0
  465. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/index.js +2 -0
  466. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/lib/browser.js +594 -0
  467. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/lib/index.js +467 -0
  468. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/lib/keys.js +19 -0
  469. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/.npmignore +2 -0
  470. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/.travis.yml +5 -0
  471. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/LICENCE +19 -0
  472. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/README.md +75 -0
  473. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/index.js +28 -0
  474. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/package.json +62 -0
  475. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/after/test/after-test.js +120 -0
  476. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/.npmignore +17 -0
  477. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/Makefile +8 -0
  478. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/README.md +17 -0
  479. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/index.js +29 -0
  480. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/package.json +40 -0
  481. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/arraybuffer.slice/test/slice-buffer.js +227 -0
  482. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.npmignore +1 -0
  483. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/.travis.yml +6 -0
  484. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/LICENSE-MIT +22 -0
  485. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/README.md +23 -0
  486. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/grunt.js +39 -0
  487. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/lib/base64-arraybuffer.js +59 -0
  488. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/package.json +56 -0
  489. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/base64-arraybuffer/test/base64-arraybuffer_test.js +72 -0
  490. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/.npmignore +2 -0
  491. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/.zuul.yml +8 -0
  492. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/Makefile +14 -0
  493. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/README.md +11 -0
  494. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/index.js +49 -0
  495. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/package.json +44 -0
  496. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/blob/test/index.js +52 -0
  497. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/.npmignore +15 -0
  498. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/History.md +5 -0
  499. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/LICENSE +20 -0
  500. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/Makefile +3 -0
  501. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/README.md +4 -0
  502. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/fixtures/big.json +1 -0
  503. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/index.js +58 -0
  504. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/README.md +54 -0
  505. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/build/build.js +209 -0
  506. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/component.json +19 -0
  507. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/index.js +3 -0
  508. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/node_modules/isarray/package.json +53 -0
  509. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/package.json +39 -0
  510. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/has-binary/test.js +108 -0
  511. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/.gitattributes +2 -0
  512. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/.npmignore +20 -0
  513. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/.travis.yml +19 -0
  514. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/Gruntfile.js +72 -0
  515. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/LICENSE-GPL.txt +278 -0
  516. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/LICENSE-MIT.txt +20 -0
  517. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/README.md +119 -0
  518. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/bower.json +14 -0
  519. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/component.json +16 -0
  520. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/package.json +73 -0
  521. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/tests/generate-test-data.py +47 -0
  522. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/tests/index.html +35 -0
  523. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/tests/tests.js +242 -0
  524. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/utf8.js +239 -0
  525. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/node_modules/utf8/x.js +46 -0
  526. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/engine.io-parser/package.json +58 -0
  527. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/.npmignore +2 -0
  528. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/History.md +16 -0
  529. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/Makefile +11 -0
  530. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/Readme.md +24 -0
  531. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/component.json +16 -0
  532. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/index.js +23 -0
  533. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/.gitignore +3 -0
  534. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/History.md +15 -0
  535. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/Makefile +11 -0
  536. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/Readme.md +20 -0
  537. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/component.json +15 -0
  538. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/index.js +8 -0
  539. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/package.json +40 -0
  540. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/index.html +17 -0
  541. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/mocha.css +199 -0
  542. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/mocha.js +4699 -0
  543. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/node_modules/global/test/test.js +22 -0
  544. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/has-cors/package.json +57 -0
  545. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/Makefile +3 -0
  546. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/index.js +32 -0
  547. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/.npmignore +4 -0
  548. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/History.md +15 -0
  549. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/Makefile +5 -0
  550. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/Readme.md +61 -0
  551. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/example.js +10 -0
  552. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/index.js +38 -0
  553. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  554. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  555. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  556. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  557. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  558. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  559. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/node_modules/better-assert/package.json +65 -0
  560. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/package.json +37 -0
  561. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parsejson/test.js +21 -0
  562. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/Makefile +3 -0
  563. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/index.js +37 -0
  564. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/.npmignore +4 -0
  565. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/History.md +15 -0
  566. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/Makefile +5 -0
  567. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/Readme.md +61 -0
  568. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/example.js +10 -0
  569. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/index.js +38 -0
  570. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  571. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  572. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  573. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  574. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  575. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  576. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/node_modules/better-assert/package.json +65 -0
  577. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/package.json +37 -0
  578. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseqs/test.js +27 -0
  579. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/History.md +5 -0
  580. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/Makefile +3 -0
  581. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/index.js +39 -0
  582. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/.npmignore +4 -0
  583. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/History.md +15 -0
  584. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/Makefile +5 -0
  585. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/Readme.md +61 -0
  586. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/example.js +10 -0
  587. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/index.js +38 -0
  588. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  589. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  590. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  591. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  592. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  593. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  594. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/node_modules/better-assert/package.json +65 -0
  595. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/package.json +45 -0
  596. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/parseuri/test.js +51 -0
  597. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/.npmignore +6 -0
  598. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/.travis.yml +6 -0
  599. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/History.md +312 -0
  600. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/Makefile +40 -0
  601. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/README.md +171 -0
  602. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/parser.benchmark.js +115 -0
  603. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/sender.benchmark.js +66 -0
  604. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/speed.js +105 -0
  605. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bench/util.js +105 -0
  606. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/bin/wscat +190 -0
  607. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/binding.gyp +16 -0
  608. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Makefile +355 -0
  609. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/bufferutil.node.d +1 -0
  610. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/obj.target/bufferutil/src/bufferutil.o.d +23 -0
  611. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/obj.target/validation/src/validation.o.d +23 -0
  612. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/.deps/Release/validation.node.d +1 -0
  613. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/bufferutil.node +0 -0
  614. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/linker.lock +0 -0
  615. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/Release/validation.node +0 -0
  616. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/binding.Makefile +6 -0
  617. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/bufferutil.target.mk +156 -0
  618. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/config.gypi +117 -0
  619. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/gyp-mac-tool +512 -0
  620. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/build/validation.target.mk +156 -0
  621. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/builderror.log +1 -0
  622. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/.npmignore +1 -0
  623. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/package.json +18 -0
  624. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/public/app.js +39 -0
  625. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/public/index.html +22 -0
  626. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/public/uploader.js +55 -0
  627. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/fileapi/server.js +103 -0
  628. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats-express_3/package.json +17 -0
  629. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats-express_3/public/index.html +33 -0
  630. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats-express_3/server.js +21 -0
  631. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats/package.json +17 -0
  632. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats/public/index.html +33 -0
  633. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/serverstats/server.js +19 -0
  634. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/examples/ssl.js +59 -0
  635. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/index.js +26 -0
  636. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/BufferPool.js +59 -0
  637. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/BufferUtil.fallback.js +47 -0
  638. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/BufferUtil.js +16 -0
  639. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/ErrorCodes.js +24 -0
  640. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Receiver.hixie.js +180 -0
  641. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Receiver.js +591 -0
  642. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Sender.hixie.js +123 -0
  643. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Sender.js +227 -0
  644. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Validation.fallback.js +12 -0
  645. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/Validation.js +16 -0
  646. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/WebSocket.js +818 -0
  647. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/WebSocketServer.js +460 -0
  648. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/lib/browser.js +43 -0
  649. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/.npmignore +4 -0
  650. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/.travis.yml +4 -0
  651. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/History.md +107 -0
  652. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/Makefile +7 -0
  653. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/Readme.md +262 -0
  654. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/index.js +2 -0
  655. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/lib/commander.js +1026 -0
  656. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/commander/package.json +60 -0
  657. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/.index.js +1 -0
  658. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/LICENSE +43 -0
  659. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/README.md +705 -0
  660. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/nan.h +884 -0
  661. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/nan/package.json +53 -0
  662. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/.npmignore +7 -0
  663. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/Makefile +12 -0
  664. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/README.md +69 -0
  665. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/lib/options.js +86 -0
  666. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/options/package.json +51 -0
  667. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/.gitignore +5 -0
  668. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/README.md +3 -0
  669. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/example.js +3 -0
  670. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/package.json +48 -0
  671. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/node_modules/tinycolor/tinycolor.js +31 -0
  672. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/package.json +82 -0
  673. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/src/bufferutil.cc +117 -0
  674. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/src/validation.cc +145 -0
  675. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/BufferPool.test.js +63 -0
  676. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Receiver.hixie.test.js +158 -0
  677. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Receiver.test.js +255 -0
  678. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Sender.hixie.test.js +134 -0
  679. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Sender.test.js +24 -0
  680. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/Validation.test.js +23 -0
  681. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/WebSocket.integration.js +44 -0
  682. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/WebSocket.test.js +1724 -0
  683. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/WebSocketServer.test.js +1103 -0
  684. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/autobahn-server.js +29 -0
  685. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/autobahn.js +52 -0
  686. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/agent1-cert.pem +16 -0
  687. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/agent1-key.pem +15 -0
  688. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/ca1-cert.pem +15 -0
  689. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/ca1-key.pem +17 -0
  690. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/certificate.pem +13 -0
  691. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/key.pem +15 -0
  692. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/request.pem +11 -0
  693. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/fixtures/textfile +9 -0
  694. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/hybi-common.js +99 -0
  695. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/ws/test/testserver.js +180 -0
  696. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/LICENSE +22 -0
  697. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/README.md +57 -0
  698. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/autotest.watchr +8 -0
  699. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/example/demo.js +16 -0
  700. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/lib/XMLHttpRequest.js +642 -0
  701. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/package.json +42 -0
  702. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-constants.js +13 -0
  703. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-events.js +50 -0
  704. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-exceptions.js +62 -0
  705. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-headers.js +76 -0
  706. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-redirect-302.js +41 -0
  707. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-redirect-303.js +41 -0
  708. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-redirect-307.js +43 -0
  709. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-request-methods.js +62 -0
  710. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/test-request-protocols.js +34 -0
  711. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/node_modules/xmlhttprequest/tests/testdata.txt +1 -0
  712. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/engine.io-client/package.json +84 -0
  713. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/.npmignore +15 -0
  714. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/History.md +11 -0
  715. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/LICENSE +20 -0
  716. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/Makefile +3 -0
  717. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/README.md +4 -0
  718. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/fixtures/big.json +1 -0
  719. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/index.js +58 -0
  720. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/README.md +54 -0
  721. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/build/build.js +209 -0
  722. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/component.json +19 -0
  723. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/index.js +3 -0
  724. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/node_modules/isarray/package.json +53 -0
  725. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/package.json +39 -0
  726. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/has-binary/test.js +108 -0
  727. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/.npmignore +2 -0
  728. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/Makefile +11 -0
  729. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/Readme.md +15 -0
  730. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/component.json +10 -0
  731. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/index.js +10 -0
  732. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/indexof/package.json +32 -0
  733. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/.npmignore +3 -0
  734. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/History.md +10 -0
  735. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/Makefile +16 -0
  736. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/Readme.md +31 -0
  737. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/component.json +10 -0
  738. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/index.js +84 -0
  739. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/package.json +35 -0
  740. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/object-component/test/object.js +48 -0
  741. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/History.md +5 -0
  742. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/Makefile +3 -0
  743. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/index.js +25 -0
  744. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/.npmignore +4 -0
  745. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/History.md +15 -0
  746. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/Makefile +5 -0
  747. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/Readme.md +61 -0
  748. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/example.js +10 -0
  749. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/index.js +38 -0
  750. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/.npmignore +4 -0
  751. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/History.md +10 -0
  752. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Makefile +6 -0
  753. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/Readme.md +44 -0
  754. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/index.js +10 -0
  755. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/node_modules/callsite/package.json +45 -0
  756. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/node_modules/better-assert/package.json +65 -0
  757. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/package.json +37 -0
  758. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/parseuri/test.js +42 -0
  759. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/.npmignore +3 -0
  760. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/LICENCE +19 -0
  761. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/README.md +22 -0
  762. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/index.js +13 -0
  763. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/node_modules/to-array/package.json +59 -0
  764. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/package.json +90 -0
  765. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-client/socket.io.js +7000 -0
  766. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/.npmignore +5 -0
  767. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/.travis.yml +11 -0
  768. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/.zuul.yml +16 -0
  769. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/History.md +97 -0
  770. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/Makefile +11 -0
  771. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/Readme.md +73 -0
  772. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/bench/bench.js +10 -0
  773. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/bench/index.js +81 -0
  774. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/bg.gif +0 -0
  775. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/binary.js +141 -0
  776. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/index.js +400 -0
  777. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/is-buffer.js +13 -0
  778. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/LICENSE.txt +22 -0
  779. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/README.md +131 -0
  780. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/benchmark.js +3918 -0
  781. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/package.json +62 -0
  782. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/test/run-test.sh +9 -0
  783. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/benchmark/test/test.js +2074 -0
  784. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/.npmignore +2 -0
  785. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/.travis.yml +4 -0
  786. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/History.md +52 -0
  787. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/Makefile +7 -0
  788. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/Readme.md +74 -0
  789. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/bower.json +21 -0
  790. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/component.json +14 -0
  791. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/index.js +164 -0
  792. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/component-emitter/package.json +47 -0
  793. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/Readme.md +115 -0
  794. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/debug.js +137 -0
  795. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/index.js +5 -0
  796. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/lib/debug.js +147 -0
  797. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/debug/package.json +64 -0
  798. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/README.md +54 -0
  799. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/build/build.js +209 -0
  800. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/component.json +19 -0
  801. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/index.js +3 -0
  802. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/isarray/package.json +53 -0
  803. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.gitmodules +6 -0
  804. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.jamignore +10 -0
  805. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.npmignore +11 -0
  806. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/.travis.yml +33 -0
  807. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/LICENSE +20 -0
  808. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/README.md +126 -0
  809. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/lib/json3.js +861 -0
  810. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/lib/json3.min.js +18 -0
  811. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/node_modules/json3/package.json +102 -0
  812. data/spec/iface/driver/assets/node_modules/socket.io/node_modules/socket.io-parser/package.json +51 -0
  813. data/spec/iface/driver/assets/node_modules/socket.io/package.json +80 -0
  814. data/spec/iface/driver/assets/sockio_server.js +38 -0
  815. data/spec/iface/driver/controller_spec.rb +107 -0
  816. data/spec/iface/driver/debug_socketio_spec.rb +76 -0
  817. data/spec/iface/driver/debug_spec.rb +27 -0
  818. data/spec/iface/driver/net_spec.rb +80 -0
  819. data/spec/iface/driver/ping_spec.rb +53 -0
  820. data/spec/iface/driver/pipe_spec.rb +31 -0
  821. data/spec/iface/driver/sockio_spec.rb +52 -0
  822. data/spec/iface/driver/timer_spec.rb +39 -0
  823. data/spec/iface/driver/ui_spec.rb +157 -0
  824. data/spec/iface/kern/debug_spec.rb +40 -0
  825. data/spec/iface/kern/event_spec.rb +46 -0
  826. data/spec/iface/kern/net_spec.rb +27 -0
  827. data/spec/iface/kern/ping_spec.rb +123 -0
  828. data/spec/iface/kern/pipe_spec.rb +30 -0
  829. data/spec/kern/assets/controller0.rb +14 -0
  830. data/spec/kern/assets/controller1.rb +29 -0
  831. data/spec/kern/assets/controller_bare.rb +8 -0
  832. data/spec/kern/assets/controller_context.rb +9 -0
  833. data/spec/kern/assets/controller_def.rb +22 -0
  834. data/spec/kern/assets/controller_spots.rb +9 -0
  835. data/spec/kern/assets/controller_spots_embed.rb +19 -0
  836. data/spec/kern/assets/controller_spots_embed_removed.rb +28 -0
  837. data/spec/kern/assets/embed_info.rb +29 -0
  838. data/spec/kern/assets/event_gw.rb +21 -0
  839. data/spec/kern/assets/goto.rb +29 -0
  840. data/spec/kern/assets/goto2.rb +19 -0
  841. data/spec/kern/assets/lower_event.rb +30 -0
  842. data/spec/kern/assets/raise_event.rb +30 -0
  843. data/spec/kern/assets/rest_service.rb +21 -0
  844. data/spec/kern/assets/send_event.rb +14 -0
  845. data/spec/kern/assets/test_event.rb +14 -0
  846. data/spec/kern/assets/test_event2.rb +26 -0
  847. data/spec/kern/assets/test_event3.rb +21 -0
  848. data/spec/kern/assets/timer_service.rb +20 -0
  849. data/spec/kern/controller_spec.rb +500 -0
  850. data/spec/kern/debug_spec.rb +38 -0
  851. data/spec/kern/debug_ui_spec.rb +243 -0
  852. data/spec/kern/net_spec.rb +14 -0
  853. data/spec/kern/rest_service_spec.rb +45 -0
  854. data/spec/kern/timer_service_spec.rb +40 -0
  855. data/spec/lib/helpers.rb +318 -0
  856. data/spec/lib/io_extensions.rb +13 -0
  857. data/spec/lib/rspec_extensions.rb +219 -0
  858. data/spec/lib/temp_dir.rb +57 -0
  859. metadata +1664 -14
  860. data/app/drivers/iface/ui.js +0 -31
  861. data/app/kern/hello.js +0 -1
  862. data/docs/driver_interface.md +0 -61
  863. data/docs/interface.md +0 -5
  864. data/docs/platform_drivers.md +0 -36
  865. data/spec/build_valid_spec.rb +0 -61
  866. data/spec/drivers/net_spec.rb +0 -159
  867. data/spec/helpers.rb +0 -140
@@ -0,0 +1,37 @@
1
+
2
+ REPORTER = dot
3
+
4
+ build: engine.io.js
5
+
6
+ engine.io.js: lib/*.js lib/transports/*.js package.json
7
+ @./support/browserify.sh > engine.io.js
8
+
9
+ test:
10
+ @if [ "x$(BROWSER_NAME)" = "x" ]; then make test-node; else make test-zuul; fi
11
+
12
+ test-node:
13
+ @./node_modules/.bin/mocha \
14
+ --reporter $(REPORTER) \
15
+ test/index.js
16
+
17
+ test-zuul:
18
+ @if [ "x$(BROWSER_PLATFORM)" = "x" ]; then \
19
+ ./node_modules/zuul/bin/zuul \
20
+ --browser-name $(BROWSER_NAME) \
21
+ --browser-version $(BROWSER_VERSION) \
22
+ test/index.js; \
23
+ else \
24
+ ./node_modules/zuul/bin/zuul \
25
+ --browser-name $(BROWSER_NAME) \
26
+ --browser-version $(BROWSER_VERSION) \
27
+ --browser-platform "$(BROWSER_PLATFORM)" \
28
+ test/index.js; \
29
+ fi
30
+
31
+ test-cov:
32
+ @./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- \
33
+ --require ./test/common \
34
+ --reporter $(REPORTER) \
35
+ $(TESTS)
36
+
37
+ .PHONY: test build
@@ -0,0 +1,265 @@
1
+
2
+ # Engine.IO client
3
+
4
+ [![Build Status](https://secure.travis-ci.org/Automattic/engine.io-client.png)](http://travis-ci.org/Automattic/engine.io-client)
5
+ [![NPM version](https://badge.fury.io/js/engine.io-client.png)](http://badge.fury.io/js/engine.io-client)
6
+
7
+ This is the client for [Engine.IO](http://github.com/automattic/engine.io),
8
+ the implementation of transport-based cross-browser/cross-device
9
+ bi-directional communication layer for [Socket.IO](http://github.com/automattic/socket.io).
10
+
11
+ ## How to use
12
+
13
+ ### Standalone
14
+
15
+ You can find an `engine.io.js` file in this repository, which is a
16
+ standalone build you can use as follows:
17
+
18
+ ```html
19
+ <script src="/path/to/engine.io.js"></script>
20
+ <script>
21
+ // eio = Socket
22
+ var socket = eio('ws://localhost');
23
+ socket.on('open', function(){
24
+ socket.on('message', function(data){});
25
+ socket.on('close', function(){});
26
+ });
27
+ </script>
28
+ ```
29
+
30
+ ### With browserify
31
+
32
+ Engine.IO is a commonjs module, which means you can include it by using
33
+ `require` on the browser and package using [browserify](http://browserify.org/):
34
+
35
+ 1. install the client package
36
+
37
+ ```bash
38
+ $ npm install engine.io-client
39
+ ```
40
+
41
+ 1. write your app code
42
+
43
+ ```js
44
+ var socket = require('engine.io-client')('ws://localhost');
45
+ socket.on('open', function(){
46
+ socket.on('message', function(data){});
47
+ socket.on('close', function(){});
48
+ });
49
+ ```
50
+
51
+ 1. build your app bundle
52
+
53
+ ```bash
54
+ $ browserify app.js > bundle.js
55
+ ```
56
+
57
+ 1. include on your page
58
+
59
+ ```html
60
+ <script src="/path/to/bundle.js"></script>
61
+ ```
62
+
63
+ ### Sending and receiving binary
64
+
65
+ ```html
66
+ <script src="/path/to/engine.io.js"></script>
67
+ <script>
68
+ var socket = new eio.Socket('ws://localhost/');
69
+ socket.binaryType = 'blob';
70
+ socket.on('open', function () {
71
+ socket.send(new Int8Array(5));
72
+ socket.on('message', function(blob){});
73
+ socket.on('close', function(){ });
74
+ });
75
+ </script>
76
+ ```
77
+
78
+ ### Node.JS
79
+
80
+ Add `engine.io-client` to your `package.json` and then:
81
+
82
+ ```js
83
+ var socket = require('engine.io-client')('ws://localhost');
84
+ socket.on('open', function(){
85
+ socket.on('message', function(data){});
86
+ socket.on('close', function(){});
87
+ });
88
+ ```
89
+
90
+ ### Node.js with certificates
91
+ ```js
92
+ var opts = {
93
+ key: fs.readFileSync('test/fixtures/client.key'),
94
+ cert: fs.readFileSync('test/fixtures/client.crt'),
95
+ ca: fs.readFileSync('test/fixtures/ca.crt')
96
+ };
97
+
98
+ var socket = require('engine.io-client')('ws://localhost', opts);
99
+ socket.on('open', function(){
100
+ socket.on('message', function(data){});
101
+ socket.on('close', function(){});
102
+ });
103
+ ```
104
+
105
+ ## Features
106
+
107
+ - Lightweight
108
+ - Runs on browser and node.js seamlessly
109
+ - Transports are independent of `Engine`
110
+ - Easy to debug
111
+ - Easy to unit test
112
+ - Runs inside HTML5 WebWorker
113
+ - Can send and receive binary data
114
+ - Receives as ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer
115
+ in Node
116
+ - When XHR2 or WebSockets are used, binary is emitted directly. Otherwise
117
+ binary is encoded into base64 strings, and decoded when binary types are
118
+ supported.
119
+ - With browsers that don't support ArrayBuffer, an object { base64: true,
120
+ data: dataAsBase64String } is emitted on the `message` event.
121
+
122
+ ## API
123
+
124
+ ### Socket
125
+
126
+ The client class. Mixes in [Emitter](http://github.com/component/emitter).
127
+ Exposed as `eio` in the browser standalone build.
128
+
129
+ #### Properties
130
+
131
+ - `protocol` _(Number)_: protocol revision number
132
+ - `binaryType` _(String)_ : can be set to 'arraybuffer' or 'blob' in browsers,
133
+ and `buffer` or `arraybuffer` in Node. Blob is only used in browser if it's
134
+ supported.
135
+
136
+ #### Events
137
+
138
+ - `open`
139
+ - Fired upon successful connection.
140
+ - `message`
141
+ - Fired when data is received from the server.
142
+ - **Arguments**
143
+ - `String` | `ArrayBuffer`: utf-8 encoded data or ArrayBuffer containing
144
+ binary data
145
+ - `close`
146
+ - Fired upon disconnection. In compliance with the WebSocket API spec, this event may be
147
+ fired even if the `open` event does not occur (i.e. due to connection error or `close()`).
148
+ - `error`
149
+ - Fired when an error occurs.
150
+ - `flush`
151
+ - Fired upon completing a buffer flush
152
+ - `drain`
153
+ - Fired after `drain` event of transport if writeBuffer is empty
154
+ - `upgradeError`
155
+ - Fired if an error occurs with a transport we're trying to upgrade to.
156
+ - `upgrade`
157
+ - Fired upon upgrade success, after the new transport is set
158
+
159
+ #### Methods
160
+
161
+ - **constructor**
162
+ - Initializes the client
163
+ - **Parameters**
164
+ - `String` uri
165
+ - `Object`: optional, options object
166
+ - **Options**
167
+ - `agent` (`http.Agent`): `http.Agent` to use, defaults to `false` (NodeJS only)
168
+ - `upgrade` (`Boolean`): defaults to true, whether the client should try
169
+ to upgrade the transport from long-polling to something better.
170
+ - `forceJSONP` (`Boolean`): forces JSONP for polling transport.
171
+ - `jsonp` (`Boolean`): determines whether to use JSONP when
172
+ necessary for polling. If disabled (by settings to false) an error will
173
+ be emitted (saying "No transports available") if no other transports
174
+ are available. If another transport is available for opening a
175
+ connection (e.g. WebSocket) that transport
176
+ will be used instead.
177
+ - `forceBase64` (`Boolean`): forces base 64 encoding for polling transport even when XHR2 responseType is available and WebSocket even if the used standard supports binary.
178
+ - `enablesXDR` (`Boolean`): enables XDomainRequest for IE8 to avoid loading bar flashing with click sound. default to `false` because XDomainRequest has a flaw of not sending cookie.
179
+ - `timestampRequests` (`Boolean`): whether to add the timestamp with
180
+ each transport request. Note: this is ignored if the browser is
181
+ IE or Android, in which case requests are always stamped (`false`)
182
+ - `timestampParam` (`String`): timestamp parameter (`t`)
183
+ - `policyPort` (`Number`): port the policy server listens on (`843`)
184
+ - `path` (`String`): path to connect to, default is `/engine.io`
185
+ - `transports` (`Array`): a list of transports to try (in order).
186
+ Defaults to `['polling', 'websocket']`. `Engine`
187
+ always attempts to connect directly with the first one, provided the
188
+ feature detection test for it passes.
189
+ - `rememberUpgrade` (`Boolean`): defaults to false.
190
+ If true and if the previous websocket connection to the server succeeded,
191
+ the connection attempt will bypass the normal upgrade process and will initially
192
+ try websocket. A connection attempt following a transport error will use the
193
+ normal upgrade process. It is recommended you turn this on only when using
194
+ SSL/TLS connections, or if you know that your network does not block websockets.
195
+ - `pfx` (`String`): Certificate, Private key and CA certificates to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
196
+ - `key` (`String`): Private key to use for SSL. Can be used in Node.js client environment to manually specify certificate information.
197
+ - `passphrase` (`String`): A string of passphrase for the private key or pfx. Can be used in Node.js client environment to manually specify certificate information.
198
+ - `cert` (`String`): Public x509 certificate to use. Can be used in Node.js client environment to manually specify certificate information.
199
+ - `ca` (`String`|`Array`): An authority certificate or array of authority certificates to check the remote host against.. Can be used in Node.js client environment to manually specify certificate information.
200
+ - `ciphers` (`String`): A string describing the ciphers to use or exclude. Consult the [cipher format list](http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT) for details on the format.. Can be used in Node.js client environment to manually specify certificate information.
201
+ - `rejectUnauthorized` (`Boolean`): If true, the server certificate is verified against the list of supplied CAs. An 'error' event is emitted if verification fails. Verification happens at the connection level, before the HTTP request is sent. Can be used in Node.js client environment to manually specify certificate information.
202
+ - `send`
203
+ - Sends a message to the server
204
+ - **Parameters**
205
+ - `String` | `ArrayBuffer` | `ArrayBufferView` | `Blob`: data to send
206
+ - `Function`: optional, callback upon `drain`
207
+ - `close`
208
+ - Disconnects the client.
209
+
210
+ ### Transport
211
+
212
+ The transport class. Private. _Inherits from EventEmitter_.
213
+
214
+ #### Events
215
+
216
+ - `poll`: emitted by polling transports upon starting a new request
217
+ - `pollComplete`: emitted by polling transports upon completing a request
218
+ - `drain`: emitted by polling transports upon a buffer drain
219
+
220
+ ## Tests
221
+
222
+ `engine.io-client` is used to test
223
+ [engine](http://github.com/automattic/engine.io). Running the `engine.io`
224
+ test suite ensures the client works and vice-versa.
225
+
226
+ Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). You can
227
+ run the tests locally using the following command.
228
+
229
+ ```
230
+ ./node_modules/.bin/zuul --local 8080 -- test/index.js
231
+ ```
232
+
233
+ Additionally, `engine.io-client` has a standalone test suite you can run
234
+ with `make test` which will run node.js and browser tests. You must have zuul setup with
235
+ a saucelabs account.
236
+
237
+ ## Support
238
+
239
+ The support channels for `engine.io-client` are the same as `socket.io`:
240
+ - irc.freenode.net **#socket.io**
241
+ - [Google Groups](http://groups.google.com/group/socket_io)
242
+ - [Website](http://socket.io)
243
+
244
+ ## Development
245
+
246
+ To contribute patches, run tests or benchmarks, make sure to clone the
247
+ repository:
248
+
249
+ ```bash
250
+ git clone git://github.com/automattic/engine.io-client.git
251
+ ```
252
+
253
+ Then:
254
+
255
+ ```bash
256
+ cd engine.io-client
257
+ npm install
258
+ ```
259
+
260
+ See the `Tests` section above for how to run tests before submitting any patches.
261
+
262
+ ## License
263
+
264
+ MIT - Copyright (c) 2014 Automattic, Inc.
265
+
@@ -0,0 +1,4040 @@
1
+ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.eio=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
2
+
3
+ module.exports = _dereq_('./lib/');
4
+
5
+ },{"./lib/":2}],2:[function(_dereq_,module,exports){
6
+
7
+ module.exports = _dereq_('./socket');
8
+
9
+ /**
10
+ * Exports parser
11
+ *
12
+ * @api public
13
+ *
14
+ */
15
+ module.exports.parser = _dereq_('engine.io-parser');
16
+
17
+ },{"./socket":3,"engine.io-parser":17}],3:[function(_dereq_,module,exports){
18
+ (function (global){
19
+ /**
20
+ * Module dependencies.
21
+ */
22
+
23
+ var transports = _dereq_('./transports');
24
+ var Emitter = _dereq_('component-emitter');
25
+ var debug = _dereq_('debug')('engine.io-client:socket');
26
+ var index = _dereq_('indexof');
27
+ var parser = _dereq_('engine.io-parser');
28
+ var parseuri = _dereq_('parseuri');
29
+ var parsejson = _dereq_('parsejson');
30
+ var parseqs = _dereq_('parseqs');
31
+
32
+ /**
33
+ * Module exports.
34
+ */
35
+
36
+ module.exports = Socket;
37
+
38
+ /**
39
+ * Noop function.
40
+ *
41
+ * @api private
42
+ */
43
+
44
+ function noop(){}
45
+
46
+ /**
47
+ * Socket constructor.
48
+ *
49
+ * @param {String|Object} uri or options
50
+ * @param {Object} options
51
+ * @api public
52
+ */
53
+
54
+ function Socket(uri, opts){
55
+ if (!(this instanceof Socket)) return new Socket(uri, opts);
56
+
57
+ opts = opts || {};
58
+
59
+ if (uri && 'object' == typeof uri) {
60
+ opts = uri;
61
+ uri = null;
62
+ }
63
+
64
+ if (uri) {
65
+ uri = parseuri(uri);
66
+ opts.host = uri.host;
67
+ opts.secure = uri.protocol == 'https' || uri.protocol == 'wss';
68
+ opts.port = uri.port;
69
+ if (uri.query) opts.query = uri.query;
70
+ }
71
+
72
+ this.secure = null != opts.secure ? opts.secure :
73
+ (global.location && 'https:' == location.protocol);
74
+
75
+ if (opts.host) {
76
+ var pieces = opts.host.split(':');
77
+ opts.hostname = pieces.shift();
78
+ if (pieces.length) {
79
+ opts.port = pieces.pop();
80
+ } else if (!opts.port) {
81
+ // if no port is specified manually, use the protocol default
82
+ opts.port = this.secure ? '443' : '80';
83
+ }
84
+ }
85
+
86
+ this.agent = opts.agent || false;
87
+ this.hostname = opts.hostname ||
88
+ (global.location ? location.hostname : 'localhost');
89
+ this.port = opts.port || (global.location && location.port ?
90
+ location.port :
91
+ (this.secure ? 443 : 80));
92
+ this.query = opts.query || {};
93
+ if ('string' == typeof this.query) this.query = parseqs.decode(this.query);
94
+ this.upgrade = false !== opts.upgrade;
95
+ this.path = (opts.path || '/engine.io').replace(/\/$/, '') + '/';
96
+ this.forceJSONP = !!opts.forceJSONP;
97
+ this.jsonp = false !== opts.jsonp;
98
+ this.forceBase64 = !!opts.forceBase64;
99
+ this.enablesXDR = !!opts.enablesXDR;
100
+ this.timestampParam = opts.timestampParam || 't';
101
+ this.timestampRequests = opts.timestampRequests;
102
+ this.transports = opts.transports || ['polling', 'websocket'];
103
+ this.readyState = '';
104
+ this.writeBuffer = [];
105
+ this.callbackBuffer = [];
106
+ this.policyPort = opts.policyPort || 843;
107
+ this.rememberUpgrade = opts.rememberUpgrade || false;
108
+ this.binaryType = null;
109
+ this.onlyBinaryUpgrades = opts.onlyBinaryUpgrades;
110
+
111
+ // SSL options for Node.js client
112
+ this.pfx = opts.pfx || null;
113
+ this.key = opts.key || null;
114
+ this.passphrase = opts.passphrase || null;
115
+ this.cert = opts.cert || null;
116
+ this.ca = opts.ca || null;
117
+ this.ciphers = opts.ciphers || null;
118
+ this.rejectUnauthorized = opts.rejectUnauthorized || null;
119
+
120
+ this.open();
121
+ }
122
+
123
+ Socket.priorWebsocketSuccess = false;
124
+
125
+ /**
126
+ * Mix in `Emitter`.
127
+ */
128
+
129
+ Emitter(Socket.prototype);
130
+
131
+ /**
132
+ * Protocol version.
133
+ *
134
+ * @api public
135
+ */
136
+
137
+ Socket.protocol = parser.protocol; // this is an int
138
+
139
+ /**
140
+ * Expose deps for legacy compatibility
141
+ * and standalone browser access.
142
+ */
143
+
144
+ Socket.Socket = Socket;
145
+ Socket.Transport = _dereq_('./transport');
146
+ Socket.transports = _dereq_('./transports');
147
+ Socket.parser = _dereq_('engine.io-parser');
148
+
149
+ /**
150
+ * Creates transport of the given type.
151
+ *
152
+ * @param {String} transport name
153
+ * @return {Transport}
154
+ * @api private
155
+ */
156
+
157
+ Socket.prototype.createTransport = function (name) {
158
+ debug('creating transport "%s"', name);
159
+ var query = clone(this.query);
160
+
161
+ // append engine.io protocol identifier
162
+ query.EIO = parser.protocol;
163
+
164
+ // transport name
165
+ query.transport = name;
166
+
167
+ // session id if we already have one
168
+ if (this.id) query.sid = this.id;
169
+
170
+ var transport = new transports[name]({
171
+ agent: this.agent,
172
+ hostname: this.hostname,
173
+ port: this.port,
174
+ secure: this.secure,
175
+ path: this.path,
176
+ query: query,
177
+ forceJSONP: this.forceJSONP,
178
+ jsonp: this.jsonp,
179
+ forceBase64: this.forceBase64,
180
+ enablesXDR: this.enablesXDR,
181
+ timestampRequests: this.timestampRequests,
182
+ timestampParam: this.timestampParam,
183
+ policyPort: this.policyPort,
184
+ socket: this,
185
+ pfx: this.pfx,
186
+ key: this.key,
187
+ passphrase: this.passphrase,
188
+ cert: this.cert,
189
+ ca: this.ca,
190
+ ciphers: this.ciphers,
191
+ rejectUnauthorized: this.rejectUnauthorized
192
+ });
193
+
194
+ return transport;
195
+ };
196
+
197
+ function clone (obj) {
198
+ var o = {};
199
+ for (var i in obj) {
200
+ if (obj.hasOwnProperty(i)) {
201
+ o[i] = obj[i];
202
+ }
203
+ }
204
+ return o;
205
+ }
206
+
207
+ /**
208
+ * Initializes transport to use and starts probe.
209
+ *
210
+ * @api private
211
+ */
212
+ Socket.prototype.open = function () {
213
+ var transport;
214
+ if (this.rememberUpgrade && Socket.priorWebsocketSuccess && this.transports.indexOf('websocket') != -1) {
215
+ transport = 'websocket';
216
+ } else if (0 == this.transports.length) {
217
+ // Emit error on next tick so it can be listened to
218
+ var self = this;
219
+ setTimeout(function() {
220
+ self.emit('error', 'No transports available');
221
+ }, 0);
222
+ return;
223
+ } else {
224
+ transport = this.transports[0];
225
+ }
226
+ this.readyState = 'opening';
227
+
228
+ // Retry with the next transport if the transport is disabled (jsonp: false)
229
+ var transport;
230
+ try {
231
+ transport = this.createTransport(transport);
232
+ } catch (e) {
233
+ this.transports.shift();
234
+ this.open();
235
+ return;
236
+ }
237
+
238
+ transport.open();
239
+ this.setTransport(transport);
240
+ };
241
+
242
+ /**
243
+ * Sets the current transport. Disables the existing one (if any).
244
+ *
245
+ * @api private
246
+ */
247
+
248
+ Socket.prototype.setTransport = function(transport){
249
+ debug('setting transport %s', transport.name);
250
+ var self = this;
251
+
252
+ if (this.transport) {
253
+ debug('clearing existing transport %s', this.transport.name);
254
+ this.transport.removeAllListeners();
255
+ }
256
+
257
+ // set up transport
258
+ this.transport = transport;
259
+
260
+ // set up transport listeners
261
+ transport
262
+ .on('drain', function(){
263
+ self.onDrain();
264
+ })
265
+ .on('packet', function(packet){
266
+ self.onPacket(packet);
267
+ })
268
+ .on('error', function(e){
269
+ self.onError(e);
270
+ })
271
+ .on('close', function(){
272
+ self.onClose('transport close');
273
+ });
274
+ };
275
+
276
+ /**
277
+ * Probes a transport.
278
+ *
279
+ * @param {String} transport name
280
+ * @api private
281
+ */
282
+
283
+ Socket.prototype.probe = function (name) {
284
+ debug('probing transport "%s"', name);
285
+ var transport = this.createTransport(name, { probe: 1 })
286
+ , failed = false
287
+ , self = this;
288
+
289
+ Socket.priorWebsocketSuccess = false;
290
+
291
+ function onTransportOpen(){
292
+ if (self.onlyBinaryUpgrades) {
293
+ var upgradeLosesBinary = !this.supportsBinary && self.transport.supportsBinary;
294
+ failed = failed || upgradeLosesBinary;
295
+ }
296
+ if (failed) return;
297
+
298
+ debug('probe transport "%s" opened', name);
299
+ transport.send([{ type: 'ping', data: 'probe' }]);
300
+ transport.once('packet', function (msg) {
301
+ if (failed) return;
302
+ if ('pong' == msg.type && 'probe' == msg.data) {
303
+ debug('probe transport "%s" pong', name);
304
+ self.upgrading = true;
305
+ self.emit('upgrading', transport);
306
+ if (!transport) return;
307
+ Socket.priorWebsocketSuccess = 'websocket' == transport.name;
308
+
309
+ debug('pausing current transport "%s"', self.transport.name);
310
+ self.transport.pause(function () {
311
+ if (failed) return;
312
+ if ('closed' == self.readyState) return;
313
+ debug('changing transport and sending upgrade packet');
314
+
315
+ cleanup();
316
+
317
+ self.setTransport(transport);
318
+ transport.send([{ type: 'upgrade' }]);
319
+ self.emit('upgrade', transport);
320
+ transport = null;
321
+ self.upgrading = false;
322
+ self.flush();
323
+ });
324
+ } else {
325
+ debug('probe transport "%s" failed', name);
326
+ var err = new Error('probe error');
327
+ err.transport = transport.name;
328
+ self.emit('upgradeError', err);
329
+ }
330
+ });
331
+ }
332
+
333
+ function freezeTransport() {
334
+ if (failed) return;
335
+
336
+ // Any callback called by transport should be ignored since now
337
+ failed = true;
338
+
339
+ cleanup();
340
+
341
+ transport.close();
342
+ transport = null;
343
+ }
344
+
345
+ //Handle any error that happens while probing
346
+ function onerror(err) {
347
+ var error = new Error('probe error: ' + err);
348
+ error.transport = transport.name;
349
+
350
+ freezeTransport();
351
+
352
+ debug('probe transport "%s" failed because of error: %s', name, err);
353
+
354
+ self.emit('upgradeError', error);
355
+ }
356
+
357
+ function onTransportClose(){
358
+ onerror("transport closed");
359
+ }
360
+
361
+ //When the socket is closed while we're probing
362
+ function onclose(){
363
+ onerror("socket closed");
364
+ }
365
+
366
+ //When the socket is upgraded while we're probing
367
+ function onupgrade(to){
368
+ if (transport && to.name != transport.name) {
369
+ debug('"%s" works - aborting "%s"', to.name, transport.name);
370
+ freezeTransport();
371
+ }
372
+ }
373
+
374
+ //Remove all listeners on the transport and on self
375
+ function cleanup(){
376
+ transport.removeListener('open', onTransportOpen);
377
+ transport.removeListener('error', onerror);
378
+ transport.removeListener('close', onTransportClose);
379
+ self.removeListener('close', onclose);
380
+ self.removeListener('upgrading', onupgrade);
381
+ }
382
+
383
+ transport.once('open', onTransportOpen);
384
+ transport.once('error', onerror);
385
+ transport.once('close', onTransportClose);
386
+
387
+ this.once('close', onclose);
388
+ this.once('upgrading', onupgrade);
389
+
390
+ transport.open();
391
+
392
+ };
393
+
394
+ /**
395
+ * Called when connection is deemed open.
396
+ *
397
+ * @api public
398
+ */
399
+
400
+ Socket.prototype.onOpen = function () {
401
+ debug('socket open');
402
+ this.readyState = 'open';
403
+ Socket.priorWebsocketSuccess = 'websocket' == this.transport.name;
404
+ this.emit('open');
405
+ this.flush();
406
+
407
+ // we check for `readyState` in case an `open`
408
+ // listener already closed the socket
409
+ if ('open' == this.readyState && this.upgrade && this.transport.pause) {
410
+ debug('starting upgrade probes');
411
+ for (var i = 0, l = this.upgrades.length; i < l; i++) {
412
+ this.probe(this.upgrades[i]);
413
+ }
414
+ }
415
+ };
416
+
417
+ /**
418
+ * Handles a packet.
419
+ *
420
+ * @api private
421
+ */
422
+
423
+ Socket.prototype.onPacket = function (packet) {
424
+ if ('opening' == this.readyState || 'open' == this.readyState) {
425
+ debug('socket receive: type "%s", data "%s"', packet.type, packet.data);
426
+
427
+ this.emit('packet', packet);
428
+
429
+ // Socket is live - any packet counts
430
+ this.emit('heartbeat');
431
+
432
+ switch (packet.type) {
433
+ case 'open':
434
+ this.onHandshake(parsejson(packet.data));
435
+ break;
436
+
437
+ case 'pong':
438
+ this.setPing();
439
+ break;
440
+
441
+ case 'error':
442
+ var err = new Error('server error');
443
+ err.code = packet.data;
444
+ this.emit('error', err);
445
+ break;
446
+
447
+ case 'message':
448
+ this.emit('data', packet.data);
449
+ this.emit('message', packet.data);
450
+ break;
451
+ }
452
+ } else {
453
+ debug('packet received with socket readyState "%s"', this.readyState);
454
+ }
455
+ };
456
+
457
+ /**
458
+ * Called upon handshake completion.
459
+ *
460
+ * @param {Object} handshake obj
461
+ * @api private
462
+ */
463
+
464
+ Socket.prototype.onHandshake = function (data) {
465
+ this.emit('handshake', data);
466
+ this.id = data.sid;
467
+ this.transport.query.sid = data.sid;
468
+ this.upgrades = this.filterUpgrades(data.upgrades);
469
+ this.pingInterval = data.pingInterval;
470
+ this.pingTimeout = data.pingTimeout;
471
+ this.onOpen();
472
+ // In case open handler closes socket
473
+ if ('closed' == this.readyState) return;
474
+ this.setPing();
475
+
476
+ // Prolong liveness of socket on heartbeat
477
+ this.removeListener('heartbeat', this.onHeartbeat);
478
+ this.on('heartbeat', this.onHeartbeat);
479
+ };
480
+
481
+ /**
482
+ * Resets ping timeout.
483
+ *
484
+ * @api private
485
+ */
486
+
487
+ Socket.prototype.onHeartbeat = function (timeout) {
488
+ clearTimeout(this.pingTimeoutTimer);
489
+ var self = this;
490
+ self.pingTimeoutTimer = setTimeout(function () {
491
+ if ('closed' == self.readyState) return;
492
+ self.onClose('ping timeout');
493
+ }, timeout || (self.pingInterval + self.pingTimeout));
494
+ };
495
+
496
+ /**
497
+ * Pings server every `this.pingInterval` and expects response
498
+ * within `this.pingTimeout` or closes connection.
499
+ *
500
+ * @api private
501
+ */
502
+
503
+ Socket.prototype.setPing = function () {
504
+ var self = this;
505
+ clearTimeout(self.pingIntervalTimer);
506
+ self.pingIntervalTimer = setTimeout(function () {
507
+ debug('writing ping packet - expecting pong within %sms', self.pingTimeout);
508
+ self.ping();
509
+ self.onHeartbeat(self.pingTimeout);
510
+ }, self.pingInterval);
511
+ };
512
+
513
+ /**
514
+ * Sends a ping packet.
515
+ *
516
+ * @api public
517
+ */
518
+
519
+ Socket.prototype.ping = function () {
520
+ this.sendPacket('ping');
521
+ };
522
+
523
+ /**
524
+ * Called on `drain` event
525
+ *
526
+ * @api private
527
+ */
528
+
529
+ Socket.prototype.onDrain = function() {
530
+ for (var i = 0; i < this.prevBufferLen; i++) {
531
+ if (this.callbackBuffer[i]) {
532
+ this.callbackBuffer[i]();
533
+ }
534
+ }
535
+
536
+ this.writeBuffer.splice(0, this.prevBufferLen);
537
+ this.callbackBuffer.splice(0, this.prevBufferLen);
538
+
539
+ // setting prevBufferLen = 0 is very important
540
+ // for example, when upgrading, upgrade packet is sent over,
541
+ // and a nonzero prevBufferLen could cause problems on `drain`
542
+ this.prevBufferLen = 0;
543
+
544
+ if (this.writeBuffer.length == 0) {
545
+ this.emit('drain');
546
+ } else {
547
+ this.flush();
548
+ }
549
+ };
550
+
551
+ /**
552
+ * Flush write buffers.
553
+ *
554
+ * @api private
555
+ */
556
+
557
+ Socket.prototype.flush = function () {
558
+ if ('closed' != this.readyState && this.transport.writable &&
559
+ !this.upgrading && this.writeBuffer.length) {
560
+ debug('flushing %d packets in socket', this.writeBuffer.length);
561
+ this.transport.send(this.writeBuffer);
562
+ // keep track of current length of writeBuffer
563
+ // splice writeBuffer and callbackBuffer on `drain`
564
+ this.prevBufferLen = this.writeBuffer.length;
565
+ this.emit('flush');
566
+ }
567
+ };
568
+
569
+ /**
570
+ * Sends a message.
571
+ *
572
+ * @param {String} message.
573
+ * @param {Function} callback function.
574
+ * @return {Socket} for chaining.
575
+ * @api public
576
+ */
577
+
578
+ Socket.prototype.write =
579
+ Socket.prototype.send = function (msg, fn) {
580
+ this.sendPacket('message', msg, fn);
581
+ return this;
582
+ };
583
+
584
+ /**
585
+ * Sends a packet.
586
+ *
587
+ * @param {String} packet type.
588
+ * @param {String} data.
589
+ * @param {Function} callback function.
590
+ * @api private
591
+ */
592
+
593
+ Socket.prototype.sendPacket = function (type, data, fn) {
594
+ if ('closing' == this.readyState || 'closed' == this.readyState) {
595
+ return;
596
+ }
597
+
598
+ var packet = { type: type, data: data };
599
+ this.emit('packetCreate', packet);
600
+ this.writeBuffer.push(packet);
601
+ this.callbackBuffer.push(fn);
602
+ this.flush();
603
+ };
604
+
605
+ /**
606
+ * Closes the connection.
607
+ *
608
+ * @api private
609
+ */
610
+
611
+ Socket.prototype.close = function () {
612
+ if ('opening' == this.readyState || 'open' == this.readyState) {
613
+ this.readyState = 'closing';
614
+
615
+ var self = this;
616
+
617
+ function close() {
618
+ self.onClose('forced close');
619
+ debug('socket closing - telling transport to close');
620
+ self.transport.close();
621
+ }
622
+
623
+ function cleanupAndClose() {
624
+ self.removeListener('upgrade', cleanupAndClose);
625
+ self.removeListener('upgradeError', cleanupAndClose);
626
+ close();
627
+ }
628
+
629
+ function waitForUpgrade() {
630
+ // wait for upgrade to finish since we can't send packets while pausing a transport
631
+ self.once('upgrade', cleanupAndClose);
632
+ self.once('upgradeError', cleanupAndClose);
633
+ }
634
+
635
+ if (this.writeBuffer.length) {
636
+ this.once('drain', function() {
637
+ if (this.upgrading) {
638
+ waitForUpgrade();
639
+ } else {
640
+ close();
641
+ }
642
+ });
643
+ } else if (this.upgrading) {
644
+ waitForUpgrade();
645
+ } else {
646
+ close();
647
+ }
648
+ }
649
+
650
+ return this;
651
+ };
652
+
653
+ /**
654
+ * Called upon transport error
655
+ *
656
+ * @api private
657
+ */
658
+
659
+ Socket.prototype.onError = function (err) {
660
+ debug('socket error %j', err);
661
+ Socket.priorWebsocketSuccess = false;
662
+ this.emit('error', err);
663
+ this.onClose('transport error', err);
664
+ };
665
+
666
+ /**
667
+ * Called upon transport close.
668
+ *
669
+ * @api private
670
+ */
671
+
672
+ Socket.prototype.onClose = function (reason, desc) {
673
+ if ('opening' == this.readyState || 'open' == this.readyState || 'closing' == this.readyState) {
674
+ debug('socket close with reason: "%s"', reason);
675
+ var self = this;
676
+
677
+ // clear timers
678
+ clearTimeout(this.pingIntervalTimer);
679
+ clearTimeout(this.pingTimeoutTimer);
680
+
681
+ // clean buffers in next tick, so developers can still
682
+ // grab the buffers on `close` event
683
+ setTimeout(function() {
684
+ self.writeBuffer = [];
685
+ self.callbackBuffer = [];
686
+ self.prevBufferLen = 0;
687
+ }, 0);
688
+
689
+ // stop event from firing again for transport
690
+ this.transport.removeAllListeners('close');
691
+
692
+ // ensure transport won't stay open
693
+ this.transport.close();
694
+
695
+ // ignore further transport communication
696
+ this.transport.removeAllListeners();
697
+
698
+ // set ready state
699
+ this.readyState = 'closed';
700
+
701
+ // clear session id
702
+ this.id = null;
703
+
704
+ // emit close event
705
+ this.emit('close', reason, desc);
706
+ }
707
+ };
708
+
709
+ /**
710
+ * Filters upgrades, returning only those matching client transports.
711
+ *
712
+ * @param {Array} server upgrades
713
+ * @api private
714
+ *
715
+ */
716
+
717
+ Socket.prototype.filterUpgrades = function (upgrades) {
718
+ var filteredUpgrades = [];
719
+ for (var i = 0, j = upgrades.length; i<j; i++) {
720
+ if (~index(this.transports, upgrades[i])) filteredUpgrades.push(upgrades[i]);
721
+ }
722
+ return filteredUpgrades;
723
+ };
724
+
725
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
726
+ },{"./transport":4,"./transports":5,"component-emitter":12,"debug":14,"engine.io-parser":17,"indexof":27,"parsejson":28,"parseqs":29,"parseuri":30}],4:[function(_dereq_,module,exports){
727
+ /**
728
+ * Module dependencies.
729
+ */
730
+
731
+ var parser = _dereq_('engine.io-parser');
732
+ var Emitter = _dereq_('component-emitter');
733
+
734
+ /**
735
+ * Module exports.
736
+ */
737
+
738
+ module.exports = Transport;
739
+
740
+ /**
741
+ * Transport abstract constructor.
742
+ *
743
+ * @param {Object} options.
744
+ * @api private
745
+ */
746
+
747
+ function Transport (opts) {
748
+ this.path = opts.path;
749
+ this.hostname = opts.hostname;
750
+ this.port = opts.port;
751
+ this.secure = opts.secure;
752
+ this.query = opts.query;
753
+ this.timestampParam = opts.timestampParam;
754
+ this.timestampRequests = opts.timestampRequests;
755
+ this.readyState = '';
756
+ this.agent = opts.agent || false;
757
+ this.socket = opts.socket;
758
+ this.enablesXDR = opts.enablesXDR;
759
+
760
+ // SSL options for Node.js client
761
+ this.pfx = opts.pfx;
762
+ this.key = opts.key;
763
+ this.passphrase = opts.passphrase;
764
+ this.cert = opts.cert;
765
+ this.ca = opts.ca;
766
+ this.ciphers = opts.ciphers;
767
+ this.rejectUnauthorized = opts.rejectUnauthorized;
768
+ }
769
+
770
+ /**
771
+ * Mix in `Emitter`.
772
+ */
773
+
774
+ Emitter(Transport.prototype);
775
+
776
+ /**
777
+ * A counter used to prevent collisions in the timestamps used
778
+ * for cache busting.
779
+ */
780
+
781
+ Transport.timestamps = 0;
782
+
783
+ /**
784
+ * Emits an error.
785
+ *
786
+ * @param {String} str
787
+ * @return {Transport} for chaining
788
+ * @api public
789
+ */
790
+
791
+ Transport.prototype.onError = function (msg, desc) {
792
+ var err = new Error(msg);
793
+ err.type = 'TransportError';
794
+ err.description = desc;
795
+ this.emit('error', err);
796
+ return this;
797
+ };
798
+
799
+ /**
800
+ * Opens the transport.
801
+ *
802
+ * @api public
803
+ */
804
+
805
+ Transport.prototype.open = function () {
806
+ if ('closed' == this.readyState || '' == this.readyState) {
807
+ this.readyState = 'opening';
808
+ this.doOpen();
809
+ }
810
+
811
+ return this;
812
+ };
813
+
814
+ /**
815
+ * Closes the transport.
816
+ *
817
+ * @api private
818
+ */
819
+
820
+ Transport.prototype.close = function () {
821
+ if ('opening' == this.readyState || 'open' == this.readyState) {
822
+ this.doClose();
823
+ this.onClose();
824
+ }
825
+
826
+ return this;
827
+ };
828
+
829
+ /**
830
+ * Sends multiple packets.
831
+ *
832
+ * @param {Array} packets
833
+ * @api private
834
+ */
835
+
836
+ Transport.prototype.send = function(packets){
837
+ if ('open' == this.readyState) {
838
+ this.write(packets);
839
+ } else {
840
+ throw new Error('Transport not open');
841
+ }
842
+ };
843
+
844
+ /**
845
+ * Called upon open
846
+ *
847
+ * @api private
848
+ */
849
+
850
+ Transport.prototype.onOpen = function () {
851
+ this.readyState = 'open';
852
+ this.writable = true;
853
+ this.emit('open');
854
+ };
855
+
856
+ /**
857
+ * Called with data.
858
+ *
859
+ * @param {String} data
860
+ * @api private
861
+ */
862
+
863
+ Transport.prototype.onData = function(data){
864
+ var packet = parser.decodePacket(data, this.socket.binaryType);
865
+ this.onPacket(packet);
866
+ };
867
+
868
+ /**
869
+ * Called with a decoded packet.
870
+ */
871
+
872
+ Transport.prototype.onPacket = function (packet) {
873
+ this.emit('packet', packet);
874
+ };
875
+
876
+ /**
877
+ * Called upon close.
878
+ *
879
+ * @api private
880
+ */
881
+
882
+ Transport.prototype.onClose = function () {
883
+ this.readyState = 'closed';
884
+ this.emit('close');
885
+ };
886
+
887
+ },{"component-emitter":12,"engine.io-parser":17}],5:[function(_dereq_,module,exports){
888
+ (function (global){
889
+ /**
890
+ * Module dependencies
891
+ */
892
+
893
+ var XMLHttpRequest = _dereq_('xmlhttprequest');
894
+ var XHR = _dereq_('./polling-xhr');
895
+ var JSONP = _dereq_('./polling-jsonp');
896
+ var websocket = _dereq_('./websocket');
897
+
898
+ /**
899
+ * Export transports.
900
+ */
901
+
902
+ exports.polling = polling;
903
+ exports.websocket = websocket;
904
+
905
+ /**
906
+ * Polling transport polymorphic constructor.
907
+ * Decides on xhr vs jsonp based on feature detection.
908
+ *
909
+ * @api private
910
+ */
911
+
912
+ function polling(opts){
913
+ var xhr;
914
+ var xd = false;
915
+ var xs = false;
916
+ var jsonp = false !== opts.jsonp;
917
+
918
+ if (global.location) {
919
+ var isSSL = 'https:' == location.protocol;
920
+ var port = location.port;
921
+
922
+ // some user agents have empty `location.port`
923
+ if (!port) {
924
+ port = isSSL ? 443 : 80;
925
+ }
926
+
927
+ xd = opts.hostname != location.hostname || port != opts.port;
928
+ xs = opts.secure != isSSL;
929
+ }
930
+
931
+ opts.xdomain = xd;
932
+ opts.xscheme = xs;
933
+ xhr = new XMLHttpRequest(opts);
934
+
935
+ if ('open' in xhr && !opts.forceJSONP) {
936
+ return new XHR(opts);
937
+ } else {
938
+ if (!jsonp) throw new Error('JSONP disabled');
939
+ return new JSONP(opts);
940
+ }
941
+ }
942
+
943
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
944
+ },{"./polling-jsonp":6,"./polling-xhr":7,"./websocket":9,"xmlhttprequest":10}],6:[function(_dereq_,module,exports){
945
+ (function (global){
946
+
947
+ /**
948
+ * Module requirements.
949
+ */
950
+
951
+ var Polling = _dereq_('./polling');
952
+ var inherit = _dereq_('component-inherit');
953
+
954
+ /**
955
+ * Module exports.
956
+ */
957
+
958
+ module.exports = JSONPPolling;
959
+
960
+ /**
961
+ * Cached regular expressions.
962
+ */
963
+
964
+ var rNewline = /\n/g;
965
+ var rEscapedNewline = /\\n/g;
966
+
967
+ /**
968
+ * Global JSONP callbacks.
969
+ */
970
+
971
+ var callbacks;
972
+
973
+ /**
974
+ * Callbacks count.
975
+ */
976
+
977
+ var index = 0;
978
+
979
+ /**
980
+ * Noop.
981
+ */
982
+
983
+ function empty () { }
984
+
985
+ /**
986
+ * JSONP Polling constructor.
987
+ *
988
+ * @param {Object} opts.
989
+ * @api public
990
+ */
991
+
992
+ function JSONPPolling (opts) {
993
+ Polling.call(this, opts);
994
+
995
+ this.query = this.query || {};
996
+
997
+ // define global callbacks array if not present
998
+ // we do this here (lazily) to avoid unneeded global pollution
999
+ if (!callbacks) {
1000
+ // we need to consider multiple engines in the same page
1001
+ if (!global.___eio) global.___eio = [];
1002
+ callbacks = global.___eio;
1003
+ }
1004
+
1005
+ // callback identifier
1006
+ this.index = callbacks.length;
1007
+
1008
+ // add callback to jsonp global
1009
+ var self = this;
1010
+ callbacks.push(function (msg) {
1011
+ self.onData(msg);
1012
+ });
1013
+
1014
+ // append to query string
1015
+ this.query.j = this.index;
1016
+
1017
+ // prevent spurious errors from being emitted when the window is unloaded
1018
+ if (global.document && global.addEventListener) {
1019
+ global.addEventListener('beforeunload', function () {
1020
+ if (self.script) self.script.onerror = empty;
1021
+ }, false);
1022
+ }
1023
+ }
1024
+
1025
+ /**
1026
+ * Inherits from Polling.
1027
+ */
1028
+
1029
+ inherit(JSONPPolling, Polling);
1030
+
1031
+ /*
1032
+ * JSONP only supports binary as base64 encoded strings
1033
+ */
1034
+
1035
+ JSONPPolling.prototype.supportsBinary = false;
1036
+
1037
+ /**
1038
+ * Closes the socket.
1039
+ *
1040
+ * @api private
1041
+ */
1042
+
1043
+ JSONPPolling.prototype.doClose = function () {
1044
+ if (this.script) {
1045
+ this.script.parentNode.removeChild(this.script);
1046
+ this.script = null;
1047
+ }
1048
+
1049
+ if (this.form) {
1050
+ this.form.parentNode.removeChild(this.form);
1051
+ this.form = null;
1052
+ this.iframe = null;
1053
+ }
1054
+
1055
+ Polling.prototype.doClose.call(this);
1056
+ };
1057
+
1058
+ /**
1059
+ * Starts a poll cycle.
1060
+ *
1061
+ * @api private
1062
+ */
1063
+
1064
+ JSONPPolling.prototype.doPoll = function () {
1065
+ var self = this;
1066
+ var script = document.createElement('script');
1067
+
1068
+ if (this.script) {
1069
+ this.script.parentNode.removeChild(this.script);
1070
+ this.script = null;
1071
+ }
1072
+
1073
+ script.async = true;
1074
+ script.src = this.uri();
1075
+ script.onerror = function(e){
1076
+ self.onError('jsonp poll error',e);
1077
+ };
1078
+
1079
+ var insertAt = document.getElementsByTagName('script')[0];
1080
+ insertAt.parentNode.insertBefore(script, insertAt);
1081
+ this.script = script;
1082
+
1083
+ var isUAgecko = 'undefined' != typeof navigator && /gecko/i.test(navigator.userAgent);
1084
+
1085
+ if (isUAgecko) {
1086
+ setTimeout(function () {
1087
+ var iframe = document.createElement('iframe');
1088
+ document.body.appendChild(iframe);
1089
+ document.body.removeChild(iframe);
1090
+ }, 100);
1091
+ }
1092
+ };
1093
+
1094
+ /**
1095
+ * Writes with a hidden iframe.
1096
+ *
1097
+ * @param {String} data to send
1098
+ * @param {Function} called upon flush.
1099
+ * @api private
1100
+ */
1101
+
1102
+ JSONPPolling.prototype.doWrite = function (data, fn) {
1103
+ var self = this;
1104
+
1105
+ if (!this.form) {
1106
+ var form = document.createElement('form');
1107
+ var area = document.createElement('textarea');
1108
+ var id = this.iframeId = 'eio_iframe_' + this.index;
1109
+ var iframe;
1110
+
1111
+ form.className = 'socketio';
1112
+ form.style.position = 'absolute';
1113
+ form.style.top = '-1000px';
1114
+ form.style.left = '-1000px';
1115
+ form.target = id;
1116
+ form.method = 'POST';
1117
+ form.setAttribute('accept-charset', 'utf-8');
1118
+ area.name = 'd';
1119
+ form.appendChild(area);
1120
+ document.body.appendChild(form);
1121
+
1122
+ this.form = form;
1123
+ this.area = area;
1124
+ }
1125
+
1126
+ this.form.action = this.uri();
1127
+
1128
+ function complete () {
1129
+ initIframe();
1130
+ fn();
1131
+ }
1132
+
1133
+ function initIframe () {
1134
+ if (self.iframe) {
1135
+ try {
1136
+ self.form.removeChild(self.iframe);
1137
+ } catch (e) {
1138
+ self.onError('jsonp polling iframe removal error', e);
1139
+ }
1140
+ }
1141
+
1142
+ try {
1143
+ // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
1144
+ var html = '<iframe src="javascript:0" name="'+ self.iframeId +'">';
1145
+ iframe = document.createElement(html);
1146
+ } catch (e) {
1147
+ iframe = document.createElement('iframe');
1148
+ iframe.name = self.iframeId;
1149
+ iframe.src = 'javascript:0';
1150
+ }
1151
+
1152
+ iframe.id = self.iframeId;
1153
+
1154
+ self.form.appendChild(iframe);
1155
+ self.iframe = iframe;
1156
+ }
1157
+
1158
+ initIframe();
1159
+
1160
+ // escape \n to prevent it from being converted into \r\n by some UAs
1161
+ // double escaping is required for escaped new lines because unescaping of new lines can be done safely on server-side
1162
+ data = data.replace(rEscapedNewline, '\\\n');
1163
+ this.area.value = data.replace(rNewline, '\\n');
1164
+
1165
+ try {
1166
+ this.form.submit();
1167
+ } catch(e) {}
1168
+
1169
+ if (this.iframe.attachEvent) {
1170
+ this.iframe.onreadystatechange = function(){
1171
+ if (self.iframe.readyState == 'complete') {
1172
+ complete();
1173
+ }
1174
+ };
1175
+ } else {
1176
+ this.iframe.onload = complete;
1177
+ }
1178
+ };
1179
+
1180
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
1181
+ },{"./polling":8,"component-inherit":13}],7:[function(_dereq_,module,exports){
1182
+ (function (global){
1183
+ /**
1184
+ * Module requirements.
1185
+ */
1186
+
1187
+ var XMLHttpRequest = _dereq_('xmlhttprequest');
1188
+ var Polling = _dereq_('./polling');
1189
+ var Emitter = _dereq_('component-emitter');
1190
+ var inherit = _dereq_('component-inherit');
1191
+ var debug = _dereq_('debug')('engine.io-client:polling-xhr');
1192
+
1193
+ /**
1194
+ * Module exports.
1195
+ */
1196
+
1197
+ module.exports = XHR;
1198
+ module.exports.Request = Request;
1199
+
1200
+ /**
1201
+ * Empty function
1202
+ */
1203
+
1204
+ function empty(){}
1205
+
1206
+ /**
1207
+ * XHR Polling constructor.
1208
+ *
1209
+ * @param {Object} opts
1210
+ * @api public
1211
+ */
1212
+
1213
+ function XHR(opts){
1214
+ Polling.call(this, opts);
1215
+
1216
+ if (global.location) {
1217
+ var isSSL = 'https:' == location.protocol;
1218
+ var port = location.port;
1219
+
1220
+ // some user agents have empty `location.port`
1221
+ if (!port) {
1222
+ port = isSSL ? 443 : 80;
1223
+ }
1224
+
1225
+ this.xd = opts.hostname != global.location.hostname ||
1226
+ port != opts.port;
1227
+ this.xs = opts.secure != isSSL;
1228
+ }
1229
+ }
1230
+
1231
+ /**
1232
+ * Inherits from Polling.
1233
+ */
1234
+
1235
+ inherit(XHR, Polling);
1236
+
1237
+ /**
1238
+ * XHR supports binary
1239
+ */
1240
+
1241
+ XHR.prototype.supportsBinary = true;
1242
+
1243
+ /**
1244
+ * Creates a request.
1245
+ *
1246
+ * @param {String} method
1247
+ * @api private
1248
+ */
1249
+
1250
+ XHR.prototype.request = function(opts){
1251
+ opts = opts || {};
1252
+ opts.uri = this.uri();
1253
+ opts.xd = this.xd;
1254
+ opts.xs = this.xs;
1255
+ opts.agent = this.agent || false;
1256
+ opts.supportsBinary = this.supportsBinary;
1257
+ opts.enablesXDR = this.enablesXDR;
1258
+
1259
+ // SSL options for Node.js client
1260
+ opts.pfx = this.pfx;
1261
+ opts.key = this.key;
1262
+ opts.passphrase = this.passphrase;
1263
+ opts.cert = this.cert;
1264
+ opts.ca = this.ca;
1265
+ opts.ciphers = this.ciphers;
1266
+ opts.rejectUnauthorized = this.rejectUnauthorized;
1267
+
1268
+ return new Request(opts);
1269
+ };
1270
+
1271
+ /**
1272
+ * Sends data.
1273
+ *
1274
+ * @param {String} data to send.
1275
+ * @param {Function} called upon flush.
1276
+ * @api private
1277
+ */
1278
+
1279
+ XHR.prototype.doWrite = function(data, fn){
1280
+ var isBinary = typeof data !== 'string' && data !== undefined;
1281
+ var req = this.request({ method: 'POST', data: data, isBinary: isBinary });
1282
+ var self = this;
1283
+ req.on('success', fn);
1284
+ req.on('error', function(err){
1285
+ self.onError('xhr post error', err);
1286
+ });
1287
+ this.sendXhr = req;
1288
+ };
1289
+
1290
+ /**
1291
+ * Starts a poll cycle.
1292
+ *
1293
+ * @api private
1294
+ */
1295
+
1296
+ XHR.prototype.doPoll = function(){
1297
+ debug('xhr poll');
1298
+ var req = this.request();
1299
+ var self = this;
1300
+ req.on('data', function(data){
1301
+ self.onData(data);
1302
+ });
1303
+ req.on('error', function(err){
1304
+ self.onError('xhr poll error', err);
1305
+ });
1306
+ this.pollXhr = req;
1307
+ };
1308
+
1309
+ /**
1310
+ * Request constructor
1311
+ *
1312
+ * @param {Object} options
1313
+ * @api public
1314
+ */
1315
+
1316
+ function Request(opts){
1317
+ this.method = opts.method || 'GET';
1318
+ this.uri = opts.uri;
1319
+ this.xd = !!opts.xd;
1320
+ this.xs = !!opts.xs;
1321
+ this.async = false !== opts.async;
1322
+ this.data = undefined != opts.data ? opts.data : null;
1323
+ this.agent = opts.agent;
1324
+ this.isBinary = opts.isBinary;
1325
+ this.supportsBinary = opts.supportsBinary;
1326
+ this.enablesXDR = opts.enablesXDR;
1327
+
1328
+ // SSL options for Node.js client
1329
+ this.pfx = opts.pfx;
1330
+ this.key = opts.key;
1331
+ this.passphrase = opts.passphrase;
1332
+ this.cert = opts.cert;
1333
+ this.ca = opts.ca;
1334
+ this.ciphers = opts.ciphers;
1335
+ this.rejectUnauthorized = opts.rejectUnauthorized;
1336
+
1337
+ this.create();
1338
+ }
1339
+
1340
+ /**
1341
+ * Mix in `Emitter`.
1342
+ */
1343
+
1344
+ Emitter(Request.prototype);
1345
+
1346
+ /**
1347
+ * Creates the XHR object and sends the request.
1348
+ *
1349
+ * @api private
1350
+ */
1351
+
1352
+ Request.prototype.create = function(){
1353
+ var opts = { agent: this.agent, xdomain: this.xd, xscheme: this.xs, enablesXDR: this.enablesXDR };
1354
+
1355
+ // SSL options for Node.js client
1356
+ opts.pfx = this.pfx;
1357
+ opts.key = this.key;
1358
+ opts.passphrase = this.passphrase;
1359
+ opts.cert = this.cert;
1360
+ opts.ca = this.ca;
1361
+ opts.ciphers = this.ciphers;
1362
+ opts.rejectUnauthorized = this.rejectUnauthorized;
1363
+
1364
+ var xhr = this.xhr = new XMLHttpRequest(opts);
1365
+ var self = this;
1366
+
1367
+ try {
1368
+ debug('xhr open %s: %s', this.method, this.uri);
1369
+ xhr.open(this.method, this.uri, this.async);
1370
+ if (this.supportsBinary) {
1371
+ // This has to be done after open because Firefox is stupid
1372
+ // http://stackoverflow.com/questions/13216903/get-binary-data-with-xmlhttprequest-in-a-firefox-extension
1373
+ xhr.responseType = 'arraybuffer';
1374
+ }
1375
+
1376
+ if ('POST' == this.method) {
1377
+ try {
1378
+ if (this.isBinary) {
1379
+ xhr.setRequestHeader('Content-type', 'application/octet-stream');
1380
+ } else {
1381
+ xhr.setRequestHeader('Content-type', 'text/plain;charset=UTF-8');
1382
+ }
1383
+ } catch (e) {}
1384
+ }
1385
+
1386
+ // ie6 check
1387
+ if ('withCredentials' in xhr) {
1388
+ xhr.withCredentials = true;
1389
+ }
1390
+
1391
+ if (this.hasXDR()) {
1392
+ xhr.onload = function(){
1393
+ self.onLoad();
1394
+ };
1395
+ xhr.onerror = function(){
1396
+ self.onError(xhr.responseText);
1397
+ };
1398
+ } else {
1399
+ xhr.onreadystatechange = function(){
1400
+ if (4 != xhr.readyState) return;
1401
+ if (200 == xhr.status || 1223 == xhr.status) {
1402
+ self.onLoad();
1403
+ } else {
1404
+ // make sure the `error` event handler that's user-set
1405
+ // does not throw in the same tick and gets caught here
1406
+ setTimeout(function(){
1407
+ self.onError(xhr.status);
1408
+ }, 0);
1409
+ }
1410
+ };
1411
+ }
1412
+
1413
+ debug('xhr data %s', this.data);
1414
+ xhr.send(this.data);
1415
+ } catch (e) {
1416
+ // Need to defer since .create() is called directly fhrom the constructor
1417
+ // and thus the 'error' event can only be only bound *after* this exception
1418
+ // occurs. Therefore, also, we cannot throw here at all.
1419
+ setTimeout(function() {
1420
+ self.onError(e);
1421
+ }, 0);
1422
+ return;
1423
+ }
1424
+
1425
+ if (global.document) {
1426
+ this.index = Request.requestsCount++;
1427
+ Request.requests[this.index] = this;
1428
+ }
1429
+ };
1430
+
1431
+ /**
1432
+ * Called upon successful response.
1433
+ *
1434
+ * @api private
1435
+ */
1436
+
1437
+ Request.prototype.onSuccess = function(){
1438
+ this.emit('success');
1439
+ this.cleanup();
1440
+ };
1441
+
1442
+ /**
1443
+ * Called if we have data.
1444
+ *
1445
+ * @api private
1446
+ */
1447
+
1448
+ Request.prototype.onData = function(data){
1449
+ this.emit('data', data);
1450
+ this.onSuccess();
1451
+ };
1452
+
1453
+ /**
1454
+ * Called upon error.
1455
+ *
1456
+ * @api private
1457
+ */
1458
+
1459
+ Request.prototype.onError = function(err){
1460
+ this.emit('error', err);
1461
+ this.cleanup(true);
1462
+ };
1463
+
1464
+ /**
1465
+ * Cleans up house.
1466
+ *
1467
+ * @api private
1468
+ */
1469
+
1470
+ Request.prototype.cleanup = function(fromError){
1471
+ if ('undefined' == typeof this.xhr || null === this.xhr) {
1472
+ return;
1473
+ }
1474
+ // xmlhttprequest
1475
+ if (this.hasXDR()) {
1476
+ this.xhr.onload = this.xhr.onerror = empty;
1477
+ } else {
1478
+ this.xhr.onreadystatechange = empty;
1479
+ }
1480
+
1481
+ if (fromError) {
1482
+ try {
1483
+ this.xhr.abort();
1484
+ } catch(e) {}
1485
+ }
1486
+
1487
+ if (global.document) {
1488
+ delete Request.requests[this.index];
1489
+ }
1490
+
1491
+ this.xhr = null;
1492
+ };
1493
+
1494
+ /**
1495
+ * Called upon load.
1496
+ *
1497
+ * @api private
1498
+ */
1499
+
1500
+ Request.prototype.onLoad = function(){
1501
+ var data;
1502
+ try {
1503
+ var contentType;
1504
+ try {
1505
+ contentType = this.xhr.getResponseHeader('Content-Type').split(';')[0];
1506
+ } catch (e) {}
1507
+ if (contentType === 'application/octet-stream') {
1508
+ data = this.xhr.response;
1509
+ } else {
1510
+ if (!this.supportsBinary) {
1511
+ data = this.xhr.responseText;
1512
+ } else {
1513
+ data = 'ok';
1514
+ }
1515
+ }
1516
+ } catch (e) {
1517
+ this.onError(e);
1518
+ }
1519
+ if (null != data) {
1520
+ this.onData(data);
1521
+ }
1522
+ };
1523
+
1524
+ /**
1525
+ * Check if it has XDomainRequest.
1526
+ *
1527
+ * @api private
1528
+ */
1529
+
1530
+ Request.prototype.hasXDR = function(){
1531
+ return 'undefined' !== typeof global.XDomainRequest && !this.xs && this.enablesXDR;
1532
+ };
1533
+
1534
+ /**
1535
+ * Aborts the request.
1536
+ *
1537
+ * @api public
1538
+ */
1539
+
1540
+ Request.prototype.abort = function(){
1541
+ this.cleanup();
1542
+ };
1543
+
1544
+ /**
1545
+ * Aborts pending requests when unloading the window. This is needed to prevent
1546
+ * memory leaks (e.g. when using IE) and to ensure that no spurious error is
1547
+ * emitted.
1548
+ */
1549
+
1550
+ if (global.document) {
1551
+ Request.requestsCount = 0;
1552
+ Request.requests = {};
1553
+ if (global.attachEvent) {
1554
+ global.attachEvent('onunload', unloadHandler);
1555
+ } else if (global.addEventListener) {
1556
+ global.addEventListener('beforeunload', unloadHandler, false);
1557
+ }
1558
+ }
1559
+
1560
+ function unloadHandler() {
1561
+ for (var i in Request.requests) {
1562
+ if (Request.requests.hasOwnProperty(i)) {
1563
+ Request.requests[i].abort();
1564
+ }
1565
+ }
1566
+ }
1567
+
1568
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
1569
+ },{"./polling":8,"component-emitter":12,"component-inherit":13,"debug":14,"xmlhttprequest":10}],8:[function(_dereq_,module,exports){
1570
+ /**
1571
+ * Module dependencies.
1572
+ */
1573
+
1574
+ var Transport = _dereq_('../transport');
1575
+ var parseqs = _dereq_('parseqs');
1576
+ var parser = _dereq_('engine.io-parser');
1577
+ var inherit = _dereq_('component-inherit');
1578
+ var debug = _dereq_('debug')('engine.io-client:polling');
1579
+
1580
+ /**
1581
+ * Module exports.
1582
+ */
1583
+
1584
+ module.exports = Polling;
1585
+
1586
+ /**
1587
+ * Is XHR2 supported?
1588
+ */
1589
+
1590
+ var hasXHR2 = (function() {
1591
+ var XMLHttpRequest = _dereq_('xmlhttprequest');
1592
+ var xhr = new XMLHttpRequest({ xdomain: false });
1593
+ return null != xhr.responseType;
1594
+ })();
1595
+
1596
+ /**
1597
+ * Polling interface.
1598
+ *
1599
+ * @param {Object} opts
1600
+ * @api private
1601
+ */
1602
+
1603
+ function Polling(opts){
1604
+ var forceBase64 = (opts && opts.forceBase64);
1605
+ if (!hasXHR2 || forceBase64) {
1606
+ this.supportsBinary = false;
1607
+ }
1608
+ Transport.call(this, opts);
1609
+ }
1610
+
1611
+ /**
1612
+ * Inherits from Transport.
1613
+ */
1614
+
1615
+ inherit(Polling, Transport);
1616
+
1617
+ /**
1618
+ * Transport name.
1619
+ */
1620
+
1621
+ Polling.prototype.name = 'polling';
1622
+
1623
+ /**
1624
+ * Opens the socket (triggers polling). We write a PING message to determine
1625
+ * when the transport is open.
1626
+ *
1627
+ * @api private
1628
+ */
1629
+
1630
+ Polling.prototype.doOpen = function(){
1631
+ this.poll();
1632
+ };
1633
+
1634
+ /**
1635
+ * Pauses polling.
1636
+ *
1637
+ * @param {Function} callback upon buffers are flushed and transport is paused
1638
+ * @api private
1639
+ */
1640
+
1641
+ Polling.prototype.pause = function(onPause){
1642
+ var pending = 0;
1643
+ var self = this;
1644
+
1645
+ this.readyState = 'pausing';
1646
+
1647
+ function pause(){
1648
+ debug('paused');
1649
+ self.readyState = 'paused';
1650
+ onPause();
1651
+ }
1652
+
1653
+ if (this.polling || !this.writable) {
1654
+ var total = 0;
1655
+
1656
+ if (this.polling) {
1657
+ debug('we are currently polling - waiting to pause');
1658
+ total++;
1659
+ this.once('pollComplete', function(){
1660
+ debug('pre-pause polling complete');
1661
+ --total || pause();
1662
+ });
1663
+ }
1664
+
1665
+ if (!this.writable) {
1666
+ debug('we are currently writing - waiting to pause');
1667
+ total++;
1668
+ this.once('drain', function(){
1669
+ debug('pre-pause writing complete');
1670
+ --total || pause();
1671
+ });
1672
+ }
1673
+ } else {
1674
+ pause();
1675
+ }
1676
+ };
1677
+
1678
+ /**
1679
+ * Starts polling cycle.
1680
+ *
1681
+ * @api public
1682
+ */
1683
+
1684
+ Polling.prototype.poll = function(){
1685
+ debug('polling');
1686
+ this.polling = true;
1687
+ this.doPoll();
1688
+ this.emit('poll');
1689
+ };
1690
+
1691
+ /**
1692
+ * Overloads onData to detect payloads.
1693
+ *
1694
+ * @api private
1695
+ */
1696
+
1697
+ Polling.prototype.onData = function(data){
1698
+ var self = this;
1699
+ debug('polling got data %s', data);
1700
+ var callback = function(packet, index, total) {
1701
+ // if its the first message we consider the transport open
1702
+ if ('opening' == self.readyState) {
1703
+ self.onOpen();
1704
+ }
1705
+
1706
+ // if its a close packet, we close the ongoing requests
1707
+ if ('close' == packet.type) {
1708
+ self.onClose();
1709
+ return false;
1710
+ }
1711
+
1712
+ // otherwise bypass onData and handle the message
1713
+ self.onPacket(packet);
1714
+ };
1715
+
1716
+ // decode payload
1717
+ parser.decodePayload(data, this.socket.binaryType, callback);
1718
+
1719
+ // if an event did not trigger closing
1720
+ if ('closed' != this.readyState) {
1721
+ // if we got data we're not polling
1722
+ this.polling = false;
1723
+ this.emit('pollComplete');
1724
+
1725
+ if ('open' == this.readyState) {
1726
+ this.poll();
1727
+ } else {
1728
+ debug('ignoring poll - transport state "%s"', this.readyState);
1729
+ }
1730
+ }
1731
+ };
1732
+
1733
+ /**
1734
+ * For polling, send a close packet.
1735
+ *
1736
+ * @api private
1737
+ */
1738
+
1739
+ Polling.prototype.doClose = function(){
1740
+ var self = this;
1741
+
1742
+ function close(){
1743
+ debug('writing close packet');
1744
+ self.write([{ type: 'close' }]);
1745
+ }
1746
+
1747
+ if ('open' == this.readyState) {
1748
+ debug('transport open - closing');
1749
+ close();
1750
+ } else {
1751
+ // in case we're trying to close while
1752
+ // handshaking is in progress (GH-164)
1753
+ debug('transport not open - deferring close');
1754
+ this.once('open', close);
1755
+ }
1756
+ };
1757
+
1758
+ /**
1759
+ * Writes a packets payload.
1760
+ *
1761
+ * @param {Array} data packets
1762
+ * @param {Function} drain callback
1763
+ * @api private
1764
+ */
1765
+
1766
+ Polling.prototype.write = function(packets){
1767
+ var self = this;
1768
+ this.writable = false;
1769
+ var callbackfn = function() {
1770
+ self.writable = true;
1771
+ self.emit('drain');
1772
+ };
1773
+
1774
+ var self = this;
1775
+ parser.encodePayload(packets, this.supportsBinary, function(data) {
1776
+ self.doWrite(data, callbackfn);
1777
+ });
1778
+ };
1779
+
1780
+ /**
1781
+ * Generates uri for connection.
1782
+ *
1783
+ * @api private
1784
+ */
1785
+
1786
+ Polling.prototype.uri = function(){
1787
+ var query = this.query || {};
1788
+ var schema = this.secure ? 'https' : 'http';
1789
+ var port = '';
1790
+
1791
+ // cache busting is forced
1792
+ if (false !== this.timestampRequests) {
1793
+ query[this.timestampParam] = +new Date + '-' + Transport.timestamps++;
1794
+ }
1795
+
1796
+ if (!this.supportsBinary && !query.sid) {
1797
+ query.b64 = 1;
1798
+ }
1799
+
1800
+ query = parseqs.encode(query);
1801
+
1802
+ // avoid port if default for schema
1803
+ if (this.port && (('https' == schema && this.port != 443) ||
1804
+ ('http' == schema && this.port != 80))) {
1805
+ port = ':' + this.port;
1806
+ }
1807
+
1808
+ // prepend ? to query
1809
+ if (query.length) {
1810
+ query = '?' + query;
1811
+ }
1812
+
1813
+ return schema + '://' + this.hostname + port + this.path + query;
1814
+ };
1815
+
1816
+ },{"../transport":4,"component-inherit":13,"debug":14,"engine.io-parser":17,"parseqs":29,"xmlhttprequest":10}],9:[function(_dereq_,module,exports){
1817
+ /**
1818
+ * Module dependencies.
1819
+ */
1820
+
1821
+ var Transport = _dereq_('../transport');
1822
+ var parser = _dereq_('engine.io-parser');
1823
+ var parseqs = _dereq_('parseqs');
1824
+ var inherit = _dereq_('component-inherit');
1825
+ var debug = _dereq_('debug')('engine.io-client:websocket');
1826
+
1827
+ /**
1828
+ * `ws` exposes a WebSocket-compatible interface in
1829
+ * Node, or the `WebSocket` or `MozWebSocket` globals
1830
+ * in the browser.
1831
+ */
1832
+
1833
+ var WebSocket = _dereq_('ws');
1834
+
1835
+ /**
1836
+ * Module exports.
1837
+ */
1838
+
1839
+ module.exports = WS;
1840
+
1841
+ /**
1842
+ * WebSocket transport constructor.
1843
+ *
1844
+ * @api {Object} connection options
1845
+ * @api public
1846
+ */
1847
+
1848
+ function WS(opts){
1849
+ var forceBase64 = (opts && opts.forceBase64);
1850
+ if (forceBase64) {
1851
+ this.supportsBinary = false;
1852
+ }
1853
+ Transport.call(this, opts);
1854
+ }
1855
+
1856
+ /**
1857
+ * Inherits from Transport.
1858
+ */
1859
+
1860
+ inherit(WS, Transport);
1861
+
1862
+ /**
1863
+ * Transport name.
1864
+ *
1865
+ * @api public
1866
+ */
1867
+
1868
+ WS.prototype.name = 'websocket';
1869
+
1870
+ /*
1871
+ * WebSockets support binary
1872
+ */
1873
+
1874
+ WS.prototype.supportsBinary = true;
1875
+
1876
+ /**
1877
+ * Opens socket.
1878
+ *
1879
+ * @api private
1880
+ */
1881
+
1882
+ WS.prototype.doOpen = function(){
1883
+ if (!this.check()) {
1884
+ // let probe timeout
1885
+ return;
1886
+ }
1887
+
1888
+ var self = this;
1889
+ var uri = this.uri();
1890
+ var protocols = void(0);
1891
+ var opts = { agent: this.agent };
1892
+
1893
+ // SSL options for Node.js client
1894
+ opts.pfx = this.pfx;
1895
+ opts.key = this.key;
1896
+ opts.passphrase = this.passphrase;
1897
+ opts.cert = this.cert;
1898
+ opts.ca = this.ca;
1899
+ opts.ciphers = this.ciphers;
1900
+ opts.rejectUnauthorized = this.rejectUnauthorized;
1901
+
1902
+ this.ws = new WebSocket(uri, protocols, opts);
1903
+
1904
+ if (this.ws.binaryType === undefined) {
1905
+ this.supportsBinary = false;
1906
+ }
1907
+
1908
+ this.ws.binaryType = 'arraybuffer';
1909
+ this.addEventListeners();
1910
+ };
1911
+
1912
+ /**
1913
+ * Adds event listeners to the socket
1914
+ *
1915
+ * @api private
1916
+ */
1917
+
1918
+ WS.prototype.addEventListeners = function(){
1919
+ var self = this;
1920
+
1921
+ this.ws.onopen = function(){
1922
+ self.onOpen();
1923
+ };
1924
+ this.ws.onclose = function(){
1925
+ self.onClose();
1926
+ };
1927
+ this.ws.onmessage = function(ev){
1928
+ self.onData(ev.data);
1929
+ };
1930
+ this.ws.onerror = function(e){
1931
+ self.onError('websocket error', e);
1932
+ };
1933
+ };
1934
+
1935
+ /**
1936
+ * Override `onData` to use a timer on iOS.
1937
+ * See: https://gist.github.com/mloughran/2052006
1938
+ *
1939
+ * @api private
1940
+ */
1941
+
1942
+ if ('undefined' != typeof navigator
1943
+ && /iPad|iPhone|iPod/i.test(navigator.userAgent)) {
1944
+ WS.prototype.onData = function(data){
1945
+ var self = this;
1946
+ setTimeout(function(){
1947
+ Transport.prototype.onData.call(self, data);
1948
+ }, 0);
1949
+ };
1950
+ }
1951
+
1952
+ /**
1953
+ * Writes data to socket.
1954
+ *
1955
+ * @param {Array} array of packets.
1956
+ * @api private
1957
+ */
1958
+
1959
+ WS.prototype.write = function(packets){
1960
+ var self = this;
1961
+ this.writable = false;
1962
+ // encodePacket efficient as it uses WS framing
1963
+ // no need for encodePayload
1964
+ for (var i = 0, l = packets.length; i < l; i++) {
1965
+ parser.encodePacket(packets[i], this.supportsBinary, function(data) {
1966
+ //Sometimes the websocket has already been closed but the browser didn't
1967
+ //have a chance of informing us about it yet, in that case send will
1968
+ //throw an error
1969
+ try {
1970
+ self.ws.send(data);
1971
+ } catch (e){
1972
+ debug('websocket closed before onclose event');
1973
+ }
1974
+ });
1975
+ }
1976
+
1977
+ function ondrain() {
1978
+ self.writable = true;
1979
+ self.emit('drain');
1980
+ }
1981
+ // fake drain
1982
+ // defer to next tick to allow Socket to clear writeBuffer
1983
+ setTimeout(ondrain, 0);
1984
+ };
1985
+
1986
+ /**
1987
+ * Called upon close
1988
+ *
1989
+ * @api private
1990
+ */
1991
+
1992
+ WS.prototype.onClose = function(){
1993
+ Transport.prototype.onClose.call(this);
1994
+ };
1995
+
1996
+ /**
1997
+ * Closes socket.
1998
+ *
1999
+ * @api private
2000
+ */
2001
+
2002
+ WS.prototype.doClose = function(){
2003
+ if (typeof this.ws !== 'undefined') {
2004
+ this.ws.close();
2005
+ }
2006
+ };
2007
+
2008
+ /**
2009
+ * Generates uri for connection.
2010
+ *
2011
+ * @api private
2012
+ */
2013
+
2014
+ WS.prototype.uri = function(){
2015
+ var query = this.query || {};
2016
+ var schema = this.secure ? 'wss' : 'ws';
2017
+ var port = '';
2018
+
2019
+ // avoid port if default for schema
2020
+ if (this.port && (('wss' == schema && this.port != 443)
2021
+ || ('ws' == schema && this.port != 80))) {
2022
+ port = ':' + this.port;
2023
+ }
2024
+
2025
+ // append timestamp to URI
2026
+ if (this.timestampRequests) {
2027
+ query[this.timestampParam] = +new Date;
2028
+ }
2029
+
2030
+ // communicate binary support capabilities
2031
+ if (!this.supportsBinary) {
2032
+ query.b64 = 1;
2033
+ }
2034
+
2035
+ query = parseqs.encode(query);
2036
+
2037
+ // prepend ? to query
2038
+ if (query.length) {
2039
+ query = '?' + query;
2040
+ }
2041
+
2042
+ return schema + '://' + this.hostname + port + this.path + query;
2043
+ };
2044
+
2045
+ /**
2046
+ * Feature detection for WebSocket.
2047
+ *
2048
+ * @return {Boolean} whether this transport is available.
2049
+ * @api public
2050
+ */
2051
+
2052
+ WS.prototype.check = function(){
2053
+ return !!WebSocket && !('__initialize' in WebSocket && this.name === WS.prototype.name);
2054
+ };
2055
+
2056
+ },{"../transport":4,"component-inherit":13,"debug":14,"engine.io-parser":17,"parseqs":29,"ws":31}],10:[function(_dereq_,module,exports){
2057
+ // browser shim for xmlhttprequest module
2058
+ var hasCORS = _dereq_('has-cors');
2059
+
2060
+ module.exports = function(opts) {
2061
+ var xdomain = opts.xdomain;
2062
+
2063
+ // scheme must be same when usign XDomainRequest
2064
+ // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
2065
+ var xscheme = opts.xscheme;
2066
+
2067
+ // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default.
2068
+ // https://github.com/Automattic/engine.io-client/pull/217
2069
+ var enablesXDR = opts.enablesXDR;
2070
+
2071
+ // XMLHttpRequest can be disabled on IE
2072
+ try {
2073
+ if ('undefined' != typeof XMLHttpRequest && (!xdomain || hasCORS)) {
2074
+ return new XMLHttpRequest();
2075
+ }
2076
+ } catch (e) { }
2077
+
2078
+ // Use XDomainRequest for IE8 if enablesXDR is true
2079
+ // because loading bar keeps flashing when using jsonp-polling
2080
+ // https://github.com/yujiosaka/socke.io-ie8-loading-example
2081
+ try {
2082
+ if ('undefined' != typeof XDomainRequest && !xscheme && enablesXDR) {
2083
+ return new XDomainRequest();
2084
+ }
2085
+ } catch (e) { }
2086
+
2087
+ if (!xdomain) {
2088
+ try {
2089
+ return new ActiveXObject('Microsoft.XMLHTTP');
2090
+ } catch(e) { }
2091
+ }
2092
+ }
2093
+
2094
+ },{"has-cors":25}],11:[function(_dereq_,module,exports){
2095
+ (function (global){
2096
+ /**
2097
+ * Create a blob builder even when vendor prefixes exist
2098
+ */
2099
+
2100
+ var BlobBuilder = global.BlobBuilder
2101
+ || global.WebKitBlobBuilder
2102
+ || global.MSBlobBuilder
2103
+ || global.MozBlobBuilder;
2104
+
2105
+ /**
2106
+ * Check if Blob constructor is supported
2107
+ */
2108
+
2109
+ var blobSupported = (function() {
2110
+ try {
2111
+ var b = new Blob(['hi']);
2112
+ return b.size == 2;
2113
+ } catch(e) {
2114
+ return false;
2115
+ }
2116
+ })();
2117
+
2118
+ /**
2119
+ * Check if BlobBuilder is supported
2120
+ */
2121
+
2122
+ var blobBuilderSupported = BlobBuilder
2123
+ && BlobBuilder.prototype.append
2124
+ && BlobBuilder.prototype.getBlob;
2125
+
2126
+ function BlobBuilderConstructor(ary, options) {
2127
+ options = options || {};
2128
+
2129
+ var bb = new BlobBuilder();
2130
+ for (var i = 0; i < ary.length; i++) {
2131
+ bb.append(ary[i]);
2132
+ }
2133
+ return (options.type) ? bb.getBlob(options.type) : bb.getBlob();
2134
+ };
2135
+
2136
+ module.exports = (function() {
2137
+ if (blobSupported) {
2138
+ return global.Blob;
2139
+ } else if (blobBuilderSupported) {
2140
+ return BlobBuilderConstructor;
2141
+ } else {
2142
+ return undefined;
2143
+ }
2144
+ })();
2145
+
2146
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
2147
+ },{}],12:[function(_dereq_,module,exports){
2148
+
2149
+ /**
2150
+ * Expose `Emitter`.
2151
+ */
2152
+
2153
+ module.exports = Emitter;
2154
+
2155
+ /**
2156
+ * Initialize a new `Emitter`.
2157
+ *
2158
+ * @api public
2159
+ */
2160
+
2161
+ function Emitter(obj) {
2162
+ if (obj) return mixin(obj);
2163
+ };
2164
+
2165
+ /**
2166
+ * Mixin the emitter properties.
2167
+ *
2168
+ * @param {Object} obj
2169
+ * @return {Object}
2170
+ * @api private
2171
+ */
2172
+
2173
+ function mixin(obj) {
2174
+ for (var key in Emitter.prototype) {
2175
+ obj[key] = Emitter.prototype[key];
2176
+ }
2177
+ return obj;
2178
+ }
2179
+
2180
+ /**
2181
+ * Listen on the given `event` with `fn`.
2182
+ *
2183
+ * @param {String} event
2184
+ * @param {Function} fn
2185
+ * @return {Emitter}
2186
+ * @api public
2187
+ */
2188
+
2189
+ Emitter.prototype.on =
2190
+ Emitter.prototype.addEventListener = function(event, fn){
2191
+ this._callbacks = this._callbacks || {};
2192
+ (this._callbacks[event] = this._callbacks[event] || [])
2193
+ .push(fn);
2194
+ return this;
2195
+ };
2196
+
2197
+ /**
2198
+ * Adds an `event` listener that will be invoked a single
2199
+ * time then automatically removed.
2200
+ *
2201
+ * @param {String} event
2202
+ * @param {Function} fn
2203
+ * @return {Emitter}
2204
+ * @api public
2205
+ */
2206
+
2207
+ Emitter.prototype.once = function(event, fn){
2208
+ var self = this;
2209
+ this._callbacks = this._callbacks || {};
2210
+
2211
+ function on() {
2212
+ self.off(event, on);
2213
+ fn.apply(this, arguments);
2214
+ }
2215
+
2216
+ on.fn = fn;
2217
+ this.on(event, on);
2218
+ return this;
2219
+ };
2220
+
2221
+ /**
2222
+ * Remove the given callback for `event` or all
2223
+ * registered callbacks.
2224
+ *
2225
+ * @param {String} event
2226
+ * @param {Function} fn
2227
+ * @return {Emitter}
2228
+ * @api public
2229
+ */
2230
+
2231
+ Emitter.prototype.off =
2232
+ Emitter.prototype.removeListener =
2233
+ Emitter.prototype.removeAllListeners =
2234
+ Emitter.prototype.removeEventListener = function(event, fn){
2235
+ this._callbacks = this._callbacks || {};
2236
+
2237
+ // all
2238
+ if (0 == arguments.length) {
2239
+ this._callbacks = {};
2240
+ return this;
2241
+ }
2242
+
2243
+ // specific event
2244
+ var callbacks = this._callbacks[event];
2245
+ if (!callbacks) return this;
2246
+
2247
+ // remove all handlers
2248
+ if (1 == arguments.length) {
2249
+ delete this._callbacks[event];
2250
+ return this;
2251
+ }
2252
+
2253
+ // remove specific handler
2254
+ var cb;
2255
+ for (var i = 0; i < callbacks.length; i++) {
2256
+ cb = callbacks[i];
2257
+ if (cb === fn || cb.fn === fn) {
2258
+ callbacks.splice(i, 1);
2259
+ break;
2260
+ }
2261
+ }
2262
+ return this;
2263
+ };
2264
+
2265
+ /**
2266
+ * Emit `event` with the given args.
2267
+ *
2268
+ * @param {String} event
2269
+ * @param {Mixed} ...
2270
+ * @return {Emitter}
2271
+ */
2272
+
2273
+ Emitter.prototype.emit = function(event){
2274
+ this._callbacks = this._callbacks || {};
2275
+ var args = [].slice.call(arguments, 1)
2276
+ , callbacks = this._callbacks[event];
2277
+
2278
+ if (callbacks) {
2279
+ callbacks = callbacks.slice(0);
2280
+ for (var i = 0, len = callbacks.length; i < len; ++i) {
2281
+ callbacks[i].apply(this, args);
2282
+ }
2283
+ }
2284
+
2285
+ return this;
2286
+ };
2287
+
2288
+ /**
2289
+ * Return array of callbacks for `event`.
2290
+ *
2291
+ * @param {String} event
2292
+ * @return {Array}
2293
+ * @api public
2294
+ */
2295
+
2296
+ Emitter.prototype.listeners = function(event){
2297
+ this._callbacks = this._callbacks || {};
2298
+ return this._callbacks[event] || [];
2299
+ };
2300
+
2301
+ /**
2302
+ * Check if this emitter has `event` handlers.
2303
+ *
2304
+ * @param {String} event
2305
+ * @return {Boolean}
2306
+ * @api public
2307
+ */
2308
+
2309
+ Emitter.prototype.hasListeners = function(event){
2310
+ return !! this.listeners(event).length;
2311
+ };
2312
+
2313
+ },{}],13:[function(_dereq_,module,exports){
2314
+
2315
+ module.exports = function(a, b){
2316
+ var fn = function(){};
2317
+ fn.prototype = b.prototype;
2318
+ a.prototype = new fn;
2319
+ a.prototype.constructor = a;
2320
+ };
2321
+ },{}],14:[function(_dereq_,module,exports){
2322
+
2323
+ /**
2324
+ * This is the web browser implementation of `debug()`.
2325
+ *
2326
+ * Expose `debug()` as the module.
2327
+ */
2328
+
2329
+ exports = module.exports = _dereq_('./debug');
2330
+ exports.log = log;
2331
+ exports.formatArgs = formatArgs;
2332
+ exports.save = save;
2333
+ exports.load = load;
2334
+ exports.useColors = useColors;
2335
+
2336
+ /**
2337
+ * Colors.
2338
+ */
2339
+
2340
+ exports.colors = [
2341
+ 'lightseagreen',
2342
+ 'forestgreen',
2343
+ 'goldenrod',
2344
+ 'dodgerblue',
2345
+ 'darkorchid',
2346
+ 'crimson'
2347
+ ];
2348
+
2349
+ /**
2350
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
2351
+ * and the Firebug extension (any Firefox version) are known
2352
+ * to support "%c" CSS customizations.
2353
+ *
2354
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
2355
+ */
2356
+
2357
+ function useColors() {
2358
+ // is webkit? http://stackoverflow.com/a/16459606/376773
2359
+ return ('WebkitAppearance' in document.documentElement.style) ||
2360
+ // is firebug? http://stackoverflow.com/a/398120/376773
2361
+ (window.console && (console.firebug || (console.exception && console.table))) ||
2362
+ // is firefox >= v31?
2363
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
2364
+ (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31);
2365
+ }
2366
+
2367
+ /**
2368
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
2369
+ */
2370
+
2371
+ exports.formatters.j = function(v) {
2372
+ return JSON.stringify(v);
2373
+ };
2374
+
2375
+
2376
+ /**
2377
+ * Colorize log arguments if enabled.
2378
+ *
2379
+ * @api public
2380
+ */
2381
+
2382
+ function formatArgs() {
2383
+ var args = arguments;
2384
+ var useColors = this.useColors;
2385
+
2386
+ args[0] = (useColors ? '%c' : '')
2387
+ + this.namespace
2388
+ + (useColors ? ' %c' : ' ')
2389
+ + args[0]
2390
+ + (useColors ? '%c ' : ' ')
2391
+ + '+' + exports.humanize(this.diff);
2392
+
2393
+ if (!useColors) return args;
2394
+
2395
+ var c = 'color: ' + this.color;
2396
+ args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1));
2397
+
2398
+ // the final "%c" is somewhat tricky, because there could be other
2399
+ // arguments passed either before or after the %c, so we need to
2400
+ // figure out the correct index to insert the CSS into
2401
+ var index = 0;
2402
+ var lastC = 0;
2403
+ args[0].replace(/%[a-z%]/g, function(match) {
2404
+ if ('%' === match) return;
2405
+ index++;
2406
+ if ('%c' === match) {
2407
+ // we only are interested in the *last* %c
2408
+ // (the user may have provided their own)
2409
+ lastC = index;
2410
+ }
2411
+ });
2412
+
2413
+ args.splice(lastC, 0, c);
2414
+ return args;
2415
+ }
2416
+
2417
+ /**
2418
+ * Invokes `console.log()` when available.
2419
+ * No-op when `console.log` is not a "function".
2420
+ *
2421
+ * @api public
2422
+ */
2423
+
2424
+ function log() {
2425
+ // This hackery is required for IE8,
2426
+ // where the `console.log` function doesn't have 'apply'
2427
+ return 'object' == typeof console
2428
+ && 'function' == typeof console.log
2429
+ && Function.prototype.apply.call(console.log, console, arguments);
2430
+ }
2431
+
2432
+ /**
2433
+ * Save `namespaces`.
2434
+ *
2435
+ * @param {String} namespaces
2436
+ * @api private
2437
+ */
2438
+
2439
+ function save(namespaces) {
2440
+ try {
2441
+ if (null == namespaces) {
2442
+ localStorage.removeItem('debug');
2443
+ } else {
2444
+ localStorage.debug = namespaces;
2445
+ }
2446
+ } catch(e) {}
2447
+ }
2448
+
2449
+ /**
2450
+ * Load `namespaces`.
2451
+ *
2452
+ * @return {String} returns the previously persisted debug modes
2453
+ * @api private
2454
+ */
2455
+
2456
+ function load() {
2457
+ var r;
2458
+ try {
2459
+ r = localStorage.debug;
2460
+ } catch(e) {}
2461
+ return r;
2462
+ }
2463
+
2464
+ /**
2465
+ * Enable namespaces listed in `localStorage.debug` initially.
2466
+ */
2467
+
2468
+ exports.enable(load());
2469
+
2470
+ },{"./debug":15}],15:[function(_dereq_,module,exports){
2471
+
2472
+ /**
2473
+ * This is the common logic for both the Node.js and web browser
2474
+ * implementations of `debug()`.
2475
+ *
2476
+ * Expose `debug()` as the module.
2477
+ */
2478
+
2479
+ exports = module.exports = debug;
2480
+ exports.coerce = coerce;
2481
+ exports.disable = disable;
2482
+ exports.enable = enable;
2483
+ exports.enabled = enabled;
2484
+ exports.humanize = _dereq_('ms');
2485
+
2486
+ /**
2487
+ * The currently active debug mode names, and names to skip.
2488
+ */
2489
+
2490
+ exports.names = [];
2491
+ exports.skips = [];
2492
+
2493
+ /**
2494
+ * Map of special "%n" handling functions, for the debug "format" argument.
2495
+ *
2496
+ * Valid key names are a single, lowercased letter, i.e. "n".
2497
+ */
2498
+
2499
+ exports.formatters = {};
2500
+
2501
+ /**
2502
+ * Previously assigned color.
2503
+ */
2504
+
2505
+ var prevColor = 0;
2506
+
2507
+ /**
2508
+ * Previous log timestamp.
2509
+ */
2510
+
2511
+ var prevTime;
2512
+
2513
+ /**
2514
+ * Select a color.
2515
+ *
2516
+ * @return {Number}
2517
+ * @api private
2518
+ */
2519
+
2520
+ function selectColor() {
2521
+ return exports.colors[prevColor++ % exports.colors.length];
2522
+ }
2523
+
2524
+ /**
2525
+ * Create a debugger with the given `namespace`.
2526
+ *
2527
+ * @param {String} namespace
2528
+ * @return {Function}
2529
+ * @api public
2530
+ */
2531
+
2532
+ function debug(namespace) {
2533
+
2534
+ // define the `disabled` version
2535
+ function disabled() {
2536
+ }
2537
+ disabled.enabled = false;
2538
+
2539
+ // define the `enabled` version
2540
+ function enabled() {
2541
+
2542
+ var self = enabled;
2543
+
2544
+ // set `diff` timestamp
2545
+ var curr = +new Date();
2546
+ var ms = curr - (prevTime || curr);
2547
+ self.diff = ms;
2548
+ self.prev = prevTime;
2549
+ self.curr = curr;
2550
+ prevTime = curr;
2551
+
2552
+ // add the `color` if not set
2553
+ if (null == self.useColors) self.useColors = exports.useColors();
2554
+ if (null == self.color && self.useColors) self.color = selectColor();
2555
+
2556
+ var args = Array.prototype.slice.call(arguments);
2557
+
2558
+ args[0] = exports.coerce(args[0]);
2559
+
2560
+ if ('string' !== typeof args[0]) {
2561
+ // anything else let's inspect with %o
2562
+ args = ['%o'].concat(args);
2563
+ }
2564
+
2565
+ // apply any `formatters` transformations
2566
+ var index = 0;
2567
+ args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
2568
+ // if we encounter an escaped % then don't increase the array index
2569
+ if (match === '%') return match;
2570
+ index++;
2571
+ var formatter = exports.formatters[format];
2572
+ if ('function' === typeof formatter) {
2573
+ var val = args[index];
2574
+ match = formatter.call(self, val);
2575
+
2576
+ // now we need to remove `args[index]` since it's inlined in the `format`
2577
+ args.splice(index, 1);
2578
+ index--;
2579
+ }
2580
+ return match;
2581
+ });
2582
+
2583
+ if ('function' === typeof exports.formatArgs) {
2584
+ args = exports.formatArgs.apply(self, args);
2585
+ }
2586
+ var logFn = enabled.log || exports.log || console.log.bind(console);
2587
+ logFn.apply(self, args);
2588
+ }
2589
+ enabled.enabled = true;
2590
+
2591
+ var fn = exports.enabled(namespace) ? enabled : disabled;
2592
+
2593
+ fn.namespace = namespace;
2594
+
2595
+ return fn;
2596
+ }
2597
+
2598
+ /**
2599
+ * Enables a debug mode by namespaces. This can include modes
2600
+ * separated by a colon and wildcards.
2601
+ *
2602
+ * @param {String} namespaces
2603
+ * @api public
2604
+ */
2605
+
2606
+ function enable(namespaces) {
2607
+ exports.save(namespaces);
2608
+
2609
+ var split = (namespaces || '').split(/[\s,]+/);
2610
+ var len = split.length;
2611
+
2612
+ for (var i = 0; i < len; i++) {
2613
+ if (!split[i]) continue; // ignore empty strings
2614
+ namespaces = split[i].replace(/\*/g, '.*?');
2615
+ if (namespaces[0] === '-') {
2616
+ exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
2617
+ } else {
2618
+ exports.names.push(new RegExp('^' + namespaces + '$'));
2619
+ }
2620
+ }
2621
+ }
2622
+
2623
+ /**
2624
+ * Disable debug output.
2625
+ *
2626
+ * @api public
2627
+ */
2628
+
2629
+ function disable() {
2630
+ exports.enable('');
2631
+ }
2632
+
2633
+ /**
2634
+ * Returns true if the given mode name is enabled, false otherwise.
2635
+ *
2636
+ * @param {String} name
2637
+ * @return {Boolean}
2638
+ * @api public
2639
+ */
2640
+
2641
+ function enabled(name) {
2642
+ var i, len;
2643
+ for (i = 0, len = exports.skips.length; i < len; i++) {
2644
+ if (exports.skips[i].test(name)) {
2645
+ return false;
2646
+ }
2647
+ }
2648
+ for (i = 0, len = exports.names.length; i < len; i++) {
2649
+ if (exports.names[i].test(name)) {
2650
+ return true;
2651
+ }
2652
+ }
2653
+ return false;
2654
+ }
2655
+
2656
+ /**
2657
+ * Coerce `val`.
2658
+ *
2659
+ * @param {Mixed} val
2660
+ * @return {Mixed}
2661
+ * @api private
2662
+ */
2663
+
2664
+ function coerce(val) {
2665
+ if (val instanceof Error) return val.stack || val.message;
2666
+ return val;
2667
+ }
2668
+
2669
+ },{"ms":16}],16:[function(_dereq_,module,exports){
2670
+ /**
2671
+ * Helpers.
2672
+ */
2673
+
2674
+ var s = 1000;
2675
+ var m = s * 60;
2676
+ var h = m * 60;
2677
+ var d = h * 24;
2678
+ var y = d * 365.25;
2679
+
2680
+ /**
2681
+ * Parse or format the given `val`.
2682
+ *
2683
+ * Options:
2684
+ *
2685
+ * - `long` verbose formatting [false]
2686
+ *
2687
+ * @param {String|Number} val
2688
+ * @param {Object} options
2689
+ * @return {String|Number}
2690
+ * @api public
2691
+ */
2692
+
2693
+ module.exports = function(val, options){
2694
+ options = options || {};
2695
+ if ('string' == typeof val) return parse(val);
2696
+ return options.long
2697
+ ? long(val)
2698
+ : short(val);
2699
+ };
2700
+
2701
+ /**
2702
+ * Parse the given `str` and return milliseconds.
2703
+ *
2704
+ * @param {String} str
2705
+ * @return {Number}
2706
+ * @api private
2707
+ */
2708
+
2709
+ function parse(str) {
2710
+ var match = /^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(str);
2711
+ if (!match) return;
2712
+ var n = parseFloat(match[1]);
2713
+ var type = (match[2] || 'ms').toLowerCase();
2714
+ switch (type) {
2715
+ case 'years':
2716
+ case 'year':
2717
+ case 'y':
2718
+ return n * y;
2719
+ case 'days':
2720
+ case 'day':
2721
+ case 'd':
2722
+ return n * d;
2723
+ case 'hours':
2724
+ case 'hour':
2725
+ case 'h':
2726
+ return n * h;
2727
+ case 'minutes':
2728
+ case 'minute':
2729
+ case 'm':
2730
+ return n * m;
2731
+ case 'seconds':
2732
+ case 'second':
2733
+ case 's':
2734
+ return n * s;
2735
+ case 'ms':
2736
+ return n;
2737
+ }
2738
+ }
2739
+
2740
+ /**
2741
+ * Short format for `ms`.
2742
+ *
2743
+ * @param {Number} ms
2744
+ * @return {String}
2745
+ * @api private
2746
+ */
2747
+
2748
+ function short(ms) {
2749
+ if (ms >= d) return Math.round(ms / d) + 'd';
2750
+ if (ms >= h) return Math.round(ms / h) + 'h';
2751
+ if (ms >= m) return Math.round(ms / m) + 'm';
2752
+ if (ms >= s) return Math.round(ms / s) + 's';
2753
+ return ms + 'ms';
2754
+ }
2755
+
2756
+ /**
2757
+ * Long format for `ms`.
2758
+ *
2759
+ * @param {Number} ms
2760
+ * @return {String}
2761
+ * @api private
2762
+ */
2763
+
2764
+ function long(ms) {
2765
+ return plural(ms, d, 'day')
2766
+ || plural(ms, h, 'hour')
2767
+ || plural(ms, m, 'minute')
2768
+ || plural(ms, s, 'second')
2769
+ || ms + ' ms';
2770
+ }
2771
+
2772
+ /**
2773
+ * Pluralization helper.
2774
+ */
2775
+
2776
+ function plural(ms, n, name) {
2777
+ if (ms < n) return;
2778
+ if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name;
2779
+ return Math.ceil(ms / n) + ' ' + name + 's';
2780
+ }
2781
+
2782
+ },{}],17:[function(_dereq_,module,exports){
2783
+ (function (global){
2784
+ /**
2785
+ * Module dependencies.
2786
+ */
2787
+
2788
+ var keys = _dereq_('./keys');
2789
+ var hasBinary = _dereq_('has-binary');
2790
+ var sliceBuffer = _dereq_('arraybuffer.slice');
2791
+ var base64encoder = _dereq_('base64-arraybuffer');
2792
+ var after = _dereq_('after');
2793
+ var utf8 = _dereq_('utf8');
2794
+
2795
+ /**
2796
+ * Check if we are running an android browser. That requires us to use
2797
+ * ArrayBuffer with polling transports...
2798
+ *
2799
+ * http://ghinda.net/jpeg-blob-ajax-android/
2800
+ */
2801
+
2802
+ var isAndroid = navigator.userAgent.match(/Android/i);
2803
+
2804
+ /**
2805
+ * Check if we are running in PhantomJS.
2806
+ * Uploading a Blob with PhantomJS does not work correctly, as reported here:
2807
+ * https://github.com/ariya/phantomjs/issues/11395
2808
+ * @type boolean
2809
+ */
2810
+ var isPhantomJS = /PhantomJS/i.test(navigator.userAgent);
2811
+
2812
+ /**
2813
+ * When true, avoids using Blobs to encode payloads.
2814
+ * @type boolean
2815
+ */
2816
+ var dontSendBlobs = isAndroid || isPhantomJS;
2817
+
2818
+ /**
2819
+ * Current protocol version.
2820
+ */
2821
+
2822
+ exports.protocol = 3;
2823
+
2824
+ /**
2825
+ * Packet types.
2826
+ */
2827
+
2828
+ var packets = exports.packets = {
2829
+ open: 0 // non-ws
2830
+ , close: 1 // non-ws
2831
+ , ping: 2
2832
+ , pong: 3
2833
+ , message: 4
2834
+ , upgrade: 5
2835
+ , noop: 6
2836
+ };
2837
+
2838
+ var packetslist = keys(packets);
2839
+
2840
+ /**
2841
+ * Premade error packet.
2842
+ */
2843
+
2844
+ var err = { type: 'error', data: 'parser error' };
2845
+
2846
+ /**
2847
+ * Create a blob api even for blob builder when vendor prefixes exist
2848
+ */
2849
+
2850
+ var Blob = _dereq_('blob');
2851
+
2852
+ /**
2853
+ * Encodes a packet.
2854
+ *
2855
+ * <packet type id> [ <data> ]
2856
+ *
2857
+ * Example:
2858
+ *
2859
+ * 5hello world
2860
+ * 3
2861
+ * 4
2862
+ *
2863
+ * Binary is encoded in an identical principle
2864
+ *
2865
+ * @api private
2866
+ */
2867
+
2868
+ exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) {
2869
+ if ('function' == typeof supportsBinary) {
2870
+ callback = supportsBinary;
2871
+ supportsBinary = false;
2872
+ }
2873
+
2874
+ if ('function' == typeof utf8encode) {
2875
+ callback = utf8encode;
2876
+ utf8encode = null;
2877
+ }
2878
+
2879
+ var data = (packet.data === undefined)
2880
+ ? undefined
2881
+ : packet.data.buffer || packet.data;
2882
+
2883
+ if (global.ArrayBuffer && data instanceof ArrayBuffer) {
2884
+ return encodeArrayBuffer(packet, supportsBinary, callback);
2885
+ } else if (Blob && data instanceof global.Blob) {
2886
+ return encodeBlob(packet, supportsBinary, callback);
2887
+ }
2888
+
2889
+ // might be an object with { base64: true, data: dataAsBase64String }
2890
+ if (data && data.base64) {
2891
+ return encodeBase64Object(packet, callback);
2892
+ }
2893
+
2894
+ // Sending data as a utf-8 string
2895
+ var encoded = packets[packet.type];
2896
+
2897
+ // data fragment is optional
2898
+ if (undefined !== packet.data) {
2899
+ encoded += utf8encode ? utf8.encode(String(packet.data)) : String(packet.data);
2900
+ }
2901
+
2902
+ return callback('' + encoded);
2903
+
2904
+ };
2905
+
2906
+ function encodeBase64Object(packet, callback) {
2907
+ // packet data is an object { base64: true, data: dataAsBase64String }
2908
+ var message = 'b' + exports.packets[packet.type] + packet.data.data;
2909
+ return callback(message);
2910
+ }
2911
+
2912
+ /**
2913
+ * Encode packet helpers for binary types
2914
+ */
2915
+
2916
+ function encodeArrayBuffer(packet, supportsBinary, callback) {
2917
+ if (!supportsBinary) {
2918
+ return exports.encodeBase64Packet(packet, callback);
2919
+ }
2920
+
2921
+ var data = packet.data;
2922
+ var contentArray = new Uint8Array(data);
2923
+ var resultBuffer = new Uint8Array(1 + data.byteLength);
2924
+
2925
+ resultBuffer[0] = packets[packet.type];
2926
+ for (var i = 0; i < contentArray.length; i++) {
2927
+ resultBuffer[i+1] = contentArray[i];
2928
+ }
2929
+
2930
+ return callback(resultBuffer.buffer);
2931
+ }
2932
+
2933
+ function encodeBlobAsArrayBuffer(packet, supportsBinary, callback) {
2934
+ if (!supportsBinary) {
2935
+ return exports.encodeBase64Packet(packet, callback);
2936
+ }
2937
+
2938
+ var fr = new FileReader();
2939
+ fr.onload = function() {
2940
+ packet.data = fr.result;
2941
+ exports.encodePacket(packet, supportsBinary, true, callback);
2942
+ };
2943
+ return fr.readAsArrayBuffer(packet.data);
2944
+ }
2945
+
2946
+ function encodeBlob(packet, supportsBinary, callback) {
2947
+ if (!supportsBinary) {
2948
+ return exports.encodeBase64Packet(packet, callback);
2949
+ }
2950
+
2951
+ if (dontSendBlobs) {
2952
+ return encodeBlobAsArrayBuffer(packet, supportsBinary, callback);
2953
+ }
2954
+
2955
+ var length = new Uint8Array(1);
2956
+ length[0] = packets[packet.type];
2957
+ var blob = new Blob([length.buffer, packet.data]);
2958
+
2959
+ return callback(blob);
2960
+ }
2961
+
2962
+ /**
2963
+ * Encodes a packet with binary data in a base64 string
2964
+ *
2965
+ * @param {Object} packet, has `type` and `data`
2966
+ * @return {String} base64 encoded message
2967
+ */
2968
+
2969
+ exports.encodeBase64Packet = function(packet, callback) {
2970
+ var message = 'b' + exports.packets[packet.type];
2971
+ if (Blob && packet.data instanceof Blob) {
2972
+ var fr = new FileReader();
2973
+ fr.onload = function() {
2974
+ var b64 = fr.result.split(',')[1];
2975
+ callback(message + b64);
2976
+ };
2977
+ return fr.readAsDataURL(packet.data);
2978
+ }
2979
+
2980
+ var b64data;
2981
+ try {
2982
+ b64data = String.fromCharCode.apply(null, new Uint8Array(packet.data));
2983
+ } catch (e) {
2984
+ // iPhone Safari doesn't let you apply with typed arrays
2985
+ var typed = new Uint8Array(packet.data);
2986
+ var basic = new Array(typed.length);
2987
+ for (var i = 0; i < typed.length; i++) {
2988
+ basic[i] = typed[i];
2989
+ }
2990
+ b64data = String.fromCharCode.apply(null, basic);
2991
+ }
2992
+ message += global.btoa(b64data);
2993
+ return callback(message);
2994
+ };
2995
+
2996
+ /**
2997
+ * Decodes a packet. Changes format to Blob if requested.
2998
+ *
2999
+ * @return {Object} with `type` and `data` (if any)
3000
+ * @api private
3001
+ */
3002
+
3003
+ exports.decodePacket = function (data, binaryType, utf8decode) {
3004
+ // String data
3005
+ if (typeof data == 'string' || data === undefined) {
3006
+ if (data.charAt(0) == 'b') {
3007
+ return exports.decodeBase64Packet(data.substr(1), binaryType);
3008
+ }
3009
+
3010
+ if (utf8decode) {
3011
+ try {
3012
+ data = utf8.decode(data);
3013
+ } catch (e) {
3014
+ return err;
3015
+ }
3016
+ }
3017
+ var type = data.charAt(0);
3018
+
3019
+ if (Number(type) != type || !packetslist[type]) {
3020
+ return err;
3021
+ }
3022
+
3023
+ if (data.length > 1) {
3024
+ return { type: packetslist[type], data: data.substring(1) };
3025
+ } else {
3026
+ return { type: packetslist[type] };
3027
+ }
3028
+ }
3029
+
3030
+ var asArray = new Uint8Array(data);
3031
+ var type = asArray[0];
3032
+ var rest = sliceBuffer(data, 1);
3033
+ if (Blob && binaryType === 'blob') {
3034
+ rest = new Blob([rest]);
3035
+ }
3036
+ return { type: packetslist[type], data: rest };
3037
+ };
3038
+
3039
+ /**
3040
+ * Decodes a packet encoded in a base64 string
3041
+ *
3042
+ * @param {String} base64 encoded message
3043
+ * @return {Object} with `type` and `data` (if any)
3044
+ */
3045
+
3046
+ exports.decodeBase64Packet = function(msg, binaryType) {
3047
+ var type = packetslist[msg.charAt(0)];
3048
+ if (!global.ArrayBuffer) {
3049
+ return { type: type, data: { base64: true, data: msg.substr(1) } };
3050
+ }
3051
+
3052
+ var data = base64encoder.decode(msg.substr(1));
3053
+
3054
+ if (binaryType === 'blob' && Blob) {
3055
+ data = new Blob([data]);
3056
+ }
3057
+
3058
+ return { type: type, data: data };
3059
+ };
3060
+
3061
+ /**
3062
+ * Encodes multiple messages (payload).
3063
+ *
3064
+ * <length>:data
3065
+ *
3066
+ * Example:
3067
+ *
3068
+ * 11:hello world2:hi
3069
+ *
3070
+ * If any contents are binary, they will be encoded as base64 strings. Base64
3071
+ * encoded strings are marked with a b before the length specifier
3072
+ *
3073
+ * @param {Array} packets
3074
+ * @api private
3075
+ */
3076
+
3077
+ exports.encodePayload = function (packets, supportsBinary, callback) {
3078
+ if (typeof supportsBinary == 'function') {
3079
+ callback = supportsBinary;
3080
+ supportsBinary = null;
3081
+ }
3082
+
3083
+ var isBinary = hasBinary(packets);
3084
+
3085
+ if (supportsBinary && isBinary) {
3086
+ if (Blob && !dontSendBlobs) {
3087
+ return exports.encodePayloadAsBlob(packets, callback);
3088
+ }
3089
+
3090
+ return exports.encodePayloadAsArrayBuffer(packets, callback);
3091
+ }
3092
+
3093
+ if (!packets.length) {
3094
+ return callback('0:');
3095
+ }
3096
+
3097
+ function setLengthHeader(message) {
3098
+ return message.length + ':' + message;
3099
+ }
3100
+
3101
+ function encodeOne(packet, doneCallback) {
3102
+ exports.encodePacket(packet, !isBinary ? false : supportsBinary, true, function(message) {
3103
+ doneCallback(null, setLengthHeader(message));
3104
+ });
3105
+ }
3106
+
3107
+ map(packets, encodeOne, function(err, results) {
3108
+ return callback(results.join(''));
3109
+ });
3110
+ };
3111
+
3112
+ /**
3113
+ * Async array map using after
3114
+ */
3115
+
3116
+ function map(ary, each, done) {
3117
+ var result = new Array(ary.length);
3118
+ var next = after(ary.length, done);
3119
+
3120
+ var eachWithIndex = function(i, el, cb) {
3121
+ each(el, function(error, msg) {
3122
+ result[i] = msg;
3123
+ cb(error, result);
3124
+ });
3125
+ };
3126
+
3127
+ for (var i = 0; i < ary.length; i++) {
3128
+ eachWithIndex(i, ary[i], next);
3129
+ }
3130
+ }
3131
+
3132
+ /*
3133
+ * Decodes data when a payload is maybe expected. Possible binary contents are
3134
+ * decoded from their base64 representation
3135
+ *
3136
+ * @param {String} data, callback method
3137
+ * @api public
3138
+ */
3139
+
3140
+ exports.decodePayload = function (data, binaryType, callback) {
3141
+ if (typeof data != 'string') {
3142
+ return exports.decodePayloadAsBinary(data, binaryType, callback);
3143
+ }
3144
+
3145
+ if (typeof binaryType === 'function') {
3146
+ callback = binaryType;
3147
+ binaryType = null;
3148
+ }
3149
+
3150
+ var packet;
3151
+ if (data == '') {
3152
+ // parser error - ignoring payload
3153
+ return callback(err, 0, 1);
3154
+ }
3155
+
3156
+ var length = ''
3157
+ , n, msg;
3158
+
3159
+ for (var i = 0, l = data.length; i < l; i++) {
3160
+ var chr = data.charAt(i);
3161
+
3162
+ if (':' != chr) {
3163
+ length += chr;
3164
+ } else {
3165
+ if ('' == length || (length != (n = Number(length)))) {
3166
+ // parser error - ignoring payload
3167
+ return callback(err, 0, 1);
3168
+ }
3169
+
3170
+ msg = data.substr(i + 1, n);
3171
+
3172
+ if (length != msg.length) {
3173
+ // parser error - ignoring payload
3174
+ return callback(err, 0, 1);
3175
+ }
3176
+
3177
+ if (msg.length) {
3178
+ packet = exports.decodePacket(msg, binaryType, true);
3179
+
3180
+ if (err.type == packet.type && err.data == packet.data) {
3181
+ // parser error in individual packet - ignoring payload
3182
+ return callback(err, 0, 1);
3183
+ }
3184
+
3185
+ var ret = callback(packet, i + n, l);
3186
+ if (false === ret) return;
3187
+ }
3188
+
3189
+ // advance cursor
3190
+ i += n;
3191
+ length = '';
3192
+ }
3193
+ }
3194
+
3195
+ if (length != '') {
3196
+ // parser error - ignoring payload
3197
+ return callback(err, 0, 1);
3198
+ }
3199
+
3200
+ };
3201
+
3202
+ /**
3203
+ * Encodes multiple messages (payload) as binary.
3204
+ *
3205
+ * <1 = binary, 0 = string><number from 0-9><number from 0-9>[...]<number
3206
+ * 255><data>
3207
+ *
3208
+ * Example:
3209
+ * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers
3210
+ *
3211
+ * @param {Array} packets
3212
+ * @return {ArrayBuffer} encoded payload
3213
+ * @api private
3214
+ */
3215
+
3216
+ exports.encodePayloadAsArrayBuffer = function(packets, callback) {
3217
+ if (!packets.length) {
3218
+ return callback(new ArrayBuffer(0));
3219
+ }
3220
+
3221
+ function encodeOne(packet, doneCallback) {
3222
+ exports.encodePacket(packet, true, true, function(data) {
3223
+ return doneCallback(null, data);
3224
+ });
3225
+ }
3226
+
3227
+ map(packets, encodeOne, function(err, encodedPackets) {
3228
+ var totalLength = encodedPackets.reduce(function(acc, p) {
3229
+ var len;
3230
+ if (typeof p === 'string'){
3231
+ len = p.length;
3232
+ } else {
3233
+ len = p.byteLength;
3234
+ }
3235
+ return acc + len.toString().length + len + 2; // string/binary identifier + separator = 2
3236
+ }, 0);
3237
+
3238
+ var resultArray = new Uint8Array(totalLength);
3239
+
3240
+ var bufferIndex = 0;
3241
+ encodedPackets.forEach(function(p) {
3242
+ var isString = typeof p === 'string';
3243
+ var ab = p;
3244
+ if (isString) {
3245
+ var view = new Uint8Array(p.length);
3246
+ for (var i = 0; i < p.length; i++) {
3247
+ view[i] = p.charCodeAt(i);
3248
+ }
3249
+ ab = view.buffer;
3250
+ }
3251
+
3252
+ if (isString) { // not true binary
3253
+ resultArray[bufferIndex++] = 0;
3254
+ } else { // true binary
3255
+ resultArray[bufferIndex++] = 1;
3256
+ }
3257
+
3258
+ var lenStr = ab.byteLength.toString();
3259
+ for (var i = 0; i < lenStr.length; i++) {
3260
+ resultArray[bufferIndex++] = parseInt(lenStr[i]);
3261
+ }
3262
+ resultArray[bufferIndex++] = 255;
3263
+
3264
+ var view = new Uint8Array(ab);
3265
+ for (var i = 0; i < view.length; i++) {
3266
+ resultArray[bufferIndex++] = view[i];
3267
+ }
3268
+ });
3269
+
3270
+ return callback(resultArray.buffer);
3271
+ });
3272
+ };
3273
+
3274
+ /**
3275
+ * Encode as Blob
3276
+ */
3277
+
3278
+ exports.encodePayloadAsBlob = function(packets, callback) {
3279
+ function encodeOne(packet, doneCallback) {
3280
+ exports.encodePacket(packet, true, true, function(encoded) {
3281
+ var binaryIdentifier = new Uint8Array(1);
3282
+ binaryIdentifier[0] = 1;
3283
+ if (typeof encoded === 'string') {
3284
+ var view = new Uint8Array(encoded.length);
3285
+ for (var i = 0; i < encoded.length; i++) {
3286
+ view[i] = encoded.charCodeAt(i);
3287
+ }
3288
+ encoded = view.buffer;
3289
+ binaryIdentifier[0] = 0;
3290
+ }
3291
+
3292
+ var len = (encoded instanceof ArrayBuffer)
3293
+ ? encoded.byteLength
3294
+ : encoded.size;
3295
+
3296
+ var lenStr = len.toString();
3297
+ var lengthAry = new Uint8Array(lenStr.length + 1);
3298
+ for (var i = 0; i < lenStr.length; i++) {
3299
+ lengthAry[i] = parseInt(lenStr[i]);
3300
+ }
3301
+ lengthAry[lenStr.length] = 255;
3302
+
3303
+ if (Blob) {
3304
+ var blob = new Blob([binaryIdentifier.buffer, lengthAry.buffer, encoded]);
3305
+ doneCallback(null, blob);
3306
+ }
3307
+ });
3308
+ }
3309
+
3310
+ map(packets, encodeOne, function(err, results) {
3311
+ return callback(new Blob(results));
3312
+ });
3313
+ };
3314
+
3315
+ /*
3316
+ * Decodes data when a payload is maybe expected. Strings are decoded by
3317
+ * interpreting each byte as a key code for entries marked to start with 0. See
3318
+ * description of encodePayloadAsBinary
3319
+ *
3320
+ * @param {ArrayBuffer} data, callback method
3321
+ * @api public
3322
+ */
3323
+
3324
+ exports.decodePayloadAsBinary = function (data, binaryType, callback) {
3325
+ if (typeof binaryType === 'function') {
3326
+ callback = binaryType;
3327
+ binaryType = null;
3328
+ }
3329
+
3330
+ var bufferTail = data;
3331
+ var buffers = [];
3332
+
3333
+ var numberTooLong = false;
3334
+ while (bufferTail.byteLength > 0) {
3335
+ var tailArray = new Uint8Array(bufferTail);
3336
+ var isString = tailArray[0] === 0;
3337
+ var msgLength = '';
3338
+
3339
+ for (var i = 1; ; i++) {
3340
+ if (tailArray[i] == 255) break;
3341
+
3342
+ if (msgLength.length > 310) {
3343
+ numberTooLong = true;
3344
+ break;
3345
+ }
3346
+
3347
+ msgLength += tailArray[i];
3348
+ }
3349
+
3350
+ if(numberTooLong) return callback(err, 0, 1);
3351
+
3352
+ bufferTail = sliceBuffer(bufferTail, 2 + msgLength.length);
3353
+ msgLength = parseInt(msgLength);
3354
+
3355
+ var msg = sliceBuffer(bufferTail, 0, msgLength);
3356
+ if (isString) {
3357
+ try {
3358
+ msg = String.fromCharCode.apply(null, new Uint8Array(msg));
3359
+ } catch (e) {
3360
+ // iPhone Safari doesn't let you apply to typed arrays
3361
+ var typed = new Uint8Array(msg);
3362
+ msg = '';
3363
+ for (var i = 0; i < typed.length; i++) {
3364
+ msg += String.fromCharCode(typed[i]);
3365
+ }
3366
+ }
3367
+ }
3368
+
3369
+ buffers.push(msg);
3370
+ bufferTail = sliceBuffer(bufferTail, msgLength);
3371
+ }
3372
+
3373
+ var total = buffers.length;
3374
+ buffers.forEach(function(buffer, i) {
3375
+ callback(exports.decodePacket(buffer, binaryType, true), i, total);
3376
+ });
3377
+ };
3378
+
3379
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3380
+ },{"./keys":18,"after":19,"arraybuffer.slice":20,"base64-arraybuffer":21,"blob":11,"has-binary":22,"utf8":24}],18:[function(_dereq_,module,exports){
3381
+
3382
+ /**
3383
+ * Gets the keys for an object.
3384
+ *
3385
+ * @return {Array} keys
3386
+ * @api private
3387
+ */
3388
+
3389
+ module.exports = Object.keys || function keys (obj){
3390
+ var arr = [];
3391
+ var has = Object.prototype.hasOwnProperty;
3392
+
3393
+ for (var i in obj) {
3394
+ if (has.call(obj, i)) {
3395
+ arr.push(i);
3396
+ }
3397
+ }
3398
+ return arr;
3399
+ };
3400
+
3401
+ },{}],19:[function(_dereq_,module,exports){
3402
+ module.exports = after
3403
+
3404
+ function after(count, callback, err_cb) {
3405
+ var bail = false
3406
+ err_cb = err_cb || noop
3407
+ proxy.count = count
3408
+
3409
+ return (count === 0) ? callback() : proxy
3410
+
3411
+ function proxy(err, result) {
3412
+ if (proxy.count <= 0) {
3413
+ throw new Error('after called too many times')
3414
+ }
3415
+ --proxy.count
3416
+
3417
+ // after first error, rest are passed to err_cb
3418
+ if (err) {
3419
+ bail = true
3420
+ callback(err)
3421
+ // future error callbacks will go to error handler
3422
+ callback = err_cb
3423
+ } else if (proxy.count === 0 && !bail) {
3424
+ callback(null, result)
3425
+ }
3426
+ }
3427
+ }
3428
+
3429
+ function noop() {}
3430
+
3431
+ },{}],20:[function(_dereq_,module,exports){
3432
+ /**
3433
+ * An abstraction for slicing an arraybuffer even when
3434
+ * ArrayBuffer.prototype.slice is not supported
3435
+ *
3436
+ * @api public
3437
+ */
3438
+
3439
+ module.exports = function(arraybuffer, start, end) {
3440
+ var bytes = arraybuffer.byteLength;
3441
+ start = start || 0;
3442
+ end = end || bytes;
3443
+
3444
+ if (arraybuffer.slice) { return arraybuffer.slice(start, end); }
3445
+
3446
+ if (start < 0) { start += bytes; }
3447
+ if (end < 0) { end += bytes; }
3448
+ if (end > bytes) { end = bytes; }
3449
+
3450
+ if (start >= bytes || start >= end || bytes === 0) {
3451
+ return new ArrayBuffer(0);
3452
+ }
3453
+
3454
+ var abv = new Uint8Array(arraybuffer);
3455
+ var result = new Uint8Array(end - start);
3456
+ for (var i = start, ii = 0; i < end; i++, ii++) {
3457
+ result[ii] = abv[i];
3458
+ }
3459
+ return result.buffer;
3460
+ };
3461
+
3462
+ },{}],21:[function(_dereq_,module,exports){
3463
+ /*
3464
+ * base64-arraybuffer
3465
+ * https://github.com/niklasvh/base64-arraybuffer
3466
+ *
3467
+ * Copyright (c) 2012 Niklas von Hertzen
3468
+ * Licensed under the MIT license.
3469
+ */
3470
+ (function(chars){
3471
+ "use strict";
3472
+
3473
+ exports.encode = function(arraybuffer) {
3474
+ var bytes = new Uint8Array(arraybuffer),
3475
+ i, len = bytes.length, base64 = "";
3476
+
3477
+ for (i = 0; i < len; i+=3) {
3478
+ base64 += chars[bytes[i] >> 2];
3479
+ base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];
3480
+ base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];
3481
+ base64 += chars[bytes[i + 2] & 63];
3482
+ }
3483
+
3484
+ if ((len % 3) === 2) {
3485
+ base64 = base64.substring(0, base64.length - 1) + "=";
3486
+ } else if (len % 3 === 1) {
3487
+ base64 = base64.substring(0, base64.length - 2) + "==";
3488
+ }
3489
+
3490
+ return base64;
3491
+ };
3492
+
3493
+ exports.decode = function(base64) {
3494
+ var bufferLength = base64.length * 0.75,
3495
+ len = base64.length, i, p = 0,
3496
+ encoded1, encoded2, encoded3, encoded4;
3497
+
3498
+ if (base64[base64.length - 1] === "=") {
3499
+ bufferLength--;
3500
+ if (base64[base64.length - 2] === "=") {
3501
+ bufferLength--;
3502
+ }
3503
+ }
3504
+
3505
+ var arraybuffer = new ArrayBuffer(bufferLength),
3506
+ bytes = new Uint8Array(arraybuffer);
3507
+
3508
+ for (i = 0; i < len; i+=4) {
3509
+ encoded1 = chars.indexOf(base64[i]);
3510
+ encoded2 = chars.indexOf(base64[i+1]);
3511
+ encoded3 = chars.indexOf(base64[i+2]);
3512
+ encoded4 = chars.indexOf(base64[i+3]);
3513
+
3514
+ bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
3515
+ bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
3516
+ bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
3517
+ }
3518
+
3519
+ return arraybuffer;
3520
+ };
3521
+ })("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
3522
+
3523
+ },{}],22:[function(_dereq_,module,exports){
3524
+ (function (global){
3525
+
3526
+ /*
3527
+ * Module requirements.
3528
+ */
3529
+
3530
+ var isArray = _dereq_('isarray');
3531
+
3532
+ /**
3533
+ * Module exports.
3534
+ */
3535
+
3536
+ module.exports = hasBinary;
3537
+
3538
+ /**
3539
+ * Checks for binary data.
3540
+ *
3541
+ * Right now only Buffer and ArrayBuffer are supported..
3542
+ *
3543
+ * @param {Object} anything
3544
+ * @api public
3545
+ */
3546
+
3547
+ function hasBinary(data) {
3548
+
3549
+ function _hasBinary(obj) {
3550
+ if (!obj) return false;
3551
+
3552
+ if ( (global.Buffer && global.Buffer.isBuffer(obj)) ||
3553
+ (global.ArrayBuffer && obj instanceof ArrayBuffer) ||
3554
+ (global.Blob && obj instanceof Blob) ||
3555
+ (global.File && obj instanceof File)
3556
+ ) {
3557
+ return true;
3558
+ }
3559
+
3560
+ if (isArray(obj)) {
3561
+ for (var i = 0; i < obj.length; i++) {
3562
+ if (_hasBinary(obj[i])) {
3563
+ return true;
3564
+ }
3565
+ }
3566
+ } else if (obj && 'object' == typeof obj) {
3567
+ if (obj.toJSON) {
3568
+ obj = obj.toJSON();
3569
+ }
3570
+
3571
+ for (var key in obj) {
3572
+ if (obj.hasOwnProperty(key) && _hasBinary(obj[key])) {
3573
+ return true;
3574
+ }
3575
+ }
3576
+ }
3577
+
3578
+ return false;
3579
+ }
3580
+
3581
+ return _hasBinary(data);
3582
+ }
3583
+
3584
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3585
+ },{"isarray":23}],23:[function(_dereq_,module,exports){
3586
+ module.exports = Array.isArray || function (arr) {
3587
+ return Object.prototype.toString.call(arr) == '[object Array]';
3588
+ };
3589
+
3590
+ },{}],24:[function(_dereq_,module,exports){
3591
+ (function (global){
3592
+ /*! http://mths.be/utf8js v2.0.0 by @mathias */
3593
+ ;(function(root) {
3594
+
3595
+ // Detect free variables `exports`
3596
+ var freeExports = typeof exports == 'object' && exports;
3597
+
3598
+ // Detect free variable `module`
3599
+ var freeModule = typeof module == 'object' && module &&
3600
+ module.exports == freeExports && module;
3601
+
3602
+ // Detect free variable `global`, from Node.js or Browserified code,
3603
+ // and use it as `root`
3604
+ var freeGlobal = typeof global == 'object' && global;
3605
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
3606
+ root = freeGlobal;
3607
+ }
3608
+
3609
+ /*--------------------------------------------------------------------------*/
3610
+
3611
+ var stringFromCharCode = String.fromCharCode;
3612
+
3613
+ // Taken from http://mths.be/punycode
3614
+ function ucs2decode(string) {
3615
+ var output = [];
3616
+ var counter = 0;
3617
+ var length = string.length;
3618
+ var value;
3619
+ var extra;
3620
+ while (counter < length) {
3621
+ value = string.charCodeAt(counter++);
3622
+ if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
3623
+ // high surrogate, and there is a next character
3624
+ extra = string.charCodeAt(counter++);
3625
+ if ((extra & 0xFC00) == 0xDC00) { // low surrogate
3626
+ output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
3627
+ } else {
3628
+ // unmatched surrogate; only append this code unit, in case the next
3629
+ // code unit is the high surrogate of a surrogate pair
3630
+ output.push(value);
3631
+ counter--;
3632
+ }
3633
+ } else {
3634
+ output.push(value);
3635
+ }
3636
+ }
3637
+ return output;
3638
+ }
3639
+
3640
+ // Taken from http://mths.be/punycode
3641
+ function ucs2encode(array) {
3642
+ var length = array.length;
3643
+ var index = -1;
3644
+ var value;
3645
+ var output = '';
3646
+ while (++index < length) {
3647
+ value = array[index];
3648
+ if (value > 0xFFFF) {
3649
+ value -= 0x10000;
3650
+ output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
3651
+ value = 0xDC00 | value & 0x3FF;
3652
+ }
3653
+ output += stringFromCharCode(value);
3654
+ }
3655
+ return output;
3656
+ }
3657
+
3658
+ /*--------------------------------------------------------------------------*/
3659
+
3660
+ function createByte(codePoint, shift) {
3661
+ return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);
3662
+ }
3663
+
3664
+ function encodeCodePoint(codePoint) {
3665
+ if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence
3666
+ return stringFromCharCode(codePoint);
3667
+ }
3668
+ var symbol = '';
3669
+ if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence
3670
+ symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);
3671
+ }
3672
+ else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence
3673
+ symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);
3674
+ symbol += createByte(codePoint, 6);
3675
+ }
3676
+ else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence
3677
+ symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);
3678
+ symbol += createByte(codePoint, 12);
3679
+ symbol += createByte(codePoint, 6);
3680
+ }
3681
+ symbol += stringFromCharCode((codePoint & 0x3F) | 0x80);
3682
+ return symbol;
3683
+ }
3684
+
3685
+ function utf8encode(string) {
3686
+ var codePoints = ucs2decode(string);
3687
+
3688
+ // console.log(JSON.stringify(codePoints.map(function(x) {
3689
+ // return 'U+' + x.toString(16).toUpperCase();
3690
+ // })));
3691
+
3692
+ var length = codePoints.length;
3693
+ var index = -1;
3694
+ var codePoint;
3695
+ var byteString = '';
3696
+ while (++index < length) {
3697
+ codePoint = codePoints[index];
3698
+ byteString += encodeCodePoint(codePoint);
3699
+ }
3700
+ return byteString;
3701
+ }
3702
+
3703
+ /*--------------------------------------------------------------------------*/
3704
+
3705
+ function readContinuationByte() {
3706
+ if (byteIndex >= byteCount) {
3707
+ throw Error('Invalid byte index');
3708
+ }
3709
+
3710
+ var continuationByte = byteArray[byteIndex] & 0xFF;
3711
+ byteIndex++;
3712
+
3713
+ if ((continuationByte & 0xC0) == 0x80) {
3714
+ return continuationByte & 0x3F;
3715
+ }
3716
+
3717
+ // If we end up here, it’s not a continuation byte
3718
+ throw Error('Invalid continuation byte');
3719
+ }
3720
+
3721
+ function decodeSymbol() {
3722
+ var byte1;
3723
+ var byte2;
3724
+ var byte3;
3725
+ var byte4;
3726
+ var codePoint;
3727
+
3728
+ if (byteIndex > byteCount) {
3729
+ throw Error('Invalid byte index');
3730
+ }
3731
+
3732
+ if (byteIndex == byteCount) {
3733
+ return false;
3734
+ }
3735
+
3736
+ // Read first byte
3737
+ byte1 = byteArray[byteIndex] & 0xFF;
3738
+ byteIndex++;
3739
+
3740
+ // 1-byte sequence (no continuation bytes)
3741
+ if ((byte1 & 0x80) == 0) {
3742
+ return byte1;
3743
+ }
3744
+
3745
+ // 2-byte sequence
3746
+ if ((byte1 & 0xE0) == 0xC0) {
3747
+ var byte2 = readContinuationByte();
3748
+ codePoint = ((byte1 & 0x1F) << 6) | byte2;
3749
+ if (codePoint >= 0x80) {
3750
+ return codePoint;
3751
+ } else {
3752
+ throw Error('Invalid continuation byte');
3753
+ }
3754
+ }
3755
+
3756
+ // 3-byte sequence (may include unpaired surrogates)
3757
+ if ((byte1 & 0xF0) == 0xE0) {
3758
+ byte2 = readContinuationByte();
3759
+ byte3 = readContinuationByte();
3760
+ codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;
3761
+ if (codePoint >= 0x0800) {
3762
+ return codePoint;
3763
+ } else {
3764
+ throw Error('Invalid continuation byte');
3765
+ }
3766
+ }
3767
+
3768
+ // 4-byte sequence
3769
+ if ((byte1 & 0xF8) == 0xF0) {
3770
+ byte2 = readContinuationByte();
3771
+ byte3 = readContinuationByte();
3772
+ byte4 = readContinuationByte();
3773
+ codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) |
3774
+ (byte3 << 0x06) | byte4;
3775
+ if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {
3776
+ return codePoint;
3777
+ }
3778
+ }
3779
+
3780
+ throw Error('Invalid UTF-8 detected');
3781
+ }
3782
+
3783
+ var byteArray;
3784
+ var byteCount;
3785
+ var byteIndex;
3786
+ function utf8decode(byteString) {
3787
+ byteArray = ucs2decode(byteString);
3788
+ byteCount = byteArray.length;
3789
+ byteIndex = 0;
3790
+ var codePoints = [];
3791
+ var tmp;
3792
+ while ((tmp = decodeSymbol()) !== false) {
3793
+ codePoints.push(tmp);
3794
+ }
3795
+ return ucs2encode(codePoints);
3796
+ }
3797
+
3798
+ /*--------------------------------------------------------------------------*/
3799
+
3800
+ var utf8 = {
3801
+ 'version': '2.0.0',
3802
+ 'encode': utf8encode,
3803
+ 'decode': utf8decode
3804
+ };
3805
+
3806
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
3807
+ // like the following:
3808
+ if (
3809
+ typeof define == 'function' &&
3810
+ typeof define.amd == 'object' &&
3811
+ define.amd
3812
+ ) {
3813
+ define(function() {
3814
+ return utf8;
3815
+ });
3816
+ } else if (freeExports && !freeExports.nodeType) {
3817
+ if (freeModule) { // in Node.js or RingoJS v0.8.0+
3818
+ freeModule.exports = utf8;
3819
+ } else { // in Narwhal or RingoJS v0.7.0-
3820
+ var object = {};
3821
+ var hasOwnProperty = object.hasOwnProperty;
3822
+ for (var key in utf8) {
3823
+ hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);
3824
+ }
3825
+ }
3826
+ } else { // in Rhino or a web browser
3827
+ root.utf8 = utf8;
3828
+ }
3829
+
3830
+ }(this));
3831
+
3832
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3833
+ },{}],25:[function(_dereq_,module,exports){
3834
+
3835
+ /**
3836
+ * Module dependencies.
3837
+ */
3838
+
3839
+ var global = _dereq_('global');
3840
+
3841
+ /**
3842
+ * Module exports.
3843
+ *
3844
+ * Logic borrowed from Modernizr:
3845
+ *
3846
+ * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js
3847
+ */
3848
+
3849
+ try {
3850
+ module.exports = 'XMLHttpRequest' in global &&
3851
+ 'withCredentials' in new global.XMLHttpRequest();
3852
+ } catch (err) {
3853
+ // if XMLHttp support is disabled in IE then it will throw
3854
+ // when trying to create
3855
+ module.exports = false;
3856
+ }
3857
+
3858
+ },{"global":26}],26:[function(_dereq_,module,exports){
3859
+
3860
+ /**
3861
+ * Returns `this`. Execute this without a "context" (i.e. without it being
3862
+ * attached to an object of the left-hand side), and `this` points to the
3863
+ * "global" scope of the current JS execution.
3864
+ */
3865
+
3866
+ module.exports = (function () { return this; })();
3867
+
3868
+ },{}],27:[function(_dereq_,module,exports){
3869
+
3870
+ var indexOf = [].indexOf;
3871
+
3872
+ module.exports = function(arr, obj){
3873
+ if (indexOf) return arr.indexOf(obj);
3874
+ for (var i = 0; i < arr.length; ++i) {
3875
+ if (arr[i] === obj) return i;
3876
+ }
3877
+ return -1;
3878
+ };
3879
+ },{}],28:[function(_dereq_,module,exports){
3880
+ (function (global){
3881
+ /**
3882
+ * JSON parse.
3883
+ *
3884
+ * @see Based on jQuery#parseJSON (MIT) and JSON2
3885
+ * @api private
3886
+ */
3887
+
3888
+ var rvalidchars = /^[\],:{}\s]*$/;
3889
+ var rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
3890
+ var rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
3891
+ var rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g;
3892
+ var rtrimLeft = /^\s+/;
3893
+ var rtrimRight = /\s+$/;
3894
+
3895
+ module.exports = function parsejson(data) {
3896
+ if ('string' != typeof data || !data) {
3897
+ return null;
3898
+ }
3899
+
3900
+ data = data.replace(rtrimLeft, '').replace(rtrimRight, '');
3901
+
3902
+ // Attempt to parse using the native JSON parser first
3903
+ if (global.JSON && JSON.parse) {
3904
+ return JSON.parse(data);
3905
+ }
3906
+
3907
+ if (rvalidchars.test(data.replace(rvalidescape, '@')
3908
+ .replace(rvalidtokens, ']')
3909
+ .replace(rvalidbraces, ''))) {
3910
+ return (new Function('return ' + data))();
3911
+ }
3912
+ };
3913
+ }).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
3914
+ },{}],29:[function(_dereq_,module,exports){
3915
+ /**
3916
+ * Compiles a querystring
3917
+ * Returns string representation of the object
3918
+ *
3919
+ * @param {Object}
3920
+ * @api private
3921
+ */
3922
+
3923
+ exports.encode = function (obj) {
3924
+ var str = '';
3925
+
3926
+ for (var i in obj) {
3927
+ if (obj.hasOwnProperty(i)) {
3928
+ if (str.length) str += '&';
3929
+ str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
3930
+ }
3931
+ }
3932
+
3933
+ return str;
3934
+ };
3935
+
3936
+ /**
3937
+ * Parses a simple querystring into an object
3938
+ *
3939
+ * @param {String} qs
3940
+ * @api private
3941
+ */
3942
+
3943
+ exports.decode = function(qs){
3944
+ var qry = {};
3945
+ var pairs = qs.split('&');
3946
+ for (var i = 0, l = pairs.length; i < l; i++) {
3947
+ var pair = pairs[i].split('=');
3948
+ qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
3949
+ }
3950
+ return qry;
3951
+ };
3952
+
3953
+ },{}],30:[function(_dereq_,module,exports){
3954
+ /**
3955
+ * Parses an URI
3956
+ *
3957
+ * @author Steven Levithan <stevenlevithan.com> (MIT license)
3958
+ * @api private
3959
+ */
3960
+
3961
+ var re = /^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/;
3962
+
3963
+ var parts = [
3964
+ 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'
3965
+ ];
3966
+
3967
+ module.exports = function parseuri(str) {
3968
+ var src = str,
3969
+ b = str.indexOf('['),
3970
+ e = str.indexOf(']');
3971
+
3972
+ if (b != -1 && e != -1) {
3973
+ str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);
3974
+ }
3975
+
3976
+ var m = re.exec(str || ''),
3977
+ uri = {},
3978
+ i = 14;
3979
+
3980
+ while (i--) {
3981
+ uri[parts[i]] = m[i] || '';
3982
+ }
3983
+
3984
+ if (b != -1 && e != -1) {
3985
+ uri.source = src;
3986
+ uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');
3987
+ uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');
3988
+ uri.ipv6uri = true;
3989
+ }
3990
+
3991
+ return uri;
3992
+ };
3993
+
3994
+ },{}],31:[function(_dereq_,module,exports){
3995
+
3996
+ /**
3997
+ * Module dependencies.
3998
+ */
3999
+
4000
+ var global = (function() { return this; })();
4001
+
4002
+ /**
4003
+ * WebSocket constructor.
4004
+ */
4005
+
4006
+ var WebSocket = global.WebSocket || global.MozWebSocket;
4007
+
4008
+ /**
4009
+ * Module exports.
4010
+ */
4011
+
4012
+ module.exports = WebSocket ? ws : null;
4013
+
4014
+ /**
4015
+ * WebSocket constructor.
4016
+ *
4017
+ * The third `opts` options object gets ignored in web browsers, since it's
4018
+ * non-standard, and throws a TypeError if passed to the constructor.
4019
+ * See: https://github.com/einaros/ws/issues/227
4020
+ *
4021
+ * @param {String} uri
4022
+ * @param {Array} protocols (optional)
4023
+ * @param {Object) opts (optional)
4024
+ * @api public
4025
+ */
4026
+
4027
+ function ws(uri, protocols, opts) {
4028
+ var instance;
4029
+ if (protocols) {
4030
+ instance = new WebSocket(uri, protocols);
4031
+ } else {
4032
+ instance = new WebSocket(uri);
4033
+ }
4034
+ return instance;
4035
+ }
4036
+
4037
+ if (WebSocket) ws.prototype = WebSocket.prototype;
4038
+
4039
+ },{}]},{},[1])(1)
4040
+ });