Skip to content

Commit

Permalink
feat: soften the schema by allowing both '' and null
Browse files Browse the repository at this point in the history
  • Loading branch information
alexey-yarmosh committed Feb 6, 2025
1 parent b4f0bc8 commit 2f5e36a
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 41 deletions.
6 changes: 3 additions & 3 deletions src/measurement/handler/progress.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ const schema = Joi.object<MeasurementProgressMessage>({
measurementId: Joi.string().required(),
overwrite: Joi.boolean(),
result: Joi.object({
rawOutput: Joi.string().required(),
rawHeaders: Joi.string(),
rawBody: Joi.string(),
rawOutput: Joi.string().allow('', null).required(),
rawHeaders: Joi.string().allow('', null),
rawBody: Joi.string().allow('', null),
}).required(),
}).required();

Expand Down
76 changes: 38 additions & 38 deletions src/measurement/handler/result.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import { getProbeValidator } from '../../lib/probe-validator.js';

const pingResultSchema = Joi.object<PingResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().allow('').required(),
resolvedAddress: Joi.string().allow(null),
resolvedHostname: Joi.string().allow(null),
rawOutput: Joi.string().allow('', null).required(),
resolvedAddress: Joi.string().allow('', null),
resolvedHostname: Joi.string().allow('', null),
timings: Joi.array().items(Joi.object({
rtt: Joi.number().required(),
ttl: Joi.number().required(),
Expand All @@ -26,12 +26,12 @@ const pingResultSchema = Joi.object<PingResult>({

const tracerouteResultSchema = Joi.object<TracerouteResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().allow('').required(),
resolvedAddress: Joi.string().allow(null),
resolvedHostname: Joi.string().allow(null),
rawOutput: Joi.string().allow('', null).required(),
resolvedAddress: Joi.string().allow('', null),
resolvedHostname: Joi.string().allow('', null),
hops: Joi.array().items(Joi.object({
resolvedAddress: Joi.string().allow(null).required(),
resolvedHostname: Joi.string().allow(null).required(),
resolvedAddress: Joi.string().allow('', null).required(),
resolvedHostname: Joi.string().allow('', null).required(),
timings: Joi.array().items(Joi.object({
rtt: Joi.number().allow(null).required(),
})).required(),
Expand All @@ -41,39 +41,39 @@ const tracerouteResultSchema = Joi.object<TracerouteResult>({
const dnsResultSchema = Joi.alternatives([
Joi.object<TestResult & DnsRegularResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().allow('').required(),
statusCodeName: Joi.string().allow(null),
rawOutput: Joi.string().allow('', null).required(),
statusCodeName: Joi.string().allow('', null),
statusCode: Joi.number().allow(null),
resolver: Joi.string().allow(null),
resolver: Joi.string().allow('', null),
timings: Joi.object({
total: Joi.number().allow(null).required(),
}),
answers: Joi.array().items(Joi.alternatives([
Joi.object({
name: Joi.string().allow(null).required(),
type: Joi.string().allow(null).required(),
name: Joi.string().allow('', null).required(),
type: Joi.string().allow('', null).required(),
ttl: Joi.number().allow(null).required(),
class: Joi.string().allow(null).required(),
value: Joi.string().allow(null).required(),
class: Joi.string().allow('', null).required(),
value: Joi.string().allow('', null).required(),
}),
Joi.object({}),
])),
}),
Joi.object<TestResult & DnsTraceResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().allow('').required(),
rawOutput: Joi.string().allow('', null).required(),
hops: Joi.array().items(Joi.object({
resolver: Joi.string().allow(null).required(),
resolver: Joi.string().allow('', null).required(),
timings: Joi.object({
total: Joi.number().allow(null).required(),
}).required(),
answers: Joi.array().items(Joi.alternatives([
Joi.object({
name: Joi.string().allow(null).required(),
type: Joi.string().allow(null).required(),
name: Joi.string().allow('', null).required(),
type: Joi.string().allow('', null).required(),
ttl: Joi.number().allow(null).required(),
class: Joi.string().allow(null).required(),
value: Joi.string().allow(null).required(),
class: Joi.string().allow('', null).required(),
value: Joi.string().allow('', null).required(),
}),
Joi.object({}),
])).required(),
Expand All @@ -83,13 +83,13 @@ const dnsResultSchema = Joi.alternatives([

const mtrResultSchema = Joi.object<MtrResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().allow('').required(),
resolvedAddress: Joi.string().allow(null),
resolvedHostname: Joi.string().allow(null),
rawOutput: Joi.string().allow('', null).required(),
resolvedAddress: Joi.string().allow('', null),
resolvedHostname: Joi.string().allow('', null),
hops: Joi.array().items(Joi.object({
asn: Joi.array().items(Joi.number()).required(),
resolvedAddress: Joi.string().allow(null).required(),
resolvedHostname: Joi.string().allow(null).required(),
resolvedAddress: Joi.string().allow('', null).required(),
resolvedHostname: Joi.string().allow('', null).required(),
stats: Joi.object({
min: Joi.number().allow(null).required(),
max: Joi.number().allow(null).required(),
Expand All @@ -104,7 +104,7 @@ const mtrResultSchema = Joi.object<MtrResult>({
jAvg: Joi.number().allow(null).required(),
}).required(),
timings: Joi.array().items(Joi.object({
seq: Joi.string().allow(null),
seq: Joi.string().allow('', null),
rtt: Joi.number().allow(null),
})).required(),
})),
Expand All @@ -113,29 +113,29 @@ const mtrResultSchema = Joi.object<MtrResult>({
const httpResultSchema = Joi.object<HttpResult>({
status: Joi.string().valid('finished', 'failed').required(),
rawOutput: Joi.string().allow('', null).required(),
resolvedAddress: Joi.string().allow(null),
resolvedAddress: Joi.string().allow('', null),
headers: Joi.object().pattern(Joi.string(), Joi.alternatives([
Joi.string().allow(''),
Joi.string().allow('', null),
Joi.array(),
])),
rawHeaders: Joi.string().allow('', null),
rawBody: Joi.string().allow('', null),
truncated: Joi.boolean(),
statusCode: Joi.number().allow(null),
statusCodeName: Joi.string().allow(null),
statusCodeName: Joi.string().allow('', null),
timings: Joi.object().pattern(Joi.string(), Joi.number().allow(null)),
tls: Joi.object({
authorized: Joi.boolean().required(),
createdAt: Joi.string().allow(null),
expiresAt: Joi.string().allow(null),
error: Joi.string().allow(null),
subject: Joi.object().pattern(Joi.string(), Joi.string().allow(null)).required(),
issuer: Joi.object().pattern(Joi.string(), Joi.string().allow(null)).required(),
createdAt: Joi.string().allow('', null),
expiresAt: Joi.string().allow('', null),
error: Joi.string().allow('', null),
subject: Joi.object().pattern(Joi.string(), Joi.string().allow('', null)).required(),
issuer: Joi.object().pattern(Joi.string(), Joi.string().allow('', null)).required(),
keyType: Joi.string().valid('RSA', 'EC').allow(null).required(),
keyBits: Joi.number().allow(null).required(),
serialNumber: Joi.string().allow(null).required(),
fingerprint256: Joi.string().allow(null).required(),
publicKey: Joi.string().allow(null).required(),
serialNumber: Joi.string().allow('', null).required(),
fingerprint256: Joi.string().allow('', null).required(),
publicKey: Joi.string().allow('', null).required(),
}).allow(null),
});

Expand Down

0 comments on commit 2f5e36a

Please sign in to comment.