@b10cks/client 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # @b10cks/client
2
+
3
+ Core API client for b10cks, a headless CMS and content management platform.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @b10cks/client
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```typescript
14
+ import { ApiClient } from '@b10cks/client'
15
+
16
+ const client = new ApiClient(
17
+ {
18
+ baseUrl: 'https://api.b10cks.com/api',
19
+ token: 'your-access-token',
20
+ fetchClient: fetch,
21
+ },
22
+ new URL(window.location.href)
23
+ )
24
+
25
+ // Fetch blocks
26
+ const blocks = await client.get('blocks')
27
+
28
+ // Fetch all contents with pagination
29
+ const contents = await client.getAll('contents')
30
+
31
+ // Fetch specific datasource entries
32
+ const entries = await client.get('datasources/my-datasource/entries')
33
+ ```
34
+
35
+ ## Features
36
+
37
+ - **Simple HTTP Client**: Type-safe API client for b10cks endpoints
38
+ - **Pagination Support**: Automatic handling of paginated responses
39
+ - **Revision Tracking**: Built-in support for revision (RV) and version (VID) parameters
40
+ - **Flexible Fetch**: Use any fetch implementation (browser, Node.js, custom)
41
+
42
+ ## API Methods
43
+
44
+ - `get<T>(endpoint, params)` - Fetch single page of data
45
+ - `getAll<T>(endpoint, params)` - Fetch all data across pages
46
+
47
+ ## Supported Endpoints
48
+
49
+ - `blocks` - Content blocks
50
+ - `contents` - Content items
51
+ - `contents/{id}` - Specific content
52
+ - `datasources` - Data sources
53
+ - `datasources/{id}/entries` - Datasource entries
54
+ - `spaces/me` - Current space info
55
+
56
+ ## License
57
+
58
+ MIT
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { B10cksApiClientOptions, IBBaseQueryParams, IBCollectionResponse, IBMeta, IBResponse, } from './types'\n\nexport type FetchClient = typeof fetch\nexport type Endpoint = 'blocks' | 'contents' | `contents/${string}` | `datasources/${string}/entries` | 'datasources' | 'spaces/me'\n\nexport interface B10cksApiClientRvOptions {\n getRv?: () => string | number\n setRv?: (value: string | number) => void\n}\n\nexport * as types from './types'\nexport type { IBBlock, IBResponse, IBContent, B10cksApiClientOptions } from './types'\nlet rv: string | number = 0\n\nexport class ApiClient {\n private readonly baseUrl: string\n private readonly token: string\n private readonly vid: string | null\n private readonly fetchClient: FetchClient\n private readonly getRvFn?: () => string | number\n private readonly setRvFn?: (value: string | number) => void\n\n constructor(options: B10cksApiClientOptions, url: URL) {\n this.baseUrl = options.baseUrl.endsWith('/') ? options.baseUrl.slice(0, -1) : options.baseUrl\n this.token = options.token\n this.fetchClient = options.fetchClient\n this.getRvFn = options.getRv\n this.setRvFn = options.setRv\n\n this.vid = url.searchParams.get('b10cks_vid') || options.version || 'published'\n this.setRv(url.searchParams.get('b10cks_rv') || options.rv || rv)\n }\n\n async get<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n ...params,\n rv: this.getRv(),\n token: this.token\n })\n\n const response = await this.fetchClient(url) as unknown as IBResponse<T>\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n return response as T\n }\n\n async getAll<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T[]> {\n const response = await this.get<IBCollectionResponse<T> & { meta?: IBMeta }>(\n endpoint,\n { ...params, page: 1 }\n )\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n if (!response.meta || response.meta.last_page <= 1) {\n return 'data' in response ? response.data : (response as unknown as T[])\n }\n\n const pageRequests = Array.from(\n { length: response.meta.last_page },\n (_, i) => this.get<IBCollectionResponse<T>>(endpoint, { ...params, page: i + 1 })\n )\n\n const allResponses = await Promise.all(pageRequests)\n\n return allResponses.flatMap(r => r.data)\n }\n\n setRv(value: string | number) {\n if (this.setRvFn) {\n this.setRvFn(value)\n } else {\n rv = value\n }\n }\n\n getRv() {\n if (this.getRvFn) {\n return this.getRvFn()\n }\n return rv\n }\n\n private buildUrl(endpoint: string, params: Record<string, unknown>): string {\n const url = new URL(`${this.baseUrl}/v1/${endpoint}`)\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value))\n }\n })\n\n return url.toString()\n }\n}"],"names":["rv","ApiClient","options","url","endpoint","params","response","pageRequests","_","i","r","value","key"],"mappings":"mLAYA,IAAIA,EAAsB,EAEnB,MAAMC,CAAU,CACJ,QACA,MACA,IACA,YACA,QACA,QAEjB,YAAYC,EAAiCC,EAAU,CACrD,KAAK,QAAUD,EAAQ,QAAQ,SAAS,GAAG,EAAIA,EAAQ,QAAQ,MAAM,EAAG,EAAE,EAAIA,EAAQ,QACtF,KAAK,MAAQA,EAAQ,MACrB,KAAK,YAAcA,EAAQ,YAC3B,KAAK,QAAUA,EAAQ,MACvB,KAAK,QAAUA,EAAQ,MAEvB,KAAK,IAAMC,EAAI,aAAa,IAAI,YAAY,GAAKD,EAAQ,SAAW,YACpE,KAAK,MAAMC,EAAI,aAAa,IAAI,WAAW,GAAKD,EAAQ,IAAMF,CAAE,CAClE,CAEA,MAAM,IAAOI,EAAoBC,EAA2C,GAAgB,CAC1F,MAAMF,EAAM,KAAK,SAASC,EAAU,CAClC,IAAK,KAAK,IACV,GAAGC,EACH,GAAI,KAAK,MAAA,EACT,MAAO,KAAK,KAAA,CACb,EAEKC,EAAW,MAAM,KAAK,YAAYH,CAAG,EAC3C,OAAIG,EAAS,IACX,KAAK,MAAMA,EAAS,EAAE,EAGjBA,CACT,CAEA,MAAM,OAAUF,EAAoBC,EAA2C,GAAkB,CAC/F,MAAMC,EAAW,MAAM,KAAK,IAC1BF,EACA,CAAE,GAAGC,EAAQ,KAAM,CAAA,CAAE,EAMvB,GAJIC,EAAS,IACX,KAAK,MAAMA,EAAS,EAAE,EAGpB,CAACA,EAAS,MAAQA,EAAS,KAAK,WAAa,EAC/C,MAAO,SAAUA,EAAWA,EAAS,KAAQA,EAG/C,MAAMC,EAAe,MAAM,KACzB,CAAE,OAAQD,EAAS,KAAK,SAAA,EACxB,CAACE,EAAGC,IAAM,KAAK,IAA6BL,EAAU,CAAE,GAAGC,EAAQ,KAAMI,EAAI,CAAA,CAAG,CAAA,EAKlF,OAFqB,MAAM,QAAQ,IAAIF,CAAY,GAE/B,QAAQG,GAAKA,EAAE,IAAI,CACzC,CAEA,MAAMC,EAAwB,CACxB,KAAK,QACP,KAAK,QAAQA,CAAK,EAElBX,EAAKW,CAET,CAEA,OAAQ,CACN,OAAI,KAAK,QACA,KAAK,QAAA,EAEPX,CACT,CAEQ,SAASI,EAAkBC,EAAyC,CAC1E,MAAMF,EAAM,IAAI,IAAI,GAAG,KAAK,OAAO,OAAOC,CAAQ,EAAE,EAEpD,cAAO,QAAQC,CAAM,EAAE,QAAQ,CAAC,CAACO,EAAKD,CAAK,IAAM,CACpBA,GAAU,MACnCR,EAAI,aAAa,OAAOS,EAAK,OAAOD,CAAK,CAAC,CAE9C,CAAC,EAEMR,EAAI,SAAA,CACb,CACF"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { B10cksApiClientOptions, IBBaseQueryParams, IBCollectionResponse, IBMeta, IBResponse } from './types'\n\nexport type FetchClient = typeof fetch\nexport type Endpoint =\n | 'blocks'\n | 'contents'\n | `contents/${string}`\n | `datasources/${string}/entries`\n | 'datasources'\n | 'spaces/me'\n\nexport interface B10cksApiClientRvOptions {\n getRv?: () => string | number\n setRv?: (value: string | number) => void\n}\n\nexport type { B10cksApiClientOptions, IBBlock, IBContent, IBResponse } from './types'\nexport * as types from './types'\n\nlet rv: string | number = 0\n\nexport class ApiClient {\n private readonly baseUrl: string\n private readonly token: string\n private readonly vid: string | null\n private readonly fetchClient: FetchClient\n private readonly getRvFn?: () => string | number\n private readonly setRvFn?: (value: string | number) => void\n\n constructor(options: B10cksApiClientOptions, url: URL) {\n this.baseUrl = options.baseUrl.endsWith('/') ? options.baseUrl.slice(0, -1) : options.baseUrl\n this.token = options.token\n this.fetchClient = options.fetchClient\n this.getRvFn = options.getRv\n this.setRvFn = options.setRv\n\n this.vid = url.searchParams.get('b10cks_vid') || options.version || 'published'\n this.setRv(url.searchParams.get('b10cks_rv') || options.rv || rv)\n }\n\n async get<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n ...params,\n rv: this.getRv(),\n token: this.token,\n })\n\n const response = (await this.fetchClient(url)) as unknown as IBResponse<T>\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n return response as T\n }\n\n async getAll<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T[]> {\n const response = await this.get<IBCollectionResponse<T> & { meta?: IBMeta }>(endpoint, { ...params, page: 1 })\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n if (!response.meta || response.meta.last_page <= 1) {\n return 'data' in response ? response.data : (response as unknown as T[])\n }\n\n const pageRequests = Array.from({ length: response.meta.last_page }, (_, i) =>\n this.get<IBCollectionResponse<T>>(endpoint, { ...params, page: i + 1 })\n )\n\n const allResponses = await Promise.all(pageRequests)\n\n return allResponses.flatMap((r) => r.data)\n }\n\n setRv(value: string | number) {\n if (this.setRvFn) {\n this.setRvFn(value)\n } else {\n rv = value\n }\n }\n\n getRv() {\n if (this.getRvFn) {\n return this.getRvFn()\n }\n return rv\n }\n\n private buildUrl(endpoint: string, params: Record<string, unknown>): string {\n const url = new URL(`${this.baseUrl}/v1/${endpoint}`)\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value))\n }\n })\n\n return url.toString()\n }\n}\n"],"names":["rv","ApiClient","options","url","endpoint","params","response","pageRequests","_","i","r","value","key"],"mappings":"mLAmBA,IAAIA,EAAsB,EAEnB,MAAMC,CAAU,CACJ,QACA,MACA,IACA,YACA,QACA,QAEjB,YAAYC,EAAiCC,EAAU,CACrD,KAAK,QAAUD,EAAQ,QAAQ,SAAS,GAAG,EAAIA,EAAQ,QAAQ,MAAM,EAAG,EAAE,EAAIA,EAAQ,QACtF,KAAK,MAAQA,EAAQ,MACrB,KAAK,YAAcA,EAAQ,YAC3B,KAAK,QAAUA,EAAQ,MACvB,KAAK,QAAUA,EAAQ,MAEvB,KAAK,IAAMC,EAAI,aAAa,IAAI,YAAY,GAAKD,EAAQ,SAAW,YACpE,KAAK,MAAMC,EAAI,aAAa,IAAI,WAAW,GAAKD,EAAQ,IAAMF,CAAE,CAClE,CAEA,MAAM,IAAOI,EAAoBC,EAA2C,GAAgB,CAC1F,MAAMF,EAAM,KAAK,SAASC,EAAU,CAClC,IAAK,KAAK,IACV,GAAGC,EACH,GAAI,KAAK,MAAA,EACT,MAAO,KAAK,KAAA,CACb,EAEKC,EAAY,MAAM,KAAK,YAAYH,CAAG,EAC5C,OAAIG,EAAS,IACX,KAAK,MAAMA,EAAS,EAAE,EAGjBA,CACT,CAEA,MAAM,OAAUF,EAAoBC,EAA2C,GAAkB,CAC/F,MAAMC,EAAW,MAAM,KAAK,IAAiDF,EAAU,CAAE,GAAGC,EAAQ,KAAM,EAAG,EAK7G,GAJIC,EAAS,IACX,KAAK,MAAMA,EAAS,EAAE,EAGpB,CAACA,EAAS,MAAQA,EAAS,KAAK,WAAa,EAC/C,MAAO,SAAUA,EAAWA,EAAS,KAAQA,EAG/C,MAAMC,EAAe,MAAM,KAAK,CAAE,OAAQD,EAAS,KAAK,SAAA,EAAa,CAACE,EAAGC,IACvE,KAAK,IAA6BL,EAAU,CAAE,GAAGC,EAAQ,KAAMI,EAAI,CAAA,CAAG,CAAA,EAKxE,OAFqB,MAAM,QAAQ,IAAIF,CAAY,GAE/B,QAASG,GAAMA,EAAE,IAAI,CAC3C,CAEA,MAAMC,EAAwB,CACxB,KAAK,QACP,KAAK,QAAQA,CAAK,EAElBX,EAAKW,CAET,CAEA,OAAQ,CACN,OAAI,KAAK,QACA,KAAK,QAAA,EAEPX,CACT,CAEQ,SAASI,EAAkBC,EAAyC,CAC1E,MAAMF,EAAM,IAAI,IAAI,GAAG,KAAK,OAAO,OAAOC,CAAQ,EAAE,EAEpD,cAAO,QAAQC,CAAM,EAAE,QAAQ,CAAC,CAACO,EAAKD,CAAK,IAAM,CACpBA,GAAU,MACnCR,EAAI,aAAa,OAAOS,EAAK,OAAOD,CAAK,CAAC,CAE9C,CAAC,EAEMR,EAAI,SAAA,CACb,CACF"}
package/dist/index.mjs CHANGED
@@ -22,10 +22,7 @@ class c {
22
22
  return r.rv && this.setRv(r.rv), r;
23
23
  }
24
24
  async getAll(t, s = {}) {
25
- const e = await this.get(
26
- t,
27
- { ...s, page: 1 }
28
- );
25
+ const e = await this.get(t, { ...s, page: 1 });
29
26
  if (e.rv && this.setRv(e.rv), !e.meta || e.meta.last_page <= 1)
30
27
  return "data" in e ? e.data : e;
31
28
  const r = Array.from(
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import type { B10cksApiClientOptions, IBBaseQueryParams, IBCollectionResponse, IBMeta, IBResponse, } from './types'\n\nexport type FetchClient = typeof fetch\nexport type Endpoint = 'blocks' | 'contents' | `contents/${string}` | `datasources/${string}/entries` | 'datasources' | 'spaces/me'\n\nexport interface B10cksApiClientRvOptions {\n getRv?: () => string | number\n setRv?: (value: string | number) => void\n}\n\nexport * as types from './types'\nexport type { IBBlock, IBResponse, IBContent, B10cksApiClientOptions } from './types'\nlet rv: string | number = 0\n\nexport class ApiClient {\n private readonly baseUrl: string\n private readonly token: string\n private readonly vid: string | null\n private readonly fetchClient: FetchClient\n private readonly getRvFn?: () => string | number\n private readonly setRvFn?: (value: string | number) => void\n\n constructor(options: B10cksApiClientOptions, url: URL) {\n this.baseUrl = options.baseUrl.endsWith('/') ? options.baseUrl.slice(0, -1) : options.baseUrl\n this.token = options.token\n this.fetchClient = options.fetchClient\n this.getRvFn = options.getRv\n this.setRvFn = options.setRv\n\n this.vid = url.searchParams.get('b10cks_vid') || options.version || 'published'\n this.setRv(url.searchParams.get('b10cks_rv') || options.rv || rv)\n }\n\n async get<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n ...params,\n rv: this.getRv(),\n token: this.token\n })\n\n const response = await this.fetchClient(url) as unknown as IBResponse<T>\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n return response as T\n }\n\n async getAll<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T[]> {\n const response = await this.get<IBCollectionResponse<T> & { meta?: IBMeta }>(\n endpoint,\n { ...params, page: 1 }\n )\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n if (!response.meta || response.meta.last_page <= 1) {\n return 'data' in response ? response.data : (response as unknown as T[])\n }\n\n const pageRequests = Array.from(\n { length: response.meta.last_page },\n (_, i) => this.get<IBCollectionResponse<T>>(endpoint, { ...params, page: i + 1 })\n )\n\n const allResponses = await Promise.all(pageRequests)\n\n return allResponses.flatMap(r => r.data)\n }\n\n setRv(value: string | number) {\n if (this.setRvFn) {\n this.setRvFn(value)\n } else {\n rv = value\n }\n }\n\n getRv() {\n if (this.getRvFn) {\n return this.getRvFn()\n }\n return rv\n }\n\n private buildUrl(endpoint: string, params: Record<string, unknown>): string {\n const url = new URL(`${this.baseUrl}/v1/${endpoint}`)\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value))\n }\n })\n\n return url.toString()\n }\n}"],"names":["rv","ApiClient","options","url","endpoint","params","response","pageRequests","_","i","r","value","key"],"mappings":";;;AAYA,IAAIA,IAAsB;AAEnB,MAAMC,EAAU;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAYC,GAAiCC,GAAU;AACrD,SAAK,UAAUD,EAAQ,QAAQ,SAAS,GAAG,IAAIA,EAAQ,QAAQ,MAAM,GAAG,EAAE,IAAIA,EAAQ,SACtF,KAAK,QAAQA,EAAQ,OACrB,KAAK,cAAcA,EAAQ,aAC3B,KAAK,UAAUA,EAAQ,OACvB,KAAK,UAAUA,EAAQ,OAEvB,KAAK,MAAMC,EAAI,aAAa,IAAI,YAAY,KAAKD,EAAQ,WAAW,aACpE,KAAK,MAAMC,EAAI,aAAa,IAAI,WAAW,KAAKD,EAAQ,MAAMF,CAAE;AAAA,EAClE;AAAA,EAEA,MAAM,IAAOI,GAAoBC,IAA2C,IAAgB;AAC1F,UAAMF,IAAM,KAAK,SAASC,GAAU;AAAA,MAClC,KAAK,KAAK;AAAA,MACV,GAAGC;AAAA,MACH,IAAI,KAAK,MAAA;AAAA,MACT,OAAO,KAAK;AAAA,IAAA,CACb,GAEKC,IAAW,MAAM,KAAK,YAAYH,CAAG;AAC3C,WAAIG,EAAS,MACX,KAAK,MAAMA,EAAS,EAAE,GAGjBA;AAAA,EACT;AAAA,EAEA,MAAM,OAAUF,GAAoBC,IAA2C,IAAkB;AAC/F,UAAMC,IAAW,MAAM,KAAK;AAAA,MAC1BF;AAAA,MACA,EAAE,GAAGC,GAAQ,MAAM,EAAA;AAAA,IAAE;AAMvB,QAJIC,EAAS,MACX,KAAK,MAAMA,EAAS,EAAE,GAGpB,CAACA,EAAS,QAAQA,EAAS,KAAK,aAAa;AAC/C,aAAO,UAAUA,IAAWA,EAAS,OAAQA;AAG/C,UAAMC,IAAe,MAAM;AAAA,MACzB,EAAE,QAAQD,EAAS,KAAK,UAAA;AAAA,MACxB,CAACE,GAAGC,MAAM,KAAK,IAA6BL,GAAU,EAAE,GAAGC,GAAQ,MAAMI,IAAI,EAAA,CAAG;AAAA,IAAA;AAKlF,YAFqB,MAAM,QAAQ,IAAIF,CAAY,GAE/B,QAAQ,CAAAG,MAAKA,EAAE,IAAI;AAAA,EACzC;AAAA,EAEA,MAAMC,GAAwB;AAC5B,IAAI,KAAK,UACP,KAAK,QAAQA,CAAK,IAElBX,IAAKW;AAAA,EAET;AAAA,EAEA,QAAQ;AACN,WAAI,KAAK,UACA,KAAK,QAAA,IAEPX;AAAA,EACT;AAAA,EAEQ,SAASI,GAAkBC,GAAyC;AAC1E,UAAMF,IAAM,IAAI,IAAI,GAAG,KAAK,OAAO,OAAOC,CAAQ,EAAE;AAEpD,kBAAO,QAAQC,CAAM,EAAE,QAAQ,CAAC,CAACO,GAAKD,CAAK,MAAM;AAC/C,MAA2BA,KAAU,QACnCR,EAAI,aAAa,OAAOS,GAAK,OAAOD,CAAK,CAAC;AAAA,IAE9C,CAAC,GAEMR,EAAI,SAAA;AAAA,EACb;AACF;"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import type { B10cksApiClientOptions, IBBaseQueryParams, IBCollectionResponse, IBMeta, IBResponse } from './types'\n\nexport type FetchClient = typeof fetch\nexport type Endpoint =\n | 'blocks'\n | 'contents'\n | `contents/${string}`\n | `datasources/${string}/entries`\n | 'datasources'\n | 'spaces/me'\n\nexport interface B10cksApiClientRvOptions {\n getRv?: () => string | number\n setRv?: (value: string | number) => void\n}\n\nexport type { B10cksApiClientOptions, IBBlock, IBContent, IBResponse } from './types'\nexport * as types from './types'\n\nlet rv: string | number = 0\n\nexport class ApiClient {\n private readonly baseUrl: string\n private readonly token: string\n private readonly vid: string | null\n private readonly fetchClient: FetchClient\n private readonly getRvFn?: () => string | number\n private readonly setRvFn?: (value: string | number) => void\n\n constructor(options: B10cksApiClientOptions, url: URL) {\n this.baseUrl = options.baseUrl.endsWith('/') ? options.baseUrl.slice(0, -1) : options.baseUrl\n this.token = options.token\n this.fetchClient = options.fetchClient\n this.getRvFn = options.getRv\n this.setRvFn = options.setRv\n\n this.vid = url.searchParams.get('b10cks_vid') || options.version || 'published'\n this.setRv(url.searchParams.get('b10cks_rv') || options.rv || rv)\n }\n\n async get<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T> {\n const url = this.buildUrl(endpoint, {\n vid: this.vid,\n ...params,\n rv: this.getRv(),\n token: this.token,\n })\n\n const response = (await this.fetchClient(url)) as unknown as IBResponse<T>\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n return response as T\n }\n\n async getAll<T>(endpoint: Endpoint, params: Omit<IBBaseQueryParams, 'token'> = {}): Promise<T[]> {\n const response = await this.get<IBCollectionResponse<T> & { meta?: IBMeta }>(endpoint, { ...params, page: 1 })\n if (response.rv) {\n this.setRv(response.rv)\n }\n\n if (!response.meta || response.meta.last_page <= 1) {\n return 'data' in response ? response.data : (response as unknown as T[])\n }\n\n const pageRequests = Array.from({ length: response.meta.last_page }, (_, i) =>\n this.get<IBCollectionResponse<T>>(endpoint, { ...params, page: i + 1 })\n )\n\n const allResponses = await Promise.all(pageRequests)\n\n return allResponses.flatMap((r) => r.data)\n }\n\n setRv(value: string | number) {\n if (this.setRvFn) {\n this.setRvFn(value)\n } else {\n rv = value\n }\n }\n\n getRv() {\n if (this.getRvFn) {\n return this.getRvFn()\n }\n return rv\n }\n\n private buildUrl(endpoint: string, params: Record<string, unknown>): string {\n const url = new URL(`${this.baseUrl}/v1/${endpoint}`)\n\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value))\n }\n })\n\n return url.toString()\n }\n}\n"],"names":["rv","ApiClient","options","url","endpoint","params","response","pageRequests","_","i","r","value","key"],"mappings":";;;AAmBA,IAAIA,IAAsB;AAEnB,MAAMC,EAAU;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAYC,GAAiCC,GAAU;AACrD,SAAK,UAAUD,EAAQ,QAAQ,SAAS,GAAG,IAAIA,EAAQ,QAAQ,MAAM,GAAG,EAAE,IAAIA,EAAQ,SACtF,KAAK,QAAQA,EAAQ,OACrB,KAAK,cAAcA,EAAQ,aAC3B,KAAK,UAAUA,EAAQ,OACvB,KAAK,UAAUA,EAAQ,OAEvB,KAAK,MAAMC,EAAI,aAAa,IAAI,YAAY,KAAKD,EAAQ,WAAW,aACpE,KAAK,MAAMC,EAAI,aAAa,IAAI,WAAW,KAAKD,EAAQ,MAAMF,CAAE;AAAA,EAClE;AAAA,EAEA,MAAM,IAAOI,GAAoBC,IAA2C,IAAgB;AAC1F,UAAMF,IAAM,KAAK,SAASC,GAAU;AAAA,MAClC,KAAK,KAAK;AAAA,MACV,GAAGC;AAAA,MACH,IAAI,KAAK,MAAA;AAAA,MACT,OAAO,KAAK;AAAA,IAAA,CACb,GAEKC,IAAY,MAAM,KAAK,YAAYH,CAAG;AAC5C,WAAIG,EAAS,MACX,KAAK,MAAMA,EAAS,EAAE,GAGjBA;AAAA,EACT;AAAA,EAEA,MAAM,OAAUF,GAAoBC,IAA2C,IAAkB;AAC/F,UAAMC,IAAW,MAAM,KAAK,IAAiDF,GAAU,EAAE,GAAGC,GAAQ,MAAM,GAAG;AAK7G,QAJIC,EAAS,MACX,KAAK,MAAMA,EAAS,EAAE,GAGpB,CAACA,EAAS,QAAQA,EAAS,KAAK,aAAa;AAC/C,aAAO,UAAUA,IAAWA,EAAS,OAAQA;AAG/C,UAAMC,IAAe,MAAM;AAAA,MAAK,EAAE,QAAQD,EAAS,KAAK,UAAA;AAAA,MAAa,CAACE,GAAGC,MACvE,KAAK,IAA6BL,GAAU,EAAE,GAAGC,GAAQ,MAAMI,IAAI,EAAA,CAAG;AAAA,IAAA;AAKxE,YAFqB,MAAM,QAAQ,IAAIF,CAAY,GAE/B,QAAQ,CAACG,MAAMA,EAAE,IAAI;AAAA,EAC3C;AAAA,EAEA,MAAMC,GAAwB;AAC5B,IAAI,KAAK,UACP,KAAK,QAAQA,CAAK,IAElBX,IAAKW;AAAA,EAET;AAAA,EAEA,QAAQ;AACN,WAAI,KAAK,UACA,KAAK,QAAA,IAEPX;AAAA,EACT;AAAA,EAEQ,SAASI,GAAkBC,GAAyC;AAC1E,UAAMF,IAAM,IAAI,IAAI,GAAG,KAAK,OAAO,OAAOC,CAAQ,EAAE;AAEpD,kBAAO,QAAQC,CAAM,EAAE,QAAQ,CAAC,CAACO,GAAKD,CAAK,MAAM;AAC/C,MAA2BA,KAAU,QACnCR,EAAI,aAAa,OAAOS,GAAK,OAAOD,CAAK,CAAC;AAAA,IAE9C,CAAC,GAEMR,EAAI,SAAA;AAAA,EACb;AACF;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@b10cks/client",
3
3
  "license": "MIT",
4
- "version": "0.10.0",
4
+ "version": "0.10.1",
5
5
  "author": "Michael Wallner @ Coder's Cantina",
6
6
  "description": "Core b10cks API client",
7
7
  "type": "module",
@@ -26,8 +26,8 @@
26
26
  "dist"
27
27
  ],
28
28
  "devDependencies": {
29
- "chalk": "^5.6.0",
30
- "vite": "^7.1.4",
29
+ "chalk": "^5.6.2",
30
+ "vite": "^7.2.4",
31
31
  "vite-plugin-banner": "^0.8.1",
32
32
  "vite-plugin-dts": "^4.5.4",
33
33
  "vitest": "^3.2.4"
@@ -44,7 +44,7 @@
44
44
  "build": "vite build",
45
45
  "dev": "vite build --watch",
46
46
  "test": "vitest",
47
- "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts --fix",
47
+ "lint": "biome lint --write .",
48
48
  "clean": "rm -rf dist"
49
49
  }
50
50
  }