summaryrefslogtreecommitdiff
path: root/src/web/app/common/scripts/api.ls
blob: 47182b6a5aeabcbe52c3aeecec75b173bc7c43db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
riot = require \riot

spinner = null
pending = 0

net = riot.observable!

riot.mixin \net do
	net: net

module.exports = (i, endpoint, data = {}) ->
	if ++pending == 1
		spinner := document.create-element \div
			..set-attribute \id \wait
		document.body.append-child spinner
	
	if i? and typeof i == \object then i = i.token

	# append user token when signed in
	if i? then data.i = i

	opts =
		method: \POST
		body: JSON.stringify data

	if endpoint == \signin
		opts.credentials = \include

	ep = if (endpoint.index-of '://') > -1
		then endpoint
		else "#{CONFIG.api.url}/#{endpoint}"

	new Promise (resolve, reject) ->
		timer = set-timeout ->
			net.trigger \detected-slow-network
		, 5000ms

		fetch ep, opts
		.then (res) ->
			clear-timeout timer
			if --pending == 0
				spinner.parent-node.remove-child spinner

			if res.status == 200
				res.json!.then resolve
			else if res.status == 204
				resolve!
			else
				res.json!.then (err) ->
					reject err.error
		.catch reject