teal-src/net/http.d.tl
author Matthew Wild <mwild1@gmail.com>
Fri, 02 Dec 2022 20:32:36 +0000
changeset 12799 87424cbedc55
parent 12616 588b1d175838
permissions -rw-r--r--
util.hashring: Support associating arbitrary data with nodes In this API, a 'node' is always a simple text string. Sometimes the caller may have a more complex structure representing a node, but the hash ring is really only concerned with the node's name. This API change allows :add_nodes() to take a table of `node_name = value` pairs, as well as the simple array of node names previously accepted. The 'value' of the selected node is returned as a new second result from :get_node(). If no value is passed when a node is added, it defaults to `true` (as before, but this was never previously exposed).

local Promise = require "util.promise".Promise;

local record sslctx -- from LuaSec
end

local record lib

	enum http_method
		"GET"
		"HEAD"
		"POST"
		"PUT"
		"OPTIONS"
		"DELETE"
		-- etc?
	end

	record http_client_options
		sslctx : sslctx
	end

	record http_options
		id : string
		onlystatus : boolean
		body : string
		method : http_method
		headers : { string : string }
		insecure : boolean
		suppress_errors : boolean
		streaming_handler : function
		suppress_url : boolean
		sslctx : sslctx
	end

	record http_request
		host : string
		port : string
		enum scheme
			"http"
			"https"
		end
		scheme : scheme
		url : string
		userinfo : string
		path : string

		method : http_method
		headers : { string : string }

		insecure : boolean
		suppress_errors : boolean
		streaming_handler : function
		http : http_client
		time : integer
		id : string
		callback : http_callback
	end

	record http_response
	end

	type http_callback = function (string, number, http_response, http_request)

	record http_client
		options : http_client_options
		request : function (http_client, string, http_options, http_callback)
	end

	request : function (string, http_options, http_callback) : Promise, string
	default : http_client
	new : function (http_client_options) : http_client
	events : table
	-- COMPAT
	urlencode : function (string) : string
	urldecode : function (string) : string
	formencode : function ({ string : string }) : string
	formdecode : function (string) : { string : string }
	destroy_request : function (http_request)

	enum available_features
		"sni"
	end
	features : { available_features : boolean }
end

return lib