mirror of
https://github.com/shimataro/ssh-key-action.git
synced 2025-06-19 22:52:10 +10:00
* first action! (#1)
This commit is contained in:
parent
8deacc95b1
commit
ace1e6a69a
3750 changed files with 1155519 additions and 0 deletions
228
node_modules/npm-registry-fetch/CHANGELOG.md
generated
vendored
Normal file
228
node_modules/npm-registry-fetch/CHANGELOG.md
generated
vendored
Normal file
|
@ -0,0 +1,228 @@
|
|||
# Change Log
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
<a name="4.0.0"></a>
|
||||
# [4.0.0](https://github.com/npm/registry-fetch/compare/v3.9.1...v4.0.0) (2019-07-15)
|
||||
|
||||
|
||||
* cacache@12.0.0, infer uid from cache folder ([0c4f060](https://github.com/npm/registry-fetch/commit/0c4f060))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* uid and gid are inferred from cache folder, rather than
|
||||
being passed in as options.
|
||||
|
||||
|
||||
|
||||
<a name="3.9.1"></a>
|
||||
## [3.9.1](https://github.com/npm/registry-fetch/compare/v3.9.0...v3.9.1) (2019-07-02)
|
||||
|
||||
|
||||
|
||||
<a name="3.9.0"></a>
|
||||
# [3.9.0](https://github.com/npm/registry-fetch/compare/v3.8.0...v3.9.0) (2019-01-24)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **auth:** support username:password encoded legacy _auth ([a91f90c](https://github.com/npm/registry-fetch/commit/a91f90c))
|
||||
|
||||
|
||||
|
||||
<a name="3.8.0"></a>
|
||||
# [3.8.0](https://github.com/npm/registry-fetch/compare/v3.7.0...v3.8.0) (2018-08-23)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **mapJson:** add support for passing in json stream mapper ([0600986](https://github.com/npm/registry-fetch/commit/0600986))
|
||||
|
||||
|
||||
|
||||
<a name="3.7.0"></a>
|
||||
# [3.7.0](https://github.com/npm/registry-fetch/compare/v3.6.0...v3.7.0) (2018-08-23)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **json.stream:** add utility function for streamed JSON parsing ([051d969](https://github.com/npm/registry-fetch/commit/051d969))
|
||||
|
||||
|
||||
|
||||
<a name="3.6.0"></a>
|
||||
# [3.6.0](https://github.com/npm/registry-fetch/compare/v3.5.0...v3.6.0) (2018-08-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **docs:** document opts.forceAuth ([40bcd65](https://github.com/npm/registry-fetch/commit/40bcd65))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **opts.ignoreBody:** add a boolean to throw away response bodies ([6923702](https://github.com/npm/registry-fetch/commit/6923702))
|
||||
|
||||
|
||||
|
||||
<a name="3.5.0"></a>
|
||||
# [3.5.0](https://github.com/npm/registry-fetch/compare/v3.4.0...v3.5.0) (2018-08-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **pkgid:** heuristic pkgid calculation for errors ([2e789a5](https://github.com/npm/registry-fetch/commit/2e789a5))
|
||||
|
||||
|
||||
|
||||
<a name="3.4.0"></a>
|
||||
# [3.4.0](https://github.com/npm/registry-fetch/compare/v3.3.0...v3.4.0) (2018-08-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **deps:** use new figgy-pudding with aliases fix ([0308f54](https://github.com/npm/registry-fetch/commit/0308f54))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **auth:** add forceAuth option to force a specific auth mechanism ([4524d17](https://github.com/npm/registry-fetch/commit/4524d17))
|
||||
|
||||
|
||||
|
||||
<a name="3.3.0"></a>
|
||||
# [3.3.0](https://github.com/npm/registry-fetch/compare/v3.2.1...v3.3.0) (2018-08-21)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **query:** stop including undefined keys ([4718b1b](https://github.com/npm/registry-fetch/commit/4718b1b))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **otp:** use heuristic detection for malformed EOTP responses ([f035194](https://github.com/npm/registry-fetch/commit/f035194))
|
||||
|
||||
|
||||
|
||||
<a name="3.2.1"></a>
|
||||
## [3.2.1](https://github.com/npm/registry-fetch/compare/v3.2.0...v3.2.1) (2018-08-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **opts:** pass through non-null opts.retry ([beba040](https://github.com/npm/registry-fetch/commit/beba040))
|
||||
|
||||
|
||||
|
||||
<a name="3.2.0"></a>
|
||||
# [3.2.0](https://github.com/npm/registry-fetch/compare/v3.1.1...v3.2.0) (2018-07-27)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **gzip:** add opts.gzip convenience opt ([340abe0](https://github.com/npm/registry-fetch/commit/340abe0))
|
||||
|
||||
|
||||
|
||||
<a name="3.1.1"></a>
|
||||
## [3.1.1](https://github.com/npm/registry-fetch/compare/v3.1.0...v3.1.1) (2018-04-09)
|
||||
|
||||
|
||||
|
||||
<a name="3.1.0"></a>
|
||||
# [3.1.0](https://github.com/npm/registry-fetch/compare/v3.0.0...v3.1.0) (2018-04-09)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **config:** support no-proxy and https-proxy options ([9aa906b](https://github.com/npm/registry-fetch/commit/9aa906b))
|
||||
|
||||
|
||||
|
||||
<a name="3.0.0"></a>
|
||||
# [3.0.0](https://github.com/npm/registry-fetch/compare/v2.1.0...v3.0.0) (2018-04-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **api:** pacote integration-related fixes ([a29de4f](https://github.com/npm/registry-fetch/commit/a29de4f))
|
||||
* **config:** stop caring about opts.config ([5856a6f](https://github.com/npm/registry-fetch/commit/5856a6f))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* **config:** opts.config is no longer supported. Pass the options down in opts itself.
|
||||
|
||||
|
||||
|
||||
<a name="2.1.0"></a>
|
||||
# [2.1.0](https://github.com/npm/registry-fetch/compare/v2.0.0...v2.1.0) (2018-04-08)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **token:** accept opts.token for opts._authToken ([108c9f0](https://github.com/npm/registry-fetch/commit/108c9f0))
|
||||
|
||||
|
||||
|
||||
<a name="2.0.0"></a>
|
||||
# [2.0.0](https://github.com/npm/registry-fetch/compare/v1.1.1...v2.0.0) (2018-04-08)
|
||||
|
||||
|
||||
### meta
|
||||
|
||||
* drop support for node@4 ([758536e](https://github.com/npm/registry-fetch/commit/758536e))
|
||||
|
||||
|
||||
### BREAKING CHANGES
|
||||
|
||||
* node@4 is no longer supported
|
||||
|
||||
|
||||
|
||||
<a name="1.1.1"></a>
|
||||
## [1.1.1](https://github.com/npm/registry-fetch/compare/v1.1.0...v1.1.1) (2018-04-06)
|
||||
|
||||
|
||||
|
||||
<a name="1.1.0"></a>
|
||||
# [1.1.0](https://github.com/npm/registry-fetch/compare/v1.0.1...v1.1.0) (2018-03-16)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **specs:** can use opts.spec to trigger pickManifest ([85c4ac9](https://github.com/npm/registry-fetch/commit/85c4ac9))
|
||||
|
||||
|
||||
|
||||
<a name="1.0.1"></a>
|
||||
## [1.0.1](https://github.com/npm/registry-fetch/compare/v1.0.0...v1.0.1) (2018-03-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **query:** oops console.log ([870e4f5](https://github.com/npm/registry-fetch/commit/870e4f5))
|
||||
|
||||
|
||||
|
||||
<a name="1.0.0"></a>
|
||||
# 1.0.0 (2018-03-16)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **auth:** get auth working with all the little details ([84b94ba](https://github.com/npm/registry-fetch/commit/84b94ba))
|
||||
* **deps:** add bluebird as an actual dep ([1286e31](https://github.com/npm/registry-fetch/commit/1286e31))
|
||||
* **errors:** Unknown auth errors use default code ([#1](https://github.com/npm/registry-fetch/issues/1)) ([3d91b93](https://github.com/npm/registry-fetch/commit/3d91b93))
|
||||
* **standard:** remove args from invocation ([9620a0a](https://github.com/npm/registry-fetch/commit/9620a0a))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **api:** baseline kinda-working API impl ([bf91f9f](https://github.com/npm/registry-fetch/commit/bf91f9f))
|
||||
* **body:** automatic handling of different opts.body values ([f3b97db](https://github.com/npm/registry-fetch/commit/f3b97db))
|
||||
* **config:** nicer input config input handling ([b9ce21d](https://github.com/npm/registry-fetch/commit/b9ce21d))
|
||||
* **opts:** use figgy-pudding for opts handling ([0abd527](https://github.com/npm/registry-fetch/commit/0abd527))
|
||||
* **query:** add query utility support ([65ea8b1](https://github.com/npm/registry-fetch/commit/65ea8b1))
|
16
node_modules/npm-registry-fetch/LICENSE.md
generated
vendored
Normal file
16
node_modules/npm-registry-fetch/LICENSE.md
generated
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
ISC License
|
||||
|
||||
Copyright (c) npm, Inc.
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for
|
||||
any purpose with or without fee is hereby granted, provided that the
|
||||
above copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS
|
||||
ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
||||
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
|
||||
USE OR PERFORMANCE OF THIS SOFTWARE.
|
609
node_modules/npm-registry-fetch/README.md
generated
vendored
Normal file
609
node_modules/npm-registry-fetch/README.md
generated
vendored
Normal file
|
@ -0,0 +1,609 @@
|
|||
# npm-registry-fetch [](https://npm.im/npm-registry-fetch) [](https://npm.im/npm-registry-fetch) [](https://travis-ci.org/npm/npm-registry-fetch) [](https://ci.appveyor.com/project/npm/npm-registry-fetch) [](https://coveralls.io/github/npm/npm-registry-fetch?branch=latest)
|
||||
|
||||
[`npm-registry-fetch`](https://github.com/npm/npm-registry-fetch) is a Node.js
|
||||
library that implements a `fetch`-like API for accessing npm registry APIs
|
||||
consistently. It's able to consume npm-style configuration values and has all
|
||||
the necessary logic for picking registries, handling scopes, and dealing with
|
||||
authentication details built-in.
|
||||
|
||||
This package is meant to replace the older
|
||||
[`npm-registry-client`](https://npm.im/npm-registry-client).
|
||||
|
||||
## Example
|
||||
|
||||
```javascript
|
||||
const npmFetch = require('npm-registry-fetch')
|
||||
|
||||
console.log(
|
||||
await npmFetch.json('/-/ping')
|
||||
)
|
||||
```
|
||||
|
||||
## Table of Contents
|
||||
|
||||
* [Installing](#install)
|
||||
* [Example](#example)
|
||||
* [Contributing](#contributing)
|
||||
* [API](#api)
|
||||
* [`fetch`](#fetch)
|
||||
* [`fetch.json`](#fetch-json)
|
||||
* [`fetch` options](#fetch-opts)
|
||||
|
||||
### Install
|
||||
|
||||
`$ npm install npm-registry-fetch`
|
||||
|
||||
### Contributing
|
||||
|
||||
The npm team enthusiastically welcomes contributions and project participation!
|
||||
There's a bunch of things you can do if you want to contribute! The [Contributor
|
||||
Guide](CONTRIBUTING.md) has all the information you need for everything from
|
||||
reporting bugs to contributing entire new features. Please don't hesitate to
|
||||
jump in if you'd like to, or even ask us questions if something isn't clear.
|
||||
|
||||
All participants and maintainers in this project are expected to follow [Code of
|
||||
Conduct](CODE_OF_CONDUCT.md), and just generally be excellent to each other.
|
||||
|
||||
Please refer to the [Changelog](CHANGELOG.md) for project history details, too.
|
||||
|
||||
Happy hacking!
|
||||
|
||||
### API
|
||||
|
||||
#### <a name="fetch"></a> `> fetch(url, [opts]) -> Promise<Response>`
|
||||
|
||||
Performs a request to a given URL.
|
||||
|
||||
The URL can be either a full URL, or a path to one. The appropriate registry
|
||||
will be automatically picked if only a URL path is given.
|
||||
|
||||
For available options, please see the section on [`fetch` options](#fetch-opts).
|
||||
|
||||
##### Example
|
||||
|
||||
```javascript
|
||||
const res = await fetch('/-/ping')
|
||||
console.log(res.headers)
|
||||
res.on('data', d => console.log(d.toString('utf8')))
|
||||
```
|
||||
|
||||
#### <a name="fetch-json"></a> `> fetch.json(url, [opts]) -> Promise<ResponseJSON>`
|
||||
|
||||
Performs a request to a given registry URL, parses the body of the response as
|
||||
JSON, and returns it as its final value. This is a utility shorthand for
|
||||
`fetch(url).then(res => res.json())`.
|
||||
|
||||
For available options, please see the section on [`fetch` options](#fetch-opts).
|
||||
|
||||
##### Example
|
||||
|
||||
```javascript
|
||||
const res = await fetch.json('/-/ping')
|
||||
console.log(res) // Body parsed as JSON
|
||||
```
|
||||
|
||||
#### <a name="fetch-json-stream"></a> `> fetch.json.stream(url, jsonPath, [opts]) -> Stream`
|
||||
|
||||
Performs a request to a given registry URL and parses the body of the response
|
||||
as JSON, with each entry being emitted through the stream.
|
||||
|
||||
The `jsonPath` argument is a [`JSONStream.parse()`
|
||||
path](https://github.com/dominictarr/JSONStream#jsonstreamparsepath), and the
|
||||
returned stream (unlike default `JSONStream`s), has a valid
|
||||
`Symbol.asyncIterator` implementation.
|
||||
|
||||
For available options, please see the section on [`fetch` options](#fetch-opts).
|
||||
|
||||
##### Example
|
||||
|
||||
```javascript
|
||||
console.log('https://npm.im/~zkat has access to the following packages:')
|
||||
for await (let {key, value} of fetch.json.stream('/-/user/zkat/package', '$*')) {
|
||||
console.log(`https://npm.im/${key} (perms: ${value})`)
|
||||
}
|
||||
```
|
||||
|
||||
#### <a name="fetch-opts"></a> `fetch` Options
|
||||
|
||||
Fetch options are optional, and can be passed in as either a Map-like object
|
||||
(one with a `.get()` method), a plain javascript object, or a
|
||||
[`figgy-pudding`](https://npm.im/figgy-pudding) instance.
|
||||
|
||||
##### <a name="opts-agent"></a> `opts.agent`
|
||||
|
||||
* Type: http.Agent
|
||||
* Default: an appropriate agent based on URL protocol and proxy settings
|
||||
|
||||
An [`Agent`](https://nodejs.org/api/http.html#http_class_http_agent) instance to
|
||||
be shared across requests. This allows multiple concurrent `fetch` requests to
|
||||
happen on the same socket.
|
||||
|
||||
You do _not_ need to provide this option unless you want something particularly
|
||||
specialized, since proxy configurations and http/https agents are already
|
||||
automatically managed internally when this option is not passed through.
|
||||
|
||||
##### <a name="opts-body"></a> `opts.body`
|
||||
|
||||
* Type: Buffer | Stream | Object
|
||||
* Default: null
|
||||
|
||||
Request body to send through the outgoing request. Buffers and Streams will be
|
||||
passed through as-is, with a default `content-type` of
|
||||
`application/octet-stream`. Plain JavaScript objects will be `JSON.stringify`ed
|
||||
and the `content-type` will default to `application/json`.
|
||||
|
||||
Use [`opts.headers`](#opts-headers) to set the content-type to something else.
|
||||
|
||||
##### <a name="opts-ca"></a> `opts.ca`
|
||||
|
||||
* Type: String, Array, or null
|
||||
* Default: null
|
||||
|
||||
The Certificate Authority signing certificate that is trusted for SSL
|
||||
connections to the registry. Values should be in PEM format (Windows calls it
|
||||
"Base-64 encoded X.509 (.CER)") with newlines replaced by the string `'\n'`. For
|
||||
example:
|
||||
|
||||
```
|
||||
{
|
||||
ca: '-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----'
|
||||
}
|
||||
```
|
||||
|
||||
Set to `null` to only allow "known" registrars, or to a specific CA cert
|
||||
to trust only that specific signing authority.
|
||||
|
||||
Multiple CAs can be trusted by specifying an array of certificates instead of a
|
||||
single string.
|
||||
|
||||
See also [`opts.strict-ssl`](#opts-strict-ssl), [`opts.ca`](#opts-ca) and
|
||||
[`opts.key`](#opts-key)
|
||||
|
||||
##### <a name="opts-cache"></a> `opts.cache`
|
||||
|
||||
* Type: path
|
||||
* Default: null
|
||||
|
||||
The location of the http cache directory. If provided, certain cachable requests
|
||||
will be cached according to [IETF RFC 7234](https://tools.ietf.org/html/rfc7234)
|
||||
rules. This will speed up future requests, as well as make the cached data
|
||||
available offline if necessary/requested.
|
||||
|
||||
See also [`offline`](#opts-offline), [`prefer-offline`](#opts-prefer-offline),
|
||||
and [`prefer-online`](#opts-prefer-online).
|
||||
|
||||
##### <a name="opts-cert"></a> `opts.cert`
|
||||
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
A client certificate to pass when accessing the registry. Values should be in
|
||||
PEM format (Windows calls it "Base-64 encoded X.509 (.CER)") with newlines
|
||||
replaced by the string `'\n'`. For example:
|
||||
|
||||
```
|
||||
{
|
||||
cert: '-----BEGIN CERTIFICATE-----\nXXXX\nXXXX\n-----END CERTIFICATE-----'
|
||||
}
|
||||
```
|
||||
|
||||
It is _not_ the path to a certificate file (and there is no "certfile" option).
|
||||
|
||||
See also: [`opts.ca`](#opts-ca) and [`opts.key`](#opts-key)
|
||||
|
||||
##### <a name="opts-fetch-retries"></a> `opts.fetch-retries`
|
||||
|
||||
* Type: Number
|
||||
* Default: 2
|
||||
|
||||
The "retries" config for [`retry`](https://npm.im/retry) to use when fetching
|
||||
packages from the registry.
|
||||
|
||||
See also [`opts.retry`](#opts-retry) to provide all retry options as a single
|
||||
object.
|
||||
|
||||
##### <a name="opts-fetch-retry-factor"></a> `opts.fetch-retry-factor`
|
||||
|
||||
* Type: Number
|
||||
* Default: 10
|
||||
|
||||
The "factor" config for [`retry`](https://npm.im/retry) to use when fetching
|
||||
packages.
|
||||
|
||||
See also [`opts.retry`](#opts-retry) to provide all retry options as a single
|
||||
object.
|
||||
|
||||
##### <a name="opts-fetch-retry-mintimeout"></a> `opts.fetch-retry-mintimeout`
|
||||
|
||||
* Type: Number
|
||||
* Default: 10000 (10 seconds)
|
||||
|
||||
The "minTimeout" config for [`retry`](https://npm.im/retry) to use when fetching
|
||||
packages.
|
||||
|
||||
See also [`opts.retry`](#opts-retry) to provide all retry options as a single
|
||||
object.
|
||||
|
||||
##### <a name="opts-fetch-retry-maxtimeout"></a> `opts.fetch-retry-maxtimeout`
|
||||
|
||||
* Type: Number
|
||||
* Default: 60000 (1 minute)
|
||||
|
||||
The "maxTimeout" config for [`retry`](https://npm.im/retry) to use when fetching
|
||||
packages.
|
||||
|
||||
See also [`opts.retry`](#opts-retry) to provide all retry options as a single
|
||||
object.
|
||||
|
||||
##### <a name="opts-force-auth"></a> `opts.force-auth`
|
||||
|
||||
* Alias: `opts.forceAuth`
|
||||
* Type: Object
|
||||
* Default: null
|
||||
|
||||
If present, other auth-related values in `opts` will be completely ignored,
|
||||
including `alwaysAuth`, `email`, and `otp`, when calculating auth for a request,
|
||||
and the auth details in `opts.forceAuth` will be used instead.
|
||||
|
||||
##### <a name="opts-gzip"></a> `opts.gzip`
|
||||
|
||||
* Type: Boolean
|
||||
* Default: false
|
||||
|
||||
If true, `npm-registry-fetch` will set the `Content-Encoding` header to `gzip`
|
||||
and use `zlib.gzip()` or `zlib.createGzip()` to gzip-encode
|
||||
[`opts.body`](#opts-body).
|
||||
|
||||
##### <a name="opts-headers"></a> `opts.headers`
|
||||
|
||||
* Type: Object
|
||||
* Default: null
|
||||
|
||||
Additional headers for the outgoing request. This option can also be used to
|
||||
override headers automatically generated by `npm-registry-fetch`, such as
|
||||
`Content-Type`.
|
||||
|
||||
##### <a name="opts-ignore-body"></a> `opts.ignore-body`
|
||||
|
||||
* Alias: `opts.ignoreBody`
|
||||
* Type: Boolean
|
||||
* Default: false
|
||||
|
||||
If true, the **response body** will be thrown away and `res.body` set to `null`.
|
||||
This will prevent dangling response sockets for requests where you don't usually
|
||||
care what the response body is.
|
||||
|
||||
##### <a name="opts-integrity"></a> `opts.integrity`
|
||||
|
||||
* Type: String | [SRI object](https://npm.im/ssri)
|
||||
* Default: null
|
||||
|
||||
If provided, the response body's will be verified against this integrity string,
|
||||
using [`ssri`](https://npm.im/ssri). If verification succeeds, the response will
|
||||
complete as normal. If verification fails, the response body will error with an
|
||||
`EINTEGRITY` error.
|
||||
|
||||
Body integrity is only verified if the body is actually consumed to completion --
|
||||
that is, if you use `res.json()`/`res.buffer()`, or if you consume the default
|
||||
`res` stream data to its end.
|
||||
|
||||
Cached data will have its integrity automatically verified using the
|
||||
previously-generated integrity hash for the saved request information, so
|
||||
`EINTEGRITY` errors can happen if [`opts.cache`](#opts-cache) is used, even if
|
||||
`opts.integrity` is not passed in.
|
||||
|
||||
##### <a name='opts-is-from-ci'></a> `opts.is-from-ci`
|
||||
|
||||
* Alias: `opts.isFromCI`
|
||||
* Type: Boolean
|
||||
* Default: Based on environment variables
|
||||
|
||||
This is used to populate the `npm-in-ci` request header sent to the registry.
|
||||
|
||||
##### <a name="opts-key"></a> `opts.key`
|
||||
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
A client key to pass when accessing the registry. Values should be in PEM
|
||||
format with newlines replaced by the string `'\n'`. For example:
|
||||
|
||||
```
|
||||
{
|
||||
key: '-----BEGIN PRIVATE KEY-----\nXXXX\nXXXX\n-----END PRIVATE KEY-----'
|
||||
}
|
||||
```
|
||||
|
||||
It is _not_ the path to a key file (and there is no "keyfile" option).
|
||||
|
||||
See also: [`opts.ca`](#opts-ca) and [`opts.cert`](#opts-cert)
|
||||
|
||||
##### <a name="opts-local-address"></a> `opts.local-address`
|
||||
|
||||
* Type: IP Address String
|
||||
* Default: null
|
||||
|
||||
The IP address of the local interface to use when making connections
|
||||
to the registry.
|
||||
|
||||
See also [`opts.proxy`](#opts-proxy)
|
||||
|
||||
##### <a name="opts-log"></a> `opts.log`
|
||||
|
||||
* Type: [`npmlog`](https://npm.im/npmlog)-like
|
||||
* Default: null
|
||||
|
||||
Logger object to use for logging operation details. Must have the same methods
|
||||
as `npmlog`.
|
||||
|
||||
##### <a name="opts-map-json"></a> `opts.map-json`
|
||||
|
||||
* Alias: `mapJson`, `mapJSON`
|
||||
* Type: Function
|
||||
* Default: undefined
|
||||
|
||||
When using `fetch.json.stream()` (NOT `fetch.json()`), this will be passed down
|
||||
to [`JSONStream`](https://npm.im/JSONStream) as the second argument to
|
||||
`JSONStream.parse`, and can be used to transform stream data before output.
|
||||
|
||||
##### <a name="opts-maxsockets"></a> `opts.maxsockets`
|
||||
|
||||
* Alias: `opts.max-sockets`
|
||||
* Type: Integer
|
||||
* Default: 12
|
||||
|
||||
Maximum number of sockets to keep open during requests. Has no effect if
|
||||
[`opts.agent`](#opts-agent) is used.
|
||||
|
||||
##### <a name="opts-method"></a> `opts.method`
|
||||
|
||||
* Type: String
|
||||
* Default: 'GET'
|
||||
|
||||
HTTP method to use for the outgoing request. Case-insensitive.
|
||||
|
||||
##### <a name="opts-noproxy"></a> `opts.noproxy`
|
||||
|
||||
* Type: Boolean
|
||||
* Default: process.env.NOPROXY
|
||||
|
||||
If true, proxying will be disabled even if [`opts.proxy`](#opts-proxy) is used.
|
||||
|
||||
##### <a name="opts-npm-session"></a> `opts.npm-session`
|
||||
|
||||
* Alias: `opts.npmSession`
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
If provided, will be sent in the `npm-session` header. This header is used by
|
||||
the npm registry to identify individual user sessions (usually individual
|
||||
invocations of the CLI).
|
||||
|
||||
##### <a name="opts-offline"></a> `opts.offline`
|
||||
|
||||
* Type: Boolean
|
||||
* Default: false
|
||||
|
||||
Force offline mode: no network requests will be done during install. To allow
|
||||
`npm-registry-fetch` to fill in missing cache data, see
|
||||
[`opts.prefer-offline`](#opts-prefer-offline).
|
||||
|
||||
This option is only really useful if you're also using
|
||||
[`opts.cache`](#opts-cache).
|
||||
|
||||
##### <a name="opts-otp"></a> `opts.otp`
|
||||
|
||||
* Type: Number | String
|
||||
* Default: null
|
||||
|
||||
This is a one-time password from a two-factor authenticator. It is required for
|
||||
certain registry interactions when two-factor auth is enabled for a user
|
||||
account.
|
||||
|
||||
##### <a name="opts-password"></a> `opts.password`
|
||||
|
||||
* Alias: _password
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
Password used for basic authentication. For the more modern authentication
|
||||
method, please use the (more secure) [`opts.token`](#opts-token)
|
||||
|
||||
Can optionally be scoped to a registry by using a "nerf dart" for that registry.
|
||||
That is:
|
||||
|
||||
```
|
||||
{
|
||||
'//registry.npmjs.org/:password': 't0k3nH34r'
|
||||
}
|
||||
```
|
||||
|
||||
See also [`opts.username`](#opts-username)
|
||||
|
||||
##### <a name="opts-prefer-offline"></a> `opts.prefer-offline`
|
||||
|
||||
* Type: Boolean
|
||||
* Default: false
|
||||
|
||||
If true, staleness checks for cached data will be bypassed, but missing data
|
||||
will be requested from the server. To force full offline mode, use
|
||||
[`opts.offline`](#opts-offline).
|
||||
|
||||
This option is generally only useful if you're also using
|
||||
[`opts.cache`](#opts-cache).
|
||||
|
||||
##### <a name="opts-prefer-online"></a> `opts.prefer-online`
|
||||
|
||||
* Type: Boolean
|
||||
* Default: false
|
||||
|
||||
If true, staleness checks for cached data will be forced, making the CLI look
|
||||
for updates immediately even for fresh package data.
|
||||
|
||||
This option is generally only useful if you're also using
|
||||
[`opts.cache`](#opts-cache).
|
||||
|
||||
|
||||
##### <a name="opts-project-scope"></a> `opts.project-scope`
|
||||
|
||||
* Alias: `opts.projectScope`
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
If provided, will be sent in the `npm-scope` header. This header is used by the
|
||||
npm registry to identify the toplevel package scope that a particular project
|
||||
installation is using.
|
||||
|
||||
##### <a name="opts-proxy"></a> `opts.proxy`
|
||||
|
||||
* Type: url
|
||||
* Default: null
|
||||
|
||||
A proxy to use for outgoing http requests. If not passed in, the `HTTP(S)_PROXY`
|
||||
environment variable will be used.
|
||||
|
||||
##### <a name="opts-query"></a> `opts.query`
|
||||
|
||||
* Type: String | Object
|
||||
* Default: null
|
||||
|
||||
If provided, the request URI will have a query string appended to it using this
|
||||
query. If `opts.query` is an object, it will be converted to a query string
|
||||
using
|
||||
[`querystring.stringify()`](https://nodejs.org/api/querystring.html#querystring_querystring_stringify_obj_sep_eq_options).
|
||||
|
||||
If the request URI already has a query string, it will be merged with
|
||||
`opts.query`, preferring `opts.query` values.
|
||||
|
||||
##### <a name="opts-refer"></a> `opts.refer`
|
||||
|
||||
* Alias: `opts.referer`
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
Value to use for the `Referer` header. The npm CLI itself uses this to serialize
|
||||
the npm command line using the given request.
|
||||
|
||||
##### <a name="opts-registry"></a> `opts.registry`
|
||||
|
||||
* Type: URL
|
||||
* Default: `'https://registry.npmjs.org'`
|
||||
|
||||
Registry configuration for a request. If a request URL only includes the URL
|
||||
path, this registry setting will be prepended. This configuration is also used
|
||||
to determine authentication details, so even if the request URL references a
|
||||
completely different host, `opts.registry` will be used to find the auth details
|
||||
for that request.
|
||||
|
||||
See also [`opts.scope`](#opts-scope), [`opts.spec`](#opts-spec), and
|
||||
[`opts.<scope>:registry`](#opts-scope-registry) which can all affect the actual
|
||||
registry URL used by the outgoing request.
|
||||
|
||||
##### <a name="opts-retry"></a> `opts.retry`
|
||||
|
||||
* Type: Object
|
||||
* Default: null
|
||||
|
||||
Single-object configuration for request retry settings. If passed in, will
|
||||
override individually-passed `fetch-retry-*` settings.
|
||||
|
||||
##### <a name="opts-scope"></a> `opts.scope`
|
||||
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
Associate an operation with a scope for a scoped registry. This option can force
|
||||
lookup of scope-specific registries and authentication.
|
||||
|
||||
See also [`opts.<scope>:registry`](#opts-scope-registry) and
|
||||
[`opts.spec`](#opts-spec) for interactions with this option.
|
||||
|
||||
##### <a name="opts-scope-registry"></a> `opts.<scope>:registry`
|
||||
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
This option type can be used to configure the registry used for requests
|
||||
involving a particular scope. For example, `opts['@myscope:registry'] =
|
||||
'https://scope-specific.registry/'` will make it so requests go out to this
|
||||
registry instead of [`opts.registry`](#opts-registry) when
|
||||
[`opts.scope`](#opts-scope) is used, or when [`opts.spec`](#opts-spec) is a
|
||||
scoped package spec.
|
||||
|
||||
The `@` before the scope name is optional, but recommended.
|
||||
|
||||
##### <a name="opts-spec"></a> `opts.spec`
|
||||
|
||||
* Type: String | [`npm-registry-arg`](https://npm.im/npm-registry-arg) object.
|
||||
* Default: null
|
||||
|
||||
If provided, can be used to automatically configure [`opts.scope`](#opts-scope)
|
||||
based on a specific package name. Non-registry package specs will throw an
|
||||
error.
|
||||
|
||||
##### <a name="opts-strict-ssl"></a> `opts.strict-ssl`
|
||||
|
||||
* Type: Boolean
|
||||
* Default: true
|
||||
|
||||
Whether or not to do SSL key validation when making requests to the
|
||||
registry via https.
|
||||
|
||||
See also [`opts.ca`](#opts-ca).
|
||||
|
||||
##### <a name="opts-timeout"></a> `opts.timeout`
|
||||
|
||||
* Type: Milliseconds
|
||||
* Default: 30000 (30 seconds)
|
||||
|
||||
Time before a hanging request times out.
|
||||
|
||||
##### <a name="opts-token"></a> `opts.token`
|
||||
|
||||
* Alias: `opts._authToken`
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
Authentication token string.
|
||||
|
||||
Can be scoped to a registry by using a "nerf dart" for that registry. That is:
|
||||
|
||||
```
|
||||
{
|
||||
'//registry.npmjs.org/:token': 't0k3nH34r'
|
||||
}
|
||||
```
|
||||
|
||||
##### <a name="opts-user-agent"></a> `opts.user-agent`
|
||||
|
||||
* Type: String
|
||||
* Default: `'npm-registry-fetch@<version>/node@<node-version>+<arch> (<platform>)'`
|
||||
|
||||
User agent string to send in the `User-Agent` header.
|
||||
|
||||
##### <a name="opts-username"></a> `opts.username`
|
||||
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
Username used for basic authentication. For the more modern authentication
|
||||
method, please use the (more secure) [`opts.token`](#opts-token)
|
||||
|
||||
Can optionally be scoped to a registry by using a "nerf dart" for that registry.
|
||||
That is:
|
||||
|
||||
```
|
||||
{
|
||||
'//registry.npmjs.org/:username': 't0k3nH34r'
|
||||
}
|
||||
```
|
||||
|
||||
See also [`opts.password`](#opts-password)
|
||||
|
||||
##### <a name="opts-auth"></a> `opts._auth`
|
||||
|
||||
* Type: String
|
||||
* Default: null
|
||||
|
||||
** DEPRECATED ** This is a legacy authentication token supported only for
|
||||
*compatibility. Please use [`opts.token`](#opts-token) instead.
|
57
node_modules/npm-registry-fetch/auth.js
generated
vendored
Normal file
57
node_modules/npm-registry-fetch/auth.js
generated
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
'use strict'
|
||||
|
||||
const config = require('./config.js')
|
||||
const url = require('url')
|
||||
|
||||
module.exports = getAuth
|
||||
function getAuth (registry, opts) {
|
||||
if (!registry) { throw new Error('registry is required') }
|
||||
opts = config(opts)
|
||||
let AUTH = {}
|
||||
const regKey = registry && registryKey(registry)
|
||||
if (opts.forceAuth) {
|
||||
opts = opts.forceAuth
|
||||
}
|
||||
const doKey = (key, alias) => addKey(opts, AUTH, regKey, key, alias)
|
||||
doKey('token')
|
||||
doKey('_authToken', 'token')
|
||||
doKey('username')
|
||||
doKey('password')
|
||||
doKey('_password', 'password')
|
||||
doKey('email')
|
||||
doKey('_auth')
|
||||
doKey('otp')
|
||||
doKey('always-auth', 'alwaysAuth')
|
||||
if (AUTH.password) {
|
||||
AUTH.password = Buffer.from(AUTH.password, 'base64').toString('utf8')
|
||||
}
|
||||
if (AUTH._auth && !(AUTH.username && AUTH.password)) {
|
||||
let auth = Buffer.from(AUTH._auth, 'base64').toString()
|
||||
auth = auth.split(':')
|
||||
AUTH.username = auth.shift()
|
||||
AUTH.password = auth.join(':')
|
||||
}
|
||||
AUTH.alwaysAuth = AUTH.alwaysAuth === 'false' ? false : !!AUTH.alwaysAuth
|
||||
return AUTH
|
||||
}
|
||||
|
||||
function addKey (opts, obj, scope, key, objKey) {
|
||||
if (opts[key]) {
|
||||
obj[objKey || key] = opts[key]
|
||||
}
|
||||
if (scope && opts[`${scope}:${key}`]) {
|
||||
obj[objKey || key] = opts[`${scope}:${key}`]
|
||||
}
|
||||
}
|
||||
|
||||
// Called a nerf dart in the main codebase. Used as a "safe"
|
||||
// key when fetching registry info from config.
|
||||
function registryKey (registry) {
|
||||
const parsed = url.parse(registry)
|
||||
const formatted = url.format({
|
||||
host: parsed.host,
|
||||
pathname: parsed.pathname,
|
||||
slashes: parsed.slashes
|
||||
})
|
||||
return url.resolve(formatted, '.')
|
||||
}
|
109
node_modules/npm-registry-fetch/check-response.js
generated
vendored
Normal file
109
node_modules/npm-registry-fetch/check-response.js
generated
vendored
Normal file
|
@ -0,0 +1,109 @@
|
|||
'use strict'
|
||||
|
||||
const config = require('./config.js')
|
||||
const errors = require('./errors.js')
|
||||
const LRU = require('lru-cache')
|
||||
|
||||
module.exports = checkResponse
|
||||
function checkResponse (method, res, registry, startTime, opts) {
|
||||
opts = config(opts)
|
||||
if (res.headers.has('npm-notice') && !res.headers.has('x-local-cache')) {
|
||||
opts.log.notice('', res.headers.get('npm-notice'))
|
||||
}
|
||||
checkWarnings(res, registry, opts)
|
||||
if (res.status >= 400) {
|
||||
logRequest(method, res, startTime, opts)
|
||||
return checkErrors(method, res, startTime, opts)
|
||||
} else {
|
||||
res.body.on('end', () => logRequest(method, res, startTime, opts))
|
||||
if (opts.ignoreBody) {
|
||||
res.body.resume()
|
||||
res.body = null
|
||||
}
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
function logRequest (method, res, startTime, opts) {
|
||||
const elapsedTime = Date.now() - startTime
|
||||
const attempt = res.headers.get('x-fetch-attempts')
|
||||
const attemptStr = attempt && attempt > 1 ? ` attempt #${attempt}` : ''
|
||||
const cacheStr = res.headers.get('x-local-cache') ? ' (from cache)' : ''
|
||||
opts.log.http(
|
||||
'fetch',
|
||||
`${method.toUpperCase()} ${res.status} ${res.url} ${elapsedTime}ms${attemptStr}${cacheStr}`
|
||||
)
|
||||
}
|
||||
|
||||
const WARNING_REGEXP = /^\s*(\d{3})\s+(\S+)\s+"(.*)"\s+"([^"]+)"/
|
||||
const BAD_HOSTS = new LRU({ max: 50 })
|
||||
|
||||
function checkWarnings (res, registry, opts) {
|
||||
if (res.headers.has('warning') && !BAD_HOSTS.has(registry)) {
|
||||
const warnings = {}
|
||||
res.headers.raw()['warning'].forEach(w => {
|
||||
const match = w.match(WARNING_REGEXP)
|
||||
if (match) {
|
||||
warnings[match[1]] = {
|
||||
code: match[1],
|
||||
host: match[2],
|
||||
message: match[3],
|
||||
date: new Date(match[4])
|
||||
}
|
||||
}
|
||||
})
|
||||
BAD_HOSTS.set(registry, true)
|
||||
if (warnings['199']) {
|
||||
if (warnings['199'].message.match(/ENOTFOUND/)) {
|
||||
opts.log.warn('registry', `Using stale data from ${registry} because the host is inaccessible -- are you offline?`)
|
||||
} else {
|
||||
opts.log.warn('registry', `Unexpected warning for ${registry}: ${warnings['199'].message}`)
|
||||
}
|
||||
}
|
||||
if (warnings['111']) {
|
||||
// 111 Revalidation failed -- we're using stale data
|
||||
opts.log.warn(
|
||||
'registry',
|
||||
`Using stale data from ${registry} due to a request error during revalidation.`
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function checkErrors (method, res, startTime, opts) {
|
||||
return res.buffer()
|
||||
.catch(() => null)
|
||||
.then(body => {
|
||||
let parsed = body
|
||||
try {
|
||||
parsed = JSON.parse(body.toString('utf8'))
|
||||
} catch (e) {}
|
||||
if (res.status === 401 && res.headers.get('www-authenticate')) {
|
||||
const auth = res.headers.get('www-authenticate')
|
||||
.split(/,\s*/)
|
||||
.map(s => s.toLowerCase())
|
||||
if (auth.indexOf('ipaddress') !== -1) {
|
||||
throw new errors.HttpErrorAuthIPAddress(
|
||||
method, res, parsed, opts.spec
|
||||
)
|
||||
} else if (auth.indexOf('otp') !== -1) {
|
||||
throw new errors.HttpErrorAuthOTP(
|
||||
method, res, parsed, opts.spec
|
||||
)
|
||||
} else {
|
||||
throw new errors.HttpErrorAuthUnknown(
|
||||
method, res, parsed, opts.spec
|
||||
)
|
||||
}
|
||||
} else if (res.status === 401 && /one-time pass/.test(body.toString('utf8'))) {
|
||||
// Heuristic for malformed OTP responses that don't include the www-authenticate header.
|
||||
throw new errors.HttpErrorAuthOTP(
|
||||
method, res, parsed, opts.spec
|
||||
)
|
||||
} else {
|
||||
throw new errors.HttpErrorGeneral(
|
||||
method, res, parsed, opts.spec
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
96
node_modules/npm-registry-fetch/config.js
generated
vendored
Normal file
96
node_modules/npm-registry-fetch/config.js
generated
vendored
Normal file
|
@ -0,0 +1,96 @@
|
|||
'use strict'
|
||||
|
||||
const pkg = require('./package.json')
|
||||
const figgyPudding = require('figgy-pudding')
|
||||
const silentLog = require('./silentlog.js')
|
||||
|
||||
const AUTH_REGEX = /^(?:.*:)?(token|_authToken|username|_password|password|email|always-auth|_auth|otp)$/
|
||||
const SCOPE_REGISTRY_REGEX = /@.*:registry$/gi
|
||||
module.exports = figgyPudding({
|
||||
'agent': {},
|
||||
'algorithms': {},
|
||||
'body': {},
|
||||
'ca': {},
|
||||
'cache': {},
|
||||
'cert': {},
|
||||
'fetch-retries': {},
|
||||
'fetch-retry-factor': {},
|
||||
'fetch-retry-maxtimeout': {},
|
||||
'fetch-retry-mintimeout': {},
|
||||
'force-auth': {},
|
||||
forceAuth: 'force-auth',
|
||||
'gzip': {},
|
||||
'headers': {},
|
||||
'https-proxy': {},
|
||||
'ignore-body': {},
|
||||
ignoreBody: 'ignore-body',
|
||||
'integrity': {},
|
||||
'is-from-ci': 'isFromCI',
|
||||
'isFromCI': {
|
||||
default () {
|
||||
return (
|
||||
process.env['CI'] === 'true' ||
|
||||
process.env['TDDIUM'] ||
|
||||
process.env['JENKINS_URL'] ||
|
||||
process.env['bamboo.buildKey'] ||
|
||||
process.env['GO_PIPELINE_NAME']
|
||||
)
|
||||
}
|
||||
},
|
||||
'key': {},
|
||||
'local-address': {},
|
||||
'log': {
|
||||
default: silentLog
|
||||
},
|
||||
'map-json': 'mapJson',
|
||||
'mapJSON': 'mapJson',
|
||||
'mapJson': {},
|
||||
'max-sockets': 'maxsockets',
|
||||
'maxsockets': {
|
||||
default: 12
|
||||
},
|
||||
'memoize': {},
|
||||
'method': {
|
||||
default: 'GET'
|
||||
},
|
||||
'no-proxy': {},
|
||||
'noproxy': {},
|
||||
'npm-session': 'npmSession',
|
||||
'npmSession': {},
|
||||
'offline': {},
|
||||
'otp': {},
|
||||
'prefer-offline': {},
|
||||
'prefer-online': {},
|
||||
'projectScope': {},
|
||||
'project-scope': 'projectScope',
|
||||
'Promise': {default: () => Promise},
|
||||
'proxy': {},
|
||||
'query': {},
|
||||
'refer': {},
|
||||
'referer': 'refer',
|
||||
'registry': {
|
||||
default: 'https://registry.npmjs.org/'
|
||||
},
|
||||
'retry': {},
|
||||
'scope': {},
|
||||
'spec': {},
|
||||
'strict-ssl': {},
|
||||
'timeout': {},
|
||||
'user-agent': {
|
||||
default: `${
|
||||
pkg.name
|
||||
}@${
|
||||
pkg.version
|
||||
}/node@${
|
||||
process.version
|
||||
}+${
|
||||
process.arch
|
||||
} (${
|
||||
process.platform
|
||||
})`
|
||||
}
|
||||
}, {
|
||||
other (key) {
|
||||
return key.match(AUTH_REGEX) || key.match(SCOPE_REGISTRY_REGEX)
|
||||
}
|
||||
})
|
79
node_modules/npm-registry-fetch/errors.js
generated
vendored
Normal file
79
node_modules/npm-registry-fetch/errors.js
generated
vendored
Normal file
|
@ -0,0 +1,79 @@
|
|||
'use strict'
|
||||
|
||||
const url = require('url')
|
||||
|
||||
function packageName (href) {
|
||||
try {
|
||||
let basePath = url.parse(href).pathname.substr(1)
|
||||
if (!basePath.match(/^-/)) {
|
||||
basePath = basePath.split('/')
|
||||
var index = basePath.indexOf('_rewrite')
|
||||
if (index === -1) {
|
||||
index = basePath.length - 1
|
||||
} else {
|
||||
index++
|
||||
}
|
||||
return decodeURIComponent(basePath[index])
|
||||
}
|
||||
} catch (_) {
|
||||
// this is ok
|
||||
}
|
||||
}
|
||||
|
||||
class HttpErrorBase extends Error {
|
||||
constructor (method, res, body, spec) {
|
||||
super()
|
||||
this.headers = res.headers.raw()
|
||||
this.statusCode = res.status
|
||||
this.code = `E${res.status}`
|
||||
this.method = method
|
||||
this.uri = res.url
|
||||
this.body = body
|
||||
this.pkgid = spec ? spec.toString() : packageName(res.url)
|
||||
}
|
||||
}
|
||||
module.exports.HttpErrorBase = HttpErrorBase
|
||||
|
||||
class HttpErrorGeneral extends HttpErrorBase {
|
||||
constructor (method, res, body, spec) {
|
||||
super(method, res, body, spec)
|
||||
this.message = `${res.status} ${res.statusText} - ${
|
||||
this.method.toUpperCase()
|
||||
} ${
|
||||
this.spec || this.uri
|
||||
}${
|
||||
(body && body.error) ? ' - ' + body.error : ''
|
||||
}`
|
||||
Error.captureStackTrace(this, HttpErrorGeneral)
|
||||
}
|
||||
}
|
||||
module.exports.HttpErrorGeneral = HttpErrorGeneral
|
||||
|
||||
class HttpErrorAuthOTP extends HttpErrorBase {
|
||||
constructor (method, res, body, spec) {
|
||||
super(method, res, body, spec)
|
||||
this.message = 'OTP required for authentication'
|
||||
this.code = 'EOTP'
|
||||
Error.captureStackTrace(this, HttpErrorAuthOTP)
|
||||
}
|
||||
}
|
||||
module.exports.HttpErrorAuthOTP = HttpErrorAuthOTP
|
||||
|
||||
class HttpErrorAuthIPAddress extends HttpErrorBase {
|
||||
constructor (method, res, body, spec) {
|
||||
super(method, res, body, spec)
|
||||
this.message = 'Login is not allowed from your IP address'
|
||||
this.code = 'EAUTHIP'
|
||||
Error.captureStackTrace(this, HttpErrorAuthIPAddress)
|
||||
}
|
||||
}
|
||||
module.exports.HttpErrorAuthIPAddress = HttpErrorAuthIPAddress
|
||||
|
||||
class HttpErrorAuthUnknown extends HttpErrorBase {
|
||||
constructor (method, res, body, spec) {
|
||||
super(method, res, body, spec)
|
||||
this.message = 'Unable to authenticate, need: ' + res.headers.get('www-authenticate')
|
||||
Error.captureStackTrace(this, HttpErrorAuthUnknown)
|
||||
}
|
||||
}
|
||||
module.exports.HttpErrorAuthUnknown = HttpErrorAuthUnknown
|
191
node_modules/npm-registry-fetch/index.js
generated
vendored
Normal file
191
node_modules/npm-registry-fetch/index.js
generated
vendored
Normal file
|
@ -0,0 +1,191 @@
|
|||
'use strict'
|
||||
|
||||
const Buffer = require('safe-buffer').Buffer
|
||||
|
||||
const checkResponse = require('./check-response.js')
|
||||
const config = require('./config.js')
|
||||
const getAuth = require('./auth.js')
|
||||
const fetch = require('make-fetch-happen')
|
||||
const JSONStream = require('JSONStream')
|
||||
const npa = require('npm-package-arg')
|
||||
const {PassThrough} = require('stream')
|
||||
const qs = require('querystring')
|
||||
const url = require('url')
|
||||
const zlib = require('zlib')
|
||||
|
||||
module.exports = regFetch
|
||||
function regFetch (uri, opts) {
|
||||
opts = config(opts)
|
||||
const registry = (
|
||||
(opts.spec && pickRegistry(opts.spec, opts)) ||
|
||||
opts.registry ||
|
||||
'https://registry.npmjs.org/'
|
||||
)
|
||||
uri = url.parse(uri).protocol
|
||||
? uri
|
||||
: `${
|
||||
registry.trim().replace(/\/?$/g, '')
|
||||
}/${
|
||||
uri.trim().replace(/^\//, '')
|
||||
}`
|
||||
// through that takes into account the scope, the prefix of `uri`, etc
|
||||
const startTime = Date.now()
|
||||
const headers = getHeaders(registry, uri, opts)
|
||||
let body = opts.body
|
||||
const bodyIsStream = body &&
|
||||
typeof body === 'object' &&
|
||||
typeof body.pipe === 'function'
|
||||
if (body && !bodyIsStream && typeof body !== 'string' && !Buffer.isBuffer(body)) {
|
||||
headers['content-type'] = headers['content-type'] || 'application/json'
|
||||
body = JSON.stringify(body)
|
||||
} else if (body && !headers['content-type']) {
|
||||
headers['content-type'] = 'application/octet-stream'
|
||||
}
|
||||
if (opts.gzip) {
|
||||
headers['content-encoding'] = 'gzip'
|
||||
if (bodyIsStream) {
|
||||
const gz = zlib.createGzip()
|
||||
body.on('error', err => gz.emit('error', err))
|
||||
body = body.pipe(gz)
|
||||
} else {
|
||||
body = new opts.Promise((resolve, reject) => {
|
||||
zlib.gzip(body, (err, gz) => err ? reject(err) : resolve(gz))
|
||||
})
|
||||
}
|
||||
}
|
||||
if (opts.query) {
|
||||
let q = opts.query
|
||||
if (typeof q === 'string') {
|
||||
q = qs.parse(q)
|
||||
}
|
||||
Object.keys(q).forEach(key => {
|
||||
if (q[key] === undefined) {
|
||||
delete q[key]
|
||||
}
|
||||
})
|
||||
if (Object.keys(q).length) {
|
||||
const parsed = url.parse(uri)
|
||||
parsed.search = '?' + qs.stringify(
|
||||
parsed.query
|
||||
? Object.assign(qs.parse(parsed.query), q)
|
||||
: q
|
||||
)
|
||||
uri = url.format(parsed)
|
||||
}
|
||||
}
|
||||
return opts.Promise.resolve(body).then(body => fetch(uri, {
|
||||
agent: opts.agent,
|
||||
algorithms: opts.algorithms,
|
||||
body,
|
||||
cache: getCacheMode(opts),
|
||||
cacheManager: opts.cache,
|
||||
ca: opts.ca,
|
||||
cert: opts.cert,
|
||||
headers,
|
||||
integrity: opts.integrity,
|
||||
key: opts.key,
|
||||
localAddress: opts['local-address'],
|
||||
maxSockets: opts.maxsockets,
|
||||
memoize: opts.memoize,
|
||||
method: opts.method || 'GET',
|
||||
noProxy: opts['no-proxy'] || opts.noproxy,
|
||||
Promise: opts.Promise,
|
||||
proxy: opts['https-proxy'] || opts.proxy,
|
||||
referer: opts.refer,
|
||||
retry: opts.retry != null ? opts.retry : {
|
||||
retries: opts['fetch-retries'],
|
||||
factor: opts['fetch-retry-factor'],
|
||||
minTimeout: opts['fetch-retry-mintimeout'],
|
||||
maxTimeout: opts['fetch-retry-maxtimeout']
|
||||
},
|
||||
strictSSL: !!opts['strict-ssl'],
|
||||
timeout: opts.timeout
|
||||
}).then(res => checkResponse(
|
||||
opts.method || 'GET', res, registry, startTime, opts
|
||||
)))
|
||||
}
|
||||
|
||||
module.exports.json = fetchJSON
|
||||
function fetchJSON (uri, opts) {
|
||||
return regFetch(uri, opts).then(res => res.json())
|
||||
}
|
||||
|
||||
module.exports.json.stream = fetchJSONStream
|
||||
function fetchJSONStream (uri, jsonPath, opts) {
|
||||
opts = config(opts)
|
||||
const parser = JSONStream.parse(jsonPath, opts.mapJson)
|
||||
const pt = parser.pipe(new PassThrough({objectMode: true}))
|
||||
parser.on('error', err => pt.emit('error', err))
|
||||
regFetch(uri, opts).then(res => {
|
||||
res.body.on('error', err => parser.emit('error', err))
|
||||
res.body.pipe(parser)
|
||||
}, err => pt.emit('error', err))
|
||||
return pt
|
||||
}
|
||||
|
||||
module.exports.pickRegistry = pickRegistry
|
||||
function pickRegistry (spec, opts) {
|
||||
spec = npa(spec)
|
||||
opts = config(opts)
|
||||
let registry = spec.scope &&
|
||||
opts[spec.scope.replace(/^@?/, '@') + ':registry']
|
||||
|
||||
if (!registry && opts.scope) {
|
||||
registry = opts[opts.scope.replace(/^@?/, '@') + ':registry']
|
||||
}
|
||||
|
||||
if (!registry) {
|
||||
registry = opts.registry || 'https://registry.npmjs.org/'
|
||||
}
|
||||
|
||||
return registry
|
||||
}
|
||||
|
||||
function getCacheMode (opts) {
|
||||
return opts.offline
|
||||
? 'only-if-cached'
|
||||
: opts['prefer-offline']
|
||||
? 'force-cache'
|
||||
: opts['prefer-online']
|
||||
? 'no-cache'
|
||||
: 'default'
|
||||
}
|
||||
|
||||
function getHeaders (registry, uri, opts) {
|
||||
const headers = Object.assign({
|
||||
'npm-in-ci': !!(
|
||||
opts['is-from-ci'] ||
|
||||
process.env['CI'] === 'true' ||
|
||||
process.env['TDDIUM'] ||
|
||||
process.env['JENKINS_URL'] ||
|
||||
process.env['bamboo.buildKey'] ||
|
||||
process.env['GO_PIPELINE_NAME']
|
||||
),
|
||||
'npm-scope': opts['project-scope'],
|
||||
'npm-session': opts['npm-session'],
|
||||
'user-agent': opts['user-agent'],
|
||||
'referer': opts.refer
|
||||
}, opts.headers)
|
||||
|
||||
const auth = getAuth(registry, opts)
|
||||
// If a tarball is hosted on a different place than the manifest, only send
|
||||
// credentials on `alwaysAuth`
|
||||
const shouldAuth = (
|
||||
auth.alwaysAuth ||
|
||||
url.parse(uri).host === url.parse(registry).host
|
||||
)
|
||||
if (shouldAuth && auth.token) {
|
||||
headers.authorization = `Bearer ${auth.token}`
|
||||
} else if (shouldAuth && auth.username && auth.password) {
|
||||
const encoded = Buffer.from(
|
||||
`${auth.username}:${auth.password}`, 'utf8'
|
||||
).toString('base64')
|
||||
headers.authorization = `Basic ${encoded}`
|
||||
} else if (shouldAuth && auth._auth) {
|
||||
headers.authorization = `Basic ${auth._auth}`
|
||||
}
|
||||
if (shouldAuth && auth.otp) {
|
||||
headers['npm-otp'] = auth.otp
|
||||
}
|
||||
return headers
|
||||
}
|
93
node_modules/npm-registry-fetch/package.json
generated
vendored
Normal file
93
node_modules/npm-registry-fetch/package.json
generated
vendored
Normal file
|
@ -0,0 +1,93 @@
|
|||
{
|
||||
"_from": "npm-registry-fetch@^4.0.0",
|
||||
"_id": "npm-registry-fetch@4.0.1",
|
||||
"_inBundle": false,
|
||||
"_integrity": "sha512-1ZQ+yjnxc698R5h9Yje9CASapzAZr7aYDkJDdERg9xg2hOEY0vRJwskOaJAXq8N/eLavzvW4g564YAfq6zMn/A==",
|
||||
"_location": "/npm-registry-fetch",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"type": "range",
|
||||
"registry": true,
|
||||
"raw": "npm-registry-fetch@^4.0.0",
|
||||
"name": "npm-registry-fetch",
|
||||
"escapedName": "npm-registry-fetch",
|
||||
"rawSpec": "^4.0.0",
|
||||
"saveSpec": null,
|
||||
"fetchSpec": "^4.0.0"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/pacote"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.1.tgz",
|
||||
"_shasum": "4ec0964dce6f29d253801a47cd381a7d6ad13a5e",
|
||||
"_spec": "npm-registry-fetch@^4.0.0",
|
||||
"_where": "/home/shimataro/projects/actions/ssh-key-action/node_modules/pacote",
|
||||
"author": {
|
||||
"name": "Kat Marchán",
|
||||
"email": "kzm@sykosomatic.org"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/npm/registry-fetch/issues"
|
||||
},
|
||||
"bundleDependencies": false,
|
||||
"config": {
|
||||
"nyc": {
|
||||
"exclude": [
|
||||
"node_modules/**",
|
||||
"test/**"
|
||||
]
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"JSONStream": "^1.3.4",
|
||||
"bluebird": "^3.5.1",
|
||||
"figgy-pudding": "^3.4.1",
|
||||
"lru-cache": "^5.1.1",
|
||||
"make-fetch-happen": "^5.0.0",
|
||||
"npm-package-arg": "^6.1.0",
|
||||
"safe-buffer": "^5.2.0"
|
||||
},
|
||||
"deprecated": false,
|
||||
"description": "Fetch-based http client for use with npm registry APIs",
|
||||
"devDependencies": {
|
||||
"cacache": "^12.0.0",
|
||||
"get-stream": "^4.0.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"nock": "^9.4.3",
|
||||
"npmlog": "^4.1.2",
|
||||
"rimraf": "^2.6.2",
|
||||
"ssri": "^6.0.0",
|
||||
"standard": "^11.0.1",
|
||||
"standard-version": "^4.4.0",
|
||||
"tap": "^12.0.1",
|
||||
"weallbehave": "^1.2.0",
|
||||
"weallcontribute": "^1.0.8"
|
||||
},
|
||||
"files": [
|
||||
"*.js",
|
||||
"lib"
|
||||
],
|
||||
"homepage": "https://github.com/npm/registry-fetch#readme",
|
||||
"keywords": [
|
||||
"npm",
|
||||
"registry",
|
||||
"fetch"
|
||||
],
|
||||
"license": "ISC",
|
||||
"main": "index.js",
|
||||
"name": "npm-registry-fetch",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/npm/registry-fetch.git"
|
||||
},
|
||||
"scripts": {
|
||||
"postrelease": "npm publish && git push --follow-tags",
|
||||
"prerelease": "npm t",
|
||||
"pretest": "standard",
|
||||
"release": "standard-version -s",
|
||||
"test": "tap -J --coverage test/*.js",
|
||||
"update-coc": "weallbehave -o . && git add CODE_OF_CONDUCT.md && git commit -m 'docs(coc): updated CODE_OF_CONDUCT.md'",
|
||||
"update-contrib": "weallcontribute -o . && git add CONTRIBUTING.md && git commit -m 'docs(contributing): updated CONTRIBUTING.md'"
|
||||
},
|
||||
"version": "4.0.1"
|
||||
}
|
14
node_modules/npm-registry-fetch/silentlog.js
generated
vendored
Normal file
14
node_modules/npm-registry-fetch/silentlog.js
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
'use strict'
|
||||
|
||||
const noop = Function.prototype
|
||||
module.exports = {
|
||||
error: noop,
|
||||
warn: noop,
|
||||
notice: noop,
|
||||
info: noop,
|
||||
verbose: noop,
|
||||
silly: noop,
|
||||
http: noop,
|
||||
pause: noop,
|
||||
resume: noop
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue