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.
- package/dist/P2PMarketplaceAPIClient.d.ts +11 -3
- package/dist/P2PMarketplaceAPIClient.js +79 -59
- package/dist/auth/AuthTokenProvider.d.ts +5 -0
- package/dist/auth/AuthTokenProvider.js +2 -0
- package/dist/auth/FirebaseLoginService.d.ts +11 -10
- package/dist/auth/FirebaseLoginService.js +192 -67
- package/dist/auth/LoginService.d.ts +2 -0
- package/dist/auth/LoginService.js +2 -2
- package/dist/auth/UserContext.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +5 -2
- package/dist/types.d.ts +5 -1
- package/package.json +1 -1
- package/src/P2PMarketplaceAPIClient.ts +88 -58
- package/src/auth/AuthTokenProvider.ts +5 -0
- package/src/auth/FirebaseLoginService.ts +233 -70
- package/src/auth/LoginService.ts +4 -3
- package/src/auth/UserContext.ts +1 -0
- package/src/index.ts +1 -1
- package/src/types.ts +8 -1
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
33
|
-
|
|
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
|
-
|
|
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* () {
|
|
@@ -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
|
|
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
|
-
|
|
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;
|