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,385 @@
|
|
|
1
|
+
# XOne JavaScript — Objetos creables (Socket a XOneSigner) y lista canónica
|
|
2
|
+
|
|
3
|
+
> Fuente: `xone/v2/xone-help-docs/topics/06-javascript-runtime-objects.md` L822–1197. Referencia de la skill; el índice está en [../../SKILL.md](../../SKILL.md).
|
|
4
|
+
|
|
5
|
+
Contenido: §5.13 Socket/WebSocket · §5.14 DebugTools · §5.15 IrManager · §5.16 SoundManager · §5.17 VibrationManager · §5.18 WearableConnection · §5.19 AccountManager · §5.20 XOneNFC · §5.21 ImageDrawing · §5.22 BarcodeGenerator · §5.23 XOnePrinter · §5.24 XOnePDF · §5.25 XOneOCR · §5.26 XOneSigner · §5.28 AccessibilityManager · §5.27 lista completa de creables
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
### 5.13 Socket / WebSocket
|
|
10
|
+
|
|
11
|
+
- **`Socket`** — Cliente socket TCP/IP bruto. Métodos: `setProtocol`, `setAddress`, `setPort`, `setTimeout`, `connect`, `send`, `receive`, `receiveAll`, `disconnect`.
|
|
12
|
+
- **`WebSocket`** — Cliente WebSocket (`ws://` y `wss://`), soporta certificados y subprotocolos. La configuración va en el **constructor**; los únicos métodos del objeto son `send(data)` y `close()`.
|
|
13
|
+
|
|
14
|
+
```js
|
|
15
|
+
// Toda la configuración se pasa al constructor (NO existe ws.connect())
|
|
16
|
+
var ws = new WebSocket({
|
|
17
|
+
url: "wss://servidor.empresa.com/ws",
|
|
18
|
+
onMessage: function(msg) { console.log("WS recibido: " + msg); },
|
|
19
|
+
onError: function(e) { console.log("WS error: " + e); }
|
|
20
|
+
});
|
|
21
|
+
ws.send("hola");
|
|
22
|
+
// ws.close();
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
### 5.14 DebugTools
|
|
28
|
+
|
|
29
|
+
Herramientas de envío de información de depuración (logs, BD) al servidor de soporte.
|
|
30
|
+
|
|
31
|
+
Métodos: `getDeviceId()`, `getLog()`, `sendLog()`, `sendDatabase()`, `sendReplicaDebugDatabase()`, `sendReplicaFilesDatabase()`.
|
|
32
|
+
|
|
33
|
+
```js
|
|
34
|
+
var debug = new DebugTools();
|
|
35
|
+
debug.sendLog(); // Envia el logcat al servidor de soporte
|
|
36
|
+
// debug.sendDatabase(); // Envia la BD principal
|
|
37
|
+
// debug.sendReplicaDebugDatabase();
|
|
38
|
+
// debug.sendReplicaFilesDatabase();
|
|
39
|
+
// var sId = debug.getDeviceId();
|
|
40
|
+
// var sLog = debug.getLog();
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### 5.15 IrManager
|
|
46
|
+
|
|
47
|
+
Control de infrarrojos (IR blaster) para dispositivos compatibles.
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
var ir = new IrManager();
|
|
51
|
+
ir.transmit(38000, [9000, 4500, 560, 560]);
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### 5.16 SoundManager
|
|
57
|
+
|
|
58
|
+
Reproducción y gestion de audio (alternativa a métodos de `ui`).
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
var snd = new SoundManager();
|
|
62
|
+
snd.play(appData.getFilesPath() + "/alerta.mp3");
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### 5.17 VibrationManager
|
|
68
|
+
|
|
69
|
+
Control de vibracion del dispositivo.
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
var vib = new VibrationManager();
|
|
73
|
+
vib.vibrate([0, 200, 100, 200]); // patron pausa/vibracion (ms)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### 5.18 WearableConnection
|
|
79
|
+
|
|
80
|
+
Comunicación con dispositivos Wear OS emparejados.
|
|
81
|
+
|
|
82
|
+
Métodos disponibles: `setCallbacks(callbacks)`, `removeCallbacks()`, `send(path, data)`.
|
|
83
|
+
|
|
84
|
+
```js
|
|
85
|
+
var wear = new WearableConnection();
|
|
86
|
+
wear.setCallbacks({
|
|
87
|
+
onMessageReceived: function(msg) { /* ... */ }
|
|
88
|
+
});
|
|
89
|
+
wear.send("/path/notificacion", "Pedido listo"); // método se llama send, no sendMessage
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### 5.19 AccountManager
|
|
95
|
+
|
|
96
|
+
Gestion de cuentas de Android (Google, Microsoft, etc.) almacenadas en el dispositivo.
|
|
97
|
+
|
|
98
|
+
Métodos disponibles: `getAccounts()` (sin argumentos, devuelve TODAS), `getAccountsByType(type)`, `chooseAccount(...)`, `addAccount(...)`, `getUserData(account, key)`, `getAuthToken(...)`, `getAuthenticatorTypes()`.
|
|
99
|
+
|
|
100
|
+
```js
|
|
101
|
+
var am = new AccountManager();
|
|
102
|
+
var todas = am.getAccounts(); // todas las cuentas del dispositivo
|
|
103
|
+
var google = am.getAccountsByType("com.google");// filtrar por tipo (NO usar getAccounts con argumento)
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### 5.20 XOneNFC
|
|
109
|
+
|
|
110
|
+
Lectura y escritura de tags NFC (NDEF, Mifare Classic/Ultralight), emulación HCE, DNI electrónico y operaciones MDM. Requiere `<permission name="nfc"/>` dentro del nodo `<permissions>` de la coll y dispositivo con hardware NFC. Implementación en `xonenfc_lib`. Todos los métodos devuelven la propia instancia (encadenable).
|
|
111
|
+
|
|
112
|
+
**Patrón de callbacks de las operaciones `*Async`**: estas operaciones reciben el **nombre del nodo XML** a ejecutar como callback (un String), NO un objeto con `onSuccess`/`onError`. El framework invoca ese nodo cuando se detecta el tag y completa la operación.
|
|
113
|
+
|
|
114
|
+
| Método | Parámetros | Descripción |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| `isAvailable()` | ninguno | `true` si el dispositivo tiene chip NFC. |
|
|
117
|
+
| `isEnabled()` | ninguno | `true` si NFC está activado. |
|
|
118
|
+
| `getAntennaInfo()` | ninguno | NativeObject con info de la antena NFC (nullable). |
|
|
119
|
+
| `clearAllPendingOperations()` | ninguno | Cancela todas las operaciones asíncronas pendientes. |
|
|
120
|
+
| `setOnTagDiscoveredCallback(callback)` o `setOnTagDiscoveredCallback({callback, window?})` | 1 (Function o NativeObject) | Registra callback que recibe el tag detectado. Si es objeto, la clave es **`callback`** (no `onTagDiscovered`); `callback` puede ser una función o el nombre de un nodo XML. Pasar `null` desactiva el reader. |
|
|
121
|
+
| `readNdefMessageAsync(callbackName)` | 1 String | Lee mensaje NDEF del próximo tag detectado. `callbackName` es el nombre del nodo XML a ejecutar al leer. |
|
|
122
|
+
| `writeNdefMessageAsync(data, callbackName)` | 2 Strings | Escribe `data` como mensaje NDEF al próximo tag. |
|
|
123
|
+
| `formatNdefTagAsync(callbackName)` | 1 String | Formatea un tag virgen como NDEF. |
|
|
124
|
+
| `writeNdefFormatableAsync(data, callbackName)` | 2 Strings | Escribe NDEF en un tag formatable. |
|
|
125
|
+
| `readMifareClassicAsync(blocks, callbackName, [keyMapJson])` | 2-3 args | Lee los bloques indicados (array de ints) del próximo tag Mifare Classic. `keyMapJson` opcional: ruta a un fichero JSON con las claves A/B por sector. |
|
|
126
|
+
| `writeMifareClassicAsync(blocks, data, callbackName, [keyMapJson])` | 3-4 args | Escribe `data` (array) en los `blocks` (array) indicados. |
|
|
127
|
+
| `readMifareUltralightAsync(pageIndex, callbackName)` | 2 args (int, String) | Lee desde `pageIndex` el próximo tag Mifare Ultralight/NTAG. |
|
|
128
|
+
| `writeMifareUltralightAsync(data, callbackName)` | 2 args (array, String) | Escribe páginas Mifare Ultralight. |
|
|
129
|
+
| `startNdefTagEmulation({ndefType, ndefData, oneShot?, password?, readAllowed?, writeAllowed?, size?})` | 1 NativeObject | Inicia emulación HCE como tag NDEF. `ndefType` ∈ `"text"`/`"uri"`. |
|
|
130
|
+
| `stopNdefTagEmulation()` | ninguno | Detiene la emulación HCE. |
|
|
131
|
+
| `enableDnieReader({onDnieRead, onDnieReadError, onProgressUpdated, authMode?, canNumber? \| mrz? \| (documentNumber+dateOfBirth+dateOfExpiry), readEfcom?, readProfileData?, readUserImage?, readSignatureImage?, readAuthenticationCertificate?, readSignatureCertificate?, enablePassiveAuthentication?, trustedCountries?, minimumSessionKeySize?, password?, timeout?})` | 1 NativeObject | Activa el lector de DNI electrónico. **Obligatorios**: `onDnieRead`, `onDnieReadError` y la clave de acceso (CAN o MRZ). `authMode` por defecto `"PACE"`. `minimumSessionKeySize` exige que la clave de sesión negociada tenga al menos esos bits (`112`, `128`, `192` o `256`); sin especificar se acepta la variante más fuerte que ofrezca el documento. `enablePassiveAuthentication` (por defecto `true`) comprueba que los datos del documento están firmados por el país emisor y, si algo no cuadra, aborta la lectura por `onDnieReadError` sin entregar ningún dato; se reconocen los emisores de más de cien países, y para leer un documento de un emisor que no esté hay que desactivarla. `trustedCountries` acota los emisores que se admiten a una lista de códigos de país separados por comas, por ejemplo `"ES"` para no dar por bueno más que el documento español. |
|
|
132
|
+
| `disableDnieReader()` | ninguno | Desactiva el lector de DNIe. |
|
|
133
|
+
| `installMdm({method, ...})` | 1 NativeObject | Provisiona MDM via NFC. `method` ∈ `"any"` (default), `"android_beam"`, `"emulate_tag"`. |
|
|
134
|
+
| `generateMdmQrCode({targetFile, ...})` | 1 NativeObject | Genera QR de enrolamiento MDM en `targetFile` (640×480 px). |
|
|
135
|
+
| `writeMdmTag({...})` | 1 NativeObject | Escribe tag NFC con configuración MDM. |
|
|
136
|
+
|
|
137
|
+
```js
|
|
138
|
+
var nfc = new XOneNFC();
|
|
139
|
+
if (!nfc.isAvailable() || !nfc.isEnabled()) {
|
|
140
|
+
ui.msgBox("NFC no disponible o desactivado");
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Escuchar tags: el callback puede ser una función o el nombre de un nodo XML
|
|
145
|
+
nfc.setOnTagDiscoveredCallback({
|
|
146
|
+
callback: function(tag) {
|
|
147
|
+
appData.writeConsoleString("Tag detectado: " + tag.getHexId());
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// O directamente la función:
|
|
152
|
+
// nfc.setOnTagDiscoveredCallback(function(tag) { ... });
|
|
153
|
+
|
|
154
|
+
// Leer NDEF: callbackName es el nombre del nodo XML que se ejecutará
|
|
155
|
+
nfc.readNdefMessageAsync("onTagRead");
|
|
156
|
+
|
|
157
|
+
// Escribir NDEF: data + nombre del nodo callback
|
|
158
|
+
nfc.writeNdefMessageAsync("Hola mundo", "onTagWritten");
|
|
159
|
+
|
|
160
|
+
// Leer DNI electrónico con CAN (claves obligatorias: onDnieRead + onDnieReadError + CAN o MRZ)
|
|
161
|
+
nfc.enableDnieReader({
|
|
162
|
+
canNumber : "123456",
|
|
163
|
+
onDnieRead : function(result) {
|
|
164
|
+
appData.writeConsoleString("DNI: " + result.getDniNumber());
|
|
165
|
+
},
|
|
166
|
+
onDnieReadError : function(err) { ui.showToast("Error DNIe: " + err); },
|
|
167
|
+
onProgressUpdated: function(progress, message) { /* progreso 0-100 */ },
|
|
168
|
+
readUserImage : true,
|
|
169
|
+
readProfileData : true,
|
|
170
|
+
// Se comprueba que el documento lo firmó el país emisor salvo que se desactive; acotar los
|
|
171
|
+
// emisores admitidos es lo que impide dar por bueno un pasaporte extranjero auténtico
|
|
172
|
+
trustedCountries : "ES"
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### 5.21 ImageDrawing
|
|
179
|
+
|
|
180
|
+
Manipulación programatica de imágenes: cargar imagen base, anadir texto/superpuestos, rotar, censurar caras.
|
|
181
|
+
|
|
182
|
+
Métodos disponibles: `create(...)`, `setBackground(path)`, `setBackgroundColor(color)`, `setFont(name)`, `setFontSize(size)`, `setFontColor(color)`, `setFontStyle(style)`, `setGrayscale(bool)`, `addTextSetXY(text, x, y)`, `addImageSetXY(path, x, y)`, `getImageInfo(path)`, `save(path)`, `rotate(grados)`, `copyExifMetadata(src, dst)`, `censorFaces(path)`, `extractFace(path)`.
|
|
183
|
+
|
|
184
|
+
```js
|
|
185
|
+
// IMPORTANTE: setBackground exige que el lienzo este creado con create(w, h).
|
|
186
|
+
// Sin create() previo lanza IllegalArgumentException("Width not set").
|
|
187
|
+
var img = new ImageDrawing();
|
|
188
|
+
var info = img.getImageInfo(appData.getFilesPath() + "/foto.jpg");
|
|
189
|
+
img.create(info.getWidth(), info.getHeight()); // dimensionar lienzo PRIMERO
|
|
190
|
+
img.setBackground(appData.getFilesPath() + "/foto.jpg"); // cargar imagen base (NO existe img.load)
|
|
191
|
+
img.setFontSize(32);
|
|
192
|
+
img.setFontColor("#FF0000");
|
|
193
|
+
img.addTextSetXY("ENVIADO", 50, 50); // anadir texto (NO existe img.drawText)
|
|
194
|
+
img.save(appData.getFilesPath() + "/foto_marcada.jpg");
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
### 5.22 BarcodeGenerator
|
|
200
|
+
|
|
201
|
+
Generación de códigos de barras 1D (EAN, Code128, UPC, etc.) y 2D (incluye QR).
|
|
202
|
+
|
|
203
|
+
La configuración va por **setters previos**; `generate()` toma **solo el texto a codificar** (un único String), NO un objeto.
|
|
204
|
+
|
|
205
|
+
```js
|
|
206
|
+
var bc = new BarcodeGenerator();
|
|
207
|
+
bc.setType("qrcode"); // "qrcode", "code128", "ean13", etc.
|
|
208
|
+
bc.setResolution(300, 100); // ancho x alto en px
|
|
209
|
+
bc.setDestinationFile(appData.getFilesPath() + "/barcode.png");
|
|
210
|
+
// Opcionales: setMargin, setRotation, setTextFontSize, setLabelVisibility, setErrorCorrectionLevel
|
|
211
|
+
bc.generate("1234567890"); // SOLO el texto (NO un objeto)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
### 5.23 XOnePrinter
|
|
217
|
+
|
|
218
|
+
Impresion en impresoras Bluetooth, USB o de red. Soporta ESC/POS y PDF.
|
|
219
|
+
|
|
220
|
+
La configuración va por **setters previos**; `connect()` solo acepta un número de reintentos opcional.
|
|
221
|
+
|
|
222
|
+
```js
|
|
223
|
+
var printer = new XOnePrinter();
|
|
224
|
+
printer.setDriver("zebra"); // o "esc-pos", "datamax", etc.
|
|
225
|
+
printer.setMacAddress("AA:BB:CC:DD:EE:FF"); // o setIpAddress(...) + setPort(...)
|
|
226
|
+
printer.connect(); // sin argumentos (o connect(3) para 3 reintentos)
|
|
227
|
+
printer.print("Ticket de venta\n"); // print, NO printText
|
|
228
|
+
printer.printLineCentered("--------------");
|
|
229
|
+
printer.print("Total: 25,00€");
|
|
230
|
+
printer.cutPaper(); // cutPaper, NO cut
|
|
231
|
+
printer.disconnect();
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
### 5.24 XOnePDF
|
|
237
|
+
|
|
238
|
+
Generación de documentos PDF. La API usa `create(path)` + setters + `addText*`/`addImage*` + `newPage()` + `close()` (NO existen `addPage`/`drawText`/`drawImage`/`save`).
|
|
239
|
+
|
|
240
|
+
```js
|
|
241
|
+
var pdf = new XOnePDF();
|
|
242
|
+
pdf.create(appData.getFilesPath() + "/factura.pdf"); // ruta de salida
|
|
243
|
+
pdf.open();
|
|
244
|
+
pdf.setFont("Helvetica");
|
|
245
|
+
pdf.setFontSize(12);
|
|
246
|
+
pdf.setFontColor("#000000");
|
|
247
|
+
pdf.addTextSetXY("Factura N." + self.getValue("NUM"), 50, 50); // addTextSetXY (NO drawText)
|
|
248
|
+
pdf.addImageSetXY(appData.getFilesPath() + "/logo.png", 400, 30, 0.5, 0.5); // addImageSetXY (NO drawImage)
|
|
249
|
+
// pdf.newPage(); // para pagina nueva (NO addPage)
|
|
250
|
+
pdf.close(); // close (NO save)
|
|
251
|
+
// pdf.launchPDF(); // opcional, abre el PDF generado
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Leer / extraer texto de un PDF existente.** `extractText(rutaPdf)` devuelve el texto plano del PDF; `extractTextToFile(rutaPdf, rutaTxt)` lo vuelca a un `.txt` en UTF-8 y devuelve la ruta del fichero generado. Solo extraen la **capa de texto**: un PDF escaneado (imágenes sin texto) devuelve vacío, no hacen OCR. Ambos son síncronos.
|
|
255
|
+
|
|
256
|
+
```js
|
|
257
|
+
var pdf = new XOnePDF();
|
|
258
|
+
var texto = pdf.extractText(appData.getFilesPath() + "/documento.pdf"); // a variable
|
|
259
|
+
var ruta = pdf.extractTextToFile(appData.getFilesPath() + "/documento.pdf", // a fichero .txt
|
|
260
|
+
appData.getFilesPath() + "/documento.txt");
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
### 5.25 XOneOCR
|
|
266
|
+
|
|
267
|
+
Reconocimiento óptico de caracteres sobre imágenes o regiones.
|
|
268
|
+
|
|
269
|
+
Métodos disponibles:
|
|
270
|
+
- `scanLicensePlate(imagePath, [{mode, region, withCamera, licensePlateWidth, licensePlateHeight, onResult}])` → `String` con la matrícula.
|
|
271
|
+
- `startScan({onResult, regex, oneShot})` — escáner asíncrono con regex.
|
|
272
|
+
- `scanText(imagePath, [params])` — **actualmente lanza `UnsupportedOperationException`** (no implementado).
|
|
273
|
+
|
|
274
|
+
```js
|
|
275
|
+
var ocr = new XOneOCR();
|
|
276
|
+
|
|
277
|
+
// Reconocer matrícula a partir de fichero
|
|
278
|
+
var matricula = ocr.scanLicensePlate(appData.getFilesPath() + "/matricula.jpg");
|
|
279
|
+
appData.writeConsoleString("Matrícula: " + matricula);
|
|
280
|
+
|
|
281
|
+
// Escáner asíncrono con regex
|
|
282
|
+
ocr.startScan({
|
|
283
|
+
onResult: function(texto) { ui.showToast("Detectado: " + texto); },
|
|
284
|
+
regex : "\\d{4}[A-Z]{3}",
|
|
285
|
+
oneShot : true
|
|
286
|
+
});
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
> **AVISO**: `ocr.recognize(path)` **no existe**. Para OCR genérico no hay método actualmente implementado (`scanText` lanza `UnsupportedOperationException`).
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
### 5.26 XOneSigner
|
|
294
|
+
|
|
295
|
+
Helper de firma electrónica y primitivas criptográficas básicas (XOR, RC2, Base64, firma CMS de datos, timestamping TSP). Se instancia con `new XOneSigner()`.
|
|
296
|
+
|
|
297
|
+
| Método | Parámetros | Retorno | Descripción |
|
|
298
|
+
|---|---|---|---|
|
|
299
|
+
| `xorCipher(value, key)` | 2 (String, String) | `String` | Cifra/descifra XOR el `value` con la `key` (carácter a carácter). |
|
|
300
|
+
| `rc2Cipher(mode, value, key, vectorI)` | 4 (int, value, String, String) | `byte[]` | RC2 con `mode=1` (cifrar) o `mode=0` (descifrar); `value` puede ser String o `byte[]`. |
|
|
301
|
+
| `encryptRc2(value, key, iv)` | 3 (value, String, String) | `NativeInt8Array` | RC2 cifrado, `value` admite String, `byte[]` o `NativeArrayBufferView`. |
|
|
302
|
+
| `decryptRc2(value, key, iv)` | 3 (value, String, String) | `NativeInt8Array` | RC2 descifrado. |
|
|
303
|
+
| `base64Encode(value)` | 1 (String o `byte[]`) | `String` | Codifica a Base64 sin saltos de línea. |
|
|
304
|
+
| `base64Decode(value)` | 1 String | `byte[]` | Decodifica Base64. |
|
|
305
|
+
| `signDataObject({privateKey, certificateChain, data?, dataFile?, templateFile, keystoreFile?, keystorePassword?, certificateAlias?, digestAlgorithm, timeStampServerUrl?, timeStampServerUserName?, timeStampServerPassword?, timeStampDigestAlgorithm?, connectTimeout?, readTimeout?})` | 1 NativeObject | `String` o `null` | Firma CMS según la plantilla XML. Acepta DNIe (`privateKey`+`certificateChain`) o keystore PKCS12 (`keystoreFile`+`keystorePassword`+`certificateAlias`). Opcionalmente añade timestamp TSP. |
|
|
306
|
+
| `signDataObject(data, mask)` | 2 (String, int) | `String` o `null` | **Forma legacy**: usa el keystore por defecto, pide PIN con un diálogo del sistema, firma con SHA-1. `mask=0` firma `data` como String, `mask=1` firma el contenido del fichero `data`. |
|
|
307
|
+
| `doTimeStampRequest({url, userName?, password?, digestAlgorithm, dataFile? \| data?, connectTimeout?, readTimeout?})` | 1 NativeObject | `TimeStampResponse` | Solicita un token TSP al servidor indicado para los `data`/`dataFile` aportados. |
|
|
308
|
+
|
|
309
|
+
```js
|
|
310
|
+
// Firmar CMS con DNIe (privateKey y certificateChain previos)
|
|
311
|
+
var signer = new XOneSigner();
|
|
312
|
+
var firma = signer.signDataObject({
|
|
313
|
+
privateKey : dnie.privateKey,
|
|
314
|
+
certificateChain : dnie.certificateChain,
|
|
315
|
+
data : "contenido a firmar",
|
|
316
|
+
templateFile : "template.xml",
|
|
317
|
+
digestAlgorithm : "SHA-256",
|
|
318
|
+
timeStampServerUrl : "https://tsa.example.com/tsa",
|
|
319
|
+
timeStampDigestAlgorithm: "SHA-256",
|
|
320
|
+
connectTimeout : 10000,
|
|
321
|
+
readTimeout : 30000
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
// Firmar con keystore PKCS12
|
|
325
|
+
var firma2 = signer.signDataObject({
|
|
326
|
+
keystoreFile : "cert.p12",
|
|
327
|
+
keystorePassword : "1234",
|
|
328
|
+
certificateAlias : "miAlias",
|
|
329
|
+
dataFile : appData.getFilesPath() + "/documento.bin",
|
|
330
|
+
templateFile : "template.xml",
|
|
331
|
+
digestAlgorithm : "SHA-256"
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
// Primitivas auxiliares
|
|
335
|
+
var b64 = signer.base64Encode("texto plano");
|
|
336
|
+
var llano = signer.base64Decode(b64);
|
|
337
|
+
var oculto = signer.xorCipher("secreto", "clave123");
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
> Para **firmar PDFs** completos (no datos CMS arbitrarios) usar `XOnePDF.signPdf(...)` o `XOnePDF.signPdfWithKey(source, dest, keystorePath, keystorePassword, keyAlias, keyPassword)` (6 args posicionales).
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
### 5.28 AccessibilityManager
|
|
345
|
+
|
|
346
|
+
Wrapper mínimo del servicio de accesibilidad de Android. Permite consultar el estado y emitir anuncios para TalkBack.
|
|
347
|
+
|
|
348
|
+
| Método | Parámetros | Retorno | Descripción |
|
|
349
|
+
|---|---|---|---|
|
|
350
|
+
| `isEnabled()` | ninguno | `boolean` | Si el servicio de accesibilidad está activo. |
|
|
351
|
+
| `isTouchExplorationEnabled()` | ninguno | `boolean` | Si "explorar por toque" está activo (API 14+; antes devuelve `false`). |
|
|
352
|
+
| `sendText(text)` | 1 String | `boolean` | Envía un evento `TYPE_ANNOUNCEMENT` con el texto (API 16+). Devuelve `false` si el servicio está desactivado. |
|
|
353
|
+
| `interrupt()` | ninguno | `null` | Llama `AccessibilityManager.interrupt()` para cortar anuncios en curso. |
|
|
354
|
+
|
|
355
|
+
```js
|
|
356
|
+
var a11y = new AccessibilityManager();
|
|
357
|
+
if (a11y.isEnabled()) {
|
|
358
|
+
a11y.sendText("Pedido guardado correctamente");
|
|
359
|
+
} else {
|
|
360
|
+
appData.writeConsoleString("Accesibilidad desactivada (explorar por toque: " +
|
|
361
|
+
a11y.isTouchExplorationEnabled() + ")");
|
|
362
|
+
}
|
|
363
|
+
a11y.interrupt();
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
### 5.27 Lista completa de creables
|
|
369
|
+
|
|
370
|
+
Lista canonica de todos los objetos creables, según el registro en `RhinoJavascriptEngine.addCreateObjects()`. **El match es case-insensitive** (`new FileManager()` y `createObject("filemanager")` son equivalentes), pero los ejemplos usan PascalCase canonico.
|
|
371
|
+
|
|
372
|
+
```
|
|
373
|
+
FileManager, WebSocket, XOneNFC, DebugTools, ImageDrawing,
|
|
374
|
+
BluetoothSerialPort, SerialPort, AndroidIntent, Bundle, IniParser,
|
|
375
|
+
WifiManager, WifiConfiguration, WifiP2p, Animation, SqlManager,
|
|
376
|
+
SystemDebug, AccountManager, GpsTools, Worker, OAuth2, IrManager,
|
|
377
|
+
Socket, EncodingUtils, XOnePrinter, XOnePDF, BarcodeGenerator,
|
|
378
|
+
QRGenerator, XOneOCR, XOneSigner, KeyStore, AccessibilityManager,
|
|
379
|
+
PinpadPayment, Loomis, TensorFlow, VeridasManager, RTCClient,
|
|
380
|
+
GeoTabKeyless, MobbSign, BeaconyManager, SoundManager, VibrationManager,
|
|
381
|
+
WearableConnection, ItronDeviceManager, DeviceManager
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
> Los objetos no documentados arriba (KeyStore, TensorFlow, VeridasManager, PinpadPayment, Loomis, MobbSign, GeoTabKeyless, RTCClient, BeaconyManager, ItronDeviceManager, SystemDebug, Bundle, WifiConfiguration, WifiP2p, SerialPort, QRGenerator) son creables y siguen el mismo patrón de instanciación. Para su API completa consultar el código del módulo. `AccessibilityManager` está en §5.28; `bleSerial` (BLE) es un singleton — ver §6.
|
|
385
|
+
|