246 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C)2014-2020 Haxe Foundation
 | 
						|
 *
 | 
						|
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
						|
 * copy of this software and associated documentation files (the "Software"),
 | 
						|
 * to deal in the Software without restriction, including without limitation
 | 
						|
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
						|
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
						|
 * Software is furnished to do so, subject to the following conditions:
 | 
						|
 *
 | 
						|
 * The above copyright notice and this permission notice shall be included in
 | 
						|
 * all copies or substantial portions of the Software.
 | 
						|
 *
 | 
						|
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
						|
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
						|
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
						|
 * DEALINGS IN THE SOFTWARE.
 | 
						|
 */
 | 
						|
 | 
						|
package js.node;
 | 
						|
 | 
						|
import haxe.DynamicAccess;
 | 
						|
import haxe.extern.EitherType;
 | 
						|
import js.node.http.*;
 | 
						|
import js.node.net.Socket;
 | 
						|
import js.node.stream.Duplex;
 | 
						|
import js.node.url.URL;
 | 
						|
#if haxe4
 | 
						|
import js.lib.Error;
 | 
						|
#else
 | 
						|
import js.Error;
 | 
						|
#end
 | 
						|
 | 
						|
/**
 | 
						|
	The HTTP interfaces in Node are designed to support many features of the protocol
 | 
						|
	which have been traditionally difficult to use. In particular, large, possibly chunk-encoded, messages.
 | 
						|
	The interface is careful to never buffer entire requests or responses--the user is able to stream data.
 | 
						|
 | 
						|
	HTTP message headers are represented by an object like this:
 | 
						|
		{ 'content-length': '123',
 | 
						|
		  'content-type': 'text/plain',
 | 
						|
		  'connection': 'keep-alive' }
 | 
						|
	Keys are lowercased. Values are not modified.
 | 
						|
 | 
						|
	In order to support the full spectrum of possible HTTP applications, Node's HTTP API is very low-level.
 | 
						|
	It deals with stream handling and message parsing only. It parses a message into headers and body but
 | 
						|
	it does not parse the actual headers or the body.
 | 
						|
**/
 | 
						|
@:jsRequire("http")
 | 
						|
extern class Http {
 | 
						|
	/**
 | 
						|
		A list of the HTTP methods that are supported by the parser.
 | 
						|
	**/
 | 
						|
	static var METHODS:Array<String>;
 | 
						|
 | 
						|
	/**
 | 
						|
		A collection of all the standard HTTP response status codes, and the short description of each.
 | 
						|
		For example, `http.STATUS_CODES[404] === 'Not Found'`.
 | 
						|
	**/
 | 
						|
	static var STATUS_CODES(default, null):DynamicAccess<String>;
 | 
						|
 | 
						|
	/**
 | 
						|
		Returns a new web server object.
 | 
						|
 | 
						|
		The `requestListener` is a function which is automatically added to the `'request'` event.
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	@:overload(function(options:HttpCreateServerOptions, ?requestListener:(request:IncomingMessage, response:ServerResponse) -> Void):Server {})
 | 
						|
	static function createServer(?requestListener:(request:IncomingMessage, response:ServerResponse) -> Void):Server;
 | 
						|
	#else
 | 
						|
	@:overload(function(options:HttpCreateServerOptions, ?requestListener:IncomingMessage->ServerResponse->Void):Server {})
 | 
						|
	static function createServer(?requestListener:IncomingMessage->ServerResponse->Void):Server;
 | 
						|
	#end
 | 
						|
 | 
						|
	/**
 | 
						|
		Since most requests are GET requests without bodies, Node.js provides this convenience method.
 | 
						|
		The only difference between this method and `request()` is that it sets the method to GET and calls `end()` automatically.
 | 
						|
		The callback must take care to consume the response data for reasons stated in `http.ClientRequest` section.
 | 
						|
	**/
 | 
						|
	@:overload(function(url:URL, ?options:HttpRequestOptions, ?callback:IncomingMessage->Void):ClientRequest {})
 | 
						|
	@:overload(function(url:String, ?options:HttpRequestOptions, ?callback:IncomingMessage->Void):ClientRequest {})
 | 
						|
	static function get(options:HttpRequestOptions, ?callback:IncomingMessage->Void):ClientRequest;
 | 
						|
 | 
						|
	/**
 | 
						|
		Global instance of Agent which is used as the default for all http client requests.
 | 
						|
	**/
 | 
						|
	static var globalAgent:Agent;
 | 
						|
 | 
						|
	static var maxHeaderSize:Int;
 | 
						|
 | 
						|
	/**
 | 
						|
		Node.js maintains several connections per server to make HTTP requests.
 | 
						|
		This function allows one to transparently issue requests.
 | 
						|
 | 
						|
		`url` can be a string or a URL object.
 | 
						|
		If `url` is a string, it is automatically parsed with `new URL()`.
 | 
						|
		If it is a `URL` object, it will be automatically converted to an ordinary `options` object.
 | 
						|
 | 
						|
		If both `url` and `options` are specified, the objects are merged, with the `options` properties taking precedence.
 | 
						|
 | 
						|
		The optional `callback` parameter will be added as a one-time listener for the `'response'` event.
 | 
						|
 | 
						|
		`request()` returns an instance of the `http.ClientRequest` class.
 | 
						|
		The `ClientRequest` instance is a writable stream.
 | 
						|
		If one needs to upload a file with a POST request, then write to the `ClientRequest` object.
 | 
						|
	**/
 | 
						|
	@:overload(function(url:URL, ?options:HttpRequestOptions, ?callback:IncomingMessage->Void):ClientRequest {})
 | 
						|
	@:overload(function(url:String, ?options:HttpRequestOptions, ?callback:IncomingMessage->Void):ClientRequest {})
 | 
						|
	static function request(options:HttpRequestOptions, ?callback:IncomingMessage->Void):ClientRequest;
 | 
						|
}
 | 
						|
 | 
						|
typedef HttpCreateServerOptions = {
 | 
						|
	/**
 | 
						|
		Specifies the `IncomingMessage` class to be used. Useful for extending the original `IncomingMessage`.
 | 
						|
 | 
						|
		Default: `js.node.http.IncomingMessage`.
 | 
						|
	**/
 | 
						|
	@:optional var IncomingMessage:Class<Dynamic>;
 | 
						|
 | 
						|
	/**
 | 
						|
		Specifies the `ServerResponse` class to be used. Useful for extending the original `ServerResponse`.
 | 
						|
 | 
						|
		Default: `ServerResponse`.
 | 
						|
	**/
 | 
						|
	@:optional var ServerResponse:Class<Dynamic>;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Type of the options object passed to `Http.request`.
 | 
						|
**/
 | 
						|
typedef HttpRequestOptions = {
 | 
						|
	/**
 | 
						|
		Controls Agent behavior.
 | 
						|
 | 
						|
		Possible values:
 | 
						|
 | 
						|
		- `undefined` (default): use http.globalAgent for this host and port.
 | 
						|
		- `Agent` object: explicitly use the passed in `Agent`.
 | 
						|
		- `false` : causes a new `Agent` with default values to be used.
 | 
						|
	**/
 | 
						|
	@:optional var agent:EitherType<Agent, Bool>;
 | 
						|
 | 
						|
	/**
 | 
						|
		Basic authentication i.e. `'user:password'` to compute an Authorization header.
 | 
						|
	**/
 | 
						|
	@:optional var auth:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		A function that produces a socket/stream to use for the request when the `agent` option is not used.
 | 
						|
		This can be used to avoid creating a custom `Agent` class just to override the default `createConnection` function.
 | 
						|
		See [agent.createConnection()](https://nodejs.org/api/http.html#http_agent_createconnection_options_callback) for more details.
 | 
						|
		Any `Duplex` stream is a valid return value.
 | 
						|
	**/
 | 
						|
	#if haxe4
 | 
						|
	@:optional var createConnection:(options:SocketConnectOptionsTcp, ?callabck:(err:Error, stream:IDuplex) -> Void) -> IDuplex;
 | 
						|
	#else
 | 
						|
	@:optional var createConnection:SocketConnectOptionsTcp->?(Error->IDuplex->Void)->IDuplex;
 | 
						|
	#end
 | 
						|
 | 
						|
	/**
 | 
						|
		Default port for the protocol.
 | 
						|
 | 
						|
		Default: `agent.defaultPort` if an Agent is used, else `undefined`.
 | 
						|
	**/
 | 
						|
	@:optional var defaultPort:Int;
 | 
						|
 | 
						|
	/**
 | 
						|
		IP address family to use when resolving `host` or `hostname`.
 | 
						|
		Valid values are `4` or `6`. When unspecified, both IP v4 and v6 will be used.
 | 
						|
	**/
 | 
						|
	@:optional var family:js.node.Dns.DnsAddressFamily;
 | 
						|
 | 
						|
	/**
 | 
						|
		An object containing request headers.
 | 
						|
	**/
 | 
						|
	@:optional var headers:DynamicAccess<EitherType<String, Array<String>>>;
 | 
						|
 | 
						|
	/**
 | 
						|
		A domain name or IP address of the server to issue the request to.
 | 
						|
 | 
						|
		Default: `'localhost'`.
 | 
						|
	**/
 | 
						|
	@:optional var host:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		Alias for `host`.
 | 
						|
		To support `url.parse()`, hostname will be used if both `host` and `hostname` are specified.
 | 
						|
	**/
 | 
						|
	@:optional var hostname:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		Local interface to bind for network connections.
 | 
						|
	**/
 | 
						|
	@:optional var localAddress:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		A string specifying the HTTP request method.
 | 
						|
 | 
						|
		Default: `'GET'`.
 | 
						|
	**/
 | 
						|
	@:optional var method:Method;
 | 
						|
 | 
						|
	/**
 | 
						|
		Request path. Should include query string if any. E.G. `'/index.html?page=12'`.
 | 
						|
		An exception is thrown when the request path contains illegal characters.
 | 
						|
		Currently, only spaces are rejected but that may change in the future.
 | 
						|
 | 
						|
		Default: `'/'`.
 | 
						|
	**/
 | 
						|
	@:optional var path:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		Port of remote server.
 | 
						|
 | 
						|
		Default: `defaultPort` if set, else `80`.
 | 
						|
	**/
 | 
						|
	@:optional var port:Int;
 | 
						|
 | 
						|
	/**
 | 
						|
		Protocol to use.
 | 
						|
 | 
						|
		Default: `'http:'`.
 | 
						|
	**/
 | 
						|
	@:optional var protocol:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		Specifies whether or not to automatically add the Host header.
 | 
						|
		Defaults to `true`.
 | 
						|
	**/
 | 
						|
	@:optional var setHost:Bool;
 | 
						|
 | 
						|
	/**
 | 
						|
		Unix Domain Socket (cannot be used if one of host or port is specified, those specify a TCP Socket).
 | 
						|
	**/
 | 
						|
	@:optional var socketPath:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		A number specifying the socket timeout in milliseconds.
 | 
						|
		This will set the timeout before the socket is connected.
 | 
						|
	**/
 | 
						|
	@:optional var timeout:Int;
 | 
						|
}
 |