squarefi-bff-api-module 1.32.1 → 1.32.2

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.
Files changed (125) hide show
  1. package/dist/api/auth.d.ts +29 -0
  2. package/dist/api/auth.js +59 -0
  3. package/dist/api/bank-data.d.ts +4 -0
  4. package/dist/api/bank-data.js +6 -0
  5. package/dist/api/counterparties.d.ts +14 -0
  6. package/dist/api/counterparties.js +16 -0
  7. package/dist/api/developer.d.ts +12 -0
  8. package/dist/api/developer.js +12 -0
  9. package/dist/api/exchange.d.ts +14 -0
  10. package/dist/api/exchange.js +20 -0
  11. package/dist/api/frontend.d.ts +11 -0
  12. package/dist/api/frontend.js +11 -0
  13. package/dist/api/index.d.ts +38 -0
  14. package/dist/api/index.js +36 -0
  15. package/dist/api/issuing.d.ts +64 -0
  16. package/dist/api/issuing.js +140 -0
  17. package/dist/api/kyc.d.ts +21 -0
  18. package/dist/api/kyc.js +21 -0
  19. package/dist/api/list.d.ts +16 -0
  20. package/dist/api/list.js +16 -0
  21. package/dist/api/orders.d.ts +49 -0
  22. package/dist/api/orders.js +84 -0
  23. package/dist/api/persona.d.ts +7 -0
  24. package/dist/api/persona.js +7 -0
  25. package/dist/api/storage.d.ts +8 -0
  26. package/dist/api/storage.js +16 -0
  27. package/dist/api/tenants.d.ts +6 -0
  28. package/dist/api/tenants.js +6 -0
  29. package/dist/api/totp.d.ts +17 -0
  30. package/dist/api/totp.js +45 -0
  31. package/{src/api/types/autogen/apiV2.types.ts → dist/api/types/autogen/apiV2.types.d.ts} +0 -1
  32. package/dist/api/types/autogen/apiV2.types.js +5 -0
  33. package/dist/api/types/types.d.ts +2258 -0
  34. package/dist/api/types/types.js +1 -0
  35. package/dist/api/user.d.ts +18 -0
  36. package/dist/api/user.js +18 -0
  37. package/dist/api/virtual-accounts.d.ts +9 -0
  38. package/dist/api/virtual-accounts.js +9 -0
  39. package/dist/api/wallets.d.ts +24 -0
  40. package/dist/api/wallets.js +30 -0
  41. package/dist/constants.d.ts +303 -0
  42. package/dist/constants.js +332 -0
  43. package/dist/hooks/index.js +3 -0
  44. package/dist/hooks/useCalc.d.ts +25 -0
  45. package/dist/hooks/useCalc.js +115 -0
  46. package/dist/hooks/useFileUpload.d.ts +49 -0
  47. package/dist/hooks/useFileUpload.js +100 -0
  48. package/dist/hooks/useSupabaseSubscription/config.d.ts +2 -0
  49. package/dist/hooks/useSupabaseSubscription/config.js +5 -0
  50. package/dist/hooks/useSupabaseSubscription/index.js +2 -0
  51. package/dist/hooks/useSupabaseSubscription/specialized.d.ts +5 -0
  52. package/{src/hooks/useSupabaseSubscription/specialized.ts → dist/hooks/useSupabaseSubscription/specialized.js} +2 -5
  53. package/dist/hooks/useSupabaseSubscription/types.d.ts +16 -0
  54. package/dist/hooks/useSupabaseSubscription/types.js +1 -0
  55. package/dist/hooks/useSupabaseSubscription/useSupabaseSubscription.d.ts +5 -0
  56. package/dist/hooks/useSupabaseSubscription/useSupabaseSubscription.js +37 -0
  57. package/dist/index.d.ts +7 -0
  58. package/dist/utils/apiClientFactory.d.ts +31 -0
  59. package/dist/utils/apiClientFactory.js +138 -0
  60. package/dist/utils/converters.d.ts +1 -0
  61. package/dist/utils/converters.js +1 -0
  62. package/dist/utils/encrypt.d.ts +10 -0
  63. package/dist/utils/encrypt.js +77 -0
  64. package/dist/utils/fileStorage.d.ts +120 -0
  65. package/dist/utils/fileStorage.js +292 -0
  66. package/dist/utils/storage.d.ts +3 -0
  67. package/dist/utils/storage.js +24 -0
  68. package/dist/utils/supabase.d.ts +1 -0
  69. package/dist/utils/supabase.js +12 -0
  70. package/dist/utils/tokensFactory.d.ts +12 -0
  71. package/dist/utils/tokensFactory.js +42 -0
  72. package/package.json +4 -1
  73. package/.env.example +0 -1
  74. package/.husky/pre-commit +0 -2
  75. package/.prettierignore +0 -6
  76. package/.prettierrc +0 -7
  77. package/CHANGELOG.md +0 -1415
  78. package/FIXED_RLS_ERROR.md +0 -146
  79. package/QUICK_TEST.md +0 -127
  80. package/STORAGE_MODULE_SUMMARY.md +0 -228
  81. package/TEST_INSTRUCTIONS.md +0 -122
  82. package/docs/AUTH_TOKEN_USAGE.md +0 -290
  83. package/docs/BACKEND_SERVICE_URL.md +0 -334
  84. package/docs/FRONTEND_STORAGE_GUIDE.md +0 -529
  85. package/docs/STORAGE_MODULE.md +0 -490
  86. package/docs/STORAGE_QUICK_START.md +0 -76
  87. package/scripts/generate-openapi-types.ts +0 -41
  88. package/scripts/supabase-storage-setup.sql +0 -223
  89. package/src/api/auth.ts +0 -78
  90. package/src/api/bank-data.ts +0 -11
  91. package/src/api/counterparties.ts +0 -73
  92. package/src/api/developer.ts +0 -20
  93. package/src/api/exchange.ts +0 -44
  94. package/src/api/frontend.ts +0 -20
  95. package/src/api/index.ts +0 -57
  96. package/src/api/issuing.ts +0 -214
  97. package/src/api/kyc.ts +0 -41
  98. package/src/api/list.ts +0 -26
  99. package/src/api/orders.ts +0 -255
  100. package/src/api/persona.ts +0 -16
  101. package/src/api/storage.ts +0 -24
  102. package/src/api/tenants.ts +0 -8
  103. package/src/api/totp.ts +0 -51
  104. package/src/api/types/types.ts +0 -2820
  105. package/src/api/user.ts +0 -27
  106. package/src/api/virtual-accounts.ts +0 -15
  107. package/src/api/wallets.ts +0 -65
  108. package/src/constants.ts +0 -343
  109. package/src/hooks/useCalc.ts +0 -181
  110. package/src/hooks/useFileUpload.ts +0 -129
  111. package/src/hooks/useSupabaseSubscription/config.ts +0 -7
  112. package/src/hooks/useSupabaseSubscription/types.ts +0 -18
  113. package/src/hooks/useSupabaseSubscription/useSupabaseSubscription.ts +0 -53
  114. package/src/utils/apiClientFactory.ts +0 -194
  115. package/src/utils/converters.ts +0 -1
  116. package/src/utils/encrypt.ts +0 -96
  117. package/src/utils/fileStorage.ts +0 -353
  118. package/src/utils/storage.ts +0 -29
  119. package/src/utils/supabase.ts +0 -16
  120. package/src/utils/tokensFactory.ts +0 -59
  121. package/tsconfig.json +0 -15
  122. package/types.d.ts +0 -11
  123. /package/{src/hooks/index.ts → dist/hooks/index.d.ts} +0 -0
  124. /package/{src/hooks/useSupabaseSubscription/index.ts → dist/hooks/useSupabaseSubscription/index.d.ts} +0 -0
  125. /package/{src/index.ts → dist/index.js} +0 -0
@@ -1,353 +0,0 @@
1
- import { supabaseClient } from './supabase';
2
-
3
- /**
4
- * Типы для работы с файловым хранилищем
5
- */
6
- export interface UploadFileOptions {
7
- file: File | Blob;
8
- fileName: string;
9
- bucket: string;
10
- folder?: string; // Папка внутри бакета (например, 'documents', 'images/avatars'). Создается автоматически, если не существует
11
- contentType?: string;
12
- cacheControl?: string;
13
- upsert?: boolean;
14
- authToken?: string; // JWT token для авторизации
15
- }
16
-
17
- export interface UploadFileResult {
18
- success: boolean;
19
- publicUrl?: string;
20
- signedUrl?: string;
21
- path?: string;
22
- error?: string;
23
- }
24
-
25
- export interface GetFileUrlOptions {
26
- path: string;
27
- bucket: string;
28
- expiresIn?: number; // в секундах
29
- authToken?: string; // JWT token для авторизации
30
- }
31
-
32
- /**
33
- * Названия бакетов по умолчанию
34
- */
35
- export const ORDER_DOCS_BUCKET = 'order_docs';
36
-
37
- /**
38
- * Загружает файл в Supabase Storage
39
- * Файл сохраняется по пути: {folder}/{fileName} или {fileName}
40
- *
41
- * Папки создаются автоматически при загрузке файла, если их не существует.
42
- * Можно указывать вложенные папки через слэш: 'images/avatars/2024'
43
- *
44
- * @param options - параметры загрузки файла
45
- * @param options.folder - опциональная папка внутри бакета (например, 'documents', 'images/avatars')
46
- * @returns результат загрузки с ссылкой на файл
47
- */
48
- export const uploadFile = async (options: UploadFileOptions): Promise<UploadFileResult> => {
49
- const { file, fileName, bucket, folder, contentType, cacheControl = '3600', upsert = false, authToken } = options;
50
-
51
- if (!supabaseClient) {
52
- return {
53
- success: false,
54
- error: 'Supabase client is not initialized',
55
- };
56
- }
57
-
58
- try {
59
- // Если передан authToken, создаем клиент с токеном
60
- let client = supabaseClient;
61
- if (authToken) {
62
- const { createClient } = await import('@supabase/supabase-js');
63
- client = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_PUBLIC_KEY!, {
64
- global: {
65
- headers: {
66
- Authorization: `Bearer ${authToken}`,
67
- },
68
- },
69
- });
70
- }
71
-
72
- // Формируем путь к файлу: folder/fileName или fileName
73
- const filePath = folder ? `${folder}/${fileName}` : fileName;
74
-
75
- const { data, error } = await client.storage.from(bucket).upload(filePath, file, {
76
- contentType,
77
- cacheControl,
78
- upsert,
79
- });
80
-
81
- if (error) {
82
- console.error('Error uploading file:', error);
83
- return {
84
- success: false,
85
- error: error.message,
86
- };
87
- }
88
-
89
- // Получаем публичный URL
90
- const { data: urlData } = client.storage.from(bucket).getPublicUrl(data.path);
91
-
92
- // Получаем подписанный URL (действителен 1 час по умолчанию)
93
- const { data: signedUrlData, error: signedUrlError } = await client.storage
94
- .from(bucket)
95
- .createSignedUrl(data.path, 3600);
96
-
97
- return {
98
- success: true,
99
- publicUrl: urlData.publicUrl,
100
- signedUrl: signedUrlError ? undefined : signedUrlData.signedUrl,
101
- path: data.path,
102
- };
103
- } catch (error) {
104
- console.error('Unexpected error uploading file:', error);
105
- return {
106
- success: false,
107
- error: error instanceof Error ? error.message : 'Unknown error',
108
- };
109
- }
110
- };
111
-
112
- /**
113
- * Получает подписанный URL для доступа к файлу
114
- *
115
- * @param options - параметры получения URL
116
- * @returns подписанный URL или null при ошибке
117
- */
118
- export const getSignedUrl = async (options: GetFileUrlOptions): Promise<string | null> => {
119
- const { path, bucket, expiresIn = 3600, authToken } = options;
120
-
121
- if (!supabaseClient) {
122
- console.error('Supabase client is not initialized');
123
- return null;
124
- }
125
-
126
- try {
127
- // Если передан authToken, создаем клиент с токеном
128
- let client = supabaseClient;
129
- if (authToken) {
130
- const { createClient } = await import('@supabase/supabase-js');
131
- client = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_PUBLIC_KEY!, {
132
- global: {
133
- headers: {
134
- Authorization: `Bearer ${authToken}`,
135
- },
136
- },
137
- });
138
- }
139
-
140
- const { data, error } = await client.storage.from(bucket).createSignedUrl(path, expiresIn);
141
-
142
- if (error) {
143
- console.error('Error creating signed URL:', error);
144
- return null;
145
- }
146
-
147
- return data.signedUrl;
148
- } catch (error) {
149
- console.error('Unexpected error creating signed URL:', error);
150
- return null;
151
- }
152
- };
153
-
154
- /**
155
- * Получает публичный URL для файла
156
- *
157
- * Для ПРИВАТНЫХ бакетов:
158
- * - URL постоянный (не истекает)
159
- * - Требует Authorization header с service role key для доступа
160
- * - Используется на backend для суперадмина
161
- *
162
- * Для ПУБЛИЧНЫХ бакетов:
163
- * - URL доступен всем без аутентификации
164
- *
165
- * @example Backend usage for private buckets:
166
- * ```typescript
167
- * const url = getPublicUrl(filePath, bucket);
168
- *
169
- * // Access with service role key:
170
- * fetch(url, {
171
- * headers: {
172
- * 'Authorization': `Bearer ${SUPABASE_SERVICE_ROLE_KEY}`
173
- * }
174
- * })
175
- * ```
176
- *
177
- * @param path - путь к файлу
178
- * @param bucket - название бакета
179
- * @returns постоянный URL
180
- */
181
- export const getPublicUrl = (path: string, bucket: string): string | null => {
182
- if (!supabaseClient) {
183
- console.error('Supabase client is not initialized');
184
- return null;
185
- }
186
-
187
- const { data } = supabaseClient.storage.from(bucket).getPublicUrl(path);
188
- return data.publicUrl;
189
- };
190
-
191
- /**
192
- * Удаляет файл из хранилища
193
- *
194
- * @param path - путь к файлу
195
- * @param bucket - название бакета
196
- * @param authToken - JWT token для авторизации
197
- * @returns true при успешном удалении
198
- */
199
- export const deleteFile = async (path: string, bucket: string, authToken?: string): Promise<boolean> => {
200
- if (!supabaseClient) {
201
- console.error('Supabase client is not initialized');
202
- return false;
203
- }
204
-
205
- try {
206
- let client = supabaseClient;
207
- if (authToken) {
208
- const { createClient } = await import('@supabase/supabase-js');
209
- client = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_PUBLIC_KEY!, {
210
- global: {
211
- headers: {
212
- Authorization: `Bearer ${authToken}`,
213
- },
214
- },
215
- });
216
- }
217
-
218
- const { error } = await client.storage.from(bucket).remove([path]);
219
-
220
- if (error) {
221
- console.error('Error deleting file:', error);
222
- return false;
223
- }
224
-
225
- return true;
226
- } catch (error) {
227
- console.error('Unexpected error deleting file:', error);
228
- return false;
229
- }
230
- };
231
-
232
- /**
233
- * Удаляет несколько файлов из хранилища
234
- *
235
- * @param paths - массив путей к файлам
236
- * @param bucket - название бакета
237
- * @param authToken - JWT token для авторизации
238
- * @returns true при успешном удалении всех файлов
239
- */
240
- export const deleteFiles = async (paths: string[], bucket: string, authToken?: string): Promise<boolean> => {
241
- if (!supabaseClient) {
242
- console.error('Supabase client is not initialized');
243
- return false;
244
- }
245
-
246
- try {
247
- let client = supabaseClient;
248
- if (authToken) {
249
- const { createClient } = await import('@supabase/supabase-js');
250
- client = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_PUBLIC_KEY!, {
251
- global: {
252
- headers: {
253
- Authorization: `Bearer ${authToken}`,
254
- },
255
- },
256
- });
257
- }
258
-
259
- const { error } = await client.storage.from(bucket).remove(paths);
260
-
261
- if (error) {
262
- console.error('Error deleting files:', error);
263
- return false;
264
- }
265
-
266
- return true;
267
- } catch (error) {
268
- console.error('Unexpected error deleting files:', error);
269
- return false;
270
- }
271
- };
272
-
273
- /**
274
- * Получает список файлов пользователя
275
- *
276
- * @param userId - ID пользователя
277
- * @param bucket - название бакета
278
- * @param authToken - JWT token для авторизации
279
- * @returns список файлов или пустой массив при ошибке
280
- */
281
- export const listUserFiles = async (userId: string, bucket: string, authToken?: string) => {
282
- if (!supabaseClient) {
283
- console.error('Supabase client is not initialized');
284
- return [];
285
- }
286
-
287
- try {
288
- let client = supabaseClient;
289
- if (authToken) {
290
- const { createClient } = await import('@supabase/supabase-js');
291
- client = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_PUBLIC_KEY!, {
292
- global: {
293
- headers: {
294
- Authorization: `Bearer ${authToken}`,
295
- },
296
- },
297
- });
298
- }
299
-
300
- const { data, error } = await client.storage.from(bucket).list(userId);
301
-
302
- if (error) {
303
- console.error('Error listing files:', error);
304
- return [];
305
- }
306
-
307
- return data || [];
308
- } catch (error) {
309
- console.error('Unexpected error listing files:', error);
310
- return [];
311
- }
312
- };
313
-
314
- /**
315
- * Скачивает файл из хранилища
316
- *
317
- * @param path - путь к файлу
318
- * @param bucket - название бакета
319
- * @param authToken - JWT token для авторизации
320
- * @returns Blob файла или null при ошибке
321
- */
322
- export const downloadFile = async (path: string, bucket: string, authToken?: string): Promise<Blob | null> => {
323
- if (!supabaseClient) {
324
- console.error('Supabase client is not initialized');
325
- return null;
326
- }
327
-
328
- try {
329
- let client = supabaseClient;
330
- if (authToken) {
331
- const { createClient } = await import('@supabase/supabase-js');
332
- client = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_PUBLIC_KEY!, {
333
- global: {
334
- headers: {
335
- Authorization: `Bearer ${authToken}`,
336
- },
337
- },
338
- });
339
- }
340
-
341
- const { data, error } = await client.storage.from(bucket).download(path);
342
-
343
- if (error) {
344
- console.error('Error downloading file:', error);
345
- return null;
346
- }
347
-
348
- return data;
349
- } catch (error) {
350
- console.error('Unexpected error downloading file:', error);
351
- return null;
352
- }
353
- };
@@ -1,29 +0,0 @@
1
- export const getFromLocalStorage = (key: string) => {
2
- if (typeof window === 'undefined') {
3
- // eslint-disable-next-line no-console
4
- // console.error('call getFromLocalStorage in server side');
5
- return null;
6
- }
7
-
8
- return localStorage.getItem(key);
9
- };
10
-
11
- export const setToLocalStorage = (key: string, value: string) => {
12
- if (typeof window === 'undefined') {
13
- // eslint-disable-next-line no-console
14
- console.error('call setToLocalStorage in server side');
15
- return;
16
- }
17
-
18
- localStorage.setItem(key, value);
19
- };
20
-
21
- export const deleteFromLocalStorage = (key: string) => {
22
- if (typeof window === 'undefined') {
23
- // eslint-disable-next-line no-console
24
- console.error('call deleteFromLocalStorage in server side');
25
- return;
26
- }
27
-
28
- localStorage.removeItem(key);
29
- };
@@ -1,16 +0,0 @@
1
- import { createClient } from '@supabase/supabase-js';
2
-
3
- // Создаем клиент только если есть необходимые environment переменные
4
- const createSupabaseClient = () => {
5
- const supabaseUrl = process.env.SUPABASE_URL;
6
- const supabasePublicKey = process.env.SUPABASE_PUBLIC_KEY;
7
-
8
- if (!supabaseUrl || !supabasePublicKey) {
9
- console.warn('Supabase environment variables are missing. Client will not be created.');
10
- return null;
11
- }
12
-
13
- return createClient(supabaseUrl, supabasePublicKey);
14
- };
15
-
16
- export const supabaseClient = createSupabaseClient();
@@ -1,59 +0,0 @@
1
- import { initData, isTMA } from '@telegram-apps/sdk-react';
2
-
3
- import { deleteFromLocalStorage, getFromLocalStorage, setToLocalStorage } from './storage';
4
-
5
- import { auth } from '../api/auth';
6
-
7
- type ITokens = {
8
- access_token: string;
9
- refresh_token?: string | null;
10
- };
11
-
12
- export function setTokens({ access_token, refresh_token }: ITokens) {
13
- access_token && setToLocalStorage('access_token', access_token);
14
- refresh_token && setToLocalStorage('refresh_token', refresh_token);
15
- }
16
-
17
- export function deleteTokens() {
18
- deleteFromLocalStorage('access_token');
19
- deleteFromLocalStorage('refresh_token');
20
- }
21
-
22
- export async function refreshTokens(): Promise<ITokens> {
23
- const refresh_token = getFromLocalStorage('refresh_token');
24
-
25
- if (refresh_token) {
26
- const refreshResponse = await auth.refresh.refresh_token({ refresh_token });
27
-
28
- setTokens(refreshResponse);
29
- return refreshResponse;
30
- }
31
-
32
- if (isTMA()) {
33
- initData.restore();
34
- const tg_id = initData.user()?.id;
35
- const hash = initData.hash();
36
- const init_data_raw = initData.raw();
37
- if (!tg_id || !hash || !init_data_raw) {
38
- return Promise.reject(new Error('No TG ID, hash or init data raw found in tokensFactory'));
39
- }
40
-
41
- const telegramSignInResponse = await auth.signin.telegram({
42
- tg_id: tg_id.toString(),
43
- hash,
44
- init_data_raw,
45
- });
46
-
47
- setTokens(telegramSignInResponse);
48
- return telegramSignInResponse;
49
- }
50
-
51
- return Promise.reject(new Error('No refresh token found'));
52
- }
53
-
54
- export function getTokens() {
55
- return {
56
- access_token: getFromLocalStorage('access_token'),
57
- refresh_token: getFromLocalStorage('refresh_token'),
58
- };
59
- }
package/tsconfig.json DELETED
@@ -1,15 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ES2022",
5
- "declaration": true,
6
- "outDir": "./dist",
7
- "strict": true,
8
- "esModuleInterop": true,
9
- "skipLibCheck": true,
10
- "forceConsistentCasingInFileNames": true,
11
- "moduleResolution": "bundler"
12
- },
13
- "include": ["src", "types.d.ts"],
14
- "exclude": ["node_modules", "dist", "**/__tests__/*"]
15
- }
package/types.d.ts DELETED
@@ -1,11 +0,0 @@
1
- import 'axios';
2
-
3
- declare module 'axios' {
4
- export interface AxiosRequestConfig {
5
- context?: {
6
- isRetryRequest?: boolean;
7
- bypassUnauthorizedHandler?: boolean;
8
- appEnvironment?: AppEnviroment;
9
- };
10
- }
11
- }
File without changes
File without changes