xonecode 0.1.0

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 (187) hide show
  1. package/README.md +167 -0
  2. package/dist/agent/authEnDisco.js +56 -0
  3. package/dist/agent/authEnDisco.js.map +1 -0
  4. package/dist/agent/configEnDisco.js +109 -0
  5. package/dist/agent/configEnDisco.js.map +1 -0
  6. package/dist/agent/crearProyecto.js +34 -0
  7. package/dist/agent/crearProyecto.js.map +1 -0
  8. package/dist/agent/entorno.js +124 -0
  9. package/dist/agent/entorno.js.map +1 -0
  10. package/dist/agent/guionizado.js +53 -0
  11. package/dist/agent/guionizado.js.map +1 -0
  12. package/dist/agent/instantanea.js +129 -0
  13. package/dist/agent/instantanea.js.map +1 -0
  14. package/dist/agent/interrupts.js +83 -0
  15. package/dist/agent/interrupts.js.map +1 -0
  16. package/dist/agent/mensajes.js +24 -0
  17. package/dist/agent/mensajes.js.map +1 -0
  18. package/dist/agent/modelos.js +42 -0
  19. package/dist/agent/modelos.js.map +1 -0
  20. package/dist/agent/normalizar.js +20 -0
  21. package/dist/agent/normalizar.js.map +1 -0
  22. package/dist/agent/perfiles.js +103 -0
  23. package/dist/agent/perfiles.js.map +1 -0
  24. package/dist/agent/proyecto.js +107 -0
  25. package/dist/agent/proyecto.js.map +1 -0
  26. package/dist/agent/puente.js +142 -0
  27. package/dist/agent/puente.js.map +1 -0
  28. package/dist/agent/resumenDeTool.js +48 -0
  29. package/dist/agent/resumenDeTool.js.map +1 -0
  30. package/dist/agent/skills.js +65 -0
  31. package/dist/agent/skills.js.map +1 -0
  32. package/dist/agent/textoDeTool.js +113 -0
  33. package/dist/agent/textoDeTool.js.map +1 -0
  34. package/dist/agent/turnoReal.js +173 -0
  35. package/dist/agent/turnoReal.js.map +1 -0
  36. package/dist/agent/verificador.js +65 -0
  37. package/dist/agent/verificador.js.map +1 -0
  38. package/dist/agent/xoneAgent.js +106 -0
  39. package/dist/agent/xoneAgent.js.map +1 -0
  40. package/dist/bin.js +9 -0
  41. package/dist/bin.js.map +1 -0
  42. package/dist/cli/aprobar.js +82 -0
  43. package/dist/cli/aprobar.js.map +1 -0
  44. package/dist/cli/config.js +133 -0
  45. package/dist/cli/config.js.map +1 -0
  46. package/dist/cli/consola.js +346 -0
  47. package/dist/cli/consola.js.map +1 -0
  48. package/dist/cli/describe.js +53 -0
  49. package/dist/cli/describe.js.map +1 -0
  50. package/dist/cli/doctor.js +45 -0
  51. package/dist/cli/doctor.js.map +1 -0
  52. package/dist/cli/main.js +520 -0
  53. package/dist/cli/main.js.map +1 -0
  54. package/dist/cli/markdown.js +90 -0
  55. package/dist/cli/markdown.js.map +1 -0
  56. package/dist/cli/run.js +164 -0
  57. package/dist/cli/run.js.map +1 -0
  58. package/dist/cli/spinner.js +89 -0
  59. package/dist/cli/spinner.js.map +1 -0
  60. package/dist/cli/stdio.js +193 -0
  61. package/dist/cli/stdio.js.map +1 -0
  62. package/dist/cli/tema.js +40 -0
  63. package/dist/cli/tema.js.map +1 -0
  64. package/dist/cli/verify.js +62 -0
  65. package/dist/cli/verify.js.map +1 -0
  66. package/dist/core/bitacora.js +30 -0
  67. package/dist/core/bitacora.js.map +1 -0
  68. package/dist/core/config.js +236 -0
  69. package/dist/core/config.js.map +1 -0
  70. package/dist/core/contextos.js +56 -0
  71. package/dist/core/contextos.js.map +1 -0
  72. package/dist/core/deps.js +51 -0
  73. package/dist/core/deps.js.map +1 -0
  74. package/dist/core/diff.js +79 -0
  75. package/dist/core/diff.js.map +1 -0
  76. package/dist/core/esqueleto.js +366 -0
  77. package/dist/core/esqueleto.js.map +1 -0
  78. package/dist/core/events.js +2 -0
  79. package/dist/core/events.js.map +1 -0
  80. package/dist/core/modelos.js +85 -0
  81. package/dist/core/modelos.js.map +1 -0
  82. package/dist/core/notify.js +106 -0
  83. package/dist/core/notify.js.map +1 -0
  84. package/dist/core/ports.js +114 -0
  85. package/dist/core/ports.js.map +1 -0
  86. package/dist/core/turno.js +127 -0
  87. package/dist/core/turno.js.map +1 -0
  88. package/dist/vendor/hitl.js +103 -0
  89. package/dist/vendor/hitl.js.map +1 -0
  90. package/dist/vendor/skillLoaders/catalog.js +74 -0
  91. package/dist/vendor/skillLoaders/catalog.js.map +1 -0
  92. package/dist/vendor/tokenTracking.js +58 -0
  93. package/dist/vendor/tokenTracking.js.map +1 -0
  94. package/package.json +41 -0
  95. package/skills/xone-debugging/SKILL.md +52 -0
  96. package/skills/xone-debugging/references/faq.md +561 -0
  97. package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
  98. package/skills/xone-development/SKILL.md +105 -0
  99. package/skills/xone-development/references/anti-patrones.md +94 -0
  100. package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
  101. package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
  102. package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
  103. package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
  104. package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
  105. package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
  106. package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
  107. package/skills/xone-development/references/datos/appdata.md +611 -0
  108. package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
  109. package/skills/xone-development/references/datos/http.md +366 -0
  110. package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
  111. package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
  112. package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
  113. package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
  114. package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
  115. package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
  116. package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
  117. package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
  118. package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
  119. package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
  120. package/skills/xone-development/references/indice-completo.md +77 -0
  121. package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
  122. package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
  123. package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
  124. package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
  125. package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
  126. package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
  127. package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
  128. package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
  129. package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
  130. package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
  131. package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
  132. package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
  133. package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
  134. package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
  135. package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
  136. package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
  137. package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
  138. package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
  139. package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
  140. package/skills/xone-development/references/tipos-de-prop.md +28 -0
  141. package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
  142. package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
  143. package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
  144. package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
  145. package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
  146. package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
  147. package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
  148. package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
  149. package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
  150. package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
  151. package/skills/xone-development/references/xml-ui/mapas.md +685 -0
  152. package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
  153. package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
  154. package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
  155. package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
  156. package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
  157. package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
  158. package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
  159. package/skills/xone-plan-builder/SKILL.md +183 -0
  160. package/skills/xone-plan-builder/agents/openai.yaml +5 -0
  161. package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
  162. package/skills/xone-project-generator/SKILL.md +111 -0
  163. package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
  164. package/skills/xone-project-generator/references/colecciones-base.md +16 -0
  165. package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
  166. package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
  167. package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
  168. package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
  169. package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
  170. package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
  171. package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
  172. package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
  173. package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
  174. package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
  175. package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
  176. package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
  177. package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
  178. package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
  179. package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
  180. package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
  181. package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
  182. package/skills/xone-review/SKILL.md +189 -0
  183. package/skills/xone-spec-builder/SKILL.md +235 -0
  184. package/skills/xone-spec-builder/agents/openai.yaml +5 -0
  185. package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
  186. package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
  187. package/skills/xone-spec-builder/references/PLAN-FORMAT.md +120 -0
@@ -0,0 +1,361 @@
1
+ # XOne JavaScript — Singletons globales
2
+
3
+ > Fuente: `xone/v2/xone-help-docs/topics/06-javascript-runtime-objects.md` §6. Referencia de la skill; el índice está en [../../SKILL.md](../../SKILL.md).
4
+
5
+ Contenido: §6 catálogo completo y API de los singletons: crypto, clipboard, deviceInfo, systemSettings, packageManager, biometricsManager/fingerprintManager, bleManager, bleSerial, sensorManager, paymentManager, pushMessage, appBroadcastManager, replica, live, smsService, serial/bluetoothSerial, ml y ai
6
+
7
+ ---
8
+
9
+ ## 6. Singletons Globales
10
+
11
+ Los siguientes objetos son **singletons** registrados automáticamente en el scope global. Se acceden directamente por su nombre, **sin `new` y sin `createObject`**. Llamar `new` o `createObject` con estos nombres lanza error o devuelve null.
12
+
13
+ ### 6.1 Catálogo completo
14
+
15
+ Registrados en `RhinoJavascriptEngine.addReservedObjects()`:
16
+
17
+ | Singleton | Proposito | Doc detallada |
18
+ |-----------|-----------|---------------|
19
+ | `$http` | Cliente HTTP con Futures | Tópico 03 §5 |
20
+ | `crypto` | Hashing (MD5, SHA), cifrado simetrico/asimetrico | §6.2 |
21
+ | `clipboard` | Portapapeles del dispositivo | §6.3 |
22
+ | `deviceInfo` | Info hardware: batería, red, sensores físicos | §6.4 |
23
+ | `systemSettings` | Ajustes del sistema: brillo, permisos, MDM | §6.5 |
24
+ | `packageManager` | Consulta de apps instaladas | §6.6 |
25
+ | `biometricsManager` | Biometria moderna (huella, face ID) | §6.7 |
26
+ | `fingerprintManager` | Huella legacy (deprecado) | §6.7 |
27
+ | `bleManager` | Bluetooth Low Energy | §6.8 |
28
+ | `sensorManager` | Sensores físicos (acelerometro, giroscopio, etc.) | §6.9 |
29
+ | `paymentManager` | Pasarelas de pago: Google Pay, Redsys, Smartphone TPV (Comercia), BBVA Cobros | §6.10 |
30
+ | `pushMessage` | Mensajeria push (FCM) | §6.11 |
31
+ | `push` | Alias legacy de pushMessage | §6.11 |
32
+ | `appBroadcastManager` | Broadcasts entre apps XOne | §6.12 |
33
+ | `replica` | Sistema de replica/sincronización | §6.14 |
34
+ | `live` | Sistema de Live Update | §6.15 |
35
+ | `smsService` | Envio/recepcion SMS | §6.16 |
36
+ | `serial` | Puerto serie generico | §6.17 |
37
+ | `bluetoothSerial` | Puerto serie via Bluetooth | §6.17 |
38
+ | `bleSerial` | Puerto serie via BLE | §6.17 |
39
+ | `efiDiagItv` | Diagnostico EFI / ITV (Itron) | §6.18 |
40
+ | `ml` | Machine Learning generico (TensorFlow Lite) | §6.19 |
41
+ | `ai` | IA generativa | §6.20 |
42
+
43
+ ### 6.2 crypto
44
+
45
+ Hashing y criptografía. **Casi todos los métodos toman un único `NativeObject` como argumento** (NO strings sueltos): `{ data: "...", outputFormat: "hex"|"base64"|"buffer", key?: "hmacKey", output?: "fichero.bin" }`.
46
+
47
+ Métodos disponibles (57): hashes (`md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`), codificación (`toBase64`/`fromBase64`, `toBase58`, `toBase45`, `toBase32`), compresión (`inflate`, `deflate`), keystore (`getCertificate`, `getRsaPublicKey`/`getRsaPrivateKey`, `getEcPublicKey`/`getEcPrivateKey`, `installKeyPairOnKeyStore`, etc.), COSE/CBOR (`decodeCose`/`decodeCbor`/`encodeCbor`/`validateCose`), random (`getRandomString`, `getRandomInt`, `getRandomDouble`, `getNewUuid`), criptografía (`hash`, `sign`, `encrypt`, `decrypt`, `derivePassword`, `generateKeyPair`, `generateAesKey`/`installAesKey`/`getAesKey`), JWT (`isJwtSignatureValid`), BD (`getDatabaseKey`), checksum (`getChecksum`).
48
+
49
+ ```js
50
+ // FIRMA CORRECTA: objeto con `data` y `outputFormat`
51
+ var hashHex = crypto.md5({ data: "texto", outputFormat: "hex" });
52
+ var hashB64 = crypto.sha256({ data: "texto", outputFormat: "base64" });
53
+ var hashBuffer = crypto.sha512({ data: "texto" }); // outputFormat por defecto "buffer"
54
+
55
+ // HMAC: añadir la clave en `key`
56
+ var hmac = crypto.sha256({ data: "texto", key: "miSecretoHmac", outputFormat: "hex" });
57
+
58
+ // Volcar a fichero
59
+ crypto.sha256({ data: "texto", output: appData.getFilesPath() + "/hash.bin" });
60
+
61
+ // Otros patrones (mismo objeto-argumento, claves según cada método)
62
+ var nuevoUuid = crypto.getNewUuid(); // sin args
63
+ var num = crypto.getRandomInt({ min: 0, max: 100 });
64
+ var b64 = crypto.toBase64({ data: "hola", outputFormat: "string" });
65
+ ```
66
+
67
+ > **AVISO**: `crypto.md5("texto")` con un String literal **lanza `ClassCastException`**. Siempre pasar el objeto.
68
+
69
+ ### 6.3 clipboard
70
+
71
+ ```js
72
+ clipboard.setText(self.getValue("CODIGO"));
73
+ ui.showToast("Código copiado: " + clipboard.getText());
74
+ ```
75
+
76
+ ### 6.4 deviceInfo
77
+
78
+ | Método | Descripción |
79
+ |---|---|
80
+ | `getBatteryLevelPercentage()` → `int` | Porcentaje de batería. |
81
+ | `getBatteryTemperature()` → `float` | Temperatura de batería (°C). |
82
+ | `getMobileNetworkSignalStrength()` → `int` | Intensidad de señal móvil. |
83
+ | `getConnectedMobileNetworkType()` → `String` | Tipo de red (`"4G"`, `"5G"`, `"WiFi"`...). |
84
+ | `getOpenGlVersion()` → `double` | Versión OpenGL ES. |
85
+ | `isArCompatible()` → `boolean` | Compatibilidad ARCore. |
86
+
87
+ ```js
88
+ appData.writeConsoleString("Bateria: " + deviceInfo.getBatteryLevelPercentage() + "%");
89
+ ```
90
+
91
+ ### 6.5 systemSettings
92
+
93
+ | Método | Descripción |
94
+ |---|---|
95
+ | `isRunningInMdm(...)` → `boolean` | `true` si la app está gestionada por MDM. |
96
+ | `isPasswordSecured()` → `boolean` | Dispositivo con PIN/password configurado. |
97
+ | `getBrightness()` → `double` | Brillo de la pantalla, rango **0 - 100**. |
98
+ | `setBrightness(value)` → `boolean` | Cambia el brillo. Acepta 0 - 100 (se clampa fuera de rango). |
99
+ | `getBrightnessMode()` / `setBrightnessMode(mode)` | Modo de brillo: `"manual"` o `"automatic"`. |
100
+ | `getDeviceId()` → `String` | Identificador único del dispositivo. |
101
+ | `getHardwareIds()` → `Map` | Mapa con todos los identificadores hardware. |
102
+ | `requestPermissions(...)` → `Future` | Solicita permisos en runtime. |
103
+ | `getApiLevel()` / `getAndroidVersion()` | API level (`Build.VERSION.SDK_INT`) y versión Android (string). |
104
+ | `getManufacturer()` / `getDeviceModel()` / `getBrand()` → `String` | Fabricante, modelo y marca del dispositivo. Equivalen a las macros `##DEVICE_MANUFACTURER##` / `##DEVICE_MODEL##`. |
105
+ | `getMemoryLevel()` → `String` | Nivel de presión de memoria del SO. Ver §8.11b. |
106
+ | `getInternalFreeSpace()` / `getInternalTotalSpace()` → `long` | Espacio libre / total (en bytes) del almacenamiento **interno** (la partición de datos donde residen la app y su BD). |
107
+ | `getExternalFreeSpace()` / `getExternalTotalSpace()` → `long` | Espacio libre / total (en bytes) del almacenamiento **externo** principal. Devuelven `0` si no está montado. |
108
+
109
+ Catálogo completo de métodos por área (brillo, red, batería, permisos, memoria, hardware, rutas, MDM, XOneLive, Intune, Analytics, etc.) en 03d-js-createobject.md §8.11b.
110
+
111
+ ```js
112
+ if (systemSettings.getBrightness() < 50) systemSettings.setBrightness(80);
113
+ ```
114
+
115
+ ### 6.6 packageManager
116
+
117
+ Métodos disponibles: `getPackageInfo(pkg)`, `isInstalled(pkg)`, `getInstalledPackages()`, `getInstalledPackageNames()`, `installPackage(...)`, `getRunningApps()`, `isPackageInstallPermissionGranted()`, `isAppSuspended(pkg)`, `getInstalledModules()`, `getAllPermissionGroups()`, `getPermissionsByGroup(group)`, `getPackageName()`, `getInstallerPackageName(pkg)`.
118
+
119
+ ```js
120
+ // getInstalledApps() NO existe — usar getInstalledPackages() o getInstalledPackageNames()
121
+ var apps = packageManager.getInstalledPackages();
122
+ var nombres = packageManager.getInstalledPackageNames();
123
+ var isInstalled = packageManager.isInstalled("com.empresa.otra");
124
+ ```
125
+
126
+ ### 6.7 biometricsManager / fingerprintManager
127
+
128
+ - **`biometricsManager`** — API moderna (preferida). Huella, face ID, firma biometrica.
129
+ - **`fingerprintManager`** — API legacy. Usar `biometricsManager` en nuevos desarrollos.
130
+
131
+ | Método | Descripción |
132
+ |---|---|
133
+ | `isHardwareAvailable()` → `boolean` | Hardware biometrico presente. |
134
+ | `hasEnrolledFingerprints()` → `boolean` | Hay huellas registradas. |
135
+ | `launch()` | Lanza el dialogo de autenticación. |
136
+ | `listen()` / `stopListening()` | Escucha continua de eventos biometricos. |
137
+
138
+ ```js
139
+ if (biometricsManager.isHardwareAvailable() && biometricsManager.hasEnrolledFingerprints()) {
140
+ biometricsManager.launch();
141
+ }
142
+ ```
143
+
144
+ ### 6.8 bleManager
145
+
146
+ ```js
147
+ bleManager.startScan({
148
+ onDeviceFound: function(device) {
149
+ appData.writeConsoleString("BLE: " + device.name + " " + device.address);
150
+ }
151
+ });
152
+ ```
153
+
154
+ ### 6.8b bleSerial (BleSerialPort)
155
+
156
+ Cliente Bluetooth Low Energy basado en el manager Telit, expuesto como **singleton** (acceso directo `bleSerial`, sin `new`). Solo accesible desde JavaScript. Requiere API 18+.
157
+
158
+ | Método | Parámetros | Retorno | Descripción |
159
+ |---|---|---|---|
160
+ | `setDebugMode(enabled)` | 1 boolean | `void` | Activa logs verbosos en el manager Telit. |
161
+ | `startLeScan(callback, timeout?)` o `startLeScan({callback, timeout?})` | 1..2 args | `void` | Inicia escaneo BLE. `callback(name, macAddress)` se invoca con el primer dispositivo encontrado y entonces el scan se detiene. `timeout` en ms (0 = sin límite). |
162
+ | `stopLeScan()` | ninguno | `void` | Detiene el escaneo. |
163
+ | `connect(macAddress, timeoutMs?)` o `connect({macAddress, timeout?, onConnected?, onError?})` | 1..4 args | `void` | Conecta al dispositivo BLE. Sin callbacks es síncrono; con `onConnected`/`onError` es asíncrono. Timeout por defecto 10000 ms. |
164
+ | `disconnect()` | ninguno | `void` | Encola un `DisconnectRequest` en el manager. |
165
+ | `write(value)` | 1 (String o Number) | `void` | Envía a la característica de escritura. Strings vía `writeString`; números vía `writeUint8`. |
166
+ | `setNotificationCallback(uuid, callback)` | 2 (String, Function) | `void` | Suscribe notificaciones de la característica `uuid`; el callback recibe el String recibido. Habilita notificaciones automáticamente. |
167
+ | `readString(callback?)` | 0..1 args | `String` | Lee un String de la característica de lectura (trim de `\r\n` final). |
168
+ | `readUint8(callback?)` | 0..1 args | `int` | Lee un byte como int sin signo. |
169
+
170
+ ```js
171
+ // bleSerial es singleton: NO se hace `new BleSerialPort()`
172
+ bleSerial.startLeScan(function(name, mac) {
173
+ appData.writeConsoleString("Encontrado " + name + " (" + mac + ")");
174
+ bleSerial.connect({
175
+ macAddress: mac,
176
+ timeout : 8000,
177
+ onConnected: function() {
178
+ bleSerial.setNotificationCallback(
179
+ "0000ffe1-0000-1000-8000-00805f9b34fb",
180
+ function(data) { appData.writeConsoleString("RX: " + data); }
181
+ );
182
+ bleSerial.write("AT\r\n");
183
+ },
184
+ onError: function(status) { appData.writeConsoleString("Error " + status); }
185
+ });
186
+ }, 15000);
187
+ ```
188
+
189
+ ### 6.9 sensorManager
190
+
191
+ | Método | Descripción |
192
+ |---|---|
193
+ | `getSensorList()` → `Object[]` | Lista de sensores disponibles. |
194
+ | `getSensor(type)` | Obtener un sensor concreto. |
195
+ | `getDisplayOrientation()` → `int` | Orientacion de la pantalla en grados. |
196
+ | `listen({type, onSensorChanged, onSensorAccuracyChanged?, sampling?})` | Inicia escucha. **Toma 1 NativeObject**, NO `(sensor, callback)`. |
197
+ | `stopListening({type})` o `stopListening()` | Si pasas `{type}` desuscribe ese sensor; sin argumento (o con string) desuscribe **TODOS**. |
198
+ | `listenForFalls({onFallDetected, sensitivity?, sampling?})` | Activa detección de caídas. Toma 1 NativeObject, no una funcion suelta. |
199
+ | `stopListeningForFalls()` | Desactiva. |
200
+
201
+ ```js
202
+ // Firma correcta: objeto de configuración con clave `type` y callback `onSensorChanged`
203
+ sensorManager.listen({
204
+ type: "accelerometer",
205
+ onSensorChanged: function(event) {
206
+ appData.writeConsoleString("X:" + event.x + " Y:" + event.y + " Z:" + event.z);
207
+ }
208
+ });
209
+ // sensorManager.stopListening({ type: "accelerometer" }); // sólo ese sensor
210
+ ```
211
+
212
+ ### 6.10 paymentManager
213
+
214
+ Pasarelas de pago. Singleton global: se obtiene un proveedor concreto con
215
+ `paymentManager.getProvider(nombre)` y se opera sobre él. Proveedores disponibles: `"redsys"`,
216
+ `"googlepay"`, `"tpv_comercia"` (Smartphone TPV de Comercia / Global Payments) y `"bbva_cobros"`
217
+ (BBVA Cobros).
218
+
219
+ Patrón común a todos: `setupProvider({...})` una vez para configurar, y después las operaciones,
220
+ que reciben callbacks **asíncronos** `onResult(self, r)` y `onError(self, e)` (el resultado llega
221
+ cuando la pasarela responde, no en la misma línea).
222
+
223
+ #### Proveedor "tpv_comercia" (Smartphone TPV — App2App)
224
+
225
+ Convierte el propio móvil en datáfono por NFC. No usa ninguna librería de pago: delega en una
226
+ **app externa** de Comercia (`com.comercia.app`), que debe estar instalada; el framework se
227
+ comunica con ella y entrega la respuesta a los callbacks.
228
+
229
+ **Requisitos:** Android 9 o superior, dispositivo con NFC, la app de Smartphone TPV instalada, y el
230
+ APK del comercio firmado con una clave cuyo SHA‑256 esté dado de alta en la whitelist de Comercia
231
+ (paso de alta previo imprescindible; sin él la comunicación se rechaza).
232
+
233
+ **Configuración** (`setupProvider`, una vez) — los valores de registro los **asigna Comercia** en
234
+ el alta del comercio/terminal:
235
+
236
+ | Parámetro | Descripción |
237
+ |---|---|
238
+ | `merchantId` | Número de comercio (obligatorio) |
239
+ | `terminalId` | Número de terminal (obligatorio) |
240
+ | `activationCode` | Código de activación (obligatorio) |
241
+ | `packageName` | Paquete de la app externa (opcional; por defecto `com.comercia.app`) |
242
+ | `appName` | Nombre visible de la app externa (opcional) |
243
+
244
+ **Operaciones** (todas admiten `onResult`/`onError`):
245
+
246
+ | Método | Qué hace |
247
+ |---|---|
248
+ | `payment({...})` | Venta o devolución. `transactionType`: `"200"` venta (por defecto), `"300"` devolución (requiere `transactionId`). `amount` en la unidad menor (p.ej. `"1400"` = 14,00 €). Opcionales: `orderId`, `configParameters` (visibilidad de botones: `drawerMenu`, `salesButton`, `voidButton`, `refundButton`, `historyButton`, `settingsButton`, `tipScreen`, `userPhoto`), `customMessage` |
249
+ | `getLastTransaction({...})` | Consulta la última transacción |
250
+ | `gotoList({...})` | Abre un listado. `listType`: `"3000"` devoluciones, `"5000"` historial |
251
+ | `onlyRegister({...})` | Registra el terminal sin realizar cobro |
252
+ | `manualSettlement({...})` | Cierre / liquidación manual |
253
+
254
+ `requestPaymentReference` no aplica a este proveedor (no hay pre‑autorización por referencia).
255
+
256
+ En `onResult` de un pago llega un objeto con `transactionStatus` (`"success"`/`"decline"`),
257
+ `transactionId`, `amount`, `maskedPan`, `refusalCode`, `transactionDate`, `transactionType`…; en
258
+ `onError`, el código/mensaje `a2aCode`/`a2aMessage` (o el detalle de la operación declinada).
259
+
260
+ ```js
261
+ var tpv = paymentManager.getProvider("tpv_comercia");
262
+ tpv.setupProvider({
263
+ merchantId: "329811087",
264
+ terminalId: "00000025",
265
+ activationCode: "000000"
266
+ });
267
+ var miSelf = self; // preservar self para el callback asíncrono
268
+ tpv.payment({
269
+ amount: "1400", // 14,00 EUR (unidad menor)
270
+ transactionType: "200", // venta
271
+ orderId: "" + (new Date()).getTime(),
272
+ configParameters: { refundButton: "1", tipScreen: "0" },
273
+ onResult: function (s, r) { miSelf.MAP_RESP = r.transactionStatus + " " + r.transactionId; ui.refresh("MAP_RESP"); },
274
+ onError: function (s, e) { miSelf.MAP_RESP = "Error: " + e.a2aMessage; ui.refresh("MAP_RESP"); }
275
+ });
276
+ ```
277
+
278
+ #### Proveedor "bbva_cobros" (BBVA Cobros — App2App)
279
+
280
+ Más simple que `tpv_comercia`: lanza la app externa de BBVA Cobros por intent y recibe el resultado
281
+ por broadcast; sin servicio, sin handshake y **sin credenciales** que configurar (BBVA Cobros ya va
282
+ contratado en el dispositivo, con el acceso automático activo).
283
+
284
+ **Importante:** el importe va en **euros** (p.ej. `"12.50"` = 12,50 €), **no** en la unidad menor
285
+ (al contrario que `tpv_comercia`).
286
+
287
+ **Operaciones** (todas admiten `onResult`/`onError`):
288
+
289
+ | Método | Qué hace |
290
+ |---|---|
291
+ | `payment({...})` | Venta. `amount` en euros (obligatorio) |
292
+ | `refund({...})` | Devolución. `amount` (euros) + `idRTS` (el RTS de la venta original), obligatorios |
293
+ | `getFuc({...})` | Consulta el FUC y el terminal (devuelve `id_fuc`, `id_terminal`) |
294
+
295
+ No necesita `setupProvider` (sin credenciales ni configuración; el paquete de la app de BBVA es
296
+ fijo). `requestPaymentReference` no aplica.
297
+
298
+ La respuesta trae `SmartPay_Payment_Result` (`"OK"`/`"KO"`/`"UNKNOWN"`; `OK` dispara `onResult`, el
299
+ resto `onError`), `Amount`, `IdRTS`, `id_terminal`, `id_fuc`.
300
+
301
+ ```js
302
+ var bbva = paymentManager.getProvider("bbva_cobros");
303
+ var miSelf = self;
304
+ bbva.payment({
305
+ amount: "12.50", // euros, NO céntimos
306
+ onResult: function (s, r) { miSelf.MAP_RESP = r.SmartPay_Payment_Result + " RTS:" + r.IdRTS; ui.refresh("MAP_RESP"); },
307
+ onError: function (s, e) { miSelf.MAP_RESP = "KO: " + e.SmartPay_Payment_Result; ui.refresh("MAP_RESP"); }
308
+ });
309
+ // Devolución con el RTS de la venta: bbva.refund({ amount: "12.50", idRTS: "0750022...", onResult: ..., onError: ... });
310
+ // Consulta del FUC: bbva.getFuc({ onResult: function (s, r) { /* r.id_fuc, r.id_terminal */ } });
311
+ ```
312
+
313
+ ### 6.11 pushMessage / push
314
+
315
+ Mensajeria push via Firebase Cloud Messaging.
316
+
317
+ Métodos disponibles: `getToken()`, `getFirebaseInstanceId()`, `sendMessageFirebase(...)`.
318
+
319
+ > **Nota**: NO existe `pushMessage.subscribe(topic)`. La suscripcion a topics se gestiona en el backend o registrando el token mediante la consola de Firebase. El cliente solo expone el token.
320
+
321
+ ```js
322
+ var token = pushMessage.getToken(); // obtener token FCM
323
+ var instanceId = pushMessage.getFirebaseInstanceId();
324
+ // pushMessage.sendMessageFirebase(...); // envio device-to-device
325
+ ```
326
+
327
+ ### 6.12 appBroadcastManager
328
+
329
+ Broadcasts entre diferentes apps XOne instaladas en el dispositivo.
330
+
331
+ ### 6.14 replica
332
+
333
+ Sistema de replicación / sincronización XOne.
334
+
335
+ ### 6.15 live
336
+
337
+ Sistema de Live Update — gestion de actualizaciones en caliente del proyecto.
338
+
339
+ ### 6.16 smsService
340
+
341
+ Envío y recepción de SMS. Requiere `<permission name="sms"/>` dentro del nodo `<permissions>` de la coll.
342
+
343
+ ### 6.17 serial / bluetoothSerial / bleSerial
344
+
345
+ Puertos serie genericos:
346
+ - `serial` — Serie USB / RS232.
347
+ - `bluetoothSerial` — Serie sobre Bluetooth clasico.
348
+ - `bleSerial` — Serie sobre BLE.
349
+
350
+ ### 6.18 efiDiagItv
351
+
352
+ Diagnostico EFI / ITV (especifico de equipos Itron).
353
+
354
+ ### 6.19 ml
355
+
356
+ API de Machine Learning generico (TensorFlow Lite).
357
+
358
+ ### 6.20 ai
359
+
360
+ IA generativa **local** (LLM on-device): ejecuta modelos de lenguaje dentro del dispositivo, sin servidor. Singleton global. API extensa (descarga de modelos, carga, generación, chat con streaming, herramientas, skills, multimodal imagen/audio). Documentación completa en su propio archivo: 08-objeto-ai.md.
361
+