forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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;
 | |
| }
 |