in src/platform/plugins/shared/data/server/search/routes/session.ts [36:398]
export function registerSessionRoutes(router: DataPluginRouter, logger: Logger): void {
router.versioned
.post({
path: pathPrefix,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
body: schema.object({
sessionId: schema.string(),
name: schema.string(),
appId: schema.string(),
expires: schema.maybe(schema.string()),
locatorId: schema.string(),
initialState: schema.maybe(schema.object({}, { unknowns: 'allow' })),
restoreState: schema.maybe(schema.object({}, { unknowns: 'allow' })),
}),
},
response: {
200: {
body: () => schema.maybe(searchSessionSchema()),
},
},
},
},
async (context, request, res) => {
const { sessionId, name, expires, initialState, restoreState, appId, locatorId } =
request.body;
try {
const searchContext = await context.search;
const response = await searchContext.saveSession(sessionId, {
name,
appId,
expires,
locatorId,
initialState,
restoreState,
});
const body: SearchSessionRestResponse | undefined = idAndAttrsOnly(response);
return res.ok({ body });
} catch (err) {
logger.error(err);
return reportServerError(res, err);
}
}
);
router.versioned
.get({
path: `${pathPrefix}/{id}`,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
params: schema.object({
id: schema.string(),
}),
},
response: {
200: {
body: searchSessionSchema,
},
},
},
},
async (context, request, res) => {
const { id } = request.params;
try {
const searchContext = await context.search;
const response: SearchSessionRestResponse = await searchContext!.getSession(id);
const body = idAndAttrsOnly(response);
return res.ok({ body });
} catch (e) {
const err = e.output?.payload || e;
logger.error(err);
return reportServerError(res, err);
}
}
);
router.versioned
.get({
path: `${pathPrefix}/{id}/status`,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
params: schema.object({
id: schema.string(),
}),
},
response: {
200: {
body: searchSessionStatusSchema,
},
},
},
},
async (context, request, res) => {
const { id } = request.params;
try {
const searchContext = await context.search;
const response: SearchSessionStatusRestResponse = await searchContext!.getSessionStatus(
id
);
return res.ok({
body: response,
});
} catch (e) {
const err = e.output?.payload || e;
logger.error(err);
return reportServerError(res, err);
}
}
);
router.versioned
.post({
path: `${pathPrefix}/_find`,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
body: schema.object({
page: schema.maybe(schema.number()),
perPage: schema.maybe(schema.number()),
sortField: schema.maybe(schema.string()),
sortOrder: schema.maybe(
schema.oneOf([schema.literal('desc'), schema.literal('asc')])
),
filter: schema.maybe(schema.string()),
searchFields: schema.maybe(schema.arrayOf(schema.string())),
search: schema.maybe(schema.string()),
}),
},
response: {
200: {
body: searchSessionsFindSchema,
},
},
},
},
async (context, request, res) => {
const { page, perPage, sortField, sortOrder, filter, searchFields, search } = request.body;
try {
const searchContext = await context.search;
const response: SearchSessionsFindRestResponse = await searchContext!.findSessions({
page,
perPage,
sortField,
sortOrder,
filter,
searchFields,
search,
});
const body = {
total: response.total,
saved_objects: response.saved_objects.map(idAndAttrsOnly),
statuses: response.statuses,
};
return res.ok({ body });
} catch (err) {
logger.error(err);
return reportServerError(res, err);
}
}
);
router.versioned
.delete({
path: `${pathPrefix}/{id}`,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
params: schema.object({
id: schema.string(),
}),
},
},
},
async (context, request, res) => {
const { id } = request.params;
try {
const searchContext = await context.search;
await searchContext.deleteSession(id);
return res.ok();
} catch (e) {
const err = e.output?.payload || e;
logger.error(err);
return reportServerError(res, err);
}
}
);
router.versioned
.post({
path: `${pathPrefix}/{id}/cancel`,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
params: schema.object({
id: schema.string(),
}),
},
},
},
async (context, request, res) => {
const { id } = request.params;
try {
const searchContext = await context.search;
await searchContext.cancelSession(id);
return res.ok();
} catch (e) {
const err = e.output?.payload || e;
logger.error(err);
return reportServerError(res, err);
}
}
);
router.versioned
.put({
path: `${pathPrefix}/{id}`,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
params: schema.object({
id: schema.string(),
}),
body: schema.object({
name: schema.maybe(schema.string()),
expires: schema.maybe(schema.string()),
}),
},
response: {
200: {
body: searchSessionsUpdateSchema,
},
},
},
},
async (context, request, res) => {
const { id } = request.params;
const { name, expires } = request.body;
try {
const searchContext = await context.search;
const response: SearchSessionsUpdateRestResponse = await searchContext.updateSession(id, {
name,
expires,
});
return res.ok({
body: response,
});
} catch (err) {
logger.error(err);
return reportServerError(res, err);
}
}
);
router.versioned
.post({
path: `${pathPrefix}/{id}/_extend`,
access,
security: {
authz: { requiredPrivileges },
},
})
.addVersion(
{
version,
validate: {
request: {
params: schema.object({
id: schema.string(),
}),
body: schema.object({
expires: schema.string(),
}),
},
response: {
200: {
body: searchSessionsUpdateSchema,
},
},
},
},
async (context, request, res) => {
const { id } = request.params;
const { expires } = request.body;
try {
const searchContext = await context.search;
const response: SearchSessionsUpdateRestResponse = await searchContext.extendSession(
id,
new Date(expires)
);
return res.ok({
body: response,
});
} catch (e) {
const err = e.output?.payload || e;
logger.error(err);
return reportServerError(res, err);
}
}
);
}