Files
pawol.nu/lib/oki-api.js
T
2026-04-21 19:07:10 +04:00

298 lines
5.7 KiB
JavaScript

import qs from 'qs'
const OKI_API = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:1337'
const AWTIS_POU_CHAK_PAJ = process.env.NEXT_PUBLIC_AWTIS_POU_CHAK_PAJ || 6
const readToken = process.env.NEXT_PUBLIC_READ_TOKEN || 'read-token'
const headers = {
next: {revalidate: 60},
headers: {
Authorization: `Bearer ${readToken}`
}
}
async function request(url, opts = {}) {
const {...options} = opts
try {
const res = await fetch(`${OKI_API}${url}`, options)
return res.json()
} catch {
throw new Error('Eshwe pu jwenn done-a')
}
}
export async function jwennTeksEpiSlug(slug) {
const query = qs.stringify({
populate: {
user: {
fields: ['username']
},
userAdmin: {
fields: ['username', 'firstname']
},
commentaires: {
fields: ['contenu', 'datePublication'],
populate: {
user: {
fields: ['username']
}
}
},
couverture: {
populate: '*'
},
files: {
populate: '*'
},
artistes: {
fields: ['alias', 'slug', 'musicBrainzUrl'],
},
streamAudio: {
populate: '*'
},
streamVideo: {
populate: '*'
},
traductions: {
populate: '*'
}
},
filters: {
slug: {
$eq: slug
}
}
}, {
encodeValuesOnly: true
})
const {data} = await request(`/paroles?${query}`, headers)
return data[0]
}
export async function jwennAwtisEpiSlug(slug) {
const query = qs.stringify({
populate: ['paroles', 'photo', 'paroles.couverture'],
filters: {
slug: {
$eq: slug
}
}
}, {
encodeValuesOnly: true
})
const {data, meta} = await request(`/artistes?${query}`, headers)
return {data: data[0], meta}
}
export async function jwennAwtisPajinasyon(paj) {
const start = AWTIS_POU_CHAK_PAJ * (paj - 1)
const query = qs.stringify({
populate: ['paroles', 'photo'],
sort: ['publishedAt:desc'],
pagination: {
start,
limit: AWTIS_POU_CHAK_PAJ
}
}, {
encodeValuesOnly: true
})
const {data, meta} = await request(`/artistes?${query}`, headers)
return {data, meta}
}
export async function jwennToutAwtis() {
const query = qs.stringify({
populate: ['photo'],
sort: ['alias:asc'],
pagination: {
pageSize: 100
}
}, {
encodeValuesOnly: true
})
const data = await request(`/artistes?${query}`, headers)
return data
}
export async function jwennTeks() {
const query = qs.stringify({
populate: {
user: {
fields: ['username']
},
userAdmin: {
fields: ['username', 'firstname']
},
commentaires: {
fields: ['contenu', 'datePublication'],
populate: {
user: {
fields: ['username']
}
}
},
couverture: {
populate: '*'
},
artistes: {
fields: ['alias', 'slug']
},
streamAudio: {
populate: '*'
},
streamVideo: {
populate: '*'
},
traductions: {
populate: '*'
}
},
sort: ['titre:asc'],
pagination: {
pageSize: 100
}
}, {
encodeValuesOnly: true
})
const {data} = await request(`/paroles?${query}`, headers)
return data
}
export async function jwennAwtisSlug() {
const query = qs.stringify({
sort: ['publishedAt:desc'],
pagination: {
pageSize: 100
}
}, {
encodeValuesOnly: true
})
const {data} = await request(`/artistes?${query}`, headers)
return data.map(({slug}) => slug)
}
export async function jwennTeksSlug() {
const query = qs.stringify({
sort: ['publishedAt:desc'],
pagination: {
pageSize: 100
}
}, {
encodeValuesOnly: true
})
const {data} = await request(`/paroles?${query}`, headers)
return data.map(({slug}) => slug)
}
export async function jwennDenyeTeks() {
const query = qs.stringify({
populate: ['artistes', 'couverture'],
sort: ['publishedAt:desc'],
pagination: {
limit: 6
}
}, {
encodeValuesOnly: true
})
const {data} = await request(`/paroles?${query}`, headers)
return data
}
export async function jwennAnTeks(teksId, token) {
const headers = {
'content-type': 'application/json',
Authorization: `Bearer ${token}`
}
const data = await request(`/paroles/${teksId}`, {headers})
return data
}
export async function jwennKomanteEpiTeksId(teksId) {
const query = qs.stringify({
sort: ['publishedAt:desc'],
populate: ['paroles', 'user'],
filters: {
parole: {
id: {
$eq: teksId
}
}
}
}, {
encodeValuesOnly: true
})
const data = await request(`/commentaires?${query}`, headers)
return data
}
export async function jwennUserEpiToken(userToken) {
const data = await request('/users/me', {
headers: {
Authorization: `Bearer ${userToken}`
}
})
return data
}
export async function jwennUserEpiUsername(username) {
const query = qs.stringify({
filters: {
username: {
$eq: username
}
}
}, {
encodeValuesOnly: true
})
const data = await request(`/users?${query}`, headers)
return data[0]
}
export async function jwennUserEpiEmail(email) {
const query = qs.stringify({
filters: {
email: {
$eq: email
},
confirmed: {
$eq: false
},
blocked: {
$eq: false
}
}
}, {
encodeValuesOnly: true
})
const data = await request(`/users?${query}`, headers)
return data[0]
}
export async function passwordRequest(lyen, email) {
await request(`/auth/${lyen}`, {
method: 'POST',
body: {email}
})
}
export async function jwennStats() {
return request('/stats', {next: {revalidate: 60}})
}