Mirror of https://github.com/roostorg/coop
github.com/roostorg/coop
1/* eslint-disable max-lines */
2import { mergeTypeDefs } from '@graphql-tools/merge';
3
4import { typeDefs as actionTypeDefs } from './modules/action.js';
5import { typeDefs as actionStatisticsTypeDefs } from './modules/actionStatistics.js';
6import { typeDefs as apiKeyTypeDefs } from './modules/apiKey.js';
7import { typeDefs as authenticationTypeDefs } from './modules/authentication.js';
8import { typeDefs as backtestTypeDefs } from './modules/backtest.js';
9import { typeDefs as contentTypeTypeDefs } from './modules/contentType.js';
10import { typeDefs as genericTypeDefs } from './modules/generic.js';
11import { typeDefs as hashBanksTypeDefs } from './modules/hashBanks/schema.js';
12import { typeDefs as insightsTypeDefs } from './modules/insights.js';
13import { typeDefs as integrationTypeDefs } from './modules/integration.js';
14import { typeDefs as investigationTypeDefs } from './modules/investigation.js';
15import { typeDefs as itemTypeTypeDefs } from './modules/itemType.js';
16import { typeDefs as locationBankTypeDefs } from './modules/locationBank.js';
17import { typeDefs as manualReviewToolTypeDefs } from './modules/manualReviewTool.js';
18import { typeDefs as ncmecTypeDefs } from './modules/ncmec.js';
19import { typeDefs as orgTypeDefs } from './modules/org.js';
20import { typeDefs as policyTypeDefs } from './modules/policy.js';
21import { typeDefs as reportingTypeDefs } from './modules/reporting.js';
22import { typeDefs as reportingRulesTypeDefs } from './modules/reportingRule.js';
23import { typeDefs as retroactionTypeDefs } from './modules/retroaction.js';
24import { typeDefs as routingRulesTypeDefs } from './modules/routingRule.js';
25import { typeDefs as ruleTypeDefs } from './modules/rule.js';
26import { typeDefs as signalTypeDefs } from './modules/signal.js';
27import { typeDefs as spotTestTypeDefs } from './modules/spotTest.js';
28import { typeDefs as textBankTypeDefs } from './modules/textBank.js';
29import { typeDefs as userTypeDefs } from './modules/user.js';
30
31/**
32 * GraphQL Schema
33 */
34const typeDefs = /* GraphQL */ `
35 enum RuleEnvironment {
36 BACKGROUND
37 BACKTEST
38 LIVE
39 MANUAL
40 RETROACTION
41 }
42
43 enum ForgotPasswordError {
44 USER_NOT_FOUND
45 OTHER
46 }
47
48 enum MutateActionError {
49 ACTION_NAME_EXISTS
50 }
51
52 # !! IMPORTANT: when you add a value here, also add it to FieldType and SignalInputType !!
53 enum ScalarType {
54 USER_ID
55 ID
56 STRING
57 BOOLEAN
58 NUMBER
59 AUDIO
60 IMAGE
61 VIDEO
62 DATETIME
63 GEOHASH
64 RELATED_ITEM
65 URL
66 POLICY_ID
67 }
68
69 # This is equivalent to ScalarType, but with 'FULL_ITEM' added
70 enum SignalInputType {
71 USER_ID
72 ID
73 STRING
74 BOOLEAN
75 NUMBER
76 AUDIO
77 IMAGE
78 VIDEO
79 DATETIME
80 GEOHASH
81 RELATED_ITEM
82 URL
83 FULL_ITEM
84 POLICY_ID
85 }
86
87 # !! IMPORTANT: when you add a value here, also add it to FieldType !!
88 enum ContainerType {
89 ARRAY
90 MAP
91 }
92
93 enum FieldType {
94 USER_ID
95 ID
96 STRING
97 BOOLEAN
98 NUMBER
99 AUDIO
100 IMAGE
101 VIDEO
102 DATETIME
103 GEOHASH
104 ARRAY
105 MAP
106 RELATED_ITEM
107 URL
108 POLICY_ID
109 }
110
111 enum Language {
112 ABKHAZIAN
113 AFAR
114 AFRIKAANS
115 AKAN
116 ALBANIAN
117 AMHARIC
118 ARABIC
119 ARAGONESE
120 ARMENIAN
121 ASSAMESE
122 AVARIC
123 AVESTAN
124 AYMARA
125 AZERBAIJANI
126 AZERI
127 BAMBARA
128 BASHKIR
129 BASQUE
130 BELARUSIAN
131 BENGALI
132 BIHARI
133 BISLAMA
134 BOKMAL
135 BOSNIAN
136 BRETON
137 BULGARIAN
138 BURMESE
139 CATALAN
140 CEBUANO
141 CENTRAL_KHMER
142 CHAMORRO
143 CHECHEN
144 CHINESE
145 CHURCH_SLAVIC
146 CHUVASH
147 CORNISH
148 CORSICAN
149 CREE
150 CROATIAN
151 CZECH
152 DANISH
153 DHIVEHI
154 DUTCH
155 DZONGKHA
156 ENGLISH
157 ESPERANTO
158 ESTONIAN
159 EWE
160 FAROESE
161 FARSI
162 FIJIAN
163 FINNISH
164 FLEMISH
165 FRENCH
166 FULAH
167 GAELIC
168 GALICIAN
169 GANDA
170 GEORGIAN
171 GERMAN
172 GREEK
173 GUARANI
174 GUJARATI
175 HAITIAN
176 HAUSA
177 HAWAIIAN
178 HEBREW
179 HERERO
180 HINDI
181 HIRI_MOTU
182 HUNGARIAN
183 ICELANDIC
184 IDO
185 IGBO
186 INDONESIAN
187 INTERLINGUA
188 INUKTITUT
189 INUPIAQ
190 IRISH
191 ITALIAN
192 JAPANESE
193 JAVANESE
194 KALAALLISUT
195 KANNADA
196 KANURI
197 KASHMIRI
198 KAZAKH
199 KIKUYU
200 KINYARWANDA
201 KOMI
202 KONGO
203 KOREAN
204 KUANYAMA
205 KURDISH
206 KYRGYZ
207 LAO
208 LATIN
209 LATVIAN
210 LIMBURGAN
211 LINGALA
212 LITHUANIAN
213 LUBA_KATANGA
214 LUXEMBOURGISH
215 MACEDONIAN
216 MALAGASY
217 MALAY
218 MALAYALAM
219 MALTESE
220 MANX
221 MAORI
222 MARATHI
223 MARSHALLESE
224 MOLDOVIAN
225 MONGOLIAN
226 NAURU
227 NAVAJO
228 NDONGA
229 NEPALI
230 NORTH_NDEBELE
231 NORTHERN_SAMI
232 NORWEGIAN
233 NYANJA
234 OCCITAN
235 OJIBWA
236 ORIYA
237 OROMO
238 OSSETIAN
239 PALI
240 PASHTO
241 PERSIAN
242 PIDGIN
243 POLISH
244 PORTUGUESE
245 PUNJABI
246 QUECHUA
247 ROMANIAN
248 ROMANSH
249 RUNDI
250 RUSSIAN
251 SAMOAN
252 SANGO
253 SANSKRIT
254 SARDINIAN
255 SERBIAN
256 SHONA
257 SICHUAN_YI
258 SINDHI
259 SINHALESE
260 SLOVAK
261 SLOVENE
262 SOMALI
263 SOUTH_NDEBELE
264 SOUTHERN_SOTHO
265 SPANISH
266 SUNDANESE
267 SWAHILI
268 SWATI
269 SWEDISH
270 TAGALOG
271 TAHITIAN
272 TAJIK
273 TAMIL
274 TATAR
275 TELUGU
276 THAI
277 TIBETAN
278 TIGRINYA
279 TONGA
280 TSONGA
281 TSWANA
282 TURKISH
283 TURKMEN
284 TWI
285 UKRAINIAN
286 URDU
287 UYGHUR
288 UZBEK
289 VENDA
290 VIETNAMESE
291 VOLAPUK
292 WALLOON
293 WELSH
294 WESTERN_FRISIAN
295 WOLOF
296 XHOSA
297 YIDDISH
298 YORUBA
299 ZHUANG
300 ZULU
301 }
302
303 type InviteUserToken {
304 token: String!
305 email: String!
306 role: UserRole!
307 orgId: String!
308 samlEnabled: Boolean!
309 }
310
311 type InviteUserTokenSuccessResponse {
312 tokenData: InviteUserToken!
313 }
314
315 type InviteUserTokenExpiredError implements Error {
316 title: String!
317 status: Int!
318 type: [String!]!
319 pointer: String
320 detail: String
321 requestId: String
322 }
323
324 type InviteUserTokenMissingError implements Error {
325 title: String!
326 status: Int!
327 type: [String!]!
328 pointer: String
329 detail: String
330 requestId: String
331 }
332
333 union InviteUserTokenResponse =
334 InviteUserTokenSuccessResponse
335 | InviteUserTokenExpiredError
336 | InviteUserTokenMissingError
337
338 type MatchingBanks {
339 textBanks: [TextBank!]!
340 locationBanks: [LocationBank!]!
341 hashBanks: [HashBank!]!
342 }
343
344 enum LoginMethod {
345 PASSWORD
346 SAML
347 }
348
349 input SignUpInput {
350 email: String!
351 password: String
352 loginMethod: LoginMethod!
353 firstName: String!
354 lastName: String!
355 orgId: String!
356 role: UserRole
357 inviteUserToken: String
358 }
359
360 type SignUpSuccessResponse {
361 data: User
362 }
363
364 type SignUpUserExistsError implements Error {
365 title: String!
366 status: Int!
367 type: [String!]!
368 pointer: String
369 detail: String
370 requestId: String
371 }
372
373 union SignUpResponse = SignUpSuccessResponse | SignUpUserExistsError
374
375 type CountByDay {
376 date: Date!
377 count: Int!
378 }
379
380 type CountByPolicyByDay {
381 date: Date!
382 count: Int!
383 policy: CountByPolicyByDayPolicy!
384 }
385
386 type CountByPolicyByDayPolicy {
387 id: ID!
388 name: String!
389 }
390
391 type CountByTagByDay {
392 date: Date!
393 count: Int!
394 tag: String!
395 }
396
397 type CountByActionByDay {
398 date: Date!
399 count: Int!
400 action: CountByActionByDayAction!
401 }
402
403 type CountByActionByDayAction {
404 name: String!
405 id: ID!
406 }
407
408 type CountByDecisionTypeByDay {
409 date: Date!
410 count: Int!
411 decisionType: String!
412 }
413
414 type AllRuleInsights {
415 totalSubmissionsByDay: [CountByDay!]!
416 actionedSubmissionsByDay: [CountByDay!]!
417 actionedSubmissionsByPolicyByDay: [CountByPolicyByDay!]!
418 actionedSubmissionsByTagByDay: [CountByTagByDay!]!
419 actionedSubmissionsByActionByDay: [CountByActionByDay!]!
420 }
421
422 input CreateOrgInput {
423 name: String!
424 email: String!
425 website: String!
426 }
427
428 input SendPasswordResetInput {
429 email: String!
430 }
431
432 input ResetPasswordInput {
433 token: String!
434 newPassword: String!
435 }
436
437 input UpdateRoleInput {
438 id: ID!
439 role: UserRole!
440 }
441
442 input InviteUserInput {
443 email: String!
444 role: UserRole!
445 }
446
447 type PendingInvite {
448 id: ID!
449 email: String!
450 role: UserRole!
451 createdAt: DateTime!
452 }
453
454 enum RequestDemoInterest {
455 CUSTOM_AI_MODELS
456 MODERATOR_CONSOLE
457 AUTOMATED_ENFORCEMENT
458 COMPLIANCE_TOOLKIT
459 }
460
461 input RequestDemoInput {
462 email: String!
463 company: String!
464 website: String!
465 interests: [RequestDemoInterest!]!
466 ref: String!
467 isFromGoogleAds: Boolean!
468 }
469
470 directive @publicResolver on FIELD_DEFINITION
471
472 type Query {
473 myOrg: Org
474 userFromToken(token: String!): ID
475 inviteUserToken(token: String!): InviteUserTokenResponse! @publicResolver
476 allRuleInsights: AllRuleInsights
477 isWarehouseAvailable: Boolean!
478 }
479
480 type Mutation {
481 # TODO: secure these; figure out where they should go
482 # (auth module? user module? org module?)
483 signUp(input: SignUpInput!): SignUpResponse! @publicResolver
484 sendPasswordReset(input: SendPasswordResetInput!): Boolean! @publicResolver
485 resetPassword(input: ResetPasswordInput!): Boolean! @publicResolver
486 generatePasswordResetToken(userId: ID!): String
487 updateRole(input: UpdateRoleInput!): Boolean
488 inviteUser(input: InviteUserInput!): String
489 deleteInvite(id: ID!): Boolean
490 approveUser(id: ID!): Boolean
491 rejectUser(id: ID!): Boolean
492
493 requestDemo(input: RequestDemoInput!): Boolean @publicResolver
494 }
495`;
496
497export default mergeTypeDefs([
498 typeDefs,
499 genericTypeDefs,
500 // Modules
501 actionStatisticsTypeDefs,
502 actionTypeDefs,
503 apiKeyTypeDefs,
504 authenticationTypeDefs,
505 backtestTypeDefs,
506 contentTypeTypeDefs,
507 hashBanksTypeDefs,
508 insightsTypeDefs,
509 integrationTypeDefs,
510 investigationTypeDefs,
511 itemTypeTypeDefs,
512 locationBankTypeDefs,
513 manualReviewToolTypeDefs,
514 ncmecTypeDefs,
515 orgTypeDefs,
516 policyTypeDefs,
517 reportingRulesTypeDefs,
518 reportingTypeDefs,
519 retroactionTypeDefs,
520 routingRulesTypeDefs,
521 ruleTypeDefs,
522 signalTypeDefs,
523 spotTestTypeDefs,
524 textBankTypeDefs,
525 userTypeDefs,
526]);