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