Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const joiql = require('../../')
const app = require('express')()
const graphqlHTTP = require('express-graphql')
const Article = require('./models/article')
const Artwork = require('./models/artwork')
const Artist = require('./models/artist')
const Show = require('./models/show')
const { object, string } = require('joi')
const artsyXapp = require('artsy-xapp')
const cache = require('./middleware/cache')
const rest = require('./middleware/rest')
const api = joiql({
query: {
artwork: object(Artwork.Attrs).meta({ args: { id: string().required() } }),
article: object(Article.Attrs).meta({ args: { id: string().required() } }),
artist: object(Artist.Attrs).meta({ args: { id: string().required() } }),
show: object(Show.Attrs).meta({ args: { id: string().required() } })
}
})
// JoiQL Middleware
api.on('query', cache.get)
api.on('query', rest.fetch)
api.on('query.artwork.fields.artist', Artwork.resolveArtist)
api.on('query', cache.set)
// Start express server
app.use('/graphql', graphqlHTTP({
schema: api.schema,
graphiql: true
}))
// const status = {
// probes: {
// database: database.check.bind(database),
// auth: createServiceProbe(options.authApiUrl)
// }
// };
// installStatusRouter(router, status);
const baseValidators = {
start: joi.number().default(0),
limit: joi.number().default(10),
publisher: joi
.array()
.items(joi.string())
.optional(),
dateFrom: joi.string().optional(),
dateTo: joi.string().optional(),
region: joi
.alternatives([joi.array().items(joi.string()), joi.string()])
.optional(),
format: joi
.array()
.items(joi.string())
.optional(),
publishingState: joi
.array()
.items(joi.string())
.optional()
};
const facetQueryValidation = {
query: {
var is = require('joi');
module.exports = is.object({
_id: is.string(),
gdp: is.number(),
country_code: is.string().uppercase().length(2),
name: is.string(),
updated: is.date(),
'region-number': is.string(),
population: is.number(),
});
var utils = require('../../../../utils.js');
var is = require('joi');
module.exports = is.object({
name: 'Countries',
type: 'object',
file: is.string(),
root: is.string(),
is_dependency: is.boolean(),
dependants: is.array(),
key: '_id',
seed: 0,
data: {
min: 0,
max: 0,
count: 1,
inputs: is.array().items(is.string()).length(1),
dependencies: is.array().length(0),
pre_run: is.func(),
pre_build: is.func(),
},
properties: {
_id: utils.check('string', 'The document id', { post_build: is.func() }),
deleted: Joi.number()
.valid(0)
.valid(1),
deletedBy: Joi.any(),
deletedAt: Joi.any(),
private: Joi.number()
.valid(0)
.valid(1),
urlSlug: Joi.string(),
continent: joiValidator.continent(),
alpha2: joiValidator.alpha2(),
alpha3: joiValidator.alpha3(),
address1: Joi.string(),
address2: Joi.any(),
countryNumber: Joi.number().integer(),
countryName: Joi.string(),
admin1Code: Joi.any(),
admin1Name: Joi.any(),
admin2Code: Joi.any(),
admin2Name: Joi.any(),
admin3Code: Joi.any(),
admin3Name: Joi.any(),
admin4Code: Joi.any(),
admin4Name: Joi.any(),
placeGeonameId: Joi.any(),
placeName: Joi.string(),
userInvites: Joi.alternatives().try(
Joi.array().items(
Joi.object().keys({
id: Joi.string(),
email: joiValidator.mail(),
userType: Joi.string(),
name: 'string',
rules: [
{
name: 'phone',
validate(params, value, state, options) {
const phone = value.replace(/\D/g, '');
if (phone.length === 10) {
return value;
}
}
}
]
}));
const electionReminderSchema = Joi.object().keys({
email: Joi.string().email(),
phone: customJoi.string().phone()
}).or('email', 'phone');
const options = {
abortEarly: false,
language: {
}
};
/**
* @module SurveyResultPolicy
* @description A policy for working with surveys
*/
module.exports = class SurveyPolicy extends Policy {
electionReminder(request, reply) {
const Joi = require('joi');
const userSchema = {
_id: Joi.string(),
createdOn: Joi.date(),
firstName: Joi.string().required(),
lastName: Joi.string().required(),
email: Joi.string().email({ minDomainAtoms: 2 }),
passwordHash: Joi.string(),
signupToken: Joi.string(),
resetPasswordToken: Joi.string()
.allow(null)
.default(null),
isEmailVerified: Joi.boolean().default(false),
oauth: Joi.object().keys({
google: Joi.boolean().default(false),
}),
};
module.exports = obj => Joi.validate(obj, userSchema, { allowUnknown: true });
userBillingHistoryGetAll: function ($deferred, query, raw) {
$deferred.resolve(this._request({
query: {
auto_pagination: Joi.boolean(),
order: Joi.string().valid('type', 'occured_at', 'action'),
type: Joi.string(),
occured_at: Joi.string(),
action: Joi.string()
}
}, {
callee: 'userBillingHistoryGetAll',
method: 'GET',
path: 'user/billing/history',
required: 'result',
query: query || {}
}, raw));
},
use(rule) {
const schema = Joi.object().keys({
name: Joi.string().required(),
filters: Joi.array().items(Joi.func(), Joi.array().items(Joi.func())).required(),
results: Joi.array().required(),
transform: Joi.func().required(),
});
Joi.validate(rule, schema, (err, value) => {
if (err) {
logger.error(err, value);
throw err;
}
});
this._rules.push(rule);
return this;
}
'county',
'macrocounty',
'region',
'macroregion',
'county',
'coarse'
)
)
.description(
' The administrative hierarchy level for the query. Refer to https://github.com/pelias/documentation/blob/master/search.md#filter-by-data-type for details.'
),
size: Joi.number()
.description('The amount of results returned. Default 10')
.default(10),
host: Joi.string()
.default('https://api.openrouteservice.org/geocode/search/structured')
.description('Determines the API url.'),
mime_type: Joi.string()
.valid(['application/json'])
.default('application/json')
.description('Determines the mime type of request.')
})
.unknown(false)
export default schema