webs-sdk 0.2.0 → 0.2.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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # WebsSDK
2
2
 
3
- SDK unificado para aplicaciones web que incluye funcionalidades migradas del SDK de aplicaciones móviles, adaptadas específicamente para el entorno web.
3
+ SDK completo para aplicaciones web que proporciona funcionalidades esenciales para el desarrollo de aplicaciones modernas.
4
4
 
5
5
  ## Instalación
6
6
 
@@ -29,7 +29,7 @@ const preferences = await WebsSDK.Storage.getData('user_preferences');
29
29
  ## Librerías Disponibles
30
30
 
31
31
  ### 🌐 Networking
32
- Manejo de peticiones HTTP con funcionalidades avanzadas del SDK de apps.
32
+ Manejo avanzado de peticiones HTTP y comunicación con APIs.
33
33
 
34
34
  ```javascript
35
35
  // Petición básica
@@ -43,17 +43,21 @@ await WebsSDK.Networking.sendEvent('action', 'button_click', { button_id: 'submi
43
43
 
44
44
  // Verificar conectividad
45
45
  const isOnline = await WebsSDK.Networking.checkConnection();
46
+
47
+ // Gestión de suscripciones
48
+ const subscription = await WebsSDK.Networking.createSubscription(subscriptionData);
49
+ const isActive = await WebsSDK.Networking.checkSubscription();
46
50
  ```
47
51
 
48
52
  ### 💾 Storage
49
- Almacenamiento local con compatibilidad para funciones del SDK de apps.
53
+ Almacenamiento local avanzado con soporte para datos complejos.
50
54
 
51
55
  ```javascript
52
56
  // Métodos básicos
53
57
  WebsSDK.Storage.set('key', 'value');
54
58
  const value = WebsSDK.Storage.get('key');
55
59
 
56
- // Métodos compatibles con apps SDK
60
+ // Almacenamiento de datos complejos
57
61
  await WebsSDK.Storage.storeData('complex_data', { user: 'john', age: 30 });
58
62
  const data = await WebsSDK.Storage.getData('complex_data');
59
63
 
@@ -63,10 +67,16 @@ const creations = await WebsSDK.Storage.getCreations();
63
67
 
64
68
  // Compresión de imágenes
65
69
  const compressedImage = await WebsSDK.Storage.compressImage(imageUri, 2); // 2MB max
70
+
71
+ // Descarga de archivos
72
+ await WebsSDK.Storage.handleDownloadImage(base64, 'imagen');
73
+
74
+ // Compartir archivos
75
+ await WebsSDK.Storage.handleShareFile(fileUrl);
66
76
  ```
67
77
 
68
78
  ### 👤 Session
69
- Gestión de sesiones de usuario adaptada para web.
79
+ Gestión completa de sesiones de usuario y datos del dispositivo.
70
80
 
71
81
  ```javascript
72
82
  // Inicializar sesión
@@ -75,40 +85,68 @@ await WebsSDK.Session.init();
75
85
  // Obtener datos de sesión
76
86
  const sessionData = WebsSDK.Session.getSessionData();
77
87
  const userID = WebsSDK.Session.getUserID();
88
+ const sessionID = WebsSDK.Session.getSessionID();
78
89
 
79
90
  // Gestión de suscripciones
80
91
  await WebsSDK.Session.setIsSubscribed(true);
81
92
  const isSubscribed = WebsSDK.Session.getIsSubscribed();
82
93
 
83
- // Información del dispositivo
94
+ // Información del dispositivo y usuario
84
95
  const language = WebsSDK.Session.getDeviceLanguage();
85
96
  const languageRegion = WebsSDK.Session.getDeviceLanguageAndRegion();
97
+ const isFirstOpen = WebsSDK.Session.getIsFirstOpen();
98
+
99
+ // Gestión de usuarios
100
+ WebsSDK.Session.setUserID('user_123');
101
+ await WebsSDK.Session.setIsDevUser(true);
86
102
  ```
87
103
 
88
104
  ### 🔧 Utils
89
- Utilidades generales con funciones adicionales del SDK de apps.
105
+ Amplia colección de utilidades para desarrollo web.
90
106
 
91
107
  ```javascript
92
- // Utilidades originales
108
+ // Utilidades de fecha y ID
93
109
  const id = WebsSDK.Utils.generateId();
94
110
  const formattedDate = WebsSDK.Utils.formatDate(new Date(), 'DD/MM/YYYY');
95
111
 
96
- // Funciones del apps SDK
97
- const isBase64 = WebsSDK.Utils.isBase64(string);
98
- const isBase64Image = WebsSDK.Utils.isBase64Image(dataUri);
112
+ // Validaciones
113
+ const isValidEmail = WebsSDK.Utils.isValidEmail('user@example.com');
114
+ const isValidUrl = WebsSDK.Utils.isValidUrl('https://example.com');
99
115
 
100
- // Utilidades específicas para web
116
+ // Manipulación de strings
117
+ const truncated = WebsSDK.Utils.truncateText('Long text...', 10);
118
+ const capitalized = WebsSDK.Utils.capitalizeFirst('hello world');
119
+
120
+ // Funciones de tiempo
121
+ await WebsSDK.Utils.sleep(1000); // Esperar 1 segundo
122
+ const randomNum = WebsSDK.Utils.getRandomInt(1, 100);
123
+
124
+ // Manipulación de arrays y objetos
125
+ const chunks = WebsSDK.Utils.arrayChunk([1,2,3,4,5], 2);
126
+ const unique = WebsSDK.Utils.arrayUnique([1,1,2,3,3]);
127
+ const picked = WebsSDK.Utils.objectPick(obj, ['key1', 'key2']);
128
+
129
+ // Funciones específicas para web
101
130
  const deviceInfo = WebsSDK.Utils.getDeviceInfo();
102
131
  const isMobile = WebsSDK.Utils.isMobile();
132
+ const isTablet = WebsSDK.Utils.isTablet();
133
+ const isDesktop = WebsSDK.Utils.isDesktop();
103
134
  const browserInfo = WebsSDK.Utils.getBrowserInfo();
104
135
 
105
- // Manejo de archivos
136
+ // Manejo de archivos y datos
137
+ const isBase64 = WebsSDK.Utils.isBase64(string);
138
+ const isBase64Image = WebsSDK.Utils.isBase64Image(dataUri);
106
139
  WebsSDK.Utils.downloadFile(data, 'filename.txt', 'text/plain');
107
140
  await WebsSDK.Utils.copyToClipboard('texto a copiar');
141
+
142
+ // Utilidades de formato
143
+ const formattedBytes = WebsSDK.Utils.formatBytes(1024); // "1 KB"
144
+ const queryParams = WebsSDK.Utils.parseQueryString('?a=1&b=2');
145
+ const queryString = WebsSDK.Utils.buildQueryString({a: 1, b: 2});
108
146
  ```
109
147
 
110
148
  ### 📊 MixPanel
111
- Análisis y tracking de eventos (adaptado para web).
149
+ Sistema completo de análisis y tracking de eventos.
112
150
 
113
151
  ```javascript
114
152
  // Inicializar MixPanel
@@ -121,22 +159,29 @@ await WebsSDK.MixPanel.trackEventIfExist('special_event', { data: 'value' });
121
159
  // Gestión de usuarios
122
160
  await WebsSDK.MixPanel.identifyUser('user_123');
123
161
  await WebsSDK.MixPanel.setUserProperties({ plan: 'premium' });
162
+ await WebsSDK.MixPanel.resetUserID();
124
163
 
125
164
  // Super propiedades
126
165
  await WebsSDK.MixPanel.superProperties({ app_version: '1.0.0' });
166
+ await WebsSDK.MixPanel.superPropertiesAppend({ session_id: 'abc123' });
167
+
168
+ // Control de tracking
169
+ WebsSDK.MixPanel.disableTracking();
170
+ WebsSDK.MixPanel.enableTracking();
171
+ const isInitialized = WebsSDK.MixPanel.isMixpanelInitialized();
127
172
  ```
128
173
 
129
174
  ### 🔐 AuthManager
130
175
  Gestión de autenticación (en desarrollo).
131
176
 
132
177
  ### 🌍 I18nManager
133
- Internacionalización (en desarrollo).
178
+ Sistema de internacionalización (en desarrollo).
134
179
 
135
180
  ### 🚀 Andromeda
136
181
  Funcionalidades avanzadas (en desarrollo).
137
182
 
138
183
  ### 📝 ContentManager
139
- Gestión de contenido.
184
+ Gestión y obtención de contenido dinámico.
140
185
 
141
186
  ```javascript
142
187
  const content = await WebsSDK.ContentManager.getContentByPreset('homepage', { lang: 'es' });
@@ -144,68 +189,102 @@ const content = await WebsSDK.ContentManager.getContentByPreset('homepage', { la
144
189
 
145
190
  ## Configuración
146
191
 
147
- El SDK incluye configuración predeterminada que puede ser personalizada:
192
+ El SDK incluye configuración completa que puede ser personalizada según tus necesidades:
148
193
 
149
194
  ```javascript
150
195
  // Acceder a la configuración
151
196
  const config = WebsSDK.Config;
152
197
 
153
- // Configurar endpoints personalizados
198
+ // Configurar endpoints de API
154
199
  config.endpoints.CONFIG = 'https://mi-api.com/config';
200
+ config.endpoints.USER_CREATE_ID = 'https://mi-api.com/user/create';
155
201
 
156
202
  // Configurar MixPanel
157
203
  config.MIXPANEL.TOKEN = 'tu_token_mixpanel';
158
204
 
159
- // Modo debug
205
+ // Configuración de desarrollo
160
206
  config.DEBUG_MODE = true;
161
- ```
162
-
163
- ## Librerías NO Migradas (Específicas de Apps Nativas)
164
-
165
- Las siguientes librerías del SDK de apps NO fueron migradas por ser específicas de aplicaciones nativas:
166
207
 
167
- - **TrackingTransparency**: Permisos de tracking de iOS/Android
168
- - **Voice**: Reconocimiento y síntesis de voz nativa
169
- - **Rating**: Valoraciones en App Store/Google Play
170
- - **Notifications**: Push notifications nativas
171
- - **QuickActions**: Acciones rápidas del sistema
172
- - **AdJust**: Tracking de atribución móvil
173
- - **Adapty**: Suscripciones in-app nativas
174
- - **PayWallLogic**: Lógica de paywall dependiente de Adapty
208
+ // Configuración de eventos especiales
209
+ config.SPECIAL_EVENTS = ['first_open', 'subscription_purchased'];
175
210
 
176
- ## Funcionalidades Web Equivalentes
211
+ // Configuración de compresión de imágenes
212
+ config.IMAGE_COMPRESSION.COMPRESSION = 0.8;
213
+ config.IMAGE_COMPRESSION.WIDTH = 1024;
214
+ config.IMAGE_COMPRESSION.ACTIVE = true;
215
+ ```
177
216
 
178
- Para algunas funcionalidades no migradas, el SDK web ofrece alternativas:
217
+ ## Funcionalidades Avanzadas
179
218
 
180
- ### Compartir Archivos
219
+ ### Gestión de Eventos
181
220
  ```javascript
182
- // En lugar de QuickActions, usa Web Share API
183
- await WebsSDK.Storage.handleShareFile(fileUrl);
221
+ // Configurar y enviar eventos personalizados
222
+ await WebsSDK.Networking.sendEvent('user_action', 'button_click', {
223
+ button_id: 'cta_primary',
224
+ page: 'landing',
225
+ timestamp: Date.now()
226
+ });
227
+
228
+ // Eventos pendientes (para cuando no hay conexión)
229
+ WebsSDK.Networking.addPendingEvent({
230
+ eventType: 'action',
231
+ eventKeyword: 'offline_action',
232
+ eventData: { action: 'save_draft' }
233
+ });
234
+
235
+ // Enviar eventos pendientes cuando se restaure la conexión
236
+ await WebsSDK.Networking.sendPendingEvents();
184
237
  ```
185
238
 
186
- ### Información del Dispositivo
239
+ ### Gestión de Archivos e Imágenes
187
240
  ```javascript
188
- // En lugar de APIs nativas, usa APIs web
189
- const deviceInfo = WebsSDK.Utils.getDeviceInfo();
190
- const isMobile = WebsSDK.Utils.isMobile();
241
+ // Comprimir y guardar imágenes
242
+ const compressedImage = await WebsSDK.Storage.compressImage(imageFile, 2);
243
+ await WebsSDK.Storage.handleDownloadImageToCreations(compressedImage, 'photo_1', {
244
+ timestamp: Date.now(),
245
+ location: 'homepage'
246
+ });
247
+
248
+ // Obtener todas las creaciones guardadas
249
+ const allCreations = await WebsSDK.Storage.getCreations();
250
+
251
+ // Eliminar creaciones específicas
252
+ await WebsSDK.Storage.deleteCreation('photo_1');
191
253
  ```
192
254
 
193
- ### Descarga de Archivos
255
+ ### Información del Dispositivo
194
256
  ```javascript
195
- // Descarga directa en el navegador
196
- WebsSDK.Utils.downloadFile(data, 'archivo.txt');
197
- await WebsSDK.Storage.handleDownloadImage(base64, 'imagen');
257
+ // Obtener información completa del dispositivo
258
+ const deviceInfo = WebsSDK.Utils.getDeviceInfo();
259
+ console.log(deviceInfo);
260
+ // {
261
+ // userAgent: "Mozilla/5.0...",
262
+ // platform: "MacIntel",
263
+ // language: "es-ES",
264
+ // screenWidth: 1920,
265
+ // screenHeight: 1080,
266
+ // timezone: "Europe/Madrid"
267
+ // }
268
+
269
+ // Detectar tipo de dispositivo
270
+ if (WebsSDK.Utils.isMobile()) {
271
+ // Lógica específica para móviles
272
+ } else if (WebsSDK.Utils.isTablet()) {
273
+ // Lógica específica para tablets
274
+ } else {
275
+ // Lógica para desktop
276
+ }
198
277
  ```
199
278
 
200
279
  ## Estructura del Proyecto
201
280
 
202
281
  ```
203
282
  src/
204
- ├── config.ts # Configuración del SDK
283
+ ├── config.ts # Configuración central del SDK
205
284
  ├── index.ts # Punto de entrada principal
206
285
  ├── libraries/
207
286
  │ ├── networking.ts # Peticiones HTTP y comunicación
208
- │ ├── storage.ts # Almacenamiento local
287
+ │ ├── storage.ts # Almacenamiento local avanzado
209
288
  │ ├── session.ts # Gestión de sesiones
210
289
  │ ├── utils.ts # Utilidades generales
211
290
  │ ├── mixpanel.ts # Analytics y tracking
@@ -224,23 +303,28 @@ src/
224
303
  # Instalar dependencias
225
304
  npm install
226
305
 
227
- # Compilar en modo desarrollo
306
+ # Compilar en modo desarrollo con watch
228
307
  npm run build:watch
229
308
 
230
309
  # Compilar para producción
231
310
  npm run build
232
311
 
233
- # Linting
312
+ # Ejecutar linting
234
313
  npm run lint
314
+
315
+ # Ejecutar servidor de desarrollo
316
+ npm run dev
235
317
  ```
236
318
 
237
- ## Publicación en NPM
319
+ ## Publicación
238
320
 
239
321
  El proyecto está configurado para ser publicado como módulo npm:
240
322
 
241
323
  ```bash
242
- # Compilar y publicar
324
+ # Compilar y preparar para publicación
243
325
  npm run prepublishOnly
326
+
327
+ # Publicar en npm
244
328
  npm publish
245
329
  ```
246
330
 
@@ -249,16 +333,65 @@ npm publish
249
333
  - **Navegadores**: Chrome 60+, Firefox 55+, Safari 12+, Edge 79+
250
334
  - **Node.js**: 16+ (para desarrollo)
251
335
  - **TypeScript**: 5+
336
+ - **Frameworks**: Compatible con React, Vue, Angular, Vanilla JS
252
337
 
253
- ## Migración desde Apps SDK
338
+ ## Ejemplos de Uso
254
339
 
255
- Si vienes del SDK de aplicaciones móviles, las principales diferencias son:
340
+ ### Aplicación Básica
341
+ ```javascript
342
+ import WebsSDK from 'webs-sdk';
256
343
 
257
- 1. **Inicialización**: Usa `WebsSDK.Session.init()` en lugar de inicialización nativa
258
- 2. **Storage**: Los métodos `storeData`/`getData` funcionan igual pero usan localStorage
259
- 3. **Networking**: Misma API pero adaptada para fetch web
260
- 4. **Session**: Información del dispositivo adaptada para navegadores web
261
- 5. **MixPanel**: Funcionalidad similar pero usando mixpanel-browser
344
+ async function initApp() {
345
+ // Inicializar el SDK
346
+ await WebsSDK.Session.init();
347
+
348
+ // Configurar tracking
349
+ await WebsSDK.MixPanel.initialize(process.env.MIXPANEL_TOKEN);
350
+
351
+ // Obtener configuración del servidor
352
+ const config = await WebsSDK.Networking.request('/api/config');
353
+
354
+ // Guardar preferencias del usuario
355
+ await WebsSDK.Storage.storeData('app_config', config);
356
+
357
+ console.log('App inicializada correctamente');
358
+ }
359
+
360
+ initApp();
361
+ ```
362
+
363
+ ### E-commerce
364
+ ```javascript
365
+ // Tracking de eventos de e-commerce
366
+ await WebsSDK.MixPanel.trackEvent('product_viewed', {
367
+ product_id: 'ABC123',
368
+ category: 'electronics',
369
+ price: 299.99
370
+ });
371
+
372
+ // Gestión de carrito
373
+ await WebsSDK.Storage.storeData('cart_items', cartItems);
374
+ const savedCart = await WebsSDK.Storage.getData('cart_items');
375
+ ```
376
+
377
+ ### Aplicación con Suscripciones
378
+ ```javascript
379
+ // Verificar estado de suscripción
380
+ const isSubscribed = await WebsSDK.Session.getIsSubscribed();
381
+
382
+ if (!isSubscribed) {
383
+ // Mostrar paywall
384
+ await WebsSDK.MixPanel.trackEvent('paywall_shown', {
385
+ source: 'premium_feature'
386
+ });
387
+ }
388
+
389
+ // Crear nueva suscripción
390
+ const subscription = await WebsSDK.Networking.createSubscription({
391
+ plan: 'premium_monthly',
392
+ user_id: WebsSDK.Session.getUserID()
393
+ });
394
+ ```
262
395
 
263
396
  ## Licencia
264
397
 
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ import AndromedaClass from './libraries/andromeda';
7
7
  import ContentManagerClass from './libraries/content';
8
8
  import SessionClass from './libraries/session';
9
9
  import MixPanelClass from './libraries/mixpanel';
10
+ import AudioClass from './libraries/audio';
10
11
  declare const WebsSDK: {
11
12
  Networking: NetworkingClass;
12
13
  AuthManager: AuthManagerClass;
@@ -17,6 +18,7 @@ declare const WebsSDK: {
17
18
  ContentManager: ContentManagerClass;
18
19
  Session: SessionClass;
19
20
  MixPanel: MixPanelClass;
21
+ Audio: AudioClass;
20
22
  Config: import("./config").Config;
21
23
  };
22
24
  export default WebsSDK;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,gBAAgB,MAAM,kBAAkB,CAAC;AAChD,OAAO,gBAAgB,MAAM,kBAAkB,CAAC;AAChD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,mBAAmB,MAAM,qBAAqB,CAAC;AACtD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AAGjD,QAAA,MAAM,OAAO;;;;;;;;;;;CAWZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,wBAAwB,CAAC;AACrD,OAAO,gBAAgB,MAAM,kBAAkB,CAAC;AAChD,OAAO,gBAAgB,MAAM,kBAAkB,CAAC;AAChD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,mBAAmB,MAAM,qBAAqB,CAAC;AACtD,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,aAAa,MAAM,sBAAsB,CAAC;AACjD,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAG3C,QAAA,MAAM,OAAO;;;;;;;;;;;;CAYZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ const andromeda_1 = __importDefault(require("./libraries/andromeda"));
12
12
  const content_1 = __importDefault(require("./libraries/content"));
13
13
  const session_1 = __importDefault(require("./libraries/session"));
14
14
  const mixpanel_1 = __importDefault(require("./libraries/mixpanel"));
15
+ const audio_1 = __importDefault(require("./libraries/audio"));
15
16
  const config_1 = __importDefault(require("./config"));
16
17
  const WebsSDK = {
17
18
  Networking: new networking_1.default(),
@@ -23,6 +24,7 @@ const WebsSDK = {
23
24
  ContentManager: new content_1.default(),
24
25
  Session: new session_1.default(),
25
26
  MixPanel: new mixpanel_1.default(),
27
+ Audio: new audio_1.default(),
26
28
  Config: config_1.default
27
29
  };
28
30
  exports.default = WebsSDK;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,wEAAqD;AACrD,4DAAgD;AAChD,4DAAgD;AAChD,kEAA+C;AAC/C,8DAA2C;AAC3C,sEAAmD;AACnD,kEAAsD;AACtD,kEAA+C;AAC/C,oEAAiD;AACjD,sDAA8B;AAE9B,MAAM,OAAO,GAAG;IACZ,UAAU,EAAE,IAAI,oBAAe,EAAE;IACjC,WAAW,EAAE,IAAI,cAAgB,EAAE;IACnC,WAAW,EAAE,IAAI,cAAgB,EAAE;IACnC,OAAO,EAAE,IAAI,iBAAY,EAAE;IAC3B,KAAK,EAAE,IAAI,eAAU,EAAE;IACvB,SAAS,EAAE,IAAI,mBAAc,EAAE;IAC/B,cAAc,EAAE,IAAI,iBAAmB,EAAE;IACzC,OAAO,EAAE,IAAI,iBAAY,EAAE;IAC3B,QAAQ,EAAE,IAAI,kBAAa,EAAE;IAC7B,MAAM,EAAE,gBAAM;CACjB,CAAC;AAEF,kBAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,wEAAqD;AACrD,4DAAgD;AAChD,4DAAgD;AAChD,kEAA+C;AAC/C,8DAA2C;AAC3C,sEAAmD;AACnD,kEAAsD;AACtD,kEAA+C;AAC/C,oEAAiD;AACjD,8DAA2C;AAC3C,sDAA8B;AAE9B,MAAM,OAAO,GAAG;IACZ,UAAU,EAAE,IAAI,oBAAe,EAAE;IACjC,WAAW,EAAE,IAAI,cAAgB,EAAE;IACnC,WAAW,EAAE,IAAI,cAAgB,EAAE;IACnC,OAAO,EAAE,IAAI,iBAAY,EAAE;IAC3B,KAAK,EAAE,IAAI,eAAU,EAAE;IACvB,SAAS,EAAE,IAAI,mBAAc,EAAE;IAC/B,cAAc,EAAE,IAAI,iBAAmB,EAAE;IACzC,OAAO,EAAE,IAAI,iBAAY,EAAE;IAC3B,QAAQ,EAAE,IAAI,kBAAa,EAAE;IAC7B,KAAK,EAAE,IAAI,eAAU,EAAE;IACvB,MAAM,EAAE,gBAAM;CACjB,CAAC;AAEF,kBAAe,OAAO,CAAC"}
@@ -0,0 +1,49 @@
1
+ export interface AudioVoice {
2
+ name: string;
3
+ lang: string;
4
+ localService: boolean;
5
+ default: boolean;
6
+ voiceURI: string;
7
+ }
8
+ export interface SpeechOptions {
9
+ text: string;
10
+ voice?: string;
11
+ rate?: number;
12
+ pitch?: number;
13
+ volume?: number;
14
+ lang?: string;
15
+ }
16
+ export interface AudioConfig {
17
+ defaultRate: number;
18
+ defaultPitch: number;
19
+ defaultVolume: number;
20
+ preferredLanguages: string[];
21
+ fallbackLanguage: string;
22
+ }
23
+ export declare class Audio {
24
+ private synthesis;
25
+ private voices;
26
+ private isInitialized;
27
+ private audioConfig;
28
+ constructor();
29
+ private init;
30
+ private loadVoices;
31
+ getAvailableVoices(): AudioVoice[];
32
+ getBestVoiceForLanguage(language?: string): SpeechSynthesisVoice | null;
33
+ speak(options: SpeechOptions): Promise<void>;
34
+ speakText(text: string, language?: string): Promise<void>;
35
+ pause(): void;
36
+ resume(): void;
37
+ stop(): void;
38
+ isSpeaking(): boolean;
39
+ isPaused(): boolean;
40
+ isSupported(): boolean;
41
+ private getSystemLanguage;
42
+ setAudioConfig(config: Partial<AudioConfig>): void;
43
+ getAudioConfig(): AudioConfig;
44
+ getAudioInfo(): any;
45
+ speakSequence(texts: string[], options?: Partial<SpeechOptions>): Promise<void>;
46
+ speakWithEffect(text: string, effect: 'slow' | 'fast' | 'robot' | 'whisper'): Promise<void>;
47
+ }
48
+ export default Audio;
49
+ //# sourceMappingURL=audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/libraries/audio.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,KAAK;IACd,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,WAAW,CAAc;;YAcnB,IAAI;YAcJ,UAAU;IAwCjB,kBAAkB,IAAI,UAAU,EAAE;IAiBlC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI;IAgDjE,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC5C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/D,KAAK,IAAI,IAAI;IASb,MAAM,IAAI,IAAI;IASd,IAAI,IAAI,IAAI;IASZ,UAAU,IAAI,OAAO;IAOrB,QAAQ,IAAI,OAAO;IAOnB,WAAW,IAAI,OAAO;IAO7B,OAAO,CAAC,iBAAiB;IAUlB,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI;IAOlD,cAAc,IAAI,WAAW;IAO7B,YAAY,IAAI,GAAG;IAeb,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/E,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB3G;AAED,eAAe,KAAK,CAAC"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Audio = void 0;
4
+ class Audio {
5
+ constructor() {
6
+ this.synthesis = null;
7
+ this.voices = [];
8
+ this.isInitialized = false;
9
+ this.audioConfig = {
10
+ defaultRate: 1.0,
11
+ defaultPitch: 1.0,
12
+ defaultVolume: 1.0,
13
+ preferredLanguages: ['es-ES', 'en-US', 'fr-FR'],
14
+ fallbackLanguage: 'en-US'
15
+ };
16
+ this.init();
17
+ }
18
+ async init() {
19
+ try {
20
+ if (typeof window !== 'undefined' && 'speechSynthesis' in window) {
21
+ this.synthesis = window.speechSynthesis;
22
+ await this.loadVoices();
23
+ this.isInitialized = true;
24
+ }
25
+ else {
26
+ console.warn('Speech Synthesis API no está disponible en este navegador');
27
+ }
28
+ }
29
+ catch (error) {
30
+ console.error('Error inicializando Audio SDK:', error);
31
+ }
32
+ }
33
+ async loadVoices() {
34
+ return new Promise((resolve) => {
35
+ if (!this.synthesis) {
36
+ resolve();
37
+ return;
38
+ }
39
+ const loadVoicesCallback = () => {
40
+ this.voices = this.synthesis.getVoices();
41
+ if (this.voices.length > 0) {
42
+ resolve();
43
+ }
44
+ else {
45
+ setTimeout(() => {
46
+ this.voices = this.synthesis.getVoices();
47
+ resolve();
48
+ }, 100);
49
+ }
50
+ };
51
+ this.voices = this.synthesis.getVoices();
52
+ if (this.voices.length > 0) {
53
+ resolve();
54
+ }
55
+ else {
56
+ this.synthesis.addEventListener('voiceschanged', loadVoicesCallback, { once: true });
57
+ setTimeout(() => {
58
+ this.voices = this.synthesis.getVoices();
59
+ resolve();
60
+ }, 1000);
61
+ }
62
+ });
63
+ }
64
+ getAvailableVoices() {
65
+ if (!this.isInitialized || this.voices.length === 0) {
66
+ return [];
67
+ }
68
+ return this.voices.map(voice => ({
69
+ name: voice.name,
70
+ lang: voice.lang,
71
+ localService: voice.localService,
72
+ default: voice.default,
73
+ voiceURI: voice.voiceURI
74
+ }));
75
+ }
76
+ getBestVoiceForLanguage(language) {
77
+ if (!this.isInitialized || this.voices.length === 0) {
78
+ return null;
79
+ }
80
+ const targetLang = language || this.getSystemLanguage();
81
+ let matchingVoices = this.voices.filter(voice => voice.lang.toLowerCase() === targetLang.toLowerCase());
82
+ if (matchingVoices.length === 0) {
83
+ const baseLang = targetLang.split('-')[0];
84
+ matchingVoices = this.voices.filter(voice => voice.lang.toLowerCase().startsWith(baseLang.toLowerCase()));
85
+ }
86
+ if (matchingVoices.length === 0) {
87
+ const fallbackLang = this.audioConfig.fallbackLanguage;
88
+ matchingVoices = this.voices.filter(voice => voice.lang.toLowerCase().startsWith(fallbackLang.toLowerCase()));
89
+ }
90
+ if (matchingVoices.length === 0) {
91
+ return this.voices[0] || null;
92
+ }
93
+ const prioritizedVoices = matchingVoices.sort((a, b) => {
94
+ if (a.default && !b.default)
95
+ return -1;
96
+ if (!a.default && b.default)
97
+ return 1;
98
+ if (a.localService && !b.localService)
99
+ return -1;
100
+ if (!a.localService && b.localService)
101
+ return 1;
102
+ return 0;
103
+ });
104
+ return prioritizedVoices[0];
105
+ }
106
+ async speak(options) {
107
+ return new Promise((resolve, reject) => {
108
+ var _a, _b, _c;
109
+ if (!this.isInitialized || !this.synthesis) {
110
+ reject(new Error('Speech Synthesis no está disponible'));
111
+ return;
112
+ }
113
+ this.synthesis.cancel();
114
+ const utterance = new SpeechSynthesisUtterance(options.text);
115
+ const voice = this.getBestVoiceForLanguage(options.lang);
116
+ if (voice) {
117
+ utterance.voice = voice;
118
+ }
119
+ utterance.rate = (_a = options.rate) !== null && _a !== void 0 ? _a : this.audioConfig.defaultRate;
120
+ utterance.pitch = (_b = options.pitch) !== null && _b !== void 0 ? _b : this.audioConfig.defaultPitch;
121
+ utterance.volume = (_c = options.volume) !== null && _c !== void 0 ? _c : this.audioConfig.defaultVolume;
122
+ if (options.lang) {
123
+ utterance.lang = options.lang;
124
+ }
125
+ utterance.onend = () => resolve();
126
+ utterance.onerror = (event) => reject(new Error(`Error en síntesis de voz: ${event.error}`));
127
+ this.synthesis.speak(utterance);
128
+ });
129
+ }
130
+ async speakText(text, language) {
131
+ return this.speak({
132
+ text,
133
+ lang: language
134
+ });
135
+ }
136
+ pause() {
137
+ if (this.synthesis && this.synthesis.speaking) {
138
+ this.synthesis.pause();
139
+ }
140
+ }
141
+ resume() {
142
+ if (this.synthesis && this.synthesis.paused) {
143
+ this.synthesis.resume();
144
+ }
145
+ }
146
+ stop() {
147
+ if (this.synthesis) {
148
+ this.synthesis.cancel();
149
+ }
150
+ }
151
+ isSpeaking() {
152
+ return this.synthesis ? this.synthesis.speaking : false;
153
+ }
154
+ isPaused() {
155
+ return this.synthesis ? this.synthesis.paused : false;
156
+ }
157
+ isSupported() {
158
+ return this.isInitialized && this.synthesis !== null;
159
+ }
160
+ getSystemLanguage() {
161
+ var _a;
162
+ if (typeof navigator !== 'undefined') {
163
+ return navigator.language || ((_a = navigator.languages) === null || _a === void 0 ? void 0 : _a[0]) || this.audioConfig.fallbackLanguage;
164
+ }
165
+ return this.audioConfig.fallbackLanguage;
166
+ }
167
+ setAudioConfig(config) {
168
+ this.audioConfig = Object.assign(Object.assign({}, this.audioConfig), config);
169
+ }
170
+ getAudioConfig() {
171
+ return Object.assign({}, this.audioConfig);
172
+ }
173
+ getAudioInfo() {
174
+ return {
175
+ isSupported: this.isSupported(),
176
+ isInitialized: this.isInitialized,
177
+ voicesCount: this.voices.length,
178
+ systemLanguage: this.getSystemLanguage(),
179
+ isSpeaking: this.isSpeaking(),
180
+ isPaused: this.isPaused(),
181
+ config: this.getAudioConfig()
182
+ };
183
+ }
184
+ async speakSequence(texts, options) {
185
+ for (const text of texts) {
186
+ await this.speak(Object.assign({ text }, options));
187
+ }
188
+ }
189
+ async speakWithEffect(text, effect) {
190
+ let speechOptions = { text };
191
+ switch (effect) {
192
+ case 'slow':
193
+ speechOptions.rate = 0.5;
194
+ break;
195
+ case 'fast':
196
+ speechOptions.rate = 1.5;
197
+ break;
198
+ case 'robot':
199
+ speechOptions.rate = 0.8;
200
+ speechOptions.pitch = 0.5;
201
+ break;
202
+ case 'whisper':
203
+ speechOptions.rate = 0.7;
204
+ speechOptions.volume = 0.3;
205
+ break;
206
+ }
207
+ return this.speak(speechOptions);
208
+ }
209
+ }
210
+ exports.Audio = Audio;
211
+ exports.default = Audio;
212
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../../src/libraries/audio.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import AndromedaClass from './andromeda';
7
7
  import ContentManagerClass from './content';
8
8
  import SessionClass from './session';
9
9
  import MixPanelClass from './mixpanel';
10
+ import AudioClass from './audio';
10
11
  export declare const Networking: NetworkingClass;
11
12
  export declare const AuthManager: AuthManagerClass;
12
13
  export declare const I18nManager: I18nManagerClass;
@@ -16,4 +17,5 @@ export declare const Andromeda: AndromedaClass;
16
17
  export declare const ContentManager: ContentManagerClass;
17
18
  export declare const Session: SessionClass;
18
19
  export declare const MixPanel: MixPanelClass;
20
+ export declare const Audio: AudioClass;
19
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/libraries/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,cAAc,CAAC;AAC3C,OAAO,gBAAgB,MAAM,QAAQ,CAAC;AACtC,OAAO,gBAAgB,MAAM,QAAQ,CAAC;AACtC,OAAO,YAAY,MAAM,WAAW,CAAC;AACrC,OAAO,UAAU,MAAM,SAAS,CAAC;AACjC,OAAO,cAAc,MAAM,aAAa,CAAC;AACzC,OAAO,mBAAmB,MAAM,WAAW,CAAC;AAC5C,OAAO,YAAY,MAAM,WAAW,CAAC;AACrC,OAAO,aAAa,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,UAAU,iBAAwB,CAAC;AAChD,eAAO,MAAM,WAAW,kBAAyB,CAAC;AAClD,eAAO,MAAM,WAAW,kBAAyB,CAAC;AAClD,eAAO,MAAM,OAAO,cAAqB,CAAC;AAC1C,eAAO,MAAM,KAAK,YAAmB,CAAC;AACtC,eAAO,MAAM,SAAS,gBAAuB,CAAC;AAC9C,eAAO,MAAM,cAAc,qBAA4B,CAAC;AACxD,eAAO,MAAM,OAAO,cAAqB,CAAC;AAC1C,eAAO,MAAM,QAAQ,eAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/libraries/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,cAAc,CAAC;AAC3C,OAAO,gBAAgB,MAAM,QAAQ,CAAC;AACtC,OAAO,gBAAgB,MAAM,QAAQ,CAAC;AACtC,OAAO,YAAY,MAAM,WAAW,CAAC;AACrC,OAAO,UAAU,MAAM,SAAS,CAAC;AACjC,OAAO,cAAc,MAAM,aAAa,CAAC;AACzC,OAAO,mBAAmB,MAAM,WAAW,CAAC;AAC5C,OAAO,YAAY,MAAM,WAAW,CAAC;AACrC,OAAO,aAAa,MAAM,YAAY,CAAC;AACvC,OAAO,UAAU,MAAM,SAAS,CAAC;AAEjC,eAAO,MAAM,UAAU,iBAAwB,CAAC;AAChD,eAAO,MAAM,WAAW,kBAAyB,CAAC;AAClD,eAAO,MAAM,WAAW,kBAAyB,CAAC;AAClD,eAAO,MAAM,OAAO,cAAqB,CAAC;AAC1C,eAAO,MAAM,KAAK,YAAmB,CAAC;AACtC,eAAO,MAAM,SAAS,gBAAuB,CAAC;AAC9C,eAAO,MAAM,cAAc,qBAA4B,CAAC;AACxD,eAAO,MAAM,OAAO,cAAqB,CAAC;AAC1C,eAAO,MAAM,QAAQ,eAAsB,CAAC;AAC5C,eAAO,MAAM,KAAK,YAAmB,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.MixPanel = exports.Session = exports.ContentManager = exports.Andromeda = exports.Utils = exports.Storage = exports.I18nManager = exports.AuthManager = exports.Networking = void 0;
6
+ exports.Audio = exports.MixPanel = exports.Session = exports.ContentManager = exports.Andromeda = exports.Utils = exports.Storage = exports.I18nManager = exports.AuthManager = exports.Networking = void 0;
7
7
  const networking_1 = __importDefault(require("./networking"));
8
8
  const auth_1 = __importDefault(require("./auth"));
9
9
  const i18n_1 = __importDefault(require("./i18n"));
@@ -13,6 +13,7 @@ const andromeda_1 = __importDefault(require("./andromeda"));
13
13
  const content_1 = __importDefault(require("./content"));
14
14
  const session_1 = __importDefault(require("./session"));
15
15
  const mixpanel_1 = __importDefault(require("./mixpanel"));
16
+ const audio_1 = __importDefault(require("./audio"));
16
17
  exports.Networking = new networking_1.default();
17
18
  exports.AuthManager = new auth_1.default();
18
19
  exports.I18nManager = new i18n_1.default();
@@ -22,4 +23,5 @@ exports.Andromeda = new andromeda_1.default();
22
23
  exports.ContentManager = new content_1.default();
23
24
  exports.Session = new session_1.default();
24
25
  exports.MixPanel = new mixpanel_1.default();
26
+ exports.Audio = new audio_1.default();
25
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/libraries/index.ts"],"names":[],"mappings":";;;;;;AAAA,8DAA2C;AAC3C,kDAAsC;AACtC,kDAAsC;AACtC,wDAAqC;AACrC,oDAAiC;AACjC,4DAAyC;AACzC,wDAA4C;AAC5C,wDAAqC;AACrC,0DAAuC;AAE1B,QAAA,UAAU,GAAG,IAAI,oBAAe,EAAE,CAAC;AACnC,QAAA,WAAW,GAAG,IAAI,cAAgB,EAAE,CAAC;AACrC,QAAA,WAAW,GAAG,IAAI,cAAgB,EAAE,CAAC;AACrC,QAAA,OAAO,GAAG,IAAI,iBAAY,EAAE,CAAC;AAC7B,QAAA,KAAK,GAAG,IAAI,eAAU,EAAE,CAAC;AACzB,QAAA,SAAS,GAAG,IAAI,mBAAc,EAAE,CAAC;AACjC,QAAA,cAAc,GAAG,IAAI,iBAAmB,EAAE,CAAC;AAC3C,QAAA,OAAO,GAAG,IAAI,iBAAY,EAAE,CAAC;AAC7B,QAAA,QAAQ,GAAG,IAAI,kBAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/libraries/index.ts"],"names":[],"mappings":";;;;;;AAAA,8DAA2C;AAC3C,kDAAsC;AACtC,kDAAsC;AACtC,wDAAqC;AACrC,oDAAiC;AACjC,4DAAyC;AACzC,wDAA4C;AAC5C,wDAAqC;AACrC,0DAAuC;AACvC,oDAAiC;AAEpB,QAAA,UAAU,GAAG,IAAI,oBAAe,EAAE,CAAC;AACnC,QAAA,WAAW,GAAG,IAAI,cAAgB,EAAE,CAAC;AACrC,QAAA,WAAW,GAAG,IAAI,cAAgB,EAAE,CAAC;AACrC,QAAA,OAAO,GAAG,IAAI,iBAAY,EAAE,CAAC;AAC7B,QAAA,KAAK,GAAG,IAAI,eAAU,EAAE,CAAC;AACzB,QAAA,SAAS,GAAG,IAAI,mBAAc,EAAE,CAAC;AACjC,QAAA,cAAc,GAAG,IAAI,iBAAmB,EAAE,CAAC;AAC3C,QAAA,OAAO,GAAG,IAAI,iBAAY,EAAE,CAAC;AAC7B,QAAA,QAAQ,GAAG,IAAI,kBAAa,EAAE,CAAC;AAC/B,QAAA,KAAK,GAAG,IAAI,eAAU,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webs-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "private": false,
5
5
  "main": "index.js",
6
6
  "types": "dist/index.d.ts",
package/types/index.d.ts CHANGED
@@ -239,6 +239,49 @@ declare module "webs-sdk" {
239
239
  enableTracking(): void;
240
240
  }
241
241
 
242
+ interface AudioVoice {
243
+ name: string;
244
+ lang: string;
245
+ localService: boolean;
246
+ default: boolean;
247
+ voiceURI: string;
248
+ }
249
+
250
+ interface SpeechOptions {
251
+ text: string;
252
+ voice?: string;
253
+ rate?: number;
254
+ pitch?: number;
255
+ volume?: number;
256
+ lang?: string;
257
+ }
258
+
259
+ interface AudioConfig {
260
+ defaultRate: number;
261
+ defaultPitch: number;
262
+ defaultVolume: number;
263
+ preferredLanguages: string[];
264
+ fallbackLanguage: string;
265
+ }
266
+
267
+ interface Audio {
268
+ getAvailableVoices(): AudioVoice[];
269
+ getBestVoiceForLanguage(language?: string): any;
270
+ speak(options: SpeechOptions): Promise<void>;
271
+ speakText(text: string, language?: string): Promise<void>;
272
+ pause(): void;
273
+ resume(): void;
274
+ stop(): void;
275
+ isSpeaking(): boolean;
276
+ isPaused(): boolean;
277
+ isSupported(): boolean;
278
+ setAudioConfig(config: Partial<AudioConfig>): void;
279
+ getAudioConfig(): AudioConfig;
280
+ getAudioInfo(): any;
281
+ speakSequence(texts: string[], options?: Partial<SpeechOptions>): Promise<void>;
282
+ speakWithEffect(text: string, effect: 'slow' | 'fast' | 'robot' | 'whisper'): Promise<void>;
283
+ }
284
+
242
285
  interface WebsSDK {
243
286
  Networking: Networking;
244
287
  AuthManager: AuthManager;
@@ -249,6 +292,7 @@ declare module "webs-sdk" {
249
292
  ContentManager: ContentManager;
250
293
  Session: Session;
251
294
  MixPanel: MixPanel;
295
+ Audio: Audio;
252
296
  Config: Config;
253
297
  }
254
298