ai 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/LICENSE +10 -24
  2. package/dist/ai-stream.d.ts +18 -0
  3. package/dist/ai-stream.js +132 -0
  4. package/dist/ai-stream.mjs +13 -0
  5. package/dist/anthropic-stream.d.ts +5 -0
  6. package/dist/anthropic-stream.js +133 -0
  7. package/dist/anthropic-stream.mjs +8 -0
  8. package/dist/chunk-265FSSO4.mjs +91 -0
  9. package/dist/chunk-2L3ZO4UM.mjs +45 -0
  10. package/dist/chunk-EZJ7FC5E.mjs +33 -0
  11. package/dist/chunk-JGDC3BXD.mjs +22 -0
  12. package/dist/chunk-NK2CVBLI.mjs +38 -0
  13. package/dist/chunk-PEYAHBDF.mjs +43 -0
  14. package/dist/chunk-TJMME6CL.mjs +24 -0
  15. package/dist/huggingface-stream.d.ts +5 -0
  16. package/dist/huggingface-stream.js +121 -0
  17. package/dist/huggingface-stream.mjs +8 -0
  18. package/dist/index.d.ts +131 -0
  19. package/dist/index.js +278 -0
  20. package/dist/index.mjs +35 -0
  21. package/dist/index.test.d.ts +2 -0
  22. package/dist/index.test.js +12 -0
  23. package/dist/index.test.mjs +10 -0
  24. package/dist/langchain-stream.d.ts +12 -0
  25. package/dist/langchain-stream.js +102 -0
  26. package/dist/langchain-stream.mjs +8 -0
  27. package/dist/openai-stream.d.ts +5 -0
  28. package/dist/openai-stream.js +144 -0
  29. package/dist/openai-stream.mjs +8 -0
  30. package/dist/streaming-text-response.d.ts +17 -0
  31. package/dist/streaming-text-response.js +75 -0
  32. package/dist/streaming-text-response.mjs +9 -0
  33. package/package.json +78 -29
  34. package/react/dist/chunk-5PP6W52J.mjs +202 -0
  35. package/react/dist/chunk-6EH3SWMP.mjs +55 -0
  36. package/react/dist/chunk-PW6HSU2N.mjs +154 -0
  37. package/react/dist/index.d.ts +3 -0
  38. package/react/dist/index.js +424 -0
  39. package/react/dist/index.mjs +12 -0
  40. package/react/dist/types-f862f74a.d.ts +123 -0
  41. package/react/dist/use-chat.d.ts +42 -0
  42. package/react/dist/use-chat.js +276 -0
  43. package/react/dist/use-chat.mjs +8 -0
  44. package/react/dist/use-completion.d.ts +47 -0
  45. package/react/dist/use-completion.js +229 -0
  46. package/react/dist/use-completion.mjs +8 -0
  47. package/svelte/dist/chunk-6USBQIV6.mjs +177 -0
  48. package/svelte/dist/chunk-BQ64GHZ3.mjs +136 -0
  49. package/svelte/dist/chunk-CENOSGDG.mjs +493 -0
  50. package/svelte/dist/index.d.ts +4 -0
  51. package/svelte/dist/index.js +808 -0
  52. package/svelte/dist/index.mjs +11 -0
  53. package/svelte/dist/types-f862f74a.d.ts +123 -0
  54. package/svelte/dist/use-chat.d.ts +39 -0
  55. package/svelte/dist/use-chat.js +680 -0
  56. package/svelte/dist/use-chat.mjs +7 -0
  57. package/svelte/dist/use-completion.d.ts +38 -0
  58. package/svelte/dist/use-completion.js +640 -0
  59. package/svelte/dist/use-completion.mjs +7 -0
  60. package/.npmignore +0 -15
  61. package/.travis.yml +0 -4
  62. package/README.md +0 -21
  63. package/bin/ai.js +0 -22
  64. package/index.js +0 -37
  65. package/node_modules/request/.npmignore +0 -2
  66. package/node_modules/request/.travis.yml +0 -12
  67. package/node_modules/request/CHANGELOG.md +0 -954
  68. package/node_modules/request/LICENSE +0 -55
  69. package/node_modules/request/README.md +0 -421
  70. package/node_modules/request/index.js +0 -166
  71. package/node_modules/request/lib/cookies.js +0 -40
  72. package/node_modules/request/lib/copy.js +0 -8
  73. package/node_modules/request/lib/debug.js +0 -7
  74. package/node_modules/request/lib/getSafe.js +0 -34
  75. package/node_modules/request/lib/optional.js +0 -5
  76. package/node_modules/request/node_modules/aws-sign2/LICENSE +0 -55
  77. package/node_modules/request/node_modules/aws-sign2/README.md +0 -4
  78. package/node_modules/request/node_modules/aws-sign2/index.js +0 -202
  79. package/node_modules/request/node_modules/aws-sign2/package.json +0 -47
  80. package/node_modules/request/node_modules/forever-agent/LICENSE +0 -55
  81. package/node_modules/request/node_modules/forever-agent/README.md +0 -4
  82. package/node_modules/request/node_modules/forever-agent/index.js +0 -119
  83. package/node_modules/request/node_modules/forever-agent/package.json +0 -46
  84. package/node_modules/request/node_modules/form-data/License +0 -19
  85. package/node_modules/request/node_modules/form-data/Readme.md +0 -175
  86. package/node_modules/request/node_modules/form-data/lib/form_data.js +0 -351
  87. package/node_modules/request/node_modules/form-data/node_modules/async/.travis.yml +0 -3
  88. package/node_modules/request/node_modules/form-data/node_modules/async/LICENSE +0 -19
  89. package/node_modules/request/node_modules/form-data/node_modules/async/README.md +0 -1646
  90. package/node_modules/request/node_modules/form-data/node_modules/async/component.json +0 -11
  91. package/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js +0 -1123
  92. package/node_modules/request/node_modules/form-data/node_modules/async/package.json +0 -60
  93. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/License +0 -19
  94. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md +0 -132
  95. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js +0 -186
  96. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore +0 -2
  97. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License +0 -19
  98. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile +0 -7
  99. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md +0 -154
  100. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js +0 -99
  101. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json +0 -42
  102. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js +0 -6
  103. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js +0 -38
  104. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js +0 -21
  105. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js +0 -14
  106. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js +0 -48
  107. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js +0 -15
  108. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js +0 -18
  109. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js +0 -13
  110. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js +0 -13
  111. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js +0 -7
  112. package/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json +0 -61
  113. package/node_modules/request/node_modules/form-data/node_modules/mime/LICENSE +0 -19
  114. package/node_modules/request/node_modules/form-data/node_modules/mime/README.md +0 -66
  115. package/node_modules/request/node_modules/form-data/node_modules/mime/mime.js +0 -114
  116. package/node_modules/request/node_modules/form-data/node_modules/mime/package.json +0 -59
  117. package/node_modules/request/node_modules/form-data/node_modules/mime/test.js +0 -84
  118. package/node_modules/request/node_modules/form-data/node_modules/mime/types/mime.types +0 -1588
  119. package/node_modules/request/node_modules/form-data/node_modules/mime/types/node.types +0 -77
  120. package/node_modules/request/node_modules/form-data/package.json +0 -80
  121. package/node_modules/request/node_modules/hawk/.npmignore +0 -18
  122. package/node_modules/request/node_modules/hawk/.travis.yml +0 -5
  123. package/node_modules/request/node_modules/hawk/LICENSE +0 -24
  124. package/node_modules/request/node_modules/hawk/Makefile +0 -10
  125. package/node_modules/request/node_modules/hawk/README.md +0 -625
  126. package/node_modules/request/node_modules/hawk/example/usage.js +0 -78
  127. package/node_modules/request/node_modules/hawk/images/hawk.png +0 -0
  128. package/node_modules/request/node_modules/hawk/images/logo.png +0 -0
  129. package/node_modules/request/node_modules/hawk/index.js +0 -1
  130. package/node_modules/request/node_modules/hawk/lib/browser.js +0 -507
  131. package/node_modules/request/node_modules/hawk/lib/client.js +0 -371
  132. package/node_modules/request/node_modules/hawk/lib/crypto.js +0 -118
  133. package/node_modules/request/node_modules/hawk/lib/index.js +0 -15
  134. package/node_modules/request/node_modules/hawk/lib/server.js +0 -523
  135. package/node_modules/request/node_modules/hawk/lib/utils.js +0 -183
  136. package/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore +0 -18
  137. package/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml +0 -5
  138. package/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE +0 -24
  139. package/node_modules/request/node_modules/hawk/node_modules/boom/Makefile +0 -11
  140. package/node_modules/request/node_modules/hawk/node_modules/boom/README.md +0 -6
  141. package/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png +0 -0
  142. package/node_modules/request/node_modules/hawk/node_modules/boom/index.js +0 -1
  143. package/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js +0 -207
  144. package/node_modules/request/node_modules/hawk/node_modules/boom/package.json +0 -64
  145. package/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js +0 -245
  146. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore +0 -18
  147. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml +0 -5
  148. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE +0 -24
  149. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile +0 -11
  150. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md +0 -6
  151. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js +0 -1
  152. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js +0 -68
  153. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json +0 -65
  154. package/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js +0 -101
  155. package/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore +0 -18
  156. package/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml +0 -5
  157. package/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE +0 -33
  158. package/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile +0 -10
  159. package/node_modules/request/node_modules/hawk/node_modules/hoek/README.md +0 -436
  160. package/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png +0 -0
  161. package/node_modules/request/node_modules/hawk/node_modules/hoek/index.js +0 -1
  162. package/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js +0 -132
  163. package/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js +0 -585
  164. package/node_modules/request/node_modules/hawk/node_modules/hoek/package.json +0 -70
  165. package/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js +0 -86
  166. package/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js +0 -1078
  167. package/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js +0 -1
  168. package/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js +0 -1
  169. package/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js +0 -1
  170. package/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore +0 -18
  171. package/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml +0 -5
  172. package/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE +0 -24
  173. package/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile +0 -11
  174. package/node_modules/request/node_modules/hawk/node_modules/sntp/README.md +0 -68
  175. package/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js +0 -16
  176. package/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js +0 -25
  177. package/node_modules/request/node_modules/hawk/node_modules/sntp/index.js +0 -1
  178. package/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js +0 -409
  179. package/node_modules/request/node_modules/hawk/node_modules/sntp/package.json +0 -65
  180. package/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js +0 -359
  181. package/node_modules/request/node_modules/hawk/package.json +0 -70
  182. package/node_modules/request/node_modules/hawk/test/browser.js +0 -817
  183. package/node_modules/request/node_modules/hawk/test/client.js +0 -206
  184. package/node_modules/request/node_modules/hawk/test/crypto.js +0 -86
  185. package/node_modules/request/node_modules/hawk/test/index.js +0 -316
  186. package/node_modules/request/node_modules/hawk/test/message.js +0 -246
  187. package/node_modules/request/node_modules/hawk/test/readme.js +0 -98
  188. package/node_modules/request/node_modules/hawk/test/server.js +0 -686
  189. package/node_modules/request/node_modules/hawk/test/uri.js +0 -456
  190. package/node_modules/request/node_modules/hawk/test/utils.js +0 -120
  191. package/node_modules/request/node_modules/http-signature/.dir-locals.el +0 -6
  192. package/node_modules/request/node_modules/http-signature/.npmignore +0 -7
  193. package/node_modules/request/node_modules/http-signature/LICENSE +0 -18
  194. package/node_modules/request/node_modules/http-signature/README.md +0 -75
  195. package/node_modules/request/node_modules/http-signature/http_signing.md +0 -296
  196. package/node_modules/request/node_modules/http-signature/lib/index.js +0 -25
  197. package/node_modules/request/node_modules/http-signature/lib/parser.js +0 -304
  198. package/node_modules/request/node_modules/http-signature/lib/signer.js +0 -179
  199. package/node_modules/request/node_modules/http-signature/lib/util.js +0 -249
  200. package/node_modules/request/node_modules/http-signature/lib/verify.js +0 -42
  201. package/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore +0 -2
  202. package/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE +0 -19
  203. package/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md +0 -50
  204. package/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js +0 -13
  205. package/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js +0 -27
  206. package/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js +0 -267
  207. package/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js +0 -36
  208. package/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js +0 -317
  209. package/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js +0 -20
  210. package/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json +0 -63
  211. package/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js +0 -172
  212. package/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js +0 -296
  213. package/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md +0 -126
  214. package/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js +0 -196
  215. package/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json +0 -38
  216. package/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG +0 -71
  217. package/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE +0 -24
  218. package/node_modules/request/node_modules/http-signature/node_modules/ctype/README +0 -82
  219. package/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old +0 -298
  220. package/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js +0 -245
  221. package/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js +0 -1485
  222. package/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js +0 -944
  223. package/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype +0 -241
  224. package/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json +0 -36
  225. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf +0 -129
  226. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle +0 -839
  227. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json +0 -13
  228. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json +0 -13
  229. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json +0 -104
  230. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json +0 -19
  231. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js +0 -39
  232. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js +0 -14
  233. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js +0 -14
  234. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js +0 -17
  235. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js +0 -18
  236. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js +0 -15
  237. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json +0 -14
  238. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js +0 -767
  239. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js +0 -753
  240. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js +0 -638
  241. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js +0 -101
  242. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js +0 -53
  243. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js +0 -92
  244. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js +0 -451
  245. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js +0 -81
  246. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js +0 -95
  247. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js +0 -156
  248. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js +0 -50
  249. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js +0 -44
  250. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js +0 -42
  251. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js +0 -45
  252. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js +0 -28
  253. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js +0 -128
  254. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js +0 -28
  255. package/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js +0 -31
  256. package/node_modules/request/node_modules/http-signature/package.json +0 -54
  257. package/node_modules/request/node_modules/json-stringify-safe/LICENSE +0 -27
  258. package/node_modules/request/node_modules/json-stringify-safe/README.md +0 -49
  259. package/node_modules/request/node_modules/json-stringify-safe/package.json +0 -51
  260. package/node_modules/request/node_modules/json-stringify-safe/stringify.js +0 -39
  261. package/node_modules/request/node_modules/json-stringify-safe/test.js +0 -128
  262. package/node_modules/request/node_modules/mime-types/.npmignore +0 -14
  263. package/node_modules/request/node_modules/mime-types/.travis.yml +0 -12
  264. package/node_modules/request/node_modules/mime-types/LICENSE +0 -22
  265. package/node_modules/request/node_modules/mime-types/Makefile +0 -9
  266. package/node_modules/request/node_modules/mime-types/README.md +0 -101
  267. package/node_modules/request/node_modules/mime-types/SOURCES.md +0 -17
  268. package/node_modules/request/node_modules/mime-types/component.json +0 -16
  269. package/node_modules/request/node_modules/mime-types/lib/custom.json +0 -27
  270. package/node_modules/request/node_modules/mime-types/lib/index.js +0 -75
  271. package/node_modules/request/node_modules/mime-types/lib/mime.json +0 -3317
  272. package/node_modules/request/node_modules/mime-types/lib/node.json +0 -55
  273. package/node_modules/request/node_modules/mime-types/package.json +0 -69
  274. package/node_modules/request/node_modules/node-uuid/.npmignore +0 -2
  275. package/node_modules/request/node_modules/node-uuid/LICENSE.md +0 -2
  276. package/node_modules/request/node_modules/node-uuid/README.md +0 -207
  277. package/node_modules/request/node_modules/node-uuid/benchmark/README.md +0 -53
  278. package/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu +0 -174
  279. package/node_modules/request/node_modules/node-uuid/benchmark/bench.sh +0 -34
  280. package/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c +0 -34
  281. package/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js +0 -84
  282. package/node_modules/request/node_modules/node-uuid/component.json +0 -18
  283. package/node_modules/request/node_modules/node-uuid/package.json +0 -54
  284. package/node_modules/request/node_modules/node-uuid/test/compare_v1.js +0 -63
  285. package/node_modules/request/node_modules/node-uuid/test/test.html +0 -17
  286. package/node_modules/request/node_modules/node-uuid/test/test.js +0 -228
  287. package/node_modules/request/node_modules/node-uuid/uuid.js +0 -245
  288. package/node_modules/request/node_modules/oauth-sign/LICENSE +0 -55
  289. package/node_modules/request/node_modules/oauth-sign/README.md +0 -4
  290. package/node_modules/request/node_modules/oauth-sign/index.js +0 -43
  291. package/node_modules/request/node_modules/oauth-sign/package.json +0 -49
  292. package/node_modules/request/node_modules/oauth-sign/test.js +0 -49
  293. package/node_modules/request/node_modules/qs/.jshintignore +0 -1
  294. package/node_modules/request/node_modules/qs/.jshintrc +0 -10
  295. package/node_modules/request/node_modules/qs/.npmignore +0 -18
  296. package/node_modules/request/node_modules/qs/.travis.yml +0 -4
  297. package/node_modules/request/node_modules/qs/LICENSE +0 -28
  298. package/node_modules/request/node_modules/qs/Makefile +0 -8
  299. package/node_modules/request/node_modules/qs/Readme.md +0 -120
  300. package/node_modules/request/node_modules/qs/index.js +0 -1
  301. package/node_modules/request/node_modules/qs/lib/index.js +0 -15
  302. package/node_modules/request/node_modules/qs/lib/parse.js +0 -151
  303. package/node_modules/request/node_modules/qs/lib/stringify.js +0 -52
  304. package/node_modules/request/node_modules/qs/lib/utils.js +0 -131
  305. package/node_modules/request/node_modules/qs/package.json +0 -61
  306. package/node_modules/request/node_modules/qs/test/parse.js +0 -236
  307. package/node_modules/request/node_modules/qs/test/stringify.js +0 -123
  308. package/node_modules/request/node_modules/stringstream/.npmignore +0 -15
  309. package/node_modules/request/node_modules/stringstream/.travis.yml +0 -4
  310. package/node_modules/request/node_modules/stringstream/LICENSE.txt +0 -4
  311. package/node_modules/request/node_modules/stringstream/README.md +0 -38
  312. package/node_modules/request/node_modules/stringstream/example.js +0 -27
  313. package/node_modules/request/node_modules/stringstream/package.json +0 -48
  314. package/node_modules/request/node_modules/stringstream/stringstream.js +0 -102
  315. package/node_modules/request/node_modules/tough-cookie/.jshintrc +0 -70
  316. package/node_modules/request/node_modules/tough-cookie/.npmignore +0 -3
  317. package/node_modules/request/node_modules/tough-cookie/.travis.yml +0 -8
  318. package/node_modules/request/node_modules/tough-cookie/LICENSE +0 -78
  319. package/node_modules/request/node_modules/tough-cookie/README.md +0 -412
  320. package/node_modules/request/node_modules/tough-cookie/generate-pubsuffix.js +0 -239
  321. package/node_modules/request/node_modules/tough-cookie/lib/cookie.js +0 -1107
  322. package/node_modules/request/node_modules/tough-cookie/lib/memstore.js +0 -123
  323. package/node_modules/request/node_modules/tough-cookie/lib/pubsuffix.js +0 -69
  324. package/node_modules/request/node_modules/tough-cookie/lib/store.js +0 -37
  325. package/node_modules/request/node_modules/tough-cookie/node_modules/punycode/LICENSE-MIT.txt +0 -20
  326. package/node_modules/request/node_modules/tough-cookie/node_modules/punycode/README.md +0 -176
  327. package/node_modules/request/node_modules/tough-cookie/node_modules/punycode/package.json +0 -87
  328. package/node_modules/request/node_modules/tough-cookie/node_modules/punycode/punycode.js +0 -528
  329. package/node_modules/request/node_modules/tough-cookie/package.json +0 -67
  330. package/node_modules/request/node_modules/tough-cookie/public-suffix.txt +0 -5229
  331. package/node_modules/request/node_modules/tough-cookie/test.js +0 -1625
  332. package/node_modules/request/node_modules/tunnel-agent/.jshintrc +0 -5
  333. package/node_modules/request/node_modules/tunnel-agent/LICENSE +0 -55
  334. package/node_modules/request/node_modules/tunnel-agent/README.md +0 -4
  335. package/node_modules/request/node_modules/tunnel-agent/index.js +0 -236
  336. package/node_modules/request/node_modules/tunnel-agent/package.json +0 -46
  337. package/node_modules/request/package.json +0 -77
  338. package/node_modules/request/request.js +0 -1428
  339. package/test/fixtures/github-response.json +0 -1367
  340. package/test/index.js +0 -55
@@ -1,817 +0,0 @@
1
- // Load modules
2
-
3
- var Lab = require('lab');
4
- var Hoek = require('hoek');
5
- var Hawk = require('../lib');
6
- var Browser = require('../lib/browser');
7
- var LocalStorage = require('localStorage');
8
-
9
-
10
- // Declare internals
11
-
12
- var internals = {};
13
-
14
-
15
- // Test shortcuts
16
-
17
- var expect = Lab.expect;
18
- var before = Lab.before;
19
- var after = Lab.after;
20
- var describe = Lab.experiment;
21
- var it = Lab.test;
22
-
23
-
24
- describe('Browser', function () {
25
-
26
- var credentialsFunc = function (id, callback) {
27
-
28
- var credentials = {
29
- id: id,
30
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
31
- algorithm: (id === '1' ? 'sha1' : 'sha256'),
32
- user: 'steve'
33
- };
34
-
35
- return callback(null, credentials);
36
- };
37
-
38
- it('should generate a header then successfully parse it (configuration)', function (done) {
39
-
40
- var req = {
41
- method: 'GET',
42
- url: '/resource/4?filter=a',
43
- host: 'example.com',
44
- port: 8080
45
- };
46
-
47
- credentialsFunc('123456', function (err, credentials) {
48
-
49
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
50
- expect(req.authorization).to.exist;
51
-
52
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
53
-
54
- expect(err).to.not.exist;
55
- expect(credentials.user).to.equal('steve');
56
- expect(artifacts.ext).to.equal('some-app-data');
57
- done();
58
- });
59
- });
60
- });
61
-
62
- it('should generate a header then successfully parse it (node request)', function (done) {
63
-
64
- var req = {
65
- method: 'POST',
66
- url: '/resource/4?filter=a',
67
- headers: {
68
- host: 'example.com:8080',
69
- 'content-type': 'text/plain;x=y'
70
- }
71
- };
72
-
73
- var payload = 'some not so random text';
74
-
75
- credentialsFunc('123456', function (err, credentials) {
76
-
77
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
78
- req.headers.authorization = reqHeader.field;
79
-
80
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
81
-
82
- expect(err).to.not.exist;
83
- expect(credentials.user).to.equal('steve');
84
- expect(artifacts.ext).to.equal('some-app-data');
85
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
86
-
87
- var res = {
88
- headers: {
89
- 'content-type': 'text/plain'
90
- },
91
- getResponseHeader: function (header) {
92
-
93
- return res.headers[header.toLowerCase()];
94
- }
95
- };
96
-
97
- res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts, { payload: 'some reply', contentType: 'text/plain', ext: 'response-specific' });
98
- expect(res.headers['server-authorization']).to.exist;
99
-
100
- expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(true);
101
- done();
102
- });
103
- });
104
- });
105
-
106
- it('should generate a header then successfully parse it (no server header options)', function (done) {
107
-
108
- var req = {
109
- method: 'POST',
110
- url: '/resource/4?filter=a',
111
- headers: {
112
- host: 'example.com:8080',
113
- 'content-type': 'text/plain;x=y'
114
- }
115
- };
116
-
117
- var payload = 'some not so random text';
118
-
119
- credentialsFunc('123456', function (err, credentials) {
120
-
121
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
122
- req.headers.authorization = reqHeader.field;
123
-
124
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
125
-
126
- expect(err).to.not.exist;
127
- expect(credentials.user).to.equal('steve');
128
- expect(artifacts.ext).to.equal('some-app-data');
129
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
130
-
131
- var res = {
132
- headers: {
133
- 'content-type': 'text/plain'
134
- },
135
- getResponseHeader: function (header) {
136
-
137
- return res.headers[header.toLowerCase()];
138
- }
139
- };
140
-
141
- res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts);
142
- expect(res.headers['server-authorization']).to.exist;
143
-
144
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
145
- done();
146
- });
147
- });
148
- });
149
-
150
- it('should generate a header then successfully parse it (no server header)', function (done) {
151
-
152
- var req = {
153
- method: 'POST',
154
- url: '/resource/4?filter=a',
155
- headers: {
156
- host: 'example.com:8080',
157
- 'content-type': 'text/plain;x=y'
158
- }
159
- };
160
-
161
- var payload = 'some not so random text';
162
-
163
- credentialsFunc('123456', function (err, credentials) {
164
-
165
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
166
- req.headers.authorization = reqHeader.field;
167
-
168
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
169
-
170
- expect(err).to.not.exist;
171
- expect(credentials.user).to.equal('steve');
172
- expect(artifacts.ext).to.equal('some-app-data');
173
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
174
-
175
- var res = {
176
- headers: {
177
- 'content-type': 'text/plain'
178
- },
179
- getResponseHeader: function (header) {
180
-
181
- return res.headers[header.toLowerCase()];
182
- }
183
- };
184
-
185
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
186
- done();
187
- });
188
- });
189
- });
190
-
191
- it('should generate a header with stale ts and successfully authenticate on second call', function (done) {
192
-
193
- var req = {
194
- method: 'GET',
195
- url: '/resource/4?filter=a',
196
- host: 'example.com',
197
- port: 8080
198
- };
199
-
200
- credentialsFunc('123456', function (err, credentials) {
201
-
202
- Browser.utils.setNtpOffset(60 * 60 * 1000);
203
- var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' });
204
- req.authorization = header.field;
205
- expect(req.authorization).to.exist;
206
-
207
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
208
-
209
- expect(err).to.exist;
210
- expect(err.message).to.equal('Stale timestamp');
211
-
212
- var res = {
213
- headers: {
214
- 'www-authenticate': err.response.headers['WWW-Authenticate']
215
- },
216
- getResponseHeader: function (header) {
217
-
218
- return res.headers[header.toLowerCase()];
219
- }
220
- };
221
-
222
- expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000);
223
- expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true);
224
- expect(Browser.utils.getNtpOffset()).to.equal(0);
225
-
226
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
227
- expect(req.authorization).to.exist;
228
-
229
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
230
-
231
- expect(err).to.not.exist;
232
- expect(credentials.user).to.equal('steve');
233
- expect(artifacts.ext).to.equal('some-app-data');
234
- done();
235
- });
236
- });
237
- });
238
- });
239
-
240
- it('should generate a header with stale ts and successfully authenticate on second call (manual localStorage)', function (done) {
241
-
242
- var req = {
243
- method: 'GET',
244
- url: '/resource/4?filter=a',
245
- host: 'example.com',
246
- port: 8080
247
- };
248
-
249
- credentialsFunc('123456', function (err, credentials) {
250
- Browser.utils.setStorage(LocalStorage)
251
-
252
- Browser.utils.setNtpOffset(60 * 60 * 1000);
253
- var header = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' });
254
- req.authorization = header.field;
255
- expect(req.authorization).to.exist;
256
-
257
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
258
-
259
- expect(err).to.exist;
260
- expect(err.message).to.equal('Stale timestamp');
261
-
262
- var res = {
263
- headers: {
264
- 'www-authenticate': err.response.headers['WWW-Authenticate']
265
- },
266
- getResponseHeader: function (header) {
267
-
268
- return res.headers[header.toLowerCase()];
269
- }
270
- };
271
-
272
- expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(60 * 60 * 1000);
273
- expect(Browser.utils.getNtpOffset()).to.equal(60 * 60 * 1000);
274
- expect(Browser.client.authenticate(res, credentials, header.artifacts)).to.equal(true);
275
- expect(Browser.utils.getNtpOffset()).to.equal(0);
276
- expect(parseInt(LocalStorage.getItem('hawk_ntp_offset'))).to.equal(0);
277
-
278
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
279
- expect(req.authorization).to.exist;
280
-
281
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
282
-
283
- expect(err).to.not.exist;
284
- expect(credentials.user).to.equal('steve');
285
- expect(artifacts.ext).to.equal('some-app-data');
286
- done();
287
- });
288
- });
289
- });
290
- });
291
-
292
- it('should generate a header then fails to parse it (missing server header hash)', function (done) {
293
-
294
- var req = {
295
- method: 'POST',
296
- url: '/resource/4?filter=a',
297
- headers: {
298
- host: 'example.com:8080',
299
- 'content-type': 'text/plain;x=y'
300
- }
301
- };
302
-
303
- var payload = 'some not so random text';
304
-
305
- credentialsFunc('123456', function (err, credentials) {
306
-
307
- var reqHeader = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', payload: payload, contentType: req.headers['content-type'] });
308
- req.headers.authorization = reqHeader.field;
309
-
310
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
311
-
312
- expect(err).to.not.exist;
313
- expect(credentials.user).to.equal('steve');
314
- expect(artifacts.ext).to.equal('some-app-data');
315
- expect(Hawk.server.authenticatePayload(payload, credentials, artifacts, req.headers['content-type'])).to.equal(true);
316
-
317
- var res = {
318
- headers: {
319
- 'content-type': 'text/plain'
320
- },
321
- getResponseHeader: function (header) {
322
-
323
- return res.headers[header.toLowerCase()];
324
- }
325
- };
326
-
327
- res.headers['server-authorization'] = Hawk.server.header(credentials, artifacts);
328
- expect(res.headers['server-authorization']).to.exist;
329
-
330
- expect(Browser.client.authenticate(res, credentials, artifacts, { payload: 'some reply' })).to.equal(false);
331
- done();
332
- });
333
- });
334
- });
335
-
336
- it('should generate a header then successfully parse it (with hash)', function (done) {
337
-
338
- var req = {
339
- method: 'GET',
340
- url: '/resource/4?filter=a',
341
- host: 'example.com',
342
- port: 8080
343
- };
344
-
345
- credentialsFunc('123456', function (err, credentials) {
346
-
347
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
348
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
349
-
350
- expect(err).to.not.exist;
351
- expect(credentials.user).to.equal('steve');
352
- expect(artifacts.ext).to.equal('some-app-data');
353
- done();
354
- });
355
- });
356
- });
357
-
358
- it('should generate a header then successfully parse it then validate payload', function (done) {
359
-
360
- var req = {
361
- method: 'GET',
362
- url: '/resource/4?filter=a',
363
- host: 'example.com',
364
- port: 8080
365
- };
366
-
367
- credentialsFunc('123456', function (err, credentials) {
368
-
369
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
370
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
371
-
372
- expect(err).to.not.exist;
373
- expect(credentials.user).to.equal('steve');
374
- expect(artifacts.ext).to.equal('some-app-data');
375
- expect(Hawk.server.authenticatePayload('hola!', credentials, artifacts)).to.be.true;
376
- expect(Hawk.server.authenticatePayload('hello!', credentials, artifacts)).to.be.false;
377
- done();
378
- });
379
- });
380
- });
381
-
382
- it('should generate a header then successfully parse it (app)', function (done) {
383
-
384
- var req = {
385
- method: 'GET',
386
- url: '/resource/4?filter=a',
387
- host: 'example.com',
388
- port: 8080
389
- };
390
-
391
- credentialsFunc('123456', function (err, credentials) {
392
-
393
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased' }).field;
394
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
395
-
396
- expect(err).to.not.exist;
397
- expect(credentials.user).to.equal('steve');
398
- expect(artifacts.ext).to.equal('some-app-data');
399
- expect(artifacts.app).to.equal('asd23ased');
400
- done();
401
- });
402
- });
403
- });
404
-
405
- it('should generate a header then successfully parse it (app, dlg)', function (done) {
406
-
407
- var req = {
408
- method: 'GET',
409
- url: '/resource/4?filter=a',
410
- host: 'example.com',
411
- port: 8080
412
- };
413
-
414
- credentialsFunc('123456', function (err, credentials) {
415
-
416
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data', app: 'asd23ased', dlg: '23434szr3q4d' }).field;
417
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
418
-
419
- expect(err).to.not.exist;
420
- expect(credentials.user).to.equal('steve');
421
- expect(artifacts.ext).to.equal('some-app-data');
422
- expect(artifacts.app).to.equal('asd23ased');
423
- expect(artifacts.dlg).to.equal('23434szr3q4d');
424
- done();
425
- });
426
- });
427
- });
428
-
429
- it('should generate a header then fail authentication due to bad hash', function (done) {
430
-
431
- var req = {
432
- method: 'GET',
433
- url: '/resource/4?filter=a',
434
- host: 'example.com',
435
- port: 8080
436
- };
437
-
438
- credentialsFunc('123456', function (err, credentials) {
439
-
440
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, payload: 'hola!', ext: 'some-app-data' }).field;
441
- Hawk.server.authenticate(req, credentialsFunc, { payload: 'byebye!' }, function (err, credentials, artifacts) {
442
-
443
- expect(err).to.exist;
444
- expect(err.response.payload.message).to.equal('Bad payload hash');
445
- done();
446
- });
447
- });
448
- });
449
-
450
- it('should generate a header for one resource then fail to authenticate another', function (done) {
451
-
452
- var req = {
453
- method: 'GET',
454
- url: '/resource/4?filter=a',
455
- host: 'example.com',
456
- port: 8080
457
- };
458
-
459
- credentialsFunc('123456', function (err, credentials) {
460
-
461
- req.authorization = Browser.client.header('http://example.com:8080/resource/4?filter=a', req.method, { credentials: credentials, ext: 'some-app-data' }).field;
462
- req.url = '/something/else';
463
-
464
- Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) {
465
-
466
- expect(err).to.exist;
467
- expect(credentials).to.exist;
468
- done();
469
- });
470
- });
471
- });
472
-
473
- describe('client', function () {
474
-
475
- describe('#header', function () {
476
-
477
- it('should return a valid authorization header (sha1)', function (done) {
478
-
479
- var credentials = {
480
- id: '123456',
481
- key: '2983d45yun89q',
482
- algorithm: 'sha1'
483
- };
484
-
485
- var header = Browser.client.header('http://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about' }).field;
486
- expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="bsvY3IfUllw6V5rvk4tStEvpBhE=", ext="Bazinga!", mac="qbf1ZPG/r/e06F4ht+T77LXi5vw="');
487
- done();
488
- });
489
-
490
- it('should return a valid authorization header (sha256)', function (done) {
491
-
492
- var credentials = {
493
- id: '123456',
494
- key: '2983d45yun89q',
495
- algorithm: 'sha256'
496
- };
497
-
498
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
499
- expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ext="Bazinga!", mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="');
500
- done();
501
- });
502
-
503
- it('should return a valid authorization header (no ext)', function (done) {
504
-
505
- var credentials = {
506
- id: '123456',
507
- key: '2983d45yun89q',
508
- algorithm: 'sha256'
509
- };
510
-
511
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, timestamp: 1353809207, nonce: 'Ygvqdz', payload: 'something to write about', contentType: 'text/plain' }).field;
512
- expect(header).to.equal('Hawk id="123456", ts="1353809207", nonce="Ygvqdz", hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", mac="HTgtd0jPI6E4izx8e4OHdO36q00xFCU0FolNq3RiCYs="');
513
- done();
514
- });
515
-
516
- it('should return an empty authorization header on missing options', function (done) {
517
-
518
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST').field;
519
- expect(header).to.equal('');
520
- done();
521
- });
522
-
523
- it('should return an empty authorization header on invalid credentials', function (done) {
524
-
525
- var credentials = {
526
- key: '2983d45yun89q',
527
- algorithm: 'sha256'
528
- };
529
-
530
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, ext: 'Bazinga!', timestamp: 1353809207 }).field;
531
- expect(header).to.equal('');
532
- done();
533
- });
534
-
535
- it('should return an empty authorization header on invalid algorithm', function (done) {
536
-
537
- var credentials = {
538
- id: '123456',
539
- key: '2983d45yun89q',
540
- algorithm: 'hmac-sha-0'
541
- };
542
-
543
- var header = Browser.client.header('https://example.net/somewhere/over/the/rainbow', 'POST', { credentials: credentials, payload: 'something, anything!', ext: 'Bazinga!', timestamp: 1353809207 }).field;
544
- expect(header).to.equal('');
545
- done();
546
- });
547
- });
548
-
549
- describe('#authenticate', function () {
550
-
551
- it('should return false on invalid header', function (done) {
552
-
553
- var res = {
554
- headers: {
555
- 'server-authorization': 'Hawk mac="abc", bad="xyz"'
556
- },
557
- getResponseHeader: function (header) {
558
-
559
- return res.headers[header.toLowerCase()];
560
- }
561
- };
562
-
563
- expect(Browser.client.authenticate(res, {})).to.equal(false);
564
- done();
565
- });
566
-
567
- it('should return false on invalid mac', function (done) {
568
-
569
- var res = {
570
- headers: {
571
- 'content-type': 'text/plain',
572
- 'server-authorization': 'Hawk mac="_IJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
573
- },
574
- getResponseHeader: function (header) {
575
-
576
- return res.headers[header.toLowerCase()];
577
- }
578
- };
579
-
580
- var artifacts = {
581
- method: 'POST',
582
- host: 'example.com',
583
- port: '8080',
584
- resource: '/resource/4?filter=a',
585
- ts: '1362336900',
586
- nonce: 'eb5S_L',
587
- hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
588
- ext: 'some-app-data',
589
- app: undefined,
590
- dlg: undefined,
591
- mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
592
- id: '123456'
593
- };
594
-
595
- var credentials = {
596
- id: '123456',
597
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
598
- algorithm: 'sha256',
599
- user: 'steve'
600
- };
601
-
602
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(false);
603
- done();
604
- });
605
-
606
- it('should return true on ignoring hash', function (done) {
607
-
608
- var res = {
609
- headers: {
610
- 'content-type': 'text/plain',
611
- 'server-authorization': 'Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific"'
612
- },
613
- getResponseHeader: function (header) {
614
-
615
- return res.headers[header.toLowerCase()];
616
- }
617
- };
618
-
619
- var artifacts = {
620
- method: 'POST',
621
- host: 'example.com',
622
- port: '8080',
623
- resource: '/resource/4?filter=a',
624
- ts: '1362336900',
625
- nonce: 'eb5S_L',
626
- hash: 'nJjkVtBE5Y/Bk38Aiokwn0jiJxt/0S2WRSUwWLCf5xk=',
627
- ext: 'some-app-data',
628
- app: undefined,
629
- dlg: undefined,
630
- mac: 'BlmSe8K+pbKIb6YsZCnt4E1GrYvY1AaYayNR82dGpIk=',
631
- id: '123456'
632
- };
633
-
634
- var credentials = {
635
- id: '123456',
636
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
637
- algorithm: 'sha256',
638
- user: 'steve'
639
- };
640
-
641
- expect(Browser.client.authenticate(res, credentials, artifacts)).to.equal(true);
642
- done();
643
- });
644
-
645
- it('should fail on invalid WWW-Authenticate header format', function (done) {
646
-
647
- var res = {
648
- headers: {
649
- 'www-authenticate': 'Hawk ts="1362346425875", tsm="PhwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", x="Stale timestamp"'
650
- },
651
- getResponseHeader: function (header) {
652
-
653
- return res.headers[header.toLowerCase()];
654
- }
655
- };
656
-
657
- expect(Browser.client.authenticate(res, {})).to.equal(false);
658
- done();
659
- });
660
-
661
- it('should fail on invalid WWW-Authenticate header format', function (done) {
662
-
663
- var credentials = {
664
- id: '123456',
665
- key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn',
666
- algorithm: 'sha256',
667
- user: 'steve'
668
- };
669
-
670
- var res = {
671
- headers: {
672
- 'www-authenticate': 'Hawk ts="1362346425875", tsm="hwayS28vtnn3qbv0mqRBYSXebN/zggEtucfeZ620Zo=", error="Stale timestamp"'
673
- },
674
- getResponseHeader: function (header) {
675
-
676
- return res.headers[header.toLowerCase()];
677
- }
678
- };
679
-
680
- expect(Browser.client.authenticate(res, credentials)).to.equal(false);
681
- done();
682
- });
683
- });
684
-
685
- describe('#message', function () {
686
- it('should generate an authorization then successfully parse it', function (done) {
687
-
688
- credentialsFunc('123456', function (err, credentials) {
689
-
690
- var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: credentials });
691
- expect(auth).to.exist;
692
-
693
- Hawk.server.authenticateMessage('example.com', 8080, 'some message', auth, credentialsFunc, {}, function (err, credentials) {
694
-
695
- expect(err).to.not.exist;
696
- expect(credentials.user).to.equal('steve');
697
- done();
698
- });
699
- });
700
- });
701
-
702
- it('should fail on missing host', function (done) {
703
-
704
- credentialsFunc('123456', function (err, credentials) {
705
-
706
- var auth = Browser.client.message(null, 8080, 'some message', { credentials: credentials });
707
- expect(auth).to.not.exist;
708
- done();
709
- });
710
- });
711
-
712
- it('should fail on missing credentials', function (done) {
713
-
714
- var auth = Browser.client.message('example.com', 8080, 'some message', {});
715
- expect(auth).to.not.exist;
716
- done();
717
- });
718
-
719
- it('should fail on invalid algorithm', function (done) {
720
-
721
- credentialsFunc('123456', function (err, credentials) {
722
-
723
- var creds = Hoek.clone(credentials);
724
- creds.algorithm = 'blah';
725
- var auth = Browser.client.message('example.com', 8080, 'some message', { credentials: creds });
726
- expect(auth).to.not.exist;
727
- done();
728
- });
729
- });
730
- });
731
-
732
- describe('#authenticateTimestamp', function (done) {
733
-
734
- it('should validate a timestamp', function (done) {
735
-
736
- credentialsFunc('123456', function (err, credentials) {
737
-
738
- var tsm = Hawk.crypto.timestampMessage(credentials);
739
- expect(Browser.client.authenticateTimestamp(tsm, credentials)).to.equal(true);
740
- done();
741
- });
742
- });
743
-
744
- it('should detect a bad timestamp', function (done) {
745
-
746
- credentialsFunc('123456', function (err, credentials) {
747
-
748
- var tsm = Hawk.crypto.timestampMessage(credentials);
749
- tsm.ts = 4;
750
- expect(Browser.client.authenticateTimestamp(tsm, credentials)).to.equal(false);
751
- done();
752
- });
753
- });
754
- });
755
- });
756
-
757
- describe('#parseAuthorizationHeader', function (done) {
758
-
759
- it('returns null on missing header', function (done) {
760
-
761
- expect(Browser.utils.parseAuthorizationHeader()).to.equal(null);
762
- done();
763
- });
764
-
765
- it('returns null on bad header syntax (structure)', function (done) {
766
-
767
- expect(Browser.utils.parseAuthorizationHeader('Hawk')).to.equal(null);
768
- done();
769
- });
770
-
771
- it('returns null on bad header syntax (parts)', function (done) {
772
-
773
- expect(Browser.utils.parseAuthorizationHeader(' ')).to.equal(null);
774
- done();
775
- });
776
-
777
- it('returns null on bad scheme name', function (done) {
778
-
779
- expect(Browser.utils.parseAuthorizationHeader('Basic asdasd')).to.equal(null);
780
- done();
781
- });
782
-
783
- it('returns null on bad attribute value', function (done) {
784
-
785
- expect(Browser.utils.parseAuthorizationHeader('Hawk test="\t"', ['test'])).to.equal(null);
786
- done();
787
- });
788
-
789
- it('returns null on duplicated attribute', function (done) {
790
-
791
- expect(Browser.utils.parseAuthorizationHeader('Hawk test="a", test="b"', ['test'])).to.equal(null);
792
- done();
793
- });
794
- });
795
-
796
- describe('#setNtpOffset', function (done) {
797
-
798
- it('catches localStorage errors', function (done) {
799
-
800
- var orig = Browser.utils.storage.setItem;
801
- var error = console.error;
802
- var count = 0;
803
- console.error = function () { if (count++ === 2) { console.error.error; } };
804
- Browser.utils.storage.setItem = function () {
805
-
806
- Browser.utils.storage.setItem = orig;
807
- throw new Error()
808
- };
809
-
810
- expect(function () {
811
- Browser.utils.setNtpOffset(100);
812
- }).not.to.throw();
813
-
814
- done();
815
- });
816
- });
817
- });