meilisearch-admin/app/models/key.js

134 lines
2.8 KiB
JavaScript
Raw Permalink Normal View History

2022-09-19 10:22:29 +00:00
import query from '../utils/query';
export default class Key {
2022-09-19 10:35:56 +00:00
actions = ['*'];
indexes = ['*'];
expiresAt = null;
name = '';
description = '';
2022-09-19 10:22:29 +00:00
constructor(data = {}) {
for (const key in data) {
this[key] = data[key];
}
}
get path() {
return `keys/${this.uid}`;
}
get isNew() {
return Boolean(!this.uid);
}
get editablePayload() {
let keys = ['name', 'description'];
if (this.isNew) {
keys = keys.concat(['actions', 'indexes', 'expiresAt', 'uid']);
}
return Object.fromEntries(
Object.entries(this).filter(([key]) => keys.includes(key))
);
}
2022-10-15 12:13:34 +00:00
get setting() {
const uri = 'https://docs.meilisearch.com/reference/api/keys';
const required = this.isNew ? ['actions', 'indexes', 'expiresAt'] : [];
return {
uri: uri,
fileMatch: [uri],
schema: {
$id: uri,
type: 'object',
additionalProperties: false,
properties: {
actions: {
type: 'array',
// enum: [
// '*',
// 'search',
// 'documents.*',
// 'documents.add',
// 'documents.get',
// 'documents.delete',
// 'indexes.*',
// 'indexes.create',
// 'indexes.get',
// 'indexes.update',
// 'indexes.delete',
// 'tasks.*',
// 'tasks.get',
// 'settings.*',
// 'settings.get',
// 'settings.update',
// 'stats.*',
// 'stats.get',
// 'dumps.*',
// 'dumps.create',
// 'version',
// 'keys.*',
// 'keys.get',
// 'keys.create',
// 'keys.update',
// 'keys.delete',
// ],
items: {
type: 'string',
},
uniqueItems: true,
minItems: 1,
},
indexes: {
oneOf: [
{ type: 'array', enum: ['*'] },
{
type: 'array',
items: {
type: 'string',
},
uniqueItems: true,
minItems: 1,
},
],
},
expiresAt: {
type: ['null', 'date-time'],
},
name: {
type: ['null', 'string'],
},
description: {
type: ['null', 'string'],
},
},
required,
},
};
}
2022-09-19 10:22:29 +00:00
save(data) {
const path = this.isNew ? 'keys' : this.path;
const method = this.isNew ? 'POST' : 'PATCH';
if (typeof data === 'object') {
data = JSON.stringify(data);
}
return query(path, {
method: method,
body: data,
});
}
}