Files: e602c7f5b93b901ece225fec5f2fc495eeaed73d / schema / poll.js
2716 bytesRaw
1 | const Validate = require('is-my-json-valid') |
2 | const { msgIdRegex, feedIdRegex, blobIdRegex } = require('ssb-ref') |
3 | |
4 | const dotType = require('./pollDetails/dot.js') |
5 | const proposalType = require('./pollDetails/proposal.js') |
6 | const scoreType = require('./pollDetails/score.js') |
7 | const { schema: chooseOneType } = require('./pollDetails/chooseOne.js') |
8 | |
9 | const schema = { |
10 | $schema: 'http://json-schema.org/schema#', |
11 | type: 'object', |
12 | required: ['type', 'pollDetails'], |
13 | properties: { |
14 | version: { |
15 | type: 'string', |
16 | pattern: '^0.1.0$' |
17 | }, |
18 | type: { |
19 | type: 'string', |
20 | pattern: '^poll$' |
21 | }, |
22 | pollDetails: { |
23 | oneOf: [ |
24 | { $ref: '#/definitions/pollDetails/dot'}, |
25 | { $ref: '#/definitions/pollDetails/proposal'}, |
26 | { $ref: '#/definitions/pollDetails/score'}, |
27 | { $ref: '#/definitions/pollDetails/chooseOne'} |
28 | // { $ref: '#/definitions/pollDetails/rsvp'}, |
29 | // { $ref: '#/definitions/pollDetails/meeting'}, |
30 | ] |
31 | }, |
32 | text: { type: 'string' }, |
33 | mentions: { |
34 | oneOf: [ |
35 | { type: 'null' }, |
36 | { |
37 | type: 'array', |
38 | items: { |
39 | oneOf: [ |
40 | { $ref: '#/definitions/mentions/message' }, |
41 | { $ref: '#/definitions/mentions/feed' }, |
42 | { $ref: '#/definitions/mentions/blob' } |
43 | ] |
44 | } |
45 | } |
46 | ] |
47 | }, |
48 | recps: { |
49 | oneOf: [ |
50 | { type: 'null' }, |
51 | { |
52 | type: 'array', |
53 | items: { |
54 | oneOf: [ |
55 | { $ref: '#/definitions/feedId' }, |
56 | { $ref: '#/definitions/mentions/feed' } |
57 | ] |
58 | } |
59 | } |
60 | ] |
61 | } |
62 | }, |
63 | definitions: { |
64 | |
65 | messageId: { |
66 | type: 'string', |
67 | pattern: msgIdRegex |
68 | }, |
69 | feedId: { |
70 | type: 'string', |
71 | pattern: feedIdRegex |
72 | }, |
73 | blobId: { |
74 | type: 'string', |
75 | pattern: blobIdRegex |
76 | }, |
77 | pollDetails: { |
78 | type: 'object', |
79 | dot: dotType, |
80 | proposal: proposalType, |
81 | score: scoreType, |
82 | chooseOne: chooseOneType |
83 | }, |
84 | mentions: { |
85 | message: { |
86 | type: 'object', |
87 | required: ['link'], |
88 | properties: { |
89 | link: { $ref: '#/definitions/messageId'} |
90 | } |
91 | }, |
92 | feed: { |
93 | type: 'object', |
94 | required: ['link', 'name'], |
95 | properties: { |
96 | link: { $ref: '#/definitions/feedId'}, |
97 | name: { type: 'string' } |
98 | } |
99 | }, |
100 | blob: { |
101 | type: 'object', |
102 | required: ['link', 'name'], |
103 | properties: { |
104 | link: { $ref: '#/definitions/blobId'}, |
105 | name: { type: 'string' } |
106 | } |
107 | } |
108 | } |
109 | } |
110 | } |
111 | |
112 | const validate = Validate(schema, { verbose: true }) |
113 | |
114 | module.exports = { |
115 | schema, |
116 | validate |
117 | } |
118 |
Built with git-ssb-web