Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const Joi = require('joi')
module.exports = {
fragment: [
{
fragmentType: Joi.valid('manuscript').required(),
title: Joi.string().required(),
source: Joi.string(),
metadata: Joi.any(),
},
],
user: {
// make these core fields optional
email: Joi.string().email(),
passwordHash: Joi.string(),
// auth fields
orcid: Joi.string(),
oauth: Joi.object({
accessToken: Joi.string(),
refreshToken: Joi.string(),
}),
valid: Joi.valid('Asset', 'Entry'),
when: 'type',
is: 'Link'
}),
validations: Joi.array().unique().items(fieldValidations)
});
const fieldSchema = Joi.object().keys({
id: Joi.string().required(),
newId: Joi.string()
.invalid(Joi.ref('id'))
.max(64)
// the empty case will be caught by joi by default, we don't want duplicate errors
.regex(/^$|^[a-zA-Z][a-zA-Z0-9_]*$/),
name: Joi.string().required(),
type: Joi.valid(
'Symbol',
'Text',
'Integer',
'Number',
'Date',
'Boolean',
'Object',
'Link',
'Array',
'Location'
).required(),
linkType: enforceDependency({
valid: Joi.valid(['Asset', 'Entry']),
when: 'type',
is: 'Link'
}),
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
const Joi = require('joi')
let platforms = ['winia32-bc', 'winx64-bc']
let channels = ['dev', 'release', 'nightly', 'beta']
let validator = {
query: {
platform: Joi.valid(platforms).required(),
channel: Joi.valid(channels).required(),
version: Joi.string().required(),
ref: Joi.string(),
event: Joi.string().only(['startup', 'download-complete', 'installer-run']).required()
}
}
exports.buildEventObject = (request) => {
return {
platform: request.query.platform || 'unknown',
version: request.query.version || 'unknown',
channel: request.query.channel || 'unknown',
ref: request.query.ref || 'none',
event: request.query.event || 'unknown'
}
}
maxScale: Joi.number().integer().valid(0),
defaultVisibility: Joi.boolean().valid(true),
extent: Joi.object().keys({
xmin: Joi.number().valid(-180),
ymin: Joi.number().valid(-90),
xmax: Joi.number().valid(180),
ymax: Joi.number().valid(90),
spatialReference: Joi.object().keys({
wkid: Joi.number().valid(4326),
latestWkid: Joi.number().valid(4326)
})
}),
hasAttachments: Joi.boolean().valid(false),
htmlPopupType: Joi.string().allow('esriServerHTMLPopupTypeNone'),
displayField: Joi.string().allow('OBJECTID'),
typeIdField: Joi.valid(null),
relationships: Joi.array().min(0),
canModifyLayer: Joi.boolean().valid(false),
canScaleSymbols: Joi.boolean().valid(false),
hasLabels: Joi.boolean().valid(false),
capabilities: Joi.string().allow('Query'),
maxRecordCount: Joi.number().integer().valid(2000),
supportsStatistics: Joi.boolean().valid(true),
supportsAdvancedQueries: Joi.boolean().valid(true),
supportedQueryFormats: Joi.string().allow('JSON'),
ownershipBasedAccessControlForFeatures: Joi.object().keys({
allowOthersToQuery: Joi.boolean().valid(true)
}),
supportsCoordinatesQuantization: Joi.boolean().valid(false),
useStandardizedQueries: Joi.boolean().valid(true),
advancedQueryCapabilities: Joi.object().keys({
useStandardizedQueries: Joi.boolean().valid(true),
type: Joi.string(),
alias: Joi.string(),
sqlType: Joi.string().valid('sqlTypeOther'),
domain: Joi.valid(null),
defaultValue: Joi.valid(null)
})
const layersTemplateSchema = Joi.object().keys({
currentVersion: Joi.number().valid(10.51),
fullVersion: Joi.string().valid('10.5.1'),
id: Joi.number().integer().valid(0),
name: Joi.string().allow(''),
type: Joi.string().allow('Feature Layer'),
description: Joi.string().allow(''),
copyrightText: Joi.string().allow(''),
parentLayer: Joi.valid(null),
subLayers: Joi.valid(null),
minScale: Joi.number().integer().valid(0),
maxScale: Joi.number().integer().valid(0),
defaultVisibility: Joi.boolean().valid(true),
extent: Joi.object().keys({
xmin: Joi.number().valid(-180),
ymin: Joi.number().valid(-90),
xmax: Joi.number().valid(180),
ymax: Joi.number().valid(90),
spatialReference: Joi.object().keys({
wkid: Joi.number().valid(4326),
latestWkid: Joi.number().valid(4326)
})
}),
hasAttachments: Joi.boolean().valid(false),
htmlPopupType: Joi.string().allow('esriServerHTMLPopupTypeNone'),
name: Joi.string(),
type: Joi.string().allow('esriFieldTypeOID', 'esriFieldTypeInteger', 'esriFieldTypeDouble', 'esriFieldTypeString', 'esriFieldTypeDate'),
alias: Joi.string(),
length: Joi.optional().when('type', {
is: Joi.string().allow('esriFieldTypeString', 'esriFieldTypeDate'),
then: Joi.number().integer().min(0)
}),
defaultValue: Joi.any().valid(null),
domain: Joi.any().valid(null),
editable: Joi.boolean().valid(false),
nullable: Joi.boolean().valid(false),
sqlType: Joi.string().valid('sqlTypeOther', 'sqlTypeDouble', 'sqlTypeInteger')
})).min(0),
drawingInfo: Joi.object().keys({
renderer: Joi.object().keys({}),
labelingInfo: Joi.valid(null)
})
})
const oidTemplateSchema = Joi.object().keys({
name: Joi.string().valid('OBJECTID'),
type: Joi.string().valid('esriFieldTypeOID'),
alias: Joi.string().valid('OBJECTID'),
sqlType: Joi.string().valid('sqlTypeInteger'),
domain: Joi.valid(null),
defaultValue: Joi.valid(null)
})
const serverTemplateSchema = Joi.object().keys({
currentVersion: Joi.number().valid(10.51),
fullVersion: Joi.string().valid('10.5.1'),
serviceDescription: Joi.string().allow(''),
"ready-on": Joi.string().valid("listen", "message", "instant"),
"stop-signal": Joi.string().valid("SIGINT", "SIGTERM", "disconnect", "message"),
"kill-signal": Joi.string().valid("SIGTERM", "SIGKILL"),
"instances": Joi.number().integer().positive().max(65536),
"max-instances": Joi.number().integer().max(65536),
"unique-instances": Joi.boolean(),
"restart-crashing": Joi.boolean(),
"restart-new-crashing": Joi.boolean(),
"restart-crashing-delay": Joi.number().integer().positive(),
"logger": Joi.string(),
"logger-args": Joi.array().items(Joi.string()),
"max-buffered-log-bytes": Joi.number().integer().positive().max(Number.MAX_SAFE_INTEGER),
"max-log-line-length": Joi.number().integer().positive().max(Number.MAX_SAFE_INTEGER),
"log-retention-timeout": Joi.number().integer(),
"stop-timeout": Joi.alternatives().try(Joi.number().integer().positive(), Joi.valid(null)),
"start-timeout": Joi.alternatives().try(Joi.number().integer().positive(), Joi.valid(null))
});
error: 'Not found',
code: 404
},
tokenNotProvided: {
error: 'Token not provided',
code: 403
},
invalidList: {
error: 'List not found',
code: 404
}
}
const requestParams = {
[paramsTypes.CREATE]: Joi.object({
item: Joi.valid(items).required(),
itemId: Joi.string().min(1).max(50).when('item', { is: itemsWithID, then: Joi.required() }),
event: Joi.valid(events).required(),
url: Joi.string().min(3).max(100).required(),
userId: Joi.string().min(1).max(50).required()
}),
[paramsTypes.UPDATE]: Joi.object({
id: Joi.string().min(1).max(50).required(),
item: Joi.valid(items),
itemId: Joi.string().min(1).max(50).when('item', { is: itemsWithID, then: Joi.required() }),
event: Joi.valid(events),
url: Joi.string().min(3).max(100),
wb: Joi.string().min(1).max(50)
}),
[paramsTypes.REMOVE]: Joi.object({
id: Joi.string().min(1).max(50).required()
}),
.items(
Joi.object()
.keys({
source: Joi.alternatives().try(Joi.string(), Joi.number()),
target: Joi.alternatives().try(Joi.string(), Joi.number()),
value: Joi.number()
.min(0)
.required(),
})
.unknown()
)
.required(),
})
.required(),
layout: Joi.valid('horizontal', 'vertical'),
align: Joi.any().valid(sankeyAlignmentPropKeys),
sort: Joi.valid('auto', 'input', 'ascending', 'descending'),
nodeOpacity: Joi.number()
.min(0)
.max(1),
nodeWidth: Joi.number().min(1),
nodePaddingX: Joi.number().positive(),
nodePaddingY: Joi.number().positive(),
nodeBorderWidth: Joi.number().min(0),
nodeBorderColor: inheritedColor,
linkOpacity: Joi.number()
.min(0)
.max(1),
linkContract: Joi.number(),
type: Joi.string().valid(validType).required(),
lang: Joi.string().valid(validLang).required(),
officialSite: Joi.string().uri().required().allow(''),
begin: ISOJoi.string().isoString().required().allow(''),
end: ISOJoi.string().isoString().required().allow(''),
comment: Joi.string().trim().allow(''),
sites: Joi.array().items(Joi.object()
.keys({
site: Joi.string().valid(Object.keys(allSite)),
id: Joi.string().trim().when('url', {
is: Joi.forbidden(),
then: Joi.required()
}),
url: Joi.string().uri()
})
.when(Joi.object().keys({ site: Joi.valid(Object.keys(onairSite)) }).unknown(), {
then: Joi.object().keys({
begin: ISOJoi.string().isoString().required().allow(''),
comment: Joi.string().trim().allow('')
})
}))
});