Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,19 @@ const api = new Api('https://api.qmusic.be')
const channels = await api.channels.all()
```

Non predefined API endpoints:

```js
import { Api } from '@dpgradio/creative'

const api = new Api('https://api.qmusic.be')

api.setRadioToken(token)
api.request({ passAuth: true }).post(`/forbidden_words/${id}/detections`) // for authenticated endpoints
Comment thread
vhsiebe marked this conversation as resolved.
Outdated
api.request().get(`/forbidden_words/${id}`) // for non-authenticate endpoints

```

## Socket

```js
Expand Down
11 changes: 9 additions & 2 deletions src/api/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,18 @@ export class Api {
return this.baseUrlOverride || config('api_base_url')
}

request() {
request(config = { passAuth: false }) {
const modifiers = [...this.requestModifiers]

this.apiKey && modifiers.push((request) => request.withQueryParameters({ api_key: this.apiKey }))
this.radioToken && modifiers.push((request) => request.withHeader('Authorization', `Bearer ${this.radioToken}`))

if (config.passAuth) {
if (this.radioToken) {
modifiers.push((request) => request.withHeader('Authorization', `Bearer ${this.radioToken}`))
} else {
throw new Error('No currentUserToken available')
}
}

return tap(new Request(this.baseUrl, this.version, this.errorHandlers), (request) => {
modifiers.forEach((modifier) => modifier(request))
Expand Down
8 changes: 4 additions & 4 deletions src/api/endpoints/Endpoint.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ export default class Endpoint {
* @param {requestCallback} callback
* @returns {object}
*/
async requestData(callback, key = 'data') {
const response = await callback(this.api.request())
async requestData(callback, key = 'data', config = { passAuth: false }) {
const response = await callback(this.api.request(config))

if (response === null) {
throw new Error(`Endpoint returned invalid JSON.`)
Expand All @@ -40,8 +40,8 @@ export default class Endpoint {
* @param {requestCallback} callback
* @returns {PaginatedResponse}
*/
async requestPaginatedData(callback, key = 'data') {
const response = await callback(this.api.request())
async requestPaginatedData(callback, key = 'data', config = { passAuth: false }) {
const response = await callback(this.api.request(config))

if (response === null) {
throw new Error(`Endpoint returned invalid JSON.`)
Expand Down
2 changes: 1 addition & 1 deletion src/api/endpoints/ForbiddenWord.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ import Endpoint from './Endpoint.js'

export default class ForbiddenWord extends Endpoint {
async detection(id) {
await this.api.request().post(`/forbidden_words/${id}/detections`)
await this.api.request({ passAuth: true }).post(`/forbidden_words/${id}/detections`)
}
}
4 changes: 2 additions & 2 deletions src/api/endpoints/Members.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import Endpoint from './Endpoint.js'

export default class Members extends Endpoint {
async me() {
return await this.api.request().get('/members/me')
return await this.api.request({ passAuth: true }).get('/members/me')
}

async updateProfile(profile) {
return await this.api.request().put('/members/me', { profile })
return await this.api.request({ passAuth: true }).put('/members/me', { profile })
}
}
6 changes: 3 additions & 3 deletions src/api/endpoints/Ratings.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import Endpoint from './Endpoint.js'

export default class Ratings extends Endpoint {
async allForMember() {
return await this.requestPaginatedData((r) => r.get('/members/me/ratings'), 'ratings')
return await this.requestPaginatedData((r) => r.get('/members/me/ratings'), 'ratings', { passAuth: true })
}

async like(selectorCode) {
await this.api.request().post(`/tracks/${selectorCode}/ratings`, { rating: 1 })
await this.api.request({ passAuth: true }).post(`/tracks/${selectorCode}/ratings`, { rating: 1 })
}

async unlike(selectorCode) {
await this.api.request().delete(`/tracks/${selectorCode}/ratings`)
await this.api.request({ passAuth: true }).delete(`/tracks/${selectorCode}/ratings`)
}
}
2 changes: 1 addition & 1 deletion src/api/endpoints/Requests.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Endpoint from './Endpoint.js'

export default class Requests extends Endpoint {
async requestTrack(eventSlug, request) {
return await this.api.request().post(`/requests/${eventSlug}`, request)
return await this.api.request({ passAuth: true }).post(`/requests/${eventSlug}`, request)
}

async requestsForTrack(eventSlug, selectorCode) {
Expand Down