/
provisioning_ended.ts
52 lines (46 loc) · 1.34 KB
/
provisioning_ended.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import Joi = require("joi");
import logger from "lib/logger";
import { VError } from "verror";
import * as Result from "../../../result";
import { Identity } from "../organization/identity";
import { UserMetadata, userMetadataSchema } from "../metadata";
type EventTypeType = "provisioning_ended";
const eventType: EventTypeType = "provisioning_ended";
export interface Event {
type: EventTypeType;
source: string;
time: string; // ISO timestamp
publisher: Identity;
metadata?: UserMetadata;
}
export const schema = Joi.object({
type: Joi.valid(eventType).required(),
source: Joi.string().allow("").required(),
time: Joi.date().iso().required(),
publisher: Joi.string().required(),
metadata: userMetadataSchema,
});
export function createEvent(
source: string,
publisher: Identity,
time: string = new Date().toISOString(),
metadata?: UserMetadata,
): Result.Type<Event> {
logger.trace("Creating provisioning_end event");
const event = {
type: eventType,
source,
time,
publisher,
metadata,
};
const validationResult = validate(event);
if (Result.isErr(validationResult)) {
return new VError(validationResult, `not a valid ${eventType} event`);
}
return event;
}
export function validate(input): Result.Type<Event> {
const { error, value } = schema.validate(input);
return !error ? value : error;
}