UNPKG

9.85 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6var MUTABLE_DATUM_FILE_TYPE = exports.MUTABLE_DATUM_FILE_TYPE = 1;
7var MUTABLE_DATUM_DIR_TYPE = exports.MUTABLE_DATUM_DIR_TYPE = 2;
8
9var OP_BASE58CHECK_PATTERN = exports.OP_BASE58CHECK_PATTERN = "^([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)$";
10var OP_ADDRESS_PATTERN = exports.OP_ADDRESS_PATTERN = OP_BASE58CHECK_PATTERN;
11var OP_UUID_PATTERN = exports.OP_UUID_PATTERN = "^([0-9a-fA-F\-]+)$";
12var OP_HEX_PATTERN = exports.OP_HEX_PATTERN = "^([0-9a-fA-F]+)$";
13var OP_URLENCODED_NOSLASH_PATTERN = exports.OP_URLENCODED_NOSLASH_PATTERN = "^([a-zA-Z0-9\-_.~%]+)$";
14var OP_URLENCODED_PATTERN = exports.OP_URLENCODED_PATTERN = "^([a-zA-Z0-9\-_.~%/]+)$";
15var OP_URLENCODED_NOSLASH_OR_EMPTY_PATTERN = exports.OP_URLENCODED_NOSLASH_OR_EMPTY_PATTERN = "^([a-zA-Z0-9\-_.~%]*)$";
16var OP_URLENCODED_OR_EMPTY_PATTERN = exports.OP_URLENCODED_OR_EMPTY_PATTERN = "^([a-zA-Z0-9\-_.~%/]*)$";
17var OP_PUBKEY_PATTERN = exports.OP_PUBKEY_PATTERN = OP_HEX_PATTERN;
18var OP_BASE64_PATTERN = exports.OP_BASE64_PATTERN = "(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})";
19
20var SUCCESS_FAIL_SCHEMA = exports.SUCCESS_FAIL_SCHEMA = {
21 anyOf: [{
22 type: 'object',
23 properties: {
24 status: {
25 type: 'boolean'
26 }
27 }
28 }, {
29 type: 'object',
30 properties: {
31 error: {
32 type: 'string'
33 }
34 }
35 }]
36};
37
38var MUTABLE_DATUM_SCHEMA_BASE_PROPERTIES = exports.MUTABLE_DATUM_SCHEMA_BASE_PROPERTIES = {
39 type: {
40 type: 'integer',
41 minimum: MUTABLE_DATUM_FILE_TYPE,
42 maximum: MUTABLE_DATUM_DIR_TYPE
43 },
44 owner: {
45 type: 'string',
46 pattern: OP_ADDRESS_PATTERN
47 },
48 uuid: {
49 type: 'string',
50 pattern: OP_UUID_PATTERN
51 },
52 readers: {
53 type: 'array',
54 items: {
55 type: 'string',
56 pattern: OP_ADDRESS_PATTERN
57 }
58 },
59 reader_pubkeys: {
60 type: 'array',
61 items: {
62 type: 'string',
63 pattern: OP_HEX_PATTERN
64 }
65 },
66 version: {
67 type: 'integer'
68 },
69 proto_version: {
70 type: 'integer'
71 }
72};
73
74var MUTABLE_DATUM_SCHEMA_HEADER_PROPERTIES = exports.MUTABLE_DATUM_SCHEMA_HEADER_PROPERTIES = Object.assign({}, MUTABLE_DATUM_SCHEMA_BASE_PROPERTIES);
75MUTABLE_DATUM_SCHEMA_HEADER_PROPERTIES['data_hash'] = {
76 type: 'string',
77 pattern: OP_HEX_PATTERN
78};
79
80var MUTABLE_DATUM_INODE_HEADER_SCHEMA = exports.MUTABLE_DATUM_INODE_HEADER_SCHEMA = {
81 type: 'object',
82 properties: MUTABLE_DATUM_SCHEMA_HEADER_PROPERTIES,
83 additionalProperties: false,
84 required: Object.keys(MUTABLE_DATUM_SCHEMA_HEADER_PROPERTIES).filter(function (x) {
85 return x != 'reader_pubkeys';
86 }) // reader_pubkeys is optional
87};
88
89var MUTABLE_DATUM_DIRENT_SCHEMA = exports.MUTABLE_DATUM_DIRENT_SCHEMA = {
90 type: 'object',
91 properties: {
92 type: {
93 type: 'integer',
94 minimum: MUTABLE_DATUM_FILE_TYPE,
95 maximum: MUTABLE_DATUM_DIR_TYPE
96 },
97 uuid: {
98 type: 'string',
99 pattern: OP_UUID_PATTERN
100 },
101 version: {
102 type: 'integer'
103 }
104 },
105 additionalProperties: false,
106 required: ['type', 'uuid', 'version']
107};
108
109var MUTABLE_DATUM_DIR_IDATA_SCHEMA = exports.MUTABLE_DATUM_DIR_IDATA_SCHEMA = {
110 type: 'object',
111 properties: {
112 children: {
113 type: 'object',
114 patternProperties: {
115 OP_URLENCODED_NOSLASH_PATTERN: MUTABLE_DATUM_DIRENT_SCHEMA
116 }
117 },
118 header: MUTABLE_DATUM_INODE_HEADER_SCHEMA
119 },
120 strict: true,
121 required: ['children', 'header']
122};
123
124var MUTABLE_DATUM_FILE_SCHEMA_PROPERTIES = exports.MUTABLE_DATUM_FILE_SCHEMA_PROPERTIES = Object.assign({}, MUTABLE_DATUM_SCHEMA_BASE_PROPERTIES);
125MUTABLE_DATUM_FILE_SCHEMA_PROPERTIES['idata'] = {
126 type: 'string',
127 pattern: OP_BASE64_PATTERN
128};
129
130var MUTABLE_DATUM_DIR_SCHEMA_PROPERTIES = exports.MUTABLE_DATUM_DIR_SCHEMA_PROPERTIES = Object.assign({}, MUTABLE_DATUM_SCHEMA_BASE_PROPERTIES);
131MUTABLE_DATUM_DIR_SCHEMA_PROPERTIES['idata'] = Object.assign({}, MUTABLE_DATUM_DIR_IDATA_SCHEMA);
132
133var MUTABLE_DATUM_FILE_SCHEMA = exports.MUTABLE_DATUM_FILE_SCHEMA = {
134 type: 'object',
135 properties: MUTABLE_DATUM_FILE_SCHEMA_PROPERTIES,
136 additionalProperties: false,
137 required: Object.keys(MUTABLE_DATUM_FILE_SCHEMA_PROPERTIES).filter(function (x) {
138 return x != 'reader_pubkeys';
139 }) // reader_pubkeys is optional
140};
141
142var MUTABLE_DATUM_DIR_SCHEMA = exports.MUTABLE_DATUM_DIR_SCHEMA = {
143 type: 'object',
144 properties: MUTABLE_DATUM_DIR_SCHEMA_PROPERTIES,
145 additionalProperties: false,
146 required: Object.keys(MUTABLE_DATUM_DIR_SCHEMA_PROPERTIES)
147};
148
149var MUTABLE_DATUM_INODE_SCHEMA = exports.MUTABLE_DATUM_INODE_SCHEMA = {
150 anyOf: [Object.assign({}, MUTABLE_DATUM_FILE_SCHEMA), Object.assign({}, MUTABLE_DATUM_DIR_SCHEMA), Object.assign({}, MUTABLE_DATUM_INODE_HEADER_SCHEMA)]
151};
152
153var MUTABLE_DATUM_PATH_INFO_SCHEMA = exports.MUTABLE_DATUM_PATH_INFO_SCHEMA = {
154 type: 'object',
155 patternProperties: {
156 OP_URLENCODED_PATTERN: {
157 uuid: {
158 type: 'string',
159 pattern: OP_UUID_PATTERN
160 },
161 name: {
162 type: 'string',
163 pattern: OP_URLENCODED_NOSLASH_PATTERN
164 },
165 parent: {
166 type: 'string',
167 pattern: OP_URLENCODED_PATTERN
168 },
169 inode: {
170 anyOf: [MUTABLE_DATUM_DIR_SCHEMA, MUTABLE_DATUM_FILE_SCHEMA, MUTABLE_DATUM_INODE_HEADER_SCHEMA]
171 }
172 }
173 },
174 additionalProperties: false
175};
176
177var MUTABLE_DATUM_RESPONSE_SCHEMA = exports.MUTABLE_DATUM_RESPONSE_SCHEMA = {
178 type: 'object',
179 properties: {
180 status: {
181 type: 'boolean'
182 },
183 file: MUTABLE_DATUM_FILE_SCHEMA,
184 dir: MUTABLE_DATUM_DIR_SCHEMA,
185 inode: MUTABLE_DATUM_INODE_SCHEMA
186 },
187 additionalProperties: false,
188 required: ['status']
189};
190
191var MUTABLE_DATUM_EXTENDED_RESPONSE_SCHEMA = exports.MUTABLE_DATUM_EXTENDED_RESPONSE_SCHEMA = Object.assign({}, MUTABLE_DATUM_RESPONSE_SCHEMA);
192MUTABLE_DATUM_EXTENDED_RESPONSE_SCHEMA['path_info'] = MUTABLE_DATUM_PATH_INFO_SCHEMA;
193
194var DATASTORE_SCHEMA = exports.DATASTORE_SCHEMA = {
195 type: 'object',
196 properties: {
197 type: {
198 type: 'string',
199 pattern: "([a-zA-Z0-9_]+)$"
200 },
201 pubkey: {
202 type: 'string',
203 pattern: OP_PUBKEY_PATTERN
204 },
205 drivers: {
206 type: 'array',
207 items: {
208 type: 'string'
209 }
210 },
211 device_ids: {
212 type: 'array',
213 items: {
214 'type': 'string'
215 }
216 },
217 root_uuid: {
218 type: 'string',
219 pattern: OP_UUID_PATTERN
220 }
221 },
222 additionalProperties: false,
223 required: ['type', 'pubkey', 'drivers', 'device_ids', 'root_uuid']
224};
225
226var DATASTORE_RESPONSE_SCHEMA = exports.DATASTORE_RESPONSE_SCHEMA = {
227 type: 'object',
228 properties: {
229 datastore: DATASTORE_SCHEMA
230 },
231 additionalProperties: false,
232 required: ['datastore']
233};
234
235var DATASTORE_LOOKUP_PATH_ENTRY_SCHEMA = exports.DATASTORE_LOOKUP_PATH_ENTRY_SCHEMA = {
236 type: 'object',
237 properties: {
238 name: {
239 type: 'string',
240 pattern: OP_URLENCODED_NOSLASH_OR_EMPTY_PATTERN
241 },
242 uuid: {
243 type: 'string',
244 pattern: OP_UUID_PATTERN
245 },
246 parent: {
247 type: 'string',
248 pattern: OP_URLENCODED_OR_EMPTY_PATTERN
249 },
250 inode: MUTABLE_DATUM_DIR_SCHEMA
251 },
252 additionalProperties: false,
253 required: ['name', 'uuid', 'parent', 'inode']
254};
255
256var DATASTORE_LOOKUP_INODE_SCHEMA = exports.DATASTORE_LOOKUP_INODE_SCHEMA = {
257 type: 'object',
258 properties: {
259 name: {
260 type: 'string',
261 pattern: OP_URLENCODED_NOSLASH_OR_EMPTY_PATTERN
262 },
263 uuid: {
264 type: 'string',
265 pattern: OP_UUID_PATTERN
266 },
267 parent: {
268 type: 'string',
269 pattern: OP_URLENCODED_OR_EMPTY_PATTERN
270 },
271 inode: {
272 anyOf: [MUTABLE_DATUM_DIR_SCHEMA, MUTABLE_DATUM_FILE_SCHEMA, MUTABLE_DATUM_INODE_HEADER_SCHEMA]
273 }
274 },
275 additionalProperties: false,
276 required: ['name', 'uuid', 'parent', 'inode']
277};
278
279var DATASTORE_LOOKUP_RESPONSE_SCHEMA = exports.DATASTORE_LOOKUP_RESPONSE_SCHEMA = {
280 type: 'object',
281 properties: {
282 inode: {
283 anyOf: [MUTABLE_DATUM_DIR_SCHEMA, MUTABLE_DATUM_FILE_SCHEMA, MUTABLE_DATUM_INODE_HEADER_SCHEMA]
284 },
285 status: {
286 type: 'boolean'
287 }
288 },
289 additionalProperties: false,
290 required: ['inode', 'status']
291};
292
293var DATASTORE_LOOKUP_EXTENDED_RESPONSE_SCHEMA = exports.DATASTORE_LOOKUP_EXTENDED_RESPONSE_SCHEMA = {
294 type: 'object',
295 properties: {
296 path_info: {
297 type: 'object',
298 patternProperties: {
299 OP_URLENCODED_OR_EMPTY_PATTERN: DATASTORE_LOOKUP_INODE_SCHEMA
300 },
301 additionalProperties: false
302 },
303 inode_info: DATASTORE_LOOKUP_INODE_SCHEMA,
304 status: {
305 type: 'boolean'
306 }
307 },
308 additionalProperties: false,
309 required: ['path_info', 'inode_info', 'status']
310};
311
312var CORE_ERROR_SCHEMA = exports.CORE_ERROR_SCHEMA = {
313 type: 'object',
314 properties: {
315 error: {
316 type: 'string'
317 },
318 errno: {
319 type: 'integer'
320 }
321 },
322 additionalProperties: false,
323 required: ['errno', 'error']
324};
\No newline at end of file