b5-api-client 0.0.26 → 0.0.28

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,10 +1,19 @@
1
- import { CreateOrderRequest, CreateUserRequest, Order, OrderResponse, TakeOrderRequest, TestEventParams, UpdateOrderRequest, TransactionStatusResponse, RateUserRequest, OrderEventsResponse, PushNotificationsRegisterRequest, ConfigResponse, DashboardMetricsResponse, UsersResponse, GetOrdersParams, CreateDisputeRequest, DisputesResponse, OrderOffersResponse, TransactionRequest, KioscoinOperationResponse, UpdateUserSettingsRequest, NotificationsResponse } from './types';
1
+ import { AxiosRequestConfig } from 'axios';
2
+ import { CreateOrderRequest, CreateUserRequest, Order, OrderResponse, TakeOrderRequest, TestEventParams, UpdateOrderRequest, TransactionStatusResponse, RateUserRequest, OrderEventsResponse, PushNotificationsRegisterRequest, ConfigResponse, DashboardMetricsResponse, UsersResponse, GetOrdersParams, CreateDisputeRequest, DisputesResponse, OrderOffersResponse, TransactionRequest, KioscoinOperationResponse, UpdateUserSettingsRequest, NotificationsResponse, VerifyEmailRequest } from './types';
3
+ import { AuthTokenProvider } from './auth/AuthTokenProvider';
4
+ export interface RequestConfigWithRetry extends AxiosRequestConfig {
5
+ _retry?: boolean;
6
+ }
2
7
  declare class P2PMarketplaceAPIClient {
3
8
  private readonly client;
4
9
  private readonly defaultHeaders;
10
+ private authTokenProvider?;
11
+ private refreshTokenPromise?;
5
12
  constructor(baseURL: string, timeout?: number);
13
+ setAuthTokenProvider(provider?: AuthTokenProvider): void;
6
14
  private mergeHeaders;
7
15
  private createConfig;
16
+ private getRefreshedToken;
8
17
  get<T>(url: string, headers?: Record<string, string>): Promise<T>;
9
18
  post<T>(url: string, data: any, headers?: Record<string, string>): Promise<T>;
10
19
  getOrders(props: GetOrdersParams, headers?: Record<string, string>): Promise<OrderResponse>;
@@ -16,6 +25,7 @@ declare class P2PMarketplaceAPIClient {
16
25
  getUser(userId: string, headers?: Record<string, string>): Promise<UsersResponse>;
17
26
  rateUser(rateUserRequest: RateUserRequest, headers?: Record<string, string>): Promise<any>;
18
27
  updateUserSettings(request: UpdateUserSettingsRequest, headers?: Record<string, string>): Promise<UsersResponse>;
28
+ verifyUserEmail(request: VerifyEmailRequest, headers?: Record<string, string>): Promise<UsersResponse>;
19
29
  registerPushToken(registerRequest: PushNotificationsRegisterRequest, headers?: Record<string, string>): Promise<any>;
20
30
  listNotifications(limit?: number, offset?: number, headers?: Record<string, string>): Promise<NotificationsResponse>;
21
31
  markNotificationAsRead(notificationId: string, headers?: Record<string, string>): Promise<NotificationsResponse>;
@@ -24,8 +34,6 @@ declare class P2PMarketplaceAPIClient {
24
34
  getDashboardMetrics(headers?: Record<string, string>): Promise<DashboardMetricsResponse>;
25
35
  getOrderOffers(headers?: Record<string, string>): Promise<OrderOffersResponse>;
26
36
  pointOfSaleTransact(request: TransactionRequest, headers?: Record<string, string>): Promise<KioscoinOperationResponse>;
27
- testLockFunds(order: Order, testParams?: TestEventParams, headers?: Record<string, string>): Promise<void>;
28
- testReleaseFunds(order: Order, testParams?: TestEventParams, headers?: Record<string, string>): Promise<void>;
29
37
  releaseFunds(order: Order, testParams?: TestEventParams, headers?: Record<string, string>): Promise<string>;
30
38
  getTransactionStatus(txHash: string, headers?: Record<string, string>): Promise<TransactionStatusResponse>;
31
39
  createDispute(request: CreateDisputeRequest, headers?: Record<string, string>): Promise<DisputesResponse>;
@@ -25,12 +25,29 @@ class P2PMarketplaceAPIClient {
25
25
  'x-blockchain': 'rsk_testnet'
26
26
  };
27
27
  // Add a request interceptor to transform request data to snake_case
28
- this.client.interceptors.request.use((config) => {
28
+ this.client.interceptors.request.use((config) => __awaiter(this, void 0, void 0, function* () {
29
29
  if (config.data) {
30
30
  config.data = toSnakeCase(config.data);
31
31
  }
32
- return config;
33
- }, (error) => {
32
+ const provider = this.authTokenProvider;
33
+ if (!provider) {
34
+ return config;
35
+ }
36
+ return provider
37
+ .getToken()
38
+ .then((token) => {
39
+ var _a;
40
+ if (token) {
41
+ config.headers = (_a = config.headers) !== null && _a !== void 0 ? _a : {};
42
+ config.headers['Authorization'] = `Bearer ${token}`;
43
+ }
44
+ return config;
45
+ })
46
+ .catch((error) => {
47
+ console.warn('[P2PMarketplaceAPIClient] Failed to obtain auth token before request:', error);
48
+ return config;
49
+ });
50
+ }), (error) => {
34
51
  return Promise.reject(error);
35
52
  });
36
53
  // Add a response interceptor to transform response data to camelCase
@@ -39,9 +56,37 @@ class P2PMarketplaceAPIClient {
39
56
  response.data = toCamelCase(response.data);
40
57
  }
41
58
  return response;
42
- }, (error) => {
43
- return Promise.reject(error);
44
- });
59
+ }, (error) => __awaiter(this, void 0, void 0, function* () {
60
+ var _a, _b;
61
+ const { response, config } = error;
62
+ if (!this.authTokenProvider || (response === null || response === void 0 ? void 0 : response.status) !== 401 || !config) {
63
+ return Promise.reject(error);
64
+ }
65
+ const originalRequest = config;
66
+ if (originalRequest._retry) {
67
+ return Promise.reject(error);
68
+ }
69
+ originalRequest._retry = true;
70
+ try {
71
+ const newToken = yield this.getRefreshedToken();
72
+ if (!newToken) {
73
+ return Promise.reject(error);
74
+ }
75
+ originalRequest.headers = (_a = originalRequest.headers) !== null && _a !== void 0 ? _a : {};
76
+ originalRequest.headers['Authorization'] = `Bearer ${newToken}`;
77
+ return this.client(originalRequest);
78
+ }
79
+ catch (refreshError) {
80
+ if ((_b = this.authTokenProvider) === null || _b === void 0 ? void 0 : _b.onRefreshFailure) {
81
+ this.authTokenProvider.onRefreshFailure(refreshError);
82
+ }
83
+ return Promise.reject(error);
84
+ }
85
+ }));
86
+ }
87
+ setAuthTokenProvider(provider) {
88
+ this.authTokenProvider = provider;
89
+ this.refreshTokenPromise = undefined;
45
90
  }
46
91
  mergeHeaders(customHeaders) {
47
92
  return Object.assign(Object.assign({}, this.defaultHeaders), customHeaders);
@@ -51,6 +96,28 @@ class P2PMarketplaceAPIClient {
51
96
  headers: this.mergeHeaders(headers)
52
97
  };
53
98
  }
99
+ getRefreshedToken() {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ if (!this.authTokenProvider) {
102
+ return null;
103
+ }
104
+ if (!this.refreshTokenPromise) {
105
+ this.refreshTokenPromise = this.authTokenProvider
106
+ .refreshToken()
107
+ .catch((error) => {
108
+ var _a;
109
+ if ((_a = this.authTokenProvider) === null || _a === void 0 ? void 0 : _a.onRefreshFailure) {
110
+ this.authTokenProvider.onRefreshFailure(error);
111
+ }
112
+ throw error;
113
+ })
114
+ .finally(() => {
115
+ this.refreshTokenPromise = undefined;
116
+ });
117
+ }
118
+ return this.refreshTokenPromise;
119
+ });
120
+ }
54
121
  get(url, headers) {
55
122
  return __awaiter(this, void 0, void 0, function* () {
56
123
  const config = this.createConfig(headers);
@@ -157,6 +224,12 @@ class P2PMarketplaceAPIClient {
157
224
  return this.post(url, request, headers);
158
225
  });
159
226
  }
227
+ verifyUserEmail(request, headers) {
228
+ return __awaiter(this, void 0, void 0, function* () {
229
+ const url = '/api/users/verify_email';
230
+ return this.post(url, request, headers);
231
+ });
232
+ }
160
233
  registerPushToken(registerRequest, headers) {
161
234
  return __awaiter(this, void 0, void 0, function* () {
162
235
  const url = `/api/notifications/register-push`;
@@ -205,59 +278,6 @@ class P2PMarketplaceAPIClient {
205
278
  return this.post(url, request, headers);
206
279
  });
207
280
  }
208
- testLockFunds(order, testParams, headers) {
209
- var _a, _b, _c, _d;
210
- return __awaiter(this, void 0, void 0, function* () {
211
- const orderEvent = {
212
- type: "LOCKED",
213
- orderId: (_a = order.id) !== null && _a !== void 0 ? _a : "",
214
- buyerAddress: (_b = order.buyerAddress) !== null && _b !== void 0 ? _b : "",
215
- amount: (_d = (_c = order.amount) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : "0",
216
- transaction: {
217
- hash: "0x976d8c61b958e286d907a2e1c5ffde8c9316800ab4de1396a54927a39dc533a2",
218
- },
219
- tokenContractAddress: "0xee5e8291b551603a19ef41eea69ae49592ed14f8",
220
- buyerHash: "02809d5cc2ec09a7503ef77358654a5bfc958e08c04ecb33f412884c0933be68",
221
- sellerAddress: "0x2A4E89D18C2742FEDC65444d339cC5fAF3dE4dF1",
222
- sellerHash: "4b3560738b8e3cb8a0a30ac664b12de2ace977c62ade94bc08a37fe5b93bf34b",
223
- fee: "30000000000000000",
224
- timestamp: new Date().toISOString(),
225
- };
226
- const url = "api/events/simulate/lock";
227
- try {
228
- yield this.post(url, orderEvent, headers);
229
- }
230
- catch (error) {
231
- console.error("Error locking funds:", error);
232
- throw new Error("Failed to lock funds");
233
- }
234
- });
235
- }
236
- testReleaseFunds(order, testParams, headers) {
237
- var _a, _b, _c, _d;
238
- return __awaiter(this, void 0, void 0, function* () {
239
- const releaseOrderEvent = {
240
- type: "RELEASED",
241
- orderId: (_a = order.id) !== null && _a !== void 0 ? _a : "",
242
- buyerAddress: (_b = order.buyerAddress) !== null && _b !== void 0 ? _b : "",
243
- amount: (_d = (_c = order.amount) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : "0",
244
- transaction: {
245
- hash: "0xeab4797bf0e13dff0bda481503a544698127c5f97dd826c465ebdb41bcfec3f5",
246
- },
247
- tokenContractAddress: "0xee5e8291b551603a19ef41eea69ae49592ed14f8",
248
- adminAction: true,
249
- timestamp: new Date().toISOString(),
250
- };
251
- const url = "api/events/simulate/release";
252
- try {
253
- yield this.post(url, releaseOrderEvent, headers);
254
- }
255
- catch (error) {
256
- console.error("Error releasing funds:", error);
257
- throw new Error("Failed to release funds");
258
- }
259
- });
260
- }
261
281
  releaseFunds(order, testParams, headers) {
262
282
  var _a;
263
283
  return __awaiter(this, void 0, void 0, function* () {
@@ -0,0 +1,5 @@
1
+ export interface AuthTokenProvider {
2
+ getToken(): Promise<string | null>;
3
+ refreshToken(): Promise<string | null>;
4
+ onRefreshFailure?(error: unknown): void;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -8,14 +8,6 @@ export declare enum AuthProvider {
8
8
  FACEBOOK = "FACEBOOK",
9
9
  TWITTER = "TWITTER"
10
10
  }
11
- export declare class AuthState {
12
- readonly isAuthenticated: boolean;
13
- readonly user: UserData | null;
14
- readonly provider: AuthProvider | null;
15
- private constructor();
16
- static authenticated(user: UserData, provider: AuthProvider): AuthState;
17
- static unauthenticated(): AuthState;
18
- }
19
11
  export declare class UserData {
20
12
  readonly id: string;
21
13
  readonly email: string;
@@ -47,15 +39,23 @@ export interface FirebaseConfig {
47
39
  appId: string;
48
40
  measurementId?: string;
49
41
  }
50
- export declare class FirebaseUnifiedService implements LoginService {
42
+ export declare class FirebaseService implements LoginService {
51
43
  private app;
52
44
  private messaging;
53
45
  private auth;
54
46
  private readonly actionCodeSettings;
47
+ private readonly emailVerificationUrl;
48
+ private readonly emailVerificationContinueUrl?;
55
49
  private client;
56
- constructor(client: P2PMarketplaceAPIClient, config?: FirebaseLoginServiceConfig);
50
+ private readonly initializationPromise;
51
+ constructor(backendClient: P2PMarketplaceAPIClient, firebaseLoginConfig?: FirebaseLoginServiceConfig);
57
52
  private initializeFirebase;
53
+ private ensureAuthInstance;
54
+ private buildAuthTokenProvider;
58
55
  private fetchFirebaseConfig;
56
+ private buildEmailVerificationSettings;
57
+ private buildEmailVerificationUrl;
58
+ private ensureBackendVerification;
59
59
  requestNotificationPermission(): Promise<string | null>;
60
60
  fetchToken(): Promise<string | null>;
61
61
  onMessageListener(callback: (payload: any) => void): void;
@@ -72,6 +72,7 @@ export declare class FirebaseUnifiedService implements LoginService {
72
72
  isSignInWithEmailLink(): boolean;
73
73
  signInWithEmailLink(email: string): Promise<AuthResult>;
74
74
  getEmailForSignIn(): string | null;
75
+ applyEmailVerificationCode(oobCode: string): Promise<void>;
75
76
  private _createSuccessAuthResult;
76
77
  private getUserFromBackend;
77
78
  private createUserInBackend;