139 lines
2.7 KiB
JavaScript

const Kosmos = function(privateClient/*, publicClient*/) {
//
// Types/Schemas
//
privateClient.declareType('chat-account', {
"type": "object",
"properties": {
"id": {
"type": "string",
},
"protocol": {
"type": "string",
"default": "IRC",
"enum": ["IRC", "XMPP"] // Mattermost, Slack, ...
},
"username": {
"type": [ "string", "null" ]
},
"password": {
"type": [ "string", "null" ]
},
"nickname": {
"type": [ "string", "null" ]
},
"server": {
"type": "object",
"properties": {
"hostname": {
"type": [ "string", "null" ]
},
"port": {
"type": [ "number", "null" ]
},
"secure": {
"type": "boolean"
},
"sasl": {
"type": "boolean"
}
}
},
"botkaURL": {
"type": [ "string", "null" ]
}
},
"required": [
"id",
"protocol"
]
});
privateClient.declareType('chat-channel', {
"type": "object",
"properties": {
"id": {
"type": "string",
},
"accountId": {
"type": "string"
},
"displayName": {
"type": [ "string", "null" ]
},
"userNickname": {
"type": [ "string", "null" ]
},
"topic": {
"type": [ "string", "null" ]
},
"description": {
"type": [ "string", "null" ]
},
"isLogged": {
"type": [ "boolean", "null" ]
}
},
"required": [
"id",
"accountId"
]
});
//
// Public functions
//
const kosmos = {
accounts: {
getIds() {
return privateClient.getListing('chat/').then(listing => {
return Object.keys(listing).map(id => id.replace(/\/$/, ''));
});
},
getConfig(id) {
return privateClient.getObject(`chat/${id}/account`);
},
storeConfig(obj) {
return privateClient.storeObject('chat-account', `chat/${obj.id}/account`, obj);
},
// TODO recursively remove all files
remove(id) {
return privateClient.remove(`chat/${id}/account`);
}
},
channels: {
getAll(accountId) {
return privateClient.getAll(`chat/${accountId}/channels/`);
},
store(obj) {
return privateClient.storeObject('chat-channel', `chat/${obj.accountId}/channels/${obj.id}`, obj);
},
remove(accountId, id) {
return privateClient.remove(`chat/${accountId}/channels/${id}`);
}
},
// TODO remove
client: privateClient
};
//
// Return public functions
//
return { exports: kosmos };
};
export default { name: 'kosmos', builder: Kosmos };