@wiajs/request 3.0.0 → 3.0.1

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 (117) hide show
  1. package/.github/ISSUE_TEMPLATE.md +56 -0
  2. package/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  3. package/.github/stale.yml +19 -0
  4. package/.swcrc +57 -0
  5. package/.travis.yml +21 -0
  6. package/CHANGELOG.md +717 -0
  7. package/CONTRIBUTING.md +81 -0
  8. package/biome.json +44 -0
  9. package/codecov.yml +2 -0
  10. package/disabled.appveyor.yml +36 -0
  11. package/dist/request.cjs +1476 -0
  12. package/dist/request.mjs +1474 -0
  13. package/examples/README.md +135 -0
  14. package/gulpfile.js +71 -0
  15. package/package.json +1 -2
  16. package/release.sh +45 -0
  17. package/tests/browser/karma.conf.js +57 -0
  18. package/tests/browser/ssl/ca.crt +14 -0
  19. package/tests/browser/ssl/server.crt +14 -0
  20. package/tests/browser/ssl/server.key +15 -0
  21. package/tests/browser/start.js +37 -0
  22. package/tests/browser/test.js +34 -0
  23. package/tests/fixtures/har.json +158 -0
  24. package/tests/googledoodle.jpg +0 -0
  25. package/tests/server.js +142 -0
  26. package/tests/squid.conf +76 -0
  27. package/tests/ssl/ca/README.md +8 -0
  28. package/tests/ssl/ca/ca.cnf +20 -0
  29. package/tests/ssl/ca/ca.crl +0 -0
  30. package/tests/ssl/ca/ca.crt +17 -0
  31. package/tests/ssl/ca/ca.csr +13 -0
  32. package/tests/ssl/ca/ca.key +18 -0
  33. package/tests/ssl/ca/ca.srl +1 -0
  34. package/tests/ssl/ca/client-enc.key +30 -0
  35. package/tests/ssl/ca/client.cnf +20 -0
  36. package/tests/ssl/ca/client.crt +20 -0
  37. package/tests/ssl/ca/client.csr +18 -0
  38. package/tests/ssl/ca/client.key +27 -0
  39. package/tests/ssl/ca/gen-all-certs.sh +6 -0
  40. package/tests/ssl/ca/gen-client.sh +25 -0
  41. package/tests/ssl/ca/gen-localhost.sh +22 -0
  42. package/tests/ssl/ca/gen-server.sh +18 -0
  43. package/tests/ssl/ca/localhost.cnf +20 -0
  44. package/tests/ssl/ca/localhost.crt +20 -0
  45. package/tests/ssl/ca/localhost.csr +18 -0
  46. package/tests/ssl/ca/localhost.js +33 -0
  47. package/tests/ssl/ca/localhost.key +27 -0
  48. package/tests/ssl/ca/server.cnf +19 -0
  49. package/tests/ssl/ca/server.crt +25 -0
  50. package/tests/ssl/ca/server.csr +29 -0
  51. package/tests/ssl/ca/server.js +34 -0
  52. package/tests/ssl/ca/server.key +51 -0
  53. package/tests/ssl/npm-ca.crt +16 -0
  54. package/tests/ssl/test.crt +15 -0
  55. package/tests/ssl/test.key +15 -0
  56. package/tests/test-agent.js +102 -0
  57. package/tests/test-agentOptions.js +51 -0
  58. package/tests/test-api.js +33 -0
  59. package/tests/test-aws.js +123 -0
  60. package/tests/test-baseUrl.js +133 -0
  61. package/tests/test-basic-auth.js +221 -0
  62. package/tests/test-bearer-auth.js +187 -0
  63. package/tests/test-body.js +154 -0
  64. package/tests/test-cookies.js +130 -0
  65. package/tests/test-defaults.js +340 -0
  66. package/tests/test-digest-auth.js +232 -0
  67. package/tests/test-emptyBody.js +56 -0
  68. package/tests/test-errors.js +108 -0
  69. package/tests/test-event-forwarding.js +39 -0
  70. package/tests/test-follow-all-303.js +45 -0
  71. package/tests/test-follow-all.js +57 -0
  72. package/tests/test-form-data-error.js +85 -0
  73. package/tests/test-form-data.js +133 -0
  74. package/tests/test-form-urlencoded.js +73 -0
  75. package/tests/test-form.js +101 -0
  76. package/tests/test-gzip.js +296 -0
  77. package/tests/test-har.js +175 -0
  78. package/tests/test-hawk.js +187 -0
  79. package/tests/test-headers.js +305 -0
  80. package/tests/test-http-signature.js +110 -0
  81. package/tests/test-httpModule.js +112 -0
  82. package/tests/test-https.js +116 -0
  83. package/tests/test-isUrl.js +120 -0
  84. package/tests/test-json-request.js +117 -0
  85. package/tests/test-localAddress.js +49 -0
  86. package/tests/test-multipart-encoding.js +147 -0
  87. package/tests/test-multipart.js +129 -0
  88. package/tests/test-node-debug.js +95 -0
  89. package/tests/test-oauth.js +721 -0
  90. package/tests/test-onelineproxy.js +61 -0
  91. package/tests/test-option-reuse.js +54 -0
  92. package/tests/test-options-convenience-method.js +52 -0
  93. package/tests/test-params.js +101 -0
  94. package/tests/test-piped-redirect.js +55 -0
  95. package/tests/test-pipes.js +383 -0
  96. package/tests/test-pool.js +148 -0
  97. package/tests/test-promise.js +53 -0
  98. package/tests/test-proxy-connect.js +80 -0
  99. package/tests/test-proxy.js +304 -0
  100. package/tests/test-qs.js +135 -0
  101. package/tests/test-redirect-auth.js +131 -0
  102. package/tests/test-redirect-complex.js +93 -0
  103. package/tests/test-redirect.js +449 -0
  104. package/tests/test-rfc3986.js +106 -0
  105. package/tests/test-stream.js +36 -0
  106. package/tests/test-timeout.js +260 -0
  107. package/tests/test-timing.js +147 -0
  108. package/tests/test-toJSON.js +45 -0
  109. package/tests/test-tunnel.js +466 -0
  110. package/tests/test-unix.js +74 -0
  111. package/tests/unicycle.jpg +0 -0
  112. package/request.js +0 -1553
  113. package/src/ZlibTransform.js +0 -27
  114. package/src/caseless.js +0 -118
  115. package/src/index.js +0 -122
  116. package/src/request.js +0 -967
  117. package/src/utils.js +0 -274
@@ -0,0 +1,25 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEQjCCA6sCCQCt9iAWqkDJxzANBgkqhkiG9w0BAQsFADCBojELMAkGA1UEBhMC
3
+ VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMRAwDgYDVQQKEwdyZXF1
4
+ ZXN0MSYwJAYDVQQLEx1yZXF1ZXN0IENlcnRpZmljYXRlIEF1dGhvcml0eTESMBAG
5
+ A1UEAxMJcmVxdWVzdENBMSYwJAYJKoZIhvcNAQkBFhdtaWtlYWxAbWlrZWFscm9n
6
+ ZXJzLmNvbTAeFw0xODExMjIxNTIzMjBaFw0yODExMTkxNTIzMjBaMIGjMQswCQYD
7
+ VQQGEwJVUzELMAkGA1UECAwCQ0ExEDAOBgNVBAcMB09ha2xhbmQxEDAOBgNVBAoM
8
+ B3JlcXVlc3QxEDAOBgNVBAsMB3Rlc3RpbmcxKTAnBgNVBAMMIHRlc3RpbmcucmVx
9
+ dWVzdC5taWtlYWxyb2dlcnMuY29tMSYwJAYJKoZIhvcNAQkBFhdtaWtlYWxAbWlr
10
+ ZWFscm9nZXJzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANQc
11
+ 6Vm7UwK1JQc8gipa++0qsAUq2iv9PGeo8cE+ewWzjKCoh4hOYoDS95oq303Qq+0v
12
+ vzeY9sfe1eZJOdwqCWPPClf2Dkd9rEBtQw6Zm5dodTsqUQtILLiooDUi83OvPcCn
13
+ bc25y5qPC+EbRNYPF9penpry/MhWuqOPO6NzTbsIjW1KRvOsivNIetUr/48S1Cmm
14
+ SILvVQAqbzKGda4ycMkF8XZqIvDnUOBPDAo5ioEY92eNdfcKeJVu9Gv7PFybEWD5
15
+ +jZw/nw9e01q55t+BzF0Kq9yyldeAuldu25nhzZTyZi+umJsI2mpv8R50rvCtYbX
16
+ 4ksQy17UlxvEt9ClAYF1cs04f6eAivzKNA4veVSB3ePRKwGCwCIwPA33CzZFO3pw
17
+ 1iMZ936nVeb9oNFK4YC7tYid/j6PI2+032tGxS18MGB8FSSGyTCjsMqHCJcOi9fL
18
+ wn1yiLcXt4BKqVfWyi+vsXM3Xh2cdSKQVgIMoRHnr478lK9gT8QwtxNIbF3F9OR6
19
+ qyrZ1VHlTDp1rSEEj6uV/gyx4nh+V9/qPCVYVPKSRGKXP8BI6ujvarOiKx96Pjly
20
+ A7BBDGblF2FJEnKGNGV2XCUJnjV2fNuFRrV3UYkMhbq0SXpSA8FcK/0YhKxKxIsV
21
+ /pUrR//nTlsoYHwQR4AFp0Rhpy6XntO9vsrDetE3AgMBAAEwDQYJKoZIhvcNAQEL
22
+ BQADgYEAnjXSTIfGpBx9/0ZkOQRSGdTjtpy5TQ/VDHtEhRKZYY6dpe6lVpT0hSoT
23
+ SzA8YF+bpFIF+1ZpAgQldBFCmPpVDBCy/ymf8t/V2zSd2c80w6pmxXWQEFq25pib
24
+ OLCcTex2nVGmiUXwIbwnEhWPJvB8T8L8a75x0fPZDHHHoi+K/wQ=
25
+ -----END CERTIFICATE-----
@@ -0,0 +1,29 @@
1
+ -----BEGIN CERTIFICATE REQUEST-----
2
+ MIIFDDCCAvQCAQAwgaMxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJDQTEQMA4GA1UE
3
+ BwwHT2FrbGFuZDEQMA4GA1UECgwHcmVxdWVzdDEQMA4GA1UECwwHdGVzdGluZzEp
4
+ MCcGA1UEAwwgdGVzdGluZy5yZXF1ZXN0Lm1pa2VhbHJvZ2Vycy5jb20xJjAkBgkq
5
+ hkiG9w0BCQEWF21pa2VhbEBtaWtlYWxyb2dlcnMuY29tMIICIjANBgkqhkiG9w0B
6
+ AQEFAAOCAg8AMIICCgKCAgEA1BzpWbtTArUlBzyCKlr77SqwBSraK/08Z6jxwT57
7
+ BbOMoKiHiE5igNL3mirfTdCr7S+/N5j2x97V5kk53CoJY88KV/YOR32sQG1DDpmb
8
+ l2h1OypRC0gsuKigNSLzc689wKdtzbnLmo8L4RtE1g8X2l6emvL8yFa6o487o3NN
9
+ uwiNbUpG86yK80h61Sv/jxLUKaZIgu9VACpvMoZ1rjJwyQXxdmoi8OdQ4E8MCjmK
10
+ gRj3Z4119wp4lW70a/s8XJsRYPn6NnD+fD17TWrnm34HMXQqr3LKV14C6V27bmeH
11
+ NlPJmL66Ymwjaam/xHnSu8K1htfiSxDLXtSXG8S30KUBgXVyzTh/p4CK/Mo0Di95
12
+ VIHd49ErAYLAIjA8DfcLNkU7enDWIxn3fqdV5v2g0UrhgLu1iJ3+Po8jb7Tfa0bF
13
+ LXwwYHwVJIbJMKOwyocIlw6L18vCfXKItxe3gEqpV9bKL6+xczdeHZx1IpBWAgyh
14
+ EeevjvyUr2BPxDC3E0hsXcX05HqrKtnVUeVMOnWtIQSPq5X+DLHieH5X3+o8JVhU
15
+ 8pJEYpc/wEjq6O9qs6IrH3o+OXIDsEEMZuUXYUkScoY0ZXZcJQmeNXZ824VGtXdR
16
+ iQyFurRJelIDwVwr/RiErErEixX+lStH/+dOWyhgfBBHgAWnRGGnLpee072+ysN6
17
+ 0TcCAwEAAaAjMCEGCSqGSIb3DQEJBzEUDBJwYXNzd29yZCBjaGFsbGVuZ2UwDQYJ
18
+ KoZIhvcNAQELBQADggIBAI7XFsvAGB92isJj5vGtrVh3ZRLwpnz8Mv3UcG1Z7aHx
19
+ oRFcoLHoSdzCRMKmrc2BU9WKtV6xnmVst5wIaxvk+1HpbuLJqrbWyjcLnOMqDuYR
20
+ 1WJuJLUd1n7vjoofkbEPeCP1+E8s2wOEhn2cknlIa5Yh4wtQ8ufrT9M0RFnzVb9+
21
+ KCwm2kfZA5guFz0XllylJzaNly3jIcYp6EBfUZLTGvboio9NSBDtU04u4qhfTHEy
22
+ gKERDU9BIdY8ZL9RExlZokMS9VgC7xG6qXt6QEctRHpRcJ0GEeZksVPeVqgv9gqk
23
+ aekh6WaAGIdGJJrnM19KuAwlrYwjl8WSeFNRxTOfvwkvlCmsEVoXANCBOhmNWO+3
24
+ 0HSy4S2ZfPtjlBxZOT0EFMaOM9LEuZqF9Mc3DU8xgC+/ZMFMJiWhzyo7/JVrr623
25
+ /kLtc/RirJVHdEF5iZTxiz3mkVWqKYzdAlb+iSfn3YdwCWh/du3lXWW8Ctg8HufM
26
+ o/6xOYnzJubCKWwHBtSfo7hjaGMDOGSzXTyNxqlzRW50zXpgAxIcf9XJ+Gq36++Q
27
+ QoyMKX6O2r6oHXSnF5ojDW6QOAfOSdrX5fc9uXsbVAGh5vYeLDcekZwGSZbZ608a
28
+ 2P4ARIWNNOYBaGQsoElfPXRFqcU9SLB+qXEMMDde/y0FNWEOe+b+vlH1g14aiCSE
29
+ -----END CERTIFICATE REQUEST-----
@@ -0,0 +1,34 @@
1
+ 'use strict'
2
+
3
+ var fs = require('fs')
4
+ var https = require('https')
5
+ var options = { key: fs.readFileSync('./server.key'),
6
+ cert: fs.readFileSync('./server.crt') }
7
+
8
+ var server = https.createServer(options, function (req, res) {
9
+ res.writeHead(200)
10
+ res.end()
11
+ server.close()
12
+ })
13
+ server.listen(0, function () {
14
+ var ca = fs.readFileSync('./ca.crt')
15
+ var agent = new https.Agent({
16
+ host: 'localhost',
17
+ port: this.address().port,
18
+ ca: ca
19
+ })
20
+
21
+ https.request({ host: 'localhost',
22
+ method: 'HEAD',
23
+ port: this.address().port,
24
+ headers: { host: 'testing.request.mikealrogers.com' },
25
+ agent: agent,
26
+ ca: [ ca ],
27
+ path: '/' }, function (res) {
28
+ if (res.socket.authorized) {
29
+ console.log('node test: OK')
30
+ } else {
31
+ throw new Error(res.socket.authorizationError)
32
+ }
33
+ }).end()
34
+ })
@@ -0,0 +1,51 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ 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
51
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,16 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIChzCCAfACCQDauvz/KHp8ejANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
3
+ VVMxCzAJBgNVBAgTAkNBMRAwDgYDVQQHEwdPYWtsYW5kMQwwCgYDVQQKEwNucG0x
4
+ IjAgBgNVBAsTGW5wbSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxDjAMBgNVBAMTBW5w
5
+ bUNBMRcwFQYJKoZIhvcNAQkBFghpQGl6cy5tZTAeFw0xMTA5MDUwMTQ3MTdaFw0y
6
+ MTA5MDIwMTQ3MTdaMIGHMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEDAOBgNV
7
+ BAcTB09ha2xhbmQxDDAKBgNVBAoTA25wbTEiMCAGA1UECxMZbnBtIENlcnRpZmlj
8
+ YXRlIEF1dGhvcml0eTEOMAwGA1UEAxMFbnBtQ0ExFzAVBgkqhkiG9w0BCQEWCGlA
9
+ aXpzLm1lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDLI4tIqPpRW+ACw9GE
10
+ OgBlJZwK5f8nnKCLK629Pv5yJpQKs3DENExAyOgDcyaF0HD0zk8zTp+ZsLaNdKOz
11
+ Gn2U181KGprGKAXP6DU6ByOJDWmTlY6+Ad1laYT0m64fERSpHw/hjD3D+iX4aMOl
12
+ y0HdbT5m1ZGh6SJz3ZqxavhHLQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAC4ySDbC
13
+ l7W1WpLmtLGEQ/yuMLUf6Jy/vr+CRp4h+UzL+IQpCv8FfxsYE7dhf/bmWTEupBkv
14
+ yNL18lipt2jSvR3v6oAHAReotvdjqhxddpe5Holns6EQd1/xEZ7sB1YhQKJtvUrl
15
+ ZNufy1Jf1r0ldEGeA+0ISck7s+xSh9rQD2Op
16
+ -----END CERTIFICATE-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIICQzCCAawCCQCO/XWtRFck1jANBgkqhkiG9w0BAQUFADBmMQswCQYDVQQGEwJU
3
+ SDEQMA4GA1UECBMHQmFuZ2tvazEOMAwGA1UEBxMFU2lsb20xGzAZBgNVBAoTElRo
4
+ ZSBSZXF1ZXN0IE1vZHVsZTEYMBYGA1UEAxMPcmVxdWVzdC5leGFtcGxlMB4XDTEx
5
+ MTIwMzAyMjkyM1oXDTIxMTEzMDAyMjkyM1owZjELMAkGA1UEBhMCVEgxEDAOBgNV
6
+ BAgTB0Jhbmdrb2sxDjAMBgNVBAcTBVNpbG9tMRswGQYDVQQKExJUaGUgUmVxdWVz
7
+ dCBNb2R1bGUxGDAWBgNVBAMTD3JlcXVlc3QuZXhhbXBsZTCBnzANBgkqhkiG9w0B
8
+ AQEFAAOBjQAwgYkCgYEAwmctddZqlA48+NXs0yOy92DijcQV1jf87zMiYAIlNUto
9
+ wghVbTWgJU5r0pdKrD16AptnWJTzKanhItEX8XCCPgsNkq1afgTtJP7rNkwu3xcj
10
+ eIMkhJg/ay4ZnkbnhYdsii5VTU5prix6AqWRAhbkBgoA+iVyHyof8wvZyKBoFTMC
11
+ AwEAATANBgkqhkiG9w0BAQUFAAOBgQB6BybMJbpeiABgihDfEVBcAjDoQ8gUMgwV
12
+ l4NulugfKTDmArqnR9aPd4ET5jX5dkMP4bwCHYsvrcYDeWEQy7x5WWuylOdKhua4
13
+ L4cEi2uDCjqEErIG3cc1MCOk6Cl6Ld6tkIzQSf953qfdEACRytOeUqLNQcrXrqeE
14
+ c7U8F6MWLQ==
15
+ -----END CERTIFICATE-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXgIBAAKBgQDCZy111mqUDjz41ezTI7L3YOKNxBXWN/zvMyJgAiU1S2jCCFVt
3
+ NaAlTmvSl0qsPXoCm2dYlPMpqeEi0RfxcII+Cw2SrVp+BO0k/us2TC7fFyN4gySE
4
+ mD9rLhmeRueFh2yKLlVNTmmuLHoCpZECFuQGCgD6JXIfKh/zC9nIoGgVMwIDAQAB
5
+ AoGBALXFwfUf8vHTSmGlrdZS2AGFPvEtuvldyoxi9K5u8xmdFCvxnOcLsF2RsTHt
6
+ Mu5QYWhUpNJoG+IGLTPf7RJdj/kNtEs7xXqWy4jR36kt5z5MJzqiK+QIgiO9UFWZ
7
+ fjUb6oeDnTIJA9YFBdYi97MDuL89iU/UK3LkJN3hd4rciSbpAkEA+MCkowF5kSFb
8
+ rkOTBYBXZfiAG78itDXN6DXmqb9XYY+YBh3BiQM28oxCeQYyFy6pk/nstnd4TXk6
9
+ V/ryA2g5NwJBAMgRKTY9KvxJWbESeMEFe2iBIV0c26/72Amgi7ZKUCLukLfD4tLF
10
+ +WSZdmTbbqI1079YtwaiOVfiLm45Q/3B0eUCQAaQ/0eWSGE+Yi8tdXoVszjr4GXb
11
+ G81qBi91DMu6U1It+jNfIba+MPsiHLcZJMVb4/oWBNukN7bD1nhwFWdlnu0CQQCf
12
+ Is9WHkdvz2RxbZDxb8verz/7kXXJQJhx5+rZf7jIYFxqX3yvTNv3wf2jcctJaWlZ
13
+ fVZwB193YSivcgt778xlAkEAprYUz3jczjF5r2hrgbizPzPDR94tM5BTO3ki2v3w
14
+ kbf+j2g7FNAx6kZiVN8XwfLc8xEeUGiPKwtq3ddPDFh17w==
15
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,102 @@
1
+ 'use strict'
2
+
3
+ var request = require('../index')
4
+ var version = require('../lib/helpers').version
5
+ var http = require('http')
6
+ var ForeverAgent = require('forever-agent')
7
+ var tape = require('tape')
8
+
9
+ var s = http.createServer(function (req, res) {
10
+ res.statusCode = 200
11
+ res.end()
12
+ })
13
+
14
+ tape('setup', function (t) {
15
+ s.listen(0, function () {
16
+ s.port = this.address().port
17
+ s.url = 'http://localhost:' + s.port
18
+ t.end()
19
+ })
20
+ })
21
+
22
+ function httpAgent (t, options, req) {
23
+ var r = (req || request)(options, function (_err, res, body) {
24
+ t.ok(r.agent instanceof http.Agent, 'is http.Agent')
25
+ t.equal(r.agent.options.keepAlive, true, 'is keepAlive')
26
+ t.equal(Object.keys(r.agent.sockets).length, 1, '1 socket name')
27
+
28
+ var name = (typeof r.agent.getName === 'function')
29
+ ? r.agent.getName({port: s.port})
30
+ : 'localhost:' + s.port // node 0.10-
31
+ t.equal(r.agent.sockets[name].length, 1, '1 open socket')
32
+
33
+ var socket = r.agent.sockets[name][0]
34
+ socket.on('close', function () {
35
+ t.equal(Object.keys(r.agent.sockets).length, 0, '0 open sockets')
36
+ t.end()
37
+ })
38
+ socket.end()
39
+ })
40
+ }
41
+
42
+ function foreverAgent (t, options, req) {
43
+ var r = (req || request)(options, function (_err, res, body) {
44
+ t.ok(r.agent instanceof ForeverAgent, 'is ForeverAgent')
45
+ t.equal(Object.keys(r.agent.sockets).length, 1, '1 socket name')
46
+
47
+ var name = 'localhost:' + s.port // node 0.10-
48
+ t.equal(r.agent.sockets[name].length, 1, '1 open socket')
49
+
50
+ var socket = r.agent.sockets[name][0]
51
+ socket.on('close', function () {
52
+ t.equal(Object.keys(r.agent.sockets[name]).length, 0, '0 open sockets')
53
+ t.end()
54
+ })
55
+ socket.end()
56
+ })
57
+ }
58
+
59
+ // http.Agent
60
+
61
+ tape('options.agent', function (t) {
62
+ httpAgent(t, {
63
+ uri: s.url,
64
+ agent: new http.Agent({keepAlive: true})
65
+ })
66
+ })
67
+
68
+ tape('options.agentClass + options.agentOptions', function (t) {
69
+ httpAgent(t, {
70
+ uri: s.url,
71
+ agentClass: http.Agent,
72
+ agentOptions: {keepAlive: true}
73
+ })
74
+ })
75
+
76
+ // forever-agent
77
+
78
+ tape('options.forever = true', function (t) {
79
+ var v = version()
80
+ var options = {
81
+ uri: s.url,
82
+ forever: true
83
+ }
84
+
85
+ if (v.major === 0 && v.minor <= 10) { foreverAgent(t, options) } else { httpAgent(t, options) }
86
+ })
87
+
88
+ tape('forever() method', function (t) {
89
+ var v = version()
90
+ var options = {
91
+ uri: s.url
92
+ }
93
+ var r = request.forever({maxSockets: 1})
94
+
95
+ if (v.major === 0 && v.minor <= 10) { foreverAgent(t, options, r) } else { httpAgent(t, options, r) }
96
+ })
97
+
98
+ tape('cleanup', function (t) {
99
+ s.close(function () {
100
+ t.end()
101
+ })
102
+ })
@@ -0,0 +1,51 @@
1
+ 'use strict'
2
+
3
+ // test-agent.js modifies the process state
4
+ // causing these tests to fail when running under single process via tape
5
+ if (!process.env.running_under_istanbul) {
6
+ var request = require('../index')
7
+ var http = require('http')
8
+ var server = require('./server')
9
+ var tape = require('tape')
10
+
11
+ var s = server.createServer()
12
+
13
+ s.on('/', function (req, resp) {
14
+ resp.statusCode = 200
15
+ resp.end('')
16
+ })
17
+
18
+ tape('setup', function (t) {
19
+ s.listen(0, function () {
20
+ t.end()
21
+ })
22
+ })
23
+
24
+ tape('without agentOptions should use global agent', function (t) {
25
+ var r = request(s.url, function (err, res, body) {
26
+ t.equal(err, null)
27
+ t.equal(res.statusCode, 200)
28
+ t.deepEqual(r.agent, http.globalAgent)
29
+ t.equal(Object.keys(r.pool).length, 0)
30
+ t.end()
31
+ })
32
+ })
33
+
34
+ tape('with agentOptions should apply to new agent in pool', function (t) {
35
+ var r = request(s.url, {
36
+ agentOptions: { foo: 'bar' }
37
+ }, function (err, res, body) {
38
+ t.equal(err, null)
39
+ t.equal(res.statusCode, 200)
40
+ t.equal(r.agent.options.foo, 'bar')
41
+ t.equal(Object.keys(r.pool).length, 1)
42
+ t.end()
43
+ })
44
+ })
45
+
46
+ tape('cleanup', function (t) {
47
+ s.close(function () {
48
+ t.end()
49
+ })
50
+ })
51
+ }
@@ -0,0 +1,33 @@
1
+ 'use strict'
2
+
3
+ var http = require('http')
4
+ var request = require('../index')
5
+ var tape = require('tape')
6
+ var server
7
+
8
+ tape('setup', function (t) {
9
+ server = http.createServer()
10
+ server.on('request', function (req, res) {
11
+ res.writeHead(202)
12
+ req.pipe(res)
13
+ })
14
+ server.listen(0, function () {
15
+ server.url = 'http://localhost:' + this.address().port
16
+ t.end()
17
+ })
18
+ })
19
+
20
+ tape('callback option', function (t) {
21
+ request({
22
+ url: server.url,
23
+ callback: function (err, res, body) {
24
+ t.error(err)
25
+ t.equal(res.statusCode, 202)
26
+ t.end()
27
+ }
28
+ })
29
+ })
30
+
31
+ tape('cleanup', function (t) {
32
+ server.close(t.end)
33
+ })
@@ -0,0 +1,123 @@
1
+ 'use strict'
2
+
3
+ var request = require('../index')
4
+ var server = require('./server')
5
+ var tape = require('tape')
6
+
7
+ var s = server.createServer()
8
+
9
+ var path = '/aws.json'
10
+
11
+ s.on(path, function (req, res) {
12
+ res.writeHead(200, {
13
+ 'Content-Type': 'application/json'
14
+ })
15
+ res.end(JSON.stringify(req.headers))
16
+ })
17
+
18
+ tape('setup', function (t) {
19
+ s.listen(0, function () {
20
+ t.end()
21
+ })
22
+ })
23
+
24
+ tape('default behaviour: aws-sign2 without sign_version key', function (t) {
25
+ var options = {
26
+ url: s.url + path,
27
+ aws: {
28
+ key: 'my_key',
29
+ secret: 'my_secret'
30
+ },
31
+ json: true
32
+ }
33
+ request(options, function (err, res, body) {
34
+ t.error(err)
35
+ t.ok(body.authorization)
36
+ t.notOk(body['x-amz-date'])
37
+ t.end()
38
+ })
39
+ })
40
+
41
+ tape('aws-sign4 options', function (t) {
42
+ var options = {
43
+ url: s.url + path,
44
+ aws: {
45
+ key: 'my_key',
46
+ secret: 'my_secret',
47
+ sign_version: 4
48
+ },
49
+ json: true
50
+ }
51
+ request(options, function (err, res, body) {
52
+ t.error(err)
53
+ t.ok(body.authorization)
54
+ t.ok(body['x-amz-date'])
55
+ t.notok(body['x-amz-security-token'])
56
+ t.end()
57
+ })
58
+ })
59
+
60
+ tape('aws-sign4 options with session token', function (t) {
61
+ var options = {
62
+ url: s.url + path,
63
+ aws: {
64
+ key: 'my_key',
65
+ secret: 'my_secret',
66
+ session: 'session',
67
+ sign_version: 4
68
+ },
69
+ json: true
70
+ }
71
+ request(options, function (err, res, body) {
72
+ t.error(err)
73
+ t.ok(body.authorization)
74
+ t.ok(body['x-amz-date'])
75
+ t.ok(body['x-amz-security-token'])
76
+ t.end()
77
+ })
78
+ })
79
+
80
+ tape('aws-sign4 options with service', function (t) {
81
+ var serviceName = 'UNIQUE_SERVICE_NAME'
82
+ var options = {
83
+ url: s.url + path,
84
+ aws: {
85
+ key: 'my_key',
86
+ secret: 'my_secret',
87
+ sign_version: 4,
88
+ service: serviceName
89
+ },
90
+ json: true
91
+ }
92
+ request(options, function (err, res, body) {
93
+ t.error(err)
94
+ t.ok(body.authorization.includes(serviceName))
95
+ t.end()
96
+ })
97
+ })
98
+
99
+ tape('aws-sign4 with additional headers', function (t) {
100
+ var options = {
101
+ url: s.url + path,
102
+ headers: {
103
+ 'X-Custom-Header': 'custom'
104
+ },
105
+ aws: {
106
+ key: 'my_key',
107
+ secret: 'my_secret',
108
+ sign_version: 4
109
+ },
110
+ json: true
111
+ }
112
+ request(options, function (err, res, body) {
113
+ t.error(err)
114
+ t.ok(body.authorization.includes('x-custom-header'))
115
+ t.end()
116
+ })
117
+ })
118
+
119
+ tape('cleanup', function (t) {
120
+ s.close(function () {
121
+ t.end()
122
+ })
123
+ })
@@ -0,0 +1,133 @@
1
+ 'use strict'
2
+
3
+ var http = require('http')
4
+ var request = require('../index')
5
+ var tape = require('tape')
6
+ var url = require('url')
7
+
8
+ var s = http.createServer(function (req, res) {
9
+ if (req.url === '/redirect/') {
10
+ res.writeHead(302, {
11
+ location: '/'
12
+ })
13
+ } else {
14
+ res.statusCode = 200
15
+ res.setHeader('X-PATH', req.url)
16
+ }
17
+ res.end('ok')
18
+ })
19
+
20
+ function addTest (baseUrl, uri, expected) {
21
+ tape('test baseurl="' + baseUrl + '" uri="' + uri + '"', function (t) {
22
+ request(uri, { baseUrl: baseUrl }, function (err, resp, body) {
23
+ t.equal(err, null)
24
+ t.equal(body, 'ok')
25
+ t.equal(resp.headers['x-path'], expected)
26
+ t.end()
27
+ })
28
+ })
29
+ }
30
+
31
+ function addTests () {
32
+ addTest(s.url, '', '/')
33
+ addTest(s.url + '/', '', '/')
34
+ addTest(s.url, '/', '/')
35
+ addTest(s.url + '/', '/', '/')
36
+ addTest(s.url + '/api', '', '/api')
37
+ addTest(s.url + '/api/', '', '/api/')
38
+ addTest(s.url + '/api', '/', '/api/')
39
+ addTest(s.url + '/api/', '/', '/api/')
40
+ addTest(s.url + '/api', 'resource', '/api/resource')
41
+ addTest(s.url + '/api/', 'resource', '/api/resource')
42
+ addTest(s.url + '/api', '/resource', '/api/resource')
43
+ addTest(s.url + '/api/', '/resource', '/api/resource')
44
+ addTest(s.url + '/api', 'resource/', '/api/resource/')
45
+ addTest(s.url + '/api/', 'resource/', '/api/resource/')
46
+ addTest(s.url + '/api', '/resource/', '/api/resource/')
47
+ addTest(s.url + '/api/', '/resource/', '/api/resource/')
48
+ }
49
+
50
+ tape('setup', function (t) {
51
+ s.listen(0, function () {
52
+ s.url = 'http://localhost:' + this.address().port
53
+ addTests()
54
+ tape('cleanup', function (t) {
55
+ s.close(function () {
56
+ t.end()
57
+ })
58
+ })
59
+ t.end()
60
+ })
61
+ })
62
+
63
+ tape('baseUrl', function (t) {
64
+ request('resource', {
65
+ baseUrl: s.url
66
+ }, function (err, resp, body) {
67
+ t.equal(err, null)
68
+ t.equal(body, 'ok')
69
+ t.end()
70
+ })
71
+ })
72
+
73
+ tape('baseUrl defaults', function (t) {
74
+ var withDefaults = request.defaults({
75
+ baseUrl: s.url
76
+ })
77
+ withDefaults('resource', function (err, resp, body) {
78
+ t.equal(err, null)
79
+ t.equal(body, 'ok')
80
+ t.end()
81
+ })
82
+ })
83
+
84
+ tape('baseUrl and redirects', function (t) {
85
+ request('/', {
86
+ baseUrl: s.url + '/redirect'
87
+ }, function (err, resp, body) {
88
+ t.equal(err, null)
89
+ t.equal(body, 'ok')
90
+ t.equal(resp.headers['x-path'], '/')
91
+ t.end()
92
+ })
93
+ })
94
+
95
+ tape('error when baseUrl is not a String', function (t) {
96
+ request('resource', {
97
+ baseUrl: url.parse(s.url + '/path')
98
+ }, function (err, resp, body) {
99
+ t.notEqual(err, null)
100
+ t.equal(err.message, 'options.baseUrl must be a string')
101
+ t.end()
102
+ })
103
+ })
104
+
105
+ tape('error when uri is not a String', function (t) {
106
+ request(url.parse('resource'), {
107
+ baseUrl: s.url + '/path'
108
+ }, function (err, resp, body) {
109
+ t.notEqual(err, null)
110
+ t.equal(err.message, 'options.uri must be a string when using options.baseUrl')
111
+ t.end()
112
+ })
113
+ })
114
+
115
+ tape('error on baseUrl and uri with scheme', function (t) {
116
+ request(s.url + '/path/ignoring/baseUrl', {
117
+ baseUrl: s.url + '/path/'
118
+ }, function (err, resp, body) {
119
+ t.notEqual(err, null)
120
+ t.equal(err.message, 'options.uri must be a path when using options.baseUrl')
121
+ t.end()
122
+ })
123
+ })
124
+
125
+ tape('error on baseUrl and uri with scheme-relative url', function (t) {
126
+ request(s.url.slice('http:'.length) + '/path/ignoring/baseUrl', {
127
+ baseUrl: s.url + '/path/'
128
+ }, function (err, resp, body) {
129
+ t.notEqual(err, null)
130
+ t.equal(err.message, 'options.uri must be a path when using options.baseUrl')
131
+ t.end()
132
+ })
133
+ })