-
Notifications
You must be signed in to change notification settings - Fork 138
/
api.js
69 lines (60 loc) · 1.6 KB
/
api.js
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
var bodyParser = require('koa-bodyparser');
var route = require('koa-route');
var path = require('path');
var ejs = require('ejs');
module.exports = api;
/**
* Recurly.js API mock
* @param {Object} app Koa app
*/
function api (app) {
app.use(cors);
app.use(contentTypeFix);
app.use(bodyParser());
app.use(route.get('/plans/:plan_code', json));
app.use(route.get('/plans/:plan_code/coupons/:coupon_code', json));
app.use(route.post('/token', json));
app.use(route.get('/token', json));
app.use(route.get('/tax', json));
app.use(route.get('/paypal/start', postMessage));
app.use(route.get('/relay', relay));
}
/**
* Utility functions.
*/
function* json () {
var data = fixture.apply(this);
if (this.query.callback) {
this.body = [this.query.callback, '(', JSON.stringify(data), ')'].join('');
} else {
this.body = data;
}
}
function* postMessage () {
this.body = ejs.render('post-message', {
message: {
recurly_event: this.query.event,
recurly_message: fixture.apply(this)
}
});
}
function* relay () {
this.body = ejs.render(fixture.apply({ path: 'relay.ejs' }));
}
function fixture () {
var fixture = require(path.join(__dirname, 'fixtures', this.path));
return typeof fixture === 'function'
? fixture.apply(this)
: fixture;
}
function* cors (next) {
this.set('Access-Control-Allow-Origin', '*');
yield next;
}
// Corrects an incorrect Content-type header sent by IE9 XDomainRequests
function* contentTypeFix (next) {
if (this.method === 'POST') {
this.req.headers['content-type'] = 'application/x-www-form-urlencoded';
}
yield next;
}