big-head
Version:
A control panel generator for APIed-Piper
625 lines (548 loc) • 18.7 kB
JavaScript
let axios = {}
try {
axios = require('axios')
} catch (e) {
}
let codeRagSdk = function (host_uri = 'http://localhost:3000/', api_base = "api/", options = {}) {
console.log(`
Welcome to v1.1.0
____ ____ ____ ____ ____ ____ ____ ____
||C |||O |||D |||E |||- |||R |||A |||G || == SDK ==
||__|||__|||__|||__|||__|||__|||__|||__||
|/__\\|/__\\|/__\\|/__\\|/__\\|/__\\|/__\\|/__\\|
This is a project made by leganux.net (c) 2021-2022
______________________________________
Read the docs at https://www.npmjs.com/package/code-rag-sdk
`)
this.host_uri = host_uri
this.api_base = api_base
this.options = options
this.furi = host_uri + api_base
this.token = 'Bearer NONE'
this.acl = 'OPEN'
this.routes = {}
this.hasBeenDiscovered = false
this.presentAuth = false
this.resource = false
try {
if (localStorage.getItem('code-rag-token')) {
this.token = localStorage.getItem('code-rag-token')
this.presentAuth = true
}
} catch (e) {
}
this.f_error = function (e) {
console.error('An error has been occurred', e)
}
if (options.f_error && typeof options.f_error == 'function') {
this.f_error = options.f_error
}
this.parseQuery = function (params) {
let result = '';
function convertJsonToQueryString(data, progress, name) {
name = name || '';
progress = progress || '';
if (typeof data === 'object') {
Object.keys(data).forEach(function (key) {
let value = data[key];
if (name == '') {
convertJsonToQueryString(value, progress, key);
} else {
if (isNaN(parseInt(key))) {
convertJsonToQueryString(value, progress, name + '[' + key + ']');
} else {
convertJsonToQueryString(value, progress, name + '[' + key + ']');
}
}
})
} else {
result = result ? result.concat('&') : result.concat('?');
result = result.concat(`${name}=${data}`);
}
}
convertJsonToQueryString(params);
return result;
};
this.executor = async function (method = 'GET', headers = {}, path = '', body = {}, query = {v__: Math.random()}) {
let el = this
let response = {}
let parsedQuery = el.parseQuery(query)
if (el.presentAuth) {
headers.Authorization = el.token
}
let url = el.furi + path + parsedQuery
if (el?.options?.logRequest) {
console.log('CODE-RAG-SDK:', method, url)
}
try {
if (el?.options?.engine == 'axios') {
switch (method.toUpperCase()) {
case 'POST':
response = await axios.post(url, body, {headers})
break;
case 'GET':
response = await axios.get(url, {headers})
break;
case 'PUT':
response = await axios.put(url, body, {headers})
break;
case 'DELETE':
response = await axios.delete(url, {headers})
break;
case 'OPTIONS':
response = await axios.options(url, {headers})
break;
case 'PATCH':
response = await axios.patch(url, body, {headers})
break;
}
return response.data
} else {
headers['Content-Type'] = 'application/json';
headers['Accept'] = 'application/json';
switch (method.toUpperCase()) {
case 'POST':
console.log('entra')
response = await fetch(url, {
method: 'POST',
headers,
body: JSON.stringify(body),
})
if (response.ok) {
response = response.json()
} else {
response = Promise.reject(response);
}
break;
case 'GET':
response = await fetch(url, {
method: 'GET',
headers
})
if (response.ok) {
response = response.json()
} else {
response = Promise.reject(response);
}
break;
case 'PUT':
response = await fetch(url, {
method: 'PUT',
headers,
body: JSON.stringify(body),
})
if (response.ok) {
response = response.json()
} else {
response = Promise.reject(response);
}
break;
case 'DELETE':
response = await fetch(url, {
method: 'DELETE',
headers,
body: JSON.stringify(body),
})
if (response.ok) {
response = response.json()
} else {
response = Promise.reject(response);
}
break;
case 'OPTIONS':
response = await fetch(url, {
method: 'OPTIONS',
headers,
body: JSON.stringify(body),
})
if (response.ok) {
response = response.json()
} else {
response = Promise.reject(response);
}
break;
case 'PATCH':
response = await fetch(url, {
method: 'PATCH',
headers,
body: JSON.stringify(body),
})
if (response.ok) {
response = response.json()
} else {
response = Promise.reject(response);
}
break;
}
return await response
}
} catch (e) {
if (e.status == 403) {
console.log('Close session')
el.logout()
}
el.f_error(e)
throw e
}
}
this.discover = async function () {
let el = this
try {
let disc = await el.executor('POST', undefined, '', undefined, undefined)
if (disc.success) {
el.acl = disc?.data?.acl
el.routes = disc?.data?.routes
}
el.hasBeenDiscovered = true
return disc?.data
} catch (e) {
throw e
}
}
this.stats = async function () {
let el = this
try {
let STATS = await el.executor('GET', undefined, 'STATS', undefined, undefined)
return STATS
} catch (e) {
throw e
}
}
this.login = async function ($password_ = '', $user_ = '', saveInLocalStorage = true) {
let el = this
let method = 'POST'
let body = {
user: $user_,
pass: $password_
}
try {
let resp = await el.executor(method, undefined, 'login', body, undefined)
if (resp.success) {
el.token = 'Bearer ' + resp.data.token
el.presentAuth = true
if (saveInLocalStorage) {
try {
localStorage.setItem('code-rag-token', el.token)
localStorage.setItem('code-rag-user', JSON.stringify(resp.data.user))
} catch (e) {
}
}
}
return resp
} catch (e) {
console.error('Login error', e)
throw e
}
}
this.verify = async function (token) {
let el = this
let method = 'POST'
let token_ = ''
try {
token_ = localStorage.getItem('code-rag-token')
} catch (e) {
}
try {
token_ = token_ || token
if (!token_) {
throw new Error('Token undefined')
}
if (token_.includes('Bearer')) {
token_ = token_.replace('Bearer ', '')
}
let resp = await el.executor(method, undefined, 'verify', {token: token_}, undefined)
if (resp.success) {
let user = resp.data.user
user = JSON.stringify(user)
try {
localStorage.setItem('code-rag-user', user)
} catch (e) {
}
}
return resp
} catch (e) {
console.error('token error', e)
throw e
}
}
this.register = async function (role, data = {}) {
if (!data.user || !data.pass || !data.email || data.user.trim() == '' || data.pass.trim() == '' || data.email.trim() == '') {
throw new Error('Be sure user, email and pass is added')
}
if (!data.email.includes('@') || !data.email.includes('.')) {
throw new Error('Invalid mail format')
}
if (data.pass.length < 8) {
throw new Error('Password must be al least 8 characters')
}
let el = this
let method = 'POST'
try {
let resp = await el.executor(method, undefined, 'register/' + role, data, undefined)
if (resp.success) {
console.log('Register success')
return true
}
return resp
} catch (e) {
console.error('we,can not register user', e)
throw e
}
}
this.forgotPassword = async function (email = '') {
let el = this
if (!email.includes('@') || !email.includes('.')) {
throw new Error('Invalid mail format')
}
let method = 'POST'
try {
let resp = await el.executor(method, undefined, 'forgotPassword/', {email}, undefined)
if (resp.success) {
console.log('Email send correctly')
return true
}
return resp
} catch (e) {
console.error('we,can not send mail to user', e)
throw e
}
}
this.new_password = async function (email = '', password = '', password2 = '', code = '') {
let el = this
if (!email.includes('@') || !email.includes('.')) {
throw new Error('Invalid mail format')
}
if (password.length < 8) {
throw new Error('Password must be al least 8 characters')
}
if (password2 !== password) {
throw new Error('Passwords do not match')
}
let method = 'POST'
try {
return await el.executor(method, undefined, 'new_password/', {}, {
email,
password,
password2,
code
})
} catch (e) {
console.error('we,can not send mail to user', e)
throw e
}
}
this.logout = async function (removeFromLocalStorage = true) {
let el = this
el.token = 'Bearer NONE'
if (removeFromLocalStorage) {
try {
localStorage.removeItem('code-rag-token')
localStorage.removeItem('code-rag-user')
} catch (e) {
}
}
}
this.resourceAccess = async function () {
let el = this
let arr = []
for (let [key, value] of Object.entries(el.routes)) {
arr.push(key)
}
return arr
}
this.setResource = function (resource = false) {
let el = this
if (resource) {
el.resource = resource
}
return el
}
this.createOne = async function (body = {}, query = {}) {
let el = this
let method = 'POST'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource, body, query)
return resp
} catch (e) {
throw e
}
}
this.createMany = async function (body = [], query = {}) {
let el = this
let method = 'POST'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource + '/many', body, query)
return resp
} catch (e) {
throw e
}
}
this.getMany = async function (query = {}) {
let el = this
let method = 'GET'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource, undefined, query)
return resp
} catch (e) {
throw e
}
}
this.getOneWhere = async function (query = {}) {
let el = this
let method = 'GET'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource + '/one', undefined, query)
return resp
} catch (e) {
throw e
}
}
this.getOneById = async function (id = '', query = {}) {
let el = this
let method = 'GET'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource + '/' + id, undefined, query)
return resp
} catch (e) {
throw e
}
}
this.findUpdateOrCreate = async function (body = {}, query = {}) {
let el = this
let method = 'PUT'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource + '/find_update_or_create', body, query)
return resp
} catch (e) {
throw e
}
}
this.findUpdate = async function (body = {}, query = {}) {
let el = this
let method = 'PUT'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource + '/find_where_and_update', body, query)
return resp
} catch (e) {
throw e
}
}
this.updateById = async function (id = '', body = {}, query = {}) {
let el = this
let method = 'PUT'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource + '/' + id, body, query)
return resp
} catch (e) {
throw e
}
}
this.findIdAndDelete = async function (id = '', body = {}, query = {}) {
let el = this
let method = 'DELETE'
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
let resp = await el.executor(method, undefined, el.resource + '/' + id, body, query)
return resp
} catch (e) {
console.error(e)
throw e
}
}
this.datatableAJAX = async function () {
let el = this
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
return {
url: el.furi + el.resource + '/datatable/?populate=true',
type: "POST",
"dataType": 'json',
"beforeSend": function (xhr) {
xhr.setRequestHeader('authorization', el.token);
},
error: function (xhr, error, thrown) {
console.log(xhr)
if (xhr.status == '403') {
el.logout()
if (typeof el.f_error == 'function') {
el.f_error(xhr)
}
}
},
}
} catch (e) {
throw e
}
}
this.datatable_agr_AJAX = async function (data) {
let el = this
if (!el.resource) {
throw new Error('Resource not selected')
return
}
try {
return {
url: el.furi + el.resource + '/dt_agr/',
type: "POST",
data:{},
"dataType": 'json',
"beforeSend": function (xhr) {
xhr.setRequestHeader('authorization', el.token);
},
error: function (xhr, error, thrown) {
console.log(xhr)
if (xhr.status == '403') {
el.logout()
if (typeof el.f_error == 'function') {
el.f_error(xhr)
}
}
},
}
} catch (e) {
throw e
}
}
}
try {
module.exports = codeRagSdk
} catch (e) {
}