@flashbacktech/flashbackclient 0.0.46 → 0.0.48

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.
@@ -1,13 +1,23 @@
1
- import { CreateUnitRequest, CreateUnitResponse, CreateRepoRequest, CreateRepoResponse, CreateRepoKeyRequest, CreateRepoKeyResponse, GetUnitsResponse, GetReposResponse, GetRepoKeysResponse } from './types/storage';
1
+ import { CreateUnitRequest, CreateUnitResponse, CreateRepoRequest, CreateRepoResponse, CreateRepoKeyRequest, CreateRepoKeyResponse, GetUnitsResponse, GetReposResponse, GetRepoKeysResponse, UpdateUnitRequest, UpdateUnitResponse, ActionResponse, UpdateRepoRequest, UpdateRepoResponse, UpdateRepoKeyRequest, UpdateRepoKeyResponse } from './types/storage';
2
2
  import { IApiClient, ProviderType } from './interfaces';
3
+ import { OAuth2ResponseDTO, RefreshTokenResponse } from './types/auth';
4
+ interface ErrorResponse {
5
+ message?: string;
6
+ [key: string]: any;
7
+ }
8
+ export declare class HttpError extends Error {
9
+ status: number;
10
+ statusText: string;
11
+ data: ErrorResponse;
12
+ constructor(status: number, statusText: string, data: ErrorResponse);
13
+ }
3
14
  export declare class ApiClient implements IApiClient {
4
15
  private baseURL;
5
16
  private headers;
6
17
  constructor(baseURL?: string);
7
18
  setAuthToken: (token: string | null) => void;
8
19
  authenticate: (token: string, provider: ProviderType) => Promise<any>;
9
- exchangeCode: (code: string, provider: ProviderType) => Promise<any>;
10
- private exchangeGoogleCode;
20
+ exchangeCode: (code: string, provider: ProviderType) => Promise<OAuth2ResponseDTO>;
11
21
  private exchangeGithubCode;
12
22
  private exchangeWeb3StellarCode;
13
23
  /**
@@ -16,15 +26,24 @@ export declare class ApiClient implements IApiClient {
16
26
  * @param provider - The provider to refresh the token for
17
27
  * @returns The refreshed token
18
28
  */
19
- refreshToken: (refreshToken: string, provider: ProviderType) => Promise<any>;
29
+ refreshToken: (refreshToken: string, provider: ProviderType) => Promise<RefreshTokenResponse>;
20
30
  private authenticateWeb3Stellar;
31
+ private makeRequest;
21
32
  private authenticateGoogle;
22
33
  private authenticateGithub;
23
- private refreshTokenGoogle;
34
+ private refreshGoogleToken;
35
+ private exchangeGoogleCode;
24
36
  createStorageUnit: (data: CreateUnitRequest) => Promise<CreateUnitResponse>;
25
37
  getStorageUnits: () => Promise<GetUnitsResponse>;
38
+ updateStorageUnit: (unitId: string, data: UpdateUnitRequest) => Promise<UpdateUnitResponse>;
39
+ deleteStorageUnit: (unitId: string) => Promise<ActionResponse>;
26
40
  createRepo: (data: CreateRepoRequest) => Promise<CreateRepoResponse>;
27
41
  getRepos: () => Promise<GetReposResponse>;
42
+ updateRepo: (repoId: string, data: UpdateRepoRequest) => Promise<UpdateRepoResponse>;
43
+ deleteRepo: (repoId: string) => Promise<ActionResponse>;
28
44
  createRepoKey: (data: CreateRepoKeyRequest) => Promise<CreateRepoKeyResponse>;
29
45
  getRepoKeys: (repoId: string) => Promise<GetRepoKeysResponse>;
46
+ updateRepoKey: (repoId: string, data: UpdateRepoKeyRequest) => Promise<UpdateRepoKeyResponse>;
47
+ deleteRepoKey: (repoId: string, keyId: string) => Promise<ActionResponse>;
30
48
  }
49
+ export {};
@@ -1,7 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ApiClient = void 0;
3
+ exports.ApiClient = exports.HttpError = void 0;
4
4
  const interfaces_1 = require("./interfaces");
5
+ class HttpError extends Error {
6
+ constructor(status, statusText, data) {
7
+ super(`HTTP Error ${status}: ${statusText}`);
8
+ this.status = status;
9
+ this.statusText = statusText;
10
+ this.data = data;
11
+ this.name = 'HttpError'; // This helps in instanceof checks
12
+ }
13
+ }
14
+ exports.HttpError = HttpError;
5
15
  class ApiClient {
6
16
  constructor(baseURL = 'https://api.flashback.tech') {
7
17
  this.setAuthToken = (token) => {
@@ -42,18 +52,6 @@ class ApiClient {
42
52
  throw new Error(`Unsupported provider: ${provider}`);
43
53
  }
44
54
  };
45
- this.exchangeGoogleCode = async (code) => {
46
- const response = await fetch(`${this.baseURL}/auth/google/exchange`, {
47
- method: 'POST',
48
- headers: this.headers,
49
- body: JSON.stringify({ code }),
50
- });
51
- if (!response.ok) {
52
- throw new Error(`HTTP error! status: ${response.status}`);
53
- }
54
- const ret = await response.json();
55
- return ret;
56
- };
57
55
  this.exchangeGithubCode = async (code) => {
58
56
  throw new Error('Not implemented');
59
57
  };
@@ -69,7 +67,7 @@ class ApiClient {
69
67
  this.refreshToken = async (refreshToken, provider) => {
70
68
  switch (provider) {
71
69
  case interfaces_1.ProviderType.GOOGLE:
72
- return this.refreshTokenGoogle(refreshToken);
70
+ return this.refreshGoogleToken(refreshToken);
73
71
  case interfaces_1.ProviderType.GITHUB:
74
72
  // TODO: Implement refresh token for Github
75
73
  throw new Error('Not implemented');
@@ -80,112 +78,72 @@ class ApiClient {
80
78
  this.authenticateWeb3Stellar = async (token) => {
81
79
  throw new Error('Not implemented');
82
80
  };
83
- this.authenticateGoogle = async (token) => {
84
- this.setAuthToken(token);
85
- const response = await fetch(`${this.baseURL}/auth/google`, {
86
- method: 'POST',
81
+ this.makeRequest = async (path, method, data) => {
82
+ const options = {
83
+ method,
87
84
  headers: this.headers,
88
- body: JSON.stringify({ token }),
89
- });
85
+ body: data ? JSON.stringify(data) : null,
86
+ };
87
+ const response = await fetch(`${this.baseURL}/${path}`, options);
88
+ const responseData = await response.json();
90
89
  if (!response.ok) {
91
- throw new Error(`HTTP error! status: ${response.status}`);
90
+ throw new HttpError(response.status, response.statusText, responseData);
92
91
  }
93
- const ret = await response.json();
94
- return ret;
92
+ return responseData;
93
+ };
94
+ ////// Auth API
95
+ this.authenticateGoogle = async (token) => {
96
+ this.setAuthToken(token);
97
+ return this.makeRequest('auth/google', 'POST', { token });
95
98
  };
96
99
  this.authenticateGithub = async (code) => {
97
100
  this.setAuthToken(code);
98
- const response = await fetch(`${this.baseURL}/auth/github`, {
99
- method: 'POST',
100
- headers: this.headers,
101
- body: JSON.stringify({ code }),
102
- });
103
- if (!response.ok) {
104
- throw new Error(`HTTP error! status: ${response.status}`);
105
- }
106
- const ret = await response.json();
107
- return ret;
101
+ return this.makeRequest('auth/github', 'POST', { code });
108
102
  };
109
- this.refreshTokenGoogle = async (refreshToken) => {
110
- const response = await fetch(`${this.baseURL}/auth/google/refresh`, {
111
- method: 'POST',
112
- headers: this.headers,
113
- body: JSON.stringify({ refresh_token: refreshToken }),
114
- });
115
- if (!response.ok) {
116
- throw new Error(`HTTP error! status: ${response.status}`);
117
- }
118
- const ret = await response.json();
119
- return ret;
103
+ this.refreshGoogleToken = async (refreshToken) => {
104
+ return this.makeRequest('auth/google/refresh', 'POST', { refresh_token: refreshToken });
105
+ };
106
+ this.exchangeGoogleCode = async (code) => {
107
+ return this.makeRequest('auth/google/exchange', 'POST', { code });
120
108
  };
109
+ ////// Units API
121
110
  this.createStorageUnit = async (data) => {
122
- const response = await fetch(`${this.baseURL}/unit`, {
123
- method: 'POST',
124
- headers: this.headers,
125
- body: JSON.stringify(data),
126
- });
127
- if (!response.ok) {
128
- throw new Error(`HTTP error! status: ${response.status}`);
129
- }
130
- const ret = await response.json();
131
- return ret;
111
+ return this.makeRequest('unit', 'POST', data);
132
112
  };
133
113
  this.getStorageUnits = async () => {
134
- const response = await fetch(`${this.baseURL}/unit`, {
135
- method: 'GET',
136
- headers: this.headers,
137
- });
138
- if (!response.ok) {
139
- throw new Error(`HTTP error! status: ${response.status}`);
140
- }
141
- const ret = await response.json();
142
- return ret;
114
+ return this.makeRequest('unit', 'GET', null);
115
+ };
116
+ this.updateStorageUnit = async (unitId, data) => {
117
+ return this.makeRequest(`unit/${unitId}`, 'PUT', data);
118
+ };
119
+ this.deleteStorageUnit = async (unitId) => {
120
+ return this.makeRequest(`unit/${unitId}`, 'DELETE', null);
143
121
  };
122
+ ////// Repos API
144
123
  this.createRepo = async (data) => {
145
- const response = await fetch(`${this.baseURL}/repo`, {
146
- method: 'POST',
147
- headers: this.headers,
148
- body: JSON.stringify(data),
149
- });
150
- if (!response.ok) {
151
- throw new Error(`HTTP error! status: ${response.status}`);
152
- }
153
- const ret = await response.json();
154
- return ret;
124
+ return this.makeRequest('repo', 'POST', data);
155
125
  };
156
126
  this.getRepos = async () => {
157
- const response = await fetch(`${this.baseURL}/repo`, {
158
- method: 'GET',
159
- headers: this.headers,
160
- });
161
- if (!response.ok) {
162
- throw new Error(`HTTP error! status: ${response.status}`);
163
- }
164
- const ret = await response.json();
165
- return ret;
127
+ return this.makeRequest('repo', 'GET', null);
128
+ };
129
+ this.updateRepo = async (repoId, data) => {
130
+ return this.makeRequest(`repo/${repoId}`, 'PUT', data);
131
+ };
132
+ this.deleteRepo = async (repoId) => {
133
+ return this.makeRequest(`repo/${repoId}`, 'DELETE', null);
166
134
  };
135
+ ////// Keys API
167
136
  this.createRepoKey = async (data) => {
168
- const response = await fetch(`${this.baseURL}/repo/${data.repoId}/apikey`, {
169
- method: 'POST',
170
- headers: this.headers,
171
- body: JSON.stringify(data),
172
- });
173
- if (!response.ok) {
174
- throw new Error(`HTTP error! status: ${response.status}`);
175
- }
176
- const ret = await response.json();
177
- return ret;
137
+ return this.makeRequest(`repo/${data.repoId}/apikey`, 'POST', data);
178
138
  };
179
139
  this.getRepoKeys = async (repoId) => {
180
- const response = await fetch(`${this.baseURL}/repo/${repoId}/apikey`, {
181
- method: 'GET',
182
- headers: this.headers,
183
- });
184
- if (!response.ok) {
185
- throw new Error(`HTTP error! status: ${response.status}`);
186
- }
187
- const ret = await response.json();
188
- return ret;
140
+ return this.makeRequest(`repo/${repoId}/apikey`, 'GET', null);
141
+ };
142
+ this.updateRepoKey = async (repoId, data) => {
143
+ return this.makeRequest(`repo/${repoId}/apikey`, 'PUT', data);
144
+ };
145
+ this.deleteRepoKey = async (repoId, keyId) => {
146
+ return this.makeRequest(`repo/${repoId}/apikey/${keyId}`, 'DELETE', null);
189
147
  };
190
148
  this.baseURL = baseURL;
191
149
  this.headers = {
@@ -1,4 +1,4 @@
1
- import { CreateUnitRequest, CreateUnitResponse, CreateRepoRequest, CreateRepoResponse, CreateRepoKeyRequest, CreateRepoKeyResponse, GetUnitsResponse, GetReposResponse, GetRepoKeysResponse } from "./types/storage";
1
+ import { CreateUnitRequest, CreateUnitResponse, CreateRepoRequest, CreateRepoResponse, CreateRepoKeyRequest, CreateRepoKeyResponse, GetUnitsResponse, GetReposResponse, GetRepoKeysResponse, UpdateUnitRequest, UpdateUnitResponse, ActionResponse, UpdateRepoResponse, UpdateRepoRequest, UpdateRepoKeyRequest, UpdateRepoKeyResponse } from "./types/storage";
2
2
  export declare enum ProviderType {
3
3
  GOOGLE = "GOOGLE",
4
4
  GITHUB = "GITHUB",
@@ -8,8 +8,14 @@ export interface IApiClient {
8
8
  authenticate(token: string, provider: ProviderType): Promise<any>;
9
9
  createStorageUnit(data: CreateUnitRequest): Promise<CreateUnitResponse>;
10
10
  getStorageUnits(): Promise<GetUnitsResponse>;
11
+ updateStorageUnit(unitId: string, data: UpdateUnitRequest): Promise<UpdateUnitResponse>;
12
+ deleteStorageUnit(unitId: string): Promise<ActionResponse>;
11
13
  createRepo(data: CreateRepoRequest): Promise<CreateRepoResponse>;
12
14
  getRepos(): Promise<GetReposResponse>;
15
+ updateRepo(repoId: string, data: UpdateRepoRequest): Promise<UpdateRepoResponse>;
16
+ deleteRepo(repoId: string): Promise<ActionResponse>;
13
17
  createRepoKey(data: CreateRepoKeyRequest): Promise<CreateRepoKeyResponse>;
14
18
  getRepoKeys(repoId: string): Promise<GetRepoKeysResponse>;
19
+ updateRepoKey(repoId: string, data: UpdateRepoKeyRequest): Promise<UpdateRepoKeyResponse>;
20
+ deleteRepoKey(repoId: string, keyId: string): Promise<ActionResponse>;
15
21
  }
@@ -12,6 +12,10 @@ export declare enum ModeType {
12
12
  NORMAL = "NORMAL",
13
13
  MIRROR = "MIRROR"
14
14
  }
15
+ export interface ActionResponse {
16
+ success: boolean;
17
+ message?: string;
18
+ }
15
19
  export interface CreateUnitRequest {
16
20
  name: string;
17
21
  bucket: string;
@@ -21,10 +25,14 @@ export interface CreateUnitRequest {
21
25
  endpoint?: string;
22
26
  regionId?: string;
23
27
  }
28
+ export interface UpdateUnitRequest extends CreateUnitRequest {
29
+ }
24
30
  export interface CreateUnitResponse {
25
31
  success: boolean;
26
32
  unitId: string;
27
33
  }
34
+ export interface UpdateUnitResponse extends CreateUnitResponse {
35
+ }
28
36
  export interface RepoUnitInfo {
29
37
  id: string;
30
38
  folder: string;
@@ -39,6 +47,10 @@ export interface CreateRepoResponse {
39
47
  success: boolean;
40
48
  repoId: string;
41
49
  }
50
+ export interface UpdateRepoRequest extends CreateRepoRequest {
51
+ }
52
+ export interface UpdateRepoResponse extends CreateRepoResponse {
53
+ }
42
54
  export interface CreateRepoKeyRequest {
43
55
  repoId: string;
44
56
  name: string;
@@ -50,6 +62,10 @@ export interface CreateRepoKeyResponse {
50
62
  key: string;
51
63
  secret: string;
52
64
  }
65
+ export interface UpdateRepoKeyRequest extends CreateRepoKeyRequest {
66
+ }
67
+ export interface UpdateRepoKeyResponse extends CreateRepoKeyResponse {
68
+ }
53
69
  export interface StorageRepo {
54
70
  id: string;
55
71
  name: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flashbacktech/flashbackclient",
3
- "version": "0.0.46",
3
+ "version": "0.0.48",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },