/
get-bookmark.js
102 lines (82 loc) · 2.28 KB
/
get-bookmark.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/**
*
* @todo support setting ref and token in more way, via cookie, params, etc.
*
*/
module.exports = {
friendlyName: 'Get document by bookmark',
description: 'Get a prismic document by bookmark.',
inputs: {
apiEndpoint: {
example: 'https://mycompany.prismic.io/api',
description: 'Api endpoint for your prismic instance',
required: true,
},
accessToken: {
example: 'MC5WUWg4VFOHFh.77-9777-9Me-_73vv73vv70rUO-_vWPvv71O77-9ZUPvv73vv71pX--_vQdaNe-_vQ',
description: 'Token provided via settings/apps/.',
required: true
},
bookmark: {
example: 'my-great-bookmark',
description: 'Bookmark of document.',
required: true
},
ref: {
example: 'VUYf7y0AAJkBHcVj',
description: 'Control which versions of documents we can access. Defaults to master which is all live documents.',
required: false
}
},
defaultExit: 'success',
exits: {
error: {
description: 'An unexpected error occurred.'
},
notFound: {
description: 'Document not found',
},
notAuthorized: {
description: 'Not authorized'
},
success: {
description: 'Document found via slug',
example: {}
}
},
fn: function(inputs, exits) {
var Prismic = require('prismic.io').Prismic;
function linkResolver(doc) {
if (doc.isBroken) return false;
return '/documents/' + doc.id + '/' + doc.slug;
}
Prismic.Api(inputs.apiEndpoint, function(err, Api) {
if (err && err.toString().indexOf('401') !== -1) {
return exits.notAuthorized(err);
} else if (err) {
return exits.error(err);
}
var ctx = {
api: Api,
ref: inputs.ref || Api.master(),
linkResolver: function(doc) {
return linkResolver(doc);
}
};
var id = ctx.api.bookmarks[inputs.bookmark];
var getDocument = require('machine').build(require('./get-document'));
getDocument({
apiEndpoint: inputs.apiEndpoint,
accessToken: inputs.accessToken,
ref: inputs.ref,
id: id
}).exec({
error: exits.error,
notFound: exits.notFound,
notAuthorized: exits.notAuthorized,
success: exits.success
});
}, inputs.accessToken);
}
};
// fin