@flexbe/sdk 0.1.3 → 0.2.0

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.
@@ -72,15 +72,18 @@ export class ApiClient {
72
72
  });
73
73
  }
74
74
  get(url, config) {
75
- return this.request(Object.assign(Object.assign({}, config), { method: 'GET', url }));
75
+ return this.request(Object.assign(Object.assign({}, config), { url, method: 'GET' }));
76
76
  }
77
77
  post(url, data, config) {
78
- return this.request(Object.assign(Object.assign({}, config), { method: 'POST', url, body: JSON.stringify(data) }));
78
+ return this.request(Object.assign(Object.assign({}, config), { url, method: 'POST', body: JSON.stringify(data) }));
79
79
  }
80
80
  put(url, data, config) {
81
- return this.request(Object.assign(Object.assign({}, config), { method: 'PUT', url, body: JSON.stringify(data) }));
81
+ return this.request(Object.assign(Object.assign({}, config), { url, method: 'PUT', body: JSON.stringify(data) }));
82
+ }
83
+ patch(url, data, config) {
84
+ return this.request(Object.assign(Object.assign({}, config), { url, method: 'PATCH', body: JSON.stringify(data) }));
82
85
  }
83
86
  delete(url, config) {
84
- return this.request(Object.assign(Object.assign({}, config), { method: 'DELETE', url }));
87
+ return this.request(Object.assign(Object.assign({}, config), { url, method: 'DELETE' }));
85
88
  }
86
89
  }
@@ -29,4 +29,50 @@ export class Pages {
29
29
  return response.data;
30
30
  });
31
31
  }
32
+ /**
33
+ * Get list of folders for a site
34
+ */
35
+ getFolders() {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const response = yield this.api.get('/sites/:siteId:/pages-folders');
38
+ return response.data;
39
+ });
40
+ }
41
+ /**
42
+ * Get a single folder by ID
43
+ */
44
+ getFolder(folderId) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const response = yield this.api.get(`/sites/:siteId:/pages-folders/${folderId}`);
47
+ return response.data;
48
+ });
49
+ }
50
+ /**
51
+ * Update a folder's properties
52
+ */
53
+ updateFolder(folderId, data) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ const response = yield this.api.patch(`/sites/:siteId:/pages-folders/${folderId}`, data);
56
+ return response.data;
57
+ });
58
+ }
59
+ /**
60
+ * Create a new folder
61
+ */
62
+ createFolder(data) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const response = yield this.api.post('/sites/:siteId:/pages-folders', data);
65
+ return response.data;
66
+ });
67
+ }
68
+ /**
69
+ * Delete a folder and its items
70
+ * @throws {NotFoundException} When the folder is not found
71
+ * @throws {ForbiddenException} When the folder does not belong to the site
72
+ */
73
+ deleteFolder(folderId) {
74
+ return __awaiter(this, void 0, void 0, function* () {
75
+ yield this.api.delete(`/sites/:siteId:/pages-folders/${folderId}`);
76
+ });
77
+ }
32
78
  }
@@ -144,6 +144,10 @@ export class TokenManager {
144
144
  catch (error) {
145
145
  console.error('Failed to retrieve token:', error);
146
146
  this.clearToken();
147
+ // Schedule a retry after REFRESH_CHECK_INTERVAL
148
+ setTimeout(() => {
149
+ void this.retrieveToken();
150
+ }, REFRESH_CHECK_INTERVAL);
147
151
  throw error;
148
152
  }
149
153
  });
@@ -71,16 +71,19 @@ class ApiClient {
71
71
  }
72
72
  }
73
73
  get(url, config) {
74
- return this.request({ ...config, method: 'GET', url });
74
+ return this.request({ ...config, url, method: 'GET' });
75
75
  }
76
76
  post(url, data, config) {
77
- return this.request({ ...config, method: 'POST', url, body: JSON.stringify(data) });
77
+ return this.request({ ...config, url, method: 'POST', body: JSON.stringify(data) });
78
78
  }
79
79
  put(url, data, config) {
80
- return this.request({ ...config, method: 'PUT', url, body: JSON.stringify(data) });
80
+ return this.request({ ...config, url, method: 'PUT', body: JSON.stringify(data) });
81
+ }
82
+ patch(url, data, config) {
83
+ return this.request({ ...config, url, method: 'PATCH', body: JSON.stringify(data) });
81
84
  }
82
85
  delete(url, config) {
83
- return this.request({ ...config, method: 'DELETE', url });
86
+ return this.request({ ...config, url, method: 'DELETE' });
84
87
  }
85
88
  }
86
89
  exports.ApiClient = ApiClient;
@@ -19,5 +19,41 @@ class Pages {
19
19
  const response = await this.api.get(`/sites/:siteId:/pages/${pageId}`);
20
20
  return response.data;
21
21
  }
22
+ /**
23
+ * Get list of folders for a site
24
+ */
25
+ async getFolders() {
26
+ const response = await this.api.get('/sites/:siteId:/pages-folders');
27
+ return response.data;
28
+ }
29
+ /**
30
+ * Get a single folder by ID
31
+ */
32
+ async getFolder(folderId) {
33
+ const response = await this.api.get(`/sites/:siteId:/pages-folders/${folderId}`);
34
+ return response.data;
35
+ }
36
+ /**
37
+ * Update a folder's properties
38
+ */
39
+ async updateFolder(folderId, data) {
40
+ const response = await this.api.patch(`/sites/:siteId:/pages-folders/${folderId}`, data);
41
+ return response.data;
42
+ }
43
+ /**
44
+ * Create a new folder
45
+ */
46
+ async createFolder(data) {
47
+ const response = await this.api.post('/sites/:siteId:/pages-folders', data);
48
+ return response.data;
49
+ }
50
+ /**
51
+ * Delete a folder and its items
52
+ * @throws {NotFoundException} When the folder is not found
53
+ * @throws {ForbiddenException} When the folder does not belong to the site
54
+ */
55
+ async deleteFolder(folderId) {
56
+ await this.api.delete(`/sites/:siteId:/pages-folders/${folderId}`);
57
+ }
22
58
  }
23
59
  exports.Pages = Pages;
@@ -132,6 +132,10 @@ class TokenManager {
132
132
  catch (error) {
133
133
  console.error('Failed to retrieve token:', error);
134
134
  this.clearToken();
135
+ // Schedule a retry after REFRESH_CHECK_INTERVAL
136
+ setTimeout(() => {
137
+ void this.retrieveToken();
138
+ }, REFRESH_CHECK_INTERVAL);
135
139
  throw error;
136
140
  }
137
141
  }
@@ -68,15 +68,18 @@ export class ApiClient {
68
68
  }
69
69
  }
70
70
  get(url, config) {
71
- return this.request({ ...config, method: 'GET', url });
71
+ return this.request({ ...config, url, method: 'GET' });
72
72
  }
73
73
  post(url, data, config) {
74
- return this.request({ ...config, method: 'POST', url, body: JSON.stringify(data) });
74
+ return this.request({ ...config, url, method: 'POST', body: JSON.stringify(data) });
75
75
  }
76
76
  put(url, data, config) {
77
- return this.request({ ...config, method: 'PUT', url, body: JSON.stringify(data) });
77
+ return this.request({ ...config, url, method: 'PUT', body: JSON.stringify(data) });
78
+ }
79
+ patch(url, data, config) {
80
+ return this.request({ ...config, url, method: 'PATCH', body: JSON.stringify(data) });
78
81
  }
79
82
  delete(url, config) {
80
- return this.request({ ...config, method: 'DELETE', url });
83
+ return this.request({ ...config, url, method: 'DELETE' });
81
84
  }
82
85
  }
@@ -16,4 +16,40 @@ export class Pages {
16
16
  const response = await this.api.get(`/sites/:siteId:/pages/${pageId}`);
17
17
  return response.data;
18
18
  }
19
+ /**
20
+ * Get list of folders for a site
21
+ */
22
+ async getFolders() {
23
+ const response = await this.api.get('/sites/:siteId:/pages-folders');
24
+ return response.data;
25
+ }
26
+ /**
27
+ * Get a single folder by ID
28
+ */
29
+ async getFolder(folderId) {
30
+ const response = await this.api.get(`/sites/:siteId:/pages-folders/${folderId}`);
31
+ return response.data;
32
+ }
33
+ /**
34
+ * Update a folder's properties
35
+ */
36
+ async updateFolder(folderId, data) {
37
+ const response = await this.api.patch(`/sites/:siteId:/pages-folders/${folderId}`, data);
38
+ return response.data;
39
+ }
40
+ /**
41
+ * Create a new folder
42
+ */
43
+ async createFolder(data) {
44
+ const response = await this.api.post('/sites/:siteId:/pages-folders', data);
45
+ return response.data;
46
+ }
47
+ /**
48
+ * Delete a folder and its items
49
+ * @throws {NotFoundException} When the folder is not found
50
+ * @throws {ForbiddenException} When the folder does not belong to the site
51
+ */
52
+ async deleteFolder(folderId) {
53
+ await this.api.delete(`/sites/:siteId:/pages-folders/${folderId}`);
54
+ }
19
55
  }
@@ -129,6 +129,10 @@ export class TokenManager {
129
129
  catch (error) {
130
130
  console.error('Failed to retrieve token:', error);
131
131
  this.clearToken();
132
+ // Schedule a retry after REFRESH_CHECK_INTERVAL
133
+ setTimeout(() => {
134
+ void this.retrieveToken();
135
+ }, REFRESH_CHECK_INTERVAL);
132
136
  throw error;
133
137
  }
134
138
  }
@@ -7,15 +7,18 @@ export declare class ApiClient {
7
7
  private buildUrl;
8
8
  private request;
9
9
  get<T>(url: string, config?: RequestInit & {
10
- params?: Record<string, unknown>;
10
+ params?: object;
11
11
  }): Promise<FlexbeResponse<T>>;
12
12
  post<T>(url: string, data?: unknown, config?: RequestInit & {
13
- params?: Record<string, unknown>;
13
+ params?: object;
14
14
  }): Promise<FlexbeResponse<T>>;
15
15
  put<T>(url: string, data?: unknown, config?: RequestInit & {
16
- params?: Record<string, unknown>;
16
+ params?: object;
17
+ }): Promise<FlexbeResponse<T>>;
18
+ patch<T>(url: string, data?: unknown, config?: RequestInit & {
19
+ params?: object;
17
20
  }): Promise<FlexbeResponse<T>>;
18
21
  delete<T>(url: string, config?: RequestInit & {
19
- params?: Record<string, unknown>;
22
+ params?: object;
20
23
  }): Promise<FlexbeResponse<T>>;
21
24
  }
@@ -1,4 +1,4 @@
1
- import { Page, GetPagesParams, PageListResponse } from '../types/pages';
1
+ import { Page, GetPagesParams, PageListResponse, PageFolder, PageFolderListResponse, UpdateFolderParams, CreateFolderParams } from '../types/pages';
2
2
  import { ApiClient } from './api-client';
3
3
  export declare class Pages {
4
4
  private readonly api;
@@ -11,4 +11,26 @@ export declare class Pages {
11
11
  * Get a single page by ID
12
12
  */
13
13
  getPage(pageId: number): Promise<Page>;
14
+ /**
15
+ * Get list of folders for a site
16
+ */
17
+ getFolders(): Promise<PageFolderListResponse>;
18
+ /**
19
+ * Get a single folder by ID
20
+ */
21
+ getFolder(folderId: number): Promise<PageFolder>;
22
+ /**
23
+ * Update a folder's properties
24
+ */
25
+ updateFolder(folderId: number, data: UpdateFolderParams): Promise<PageFolder>;
26
+ /**
27
+ * Create a new folder
28
+ */
29
+ createFolder(data: CreateFolderParams): Promise<PageFolder>;
30
+ /**
31
+ * Delete a folder and its items
32
+ * @throws {NotFoundException} When the folder is not found
33
+ * @throws {ForbiddenException} When the folder does not belong to the site
34
+ */
35
+ deleteFolder(folderId: number): Promise<void>;
14
36
  }
@@ -32,3 +32,8 @@ export interface JwtToken {
32
32
  export interface TokenResponse {
33
33
  accessToken: string;
34
34
  }
35
+ export interface Pagination {
36
+ limit: number;
37
+ offset: number;
38
+ total: number;
39
+ }
@@ -1,3 +1,4 @@
1
+ import { Pagination } from './index';
1
2
  export declare enum PageType {
2
3
  PAGE = "page",
3
4
  FILE = "file",
@@ -14,28 +15,40 @@ export declare enum PageStatus {
14
15
  }
15
16
  export interface Page {
16
17
  id: number;
17
- siteId: number;
18
18
  type: PageType;
19
19
  uri: string;
20
20
  title: string | null;
21
21
  status: PageStatus;
22
22
  updatedAt?: Date;
23
23
  imgId: number | null;
24
+ folderId: number | null;
24
25
  sortIndex: number;
25
26
  }
26
- export interface GetPagesParams extends Record<string, unknown> {
27
+ export interface GetPagesParams {
27
28
  offset?: number;
28
29
  limit?: number;
29
30
  type?: PageType;
30
31
  status?: PageStatus;
31
32
  search?: string;
32
- }
33
- export interface Pagination {
34
- limit: number;
35
- offset: number;
36
- total: number;
33
+ folderId?: number;
37
34
  }
38
35
  export interface PageListResponse {
39
36
  pages: Page[];
40
37
  pagination: Pagination;
41
38
  }
39
+ export interface PageFolder {
40
+ id: number;
41
+ title: string;
42
+ sortIndex: number;
43
+ }
44
+ export interface PageFolderListResponse {
45
+ folders: PageFolder[];
46
+ }
47
+ export interface UpdateFolderParams {
48
+ title?: string;
49
+ sortIndex?: number;
50
+ }
51
+ export interface CreateFolderParams {
52
+ title: string;
53
+ sortIndex?: number;
54
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flexbe/sdk",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "TypeScript SDK for Flexbe API",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",