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.
- package/README.md +167 -0
- package/dist/agent/authEnDisco.js +56 -0
- package/dist/agent/authEnDisco.js.map +1 -0
- package/dist/agent/configEnDisco.js +109 -0
- package/dist/agent/configEnDisco.js.map +1 -0
- package/dist/agent/crearProyecto.js +34 -0
- package/dist/agent/crearProyecto.js.map +1 -0
- package/dist/agent/entorno.js +124 -0
- package/dist/agent/entorno.js.map +1 -0
- package/dist/agent/guionizado.js +53 -0
- package/dist/agent/guionizado.js.map +1 -0
- package/dist/agent/instantanea.js +129 -0
- package/dist/agent/instantanea.js.map +1 -0
- package/dist/agent/interrupts.js +83 -0
- package/dist/agent/interrupts.js.map +1 -0
- package/dist/agent/mensajes.js +24 -0
- package/dist/agent/mensajes.js.map +1 -0
- package/dist/agent/modelos.js +42 -0
- package/dist/agent/modelos.js.map +1 -0
- package/dist/agent/normalizar.js +20 -0
- package/dist/agent/normalizar.js.map +1 -0
- package/dist/agent/perfiles.js +103 -0
- package/dist/agent/perfiles.js.map +1 -0
- package/dist/agent/proyecto.js +107 -0
- package/dist/agent/proyecto.js.map +1 -0
- package/dist/agent/puente.js +142 -0
- package/dist/agent/puente.js.map +1 -0
- package/dist/agent/resumenDeTool.js +48 -0
- package/dist/agent/resumenDeTool.js.map +1 -0
- package/dist/agent/skills.js +65 -0
- package/dist/agent/skills.js.map +1 -0
- package/dist/agent/textoDeTool.js +113 -0
- package/dist/agent/textoDeTool.js.map +1 -0
- package/dist/agent/turnoReal.js +173 -0
- package/dist/agent/turnoReal.js.map +1 -0
- package/dist/agent/verificador.js +65 -0
- package/dist/agent/verificador.js.map +1 -0
- package/dist/agent/xoneAgent.js +106 -0
- package/dist/agent/xoneAgent.js.map +1 -0
- package/dist/bin.js +9 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/aprobar.js +82 -0
- package/dist/cli/aprobar.js.map +1 -0
- package/dist/cli/config.js +133 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/consola.js +346 -0
- package/dist/cli/consola.js.map +1 -0
- package/dist/cli/describe.js +53 -0
- package/dist/cli/describe.js.map +1 -0
- package/dist/cli/doctor.js +45 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/main.js +520 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/markdown.js +90 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/run.js +164 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/spinner.js +89 -0
- package/dist/cli/spinner.js.map +1 -0
- package/dist/cli/stdio.js +193 -0
- package/dist/cli/stdio.js.map +1 -0
- package/dist/cli/tema.js +40 -0
- package/dist/cli/tema.js.map +1 -0
- package/dist/cli/verify.js +62 -0
- package/dist/cli/verify.js.map +1 -0
- package/dist/core/bitacora.js +30 -0
- package/dist/core/bitacora.js.map +1 -0
- package/dist/core/config.js +236 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/contextos.js +56 -0
- package/dist/core/contextos.js.map +1 -0
- package/dist/core/deps.js +51 -0
- package/dist/core/deps.js.map +1 -0
- package/dist/core/diff.js +79 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/esqueleto.js +366 -0
- package/dist/core/esqueleto.js.map +1 -0
- package/dist/core/events.js +2 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/modelos.js +85 -0
- package/dist/core/modelos.js.map +1 -0
- package/dist/core/notify.js +106 -0
- package/dist/core/notify.js.map +1 -0
- package/dist/core/ports.js +114 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/turno.js +127 -0
- package/dist/core/turno.js.map +1 -0
- package/dist/vendor/hitl.js +103 -0
- package/dist/vendor/hitl.js.map +1 -0
- package/dist/vendor/skillLoaders/catalog.js +74 -0
- package/dist/vendor/skillLoaders/catalog.js.map +1 -0
- package/dist/vendor/tokenTracking.js +58 -0
- package/dist/vendor/tokenTracking.js.map +1 -0
- package/package.json +41 -0
- package/skills/xone-debugging/SKILL.md +52 -0
- package/skills/xone-debugging/references/faq.md +561 -0
- package/skills/xone-debugging/references/troubleshooting-y-glosario.md +429 -0
- package/skills/xone-development/SKILL.md +105 -0
- package/skills/xone-development/references/anti-patrones.md +94 -0
- package/skills/xone-development/references/css/atributos-por-categoria.md +509 -0
- package/skills/xone-development/references/css/buenas-practicas-y-parser.md +419 -0
- package/skills/xone-development/references/css/dinamicos-cascada-y-componentes.md +550 -0
- package/skills/xone-development/references/css/patrones-material-y-temas.md +1140 -0
- package/skills/xone-development/references/css/propiedades-y-herencia.md +885 -0
- package/skills/xone-development/references/css/selectores-unidades-colores.md +840 -0
- package/skills/xone-development/references/datos/appdata-referencia-ampliada.md +457 -0
- package/skills/xone-development/references/datos/appdata.md +611 -0
- package/skills/xone-development/references/datos/http-sqlmanager-y-crypto.md +720 -0
- package/skills/xone-development/references/datos/http.md +366 -0
- package/skills/xone-development/references/datos/oauth2-y-replica.md +156 -0
- package/skills/xone-development/references/device/biometria-imagedrawing-y-otros.md +544 -0
- package/skills/xone-development/references/device/objetos-de-dispositivo.md +583 -0
- package/skills/xone-development/references/device/systemsettings-referencia-ampliada.md +396 -0
- package/skills/xone-development/references/device/systemsettings-y-permisos.md +342 -0
- package/skills/xone-development/references/fundamentos/conceptos-clave.md +695 -0
- package/skills/xone-development/references/fundamentos/configuracion-app-xml-ini-mappings.md +668 -0
- package/skills/xone-development/references/fundamentos/errores-comunes.md +312 -0
- package/skills/xone-development/references/fundamentos/navegacion-convenciones-y-primer-proyecto.md +576 -0
- package/skills/xone-development/references/fundamentos/plataforma-y-anatomia-de-proyecto.md +387 -0
- package/skills/xone-development/references/indice-completo.md +77 -0
- package/skills/xone-development/references/javascript/coleccion-error-y-usuario.md +260 -0
- package/skills/xone-development/references/javascript/debugging-y-best-practices.md +245 -0
- package/skills/xone-development/references/javascript/metodos-de-los-controles.md +556 -0
- package/skills/xone-development/references/javascript/metodos-nativos-de-la-vista.md +114 -0
- package/skills/xone-development/references/javascript/motor-js-y-contexto-de-ejecucion.md +319 -0
- package/skills/xone-development/references/javascript/objeto-ai-llm-en-dispositivo.md +358 -0
- package/skills/xone-development/references/javascript/objetos-creables-a-m.md +527 -0
- package/skills/xone-development/references/javascript/objetos-creables-n-z.md +385 -0
- package/skills/xone-development/references/javascript/patrones-criticos-seguridad-y-rendimiento.md +595 -0
- package/skills/xone-development/references/javascript/patrones-de-navegacion-datos-y-codigo.md +751 -0
- package/skills/xone-development/references/javascript/patrones-de-ui-voz-integracion-y-seguridad.md +701 -0
- package/skills/xone-development/references/javascript/plantillas-y-funciones-utilitarias.md +647 -0
- package/skills/xone-development/references/javascript/self-y-dataobject.md +449 -0
- package/skills/xone-development/references/javascript/singletons-globales.md +361 -0
- package/skills/xone-development/references/javascript/ui-catalogo-de-metodos.md +464 -0
- package/skills/xone-development/references/javascript/ui-gps-camara-y-multimedia.md +506 -0
- package/skills/xone-development/references/javascript/ui-navegacion-mensajes-y-vista.md +422 -0
- package/skills/xone-development/references/resumen-js-datos-dispositivo.md +80 -0
- package/skills/xone-development/references/resumen-xml-y-css.md +74 -0
- package/skills/xone-development/references/tipos-de-prop.md +28 -0
- package/skills/xone-development/references/xml-ui/asfilter-visibilidad-eventos-y-macros.md +576 -0
- package/skills/xone-development/references/xml-ui/atributos-coll-group-frame.md +235 -0
- package/skills/xone-development/references/xml-ui/atributos-method-macro-script-event-app.md +244 -0
- package/skills/xone-development/references/xml-ui/atributos-prop.md +439 -0
- package/skills/xone-development/references/xml-ui/contents-y-macros.md +392 -0
- package/skills/xone-development/references/xml-ui/errores-comunes-xml.md +245 -0
- package/skills/xone-development/references/xml-ui/estructura-y-nodo-coll.md +326 -0
- package/skills/xone-development/references/xml-ui/eventos-ciclo-de-vida-e-interaccion.md +704 -0
- package/skills/xone-development/references/xml-ui/eventos-sistema-login-y-personalizados.md +944 -0
- package/skills/xone-development/references/xml-ui/layouts-herencia-y-buenas-practicas.md +618 -0
- package/skills/xone-development/references/xml-ui/mapas.md +685 -0
- package/skills/xone-development/references/xml-ui/mappings-y-colecciones-separadas.md +148 -0
- package/skills/xone-development/references/xml-ui/nodos-group-y-frame.md +666 -0
- package/skills/xone-development/references/xml-ui/patrones-de-pantalla.md +643 -0
- package/skills/xone-development/references/xml-ui/prop-atributos-y-condiciones.md +298 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-basicos.md +493 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-combos-y-controles.md +664 -0
- package/skills/xone-development/references/xml-ui/prop-tipos-listas-y-mapas.md +412 -0
- package/skills/xone-plan-builder/SKILL.md +183 -0
- package/skills/xone-plan-builder/agents/openai.yaml +5 -0
- package/skills/xone-plan-builder/references/TASKS-FORMAT.md +132 -0
- package/skills/xone-project-generator/SKILL.md +111 -0
- package/skills/xone-project-generator/references/canonical-sizes.md +292 -0
- package/skills/xone-project-generator/references/colecciones-base.md +16 -0
- package/skills/xone-project-generator/references/convenciones-de-nombres.md +16 -0
- package/skills/xone-project-generator/references/ejemplos-por-sector-y-prohibiciones.md +140 -0
- package/skills/xone-project-generator/references/fase-3-estilos-css.md +597 -0
- package/skills/xone-project-generator/references/fase-6-colecciones.md +762 -0
- package/skills/xone-project-generator/references/fase-7-asfilter-e-integraciones.md +142 -0
- package/skills/xone-project-generator/references/fase-7-entidades-y-estructura-de-pantalla.md +494 -0
- package/skills/xone-project-generator/references/fase-7-plantilla-consola.md +477 -0
- package/skills/xone-project-generator/references/fase-7-plantillas-de-pantalla.md +302 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-graficos-y-listas.md +681 -0
- package/skills/xone-project-generator/references/fase-7-viewmodes-mapa-y-calendario.md +479 -0
- package/skills/xone-project-generator/references/fases-0-2-analisis-y-modelo-de-datos.md +350 -0
- package/skills/xone-project-generator/references/fases-10-12-readmes-y-validacion.md +194 -0
- package/skills/xone-project-generator/references/fases-4-5-estructura-y-configuracion.md +587 -0
- package/skills/xone-project-generator/references/fases-8-9-eventos-y-javascript.md +861 -0
- package/skills/xone-project-generator/references/flujo-de-generacion.md +67 -0
- package/skills/xone-project-generator/references/plantillas-estandar.md +98 -0
- package/skills/xone-project-generator/references/tamanos-canonicos.md +49 -0
- package/skills/xone-review/SKILL.md +189 -0
- package/skills/xone-spec-builder/SKILL.md +235 -0
- package/skills/xone-spec-builder/agents/openai.yaml +5 -0
- package/skills/xone-spec-builder/references/ADR-FORMAT.md +55 -0
- package/skills/xone-spec-builder/references/CONTEXT-FORMAT.md +42 -0
- 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
|
+
|