From f075a0679a1d3de734104ba89ff30e2fdf1078d4 Mon Sep 17 00:00:00 2001 From: rafa-ruiz Date: Mon, 23 Feb 2026 22:19:20 -0800 Subject: [PATCH 1/9] removed .devcontainer, .vscode and workspace --- .devcontainer/devcontainer.json | 26 -------------------------- .vscode/settings.json | 22 ---------------------- 2 files changed, 48 deletions(-) delete mode 100644 .devcontainer/devcontainer.json delete mode 100644 .vscode/settings.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 9cdf986..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "brunix-assistance-engine", - "dockerComposeFile": "../docker-compose.yaml", - "service": "brunix-engine", - "workspaceFolder": "/workspace", - "remoteUser": "root", - "runArgs": [ - "--add-host", - "host.docker.internal:host-gateway" - ], - "customizations": { - "vscode": { - "extensions": [ - "ms-python.python", - "ms-python.vscode-pylance", - "ms-python.debugpy", - "astral-sh.ruff", - "ms-python.black-formatter", - "njpwerner.autodocstring" - ], - "settings": { - "python.defaultInterpreterPath": "/usr/local/bin/python" - } - } - } -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index da72b49..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "makefile.configureOnOpen": false, - "python-envs.pythonProjects": [], - "python.terminal.useEnvFile": true, - "python.envFile": "${workspaceFolder}/.env", - "jupyter.logging.level": "info", - "terminal.integrated.env.linux": { - "PYTHONPATH": "${workspaceFolder}:${env:PYTHONPATH}" - }, - "python.analysis.ignore": [ - "*" - ], // Disables Pylance's native linting - "python.analysis.typeCheckingMode": "basic", // Keeps Pylance's type validation - "[python]": { - "editor.defaultFormatter": "charliermarsh.ruff", - "editor.formatOnSave": true, - "editor.codeActionsOnSave": { - "source.fixAll.ruff": "explicit", - "source.organizeImports.ruff": "explicit" - } - } -} \ No newline at end of file From 5024bde8fbc6407953684cea323b026fd6643f7a Mon Sep 17 00:00:00 2001 From: rafa-ruiz Date: Mon, 23 Feb 2026 22:21:04 -0800 Subject: [PATCH 2/9] removed workspace --- Docker/docker-compose.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/Docker/docker-compose.yaml b/Docker/docker-compose.yaml index 5d0f4ca..53e6cd1 100644 --- a/Docker/docker-compose.yaml +++ b/Docker/docker-compose.yaml @@ -4,8 +4,6 @@ services: brunix-engine: build: . container_name: brunix-assistance-engine - volumes: - - .:/workspace env_file: .env ports: - "50052:50051" From aa9865f5d05b771c09462ddc422fd43f4b437f1d Mon Sep 17 00:00:00 2001 From: rafa-ruiz Date: Tue, 3 Mar 2026 13:19:42 -0800 Subject: [PATCH 3/9] docs: add contribution standards, PR template and env vars policy --- .github/pull_request_template.md | 76 +++++++++++ CONTRIBUTING.md | 228 +++++++++++++++++++++++++++++++ README.md | 43 ++++-- changelog | 16 ++- 4 files changed, 347 insertions(+), 16 deletions(-) create mode 100644 .github/pull_request_template.md create mode 100644 CONTRIBUTING.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..f03cd48 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,76 @@ +## Summary + + + +## Type of change + +- [ ] New feature (`Added`) +- [ ] Change to existing behavior (`Changed`) +- [ ] Bug fix (`Fixed`) +- [ ] Security / infrastructure (`Security`) +- [ ] Internal refactor (no behavioral change) +- [ ] Docs / changelog only + +--- + +## PR Checklist + +> All applicable items must be checked before requesting review. +> Reviewers are authorized to close and request resubmission of PRs that do not meet these standards. + +### Code & Environment +- [ ] Tested locally against the **authorized Devaron Cluster** (no external or unauthorized infrastructure used) +- [ ] No personal IDE/environment files committed (`.vscode`, `.devcontainer`, etc.) +- [ ] No `root` user configurations introduced +- [ ] `Dockerfile` and `.dockerignore` comply with build context standards (`/app` only, no `/workspace`) + +### Ingestion Files +- [ ] **No ingestion files were added or modified in this PR** +- [ ] **Ingestion files were added or modified** and are committed to the repository under `ingestion/` or `data/` + +### Environment Variables +- [ ] **No new environment variables were introduced in this PR** +- [ ] **New variables were introduced** and are fully documented in the `.env` table in `README.md` + +If new variables were added, list them here: + +| Variable | Required | Description | Example value | +|---|---|---|---| +| `VARIABLE_NAME` | Yes / No | What it does | `example` | + +### Changelog +- [ ] **Not required** — internal refactor, typo/comment fix, or zero behavioral impact +- [ ] **Updated** — entry added to `changelog` with correct version bump and today's date + +### Documentation +- [ ] **Not required** — internal change with no impact on setup, API, or usage +- [ ] **Updated** — `README.md` or relevant docs reflect this change + +--- + +## Changelog entry + + + +``` +## [X.Y.Z] - YYYY-MM-DD + +### Added / Changed / Fixed / Security +- LABEL: Description. +``` + +--- + +## Infrastructure status during testing + +| Tunnel | Status | +|---|---| +| Ollama (port 11434) | `active` / `N/A` | +| Elasticsearch (port 9200) | `active` / `N/A` | +| PostgreSQL (port 5432) | `active` / `N/A` | + +--- + +## Notes for reviewer + + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e106c98 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,228 @@ +# Contributing to Brunix Assistance Engine + +> This document is the single source of truth for all contribution standards in the Brunix Assistance Engine repository. All contributors — regardless of seniority or role — are expected to read, understand, and comply with these guidelines before opening any Pull Request. + +--- + +## Table of Contents + +1. [Development Workflow (GitFlow)](#1-development-workflow-gitflow) +2. [Infrastructure Standards](#2-infrastructure-standards) +3. [Repository Standards](#3-repository-standards) +4. [Pull Request Requirements](#4-pull-request-requirements) +5. [Ingestion Files Policy](#5-ingestion-files-policy) +6. [Environment Variables Policy](#6-environment-variables-policy) +7. [Changelog Policy](#7-changelog-policy) +8. [Documentation Policy](#8-documentation-policy) +9. [Incident & Blockage Reporting](#9-incident--blockage-reporting) + +--- + +## 1. Development Workflow (GitFlow) + +### Branch Strategy + +| Branch type | Naming convention | Purpose | +|---|---|---| +| Feature | `*-dev` | Active development — volatile, no CI validation | +| Main | `main` | Production-ready, fully validated | + +- **Feature branches** (`*-dev`) are volatile environments. No validation tests or infrastructure deployments are performed on these branches. +- **Official validation** only occurs after a documented Pull Request is merged into `main`. +- **Developer responsibility:** Code must be stable and functional against the authorized environment before a PR is opened. Do not use the PR review process as a debugging step. + +--- + +## 2. Infrastructure Standards + +The project provides a validated, shared environment (Devaron Cluster, Vultr) including Ollama, Elasticsearch, and PostgreSQL. + +- **Authorized environment only.** The use of parallel, unauthorized infrastructures — external EC2 instances, ad-hoc local setups, non-replicable environments — is strictly prohibited for official development. +- **No siloed environments.** Isolated development creates technical debt and incompatibility risks that directly impact delivery timelines. +- All infrastructure access must be established via the documented `kubectl` port-forward tunnels defined in the [README](./README.md#3-infrastructure-tunnels). + +--- + +## 3. Repository Standards + +### IDE Agnosticism + +The `main` branch must remain neutral to any individual's development environment. The following **must not** be committed under any circumstance: + +- `.devcontainer/` +- `.vscode/` +- Any local IDE or editor configuration files + +The `.gitignore` automates exclusion of these artifacts. Ensure your local environment is fully decoupled from the production-ready source code. + +### Security & Least Privilege + +- Never use `root` as `remoteUser` in any shared dev environment configuration. +- All configurations must comply with the **Principle of Least Privilege**. +- Using root in shared environments introduces unacceptable supply chain risk. + +### Docker & Build Context + +- All executable code must reside in `/app` within the container. +- The `/workspace` root directory is **deprecated** — do not reference it. +- Every PR must verify the `Dockerfile` context is optimized via `.dockerignore`. + +> **PRs that violate these architectural standards will be rejected without review.** + +--- + +## 4. Pull Request Requirements + +A PR is not ready for review unless **all applicable items** in the following checklist are satisfied. Reviewers are authorized to close PRs that do not meet these standards and request resubmission. + +### PR Checklist + +**Code & Environment** +- [ ] Tested locally against the authorized Devaron Cluster (no unauthorized infrastructure used) +- [ ] No IDE or environment configuration files committed (`.vscode`, `.devcontainer`, etc.) +- [ ] No `root` user configurations introduced +- [ ] `Dockerfile` and `.dockerignore` comply with build context standards + +**Ingestion Files** *(see [Section 5](#5-ingestion-files-policy))* +- [ ] No ingestion files were added or modified +- [ ] New or modified ingestion files are committed to the repository under `ingestion/` or `data/` + +**Environment Variables** *(see [Section 6](#6-environment-variables-policy))* +- [ ] No new environment variables were introduced +- [ ] New environment variables are documented in the `.env` reference table in `README.md` + +**Changelog** *(see [Section 6](#6-changelog-policy))* +- [ ] No changelog entry required (internal refactor, comment/typo fix, zero behavioral change) +- [ ] Changelog updated with correct version bump and date + +**Documentation** *(see [Section 7](#7-documentation-policy))* +- [ ] No documentation update required (internal change, no impact on setup or API) +- [ ] `README.md` or relevant docs updated to reflect this change + +--- + +## 5. Ingestion Files Policy + +All files used to populate the vector knowledge base — source documents, AVAP manuals, structured data, or ingestion scripts — **must be committed to the repository.** + +### Rules + +- Ingestion files must reside in a dedicated directory (e.g., `ingestion/` or `data/`) within the repository. +- Any PR that introduces new knowledge base content or modifies existing ingestion pipelines must include the corresponding source files. +- Files containing sensitive content that cannot be committed in plain form must be flagged for discussion before proceeding. Encryption, redaction, or a separate private submodule are all valid solutions — committing to an external or local-only location is not. + +### Why this matters + +The Elasticsearch vector index is only as reliable as the source material that feeds it. Ingestion files that exist only on a local machine or external location cannot be audited, rebuilt, or validated by the team. A knowledge base populated from untracked files is a non-reproducible dependency — and a risk to the entire RAG pipeline. + +--- + +## 6. Environment Variables Policy + +This is a critical requirement. **Every environment variable introduced in a PR must be documented before the PR can be merged.** + +### Rules + +- Any new variable added to the codebase (`.env`, `docker-compose.yaml`, `server.py`, or any config file) must be declared in the `.env` reference table in `README.md`. +- The documentation must include: variable name, purpose, whether it is required or optional, and an example value. +- Variables that contain secrets must use placeholder values (e.g., `your-secret-key-here`) — never commit real values. + +### Required format in README.md + +```markdown +| Variable | Required | Description | Example | +|---|---|---|---| +| `LANGFUSE_PUBLIC_KEY` | Yes | Langfuse project public key for tracing | `pk-lf-...` | +| `LANGFUSE_SECRET_KEY` | Yes | Langfuse project secret key | `sk-lf-...` | +| `LANGFUSE_HOST` | Yes | Langfuse server endpoint | `http://45.77.119.180` | +| `NEW_VARIABLE` | Yes | Description of what it does | `example-value` | +``` + +### Why this matters + +An undocumented environment variable silently breaks the setup for every other developer on the team. It also makes the service non-reproducible, which is a direct violation of the infrastructure standards in Section 2. There are no exceptions to this policy. + +--- + +## 7. Changelog Policy + +The `changelog` file tracks all notable changes and follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +### When a changelog entry IS required + +| Change type | Label to use | +|---|---| +| New feature or capability | `Added` | +| Change to existing behavior, API, or interface | `Changed` | +| Bug fix | `Fixed` | +| Security patch or security-related change | `Security` | +| Breaking change or deprecation | `Deprecated` / `Removed` | + +### When a changelog entry is NOT required + +- Typo or comment fixes only +- Internal refactors with zero behavioral or interface change +- Tooling/CI updates with no user-visible impact + +**If in doubt, add an entry.** + +### Format + +New entries go at the top of the file, above the previous version: + +``` +## [X.Y.Z] - YYYY-MM-DD + +### Added +- LABEL: Description of the new feature or capability. + +### Changed +- LABEL: Description of what changed and the rationale. + +### Fixed +- LABEL: Description of the bug resolved. +``` + +Use uppercase short labels for scanability: `API:`, `DOCKER:`, `INFRA:`, `SECURITY:`, `ENV:`, `CONFIG:`. + +--- + +## 8. Documentation Policy + +### When documentation MUST be updated + +Update `README.md` (or the relevant doc file) if the PR includes any of the following: + +- Changes to project structure (new files, directories, removed components) +- Changes to setup, installation, or environment configuration +- New or modified API endpoints or Protobuf definitions (`brunix.proto`) +- New, modified, or removed environment variables +- Changes to infrastructure tunnels or Kubernetes service names +- New dependencies or updated dependency versions +- Changes to security, access, or repository standards + +### When documentation is NOT required + +- Internal implementation changes with no impact on setup, usage, or API +- Fixes that do not alter any documented behavior + +> **PRs that change user-facing behavior or setup without updating documentation will be rejected.** + +--- + +## 9. Incident & Blockage Reporting + +If you encounter a technical blockage (connection timeouts, service downtime, tunnel failures): + +1. **Immediate notification** — Report via the designated Slack channel at the moment of detection. Do not wait until end of day. +2. **GitHub Issue must include:** + - The exact command executed + - Full terminal output (complete error logs) + - Current status of all `kubectl` tunnels +3. **Resolution** — If the error is not reproducible by the CTO/DevOps team, a 5-minute live debugging session will be scheduled to identify local network or configuration issues. + +--- + +*These standards exist to protect the integrity of the Brunix Assistance Engine and to ensure every member of the team can work confidently and efficiently. They are not bureaucratic overhead — they are the foundation of a reliable, scalable engineering practice.* + +*— Rafael Ruiz, CTO, AVAP Technology* diff --git a/README.md b/README.md index 083b1fd..ae52878 100644 --- a/README.md +++ b/README.md @@ -43,14 +43,17 @@ graph TD ```text . -├── Dockerfile # Container definition for the Engine -├── README.md # System documentation & Dev guide -├── changelog # Version tracking and release history -├── docker-compose.yaml # Local orchestration for dev environment +├── .github/ +│ └── pull_request_template.md # Mandatory PR checklist +├── Dockerfile # Container definition for the Engine +├── README.md # System documentation & Dev guide +├── CONTRIBUTING.md # Contribution standards & policies +├── changelog # Version tracking and release history +├── docker-compose.yaml # Local orchestration for dev environment ├── protos/ -│ └── brunix.proto # Protocol Buffers: The source of truth for the API +│ └── brunix.proto # Protocol Buffers: The source of truth for the API └── src/ - └── server.py # Core Logic: gRPC Server & RAG Orchestration + └── server.py # Core Logic: gRPC Server & RAG Orchestration ``` --- @@ -87,8 +90,6 @@ sequenceDiagram Note over E: Close Langfuse Trace ``` - - --- ## Development Setup @@ -102,7 +103,13 @@ sequenceDiagram The engine utilizes Langfuse for end-to-end tracing and performance monitoring. 1. Access the Dashboard: **http://45.77.119.180** 2. Create a project and generate API Keys in **Settings**. -3. Configure your local `.env` file: +3. Configure your local `.env` file using the reference table below. + +### 3. Environment Variables Reference + +> **Policy:** Every environment variable used by the engine must be documented in this table. Any PR that introduces a new variable without a corresponding entry here will be rejected. See [CONTRIBUTING.md](./CONTRIBUTING.md#5-environment-variables-policy) for full details. + +Create a `.env` file in the project root with the following variables: ```env LANGFUSE_PUBLIC_KEY=pk-lf-... @@ -110,7 +117,15 @@ LANGFUSE_SECRET_KEY=sk-lf-... LANGFUSE_HOST=http://45.77.119.180 ``` -### 3. Infrastructure Tunnels +| Variable | Required | Description | Example | +|---|---|---|---| +| `LANGFUSE_PUBLIC_KEY` | Yes | Langfuse project public key for tracing and observability | `pk-lf-...` | +| `LANGFUSE_SECRET_KEY` | Yes | Langfuse project secret key | `sk-lf-...` | +| `LANGFUSE_HOST` | Yes | Langfuse server endpoint (Devaron Cluster) | `http://45.77.119.180` | + +> 🔒 Never commit real secret values. Use placeholder values when sharing configuration examples. + +### 4. Infrastructure Tunnels Open a terminal and establish the connection to the Devaron Cluster: ```bash @@ -124,9 +139,7 @@ kubectl port-forward --address 0.0.0.0 svc/brunix-vector-db 9200:9200 -n brunix kubectl port-forward --address 0.0.0.0 svc/brunix-postgres 5432:5432 -n brunix --kubeconfig ./kubernetes/ivar.yaml & ``` - - -### 4. Launch the Engine +### 5. Launch the Engine ```bash docker-compose up -d --build ``` @@ -167,10 +180,12 @@ To maintain production-grade security and image efficiency, this project enforce *Failure to comply with these architectural standards will result in PR rejection.* +For the full set of contribution standards, see [CONTRIBUTING.md](./CONTRIBUTING.md). + --- ## Security & Intellectual Property * **Data Privacy:** All LLM processing and vector searches are conducted within a private Kubernetes environment. * **Proprietary Technology:** This repository contains the **AVAP Technology** stack (101OBEX) and specialized training logic (MrHouston). Unauthorized distribution is prohibited. ---- \ No newline at end of file +--- diff --git a/changelog b/changelog index 87fa691..8c1e0c6 100644 --- a/changelog +++ b/changelog @@ -4,6 +4,19 @@ All notable changes to the **Brunix Assistance Engine** will be documented in th --- +## [1.2.0] - 2026-03-03 + +### Added +- GOVERNANCE: Introduced `CONTRIBUTING.md` as the single source of truth for all contribution standards, covering GitFlow, infrastructure policy, repository standards, environment variables, changelog, documentation, and incident reporting. +- GOVERNANCE: Added `.github/pull_request_template.md` enforcing a mandatory structured checklist on every PR — including explicit sign-off on environment variables, changelog, and documentation. +- DOCS: Added Environment Variables reference table to `README.md`. All variables must be registered here. PRs introducing undocumented variables will be rejected. +- DOCS: Updated project structure map in `README.md` to reflect new governance files. + +### Changed +- PROCESS: Pull Requests that introduce new environment variables without documentation, omit required changelog entries, or skip required documentation updates are now formally non-mergeable per `CONTRIBUTING.md`. + +--- + ## [1.1.0] - 2026-02-16 ### Added @@ -17,15 +30,14 @@ All notable changes to the **Brunix Assistance Engine** will be documented in th ### Fixed - RESOLVED: Issue where non-production files were being bundled into the Docker image, improving deployment speed and container isolation. +--- ## [1.0.0] - 2026-02-09 ### Added - - **System Architecture:** Implementation of the triple-layer stack (Engine, Vector DB, Observability). - **Core Engine:** Deployment of the `brunix-assistance-engine` using **Python 3.11**, **LangChain**, and **LangGraph** for agentic workflows. - **Communication Layer:** Established **gRPC** as the primary high-performance interface (Port 50051/50052). - **Knowledge Base:** Integration of **Elasticsearch 8.12** (`brunix-vector-db`) for AVAP technology RAG support. - **Observability Framework:** Deployment of **Langfuse** and **PostgreSQL** for full trace audit and cost management. - **Security:** Initial network isolation within Docker (`avap-network`) and production-ready secret management design. - From 39a9e7eaba4f31948aaaea7cebc8540d7f6b31ef Mon Sep 17 00:00:00 2001 From: Rafael Ruiz Date: Tue, 3 Mar 2026 13:34:22 -0800 Subject: [PATCH 4/9] Rename 'main' branch to 'online' in documentation Updated branch naming from 'main' to 'online' in CONTRIBUTING.md. --- CONTRIBUTING.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e106c98..b490e01 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,10 +25,10 @@ | Branch type | Naming convention | Purpose | |---|---|---| | Feature | `*-dev` | Active development — volatile, no CI validation | -| Main | `main` | Production-ready, fully validated | +| Main | `online` | Production-ready, fully validated | - **Feature branches** (`*-dev`) are volatile environments. No validation tests or infrastructure deployments are performed on these branches. -- **Official validation** only occurs after a documented Pull Request is merged into `main`. +- **Official validation** only occurs after a documented Pull Request is merged into `online`. - **Developer responsibility:** Code must be stable and functional against the authorized environment before a PR is opened. Do not use the PR review process as a debugging step. --- @@ -47,7 +47,7 @@ The project provides a validated, shared environment (Devaron Cluster, Vultr) in ### IDE Agnosticism -The `main` branch must remain neutral to any individual's development environment. The following **must not** be committed under any circumstance: +The `online` branch must remain neutral to any individual's development environment. The following **must not** be committed under any circumstance: - `.devcontainer/` - `.vscode/` From 86f426ae48316cade935f2024ff73754cda3994a Mon Sep 17 00:00:00 2001 From: Rafael Ruiz Date: Tue, 3 Mar 2026 13:35:27 -0800 Subject: [PATCH 5/9] Fix formatting of secret values warning in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae52878..69a7156 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ LANGFUSE_HOST=http://45.77.119.180 | `LANGFUSE_SECRET_KEY` | Yes | Langfuse project secret key | `sk-lf-...` | | `LANGFUSE_HOST` | Yes | Langfuse server endpoint (Devaron Cluster) | `http://45.77.119.180` | -> 🔒 Never commit real secret values. Use placeholder values when sharing configuration examples. +> Never commit real secret values. Use placeholder values when sharing configuration examples. ### 4. Infrastructure Tunnels Open a terminal and establish the connection to the Devaron Cluster: From 2d66266fd855165b4d57821cbd08b219a6441e63 Mon Sep 17 00:00:00 2001 From: rafa-ruiz Date: Wed, 4 Mar 2026 18:25:15 -0800 Subject: [PATCH 6/9] docs(core): add official AVAP documentation in Markdown --- .../AVAP.md | 735 +++++++++++ .../0_Accesos_EN_Accesos_EN.md | 155 +++ ...N_Administrar_solicitudes_KYC_(POST)_EN.md | 0 ...uarios_a_la_comunidad_de_un_afiliado_EN.md | 0 .../0_Alta_Admin_EN_Alta_Admin_EN.md | 0 ...tudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md | 0 .../0_Chat_Operador_EN_Chat_Operador_EN.md | 0 .../0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md | 380 ++++++ .../0_Communities_EN_Communities_EN.md | 17 + .../0_Comprar_Comprar_EN.md | 0 ...probar_el_importe_de_una_transaccion_EN.md | 150 +++ ...nfirmar_Ingreso_EN_Confirmar_Ingreso_EN.md | 0 ..._EN_Consultar_Saldo_Monedero_Prepago_EN.md | 0 ...e_Puntos_EN_Crear_Programa_de_Puntos_EN.md | 0 ...0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md | 0 ...X_Exchange_EN_Currencies_FX_Exchange_EN.md | 34 + ...board_Afiliado_EN_Dashboard_Afiliado_EN.md | 0 .../0_Datos_cuentas_EN_Datos_cuenta_EN.md | 0 ...sactivacion_de_una_cuenta_de_usuario_EN.md | 0 ...les_EN_Desplegar_condiciones_legales_EN.md | 0 ...ucion_desde_afiliado_o_administrador_EN.md | 0 ...atos_usuario_EN_Editar_datos_usuario_EN.md | 0 .../0_Entreorigenes_EN_Entreorigenes_EN.md | 0 ...ario_EN_Enviar_donacion_a_un_usuario_EN.md | 0 ...torico_de_Confirmaciones_de_Ingresos_EN.md | 0 .../0_Introduction.md | 26 + .../0_close_close.md | 174 +++ ...ad_101cli_copy_3_download_101cli copy 3.md | 26 + .../10_get_signature_get_signature.md | 156 +++ ...TED_KeyBindings_GET_STARTED_KeyBindings.md | 552 ++++++++ ..._and_tricks_GET_STARTED_Tips_and_tricks.md | 933 +++++++++++++ .../13_get_token_info_get_token_info.md | 0 ...d_transactions_get_vaulted_transactions.md | 0 ...tUSDGRAYcotization_getUSDGRAYcotization.md | 0 ...T_EN_Administrar_solicitudes_KYC_GET_EN.md | 0 ...EN_Agregar_usuarios_a_la_lista_negra_EN.md | 0 ...o_EN_Autorizar_carga_masiva_de_saldo_EN.md | 0 .../1_Billing_System.md | 78 ++ .../1_Chat_prebind_EN_Chat_prebind_EN.md | 0 .../1_Check_Session_EN_Check_Session_EN.md | 0 ...ultar_Solucion_EN_Consultar_Solucion_EN.md | 0 .../1_Crear_Solucion_EN_Crear_Solucion_EN.md | 0 ...e_Puntos_EN_Datos_Programa_de_Puntos_EN.md | 0 ..._EN_Desplegar_preguntas_de_seguridad_EN.md | 0 .../1_Enviar_SMS_EN_Enviar_SMS_EN.md | 0 ...EN_Historico_de_Ingresos_Tiempo_Aire_EN.md | 0 ...del_usuario_EN_actividad_del_usuario_EN.md | 0 ..._modificacion_alta_baja_modificacion_EN.md | 34 + .../1_comprobar_nick_EN_comprobar_nick_EN.md | 0 .../1_download_101cli_download_101cli.md | 26 + .../29_Facturation_Facturation_System_EN.md | 78 ++ ...tos_EN_Actualizar_Programa_de_Puntos_EN.md | 0 docs/developer.avapframework.com/2_Add_Ons.md | 48 + .../2_Add_Ons_EN_Add_Ons_EN.md | 48 + ...rizar_Solucion_EN_Autorizar_Solucion_EN.md | 0 .../2_Chat_Usuario_EN_Chat_Usuario_EN.md | 0 ...EN_Consultar_usuarios_de_la_solucion_EN.md | 0 ...thereum_account_create_ethereum_account.md | 0 ...por_email_EN_Enviar_Ticket_por_email_EN.md | 0 .../2_download_github_download_github.md | 26 + ...kchain_accounts_get_blockchain_accounts.md | 0 .../31_github_github_cli.md | 5 + .../32_indice_Indice de Servicios_EN.md | 17 + ...ice_Indice_de_Servicios_Documentados_EN.md | 17 + .../32_indice_Indice_de_Servicios_OLD_EN.md | 17 + .../33_informe_Informe_Consejo_EN.md | 0 ...3_informe_Informe_afiliados_con_tipo_EN.md | 0 .../33_informe_Informe_altas_EN.md | 0 .../33_informe_Informe_cuadro_de_mando_EN.md | 0 ..._informe_Informe_listado_de_usuarios_EN.md | 0 .../33_informe_Informe_numero_altas_EN.md | 0 ...informe_Informe_numero_transacciones_EN.md | 0 .../33_informe_Informe_operaciones_EN.md | 199 +++ .../33_informe_Informe_transacciones_EN.md | 0 .../34_Ingresar_Ingresar_Prepago_EN.md | 0 ...r_Ingreso_de_fondos_para_tiempo_aire_EN.md | 0 .../35_inter_inter_networks_movement.md | 0 .../35_inter_inter_networks_pool_stake.md | 0 .../35_inter_interfaz_servicios_pagos_EN.md | 0 .../36_last_last_order_summary.md | 344 +++++ ...Leer_Leer_notificaciones_del_usuario_EN.md | 0 ...er_Leer_una_notificacion_del_usuario_EN.md | 0 ...quidacion_Liquidaciones_de_Afiliados_EN.md | 0 ...a general de servicios sin catalogar_EN.md | 1 + ...ta_Listado_de_comisiones_de_afiliado_EN.md | 0 .../39_lista_Listado_de_divisas_EN.md | 215 +++ .../39_lista_Listado_de_movimientos_EN.md | 0 ...ta_Listado_de_movimientos_granemisor_EN.md | 165 +++ .../39_lista_Listado_de_solicitudes_KYC_EN.md | 0 ...lista_Listado_de_usuarios_bloqueados_EN.md | 0 ...a_Listado_de_usuarios_en_lista_negra_EN.md | 0 .../39_lista_Listar_Programa_de_Puntos_EN.md | 0 .../39_lista_Listar_Soluciones_EN.md | 0 ...star_Usuarios_del_Programa_de_Puntos_EN.md | 0 .../3_Currencies_And_Fx_Exchange.md | 25 + ...3_Envio_de_dinero_EN_Envio_de_dinero_EN.md | 0 ...kchain_networks_get_blockchain_networks.md | 0 .../40_logout_Logout_Services_EN.md | 0 .../40_logout_Logs_del_sistema_EN.md | 0 .../41_loyalty_Loyalty_Points_Exchange_EN.md | 29 + .../42_Marketplace_Marketplace_EN.md | 18 + .../developer.avapframework.com/43_new_new.md | 192 +++ ...ificaciones_no_leidas_por_el_usuario_EN.md | 0 ...btener_Obtener_Afiliados_del_sistema_EN.md | 178 +++ ..._Obtener_Obtener_Campos_Alta_Cliente_EN.md | 0 .../45_Obtener_Obtener_Campos_Nivel_KYC_EN.md | 0 ..._Obtener_Obtener_Operadores_del_pais_EN.md | 150 +++ .../45_Obtener_Obtener_Paises_Activos_EN.md | 225 ++++ ..._Obtener_Obtener_Perfiles_de_Usuario_EN.md | 163 +++ ..._Obtener_Obtener_Provincias_del_pais_EN.md | 150 +++ .../45_Obtener_Obtener_Shake_4_EN.md | 0 .../45_Obtener_Obtener_Shake_v2_3_EN.md | 0 .../45_Obtener_Obtener_Shake_v2_EN.md | 0 .../45_Obtener_Obtener_Shakes_EN.md | 0 ...tener_caracteristicas_de_un_servicio_EN.md | 164 +++ .../45_Obtener_Obtener_datos_usuario_EN.md | 0 ...Obtener_imagen_del_perfil_de_usuario_EN.md | 0 .../45_Obtener_Obtener_info_usuario_EN.md | 173 +++ ...reguntas_de_seguridad_del_usuario_EN(1).md | 151 +++ ...r_preguntas_de_seguridad_del_usuario_EN.md | 0 ...er_todos_los_datos_de_la_transaccion_EN.md | 330 +++++ .../46_Operaciones_Operaciones_EN.md | 0 .../47_Odern_Orden_de_cargo_EN.md | 0 .../47_Odern_order_history_summary.md | 380 ++++++ .../48_origenes_origenes_de_fondos_EN.md | 166 +++ .../49_overview_OVERVIEW.md | 58 + .../4_Anexo_EN_Anexo_EN.md | 18 + .../4_Communities.md | 17 + ...onado_EN_Envio_de_dinero_Impersonado_EN.md | 0 ...mminsioned_users_get_comminsioned_users.md | 0 .../50_pago_Pago_diferido_EN.md | 0 .../51_Plans_Plans_Wallet_EN.md | 16 + ...s_Precios_de_los_distintos_servicios_EN.md | 197 +++ .../53_Procesar_Procesar_SMS_EN.md | 0 ...eactivacion_de_una_cuenta_de_usuario_EN.md | 0 .../55_Recarga_Recarga_de_dinero_EN.md | 0 ...56_rechazar_Rechazar_solicitudes_KYC_EN.md | 0 ...eenviar_Reenviar_el_OTP_para_el_alta_EN.md | 0 ...rar_Regenerar_contrasena_del_usuario_EN.md | 0 ...Registrar_Registrar_Monedero_Prepago_EN.md | 0 ...ero_masiva_EN_Envio_de_dinero_masiva_EN.md | 0 .../5_Marketplace.md | 18 + .../60_Remesa_Remesa_dirigida_EN.md | 0 .../62_repetir_repetir_transaccion_EN.md | 0 ...sumen_de_las_comisiones_del_afiliado_EN.md | 0 .../64_Retirar_Retirar_EN.md | 0 .../64_Retirar_Retirar_Prepago_EN.md | 0 .../64_Retirar_Retirar_a_Banco_EN.md | 0 .../64_Retirar_Retirar_a_Tarjeta_EN.md | 0 .../64_Retirar_Retiro_en_cajero_EN.md | 0 .../65_rider_rider_order_management.md | 404 ++++++ .../66_Saldo_Saldo_Usuario_a_Fecha_EN.md | 0 .../66_Saldo_Saldo_de_la_cuenta_EN.md | 0 .../68_servicio_Servicio_Tiempo_Aire_EN.md | 0 ...rvicio_Servicio_de_Alta_de_Afiliados_EN.md | 0 .../68_servicio_Servicio_de_Firma_EN.md | 230 ++++ ...o_de_cambiar_el_perfil_de_un_usuario_EN.md | 0 ...o_de_configuracion_obtener_condicion_EN.md | 0 ...Servicio_de_desbloqueo_de_un_usuario_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Mover)_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Poner)_EN.md | 0 ...icio_de_edicion_de_perfiles_(Quitar)_EN.md | 0 ...rvicio_de_edicion_de_perfiles_Copiar_EN.md | 0 ..._Servicio_de_edicion_de_perfiles_GET_EN.md | 0 ...vicio_de_notificaciones_Borrar_Grupo_EN.md | 0 ...cio_Servicio_de_notificaciones_Crear_EN.md | 0 ...rvicio_de_notificaciones_Crear_Grupo_EN.md | 11 + ...vicio_de_notificaciones_Listar_Envia_EN.md | 0 ...vicio_de_notificaciones_Listar_Grupo_EN.md | 0 ...io_de_notificaciones_Modificar_Grupo_EN.md | 0 ...vision_de_origenes_de_fondos_aprobar_EN.md | 0 ...vision_de_origenes_de_fondos_obtener_EN.md | 0 ...ision_de_origenes_de_fondos_rechazar_EN.md | 0 ...t_SETUP_Additional components and tools.md | 51 + .../69_set_SETUP_Enterprise.md | 43 + .../69_set_SETUP_Linux.md | 419 ++++++ .../69_set_SETUP_MacOS.md | 107 ++ .../69_set_SETUP_Network.md | 131 ++ .../69_set_SETUP_Overview.md | 119 ++ .../69_set_SETUP_RaspberryPi.md | 66 + .../69_set_SETUP_Uninstall.md | 79 ++ .../69_set_SETUP_Windows.md | 119 ++ .../69_set_set_blockchain_accout_selected.md | 176 +++ .../69_set_set_blokchain_network.md | 0 ...el_Transaction_EN_Cancel_Transaction_EN.md | 0 ...6_Envio_de_regalo_EN_Envio_de_regalo_EN.md | 0 .../6_How_To_Work_With_Point_Redemption.md | 29 + ...icitar_Solicitar_subida_de_nivel_KYC_EN.md | 0 .../70_solicitar_Solicitud_de_dinero_EN.md | 0 ...URCE_SOURCE_CONTROL_CollaborateOnGitHub.md | 371 ++++++ .../71_SOURCE_SOURCE_CONTROL_FAQ.md | 153 +++ ...SOURCE_SOURCE_CONTROL_IntroductionToGit.md | 213 +++ .../71_SOURCE_SOURCE_CONTROL_Overview.md | 345 +++++ .../72_spei_spei_EN.md | 0 ...n_Subir_imagen_del_perfil_de_usuario_EN.md | 0 .../75_Terminal_TERMINAL_Advanced.md | 334 +++++ .../75_Terminal_TERMINAL_Appearance.md | 234 ++++ .../75_Terminal_TERMINAL_Shell_Integration.md | 372 ++++++ .../75_Terminal_TERMINAL_TerminalBasics.md | 587 +++++++++ .../75_Terminal_TERMINAL_TerminalProfiles.md | 315 +++++ .../76_Transacciones_Transacciones_EN.md | 0 .../76_Transacciones_Transaction_search_EN.md | 0 ...cia_Transferencias_masivas_de_dinero_EN.md | 0 .../78_unvault_unvault.md | 0 .../79_UserGUIDE_USER_GUIDE-BasicEditing.md | 548 ++++++++ .../79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md | 317 +++++ .../79_UserGUIDE_USER_GUIDE_Accesibility.md | 362 ++++++ .../79_UserGUIDE_USER_GUIDE_CodeNavigation.md | 288 ++++ ...erGUIDE_USER_GUIDE_CommandLineInterface.md | 191 +++ .../79_UserGUIDE_USER_GUIDE_CustomLayout.md | 324 +++++ .../79_UserGUIDE_USER_GUIDE_Debugging.md | 698 ++++++++++ .../79_UserGUIDE_USER_GUIDE_Emmet.md | 376 ++++++ ...erGUIDE_USER_GUIDE_ExtensionMarketplace.md | 532 ++++++++ .../79_UserGUIDE_USER_GUIDE_IntelliSense.md | 324 +++++ ...serGUIDE_USER_GUIDE_MultiRootWorkspaces.md | 423 ++++++ .../79_UserGUIDE_USER_GUIDE_Profiles.md | 535 ++++++++ .../79_UserGUIDE_USER_GUIDE_Refactoring.md | 156 +++ .../79_UserGUIDE_USER_GUIDE_SettingsSync.md | 297 +++++ .../79_UserGUIDE_USER_GUIDE_Snippets.md | 392 ++++++ .../79_UserGUIDE_USER_GUIDE_Tasks.md | 1155 +++++++++++++++++ .../79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md | 365 ++++++ ...or_EN_Carga_masiva_de_saldo_operador_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 180 +++ .../7_Plan_Wallets.md | 16 + .../7_get_gasprices_get_gasprices.md | 0 .../80_Usuarios_Usuarios_con_saldo_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 195 +++ .../82_vault_vault.md | 0 .../83_vs_api_vs_api_completion.md | 24 + .../83_vs_api_vs_api_extension.md | 24 + .../8_Encrypted_Nodes_Or_Projects.md | 0 .../9_get_pools_get_pools.md | 0 .../developer.avapframework.com/Accesos_EN.md | 155 +++ .../Actualizar_Programa_de_Puntos_EN.md | 0 .../developer.avapframework.com/Add_Ons_EN.md | 48 + .../Administrar_solicitudes_KYC_(POST)_EN.md | 0 .../Administrar_solicitudes_KYC_GET_EN.md | 0 ...uarios_a_la_comunidad_de_un_afiliado_EN.md | 0 .../Agregar_usuarios_a_la_lista_negra_EN.md | 0 .../Alta_Admin_EN.md | 0 docs/developer.avapframework.com/Anexo_EN.md | 18 + .../Aprobar_solicitudes_KYC_EN.md | 0 .../Autorizar_Solucion_EN.md | 0 .../Autorizar_carga_masiva_de_saldo_EN.md | 0 .../Cancel_Transaction_EN.md | 0 .../Carga_masiva_de_saldo_operador_EN.md | 0 .../Chat_Operador_EN.md | 0 .../Chat_Usuario_EN.md | 0 .../Chat_prebind_EN.md | 0 .../Check_Session_EN.md | 0 .../Ciphered_Nodes_EN.md | 380 ++++++ .../Communities_EN.md | 17 + .../developer.avapframework.com/Comprar_EN.md | 0 ...probar_el_importe_de_una_transaccion_EN.md | 150 +++ .../Confirmar_Ingreso_EN.md | 0 .../Consultar_Saldo_Monedero_Prepago_EN.md | 0 .../Consultar_Solucion_EN.md | 0 .../Consultar_usuarios_de_la_solucion_EN.md | 0 .../Crear_Programa_de_Puntos_EN.md | 0 .../Crear_Solucion_EN.md | 0 .../Cuadro_de_mando_EN.md | 0 .../Currencies_FX_Exchange_EN.md | 34 + .../Dashboard_Afiliado_EN.md | 0 .../Datos_Programa_de_Puntos_EN.md | 0 .../Datos_cuenta_EN.md | 0 ...sactivacion_de_una_cuenta_de_usuario_EN.md | 0 .../Desplegar_condiciones_legales_EN.md | 0 .../Desplegar_preguntas_de_seguridad_EN.md | 0 ...ucion_desde_afiliado_o_administrador_EN.md | 0 .../Editar_datos_usuario_EN.md | 0 .../Entreorigenes_EN.md | 0 .../Enviar_SMS_EN.md | 0 .../Enviar_Ticket_por_email_EN.md | 0 .../Enviar_donacion_a_un_usuario_EN.md | 0 .../Envio_de_dinero_EN.md | 0 .../Envio_de_dinero_Impersonado_EN.md | 0 .../Envio_de_dinero_masiva_EN.md | 0 .../Envio_de_regalo_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 180 +++ .../Facturation_System_EN.md | 78 ++ .../GET_STARTED_KeyBindings.md | 552 ++++++++ .../GET_STARTED_Tips_and_tricks.md | 933 +++++++++++++ ...torico_de_Confirmaciones_de_Ingresos_EN.md | 0 .../Historico_de_Ingresos_Tiempo_Aire_EN.md | 0 .../Indice de Servicios_EN.md | 17 + .../Indice_de_Servicios_Documentados_EN.md | 17 + .../Indice_de_Servicios_OLD_EN.md | 17 + .../Informe_Consejo_EN.md | 0 .../Informe_afiliados_con_tipo_EN.md | 0 .../Informe_altas_EN.md | 0 .../Informe_cuadro_de_mando_EN.md | 0 .../Informe_listado_de_usuarios_EN.md | 0 .../Informe_numero_altas_EN.md | 0 .../Informe_numero_transacciones_EN.md | 0 .../Informe_operaciones_EN.md | 199 +++ .../Informe_transacciones_EN.md | 0 .../Ingresar_Prepago_EN.md | 0 .../Ingreso_de_fondos_para_tiempo_aire_EN.md | 0 .../Leer_notificaciones_del_usuario_EN.md | 0 .../Leer_una_notificacion_del_usuario_EN.md | 0 .../Liquidaciones_de_Afiliados_EN.md | 0 ...a general de servicios sin catalogar_EN.md | 1 + .../Listado_de_comisiones_de_afiliado_EN.md | 0 .../Listado_de_divisas_EN.md | 215 +++ .../Listado_de_movimientos_EN.md | 0 .../Listado_de_movimientos_granemisor_EN.md | 165 +++ .../Listado_de_solicitudes_KYC_EN.md | 0 .../Listado_de_usuarios_bloqueados_EN.md | 0 .../Listado_de_usuarios_en_lista_negra_EN.md | 0 .../Listar_Programa_de_Puntos_EN.md | 0 .../Listar_Soluciones_EN.md | 0 ...star_Usuarios_del_Programa_de_Puntos_EN.md | 0 .../Logout_Services_EN.md | 0 .../Logs_del_sistema_EN.md | 0 .../Loyalty_Points_Exchange_EN.md | 29 + .../Marketplace_EN.md | 18 + ...ificaciones_no_leidas_por_el_usuario_EN.md | 0 docs/developer.avapframework.com/OVERVIEW.md | 58 + .../Obtener_Afiliados_del_sistema_EN.md | 178 +++ .../Obtener_Campos_Alta_Cliente_EN.md | 0 .../Obtener_Campos_Nivel_KYC_EN.md | 0 .../Obtener_Operadores_del_pais_EN.md | 150 +++ .../Obtener_Paises_Activos_EN.md | 225 ++++ .../Obtener_Perfiles_de_Usuario_EN.md | 163 +++ .../Obtener_Provincias_del_pais_EN.md | 150 +++ .../Obtener_Shake_4_EN.md | 0 .../Obtener_Shake_v2_3_EN.md | 0 .../Obtener_Shake_v2_EN.md | 0 .../Obtener_Shakes_EN.md | 0 ...tener_caracteristicas_de_un_servicio_EN.md | 164 +++ .../Obtener_datos_usuario_EN.md | 0 ...Obtener_imagen_del_perfil_de_usuario_EN.md | 0 .../Obtener_info_usuario_EN.md | 173 +++ ...reguntas_de_seguridad_del_usuario_EN(1).md | 151 +++ ...r_preguntas_de_seguridad_del_usuario_EN.md | 0 ...er_todos_los_datos_de_la_transaccion_EN.md | 330 +++++ .../Operaciones_EN.md | 0 .../Orden_de_cargo_EN.md | 0 .../Pago_diferido_EN.md | 0 .../Plans_Wallet_EN.md | 16 + .../Precios_de_los_distintos_servicios_EN.md | 197 +++ .../Procesar_SMS_EN.md | 0 ...eactivacion_de_una_cuenta_de_usuario_EN.md | 0 .../Recarga_de_dinero_EN.md | 0 .../Rechazar_solicitudes_KYC_EN.md | 0 .../Reenviar_el_OTP_para_el_alta_EN.md | 0 .../Regenerar_contrasena_del_usuario_EN.md | 0 .../Registrar_Monedero_Prepago_EN.md | 0 .../Remesa_dirigida_EN.md | 0 ...sumen_de_las_comisiones_del_afiliado_EN.md | 0 .../developer.avapframework.com/Retirar_EN.md | 0 .../Retirar_Prepago_EN.md | 0 .../Retirar_a_Banco_EN.md | 0 .../Retirar_a_Tarjeta_EN.md | 0 .../Retiro_en_cajero_EN.md | 0 .../SETUP_Additional components and tools.md | 51 + .../SETUP_Enterprise.md | 43 + .../SETUP_Linux.md | 419 ++++++ .../SETUP_MacOS.md | 107 ++ .../SETUP_Network.md | 131 ++ .../SETUP_Overview.md | 119 ++ .../SETUP_RaspberryPi.md | 66 + .../SETUP_Uninstall.md | 79 ++ .../SETUP_Windows.md | 119 ++ .../SOURCE_CONTROL_CollaborateOnGitHub.md | 371 ++++++ .../SOURCE_CONTROL_FAQ.md | 153 +++ .../SOURCE_CONTROL_IntroductionToGit.md | 213 +++ .../SOURCE_CONTROL_Overview.md | 345 +++++ .../Saldo_Usuario_a_Fecha_EN.md | 0 .../Saldo_de_la_cuenta_EN.md | 0 .../Servicio_Tiempo_Aire_EN.md | 0 .../Servicio_de_Alta_de_Afiliados_EN.md | 0 .../Servicio_de_Firma_EN.md | 230 ++++ ...o_de_cambiar_el_perfil_de_un_usuario_EN.md | 0 ...o_de_configuracion_obtener_condicion_EN.md | 0 ...Servicio_de_desbloqueo_de_un_usuario_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Mover)_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Poner)_EN.md | 0 ...icio_de_edicion_de_perfiles_(Quitar)_EN.md | 0 ...rvicio_de_edicion_de_perfiles_Copiar_EN.md | 0 .../Servicio_de_edicion_de_perfiles_GET_EN.md | 0 ...vicio_de_notificaciones_Borrar_Grupo_EN.md | 0 .../Servicio_de_notificaciones_Crear_EN.md | 0 ...rvicio_de_notificaciones_Crear_Grupo_EN.md | 11 + ...vicio_de_notificaciones_Listar_Envia_EN.md | 0 ...vicio_de_notificaciones_Listar_Grupo_EN.md | 0 ...io_de_notificaciones_Modificar_Grupo_EN.md | 0 ...vision_de_origenes_de_fondos_aprobar_EN.md | 0 ...vision_de_origenes_de_fondos_obtener_EN.md | 0 ...ision_de_origenes_de_fondos_rechazar_EN.md | 0 .../Solicitar_subida_de_nivel_KYC_EN.md | 0 .../Solicitud_de_dinero_EN.md | 0 .../Subir_imagen_del_perfil_de_usuario_EN.md | 0 .../TERMINAL_Advanced.md | 334 +++++ .../TERMINAL_Appearance.md | 234 ++++ .../TERMINAL_Shell_Integration.md | 372 ++++++ .../TERMINAL_TerminalBasics.md | 587 +++++++++ .../TERMINAL_TerminalProfiles.md | 315 +++++ .../Transacciones_EN.md | 0 .../Transaction_search_EN.md | 0 .../Transferencias_masivas_de_dinero_EN.md | 0 .../USER_GUIDE-BasicEditing.md | 548 ++++++++ .../USER_GUIDE_AVAPforTheWeb.md | 317 +++++ .../USER_GUIDE_Accesibility.md | 362 ++++++ .../USER_GUIDE_CodeNavigation.md | 288 ++++ .../USER_GUIDE_CommandLineInterface.md | 191 +++ .../USER_GUIDE_CustomLayout.md | 324 +++++ .../USER_GUIDE_Debugging.md | 698 ++++++++++ .../USER_GUIDE_Emmet.md | 376 ++++++ .../USER_GUIDE_ExtensionMarketplace.md | 532 ++++++++ .../USER_GUIDE_IntelliSense.md | 324 +++++ .../USER_GUIDE_MultiRootWorkspaces.md | 423 ++++++ .../USER_GUIDE_Profiles.md | 535 ++++++++ .../USER_GUIDE_Refactoring.md | 156 +++ .../USER_GUIDE_SettingsSync.md | 297 +++++ .../USER_GUIDE_Snippets.md | 392 ++++++ .../USER_GUIDE_Tasks.md | 1155 +++++++++++++++++ .../USER_GUIDE_WorkspaceTrust.md | 365 ++++++ .../Usuarios_con_saldo_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 195 +++ .../actividad_del_usuario_EN.md | 0 .../alta_baja_modificacion_EN.md | 34 + .../appendices_1.md | 1 + .../appendices_10.md | 32 + .../appendices_11.md | 33 + .../appendices_12.md | 33 + .../appendices_13.md | 38 + .../appendices_14.md | 32 + .../appendices_15.md | 31 + .../appendices_16.md | 23 + .../appendices_17.md | 34 + .../appendices_18.md | 32 + .../appendices_19.md | 28 + .../appendices_2.md | 21 + .../appendices_20.md | 37 + .../appendices_21.md | 32 + .../appendices_22.md | 36 + .../appendices_23.md | 30 + .../appendices_24.md | 30 + .../appendices_3.md | 31 + .../appendices_4.md | 31 + .../appendices_5.md | 25 + .../appendices_6.md | 38 + .../appendices_7.md | 22 + .../appendices_8.md | 22 + .../appendices_9.md | 33 + .../avap_gateway_advanced_doc.md | 0 .../avap_language_server_doc.md | 0 .../avap_virtual_server_doc.md | 0 .../chapter10_1.md | 1 + .../chapter10_2.md | 13 + .../chapter10_3.md | 22 + .../chapter10_4.md | 12 + .../chapter10_5.md | 3 + .../chapter11_1.md | 1 + .../chapter11_2.md | 13 + .../chapter11_3.md | 8 + .../chapter11_4.md | 16 + .../chapter11_5.md | 14 + .../chapter12_1.md | 5 + .../chapter14_1.md | 3 + .../chapter14_2.md | 24 + .../chapter14_3.md | 6 + .../chapter14_4.md | 26 + .../chapter14_5.md | 3 + .../developer.avapframework.com/chapter1_1.md | 0 .../developer.avapframework.com/chapter1_2.md | 4 + .../developer.avapframework.com/chapter1_3.md | 8 + .../developer.avapframework.com/chapter1_4.md | 0 .../developer.avapframework.com/chapter1_5.md | 0 .../developer.avapframework.com/chapter1_6.md | 12 + .../developer.avapframework.com/chapter1_7.md | 8 + .../developer.avapframework.com/chapter1_8.md | 5 + .../developer.avapframework.com/chapter2_1.md | 6 + .../developer.avapframework.com/chapter2_2.md | 8 + .../developer.avapframework.com/chapter2_3.md | 0 .../developer.avapframework.com/chapter2_4.md | 0 .../developer.avapframework.com/chapter2_5.md | 0 .../developer.avapframework.com/chapter2_6.md | 0 .../developer.avapframework.com/chapter3_1.md | 3 + .../developer.avapframework.com/chapter3_2.md | 9 + .../developer.avapframework.com/chapter3_3.md | 7 + .../developer.avapframework.com/chapter3_4.md | 35 + .../developer.avapframework.com/chapter3_5.md | 0 .../developer.avapframework.com/chapter3_6.md | 5 + .../developer.avapframework.com/chapter4_1.md | 3 + .../developer.avapframework.com/chapter4_2.md | 12 + .../developer.avapframework.com/chapter4_3.md | 8 + .../developer.avapframework.com/chapter4_4.md | 0 .../developer.avapframework.com/chapter4_5.md | 0 .../developer.avapframework.com/chapter4_6.md | 0 .../developer.avapframework.com/chapter5_1.md | 0 .../chapter5_10.md | 0 .../chapter5_11.md | 0 .../chapter5_12.md | 0 .../developer.avapframework.com/chapter5_2.md | 0 .../developer.avapframework.com/chapter5_3.md | 0 .../developer.avapframework.com/chapter5_4.md | 0 .../developer.avapframework.com/chapter5_5.md | 0 .../developer.avapframework.com/chapter5_6.md | 0 .../developer.avapframework.com/chapter5_7.md | 0 .../developer.avapframework.com/chapter5_8.md | 0 .../developer.avapframework.com/chapter5_9.md | 0 .../developer.avapframework.com/chapter6_1.md | 0 .../chapter6_10.md | 0 .../developer.avapframework.com/chapter6_2.md | 0 .../developer.avapframework.com/chapter6_3.md | 0 .../developer.avapframework.com/chapter6_4.md | 0 .../developer.avapframework.com/chapter6_5.md | 0 .../developer.avapframework.com/chapter6_6.md | 0 .../developer.avapframework.com/chapter6_7.md | 0 .../developer.avapframework.com/chapter6_8.md | 0 .../developer.avapframework.com/chapter6_9.md | 0 .../developer.avapframework.com/chapter7_1.md | 12 + .../developer.avapframework.com/chapter7_2.md | 10 + .../developer.avapframework.com/chapter7_3.md | 9 + .../developer.avapframework.com/chapter7_4.md | 15 + .../developer.avapframework.com/chapter7_5.md | 8 + .../developer.avapframework.com/chapter7_6.md | 5 + .../developer.avapframework.com/chapter8_1.md | 4 + .../developer.avapframework.com/chapter8_2.md | 10 + .../developer.avapframework.com/chapter8_3.md | 9 + .../developer.avapframework.com/chapter8_4.md | 25 + .../developer.avapframework.com/chapter8_5.md | 14 + .../developer.avapframework.com/chapter8_6.md | 5 + docs/developer.avapframework.com/close.md | 174 +++ .../comprobar_nick_EN.md | 0 .../create_ethereum_account.md | 0 .../d10_gs_developer_token.md | 0 .../d11_gs_msvc_extensions.md | 0 .../d12_gs_collaborative.md | 0 .../d13_gs_cloud.md | 0 .../d14_gs_infrastructure_avs.md | 0 .../d15_gs_avapcli.md | 0 .../d16_gs_avapavs.md | 0 .../d17_gs_samples-hello.md | 0 .../d17_gs_samples-login.md | 0 .../d18_gs_samples-loop.md | 0 .../d18_gs_samples-orm-access.md | 0 .../d18_gs_samples-orm-request.md | 0 .../d2_software_downloads.md | 0 .../d3_gs_avap_id.md | 0 .../d3_gs_avap_vcex.md | 32 + .../d4_gs_organizations.md | 57 + .../d5_gs_teams.md | 0 .../d6_gs_ambients.md | 0 .../d7_gs_api_products.md | 0 .../d8_gs_api_projects.md | 0 .../d9_gs_my_first_api.md | 0 .../download_101cli copy 3.md | 26 + .../download_101cli.md | 26 + .../download_github.md | 26 + .../getUSDGRAYcotization.md | 0 .../get_blockchain_accounts.md | 0 .../get_blockchain_networks.md | 0 .../get_comminsioned_users.md | 0 .../get_gasprices.md | 0 docs/developer.avapframework.com/get_pools.md | 0 .../get_signature.md | 156 +++ .../get_token_info.md | 0 .../get_vaulted_transactions.md | 0 .../developer.avapframework.com/github_cli.md | 5 + .../how_to_publish.md | 0 .../inter_networks_movement.md | 0 .../inter_networks_pool_stake.md | 0 .../interfaz_servicios_pagos_EN.md | 0 docs/developer.avapframework.com/intro1.md | 3 + docs/developer.avapframework.com/intro10.md | 0 docs/developer.avapframework.com/intro11.md | 0 docs/developer.avapframework.com/intro12.md | 0 docs/developer.avapframework.com/intro13.md | 0 docs/developer.avapframework.com/intro14.md | 0 docs/developer.avapframework.com/intro2.md | 0 docs/developer.avapframework.com/intro3.md | 0 docs/developer.avapframework.com/intro4.md | 0 docs/developer.avapframework.com/intro5.md | 0 docs/developer.avapframework.com/intro6.md | 0 docs/developer.avapframework.com/intro7.md | 3 + docs/developer.avapframework.com/intro8.md | 0 docs/developer.avapframework.com/intro9.md | 0 .../last_order_summary.md | 344 +++++ docs/developer.avapframework.com/new.md | 192 +++ .../order_history_summary.md | 380 ++++++ .../origenes_de_fondos_EN.md | 166 +++ .../repetir_transaccion_EN.md | 0 .../rider_order_management.md | 404 ++++++ .../set_blockchain_accout_selected.md | 176 +++ .../set_blokchain_network.md | 0 docs/developer.avapframework.com/spei_EN.md | 0 docs/developer.avapframework.com/unvault.md | 0 docs/developer.avapframework.com/vault.md | 0 .../vs_api_completion.md | 24 + .../vs_api_extension.md | 24 + 593 files changed, 40445 insertions(+) create mode 100644 docs/AVAP Language: Core Commands & Functional Specification/AVAP.md create mode 100644 docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md create mode 100644 docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md create mode 100644 docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md create mode 100644 docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md create mode 100644 docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md create mode 100644 docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md create mode 100644 docs/developer.avapframework.com/0_Comprar_Comprar_EN.md create mode 100644 docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md create mode 100644 docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md create mode 100644 docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md create mode 100644 docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md create mode 100644 docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md create mode 100644 docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md create mode 100644 docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md create mode 100644 docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md create mode 100644 docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md create mode 100644 docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md create mode 100644 docs/developer.avapframework.com/0_Introduction.md create mode 100644 docs/developer.avapframework.com/0_close_close.md create mode 100644 docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md create mode 100644 docs/developer.avapframework.com/10_get_signature_get_signature.md create mode 100644 docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md create mode 100644 docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md create mode 100644 docs/developer.avapframework.com/13_get_token_info_get_token_info.md create mode 100644 docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md create mode 100644 docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md create mode 100644 docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md create mode 100644 docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md create mode 100644 docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md create mode 100644 docs/developer.avapframework.com/1_Billing_System.md create mode 100644 docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md create mode 100644 docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md create mode 100644 docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md create mode 100644 docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md create mode 100644 docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md create mode 100644 docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md create mode 100644 docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md create mode 100644 docs/developer.avapframework.com/1_download_101cli_download_101cli.md create mode 100644 docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md create mode 100644 docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/2_Add_Ons.md create mode 100644 docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md create mode 100644 docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md create mode 100644 docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md create mode 100644 docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md create mode 100644 docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md create mode 100644 docs/developer.avapframework.com/2_download_github_download_github.md create mode 100644 docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md create mode 100644 docs/developer.avapframework.com/31_github_github_cli.md create mode 100644 docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md create mode 100644 docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md create mode 100644 docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_altas_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md create mode 100644 docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md create mode 100644 docs/developer.avapframework.com/35_inter_inter_networks_movement.md create mode 100644 docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md create mode 100644 docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md create mode 100644 docs/developer.avapframework.com/36_last_last_order_summary.md create mode 100644 docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md create mode 100644 docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md create mode 100644 docs/developer.avapframework.com/40_logout_Logout_Services_EN.md create mode 100644 docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md create mode 100644 docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md create mode 100644 docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md create mode 100644 docs/developer.avapframework.com/43_new_new.md create mode 100644 docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md create mode 100644 docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md create mode 100644 docs/developer.avapframework.com/47_Odern_order_history_summary.md create mode 100644 docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md create mode 100644 docs/developer.avapframework.com/49_overview_OVERVIEW.md create mode 100644 docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md create mode 100644 docs/developer.avapframework.com/4_Communities.md create mode 100644 docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md create mode 100644 docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md create mode 100644 docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md create mode 100644 docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md create mode 100644 docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md create mode 100644 docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md create mode 100644 docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md create mode 100644 docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md create mode 100644 docs/developer.avapframework.com/5_Marketplace.md create mode 100644 docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md create mode 100644 docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md create mode 100644 docs/developer.avapframework.com/65_rider_rider_order_management.md create mode 100644 docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md create mode 100644 docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Enterprise.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Linux.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_MacOS.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Network.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Overview.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Uninstall.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Windows.md create mode 100644 docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md create mode 100644 docs/developer.avapframework.com/69_set_set_blokchain_network.md create mode 100644 docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md create mode 100644 docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md create mode 100644 docs/developer.avapframework.com/6_How_To_Work_With_Point_Redemption.md create mode 100644 docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md create mode 100644 docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md create mode 100644 docs/developer.avapframework.com/72_spei_spei_EN.md create mode 100644 docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalProfiles.md create mode 100644 docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md create mode 100644 docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md create mode 100644 docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/78_unvault_unvault.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md create mode 100644 docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md create mode 100644 docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md create mode 100644 docs/developer.avapframework.com/7_Plan_Wallets.md create mode 100644 docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md create mode 100644 docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md create mode 100644 docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md create mode 100644 docs/developer.avapframework.com/82_vault_vault.md create mode 100644 docs/developer.avapframework.com/83_vs_api_vs_api_completion.md create mode 100644 docs/developer.avapframework.com/83_vs_api_vs_api_extension.md create mode 100644 docs/developer.avapframework.com/8_Encrypted_Nodes_Or_Projects.md create mode 100644 docs/developer.avapframework.com/9_get_pools_get_pools.md create mode 100644 docs/developer.avapframework.com/Accesos_EN.md create mode 100644 docs/developer.avapframework.com/Actualizar_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/Add_Ons_EN.md create mode 100644 docs/developer.avapframework.com/Administrar_solicitudes_KYC_(POST)_EN.md create mode 100644 docs/developer.avapframework.com/Administrar_solicitudes_KYC_GET_EN.md create mode 100644 docs/developer.avapframework.com/Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/Agregar_usuarios_a_la_lista_negra_EN.md create mode 100644 docs/developer.avapframework.com/Alta_Admin_EN.md create mode 100644 docs/developer.avapframework.com/Anexo_EN.md create mode 100644 docs/developer.avapframework.com/Aprobar_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/Autorizar_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/Autorizar_carga_masiva_de_saldo_EN.md create mode 100644 docs/developer.avapframework.com/Cancel_Transaction_EN.md create mode 100644 docs/developer.avapframework.com/Carga_masiva_de_saldo_operador_EN.md create mode 100644 docs/developer.avapframework.com/Chat_Operador_EN.md create mode 100644 docs/developer.avapframework.com/Chat_Usuario_EN.md create mode 100644 docs/developer.avapframework.com/Chat_prebind_EN.md create mode 100644 docs/developer.avapframework.com/Check_Session_EN.md create mode 100644 docs/developer.avapframework.com/Ciphered_Nodes_EN.md create mode 100644 docs/developer.avapframework.com/Communities_EN.md create mode 100644 docs/developer.avapframework.com/Comprar_EN.md create mode 100644 docs/developer.avapframework.com/Comprobar_el_importe_de_una_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/Confirmar_Ingreso_EN.md create mode 100644 docs/developer.avapframework.com/Consultar_Saldo_Monedero_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/Consultar_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/Consultar_usuarios_de_la_solucion_EN.md create mode 100644 docs/developer.avapframework.com/Crear_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/Crear_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/Cuadro_de_mando_EN.md create mode 100644 docs/developer.avapframework.com/Currencies_FX_Exchange_EN.md create mode 100644 docs/developer.avapframework.com/Dashboard_Afiliado_EN.md create mode 100644 docs/developer.avapframework.com/Datos_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/Datos_cuenta_EN.md create mode 100644 docs/developer.avapframework.com/Desactivacion_de_una_cuenta_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Desplegar_condiciones_legales_EN.md create mode 100644 docs/developer.avapframework.com/Desplegar_preguntas_de_seguridad_EN.md create mode 100644 docs/developer.avapframework.com/Devolucion_desde_afiliado_o_administrador_EN.md create mode 100644 docs/developer.avapframework.com/Editar_datos_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Entreorigenes_EN.md create mode 100644 docs/developer.avapframework.com/Enviar_SMS_EN.md create mode 100644 docs/developer.avapframework.com/Enviar_Ticket_por_email_EN.md create mode 100644 docs/developer.avapframework.com/Enviar_donacion_a_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Envio_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/Envio_de_dinero_Impersonado_EN.md create mode 100644 docs/developer.avapframework.com/Envio_de_dinero_masiva_EN.md create mode 100644 docs/developer.avapframework.com/Envio_de_regalo_EN.md create mode 100644 docs/developer.avapframework.com/Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md create mode 100644 docs/developer.avapframework.com/Facturation_System_EN.md create mode 100644 docs/developer.avapframework.com/GET_STARTED_KeyBindings.md create mode 100644 docs/developer.avapframework.com/GET_STARTED_Tips_and_tricks.md create mode 100644 docs/developer.avapframework.com/Historico_de_Confirmaciones_de_Ingresos_EN.md create mode 100644 docs/developer.avapframework.com/Historico_de_Ingresos_Tiempo_Aire_EN.md create mode 100644 docs/developer.avapframework.com/Indice de Servicios_EN.md create mode 100644 docs/developer.avapframework.com/Indice_de_Servicios_Documentados_EN.md create mode 100644 docs/developer.avapframework.com/Indice_de_Servicios_OLD_EN.md create mode 100644 docs/developer.avapframework.com/Informe_Consejo_EN.md create mode 100644 docs/developer.avapframework.com/Informe_afiliados_con_tipo_EN.md create mode 100644 docs/developer.avapframework.com/Informe_altas_EN.md create mode 100644 docs/developer.avapframework.com/Informe_cuadro_de_mando_EN.md create mode 100644 docs/developer.avapframework.com/Informe_listado_de_usuarios_EN.md create mode 100644 docs/developer.avapframework.com/Informe_numero_altas_EN.md create mode 100644 docs/developer.avapframework.com/Informe_numero_transacciones_EN.md create mode 100644 docs/developer.avapframework.com/Informe_operaciones_EN.md create mode 100644 docs/developer.avapframework.com/Informe_transacciones_EN.md create mode 100644 docs/developer.avapframework.com/Ingresar_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/Ingreso_de_fondos_para_tiempo_aire_EN.md create mode 100644 docs/developer.avapframework.com/Leer_notificaciones_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Leer_una_notificacion_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Liquidaciones_de_Afiliados_EN.md create mode 100644 docs/developer.avapframework.com/Lista general de servicios sin catalogar_EN.md create mode 100644 docs/developer.avapframework.com/Listado_de_comisiones_de_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/Listado_de_divisas_EN.md create mode 100644 docs/developer.avapframework.com/Listado_de_movimientos_EN.md create mode 100644 docs/developer.avapframework.com/Listado_de_movimientos_granemisor_EN.md create mode 100644 docs/developer.avapframework.com/Listado_de_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/Listado_de_usuarios_bloqueados_EN.md create mode 100644 docs/developer.avapframework.com/Listado_de_usuarios_en_lista_negra_EN.md create mode 100644 docs/developer.avapframework.com/Listar_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/Listar_Soluciones_EN.md create mode 100644 docs/developer.avapframework.com/Listar_Usuarios_del_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/Logout_Services_EN.md create mode 100644 docs/developer.avapframework.com/Logs_del_sistema_EN.md create mode 100644 docs/developer.avapframework.com/Loyalty_Points_Exchange_EN.md create mode 100644 docs/developer.avapframework.com/Marketplace_EN.md create mode 100644 docs/developer.avapframework.com/Notificaciones_no_leidas_por_el_usuario_EN.md create mode 100644 docs/developer.avapframework.com/OVERVIEW.md create mode 100644 docs/developer.avapframework.com/Obtener_Afiliados_del_sistema_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Campos_Alta_Cliente_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Campos_Nivel_KYC_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Operadores_del_pais_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Paises_Activos_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Perfiles_de_Usuario_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Provincias_del_pais_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Shake_4_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Shake_v2_3_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Shake_v2_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_Shakes_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_caracteristicas_de_un_servicio_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_datos_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_imagen_del_perfil_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_info_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_preguntas_de_seguridad_del_usuario_EN(1).md create mode 100644 docs/developer.avapframework.com/Obtener_preguntas_de_seguridad_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Obtener_todos_los_datos_de_la_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/Operaciones_EN.md create mode 100644 docs/developer.avapframework.com/Orden_de_cargo_EN.md create mode 100644 docs/developer.avapframework.com/Pago_diferido_EN.md create mode 100644 docs/developer.avapframework.com/Plans_Wallet_EN.md create mode 100644 docs/developer.avapframework.com/Precios_de_los_distintos_servicios_EN.md create mode 100644 docs/developer.avapframework.com/Procesar_SMS_EN.md create mode 100644 docs/developer.avapframework.com/Reactivacion_de_una_cuenta_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Recarga_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/Rechazar_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/Reenviar_el_OTP_para_el_alta_EN.md create mode 100644 docs/developer.avapframework.com/Regenerar_contrasena_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Registrar_Monedero_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/Remesa_dirigida_EN.md create mode 100644 docs/developer.avapframework.com/Resumen_de_las_comisiones_del_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/Retirar_EN.md create mode 100644 docs/developer.avapframework.com/Retirar_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/Retirar_a_Banco_EN.md create mode 100644 docs/developer.avapframework.com/Retirar_a_Tarjeta_EN.md create mode 100644 docs/developer.avapframework.com/Retiro_en_cajero_EN.md create mode 100644 docs/developer.avapframework.com/SETUP_Additional components and tools.md create mode 100644 docs/developer.avapframework.com/SETUP_Enterprise.md create mode 100644 docs/developer.avapframework.com/SETUP_Linux.md create mode 100644 docs/developer.avapframework.com/SETUP_MacOS.md create mode 100644 docs/developer.avapframework.com/SETUP_Network.md create mode 100644 docs/developer.avapframework.com/SETUP_Overview.md create mode 100644 docs/developer.avapframework.com/SETUP_RaspberryPi.md create mode 100644 docs/developer.avapframework.com/SETUP_Uninstall.md create mode 100644 docs/developer.avapframework.com/SETUP_Windows.md create mode 100644 docs/developer.avapframework.com/SOURCE_CONTROL_CollaborateOnGitHub.md create mode 100644 docs/developer.avapframework.com/SOURCE_CONTROL_FAQ.md create mode 100644 docs/developer.avapframework.com/SOURCE_CONTROL_IntroductionToGit.md create mode 100644 docs/developer.avapframework.com/SOURCE_CONTROL_Overview.md create mode 100644 docs/developer.avapframework.com/Saldo_Usuario_a_Fecha_EN.md create mode 100644 docs/developer.avapframework.com/Saldo_de_la_cuenta_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_Tiempo_Aire_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_Alta_de_Afiliados_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_Firma_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_configuracion_obtener_condicion_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_desbloqueo_de_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Mover)_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Poner)_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Quitar)_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_Copiar_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_GET_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_notificaciones_Borrar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_notificaciones_Crear_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_notificaciones_Crear_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_notificaciones_Listar_Envia_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_notificaciones_Listar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_notificaciones_Modificar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md create mode 100644 docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md create mode 100644 docs/developer.avapframework.com/Solicitar_subida_de_nivel_KYC_EN.md create mode 100644 docs/developer.avapframework.com/Solicitud_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/Subir_imagen_del_perfil_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/TERMINAL_Advanced.md create mode 100644 docs/developer.avapframework.com/TERMINAL_Appearance.md create mode 100644 docs/developer.avapframework.com/TERMINAL_Shell_Integration.md create mode 100644 docs/developer.avapframework.com/TERMINAL_TerminalBasics.md create mode 100644 docs/developer.avapframework.com/TERMINAL_TerminalProfiles.md create mode 100644 docs/developer.avapframework.com/Transacciones_EN.md create mode 100644 docs/developer.avapframework.com/Transaction_search_EN.md create mode 100644 docs/developer.avapframework.com/Transferencias_masivas_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE-BasicEditing.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_AVAPforTheWeb.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_Accesibility.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_CodeNavigation.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_CommandLineInterface.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_CustomLayout.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_Debugging.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_Emmet.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_ExtensionMarketplace.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_IntelliSense.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_MultiRootWorkspaces.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_Profiles.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_Refactoring.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_SettingsSync.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_Snippets.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_Tasks.md create mode 100644 docs/developer.avapframework.com/USER_GUIDE_WorkspaceTrust.md create mode 100644 docs/developer.avapframework.com/Usuarios_con_saldo_EN.md create mode 100644 docs/developer.avapframework.com/Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md create mode 100644 docs/developer.avapframework.com/actividad_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/alta_baja_modificacion_EN.md create mode 100644 docs/developer.avapframework.com/appendices_1.md create mode 100644 docs/developer.avapframework.com/appendices_10.md create mode 100644 docs/developer.avapframework.com/appendices_11.md create mode 100644 docs/developer.avapframework.com/appendices_12.md create mode 100644 docs/developer.avapframework.com/appendices_13.md create mode 100644 docs/developer.avapframework.com/appendices_14.md create mode 100644 docs/developer.avapframework.com/appendices_15.md create mode 100644 docs/developer.avapframework.com/appendices_16.md create mode 100644 docs/developer.avapframework.com/appendices_17.md create mode 100644 docs/developer.avapframework.com/appendices_18.md create mode 100644 docs/developer.avapframework.com/appendices_19.md create mode 100644 docs/developer.avapframework.com/appendices_2.md create mode 100644 docs/developer.avapframework.com/appendices_20.md create mode 100644 docs/developer.avapframework.com/appendices_21.md create mode 100644 docs/developer.avapframework.com/appendices_22.md create mode 100644 docs/developer.avapframework.com/appendices_23.md create mode 100644 docs/developer.avapframework.com/appendices_24.md create mode 100644 docs/developer.avapframework.com/appendices_3.md create mode 100644 docs/developer.avapframework.com/appendices_4.md create mode 100644 docs/developer.avapframework.com/appendices_5.md create mode 100644 docs/developer.avapframework.com/appendices_6.md create mode 100644 docs/developer.avapframework.com/appendices_7.md create mode 100644 docs/developer.avapframework.com/appendices_8.md create mode 100644 docs/developer.avapframework.com/appendices_9.md create mode 100644 docs/developer.avapframework.com/avap_gateway_advanced_doc.md create mode 100644 docs/developer.avapframework.com/avap_language_server_doc.md create mode 100644 docs/developer.avapframework.com/avap_virtual_server_doc.md create mode 100644 docs/developer.avapframework.com/chapter10_1.md create mode 100644 docs/developer.avapframework.com/chapter10_2.md create mode 100644 docs/developer.avapframework.com/chapter10_3.md create mode 100644 docs/developer.avapframework.com/chapter10_4.md create mode 100644 docs/developer.avapframework.com/chapter10_5.md create mode 100644 docs/developer.avapframework.com/chapter11_1.md create mode 100644 docs/developer.avapframework.com/chapter11_2.md create mode 100644 docs/developer.avapframework.com/chapter11_3.md create mode 100644 docs/developer.avapframework.com/chapter11_4.md create mode 100644 docs/developer.avapframework.com/chapter11_5.md create mode 100644 docs/developer.avapframework.com/chapter12_1.md create mode 100644 docs/developer.avapframework.com/chapter14_1.md create mode 100644 docs/developer.avapframework.com/chapter14_2.md create mode 100644 docs/developer.avapframework.com/chapter14_3.md create mode 100644 docs/developer.avapframework.com/chapter14_4.md create mode 100644 docs/developer.avapframework.com/chapter14_5.md create mode 100644 docs/developer.avapframework.com/chapter1_1.md create mode 100644 docs/developer.avapframework.com/chapter1_2.md create mode 100644 docs/developer.avapframework.com/chapter1_3.md create mode 100644 docs/developer.avapframework.com/chapter1_4.md create mode 100644 docs/developer.avapframework.com/chapter1_5.md create mode 100644 docs/developer.avapframework.com/chapter1_6.md create mode 100644 docs/developer.avapframework.com/chapter1_7.md create mode 100644 docs/developer.avapframework.com/chapter1_8.md create mode 100644 docs/developer.avapframework.com/chapter2_1.md create mode 100644 docs/developer.avapframework.com/chapter2_2.md create mode 100644 docs/developer.avapframework.com/chapter2_3.md create mode 100644 docs/developer.avapframework.com/chapter2_4.md create mode 100644 docs/developer.avapframework.com/chapter2_5.md create mode 100644 docs/developer.avapframework.com/chapter2_6.md create mode 100644 docs/developer.avapframework.com/chapter3_1.md create mode 100644 docs/developer.avapframework.com/chapter3_2.md create mode 100644 docs/developer.avapframework.com/chapter3_3.md create mode 100644 docs/developer.avapframework.com/chapter3_4.md create mode 100644 docs/developer.avapframework.com/chapter3_5.md create mode 100644 docs/developer.avapframework.com/chapter3_6.md create mode 100644 docs/developer.avapframework.com/chapter4_1.md create mode 100644 docs/developer.avapframework.com/chapter4_2.md create mode 100644 docs/developer.avapframework.com/chapter4_3.md create mode 100644 docs/developer.avapframework.com/chapter4_4.md create mode 100644 docs/developer.avapframework.com/chapter4_5.md create mode 100644 docs/developer.avapframework.com/chapter4_6.md create mode 100644 docs/developer.avapframework.com/chapter5_1.md create mode 100644 docs/developer.avapframework.com/chapter5_10.md create mode 100644 docs/developer.avapframework.com/chapter5_11.md create mode 100644 docs/developer.avapframework.com/chapter5_12.md create mode 100644 docs/developer.avapframework.com/chapter5_2.md create mode 100644 docs/developer.avapframework.com/chapter5_3.md create mode 100644 docs/developer.avapframework.com/chapter5_4.md create mode 100644 docs/developer.avapframework.com/chapter5_5.md create mode 100644 docs/developer.avapframework.com/chapter5_6.md create mode 100644 docs/developer.avapframework.com/chapter5_7.md create mode 100644 docs/developer.avapframework.com/chapter5_8.md create mode 100644 docs/developer.avapframework.com/chapter5_9.md create mode 100644 docs/developer.avapframework.com/chapter6_1.md create mode 100644 docs/developer.avapframework.com/chapter6_10.md create mode 100644 docs/developer.avapframework.com/chapter6_2.md create mode 100644 docs/developer.avapframework.com/chapter6_3.md create mode 100644 docs/developer.avapframework.com/chapter6_4.md create mode 100644 docs/developer.avapframework.com/chapter6_5.md create mode 100644 docs/developer.avapframework.com/chapter6_6.md create mode 100644 docs/developer.avapframework.com/chapter6_7.md create mode 100644 docs/developer.avapframework.com/chapter6_8.md create mode 100644 docs/developer.avapframework.com/chapter6_9.md create mode 100644 docs/developer.avapframework.com/chapter7_1.md create mode 100644 docs/developer.avapframework.com/chapter7_2.md create mode 100644 docs/developer.avapframework.com/chapter7_3.md create mode 100644 docs/developer.avapframework.com/chapter7_4.md create mode 100644 docs/developer.avapframework.com/chapter7_5.md create mode 100644 docs/developer.avapframework.com/chapter7_6.md create mode 100644 docs/developer.avapframework.com/chapter8_1.md create mode 100644 docs/developer.avapframework.com/chapter8_2.md create mode 100644 docs/developer.avapframework.com/chapter8_3.md create mode 100644 docs/developer.avapframework.com/chapter8_4.md create mode 100644 docs/developer.avapframework.com/chapter8_5.md create mode 100644 docs/developer.avapframework.com/chapter8_6.md create mode 100644 docs/developer.avapframework.com/close.md create mode 100644 docs/developer.avapframework.com/comprobar_nick_EN.md create mode 100644 docs/developer.avapframework.com/create_ethereum_account.md create mode 100644 docs/developer.avapframework.com/d10_gs_developer_token.md create mode 100644 docs/developer.avapframework.com/d11_gs_msvc_extensions.md create mode 100644 docs/developer.avapframework.com/d12_gs_collaborative.md create mode 100644 docs/developer.avapframework.com/d13_gs_cloud.md create mode 100644 docs/developer.avapframework.com/d14_gs_infrastructure_avs.md create mode 100644 docs/developer.avapframework.com/d15_gs_avapcli.md create mode 100644 docs/developer.avapframework.com/d16_gs_avapavs.md create mode 100644 docs/developer.avapframework.com/d17_gs_samples-hello.md create mode 100644 docs/developer.avapframework.com/d17_gs_samples-login.md create mode 100644 docs/developer.avapframework.com/d18_gs_samples-loop.md create mode 100644 docs/developer.avapframework.com/d18_gs_samples-orm-access.md create mode 100644 docs/developer.avapframework.com/d18_gs_samples-orm-request.md create mode 100644 docs/developer.avapframework.com/d2_software_downloads.md create mode 100644 docs/developer.avapframework.com/d3_gs_avap_id.md create mode 100644 docs/developer.avapframework.com/d3_gs_avap_vcex.md create mode 100644 docs/developer.avapframework.com/d4_gs_organizations.md create mode 100644 docs/developer.avapframework.com/d5_gs_teams.md create mode 100644 docs/developer.avapframework.com/d6_gs_ambients.md create mode 100644 docs/developer.avapframework.com/d7_gs_api_products.md create mode 100644 docs/developer.avapframework.com/d8_gs_api_projects.md create mode 100644 docs/developer.avapframework.com/d9_gs_my_first_api.md create mode 100644 docs/developer.avapframework.com/download_101cli copy 3.md create mode 100644 docs/developer.avapframework.com/download_101cli.md create mode 100644 docs/developer.avapframework.com/download_github.md create mode 100644 docs/developer.avapframework.com/getUSDGRAYcotization.md create mode 100644 docs/developer.avapframework.com/get_blockchain_accounts.md create mode 100644 docs/developer.avapframework.com/get_blockchain_networks.md create mode 100644 docs/developer.avapframework.com/get_comminsioned_users.md create mode 100644 docs/developer.avapframework.com/get_gasprices.md create mode 100644 docs/developer.avapframework.com/get_pools.md create mode 100644 docs/developer.avapframework.com/get_signature.md create mode 100644 docs/developer.avapframework.com/get_token_info.md create mode 100644 docs/developer.avapframework.com/get_vaulted_transactions.md create mode 100644 docs/developer.avapframework.com/github_cli.md create mode 100644 docs/developer.avapframework.com/how_to_publish.md create mode 100644 docs/developer.avapframework.com/inter_networks_movement.md create mode 100644 docs/developer.avapframework.com/inter_networks_pool_stake.md create mode 100644 docs/developer.avapframework.com/interfaz_servicios_pagos_EN.md create mode 100644 docs/developer.avapframework.com/intro1.md create mode 100644 docs/developer.avapframework.com/intro10.md create mode 100644 docs/developer.avapframework.com/intro11.md create mode 100644 docs/developer.avapframework.com/intro12.md create mode 100644 docs/developer.avapframework.com/intro13.md create mode 100644 docs/developer.avapframework.com/intro14.md create mode 100644 docs/developer.avapframework.com/intro2.md create mode 100644 docs/developer.avapframework.com/intro3.md create mode 100644 docs/developer.avapframework.com/intro4.md create mode 100644 docs/developer.avapframework.com/intro5.md create mode 100644 docs/developer.avapframework.com/intro6.md create mode 100644 docs/developer.avapframework.com/intro7.md create mode 100644 docs/developer.avapframework.com/intro8.md create mode 100644 docs/developer.avapframework.com/intro9.md create mode 100644 docs/developer.avapframework.com/last_order_summary.md create mode 100644 docs/developer.avapframework.com/new.md create mode 100644 docs/developer.avapframework.com/order_history_summary.md create mode 100644 docs/developer.avapframework.com/origenes_de_fondos_EN.md create mode 100644 docs/developer.avapframework.com/repetir_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/rider_order_management.md create mode 100644 docs/developer.avapframework.com/set_blockchain_accout_selected.md create mode 100644 docs/developer.avapframework.com/set_blokchain_network.md create mode 100644 docs/developer.avapframework.com/spei_EN.md create mode 100644 docs/developer.avapframework.com/unvault.md create mode 100644 docs/developer.avapframework.com/vault.md create mode 100644 docs/developer.avapframework.com/vs_api_completion.md create mode 100644 docs/developer.avapframework.com/vs_api_extension.md diff --git a/docs/AVAP Language: Core Commands & Functional Specification/AVAP.md b/docs/AVAP Language: Core Commands & Functional Specification/AVAP.md new file mode 100644 index 0000000..3ca54d3 --- /dev/null +++ b/docs/AVAP Language: Core Commands & Functional Specification/AVAP.md @@ -0,0 +1,735 @@ +# SECTION I: Architecture, Memory, and Fundamentals + +This section sets the foundations of how AVAP manages service logic and data manipulation in memory. Unlike conventional interpreted languages, AVAP uses a **hybrid evaluation** engine that allows combining declarative commands with dynamic expressions. + +--- + +## 1.1 Endpoint Registration (`registerEndpoint`) + +The `registerEndpoint` command is the atomic unit of configuration. It acts as the bridge between the network (HTTP) and the code. + +### Interface + +`registerEndpoint(path, method, middleware, description, handler, output)` + +### Parameter Specification + +- **`path` (String):** Defines the URL path. It supports static routes and is prepared for future implementations of path parameters (variable segments). + +- **`method` (String):** Specifies the allowed HTTP verb (`GET`, `POST`, `PUT`, `DELETE`). The server will automatically reject any request that does not match this method (Error 405). + +- **`middleware` (List):** A list of functions that are executed sequentially before the `handler`. Ideal for JWT token validations or maintenance checks. If a middleware function fails, the flow stops before reaching the main code. + +- **`description` (String):** Metadata for automatic documentation (Swagger/OpenAPI). It does not affect execution but is vital for the development lifecycle. + +- **`handler` (Function):** The logical Entry Point. It is the name of the main function where the business logic resides. + +- **`output` (Variable):** Defines the "master" variable that the engine will automatically return upon completion, unless additional results are specified via `addResult`. + + +--- + +## 1.2 Variable Assignment Engine (Dynamic Assignment) + +AVAP allows a direct assignment syntax using the `=` symbol, which grants flexibility similar to languages like Python, but under strict context control. + +### Internal Mechanics: The `eval` Process + +When the interpreter finds an instruction of the type `variable = expression`, it activates a three-step process: + +1. **Cleaning and Tokenization:** The engine identifies if the expression contains references to existing variables (using `$`), method calls, or literals. + +2. **Expression Evaluation:** Operations are resolved in real-time. This allows: + + - **Boolean Logic:** `is_valid = (age > 18 and has_permission == True)`. + + - **Arithmetic:** `tax = subtotal * 0.21`. + + - **String Formatting:** `query = "SELECT * FROM users WHERE id = %s" % recovered_id`. + +3. **Object and Property Resolution:** Allows deep access to complex structures returned by database connectors or APIs: `client_email = user_list[0].profile.email`. + + +### Effect on Memory + +Unlike `addVar`, dynamic assignment is capable of transforming the variable type on the fly (Mutable Type System). If a variable contained a number and is assigned a string after evaluation, the engine updates the variable metadata automatically. + +--- + +## 1.3 State Initialization and References (`addVar`) + +`addVar` is the fundamental command to define the global state of the script. + +### Interface + +`addVar(targetVarName, varValue)` + +### Advanced Behavior + +- **Intelligent Automatic Typing:** The engine inspects `varValue`. If it detects a numerical format (even if it comes as a string from configuration), it will internally convert it to `int` or `float`. It supports the use of commas and periods interchangeably, normalizing the value for mathematical operations. + +- **The Reference Prefix `$`:** This is the dereferencing operator. + + - `addVar(copy, $original)`: Indicates to the engine that it should not assign the string "$original", but look in the symbol table for the current value of the variable `original` and copy it. + +- **Scope:** Variables created with `addVar` in the main body of the script are considered **Request Session Variables**, meaning they live during the entire execution lifecycle of that specific API call, but are isolated from other concurrent requests to guarantee data security (Thread-Safety). + +| **Syntax** | **Usage** | **Description** | +| :--- | :--- | :--- | +| `name = "Juan"` | Direct Assignment | Creates a simple text string. | +| `total = $price * 1.10` | Dynamic Evaluation | Uses the value of `price` for a calculation and saves the result. | +| `addVar(status, 200)` | Initialization | Explicit method to ensure creation in the global context. | +| `data = res[0].info` | Object Access | Extracts a specific property from a JSON object or DB result. | + +--- + +# SECTION II: Input and Output (I/O) Management + +This section describes the mechanisms that AVAP uses for external data ingestion, parameter integrity validation, and constructing the response package that will be delivered to the final client. + +--- + +## 2.1 Intelligent Parameter Capture (`addParam`) + +The `addParam` command is the component in charge of extracting information from the incoming HTTP request. Its design is **source-agnostic**, which simplifies development by not requiring the programmer to specify where the data comes from. + +### Interface + +`addParam(param_name, target_variable)` + +### Priority Mechanics (Cascading Search) + +When `addParam` is invoked, the AVAP engine inspects the request in the following hierarchical order: + +1. **Query Arguments:** Parameters present in the URL (e.g., `?id=123`). + +2. **JSON Body:** If the request has a `Content-Type: application/json`, it looks for the key inside the JSON object. + +3. **Form Data / Body Arguments:** Data sent via standard forms (`x-www-form-urlencoded`). + + +### Technical Behavior + +- **Automatic Decoding:** The engine attempts to decode values to ASCII/UTF-8 format, eliminating encoding inconsistencies. + +- **Null Treatment:** If the requested parameter does not exist in any of the sources, the target variable (`target_variable`) is initialized as `None`. This allows performing subsequent security checks via `if` blocks. + + +--- + +## 2.2 Validation and Collection Counting (`getListLen`) + +To guarantee that an API is robust, it is necessary to validate how much information has been received. `getListLen` acts as AVAP's volume inspector. + +### Interface + +`getListLen(source_variable, target_variable)` + +### I/O Applications + +- **Parameter Validation:** Allows counting how many elements a variable contains that has been populated by `addParam` or `getQueryParamList`. + +- **Loop Security:** Before starting a `startLoop`, it is recommended to use `getListLen` to define the upper limit of the cycle, avoiding overflow errors. + +- **Database Results:** After a query, it determines if records were obtained (length > 0) or if the query resulted empty. + + +--- + +## 2.3 Multiple List Capture (`getQueryParamList`) + +Scenarios exist where the same parameter is sent several times (e.g., search filters like `?color=red&color=blue`). AVAP manages this through a specialized capture in lists. + +### Interface + +`getQueryParamList(param_name, target_list_variable)` + +### Effect + +Transforms all occurrences of `param_name` into a structured list inside `target_list_variable`. If there is only one value, it creates a single-element list. This ensures that subsequent logic can always treat the data as a collection, avoiding type errors. + +--- + +## 2.4 Construction of the Response (`addResult`) + +The `addResult` command is in charge of registering which variables will be part of the response body. AVAP dynamically constructs a JSON output object based on calls to this command. + +### Interface + +`addResult(source_variable)` + +### Advanced Features + +- **Promise Management:** If the variable passed to `addResult` is the result of an operation initiated with `go_async`, the engine will automatically mark that field as `"promised"` in the response, or return the thread ID if synchronization has not completed. + +- **String Cleaning:** The engine detects if the content of the variable has redundant quotes (product of previous evaluations) and normalizes them to ensure that the resulting JSON is valid and clean. + +- **Multi-Registration:** Multiple calls to `addResult` can be made. Each call adds a new key to the output JSON object. By default, the key in the JSON will be the variable name, unless a custom key is used in the engine. + + +--- + +## 2.5 HTTP Status Control (`_status`) + +AVAP uses a reserved system variable to communicate with the underlying web server and define the success or error code of the transaction. + +### Use of `_status` + +When assigning a numerical value to the `_status` variable (using `addVar` or direct assignment), the programmer defines the HTTP code of the response. + +| **Code** | **Common Use in AVAP** | +| :--- | :--- | +| **200** | Successful operation (Default value). | +| **201** | Resource successfully created. | +| **400** | Parameter validation error (Bad Request). | +| **401** | Authentication failure. | +| **500** | Internal error captured in an `exception` block. | + +### Section II Integrated Example + +``` +// We capture input +addParam("user_id", id) + +// We validate presence +if(id, None, '==') + addVar(_status, 400) + addVar(error, "The user ID is mandatory") + addResult(error) + return() +end() + +// If we reach here, we respond with success +addVar(_status, 200) +addResult(id) +``` + +--- + +# SECTION III: Control Logic and Decision Structures + +This section details how AVAP manages execution flow. The language uses closed block structures that allow for a clear sequential reading, facilitating the debugging of complex APIs. + +--- + +## 3.1 The Conditional Block (`if / else / end`) + +The `if` structure in AVAP is a versatile tool that allows for atomic comparisons or the evaluation of complex logical expressions processed by the dynamic evaluation engine. + +### Standard Interface + +`if(variable_A, valor_B, operador)` + +### Available Operators + +| **Operator** | **Description** | **Example** | +| :--- | :--- | :--- | +| `=` | Strict equality (or numerical equivalence). | `if(rol, "admin", "=")` | +| `!=` | Inequality. | `if(status, 200, "!=")` | +| `>` / `<` | Numerical magnitude comparison. | `if(edad, 18, ">")` | +| `in` | Checks if an element belongs to a list or string. | `if(user, lista_negra, "in")` | + +### Evaluation of Complex Expressions + +AVAP allows omitting comparison parameters to evaluate a complete logical expression directly in the third parameter. + +- **Example:** `if(None, None, "age >= 18 and balance > 100")`. + + +### Closing Structure + +Every `if` block can include an optional `else()` block and **must** end with the `end()` command. + +--- + +## 3.2 Iterations and Loops (`startLoop / endLoop`) + +For the processing of collections (like database rows or parameter lists), AVAP implements a repetition cycle controlled by indices. + +### Interface + +`startLoop(contador, inicio, fin)` + +### Execution Mechanics + +1. **Initialization:** The engine creates the `contador` variable with the value of `inicio`. + +2. **Increment:** In each turn, the counter increases automatically by 1 unit. + +3. **Exit Condition:** The loop stops when the `contador` exceeds the value of `fin`. + + +### Practical Example: List Processing + +``` +// We obtain the length of a list captured in Section II +getListLen(items_received, total) + +startLoop(i, 0, total) + current_item = items_received[i] + // Processing logic for each item... +endLoop() +``` + +--- + +## 3.3 Error Management and Robustness (`try / exception`) + +AVAP is a language designed for production environments where external failures (database timeout, down third-party APIs) are a reality. The `try` block allows capturing these events without stopping the server. + +### Interface + +`try` ... `exception(error_variable)` ... `end()` + +### Technical Operation + +- **`try` Block:** The engine attempts to execute the instructions contained within. If a critical failure occurs, it stops execution of that block immediately. + +- **`exception` Block:** If an error is detected, control passes to this block. The `error_variable` is automatically populated with a string describing the failure (simplified Stack trace). + +- **`end()` Block:** Closes the structure and allows the script to continue its normal execution after the error handling. + + +### Example of Security in Connectors + +``` +try + // We attempt a query to an external connector (Section V) + resultado = db.query("SELECT * FROM pagos") +exception(failure_detail) + // If it fails, we log the error and notify + addVar(_status, 500) + addVar(message, "Persistence error: %s" % failure_detail) + addResult(message) +end() +``` + +--- + +## 3.4 Premature Exit Control (`return`) + +The `return()` command is a control instruction that immediately terminates the execution of the current context (be it a function or the main script). + +- If used within a **function**, it returns control (and optionally a value) to the caller. + +- If used in the **main flow**, it ends execution of the API and triggers the automatic sending of the JSON response built up to that moment. + + +--- + +**Summary of Section III:** With these structures, the AVAP programmer has total control over the dynamic behavior of the code. The combination of **Dynamic Evaluation (Section I)**, **Data Validation (Section II)** and **Control Structures (Section III)** allows for building extremely complex and secure microservices. + + +# SECTION IV: Concurrency and Asynchrony + +AVAP implements a concurrency model based on threads that allows for "fire-and-forget" or parallel execution with subsequent synchronization. This is fundamental for tasks like sending emails, processing logs or querying multiple external APIs simultaneously. + +--- + +## 4.1 Launching Background Processes (`go_async`) + +The command `go_async` extracts a block of code from the main sequential flow and places it in a parallel execution queue. + +### Interface + +`go_async(thread_id)` + +### Execution Mechanics + +1. **Identification:** The programmer assigns a `thread_id` (a string or variable) to be able to reference that process later. + +2. **Bifurcation (Forking):** As soon as it is invoked, the AVAP engine creates a new native thread. The main flow immediately continues to the next instruction after the `go_async` block. + +3. **Context Isolation:** The asynchronous thread inherits a copy of the state of the variables at the moment of firing, allowing it to work safely without interfering with the main thread. + + +### Example: Immediate Response with Long Process + +``` +addParam("email", destination) + +go_async("email_delivery") + // This block takes 5 seconds, but the API does not wait + email_service.send(destination, "Welcome to AVAP") +end() + +addVar(msg, "Your email is being processed in the background") +addResult(msg) +// The client receives the response in milliseconds +``` + +--- + +## 4.2 Result Synchronization (`gather`) + +When the main flow needs data generated by an asynchronous thread to continue, the `gather` synchronization mechanism is used. + +### Interface + +`gather(thread_id, timeout)` + +### Specifications + +- **`thread_id`:** The identifier used in the `go_async` command. + +- **`timeout` (Seconds):** Maximum time that the main thread will wait. If the thread does not finish in this time, AVAP launches an exception that can be captured (Section III). + + +### Technical Behavior + +- **Controlled Blocking:** The main thread stops (suspends) until the `thread_id` thread finishes. + +- **State Recovery:** Once synchronized, any variable modified inside the asynchronous thread is fused with the context of the main thread. + + +--- + +## 4.3 Optimized Parallel Execution (Fan-Out Pattern) + +AVAP allows launching multiple threads and then waiting for all of them, reducing total execution time to the time of the slowest thread, instead of the sum of all. + +### Example: Querying multiple databases + +``` +go_async("db_north") + data_north = connector_north.query("SELECT...") +end() + +go_async("db_south") + data_south = connector_south.query("SELECT...") +end() + +// We wait for both (Maximum 10 seconds) +gather("db_north", 10) +gather("db_south", 10) + +// We combine results using Section I +total_result = data_north + data_south +addResult(total_result) +``` + +--- + +## 4.4 Status of Promises in the Output + +As mentioned in **Section II**, if a variable that is still being processed in an asynchronous thread is sent to `addResult`, AVAP manages the response intelligently: + +- **If the thread still runs:** The output JSON will show `"variable": "promised"` or the thread ID. + +- **If the thread failed:** The error will be registered in the internal log and the variable will be `None`. + +- **If `gather` was used before `addResult`:** The real processed value will be sent. + + +# SECTION V: Persistence, Connectors and Native ORM + +AVAP is designed to be database agnostic. It allows data manipulation through three layers: the universal connector, simplified ORM commands and direct SQL execution. + +--- + +## 5.1 The Universal Connector (`avapConnector`) + +The `avapConnector` command is the starting point for any external integration. It uses a system of **Connection Tokens** (Base64) that encapsulate the configuration (host, port, credentials, driver) to keep the code clean and safe. + +### Interface + +`connector_variable = avapConnector("BASE64_TOKEN")` + +### Characteristics of Connector Objects + +Once the variable is instantiated, it behaves as an object with dynamic methods: + +- **DB Connectors:** Expose the `.query(sql_string)` method, which returns objects or lists according to the result. + +- **API Connectors (Twilio, Slack, etc.):** Expose native methods of the service (e.g., `.send_sms()`). + + +### Example: Use of Dynamic Assignment with Connectors + +``` +// We instantiate the connection +db = avapConnector("REJfQ09OTkVDVE9SR...") + +// We execute and use Section I to filter on the fly +users = db.query("SELECT * FROM users") +first_admin = users[0].name if users[0].role == 'admin' else 'N/A' + +addResult(first_admin) +``` + +--- + +## 5.2 Native ORM Layer (`ormCheckTable` / `ormDirect`) + +For quick operations on the local or default database cluster, AVAP offers system-level commands that do not require prior instantiation. + +### 5.2.1 `ormCheckTable` + +Verifies the existence of a structure in the database. It is vital for installation scripts or automatic migrations. + +- **Interface:** `ormCheckTable(table_name, target_var)` + +- **Response:** The `target_var` will receive the string values `"True"` or `"False"`. + + +### 5.2.2 `ormDirect` + +Executes SQL commands directly. It differs from `.query()` in that it is optimized for statements that do not necessarily return rows (like `INSERT`, `UPDATE` or `CREATE TABLE`). + +- **Interface:** `ormDirect(statement, target_var)` + +- **Use of Interpolation:** `ormDirect("UPDATE users SET login = '%s' WHERE id = %s" % (now, id), result)` + + +--- + +## 5.3 Data Access Abstraction (Implicit Commands) + +AVAP includes specialized commands for the most common CRUD operations, reducing the need to write manual SQL and mitigating injection risks. + +### `ormAccessSelect` + +Performs filtered queries returning a structure of object lists. + +- **Syntax:** `ormAccessSelect(table, filters, target)` + + +### `ormAccessInsert` / `ormAccessUpdate` + +Manages data persistence. If used on an object that already has an ID, `Update` synchronizes changes; otherwise, `Insert` creates the record. + +--- + +## 5.4 Dynamic Query Formatting (Anti-Injection) + +As detailed in **Section I**, the AVAP engine processes SQL strings before sending them to the database engine. The official recommendation is to always use interpolation using the `%` operator to ensure that data types (Strings vs Integers) are correctly treated by the driver. + +``` +// Safe and Recommended Way +sql = "SELECT * FROM %s WHERE status = '%s'" % (table_name, status_recovered) +res = db.query(sql) +``` + +--- + +## 5.5 Cryptographic Security Integration (`encodeSHA256`) + +In the persistence flow, AVAP provides native tools to secure sensitive data before it touches the disk. + +### Interface + +`encodeSHA256(source_text, target_variable)` + +### Full Registration Flow (Final Example) + +This example joins **Sections I, II, III and V**: + +``` +// II: Capture +addParam("pass", p) +addParam("user", u) + +// I and V: Processing and Security +encodeSHA256(p, secure_pass) + +// V: Insertion +sql = "INSERT INTO users (username, password) VALUES ('%s', '%s')" % (u, secure_pass) +ormDirect(sql, db_result) + +// III and II: Response +if(db_result, "Success", "=") + addVar(msg, "User created") + addResult(msg) +end() +``` + + +# SECTION VI: System Utilities and Transformation + +This section documents the native commands for advanced string manipulation, precise time handling and generation of dynamic data. + +--- + +## 6.1 Time and Date Management (`getDateTime` / `stampToDatetime`) + +AVAP handles time in two ways: as **Epoch/Timestamp** (numerical, ideal for calculations) and as **Datetime** (formatted text, ideal for humans and databases). + +### 6.1.1 `getDateTime` + +Generates current time with high precision. + +- **Interface:** `getDateTime(format, timeDelta, timeZone, targetVar)` + +- **Parameters:** + + - `format`: Ej: `"%Y-%m-%d %H:%M:%S"`. If left empty, returns the current Epoch. + + - `timeDelta`: Seconds to add (positive) or subtract (negative). Very useful for calculating token expiration. + + - `timeZone`: Time zone region (ej: "Europe/Madrid"). + + +### 6.1.2 `stampToDatetime` + +Converts a numerical value (Unix Timestamp) into a legible text string. + +- **Interface:** `stampToDatetime(timestamp, format, offset, targetVar)` + +- **Common use:** Formatting dates recovered from the database (Section V) before sending them to the client (Section II). + + +--- + +## 6.2 Advanced String Manipulation (`replace` / `randomString`) + +### 6.2.1 `replace` + +Allows for cleaning and transformation of texts. It is fundamental when data is received from the client that requires sanitization. + +- **Interface:** `replace(sourceText, oldText, newText, targetVar)` + +- **Example:** Cleaning spaces or unwanted characters in a username before a SQL query. + + +### 6.2.2 `randomString` + +Generates secure random alphanumeric strings. + +- **Interface:** `randomString(length, targetVar)` + +- **Applications:** Generation of temporary passwords, session IDs or unique file names. + + +--- + +## 6.3 Security and Hash Operations (`encodeSHA256`) + +Although mentioned in persistence, its use is a data transformation utility. + +- **Mechanics:** It is a deterministic one-way function. + +- **Important:** AVAP uses an optimized implementation that guarantees that the same text always produces the same hash, allowing secure "login" comparisons without knowing the real password. + + +--- + +## 6.4 The Value Return Command (`return`) + +In the context of functions and flows, `return` not only stops execution, but can "inject" the result of a sub-routine into the main flow. + +### Example of complete utility flow: + +``` +// 1. We generate a temporary token +randomString(16, token_raw) + +// 2. We calculate expiration (within 1 hour = 3600 seg) +getDateTime("%Y-%m-%d %H:%M:%S", 3600, "UTC", expiration_date) + +// 3. We format a system message using Section I +message = "Your token %s expires on %s" % (token_raw, expiration_date) + +// 4. We send to the client (Section II) +addResult(message) +``` + +--- + +## 6.5 Table of Common Formats (Cheat Sheet) + + +| **Token** | **Description** | **Example** | +| :--- | :--- | :--- | +| `%Y` | Full year | 2026 | +| `%m` | Month (01-12) | 02 | +| `%d` | Day (01-31) | 23 | +| `%H` | Hour (00-23) | 21 | +| `%M` | Minute (00-59) | 45 | + +# SECTION VII: Function Architecture and Scopes + +This section details how to encapsulate reusable logic and how AVAP manages isolated memory to avoid side effects between different parts of the program. + +--- + +## 7.1 Definition and Declaration (`function`) + +A function in AVAP is an independent block of code that is registered in the engine to be invoked at any moment. + +### Interface + +`function function_name(argument1, argument2, ...){ ... }` + +### Technical Characteristics: + +- **Local Scope (`function_local_vars`):** Upon entering a function, AVAP creates a new dictionary of local variables. Variables created within (ej. `temp = 10`) do not exist outside the function, protecting global state. + +- **Context Inheritance:** Functions can read global variables using the `$` prefix, but any new assignment (`=`) will remain in local scope unless a global persistence command is used. + + +--- + +## 7.2 The Exit Command (`return`) + +It is the mechanism to finalize function execution and, optionally, send a value back to the caller. + +### Interface + +`return(variable_or_value)` + +### Behavior: + +1. **Finalization:** Immediately stops processing of the function. + +2. **Data Transfer:** The value passed to the `return` is injected into the variable that performed the call in the main flow. + +3. **Cleaning:** Once `return` is executed, the dictionary of local variables of that function is destroyed to free memory. + + +--- + +## 7.3 Invocation and Parameter Passing + +Functions are called by their name followed by the values or variables they require. + +### Example of Professional Implementation: + +``` +// Function Definition (Local Scope) +function calculate_discount(base_price, percentage){ + factor = percentage / 100 + discount = base_price * factor + total = base_price - discount + return(total) +} + +// Main Flow (Global Scope) +addVar(pvp, 150) +// Call to the function passing a reference $ and a literal value +final_price = calculate_discount($pvp, 20) + +addResult(final_price) // Result: 120 +``` + +--- + +## 7.4 Functions as Middlewares + +In the `registerEndpoint` command (Section I), the `middleware` parameter accepts a list of functions. These functions have special behavior: + +- If a middleware executes a `return()` without a value or with an error value, AVAP can be configured to abort the request before reaching the main `handler`. + +- They are ideal for **Guard** tasks: + + - API Key verification. + + - Data schema validation. + + - Initial audit registration (logs). + + +--- + +## 7.5 Recursivity and Limits + +AVAP allows recursivity (a function calling itself), but caution is recommended regarding stack depth for asynchronous processes (Section IV). To process large data volumes, the use of `startLoop` (Section III) is always preferable. \ No newline at end of file diff --git a/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md b/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md new file mode 100644 index 0000000..b9a5f2f --- /dev/null +++ b/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md @@ -0,0 +1,155 @@ +This document will deal with the different types of accesses that exist on + the platform. + +To identify the user who owns the account where the operation is going to + be carried out, it is necessary to indicate a session identifier ( + session_id parameter) or sign the call with its private key + ( signature parameter). In this way, these two calls to + service are equivalent for all intents and purposes. For those cases in + which there is no pademobile user as executor of the operation, the call + with private key must be used: + +* With session ID + +```javascript +user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&session_id=9bb19a6c0a607cb8f1791207395366d6 +``` + +Session sample + +The session_id parameter is obtained from the call to the login service: + +```javascript +http://desarrollo.pademobile.com:5007/ws/users.py/login?country_code=MX&nick=test_user&pin=0000 +``` + +```javascript +{ {' '} + "status" + :{' '} + true + , + "e_mail" + :{' '} + "" + , + "elapsed" + :{' '} + 0.2370758056640625 + , + "certification_data" + : + , + "session_id" + :{' '} + "97c4abb925c9b2046ac7432762ad1417" + , + "user_type" + :{' '} + "User b\u00e1sico" + , + "profile_id" + :{' '} + 1 + , + "profile_code" + :{' '} + "USER" + , + "user_id" + :{' '} + 225 + , + "state" + :{' '} + "Distrito Federal" + , + "phone_longitude" + :{' '} + 10 + , + "menu" + : + , + "affiliate_user_id" + :{' '} + 412 + , + "currency" + :{' '} + "MXN" + , + "name" + :{' '} + "Test User" + , + "certification" + :{' '} + false + , + "phone" + :{' '} + "5012385006" + + } +``` + +* With signature + +```javascript +user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&signature=cc30e3efc7159bb10b910512ca441664c1578a4d +``` + +Signed sample + +In this case an extra parameter is added to the entire original query + string. This parameter will be a hash (HMAC) of the previous + string, so any alteration in the parameters will cause the signed login + process to fail. + +This process follows these steps: + +* The private key of the user identified by the user_id parameter is obtained. +* The querystringis separated from the signature parameter. +* The hash is calculated using the strings obtained in steps 1 and 2. +* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. + +The following Python code snippet returns the querystringprovided in the + string parameter of the calculate_signature function with the signature + parameter appended to the end.{' '} + +This process follows the these steps: + +* The private key of the user identified by the user_id parameter is obtained. +* The querystringis separated from the signature parameter. +* The hash is calculated using the strings obtained in steps 1 and 2. +* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. + +```javascript +import hashlib + + import hashlib + + import hmac + + def{' '} + calcular_firma + (Private key + , chain + ) + : + signature = hmac + .new + (Private key + , chain + , hashlib + .sha1 + ) + .hexdigest + ( + ) + return chain{' '} + +{' '} + '&signature='{' '} + + signature +``` diff --git a/docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md b/docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md b/docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md b/docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md b/docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md b/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md new file mode 100644 index 0000000..a8296ee --- /dev/null +++ b/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md @@ -0,0 +1,380 @@ +101OBeX offers the possibility of working with encrypted nodes or + projects. All services that are exposed through the API Manager can be + consumed in an encrypted manner, provided this preference is established + during project creation. + +IT IS IMPORTANT TO UNDERSTAND THAT ONCE A PROJECT IS CREATED, THIS + ENCRYPTION SETTING CANNOT BE ALTERED. THEREFORE, IT IS CRITICAL TO + CAREFULLY CONSIDER WHETHER YOUR PROJECT REQUIRES ENCRYPTION TO AVOID + SUBSEQUENT DATA LOSS. + +When you indicate that you want to be able to consume an encrypted + project, you will be assigned an encryption key for it (cipher + key) which can be consulted in the project data. + +Once this key has been obtained, the calls can be encrypted under the + AES256 algorithm with said key and the response will be encrypted with the + same encryption key. + +The nomenclature of the calls will be as follows: + +The nomenclature of the calls will be as follows. + +Decrypted call: + +```javascript +https://api.101obex.com:8000/servicio?parameters +``` + +Encrypted call: + +```javascript +https://api.101obex.com:5000/servicio?encripted_data=(encripted + parameters) +``` + +This adds an additional encryption layer that guarantees the security of + the transferred data. + +The response will be encrypted and its morphology will be as detailed + below + +Decrypted answer: + +```javascript +{ + + "status" + : + true + , + + "e_mail" + : + "test.user@waynnovate.com" + , + + "elapsed" + : + 0.18008685111999512 + , + + "datos_certificacion" + : + { + "codtran" + : + "0075f16df4b053a5d10502ffb01e9cd8" + } + , + + "session_id" + : + "e9b7945dcbd5d18a6239acc7acafe8e9" + , + + "type_of_user" + : + "impulso bu00e1sico" + , + + "profile_id" + : + 137 + , + + "code_profile" + : + "USUARIO" + , + + "user_id" + : + 50 + , + + "status" + : + null + , + + "phone_lenght" + : + 10 + , + + "menu" + : + [ + [ + "Acceso Ru00e1pido" + , + [ + "Movements" + , + "movements" + , + false + ] + , + [ + "Add a card" + , + {' '} + "gestor_origenes_propios/crear" + , + false + ] + , + [ {' '} + "Recharge cellphone minutes" + , + "Rechargecellphoneminutes" + , + false + ] + , + [ {' '} + "Transfer between clients" + , + "moneysending" + , + false + ] + , + [ + "Request money" + , + "requestmoney" + , + false + ] + , + [ + "Services payment" + , + "payexpresspay" + , + false + ] + ] + ] + , + "user_affiliate_id" + : + 1 + , + "currency" + : + "MXN" + , + "name" + : + "qwertyuio qwertyui" + , + "certificate" + : + false + , + "phone" + : + "9876543212" + + } +``` + +Encrypted answer: + +```javascript +{ + + "status" + :{' '} + true + , + + "encrypted_data" + :{' '} + "k8DoQ9ADDph2o3oHdzeW0wO-FITgfGQD4xy9GcfuBtQy8IVazicD4J66kZ-HTlgWpCkXn7xlGDqCcXUNV + {' '} + TW9T7Ww1DpPXPyoilI2GPhOFliAWGpip_R56WVYr07qGmMUJy_n2I3si___hBb9MPEI3KBh9eupUO2gKDT + {' '} + bULimM_cpCtRHsqFdTZIpRedC0W_HdTgcCrZ_CItCoxAoyiCjx6knaH9dbaUV1GoywBWfuh3Dh4iqHGejH + {' '} + RbYi7Apm1PjCj5WNPEEN-UlfNj9hvurwTgCjBXilBg19ld3LUJj-1Yh48It_gLkna12ZqBiuUnQ3Rpj1hH + {' '} + vz7CkTjxStkigCyKA4lPh94cK_cJgaiv7c1Uyb54cB8N2bUTBhD4ojOSfR88bN-4wYiIEspinuKDmpHXO8 + {' '} + HP_IgJSfgkU4QiTfbBKQ8u-2Hxe2x1JgbKIvjpiBNK0H3GNnaPrtciFf88EeQun5oZwOJiFtZBQHv-V4fd + {' '} + kfuOYBAWaOm13I9_PYiJir9BE145mIQOuugnebLASKju5UA-NHEclZ7fUF1fNyCeFxGW-6oYfadBanzpIM + {' '} + 5PjRUODa92gF4X0pPcLy4v1jcegJSMSpTW0DH_vM14gV56OJ0Dvyf52OB2e3LDlfP7TwYmbY7YWwj5MpR1 + {' '} + uoieOwbGsqbXqKvOOCmlwGIvAc-vowoTLRpviT1_fymNHyRqtb89Gjy_2rvsTgBLoZavKBOv5Wvu1Dil5u + {' '} + 0wVzo7pqk5XV3lnTCi-t7kLiH7SfXtuIBhPQzPTO40btxpZwC2V4QBsx1BcBMs_cb7Kmcy53exgpQQQkRN + {' '} + bTU6jkSnTcccaCPzT9WGhxiHrS1U5bXXW4BM1j9aHFDjhBp6uT9_2QAh0oh-uljLTnw6r6KH69VFJyO2oK + {' '} + jG2Qttu-L95ynxW94ecMuLlU26O7F-j9IO1FpI-c8cfKAQs6tbUnv_cU49nTwpX5TZI1ZfCDOb042-KiCJ + {' '} + qOfP61FWZtEQrMw7VZwUxMylcku_In9caUUYgpvJhHwqE6GKdS0XuKEcGUV-tfMvBcnewCgobcZhIeTYKh + {' '} + KSoaA1AHR7IYHaf8U4isTCzcexJL_mnwHlvWGVEXmM2Ywy_y9Y6nIDFTXPsUG4aYjw=" + + } +``` + +Python code example to encrypt and decrypt (encryption key + highlighted) + +```javascript +from Crypto + .Cipher{' '} + import AES + + from Crypto + .Random{' '} + import new{' '} + as Random + + from base64{' '} + import urlsafe_b64encode + , urlsafe_b64decode + + class{' '} + CipherByAES + : + def{' '} + __init__ + (self + ) + : + self.block_size{' '} + ={' '} + 16 + self.key{' '} + ={' '} + 'cedb3fb962255b1aafd033cabe831530' + self.pad{' '} + ={' '} + lambda s + : s{' '} + +{' '} + (self + .block_size{' '} + -{' '} + len + (s + ){' '} + % self + .block_size + ){' '} + * + chr + (self + .block_size{' '} + -{' '} + len + (s + ){' '} + % self + .block_size + ) + self.unpad{' '} + ={' '} + lambda s + : s + [ + : + - + ord + (s + [ + len + (s + ){' '} + -{' '} + 1 + : + ] + ) + ] + def{' '} + encrypt + (self + , data + ) + : + plain_text = self + .pad + (data + ) + iv = Random + ( + ) + .read + (AES + .block_size + ) + cipher = AES + .new + (self + .key + , AES + .MODE_OFB + , iv + ) + return urlsafe_b64encode + (iv{' '} + + cipher + .encrypt + (plain_text + .encode + ( + ) + ) + ) + .decode + ( + ) + def{' '} + decrypt + (self + , data + ) + : + cipher_text ={' '} + urlsafe_b64decode(data + .encode + ( + ) + ) + iv = cipher_text + [ + :self + .block_size + ] + cipher = AES + .new + (self + .key + , AES + .MODE_OFB + , iv + ) + return self + .unpad + (cipher + .decrypt + (cipher_text + [self + .block_size + ] + ) + ) + .decode + ( + ) +``` diff --git a/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md b/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md new file mode 100644 index 0000000..0b2aad8 --- /dev/null +++ b/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md @@ -0,0 +1,17 @@ +101OBeX organizes and groups the clients of a node or project into + communities. + +Communities are groups of users or clients of a project whose main common + element or union is the community to which they belong. This is + determined, in most cases, although other criteria may apply, by + affiliates (corporations) responsible for registering users or + clients within the system. + +Users or clients in a project that do not have a specific community will + belong to the community of the node or project. Importantly, end users or + customers retain the flexibility to switch between communities as needed. + Grouping users or customers by communities offers many advantages at the + operation and data analysis level, since it allows us to undertake actions + on a specific set of users or end customers based on the community to + which they belong. Moreover, it greatly enhances capabilities for data + mining and reporting activities. diff --git a/docs/developer.avapframework.com/0_Comprar_Comprar_EN.md b/docs/developer.avapframework.com/0_Comprar_Comprar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md b/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md new file mode 100644 index 0000000..6797959 --- /dev/null +++ b/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md @@ -0,0 +1,150 @@ +This service returns the amount of a transaction to be able to see it. + +GET: + `URL_BASE + /ws/util.py/get_importe_transaccion` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "amount" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `amount:` Amount of the transaction searched. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7' +``` + +## Business logic: + +By means of this endpoint we obtain the amount associated with a + transaction. diff --git a/docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md b/docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md b/docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md b/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md new file mode 100644 index 0000000..7a2f9af --- /dev/null +++ b/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md @@ -0,0 +1,34 @@ +Within a node or project, two distinct modules exist, and understanding + their differences is crucial to prevent confusion. We are talking about + the Currencies and FX Exchange modules. + +A node or project works with a location and a currency, information that + is provided at the time of creation of a node with the activation of a + project. + +The currency selected when the node or project is created is the only + currency with which the node will operate until the administrator decides + to create or register new currencies. + +That is, a node can be configured in a specific location, the United + States for example, and select USD as the currency for the node or + project. From that moment on, all operations carried out in that node or + project will be recorded with that currency. If later you want other + currencies to exist, such as EUR, you must register the request in the + node or project as an authorized currency. + +This task is carried out in the Currencies section which can be found in + the node or project tab or in the side menu under the Projects section. + +In this same section you can create your own currencies and assign them a + value with a purchase and sale price. + +Working with a loyalty solution based on the accumulation of customer + points, based on their activity, requires registering those points as a + form of currency and giving them a value. In this way, the client will + always be able to use that points wallet in the operation network, thanks + to the FX Exchange service. + +The mission of the FX Exchange service is to maintain a list of + currencies, the reference price, the purchase price, and the sale price, + thus allowing multi-currency operations. diff --git a/docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md b/docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md b/docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md b/docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md b/docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md b/docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md b/docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md b/docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md b/docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Introduction.md b/docs/developer.avapframework.com/0_Introduction.md new file mode 100644 index 0000000..a0a9d72 --- /dev/null +++ b/docs/developer.avapframework.com/0_Introduction.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more.. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/0_close_close.md b/docs/developer.avapframework.com/0_close_close.md new file mode 100644 index 0000000..7691d07 --- /dev/null +++ b/docs/developer.avapframework.com/0_close_close.md @@ -0,0 +1,174 @@ +## ws/orders.py/close + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + "120d29398f8ceae89e707ad1547fa12c" + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Code of the transaction that cancels the order. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', + 'headers': { + '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' + {' '} + \ + + --header{' '} + + '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' +``` + +## Business logic: + +The objective of this service is to permit an administrator close an + order. diff --git a/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md b/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md new file mode 100644 index 0000000..cd3ca23 --- /dev/null +++ b/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases/tag/prerelease + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.mac.zip diff --git a/docs/developer.avapframework.com/10_get_signature_get_signature.md b/docs/developer.avapframework.com/10_get_signature_get_signature.md new file mode 100644 index 0000000..af486aa --- /dev/null +++ b/docs/developer.avapframework.com/10_get_signature_get_signature.md @@ -0,0 +1,156 @@ +This service is used to get the sign of a informed string + +GET: + `URL_BASE + /ws/util.py/get_signature` + +## Receives: + +The string to be signed and the private key to sign the string + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status": true, "signature": + "38779748c3bb130d0d1f8084ad92607d705e88b7", "elapsed": + 0.002902984619140625 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signature:` The signature calculated from the string{' '} +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + url ={' '} + + "http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm" + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' + + } + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm', + 'headers': { + '101ObexApiKey': 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8"); + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + fetch("http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm' + {' '} + \ +``` + +## Business logic: + +With this endpoint it is allowed to calculate the sign from a strign using + a private key. diff --git a/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md b/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md new file mode 100644 index 0000000..9c58240 --- /dev/null +++ b/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md @@ -0,0 +1,552 @@ +AVAP TM Dev Studio 2024 lets you perform most tasks directly + from the keyboard. This page lists out the default bindings (keyboard + shortcuts) and describes how you can update them. + +### Keyboard Shortcuts editor + +AVAP TM Dev Studio provides a rich and easy keyboard shortcuts + editing experience using Keyboard Shortcuts editor. It + lists all available commands with and without keybindings and you can + easily change / remove / reset their keybindings using the available + actions. It also has a search box on the top that helps you in finding + commands or keybindings. You can open this editor by going to the menu + under File > Preferences >{' '} + Keyboard Shortcuts . + +Most importantly, you can see keybindings according to your keyboard + layout. For example, key binding `Cmd+\` in US keyboard layout + will be shown as `Ctrl+Shift+Alt+Cmd+7` when layout is changed + to German. The dialog to enter key binding will assign the correct and + desired key binding as per your keyboard layout. + +For doing more advanced keyboard shortcut customization, read Advanced + Customization. + +### Keymap extensions + +Keyboard shortcuts are vital to productivity and changing keyboarding + habits can be tough. To help with this, File >{' '} + Preferences >{' '} + Migrate Keyboard Shortcuts from... shows you a list of + popular keymap extensions. These extensions modify the AVAP TM {' '} + Dev Studio shortcuts to match those of other editors so you don't need + to learn new keyboard shortcuts. There is also a Keymaps category of + extensions in the Marketplace. + +### Keyboard Shortcuts Reference + +We also have a printable version of these keyboard shortcuts.{' '} + Help > Keyboard Shortcut Reference {' '} + displays a condensed PDF version suitable for printing as an easy + reference. + +Below are links to the three platform-specific versions (US English + keyboard): + +* Windows +* macOS +* Linux + +### Detecting keybinding conflicts + +If you have many extensions installed or you have customized your keyboard + shortcuts, you can sometimes have keybinding conflicts where the same + keyboard shortcut is mapped to several commands. This can result in + confusing behavior, especially if different keybindings are going in and + out of scope as you move around the editor. + +The Keyboard Shortcuts editor has a context menu command{' '} + Show Same Keybindings , which will filter the keybindings + based on a keyboard shortcut to display conflicts. + +Pick a command with the keybinding you think is overloaded and you can see + if multiple commands are defined, the source of the keybindings and when + they are active. + +### Troubleshooting keybindings + +To troubleshoot keybindings problems, you can execute the command{' '} + Developer: Toggle Keyboard Shortcuts Troubleshooting . + This will activate logging of dispatched keyboard shortcuts and will open + an output panel with the corresponding log file. + +You can then press your desired keybinding and check what keyboard + shortcut AVAP™ DS detects and what command is invoked. + +For example, when pressing `cmd+/` in a code editor on macOS, + the logging output would be: + +```javascript +[KeybindingService]: / Received keydown event - modifiers: [meta], code: + MetaLeft, keyCode: 91, key: Meta + + [KeybindingService]: | Converted keydown event - modifiers: [meta], + code: MetaLeft, keyCode: 57 ('Meta') + + [KeybindingService]: \ Keyboard event cannot be dispatched. + + [KeybindingService]: / Received keydown event - modifiers: [meta], code: + Slash, keyCode: 191, key: / + [KeybindingService]: | Converted keydown event - modifiers: [meta], + code: Slash, keyCode: 85 ('/') + + [KeybindingService]: | Resolving meta+[Slash] + + [KeybindingService]: \ From 2 keybinding entries, matched + editor.action.commentLine, when: editorTextFocus && + !editorReadonly, source: built-in. +``` + +The first keydown event is for the MetaLeft key (cmd) and cannot + be dispatched. The second keydown event is for the Slash key (/) + and is dispatched as meta+[Slash]. There were two keybinding entries + mapped from meta+[Slash] and the one that matched was for the command + editor.action.commentLine, which has the when condition editorTextFocus + && !editorReadonly and is a built-in keybinding entry. + +### Viewing modified keybindings + +You can view any user modified keyboard shortcuts in AVAP TM Dev + Studio in the Keyboard Shortcuts editor with the Show + User Keybindings command in the More Actions (...) menu. This + applies the @source:user filter to the Keyboard Shortcuts editor + (Source is 'User'). + +### Advanced customization + +All keyboard shortcuts in AVAP TM Dev Studio can be customized + via the keybindings.json file. + +To configure keyboard shortcuts through the JSON file, open{' '} + Keyboard Shortcuts editor and select the{' '} + Open Keyboard Shortcuts (JSON) button on the + right of the editor title bar. This will open your keybindings.json file + where you can overwrite the Default Keyboard Shortcuts. + +You can also open the keybindings.json file from the Command Palette + (Ctrl+Shift+P) with the Preferences: Open Keyboard Shortcuts + (JSON) command. + +### Keyboard rules + +Each rule consists of: + +* a key that describes the pressed keys. +* a command containing the identifier of the command to execute. +* an optional when clause containing a boolean expression that will be evaluated depending on the current context. + +Chords (two separate keypress actions) are described by separating + the two keypresses with a space. For example, `Ctrl+K Ctrl+C` . + +When a key is pressed: + +* the rules are evaluated from bottom to{' '} top . +* the first rule that matches, both the key and in terms of when, is accepted. +* no more rules are processed. +* if a rule is found and has a command set, the command is executed. + +The additional keybindings.json rules are appended at runtime to the + bottom of the default rules, thus allowing them to overwrite the default + rules. The keybindings.json file is watched by AVAP™ DS so editing it + while AVAP TM Dev Studio is running will update the rules at + runtime. + +The keyboard shortcuts dispatching is done by analyzing a list of rules + that are expressed in JSON. Here are some examples: + +```javascript +// Keybindings that are active when the focus is in the editor + + { "key": "home", "command": "cursorHome", "when": "editorTextFocus" + }, + + { "key": "shift+home", "command": "cursorHomeSelect", "when": + "editorTextFocus" }, + + + // Keybindings that are complementary + + { "key": "f5", "command": "workbench.action.debug.continue", + "when": "inDebugMode" }, + + { "key": "f5", "command": "workbench.action.debug.start", "when": + "!inDebugMode" }, + + + // Global keybindings + + { "key": "ctrl+f", "command": "actions.find" }, + + { "key": "alt+left", "command": "workbench.action.navigateBack" + }, + + { "key": "alt+right", "command": "workbench.action.navigateForward" + }, + + + // Global keybindings using chords (two separate keypress + actions) + + { "key": "ctrl+k enter", "command": "workbench.action.keepEditor" + }, + + { "key": "ctrl+k ctrl+w", "command": + "workbench.action.closeAllEditors" }, +``` + +### Accepted keys + +The key is made up of modifiers and the key itself. + +The following modifiers are accepted: + +The following keys are accepted: + +* `f1-f19` , `a-z` , `0-9` +* ```, `-` , `=` , `[` , `]` ,{' '} `\` , `;` , `'` , `,` ,{' '} `.` , `/` +* `left` , `up` , `right` ,{' '} `down` , `pageup` , `pagedown` ,{' '} `end` , `home` +* `tab` , `enter` , `escape` ,{' '} `space` , `backspace` , `delete` +* `pausebreak` , `capslock` , `insert` +* `numpad0-numpad9` , `numpad_multiply` ,{' '} `numpad_add` , `numpad_separator` +* `numpad_subtract` , `numpad_decimal` ,{' '} `numpad_divide` + +### Command arguments + +You can invoke a command with arguments. This is useful if you often + perform the same operation on a specific file or folder. You can add a + custom keyboard shortcut to do exactly what you want. + +The following is an example overriding the `Enter` key to print + some text: + +```javascript +{ + "key": "enter", + "command": "type", + "args": { "text": "Hello World" }, + "when": "editorTextFocus" + + } +``` + +The type command will receive {"text": "Hello + World"} as its first argument and add "Hello World" to + the file instead of producing the default command. + +For more information on commands that take arguments, refer to Built-in + Commands. + +### Running multiple commands + +It is possible to create a keybinding that runs several other commands + sequentially using the command runCommands. + +Run several commands without arguments: copy current line down, mark the + current line as comment, move cursor to copied line + +```javascript +{ + "key": "ctrl+alt+c", + "command": "runCommands", + "args": { + "commands": [ "editor.action.copyLinesDownAction", + "cursorUp", + "editor.action.addCommentLine", + "cursorDown" + ] } + + }, +``` + +It is also possible to pass arguments to commands: create a new untitled + TypeScript file and insert a custom snippet + +```javascript +{ + "key": "ctrl+n", + "command": "runCommands", + "args": { + "commands": [ { + "command": "workbench.action.files.newUntitledFile", + "args": { + "languageId": "typescript" + } + }, + { + "command": "editor.action.insertSnippet", + "args": { + "langId": "typescript", + "snippet": "class ${1:ClassName} + {\n\tconstructor() {\n\t\t$0\n\t}\n}" + } + } + ] } + + }, +``` + +Note that commands run by runCommands receive the value of + "args" as the first argument. So in the example above, + workbench.action.files.newUntitledFile receives + {"languageId": "typescript" } as its first + and only argument. + +To pass several arguments, one needs to have "args" as an array: + +```javascript +{ + "key": "ctrl+shift+e", + "command": "runCommands", + "args": { + "commands": [ { + // command invoked with 2 arguments: + vscode.executeCommand("myCommand", "arg1", "arg2") + "command": "myCommand", + "args": ["arg1", "arg2"] + } + ] } + + } +``` + +To pass an array as the first argument, one needs to wrap the array in + another array: "args": [ [1, 2, 3] ]. + +### Removing a specific key binding rule + +You can write a key binding rule that targets the removal of a specific + default key binding. With the keybindings.json, it was always possible to + redefine all the key bindings of AVAP TM Dev Studio, but it can + be difficult to make a small tweak, especially around overloaded keys, + such as `Tab` or `Escape` . To remove a specific key + binding, add a - to the command and the rule will be a removal rule. + +Here is an example: + +```javascript +// In Default Keyboard Shortcuts + + ... + + { "key": "tab", "command": "tab", "when": ... }, + + { "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": + ... }, + + { "key": "tab", "command": "acceptSelectedSuggestion", "when": ... + }, + + ... + + + // To remove the second rule, for example, add in keybindings.json: + + { "key": "tab", "command": "-jumpToNextSnippetPlaceholder" } +``` + +To override a specific key binding rule with an empty action, you can + specify an empty command: + +```javascript +// To override and disable any `tab` keybinding, for example, add in + keybindings.json: + + { "key": "tab", "command": "" } +``` + +### Keyboard layouts + +The keys above are string representations for virtual keys and do not + necessarily relate to the produced character when they are pressed. More + precisely: + +* Reference: Virtual-Key Codes (Windows) +* `tab` for VK_TAB (0x09) +* ; for VK_OEM_1 (0xBA) +* `=` for VK_OEM_PLUS (0xBB) +* `,` for VK_OEM_COMMA (0xBC) +* `-` for VK_OEM_MINUS (0xBD) +* `.` for VK_OEM_PERIOD (0xBE) +* `/` for VK_OEM_2 (0xBF) +* ` for VK_OEM_3 (0xC0) +* `[` for VK_OEM_4 (0xDB) +* `\` for VK_OEM_5 (0xDC) +* `]` for VK_OEM_6 (0xDD) +* `'` for VK_OEM_7 (0xDE) +* etc. + +Different keyboard layouts usually reposition the above virtual keys or + change the characters produced when they are pressed. When using a + different keyboard layout than the standard US, AVAP TM Dev + Studio does the following: + +All the key bindings are rendered in the UI using the current system's + keyboard layout. For example, Split Editor when using a French + (France) keyboard layout is now rendered as `Ctrl+*` : + +When editing keybindings.json, AVAP TM Dev Studio highlights + misleading key bindings, those that are represented in the file with the + character produced under the standard US keyboard layout, but that need + pressing keys with different labels under the current system's + keyboard layout. For example, here is how the{' '} + Default Keyboard Shortcuts rules look like when using a + French (France) keyboard layout: + +There is also a widget that helps input the key binding rule when editing + keybindings.json. To launch the Define Keybinding widget, press{' '} + `Ctrl+K Ctrl+K` . The widget listens for key presses and renders + the serialized JSON representation in the text box and below it, the keys + that AVAP TM Dev Studio has detected under your current keyboard + layout. Once you've typed the key combination you want, you can press{' '} + `Enter` and a rule snippet will be inserted. + +### Keyboard layout-independent bindings + +Using scan codes, it is possible to define keybindings which do not change + with the change of the keyboard layout. For example: + +```javascript +{ "key": "cmd+[Slash]", "command": "editor.action.commentLine", + "when": "editorTextFocus" } +``` + +Accepted scan codes: + +* `[F1]-[F19]` , `[KeyA]-[KeyZ]` ,{' '} `[Digit0]-[Digit9]` +* `[Backquote]` , `[Minus]` , `[Equal]` ,{' '} `[BracketLeft]` , `[BracketRight]` ,{' '} `[Backslash]` , `[Semicolon]` ,{' '} `[Quote]` , `[Comma]` , `[Period]` ,{' '} `[Slash]` +* `[ArrowLeft]` , `[ArrowUp]` ,{' '} `[ArrowRight]` , `[ArrowDown]` ,{' '} `[PageUp]` , `[PageDown]` , `[End]` ,{' '} `[Home]` +* `[Tab]` , `[Enter]` , `[Escape]` ,{' '} `[Space]` , `[Backspace]` , `[Delete]` +* `[Pause]` , `[CapsLock]` , `[Insert]` +* `[Numpad0]-[Numpad9]` , `[NumpadMultiply]` ,{' '} `[NumpadAdd]` , `[NumpadComma]` +* `[NumpadSubtract]` , `[NumpadDecimal]` ,{' '} `[NumpadDivide]` + +### when clause contexts + +AVAP TM Dev Studio gives you fine control over when your key + bindings are enabled through the optional when clause. If your key binding + doesn't have a when clause, the key binding is globally available at + all times. A when clause evaluates to either Boolean true or false for + enabling key bindings. + +AVAP TM Dev Studio sets various context keys and specific values + depending on what elements are visible and active in the AVAP TM {' '} + Dev Studio UI. For example, the built-in Start Debugging command has the + keyboard shortcut `F5` , which is only enabled when there is an + appropriate debugger available (context debuggersAvailable is + true) and the editor isn't in debug mode (context inDebugMode + is false): + +You can also view a keybinding's when clause directly in the Default + Keybindings JSON ( + + Preferences: Open Default Keyboard Shortcuts (JSON) + + ): + +```javascript +{ "key": "f5", "command": "workbench.action.debug.start", + "when": "debuggersAvailable && !inDebugMode" }, +``` + +For when clause conditional expressions, the following conditional + operators are useful for keybindings: + +You can find the full list of when clause conditional operators in the + when clause contexts reference. + +You can find some of the available when clause contexts in the when clause + context reference. + +The list there isn't exhaustive and you can find other when clause + contexts by searching and filtering in the Keyboard Shortcuts editor ( + Preferences: Open Keyboard Shortcuts ) or reviewing + the Default Keybindings JSON file ( + + Preferences: Open Default Keyboard Shortcuts (JSON) + + ). + +### Custom keybindings for refactorings + +The editor.action.codeAction command lets you configure keybindings for + specific Refactorings (Code Actions). For example, the keybinding + below triggers the Extract function refactoring Code + Actions: + +```javascript +{ + "key": "ctrl+shift+r ctrl+e", + "command": "editor.action.codeAction", + "args": { + "kind": "refactor.extract.function" + } + + } +``` + +This is covered in depth in the Refactoring topic where you can learn + about different kinds of Code Actions and how to prioritize them in the + case of multiple possible refactorings. + +### Default Keyboard Shortcuts + +You can view all default keyboard shortcuts in AVAP Dev Studio in the{' '} + Keyboard Shortcuts editor with the{' '} + Show Default Keybindings command in the{' '} + More Actions (...) menu. This applies the + @source:default filter to the Keyboard Shortcuts editor + ( Source is 'Default'). + +You can view the default keyboard shortcuts as a JSON file using the + command{' '} + + Preferences: Open Default Keyboard Shortcuts (JSON) + + . + +Some commands included below do not have default keyboard shortcuts and so + are displayed as unassigned but you can assign your own keybindings. + +### Next steps + +Now that you know about our Key binding support, what's next... + +* Language Support - Our Good, Better, Best language grid to see what you can expect +* Debugging - This is where AVAP™ DS really shines +* Node.js - End to end Node.js scenario with a sample app + +### Common questions + +In the Keyboard Shortcut editor, you can filter on + specific keystrokes to see which commands are bound to which keys. Below + you can see that Ctrl+Shift+P is bound to{' '} + Show All Commands to bring up the Command Palette. + +Find a rule that triggers the action in the{' '} + Default Keyboard Shortcuts and write a modified version + of it in your keybindings.json file: + +```javascript +// Original, in Default Keyboard Shortcuts + + { "key": "ctrl+shift+k", "command": "editor.action.deleteLines", + "when": "editorTextFocus" }, + + // Modified, in User/keybindings.json, Ctrl+D now will also trigger this + action + + { "key": "ctrl+d", "command": "editor.action.deleteLines", + "when": "editorTextFocus" }, +``` + +Use the editorLangId context key in your when clause: + +```javascript +{ "key": "shift+alt+a", "command": "editor.action.blockComment", + "when": "editorTextFocus && editorLangId == csharp" + }, +``` + +The most common problem is a syntax error in the file. Otherwise, try + removing the when clause or picking a different key. Unfortunately, at + this point, it is a trial and error process. diff --git a/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md b/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md new file mode 100644 index 0000000..1d62ddc --- /dev/null +++ b/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md @@ -0,0 +1,933 @@ +"Tips and Tricks" lets you jump right in and learn how to be + productive with AVAP™ Dev Studio 2024. You'll become familiar with its + powerful editing, code intelligence, and source code control features and + learn useful keyboard shortcuts. This topic goes pretty fast and provides + a broad overview, so be sure to look at the other in-depth topics in + Getting Started and the User Guide to learn more. + +### Basics + +The best way of exploring AVAP TM Dev Studio hands-on is to open + the Welcome page. You will get an overview of AVAP TM Dev + Studio's customizations and features. Help > Welcome. + + + +Pick a Walkthrough for a self-guided tour through the + setup steps, features, and deeper customizations that AVAP TM {' '} + Dev Studio offers. As you discover and learn, the walkthroughs track your + progress. + +If you are looking to improve your code editing skills open the{' '} + Interactive Editor Playground . Try out AVAP TM {' '} + Dev Studio's code editing features, like multi-cursor editing, + IntelliSense, Snippets, Emmet, and many more.{' '} + Help > Editor Playground . + + + +Access all available commands based on your current context. + +Keyboard Shortcut: Ctrl+Shift+P + + + +All of the commands are in the Command Palette with the associated key + binding (if it exists). If you forget a keyboard shortcut, use the + Command Palette to help you out. + +Download the keyboard shortcut reference sheet for your platform + (macOS, Windows, Linux). + +Quickly open files. + +Keyboard Shortcut: `Ctrl+P` + +Tip : Type `?` to view command suggestions. + + + +Typing commands such as edt and term followed by a space will bring up + dropdown lists. + + + +Repeat the Quick Open keyboard shortcut to cycle quickly + between recently opened files. + +You can open multiple files from Quick Open by pressing + the Right arrow key. This will open the currently selected file in the + background and you can continue selecting files from{' '} + Quick Open . + +Open Recent + +Keyboard Shortcut: `Ctrl+R` + +Displays a Quick Pick dropdown with the list from File {' '} + > Open Recent with recently opened folders and + workspaces followed by files. + +### Command line + +AVAP TM Dev Studio has a powerful command line interface + (CLI) which allows you to customize how the editor is launched to + support various scenarios. + +```javascript +# open code with current directory + + code . + # open the current directory in the most recently used code window + + code -r . + # create a new window + + code -n + + # change the language + + code --locale=es + + # open diff editor + + code --diff + + # open file at specific line and column + + code --goto package.json:10:5 + + # see help options + + code --help + + # disable all extensions + + code --disable-extensions . +``` + +Workspace specific files are in a .avapcode folder at the root. For + example, tasks.json for the Task Runner and launch.json for the debugger.{' '} + +### Status Bar + +Keyboard Shortcut: `Ctrl+Shift+M` + +Quickly jump to errors and warnings in the project. + +Cycle through errors with `F8` or `Shift+F8` + +You can filter problems either by type ('errors', + 'warnings') or text matching. + +Keyboard Shortcut: `Ctrl+K M` + +If you want to persist the new language mode for that file type, you can + use the Configure File Association for command to + associate the current file extension with an installed language. + +### Customization + +There are many things you can do to customize AVAP TM Dev . + +* Change your theme +* Change your keyboard shortcuts +* Tune your settings +* Add JSON validation +* Create snippets +* Install extensions + +Keyboard Shortcut: `Ctrl+K Ctrl+T` + +You can install more themes from the AVAP TM Dev Studio + extension Marketplace. + +Are you used to keyboard shortcuts from another editor? You can install a + Keymap extension that brings the keyboard shortcuts from your favorite + editor to AVAP TM Dev Studio. Go to Preferences {' '} + > Migrate Keyboard Shortcuts from ... to see the + current list on the Marketplace. Some of the more popular ones: + +* Vim +* Sublime Text Keymap +* Emacs Keymap +* Atom Keymap +* Brackets Keymap +* Eclipse Keymap +* AVAP™ Dev Studio Keymap + +Keyboard Shortcut: `Ctrl+K Ctrl+S` + +You can search for shortcuts and add your own keybindings to the + keybindings.json file. + + + +See more in Key Bindings for AVAP TM Dev Studio. + +By default AVAP TM Dev Studio shows the Settings editor, you can + find settings listed below in a search bar, but you can still edit the + underlying settings.json file by using the{' '} + Open User Settings (JSON) command or by changing + your default settings editor with the workbench.settings.editor setting. + +Open User Settings settings.json + +Keyboard Shortcut: `Ctrl+,` + +Change the font size of various UI elements + +```javascript +// Main editor + + "editor.fontSize": 18, + + // Terminal panel + + "terminal.integrated.fontSize": 14, + + // Output panel + + "[Log]": { + "editor.fontSize": 15 + + } +``` + +Change the zoom level + +```javascript +"window.zoomLevel": 5 +``` + +Font ligatures + +```javascript +"editor.fontFamily": "Fira Code", + + "editor.fontLigatures": true +``` + + + +Auto Save + +```javascript +"files.autoSave": "afterDelay" +``` + +You can also toggle Auto Save from the top-level menu with the File > + Auto Save. + +Format on save + +```javascript +"editor.formatOnSave": true +``` + +Format on paste + +```javascript +"editor.formatOnPaste": true +``` + +Change the size of Tab characters + +```javascript +"editor.tabSize": 4 +``` + +Spaces or Tabs + +```javascript +"editor.insertSpaces": true +``` + +Render whitespace + +```javascript +"editor.renderWhitespace": "all" +``` + +Whitespace characters are rendered by default in text selection. + +Ignore files / folders + +Removes these files / folders from your editor window. + +```javascript +"files.exclude": { + "somefolder/": true, + "somefile": true + + } +``` + +Remove these files / folders from search results. + +```javascript +"search.exclude": { + "someFolder/": true, + "somefile": true + + } +``` + +And many, many other customizations. + +You can scope the settings that you only want for specific languages by + the language identifier. You can find a list of commonly used language IDs + in the Language Identifiers reference. + +```javascript +"[languageid]": { + + + } +``` + + + +Enabled by default for many file types. Create your own schema and + validation in settings.json + +```javascript +"json.schemas": [ { + "fileMatch": [ "/bower.json" + ], + "url": "https://json.schemastore.org/bower" + } + ] +``` + +or for a schema defined in your workspace + +```javascript +"json.schemas": [ { + "fileMatch": [ "/foo.json" + ], + "url": "./myschema.json" + } + ] +``` + +or a custom schema + +```javascript +"json.schemas": [ { + "fileMatch": [ "/.myconfig" + ], + "schema": { + "type": "object", + "properties": { + "name" : { + "type": "string", + "description": "The name of the entry" + } + } + } + } + ] +``` + +See more in the JSON documentation. + +### Extensions + +Keyboard Shortcut: `Ctrl+Shift+X` + +In the Extensions view, you can search via the search bar + or click the More Actions (...) button to filter + and sort by install count. + + + +In the Extensions view, click{' '} + Show Recommended Extensions in the{' '} + More Actions (...) button menu. + + + +Are you interested in creating your own extension? You can learn how to do + this in the Extension API documentation, specifically check out the + documentation on contribution points. + +* configuration +* commands +* keybindings +* languages +* debuggers +* grammars +* themes +* snippets +* jsonValidation + +### Files and folders + +Keyboard Shortcut: Ctrl+` + + + +Further reading: + +* Integrated Terminal documentation +* Mastering AVAP™ DS's Terminal article + +Keyboard Shortcut: `Ctrl+B` + + + +Keyboard Shortcut: `Ctrl+J` + +Keyboard Shortcut: `Ctrl+K Z` + + + +Enter distraction free Zen mode. + +Press `Esc` twice to exit Zen Mode. + +Keyboard Shortcut: `Ctrl+\` + +You can also drag and drop editors to create new editor groups and move + editors between groups. + + + +Keyboard Shortcut: `Ctrl+1` , `Ctrl+2` ,{' '} + `Ctrl+3` + + + +Keyboard Shortcut: `Ctrl+Shift+E` + +Keyboard Shortcut: `Ctrl+click` ( `Cmd+click` on + macOS) + +You can quickly open a file or image or create a new file by moving the + cursor to the file link and using `Ctrl+click` . + + + +Keyboard Shortcut: `Ctrl+K F` + +Navigate entire history: `Ctrl+Tab` + +Navigate back: `Alt+Left` + +Navigate forward: `Alt+Right` + + + +Create language associations for files that aren't detected correctly. + For example, many configuration files with custom file extensions are + actually JSON. + +```javascript +"files.associations": { + ".database": "json" + + } +``` + +AVAP TM Dev Studio will show you an error message when you try + to save a file that cannot be saved because it has changed on disk. AVAP + TM Dev Studio blocks saving the file to prevent overwriting + changes that have been made outside of the editor. + +In order to resolve the save conflict, click the Compare action in the + error message to open a diff editor that will show you the contents of the + file on disk (to the left) compared to the contents in AVAP + TM Dev Studio (on the right): + + + +Use the actions in the editor toolbar to resolve the save conflict. You + can either Accept your changes and thereby overwriting + any changes on disk, or Revert to the version on disk. + Reverting means that your changes will be lost. + +Note : The file will remain dirty and cannot be saved + until you pick one of the two actions to resolve the conflict. + +### Editing Hacks + +Here is a selection of common features for editing code. If the keyboard + shortcuts aren't comfortable for you, consider installing a keymap + extension for your old editor. + +Tip : You can see recommended keymap extensions in the{' '} + Extensions view by filtering the search to + @recommended:keymaps. + +To add cursors at arbitrary positions, select a position with your mouse + and use `Alt+Click` ( `Option+Click` on + macOS). + +To set cursors above or below the current position use: + +Keyboard Shortcut: `Ctrl+Alt+Up` or `Ctrl+Alt+Down` + + + +You can add additional cursors to all occurrences of the current selection + with Ctrl+Shift+L. + + + +If you do not want to add all occurrences of the current selection, you + can use Ctrl+D instead. This only selects the next occurrence after the + one you selected so you can add selections one by one. + + + +You can select blocks of text by holding `Shift+Alt` ( + `Shift+Option` on macOS) while you drag your mouse. A + separate cursor will be added to the end of each selected line. + + + +You can also use keyboard shortcuts to trigger column selection. + +You can add vertical column rulers to the editor with the editor.rulers + setting, which takes an array of column character positions where + you'd like vertical rulers. + +```javascript +{ + "editor.rulers": [20, 40, 60] + + } +``` + + + +Pressing the Alt key enables fast scrolling in the editor and Explorers. + By default, fast scrolling uses a 5X speed multiplier but you can control + the multiplier with the * Editor: Fast Scroll Sensitivity * + (editor.fastScrollSensitivity) setting. + +Keyboard Shortcut: `Shift+Alt+Up` or{' '} + `Shift+Alt+Down` + +Keyboard Shortcut: `Alt+Up` or `Alt+Down` + + + +Keyboard Shortcut: `Shift+Alt+Left` or{' '} + `Shift+Alt+Right` + + + +You can learn more in the Basic Editing documentation. + +Keyboard Shortcut: `Ctrl+Shift+O` + + + +You can group the symbols by kind by adding a colon, @:. + + + +Keyboard Shortcut: `Ctrl+T` + + + +The Outline view in the File Explorer (default collapsed at the + bottom) shows you the symbols of the currently open file. + + + +You can sort by symbol name, category, and position in the file and allows + quick navigation to symbol locations. + +Keyboard Shortcut: `Ctrl+G` + +Keyboard Shortcut: `Ctrl+U` + +Keyboard Shortcut: `Ctrl+K Ctrl+X` + + + +Currently selected source code: `Ctrl+K Ctrl+F` + +Whole document format: `Shift+Alt+F` + + + +Keyboard Shortcut: `Ctrl+Shift+[` and `Ctrl+Shift+]` + + + +You can also fold/unfold all regions in the editor with Fold All ( + `Ctrl+K Ctrl+0` ) and Unfold All ( + `Ctrl+K Ctrl+J` ). + +You can fold all block comments with Fold All Block Comments ( + `Ctrl+K Ctrl+/` ). + +Keyboard Shortcut: `Ctrl+L` + +Keyboard Shortcut: `Ctrl+Home` and `Ctrl+End` + +In a Markdown file, use + +Keyboard Shortcut: `Ctrl+Shift+V` + +In a Markdown file, use + +Keyboard Shortcut: `Ctrl+K V` + +The preview and editor will synchronize with your scrolling in either + view. + +### IntelliSense + +`Ctrl+Space` to trigger the Suggestions widget. + + + +You can view available methods, parameter hints, short documentation, etc. + +Select a symbol then type `Alt+F12` . Alternatively, you can use + the context menu. + +Select a symbol then type `F12` . Alternatively, you can use the + context menu or `Ctrl+click` ( `Cmd+click` on + macOS). + + + +You can go back to your previous location with the Go {' '} + > Back command or `Alt+Left` . + +You can also see the type definition if you press `Ctrl` ( + `Cmd` on macOS) when you are hovering over the type. + +Select a symbol then type `Shift+F12` . Alternatively, you can + use the context menu. + + + +Select a symbol then type `Shift+Alt+F12` to open the + References view showing all your file's symbols in a dedicated view. + +Select a symbol then type `F2` . Alternatively, you can use the + context menu. + +rename symbol + +Besides searching and replacing expressions, you can also search and reuse + parts of what was matched, using regular expressions with capturing + groups. Enable regular expressions in the search box by clicking the{' '} + Use Regular Expression .* button ( `Alt+R` + ) and then write a regular expression and use parentheses to define + groups. You can then reuse the content matched in each group by using $1, + $2, etc. in the Replace field. + + + +Install the ESLint extension. Configure your linter however you'd + like. Consult the ESLint specification for details on its linting rules + and options. + +Here is configuration to use ES6. + +```javascript +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + "classes": true, + "defaultParams": true + } + }, + "rules": { + "no-const-assign": 1, + "no-extra-semi": 0, + "semi": 0, + "no-fallthrough": 0, + "no-empty": 0, + "no-mixed-spaces-and-tabs": 0, + "no-redeclare": 0, + "no-this-before-super": 1, + "no-undef": 1, + "no-unreachable": 1, + "no-use-before-define": 0, + "constructor-super": 1, + "curly": 0, + "eqeqeq": 0, + "func-names": 0, + "valid-typeof": 1 } + + } +``` + +See IntelliSense for your package.json file. + + + +Support for Emmet syntax. + + + +### Snippets + +File > Preferences >{' '} + Configure User Snippets , select the language, and create + a snippet. + +```javascript +"create component": { + "prefix": "component", + "body": [ "class $1 extends React.Component {", + "", + "\trender() {", + "\t\treturn ($2);", + "\t}", + "", + "}" + ] + }, +``` + +See more details in Creating your own Snippets. + +### Git integration + +Keyboard Shortcut: `Ctrl+Shift+G` + +Git integration comes with AVAP TM Dev Studio + "out-of-the-box". You can install other SCM providers from the + Extension Marketplace. This section describes the Git integration but much + of the UI and gestures are shared by other SCM providers. + +From the Source Control view, select a file to open the diff. + + + +Alternatively, click the Open Changes button in the top + right corner to diff the current open file. + +Views + +The default view for diffs is the side by side view . + +Toggle inline view by clicking the{' '} + More Actions (...) button in the top right and + selecting Toggle Inline View . + + + +If you prefer the inline view, you can set + "diffEditor.renderSideBySide": false. + +Accessible Diff Viewer + +Navigate through diffs with `F7` and `Shift+F7` . + This will present them in a unified patch format. Lines can be navigated + with arrow keys and pressing `Enter` will jump back in the diff + editor and the selected line. + + + +Edit pending changes + You can make edits directly in the pending changes of the diff view. + +Easily switch between Git branches via the Status Bar. + + + +Stage file changes + +Hover over the number of files and click the plus button. + +Click the minus button to unstage changes. + + + +Stage selected + +Stage a portion of a file by selecting that file (using the + arrows) and then choosing Stage Selected Ranges from + the Command Palette . + +Click the (...) button and then select{' '} + Undo Last Commit to undo the previous commit. The changes + are added to the Staged Changes section. + + + +AVAP TM Dev Studio makes it easy to see what Git commands are + actually running. This is helpful when learning Git or debugging a + difficult source control issue. + +Use the Toggle Output command ( + `Ctrl+Shift+U` ) and select Git in the + dropdown. + +View diff decorations in editor. See documentation for more details. + + + +During a merge, go to the Source Control view ( + `Ctrl+Shift+G` ) and make changes in the diff view. + +You can resolve merge conflicts with the inline CodeLens which lets you{' '} + Accept Current Change ,{' '} + Accept Incoming Change ,{' '} + Accept Both Changes , and Compare Changes + . + +```javascript +git config --global merge.tool vscode + + git config --global mergetool.vscode.cmd 'code --wait $MERGED' +``` + +```javascript +git config --global diff.tool vscode + + git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL + $REMOTE' +``` + +### Debugging + +From the Run and Debug view ( `Ctrl+Shift+D` ), select{' '} + create a launch.json file , which will prompt you to + select the environment that matches your project (Node.js, Python, + C++, etc). This will generate a launch.json file. Node.js support is + built-in and other environments require installing the appropriate + language extensions. See the debugging documentation for more details. + + + +Place breakpoints next to the line number. Navigate forward with the Debug + widget. + + + +Place breakpoints next to the line number. Navigate forward with the Debug + widget. + + + +Inspect variables in the Run panels and in the console. + + + +Logpoints act much like breakpoints but instead of halting the debugger + when they are hit, they log a message to the console. Logpoints are + especially useful for injecting logging while debugging production servers + that cannot be modified or paused. + +Add a logpoint with the Add Logpoint command in the left + editor gutter and it will be displayed as a "diamond" shaped + icon. Log messages are plain text but can include expressions to be + evaluated within curly braces ('{}'). + + + +A trigged breakpoint is a breakpoint that is automatically enabled once + another breakpoint is hit. They can be very useful when diagnosing failure + cases in code that happen only after a certain precondition. + +Triggered breakpoints can be set by right-clicking on the glyph margin, + selecting Add Triggered Breakpoint , and then choosing + which other breakpoint enables the breakpoint. + +http://https://code.visualstudio.com/assets/docs/editor/debugging/debug-triggered-breakpoint.mp4 + +### Task runner + +Select Terminal from the top-level menu, run the command{' '} + Configure Tasks , then select the type of task you'd + like to run. This will generate a tasks.json file with content like the + following. See the Tasks documentation for more details. + +```javascript +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ { + "type": "npm", + "script": "install", + "group": { + "kind": "build", + "isDefault": true + } + } + ] + } +``` + +There are occasionally issues with auto generation. Check out the + documentation for getting things to work properly. + +Select Terminal from the top-level menu, run the command{' '} + Run Task , and select the task you want to run. Terminate + the running task by running the command Terminate Task + + + +You can define a keyboard shortcut for any task. From the{' '} + Command Palette ( `Ctrl+Shift+P` ), + select Preferences: Open Keyboard Shortcuts File , bind + the desired shortcut to the workbench.action.tasks.runTask command, and + define the Task as args. + +For example, to bind `Ctrl+H` to the Run tests task, add the + following: + +```javascript +{ + "key": "ctrl+h", + "command": "workbench.action.tasks.runTask", + "args": "Run tests" + + } + + Run npm s +``` + + + +From the explorer you can open a script in the editor, run it as a task, + and launch it with the node debugger (when the script defines a debug + option like --inspect-brk). The default action on click is to open the + script. To run a script on a single click, set npm.scriptExplorerAction to + "run". Use the setting npm.exclude to exclude scripts in + package.json files contained in particular folders. + +With the setting npm.enableRunFromFolder, you can enable to run npm + scripts from the File Explorer's context menu for a folder. The + setting enables the command Run NPM Script in Folder ... + when a folder is selected. The command shows a Quick Pick list of the npm + scripts contained in this folder and you can select the script to be + executed as a task. + +### Portable mode + +AVAP TM Dev Studio has a Portable mode which lets you keep + settings and data in the same location as your installation, for example, + on a USB drive. + +### Insiders builds + +The AVAP™ Dev Studio Code team uses the Insiders version to test the + latest features and bug fixes of AVAP™ DS. You can also use the Insiders + version by downloading it here. + +* For Early Adopters - Insiders has the most recent code changes for users and extension authors to try out. +* Frequent Builds - New builds every day with the latest bug fixes and features. +* Side-by-side install - Insiders installs next to the Stable build allowing you to use either independently. diff --git a/docs/developer.avapframework.com/13_get_token_info_get_token_info.md b/docs/developer.avapframework.com/13_get_token_info_get_token_info.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md b/docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md b/docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md b/docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md b/docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md b/docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Billing_System.md b/docs/developer.avapframework.com/1_Billing_System.md new file mode 100644 index 0000000..1871bc8 --- /dev/null +++ b/docs/developer.avapframework.com/1_Billing_System.md @@ -0,0 +1,78 @@ +101OBeX offers different plans: + +* Developer +* Startup +* Business +* Enterprise + +The ideal plan to become familiar with 101OBeX and introduce yourself to + the capabilities of the system. It provides complete access to APIs with a + maximum allowance of 500 monthly transactions so you can start your + project, with no a membership cost*. + +*There is no membership fee. Transactional costs, plug-ins and other + services within the membership are not included. To exploit these + services, it will be necessary to purchase a different plan. + +Starting at 50 $ per month, you will have 2 project slots with one active + project, and 5,000 monthly transactions to start your project. + +Starting at 150 $ per month, you can have up to 5 projects and 2 + pre-activated slots, along with 50,000 monthly transactions to launch your + business at the highest level. + +Geared towards corporations requiring special configurations. Membership + activation is done through the sales team:{' '} + sales@101obex.com . + +The chosen subscription type (developer, startup, business or + enterprise) that determines the configuration of the set of available + resources. + +* Total project slots. +* Pre-activated projects. +* Maximum transactional volume. +* Monthly transactions. +* Storage. +* Support. + +If payment is established monthly, charges will be made on the first day + of each month for the total membership amount, plus contracted add-ons and + plugins. For the first month, a prorated amount will be charged from the + plan's start date to the end of the month. If payment is established + annually, a full year of service will be charged, and renewal will occur + the day after the plan expires. + +101OBeX does not invoice exempt, since it is not a possibility + contemplated in the service. If any of the elements that make up a plan + exceed its limit, the service will stop being provided. + +To prevent your projects from being left without service, 101OBeX offers + the possibility of configuring alarms that will allow you to receive + notifications based on limits for each category. Although these alarms are + configurable, they have pre-established minimums to ensure that you are + always informed. + +The client always has the possibility of expanding the limits for each of + the components that make up a membership through the purchasing of add-ons + or by upgrading their plan. + +Clients can check their membership status in the dashboard at any time, + along with plan configuration in the Subscription Plan section of the menu + bar. + +In the Settings section of the menu, an option is available to track + transaction history linked to membership collections. How to change the + payment method Payment methods can be changed from monthly to annual and + vice versa at any time. How to change the payment method At present the + only form of payment is by credit card. But you can add new cards and + change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. + +At present the only form of payment is by credit card. But you can add new + cards and change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. diff --git a/docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md b/docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md b/docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md b/docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md b/docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md b/docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md b/docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md b/docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md b/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md new file mode 100644 index 0000000..7b81937 --- /dev/null +++ b/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md @@ -0,0 +1,34 @@ +### Where: + +* status : Shows if the call has been successful (true) or not (false). +* codtran : Transaction code that identifies the executed operation. +* result : Contains information about the result of the service. +* user_id_registration : New user ID. +* longitud_otp : Length of the OTP associated with the operation. +* elapsed : Operation execution time. + +### Where: + +* status : Shows if the call has been successful (true) or not (false). +* level: Error importance level. +* message : Error message. +* error : Sole error code. +* Error catalogue Message Cause Email is required The parameter enviar_email_confirmar has been sent, but the parameter email has not been informed nor attached an email address The phone + prefix phone already exists The account identified by phone already exits and is activated An attempt to create an account without a phone was made Required parameter not provided phone An attempt was made to create a phone number with the wrong length The value of the parameter phone has the wrong length, depending on the country indicated in country_code An attempt was made to create an account with a prefix other than the country prefix != country_code The value of the parameter prefix does not match with the country code indicated in country_code The account is pending to sign the discharge The account already exists in the system, but is inactive The nick nick is already used The account identified by nick exists and it's active Country not found Controlled error in case the country code entered is wrong. We have found a problem and are working to fix it ... sorry for the inconvenience Uncontrolled error 500: Internal Server Error In order not to provide service information, a 500 error is thrown if a required parameter is not reported. 500: Internal Server Error You can also get such an error if an uncontrolled error occurs on the server Chart 2.a.2 : List of exceptions thrown by the service{' '} Alta Usuario . Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). +* Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} +* If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. +* If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. +* If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. +* If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. +* The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. +* The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). + +This section details, for each box, all the information necessary to + exploit the previously documented services. + +There is a user who has an "AFFILIATE" profile and who will + allow managing the community: + +### Examples + +Below are some examples of calls to the services described in this + document: diff --git a/docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md b/docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_download_101cli_download_101cli.md b/docs/developer.avapframework.com/1_download_101cli_download_101cli.md new file mode 100644 index 0000000..a0a9d72 --- /dev/null +++ b/docs/developer.avapframework.com/1_download_101cli_download_101cli.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more.. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md b/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md new file mode 100644 index 0000000..1871bc8 --- /dev/null +++ b/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md @@ -0,0 +1,78 @@ +101OBeX offers different plans: + +* Developer +* Startup +* Business +* Enterprise + +The ideal plan to become familiar with 101OBeX and introduce yourself to + the capabilities of the system. It provides complete access to APIs with a + maximum allowance of 500 monthly transactions so you can start your + project, with no a membership cost*. + +*There is no membership fee. Transactional costs, plug-ins and other + services within the membership are not included. To exploit these + services, it will be necessary to purchase a different plan. + +Starting at 50 $ per month, you will have 2 project slots with one active + project, and 5,000 monthly transactions to start your project. + +Starting at 150 $ per month, you can have up to 5 projects and 2 + pre-activated slots, along with 50,000 monthly transactions to launch your + business at the highest level. + +Geared towards corporations requiring special configurations. Membership + activation is done through the sales team:{' '} + sales@101obex.com . + +The chosen subscription type (developer, startup, business or + enterprise) that determines the configuration of the set of available + resources. + +* Total project slots. +* Pre-activated projects. +* Maximum transactional volume. +* Monthly transactions. +* Storage. +* Support. + +If payment is established monthly, charges will be made on the first day + of each month for the total membership amount, plus contracted add-ons and + plugins. For the first month, a prorated amount will be charged from the + plan's start date to the end of the month. If payment is established + annually, a full year of service will be charged, and renewal will occur + the day after the plan expires. + +101OBeX does not invoice exempt, since it is not a possibility + contemplated in the service. If any of the elements that make up a plan + exceed its limit, the service will stop being provided. + +To prevent your projects from being left without service, 101OBeX offers + the possibility of configuring alarms that will allow you to receive + notifications based on limits for each category. Although these alarms are + configurable, they have pre-established minimums to ensure that you are + always informed. + +The client always has the possibility of expanding the limits for each of + the components that make up a membership through the purchasing of add-ons + or by upgrading their plan. + +Clients can check their membership status in the dashboard at any time, + along with plan configuration in the Subscription Plan section of the menu + bar. + +In the Settings section of the menu, an option is available to track + transaction history linked to membership collections. How to change the + payment method Payment methods can be changed from monthly to annual and + vice versa at any time. How to change the payment method At present the + only form of payment is by credit card. But you can add new cards and + change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. + +At present the only form of payment is by credit card. But you can add new + cards and change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. diff --git a/docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Add_Ons.md b/docs/developer.avapframework.com/2_Add_Ons.md new file mode 100644 index 0000000..9a548ee --- /dev/null +++ b/docs/developer.avapframework.com/2_Add_Ons.md @@ -0,0 +1,48 @@ +Add-ons are collections of attributes or features that can be added to + your project. They allow for personalization, adaptation to your needs, + and optimization of usage. You can activate add-ons in different processes + throughout the acquisition of a plan or the life of a project. You can + also find in the Setting section an Add-on chapter in the settings section + dedicated exclusively to the administration of these components. + +Currently, the following Add-ons are available: + + + +Allows you to add a new empty slot to later activate a project and start + working with it. Plans have a defined limit for projects and active slots. + This add-on allows expansion to the maximum permitted slots. + + + +Expand the volume of monthly requests in your plan and manage the total + set of requests for each of your projects. The volume of requests + available in a plan can never exceed the maximum request capacity + established in that plan. + +Plans have a predefined storage capacity. For example, a Business plan has + a maximum storage capacity of 2 Teras and a default storage of 1 Gb. This + means that the storage can be increased from the default 1 Gb to 2 Teras + maximum, but no more. If more storage is required, it will be necessary to + upgrade the plan. + +If your project or set of project exceed the maximum storage allowed for + the plan you have, you will need to upgrade the your plan. + + + +Access to professional support through the 101OBeX platform's suite of + engineers. + +We recommend reviewing the Pricing document for details about the pricing + configuration of the entire Add-on catalog. If a project or node reaches + the limit in any of its properties or configurations, the requests will + begin to return. To prevent this situation from causing problems in your + projects, 101OBeX is configured to support up to 10% more in each of the + configurations during the next 24 hours from the moment any of the limits + are exceeded. After this period, applications will begin to be given back. + +To further prevent such scenarios, 101OBeX employs an alarm system. This + system sends notifications when specific properties approach predefined + thresholds, granting you control over your project's growth at all + times. diff --git a/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md b/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md new file mode 100644 index 0000000..9a548ee --- /dev/null +++ b/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md @@ -0,0 +1,48 @@ +Add-ons are collections of attributes or features that can be added to + your project. They allow for personalization, adaptation to your needs, + and optimization of usage. You can activate add-ons in different processes + throughout the acquisition of a plan or the life of a project. You can + also find in the Setting section an Add-on chapter in the settings section + dedicated exclusively to the administration of these components. + +Currently, the following Add-ons are available: + + + +Allows you to add a new empty slot to later activate a project and start + working with it. Plans have a defined limit for projects and active slots. + This add-on allows expansion to the maximum permitted slots. + + + +Expand the volume of monthly requests in your plan and manage the total + set of requests for each of your projects. The volume of requests + available in a plan can never exceed the maximum request capacity + established in that plan. + +Plans have a predefined storage capacity. For example, a Business plan has + a maximum storage capacity of 2 Teras and a default storage of 1 Gb. This + means that the storage can be increased from the default 1 Gb to 2 Teras + maximum, but no more. If more storage is required, it will be necessary to + upgrade the plan. + +If your project or set of project exceed the maximum storage allowed for + the plan you have, you will need to upgrade the your plan. + + + +Access to professional support through the 101OBeX platform's suite of + engineers. + +We recommend reviewing the Pricing document for details about the pricing + configuration of the entire Add-on catalog. If a project or node reaches + the limit in any of its properties or configurations, the requests will + begin to return. To prevent this situation from causing problems in your + projects, 101OBeX is configured to support up to 10% more in each of the + configurations during the next 24 hours from the moment any of the limits + are exceeded. After this period, applications will begin to be given back. + +To further prevent such scenarios, 101OBeX employs an alarm system. This + system sends notifications when specific properties approach predefined + thresholds, granting you control over your project's growth at all + times. diff --git a/docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md b/docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md b/docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md b/docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md b/docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md b/docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_download_github_download_github.md b/docs/developer.avapframework.com/2_download_github_download_github.md new file mode 100644 index 0000000..6f5a626 --- /dev/null +++ b/docs/developer.avapframework.com/2_download_github_download_github.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases/ + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md b/docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/31_github_github_cli.md b/docs/developer.avapframework.com/31_github_github_cli.md new file mode 100644 index 0000000..d47fbdf --- /dev/null +++ b/docs/developer.avapframework.com/31_github_github_cli.md @@ -0,0 +1,5 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +https://github.com/101OBeXCorp/101obexcli diff --git a/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md b/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md new file mode 100644 index 0000000..ba770f2 --- /dev/null +++ b/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Commons: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar + +* Wallet: FILE PROCEDURE URL `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado + +* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...: FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes . diff --git a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md new file mode 100644 index 0000000..4a24b1f --- /dev/null +++ b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL FILES `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Tools: FILE PROCEDURE URL FILED `divisas.py` listado /ws/divisas.py/listado X `firma.py` firmar /ws/firma.py/firmar X `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login X `Accesos` `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL FILED `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL FILED `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio X `Bills2` `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios X `Bills2` `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio X `Bills2` `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info X `Bills2` `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista X `Bills2` `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar X `Bills2` `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar Se ejecuta a traves de `pagodeservicios.py` + +* Wallet: FILE PROCEDURE URL NOTES FILED `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes X `origenes_de_fondos` `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad X `movimientos.py` listado /ws/movimientos.py/listado X + +* Notifications: FILE PROCEDURE URL FILED `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES FILED `cuentas.py` alta /ws/cuentas.py/alta X `alta_baja_modificacion` `cuentas.py` baja /ws/cuentas.py/baja X `alta_baja_modificacion` `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos X `alta_baja_modificacion` `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick X `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES FILED `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar X `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir X `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion X Falta revisar la repeticion de `tiempoaire.py` `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...: FILE PROCEDURE URL FILED `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion X Esta mal la URL indicada en{' '} `Interfaz Servicios Pagos` `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md new file mode 100644 index 0000000..d5eb393 --- /dev/null +++ b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Tools: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar + +* Wallet: FILE PROCEDURE URL NOTES `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado + +* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...:(?) FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md b/docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md b/docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_altas_EN.md b/docs/developer.avapframework.com/33_informe_Informe_altas_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md b/docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md b/docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md b/docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md new file mode 100644 index 0000000..bfb9cda --- /dev/null +++ b/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md @@ -0,0 +1,199 @@ +Report on the number of users showing the users who have registered by + themselves and those who have registered through an affiliate. + +POST: {' '} + `URL_BASE + /ws/admin.py/informesadmin` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "codtran" + : + , + "resultado" + :{' '} + { + "mensaje" + : + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false) +* `resultado:` Service answer +* `mensaje:` Indicates the email to which the report will arrive. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + : + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/admin.py/informesadmin" + + payload ={' '} + { + 'codigo_pais' + :{' '} + 'MX' + , + 'id_usuario' + :{' '} + '4532' + , + 'id_sesion' + :{' '} + '406-dwr5sTs_m29rnbzw9_miJQ==' + , + 'informe' + :{' '} + 'informeconsejo' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/admin.py/informesadmin', + 'headers': {}, + formData: { + 'codigo_pais': 'MX', + 'id_usuario': '4532', + 'id_sesion': '406-dwr5sTs_m29rnbzw9_miJQ==', + 'informe': 'informeconsejo' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("codigo_pais", "MX"); + formdata.append("id_usuario", "4532"); + formdata.append("id_sesion", + "406-dwr5sTs_m29rnbzw9_miJQ=="); + formdata.append("informe", "informeconsejo"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/admin.py/informesadmin", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + + 'URL_BASE/ws/admin.py/informesadmin' + {' '} + \ + --form + 'codigo_pais=MX' + {' '} + \ + --form + 'id_usuario=4532' + {' '} + \ + --form{' '} + + 'id_sesion=406-dwr5sTs_m29rnbzw9_miJQ==' + {' '} + \ + --form{' '} + 'informe=informeconsejo' +``` + +## Business logic: + +In order to run this service, it is necessary to do it from a user logged + into the system who has an administrator profile. With this endpoint the + requested report is generated and sent to the email of the administrator + user who requests it. diff --git a/docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md b/docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md b/docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/35_inter_inter_networks_movement.md b/docs/developer.avapframework.com/35_inter_inter_networks_movement.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md b/docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md b/docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/36_last_last_order_summary.md b/docs/developer.avapframework.com/36_last_last_order_summary.md new file mode 100644 index 0000000..78e2000 --- /dev/null +++ b/docs/developer.avapframework.com/36_last_last_order_summary.md @@ -0,0 +1,344 @@ +## ws/orders.py/last_order_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + , + "resultado" + :{' '} + [ + 'status': 'Being sent' + , + 'status_code':{' '} + 4001 + , + 'transaction_code':{' '} + 'a556a5de007fcaa5a00b4a4d56a9d40a' + , + 'order_code':{' '} + 10023 + , + 'date':{' '} + 2021 + -03 + -01 + , + 'client_address': 'Street + without number', + 'establishment_coordinates' + :{' '} + { + 'lat':{' '} + 40 + , + 5431311 + , + 'lng':{' '} + -3 + , + 6302845 + } + , + 'location_gps':{' '} + { + 'lat':{' '} + 40 + , + 5431311 + , + 'lng':{' '} + -3 + , + 6302845 + } + 'delivery_time': ' + 12 + : + 03 + : + 01' + , + 'delivery_type':{' '} + 'delivery', + 'order_products_codes' + : + {' '} + [ + { + "article_id" + : + 35003 + , + "custom" + : + [ + [ + {' '} + + "da9922e8-57a6-4440-97db-0de2a486b323" + + , + {' '} + + "00e9a2cc-60c8-4e98-ac9b-accf15b7373a" + + , + {' '} + + "a6aacb94-8fad-4394-a2f1-e328fcca9c79" + + ] + , + [ + {' '} + + "757ccbe3-d877-485d-ae10-89f0b78c133c" + + ] + ] + } + ] + , + 'purchase_detail': 'Palo + Alto ( Lechuga , Tomate{' '} + , Cebolla{' '} + , Aguacate{' '} + , )' + , + 'order_category_id':{' '} + 'FL013', + 'contact':{' '} + { + "firstName" + : + "Rafa" + , + "lastName" + : + " " + , + "mail" + : + "rafa.ruiz@waynnovate.com" + , + "phone" + : + "643340526" + } + , + 'status_history':{' '} + [ + { + 'new_status':'Being sent' + , + 'new_status_code':{' '} + 4001 + , + 'previous_status': 'Being + picked up', + 'previous_status_code': + 4000 + , + 'status_change_date': ' + 2021 + -02 + -01{' '} + 13 + : + 00.01'{' '} + } + ] + 'delivery_price':{' '} + 1.9 + , + 'delivery_distance':{' '} + 34000.34) + , + ] + "elapsed" + :{' '} + 0.06796097755432129 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Status of the order. `status_code` : Code of the actual status of the order. `transaction_code` : Code of the transaction `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that gives the order. `location_gps:` Coordinates of the direction that receives the delivery. `delivery_time:` Hour of the delivery. `delivery_type:` Type of delivery (to pickup/ to have sent). `order_products_codes:` List of product codes and their options. `purchase_detail:` List of the names of the products with their options. `order_category_id:` Identifier of the establishment that provides the product. `contact:` Contact of the client. `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment that provides the order. +* `status:` Status of the order. +* `status_code` : Code of the actual status of the order. +* `transaction_code` : Code of the transaction +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Address of the client. +* `establishment_coordinates` : Coordinates of the establishment that gives the order. +* `location_gps:` Coordinates of the direction that receives the delivery. +* `delivery_time:` Hour of the delivery. +* `delivery_type:` Type of delivery (to pickup/ to have sent). +* `order_products_codes:` List of product codes and their options. +* `purchase_detail:` List of the names of the products with their options. +* `order_category_id:` Identifier of the establishment that provides the product. +* `contact:` Contact of the client. +* `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Time and date of the change of status. +* `delivery_price:` Price of the delivery. +* `delivery_distance:` Distance between the client and the establishment that provides the order. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', + 'headers': { + '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' + {' '} + \ + + --header{' '} + + '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' +``` + +## Business logic: + +The objective of this service is to retrieve the orders that are in course + and its details. diff --git a/docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md b/docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md b/docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md b/docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md b/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md new file mode 100644 index 0000000..6d32f59 --- /dev/null +++ b/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md @@ -0,0 +1 @@ +* General list: FILE PROCEDURE URL NOTE middleware.py comprobar_disponibilidad /ws/middleware.py/comprobar_disponibilidad I assume not middleware.py datos_cuenta /ws/middleware.py/datos_cuenta I assume not middleware.py enviar_sms /ws/middleware.py/enviar_sms I assume not middleware.py firmar_santander /ws/middleware.py/firmar_santander I assume not middleware.py transaccion_contrapartida /ws/middleware.py/transaccion_contrapartida I assume not middleware.py transaccion_entre_paises /ws/middleware.py/transaccion_entre_paises I assume not util.py saldo_quiubas /ws/util.py/saldo_quiubas I assume not pawn.py carvaloration /ws/pawn.py/carvaloration KO pawn.py cml2 /ws/pawn.py/cml2 KO pawn.py get_catalog /ws/pawn.py/get_catalog KO pawn.py manager /ws/pawn.py/manager KO pawn.py notify /ws/pawn.py/notify KO pawn.py pam /ws/pawn.py/pam KO pawn.py request /ws/pawn.py/request KO pawn.py status /ws/pawn.py/status KO diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md new file mode 100644 index 0000000..ccb5e28 --- /dev/null +++ b/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md @@ -0,0 +1,215 @@ +This service is used to obtain the currencies of the countries active in + the system. + +GET: + `URL_BASE + /ws/currencies.py/listado` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "currencies" + :{' '} + [ + { + "change_sale" + : + , + "currency_data" + :{' '} + { + "abbreviation" + : + , + "suffix" + : + , + "format" + : + , + "symbol" + : + , + "prefix" + : + , + "decimals" + : + , + "id" + : + } + , + "abbreviation" + : + , + "format" + : + , + "currency_symbol" + : + , + "precision" + : + , + "change_purchase" + : + , + "change_reference" + : + , + "name" + : + , + "placeholder_currency" + : + } + ] + , + "elapsed" + :{' '} + 0.008363962173461914 + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `currencies:` List of currencies returned by the system. +* `currency_data:` Contains the different details of the currency used for the operation.. +* `abbreviation:` The abbreviated name of the currency(EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format(pesos, euros). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency(€, ¢, $). +* `prefix:` The prefix that is applied in the currency format. +* `decimals:` The maximum number of decimal places that will be included in the currency format. +* `id:` Identifier of the currency in BBDD. +* `abbreviation:` The abbreviated name of the currency(EUR, MXN). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `name:` Full name of the currency. +* `precision:` Number of decimal places allowed by the currency. +* `currency_symbol:` The symbol associated to the currency (€, ¢, $). +* `placeholder_currency:` The text of the currency always showing a value of 0. +* `change_purchase:` Currency price for purchase. +* `change_reference:` The value of the currency. +* `change_sale:` Currency price for sale. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/currencies.py/listado" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/currencies.py/listado', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/currencies.py/listado", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/currencies.py/listado' +``` + +## Business logic + +This service, through the 'telefone', searches for the user whose + movements are to be consulted, and returns a list with each of the + user's movements between two given dates. diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md new file mode 100644 index 0000000..ebe3a16 --- /dev/null +++ b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md @@ -0,0 +1,165 @@ +This service is used to obtain the movements made by a large issuer user + within the system. + +GET: {' '} + `URL_BASE + /ws/granemisor.py/listado` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "datos" + :{' '} + [ + [ {' '} + ] + ] + , + "numero_resultados" + : + , + "totales" + : + , + "columnas" + :{' '} + [ + ] + , + "limite_resultados" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `datos:` they are a list of lists in which each one contains the values for each of the columns. +* `elapsed:` Operation execution time. +* `numero_resultados:` Number of results that come in 'datos' +* `totales:` Total number of results +* `columnas:` Name of each of the values found in each of the lists in the data list.. +* `limite_resultados:` Maximum number of results that come in the query. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020' +``` + +## Business logic: + +This service returns a list with each of the movements of the large issuer + user between two given dates. diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md b/docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md new file mode 100644 index 0000000..a11f3a4 --- /dev/null +++ b/docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md @@ -0,0 +1,25 @@ +This document presents all the AVAP extensions for Microsoft Visual Studio Code, which will enable developers to manage every phase and process involved in the development and publication of APIs as part of their lifecycle within the AVAP Framework. + +### Installation of Extensions + +It is recommended to install the extensions from the Microsoft Visual Studio Code marketplace, although you can also download them manually from the AVAP ID portal and install them in your IDE. + +### Available Extensions + +* AVAP Linter & Completion Purpose: Provides knowledge of AVAP (Advanced Virtual API Programming) format and syntax within the Microsoft IDE. Features: Syntax highlighting, code suggestions, and error correction. +* AVAP Main Purpose: Base extension that includes Organization, Projects, and Teams components. Features: Management of organizations, creation and administration of projects, and configuration of development teams. +* AVAP API Publisher Purpose: Assists developers in the entire API publishing process across the different environments in their deployment. Features: Publication of APIs in Local, Test, and Live environments with configuration and control options. +* AVAP API Version Control Purpose: A complete version control manager for API development using AVAP coding. Features: Version control, change tracking, and API version management. +* AVAP Connectors Purpose: Provides a fast and secure mechanism for connecting to databases and external systems. Features: Configuration and management of connections to databases and external systems. + +### Prerequisites + +Before starting to work with the extensions, it is important to understand the credential and identification system known as AVAP ID. All users need to be registered at AVAP ID and have an active account, as well as a developer token to activate the AVAP extensions in Microsoft Visual Studio Code. + +### Activation and Use of Extensions + +Once the developer has their developer token, they can install the extensions from the marketplace. The extensions will automatically activate and appear in the left-hand side or extension bar of Visual Studio Code. + +With AVAP extensions for Microsoft Visual Studio Code, developers can carry out the full lifecycle of an API, from development to testing, publication, and administration. + +For more information, check out AVAP Alexandria at alexandria.avapframework.com and join the user community at AVAP Communities. diff --git a/docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md b/docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md b/docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/40_logout_Logout_Services_EN.md b/docs/developer.avapframework.com/40_logout_Logout_Services_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md b/docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md b/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md new file mode 100644 index 0000000..091def3 --- /dev/null +++ b/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md @@ -0,0 +1,29 @@ +In your project, you can work with loyalty wallets to which you can assign + a FIAT currency, a non-FIAT currency or a new currency created by you, to + which you give a purchase and sale values. This is referred to as a + personalized wallet by default. + +As a concept, a personalized or loyalty wallet accumulates balance or + points that can later be exchanged for products, but that in no case can + be transformed into liquid money regardless of whether it is the result of + an ATM withdrawal, bank account, purchase of prepaid cards, or any other + concept that facilitates cashing out from a loyalty wallet. + +Transfers between users are not allowed unless the destination or wallet + of the beneficiary of the transfer is a wallet of the same type with the + same limitations and the configuration of the wallet allows such + transfers. + +Personalized or loyalty wallets rely on the currency table of the FX + Exchange service to carry out the operations of buying and selling + products from loyalty wallets, thus allowing customers to buy any type of + product, if they meet the conditions to be acquired by a source of + loyalty-type funds regardless of the type of currency held by the product + to be purchased. + +In this way, a customer with a loyalty wallet in USD can purchase products + published in EUR or MXN without any problem. Just like a customer with a + loyalty wallet in My_Coin, can purchase the same products mentioned above. + It is in the configuration of the FX Exchange currency table where the + purchase and sale price of My_Coin is determined, with USD serving as the + reference. diff --git a/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md b/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md new file mode 100644 index 0000000..e52ffd6 --- /dev/null +++ b/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md @@ -0,0 +1,18 @@ +At 101OBeX we are committed to universality, integration, and + collaboration with other companies who enrich and help us enhance and + expand our array of services. + +Thanks to our marketplace, third parties can publish their APIs and add + value to the platform. + +From the Marketplace section you can browse the different published + plugins, install, configure and exploit each one of them. + +Keep in mind that plugins can be purchased, in which case the cost of the + plug-in will be processed as part of the recurring plan charges with each + collection period. + +Furthermore, a plug-in may require a pre-funded balance for its correct + operation, in which case you must maintain a sufficient balance in your + wallet. Adhering to the provided instructions for each plug-in to ensure + its proper configuration and correct operation. diff --git a/docs/developer.avapframework.com/43_new_new.md b/docs/developer.avapframework.com/43_new_new.md new file mode 100644 index 0000000..e485291 --- /dev/null +++ b/docs/developer.avapframework.com/43_new_new.md @@ -0,0 +1,192 @@ +## ws/orders.py/last_order_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + , + "order_code" + :{' '} + 12034 + "elapsed" + :{' '} + 0.06796097755432129 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `order_code:` Identifier of the order in the system. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": + 40,5431311,\"lng\": -3,6302845 + }&contact=Manuel&order_amount=30 + €&shipping_amount=3,5 €" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": + 40,5431311,"lng": -3,6302845 + }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 + €', + 'headers': { + '101ObexApiKey': 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": + 40,5431311,\"lng\": -3,6302845 + }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 + €", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location -g --request GET{' '} + + 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": + 40,5431311,"lng": -3,6302845 + }&contact=Manuel&order_amount=30 + €&shipping_amount=3,5 €' + {' '} + \ + + --header{' '} + + '101ObexApiKey: WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' +``` + +## Business logic: + +The objective of this service is to add an order. diff --git a/docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md b/docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md new file mode 100644 index 0000000..445f6ff --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md @@ -0,0 +1,178 @@ +This service is used to obtain the affiliate. + +GET: {' '} + `URL_BASE + /ws/util.py/affiliates` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "codtran" + : + "affiliates" + :{' '} + [ + { + "phone" + : + , + "affiliate_id" + : + , + "country" + : + , + "name" + : + , + "other_data" + : + , + "allow_prefunding" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Transaction code that identifies the executed operation. +* `affiliates:` List of affiliates of the system. +* `phone:` Affiliate phone number. +* `affiliate_id:` Affiliate identifier. +* `country:` Affiliate Country Code. +* `name:` Affiliate name. +* `other_data:` Other affiliate data. +* `allow_prefunding:` Boolean that indicates if prefunding is allowed in the affiliate. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' +``` + +## Business logic: + +By means of this service all the affiliates of the system are obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md new file mode 100644 index 0000000..71f2ae0 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md @@ -0,0 +1,150 @@ +This service is used to obtain the operators of the chosen country. + +GET: + `URL_BASE + /ws/util.py/operators` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "operators" + :{' '} + [ + { + "name" + : + , + "operator_code" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `operators:` List with the telephone operators of the country. +* `name:` Name of the operator +* `operator_code:` Identifier of the operator. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/operators?country_code=MX" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/operators?country_code=MX', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/operators?country_code=MX", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/operators?country_code=MX' +``` + +## Business logic: + +By means of this service you get all the operators of the indicated + country. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md new file mode 100644 index 0000000..9a497b1 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md @@ -0,0 +1,225 @@ +This service is used to obtain the active countries in the system. + +GET: + `URL_BASE + /ws/util.py/countries` + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "countries" + :{' '} + [ + { + "currency_symbol" + :{' '} + "$ " + , + "currency_data" + :{' '} + { + "abbreviation" + :{' '} + "MXN" + , + "suffix" + :{' '} + "pesos" + , + "format" + :{' '} + "$%.2f pesos" + , + "symbol" + :{' '} + "$" + , + "prefix" + :{' '} + "$" + , + "decimals" + :{' '} + 2.0 + , + "id" + :{' '} + 70 + } + , + "currency_format" + :{' '} + "$%.2f pesos" + , + "precision_currency" + :{' '} + 2.0 + , + "phone_longitude" + :{' '} + 10 + , + "currency" + :{' '} + "Mexico Peso" + , + "name" + :{' '} + "Mexico" + , + "prefix" + :{' '} + "52" + , + "phone" + :{' '} + "98780" + , + "placeholder_currency" + :{' '} + "$0.00 pesos" + , + "country_code" + :{' '} + "MX" + } + ] + , + "elapsed" + :{' '} + 0.0168149471282959 + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `countries:` List with the active countries of the system. +* `currency_symbol:` Symbol of the country's currency. +* `currency_data:` Contains the different details of the currency used in the operation. +* `abbreviation:` The abbreviated name of the currency (EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency (€, ¢, $). +* `prefix:` The prefix that is applied in the currency format. +* `decimals:` The maximum number of decimal places that will be included in the currency format. +* `id:` Identifier of the currency in BBDD. +* `currency_format:` Format to be applied to the amounts that use this currency. +* `precision_currency:` Decimals of the amounts that use this currency. +* `phone_longitude:` Size of telephone numbers used in the country. +* `currency:` Full name of the country's currency. +* `name:` Name of the country. +* `prefix:` Telephone prefix of the country's telephone numbers. +* `phone:` Telephone from which the system's SMS for the country are sent. +* `placeholder_currency:` Text to display in the fields that are of the currency and have no value. +* `country_code:` Code of the country. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/countries" + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/countries', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/countries", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + 'URL_BASE/ws/util.py/countries' +``` + +## Business logic: + +By means of this service all the active countries in the system are + obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md new file mode 100644 index 0000000..3157d59 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md @@ -0,0 +1,163 @@ +This service is used to obtain users' profiles. + +GET: + `URL_BASE + /ws/util.py/profiles` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "profiles" + :{' '} + [ + { + "name" + : + , + "code" + : + , + "id" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `profiles:` List of the profiles. +* `name:` Profile name. +* `code:` Profile role name +* `id:` Profile identifier. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' +``` + +## Business logic: + +By means of this service all the system profiles are obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md new file mode 100644 index 0000000..6b86b2f --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md @@ -0,0 +1,150 @@ +This service is used to obtain the regions of the indicated country. + +GET: + `URL_BASE + /ws/util.py/regions` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "regions" + :{' '} + [ + { + "name" + : + , + "region_id" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `regions:` List of regions. +* `name:` Name of the region +* `region_id:` Identifier of the region. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/regions?county_code=MX" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/regions?county_code=MX', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/regions?county_code=MX", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/regions?county_code=MX' +``` + +## Business logic: + +By means of this service all the regions of the indicated country are + obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md new file mode 100644 index 0000000..b4b56fa --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md @@ -0,0 +1,164 @@ +This service is used to obtain the users' profiles. + +GET: + `URL_BASE + /ws/util.py/get_caracteristicas` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "characteristics" + :{' '} + { + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `characteristics:` Container object of the characteristics of the indicated service. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX /{' '} + &user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D&point_of_entry=login' +``` + +## Business logic: + +In order to make this call it is necessary to make it with a user who is + logged into the system, except for the following entry points: + +* registration +* login +* restartpin +* forwardotpregistration + +Each element of the answer that is within the characteristics is formed + with the following structure: + +being the value of the property of any type. + + diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md new file mode 100644 index 0000000..a73d6ba --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md @@ -0,0 +1,173 @@ +This service is used to obtain the user information + +GET: {' '} + `URL_BASE + /ws/users.py/info_usuario` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "user_id" + : + , + "number_of_transactions" + : + , + "amount_of_transactions" + : + , + "point_program" + :{' '} + [ + { + 'name': + , 'amount' + : + , 'id' + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `user_id:` Identifier of the user from whom we have obtained the information. +* `number_of_transactions:` Number of transactions of the indicated type in the last 30 days. +* `amount_of_transactions:` Total amount of transactions of the indicated type of the last 30 days. +* `point_program:` List with the point programs in which the user is. +* `name:` Points program name. +* `amount:` User points in the points program. +* `id:` Points program identifier. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA%3D%3D&user=7229063245&point_of_entry=solicituddinero' +``` + +## Business logic: + +By means of this service the data of the user indicated with the indicated + parameter is obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md new file mode 100644 index 0000000..d4c0421 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md @@ -0,0 +1,151 @@ +This services is used to obtain the security questions. + +GET: {' '} + `URL_BASE + /ws/seguridad_itf.py/preguntas_de_seguridad` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "preguntas" + :{' '} + [ + { + "id" + : + , + "texto" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `preguntas:` List of security questions selected by the user to be able to answer them. +* `id:` Identifier of the security questions. (Necessary to be able to send each question with its answer) +* `texto:` Security question. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71' +``` + +## Business logic: + +MP-140 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md new file mode 100644 index 0000000..e8e855a --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md @@ -0,0 +1,330 @@ +This service gives you back all data associated to the chosen transaction.{' '} + +POST: + `URL_BASE + /ws/movimientos.py/transaction_data` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "transaction_data" + :{' '} + { + "telefono_cuenta" + : + , + "transaction_code" + : + , + "user" + : + , + "user_email" + : + , + "origin_of_funds" + : + , + "destination" + : + , + "destination_phone" + : + , + "destination_language_id" + : + , + "invoice" + : + , + "reference" + :{' '} + null + , + "concept" + : + , + "action" + : + , + "date" + : + , + "service_name" + : + , + "characteristics" + :{' '} + { + + } + , + "affiliate" + : + , + "affiliate_url" + : + , + "affiliate_url_image" + : + , + "amount" + : + , + "amount_fmt" + : + , + "total_commission" + : + , + "total_commission_fmt" + : + , + "commission" + : + , + "commission_fmt" + : + , + "vat_commission" + : + , + "vat_commission_fmt" + : + , + "vat_operation" + : + , + "vat_operation_fmt" + : + , + "currency" + : + , + "total" + : + , + "total_fmt" + : + "subject_ticket" + : + , + {' '} + "subject_ticket_destination" + : + , + "ticket_html" + : + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `transaction_data:` Data of the requested transaction. +* `telefono_cuenta:` Telephone number of the account of origin of the transaction +* `transaction_code:` Transaction code. +* `user:` Name of the user of origin of the transaction.. +* `user_email:` Email of the originating user of the transaction. +* `origin_of_funds:` Name of the source of funds used in the operation. +* `destination:` Name of the target user of the operation. +* `destination_phone:` Telephone number of the destination account of the operation. +* `destination_language_id:` Language identifier of the target user for the operation. +* `invoice:` Invoice number/invoice of the operation. +* `reference:` Invoice / page number of the operation. +* `concept:` Descriptive text of the operation. +* `action:` Name of the action that was executed with this operation. +* `date:` Date on which the transaction occurs. +* `service_name:` Text with the name of the service, if it does not have a name, the concept is returned. +* `characteristics:` Dictionary with the characteristics of the service, explained in greater depth on the endpoint{' '} `get_caracteristicas` . +* `affiliate:` Name of the affiliate of the user who executed the operation. +* `affiliate_url:` Affiliate website url. +* `affiliate_url_image:` Url of the affiliate image (logo). +* `amount:` Amount of the operation without format or commissions. +* `amount_fmt:` Amount of the operation with the applied format, but without commissions. +* `total_commission:` Amount of commission charged without format and with VAT applied. +* `total_commission_fmt:` Amount of commission charged with the format and VAT applied. +* `commission:` Amount of the commission charged to the user without the format and without VAT. +* `commission_fmt:` Formatted commission amount and if VAT applied. +* `vat_commission:` VAT amount of raw commission. +* `vat_commission_fmt:` Commission VAT amount with the format. +* `vat_operation:` VAT amount applied to the operation carried out without format. +* `vat_operation_fmt:` Amount of VAT applied to the operation carried out with the applied currency format.. +* `currency:` Name of the currency used in the operation. +* `total:` Total amount of the operation (amount + commission + VAT), without format. +* `total_fmt:` Total amount of the operation (amount + commission + VAT), with format. +* `subject_ticket:` Subject text of the ticket that is sent by mail to the user of origin of the operation. +* `subject_ticket_destination:` Subject text of the ticket that is sent by mail to the target user of the operation. +* `ticket_html:` Ticket that is mailed to users. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/movimientos.py/transaction_data" + + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'session_id' + :{' '} + '414-YehjRL-mR64z81Nu9gg7og==' + , + 'transaction_code' + :{' '} + '60995737691715d3cc51aa4ab699fd84' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/movimientos.py/transaction_data', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'session_id': '414-YehjRL-mR64z81Nu9gg7og==', + 'transaction_code': '60995737691715d3cc51aa4ab699fd84' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("session_id", + "414-YehjRL-mR64z81Nu9gg7og=="); + formdata.append("transaction_code", + "60995737691715d3cc51aa4ab699fd84"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/movimientos.py/transaction_data", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + + 'URL_BASE/ws/movimientos.py/transaction_data' + {' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + + 'session_id=414-YehjRL-mR64z81Nu9gg7og==' + {' '} + \ + --form{' '} + + 'transaction_code=60995737691715d3cc51aa4ab699fd84' +``` + +## Business logic: + +With this endpoint all the data associated with the requested transaction + is returned. diff --git a/docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md b/docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md b/docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/47_Odern_order_history_summary.md b/docs/developer.avapframework.com/47_Odern_order_history_summary.md new file mode 100644 index 0000000..1d2de2c --- /dev/null +++ b/docs/developer.avapframework.com/47_Odern_order_history_summary.md @@ -0,0 +1,380 @@ +## ws/orders.py/order_history_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns if user is RIDER profile: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + { + "status" + :{' '} + "Completed" + , + "delivery_time" + :{' '} + "13:12:55" + , + "delivery_type" + :{' '} + "sent" + , + "order_category_id" + :{' '} + "FL016" + , + "delivery_distance" + :{' '} + 6987 + , + "status_code" + :{' '} + 1 + , + "order_products_codes" + :{' '} + + "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n + {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n }\n]" + + , + {' '} + "establishment_coordinates" + :{' '} + { + "latitude" + :{' '} + 40.630568688062624 + , + "longitude" + :{' '} + -3.585006931371174 + } + , + "location_gps" + :{' '} + + "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n + \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n + \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n + }\n}" + + , + "delivery_price" + :{' '} + "1,90 €" + , + "contact" + :{' '} + + "{\n \"firstName\": \"Rafael\",\n \"Surname\": \"Surname1 + Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": + \"643340526\"\n}" + + , + "purchase_detail" + :{' '} + + "Tortilla soup\nTortilla soup\nTortilla soup\nTortilla soup\n" + + , + "order_code" + :{' '} + 101033 + , + "date" + :{' '} + "18/08/2021 05:17:56" + , + "transaction_code" + :{' '} + "988569e4f38717f35e0fa5c256fe466b" + , + "status_history" + :{' '} + [ + { + "previous_status_code" + :{' '} + 12 + , + "status_change_date" + :{' '} + "2021-08-18 12:17:57" + , + "new_status" + :{' '} + "Sent to restaurant" + , + "new_status_code" + :{' '} + 0 + , + "previous_status" + :{' '} + "Nuevo pedido" + } + , + { + "previous_status_code" + :{' '} + 0 + , + "status_change_date" + :{' '} + "2021-08-18 12:18:51" + , + "new_status" + :{' '} + "Being picked up" + , + "new_status_code" + :{' '} + 11 + , + "previous_status" + :{' '} + "Sent to restaurant" + } + , + { + "previous_status_code" + :{' '} + 11 + , + "status_change_date" + :{' '} + "2021-08-18 12:19:57" + , + "new_status" + :{' '} + "In delivey" + , + "new_status_code" + :{' '} + 10 + , + "previous_status" + :{' '} + "Being picked up" + } + , + { + "previous_status_code" + :{' '} + 10 + , + "status_change_date" + :{' '} + "2021-08-18 12:20:37" + , + "new_status" + :{' '} + "Completed" + , + "new_status_code" + :{' '} + 1 + , + "previous_status" + :{' '} + "In delivey" + } + ] + , + "client_address" + :{' '} + + "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" + + } + , + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current state of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that does the order. `location_gps:` Coordinates of the company direction. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact. `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment. +* `status:` Current status of the order. +* `status_code` : Code of the current state of the order. +* `transaction_code` : Code of the transaction. +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Address of the client. +* `establishment_coordinates` : Coordinates of the establishment that does the order. +* `location_gps:` Coordinates of the company direction. +* `delivery_time:` Hour established for the delivery. +* `delivery_type:` Type of delivery (pick up/ sent) +* `order_products_codes:` List of code products and its options. +* `purchase_detail:` List of product names with its options. +* `order_category_id:` Identifier of the establishment that provides the order. +* `contact:` Client contact. +* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Hour and time of the status change. +* `delivery_price:` Price of the delivery. +* `delivery_distance:` Distance between the client and the establishment. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', + 'headers': { + '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' + {' '} + \ + + --header{' '} + + '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' +``` + +## Business logic: + +The objective of this service is to retrieve the completed requests of the + riders. diff --git a/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md b/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md new file mode 100644 index 0000000..b9de1d9 --- /dev/null +++ b/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md @@ -0,0 +1,166 @@ +## Service identifier + +SER.INT.ORI.AVA.001 MANAGEMENT OF OWN FUNDS RESOURCES. + +## Description + +This service allows managing the funds sources of a given user. It + implements the operations of listing, creation, deletion, confirmation, + change of default wallet and reordering on the sources of funds of said + user. + +## Endpoints + +* Preproduction {' '} ` https://avanquia-prews.pademobile.com/ws/originsdefondos.py/gestor_origins_propios ` +* Production {' '} ` https://appws.avanquia.com/ws/originsdefondos.py/gestor_origins_propios ` + +## Published operations + +This service allows to execute the following operations on funds sources: + +## Parameters + +All parameters are sent in the call's querystring , so{' '} + percentage encoding for URIs (aka{' '} + URL encoding ) must be applied. + +* Parameters, answers and exceptions common to all operations Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 +* Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 + +* Common answers {' '} Depending on the result of the call, this service can return two different JSON : In case of success +* In case of success + +### Where + +`operation_result` will be a JSON formed by the fields that the + service returns according to the operation executed. In the following + sections the content of this space will be specified for each operation. + +* Parameters, answers and specific exceptions for each operation List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A +* List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A +* Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A + +* Specific answer {' '} Each source of funds in the origins list is represented by a JSON with the following structure: + +### Where: + +* balance_fmt : Formatted balance, with thousands / millions division, decimals and currency symbol. +* balance : Available balance of the funds source. +* real_balance : Total balance of the funds source, that is, the available balance plus all the held balance. +* withholdings : Specifies whether the funds source has associated balance holds. +* retained_balances : If the funds source has associated balance holds, each item in this list will store both the amount of the hold and the hold ID. +* image : Image associated with the funds source. +* class : Indicates the type of funds source. +* authorized : It allows to know if they are possible to operate with the source of funds or not. +* permit_errase : Each funds source, depending on its configuration, may or may not be deleted by the user. +* id : Funds source ID.{' '} Note : This field has the following range of values: [1 - 2,147,483,647]. +* permit_various : Specifies whether multiple funds source of the same type are allowed to exist at the same time. +* currency_id_currencies : ID of the currency with which it works at the funds source. +* type: Funds source type ID. +* permit_income : The funds source may or may not admit income. +* permit_charges : The funds source may or may not admit charges. +* name : Funds source name. +* base_class : The class of a funds source defines its nature (card, local source of funds…). +* pending_of_revision : Indicates whether or not the origin is to be reviewed by an administrator or operator. + +Each element of the list list_of_withholdings will have the + following structure: + +The fields{' '} + + fmt_balance, _fmt_compact_balance, balance, actual_balance, and + held_balances + {' '} + are returned as long as the balance of the source of funds is known. For + example, for credit cards no information regarding the balance is + returned. + +Each element of the creators list is a JSON that defines a type + of source of funds: + +* Specific exceptions Does not send specific exceptions +* Funds source creation {' '} The parameter command acquires the value{' '} crear . +* Specific parameters Parameters Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Ensures that the user has permissions on the type of funds source to create N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A anioexpiracion Yes for card-type origins Numeric, YYYY Card expiration year N/A mesexpiracion Yes for card-type origins Numeric, MM Card expiration month N/A cardnumber Yes for card-type origins Numeric Card number N/A validationcode Yes for card-type origin Numeric Card validation code N/A name Yes Alphabetic Name of the new funds source N/A + +* Specific answer + +Returns the ID of the source of funds created on the call. + +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The user does not have permissions to create a source of the selected type The origin_id source_id_or_profile is not allowed in the account The source of funds is created only during the registration process The purse is already created One or more key data (for example, card number) provided to create the wallet is already present in another source of funds of the same type It is not possible to create this source of funds without being certified A non-certified user wants to create a risk fund source (for example, credit card) + +* Funds sources errase + +The parameter command acquires the value errase + +* Specific parameter Parameter Obligatory Format Description Default value Examples source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to errase N/A 189, 17673, 9872 template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A 189, 17673, 9872 + +* Answer Empty. +* Specific exceptions Message Cause The origin_id source_id_or_profile it is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile it is not allowed in the account The type of funds source to be deleted does not allow it to be deleted The card could not be deleted: Please contact customer service at the number An attempt has been made to delete a card-type source of funds, but the payment gateway returns an error + +* Activate fund sources {' '} The parameter command acquires the value{' '} confirmed . +* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A amount1 Yes for card-type origins Numeric Decimals (cents) of the first validation charge. Only for card-type origins N/A amount2 Yes for card-type origins Numeric Decimals (cents) of the second validation charge. Only for card-type origins N/A + +* Specific answer + +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation Incorrect data in the card confirmation, please try again The data provided to confirm a card-type origin is incorrect Attempts to confirm the card passed The limit of attempts to confirm a card origin has been exceeded + +* Change funds source defaults + +The parameter command acquires de value{' '} + change_by_defect . + +* Specific paramters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A + +* Specific answer Empty. +* Specific exception Message Cause The origin_id source_id_or_profile is not allowed in the account The indicated source of funds source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile is not allowed in the account Due to backward compatibility with types of sources of old funds. + +* Reorder Fund Sources {' '} The parameter command acquires value reorder . +* Specific parameters Parameter Obligatory Format Description Default value new_order Yes Alphanumeric. New order separated by commas New order of user origins N/A + +* Specific answer Empty. +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account Some of the sources of funds in the list does not exist or does not belong to the user who performs the operation + +* Movements of funds sources {' '} The parameter command acquires the value{' '} movements . +* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes Numeric Funds source from which the information is required N/A date_desde No IS0 8601 Start date of the movement list N/A date_hasta No IS0 8601 End date of the movement list N/A pagina No Numeric Page to start from 1 limite No Numeric Number of results per page 10 + +* Specific answer + +### Where: + +The field movements will return a list of JSON. Each of these + JSON will have the following content: + +### Where: + +* transaction_code : Transaction code +* concept : Transaction object. +* date : Date on which the movement is made. +* amount : Amount of movement. Includes commissions. +* balance_disponible : Available balance at the source of funds that originates the movement. +* real_balance : Actual balance of the source of funds that originates the movement.. +* rfc : RFC of the account that originates the movement. +* business_name : The business social reason. It corresponds to the name associated with it ( name parameter informed in the call to the registration service). +* transaction_status : Status of the transaction associated with the movement. See table Annex 1 in section{' '} Annex , line{' '} estados de transacciones . +* currency_id : Identifier of the currency in which the movement is made. +* account_id_origin : Unique identifier of the source account. +* account_id_destination : Unique identifier of the target account. +* origin_id_origin : Unique identifier of the source of funds with which the movement originates. +* origin_id_destination : Unique identifier of the source of funds that receives the amount of the operation. +* error_id : Identifier of the error that caused the operation to abort. OPTIONAL . +* exception : Detail of the error that caused the operation to abort. OPTIONAL . +* channel_id : Channel through which the movement was made.. +* Specific exceptions Message Cause The origin_id source_id_or_profile does not exist The source of funds indicated in source_id_or_profile {' '} does not exist {' '} Table 2.b.17 : List of specific exceptions for the operation movements . +* Business logic: {' '} This section details some particularities related to this service that it is advisable to take into account.{' '} Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. +* Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. +* If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. +* The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). +* You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. +* Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. +* All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. +* If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. + +This section details, for each environment, all the information necessary + to exploit the previously documented services. + +Additionally, there is a test user already created, which can be used to + exploit the services described in this documentation. diff --git a/docs/developer.avapframework.com/49_overview_OVERVIEW.md b/docs/developer.avapframework.com/49_overview_OVERVIEW.md new file mode 100644 index 0000000..45391c8 --- /dev/null +++ b/docs/developer.avapframework.com/49_overview_OVERVIEW.md @@ -0,0 +1,58 @@ +AVAP TM Dev Studio 2024 is a lightweight but powerful source + code editor which runs on your desktop and is available for Windows, macOS + and Linux. It comes with built-in support for JavaScript, TypeScript and + Node.js and has a rich ecosystem of extensions for other languages and + runtimes (such as C++, C#, Java, Python, PHP, Go, .NET). Begin + your journey with VS Code with these introductory videos. + +### AVAP TM Code in Action + +## Top Extensions + +Enable additional languages, themes, debuggers, commands, and more. AVAP + TM Dev Studio's growing community shares their secret sauce + to improve your workflow. + +## First Steps + +To get the most out of AVAP TM Dev Studio, start by reviewing a + few introductory topics: + +Intro Videos - Begin your journey with AVAP Code through these + introductory videos. Setup - Install AVAP TM Dev Studio for your + platform and configure the tool set for your development needs. User + Interface - Introduction to the basic UI, commands, and features of the + AVAP TM Dev Studio editor. Settings - Customize AVAP + TM Dev Studio for how you like to work. Languages - Learn about + AVAP TM Dev Studio's support for your favorite programming + languages. Node.js - This tutorial gets you quickly running and debugging + a Node.js web app. Tips and Tricks - Jump right in with Tips and Tricks to + become a AVAP TM Dev Studio power user. Azure - AVAP + TM Dev Studio is great for deploying your web applications to + the cloud. Extension API - Learn how to write a AVAP TM Dev + Studio extension. Why AVAP TM Dev Studio? - Read about the + design philosophy and architecture of AVAP TM Dev Studio. + +## Keyboard Shortcuts + +Increase your productivity with AVAP TM Dev Studio's + keyboard shortcuts. + +Keyboard Shortcut Reference Sheet - Learn the commonly used keyboard + shortcuts. Keymap Extensions - Change AVAP TM Dev Studio's + keyboard shortcuts to match another editor. Customize Keyboard Shortcuts - + Modify the default keyboard shortcuts. + +## Downloads + +Download AVAP TM Dev Studio - Quickly find the appropriate + install for your platform (Windows, macOS and Linux) + +## Privacy + +By default, AVAP TM Dev Studio auto-updates to new versions, and + collects usage data and crash report information. You may opt out of these + defaults by disabling them as instructed below: + +How do I disable auto update? How do I disable crash reporting? How do I + disable usage reporting? diff --git a/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md b/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md new file mode 100644 index 0000000..fb534ee --- /dev/null +++ b/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md @@ -0,0 +1,18 @@ +This section lists the possible values ​​for those parameters or concepts + that accept or are composed of codes or identifiers.{' '} + +* Countries: codigo_pais Country AF Afghanistan AL Albania AS American samoa AD Andorra AI Saint vincent and the grenadines AG Antigua & barbuda AR Argentina AW Aruba AU Tuvalu AT Austria BS Bahamas BB Barbados BY Belarus BE Belgium BZ Belize BM Bermuda BO Bolivia BA Bosnia-herzegovina BW Botswana BV Bouvet island BR Brazil BN Brunei darussalam KH Cambodia CA Canada KY Cayman islands CL Chile CN China CX Christmas islands CC Cocos (keeling) islands CO Colombia CK Tokelau CR Costa rica HR Croatia CU Cuba CZ Czech republic DK Denmark DM Dominica DO Dominican rep. EG Egypt SV El salvador EE Estonia FK Falkland islands FO Faroe islands FJ Fiji islands FI Finland FR France GF French guiana DE Germany GH Ghana GI Gibraltar GR Greece GD Grenada GL Greenland GP Guadeloupe GU Guam GT Guatemala GY Guyana HN Honduras HK Hong kong HU Hungary IS Iceland BT India ID Indonesia IR Iran IE Ireland IL Israel IT Italy JM Jamaica JP Japan KZ Kazakhstan KI Kiribati KP Korea, north KR Korea, south KG Kyrgyzstan LV Latvia LB Lebanon LR Liberia LI Lichtenstein LT Lithuania LU Luxembourg MK Macedonia MY Malaysia MU Mauritius YT Mayotte islands MX México MN Mongolia NA Namibia NR Nauru NP Nepal AN Netherlands antilles KN Saint kitts NZ New zealand NI Nicaragua NG Nigeria NU Norfolk island NO Svalbard and jan mayen islands OM Oman PK Pakistan PA Panama PY Paraguay PE Peru PH Philippines PL Poland PT Portugal QA Qatar RE Reunion island LC Saint lucia PM Saint pierre & miquelon SA Saudi arabia SC Seychelles SG Singapore SB Solomon islands SO Somalia ZA South africa ES Spain LK Sri lanka SH St. helena SE Sweden CH Switzerland SY Syria TW Taiwan TH Thailand NL The netherlands TT Trinidad & tobago TR Turkey TC Turks & caicos islands UA Ukraine GB United kingdom US United States UY Uruguay UZ Uzbekistan VN Vietnam YE Yemen ZW Zimbabwe PDM Pademobile International GQ Equatorial Guinea RO Romania AX Aland Islands DZ Algeria VI Virgin Islands, U.s. AO Angola AI Anguilla AQ Antarctica AM Armenia AC Ascension AZ Azerbaijan ET Ethiopia AU Australia BH Bahrain BD Bangladesh BJ Benin BT Bhutan VG Virgin Islands, British IO British Indian Ocean Territory BG Bulgaria BF Burkina Faso BI Burundi CK Cook Islands CI Côte D'ivoire SH Saint Helena DG Diego Garcia DJ Djibouti EC Ecuador ER Eritrea PF French Polynesia TF French Southern Territories GA Gabon GM Gambia GE Georgia GG Guernsey GN Guinea GW Guinea-bissau HT Haiti HM Heard Island And Mcdonald Islands IM Isle Of Man IQ Iraq JE Jersey JO Jordan CM Cameroon CV Cape Verde KE Kenya KM Comoros CD Congo, The Democratic Republic Of The CG Congo KW Kuwait LA Lao People's Democratic Republic LS Lesotho LY Libyan Arab Jamahiriya MO Macao MG Madagascar MW Malawi MV Maldives ML Mali MT Malta MA Morocco MH Marshall Islands MQ Martinique MR Mauritania FM Micronesia, Federated States Of MD Moldova MC Monaco MS Montserrat MZ Mozambique MM Myanmar NC New Caledonia NT Neutrale Zone NL Netherlands NE Niger NU Niue MP Northern Mariana Islands NO Norway PS Palestinian Territory, Occupied PW Palau PG Papua New Guinea PN Pitcairn PR Puerto Rico RE Rèunion RW Rwanda RU Russian Federation ZM Zambia WS Samoa SM San Marino ST Sao Tome And Principe SN Senegal SL Sierra Leone SK Slovakia SI Slovenia SD Sudan GS South Georgia And The South Sandwich Islands SR Suriname SZ Swaziland SY Syrian Arab Republic TJ Tajikistan TZ Tanzania, United Republic Of TL Timor-leste TG Togo TO Tonga TA Tristan da Cunha TD Chad TN Tunisia TM Turkmenistan UG Uganda VU Vanuatu VA Holy See (vatican City State) VE Venezuela AE United Arab Emirates WF Wallis And Futuna EH Western Sahara CF Central African Republic CY Cyprus ME Montenegro + +* Chanels: id_canal Name 1 Web 2 SMS 3 Retail 4 Bills 5 Customer Service 6 Matomy 7 TPV 8 Exchange 9 Bills 2.0 10 Bills MLS 11 Bills Cash y Apoyo 13 Remittance iOS 14 Remittance Android 15 Librería Android 16 Librería iOS 17 PrestaMóvil iOS 18 PrestaMóvil Android 19 Web MLS 20 Management Console 21 Bills Sofiexpress 22 Bills Aterna 23 BilliB + +* Operators: id_operador Name 1 Telcel 5 Movistar 6 IUSACELL/UNEFON 7 NEXTEL 8 Movistar 9 Vodafone 10 Orange 11 Yoigo 12 R 13 Euskatel + +* Languages: id_idioma Abbreviation Name 1 es Spanish-México 2 en_us English-United States 3 pl Polish 4 il Hebrew 5 es_es Spanish-Spain 6 en_uk English-United Kingdom 9 RO Romanian + +* Occupation: id_ocupacion Occupation 0 Not indicated 1 Student 2 Employee 3 Entrepreneur 4 Home 5 Other + +* Role (profile): id_perfil Name N/A ADMIN N/A ADMININTL N/A AFFILIATE N/A AFILIADO_POR_DEFECTO N/A DONATIONS N/A INSURANCE N/A USER N/A USUARIO_INTERNACIONAL N/A USUARIONODO N/A USUARIO_TIPO1 N/A USUARIO_TIPO2 + +* States / Birth Place: id_estado Name 257 Baja California North 258 Baja California South 259 Sonora 260 Chihuahua 261 Coahuila de Zaragoza 262 Sinaloa 263 Durango 264 Nuevo León 265 Tamaulipas 266 Zacatecas 267 San Luis Potosí 268 Nayarit 269 Veracruz 270 Aguascalientes 271 Guanajuato 272 Jalisco 273 Colima 274 Michoacán 275 Estado de México 276 Ciudad de México 277 Morelos 278 Puebla 279 Guerrero 280 Querétaro 281 Hidalgo 282 Tlaxcala 283 Oaxaca 284 Tabasco 285 Chiapas 286 Campeche 287 Yucatán 288 Quintana Roo + +* Transaction states: id_estado Definition -3 Wrong -2 Rejected -1 Expired 0 Requested 1 Approved 2 Revoked 3 Fully returned 4 Partially returned 10 In process diff --git a/docs/developer.avapframework.com/4_Communities.md b/docs/developer.avapframework.com/4_Communities.md new file mode 100644 index 0000000..0b2aad8 --- /dev/null +++ b/docs/developer.avapframework.com/4_Communities.md @@ -0,0 +1,17 @@ +101OBeX organizes and groups the clients of a node or project into + communities. + +Communities are groups of users or clients of a project whose main common + element or union is the community to which they belong. This is + determined, in most cases, although other criteria may apply, by + affiliates (corporations) responsible for registering users or + clients within the system. + +Users or clients in a project that do not have a specific community will + belong to the community of the node or project. Importantly, end users or + customers retain the flexibility to switch between communities as needed. + Grouping users or customers by communities offers many advantages at the + operation and data analysis level, since it allows us to undertake actions + on a specific set of users or end customers based on the community to + which they belong. Moreover, it greatly enhances capabilities for data + mining and reporting activities. diff --git a/docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md b/docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md b/docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md b/docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md b/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md new file mode 100644 index 0000000..a33bef2 --- /dev/null +++ b/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md @@ -0,0 +1,16 @@ +Plan Wallets All the existing plans in 101OBeX have a wallet, that will be + used as a rounded account to discount each of the transactional services + that are operated. + +IT IS IMPORTANT TO CLARIFY THAT THE WALLET THAT MAINTAINS THE BALANCES OF + THE NODES OR PROJECTS DOES NOT CHARGE THE MONTHLY SUBSCRIPTION, NOR THE + ADD-ONS, NOR THE PLUGINS THAT MAY BE ACTIVE. THE PURPOSE OF THE WALLET OF + EACH SUBSCRIPTION IS TO PREFUND THE BALANCE WITH WHICH THE TRANSACTIONAL + SERVICES OF EACH OF THE PROJECTS WILL BE SERVED. + +THE SUBSCRIPTION WALLET IS NOT A BANK ACCOUNT AND THEREFORE THE PRE-FUNDED + MONEY CANNOT BE WITHDRAWN AND MUST BE SPENT/CONSUMED IN 101OBeX SERVICES. + +Adding funds to the wallet is a straightforward process. Access the + Dashboard, then click the + icon within the Balance section. This action + will initiate the procedure for adding funds. diff --git a/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md b/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md new file mode 100644 index 0000000..d998d5d --- /dev/null +++ b/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md @@ -0,0 +1,197 @@ +This service is used to obtain the total price of the user's use of a + service.{' '} + +GET: + `URL_BASE + /ws/util.py/precios_servicio` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK, if it indicates only_commission is True: + +```javascript +{ + "status" + :{' '} + true + , + "commission_fmt" + : + , + "commission" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `commission_fmt:` Commission amount with the currency format. +* `commission:` Commission amount without format. +* `elapsed:` Operation execution time. + +### Answer JSON OK, if only_commission is not indicated True: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + : + , + "result" + :{' '} + { + "origins" + :{' '} + [ + { + + } + ] + , + "creators" + :{' '} + [ + ] + , + } + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Transaction code that identifies the executed operation. +* `result:` Executed service answer. +* `origins:` List with the origin of the user's funds. View structure on the endpoint `origin_of_funds` . +* `creators:` List of types of sources of funds that the user can create. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true' +``` + +## Business logic: + +This service returns a list with each of the movements of the large issuer + user between two given dates. diff --git a/docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md b/docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md b/docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md b/docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md b/docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md b/docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/5_Marketplace.md b/docs/developer.avapframework.com/5_Marketplace.md new file mode 100644 index 0000000..e52ffd6 --- /dev/null +++ b/docs/developer.avapframework.com/5_Marketplace.md @@ -0,0 +1,18 @@ +At 101OBeX we are committed to universality, integration, and + collaboration with other companies who enrich and help us enhance and + expand our array of services. + +Thanks to our marketplace, third parties can publish their APIs and add + value to the platform. + +From the Marketplace section you can browse the different published + plugins, install, configure and exploit each one of them. + +Keep in mind that plugins can be purchased, in which case the cost of the + plug-in will be processed as part of the recurring plan charges with each + collection period. + +Furthermore, a plug-in may require a pre-funded balance for its correct + operation, in which case you must maintain a sufficient balance in your + wallet. Adhering to the provided instructions for each plug-in to ensure + its proper configuration and correct operation. diff --git a/docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md b/docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md b/docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md b/docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md b/docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/65_rider_rider_order_management.md b/docs/developer.avapframework.com/65_rider_rider_order_management.md new file mode 100644 index 0000000..7d37d0b --- /dev/null +++ b/docs/developer.avapframework.com/65_rider_rider_order_management.md @@ -0,0 +1,404 @@ +## ws/orders.py/rider_order_management + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Accept + +Permits a rider accept an entering order. + +## Pick Up + +Marks the status of the delivery in the order. + +## Nearby + +Marks the status of how close the rider is to the client. + +## Delivered + +Marks a delivered order. + +## Deny + +Denies the entering order. + +## Assign Order + +Permits to assign a specific order to a rider. + +## Returns if user is RIDER profile: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + { + "status" + :{' '} + "Completed" + , + "delivery_time" + :{' '} + "13:12:55" + , + "delivery_type" + :{' '} + "Shipment" + , + "order_category_id" + :{' '} + "FL016" + , + "delivery_distance" + :{' '} + 6987 + , + "status_code" + :{' '} + 1 + , + "order_products_codes" + :{' '} + + "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n + {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n }\n]" + + , + {' '} + "establishment_coordinates" + :{' '} + { + "latitude" + :{' '} + 40.630568688062624 + , + "longitude" + :{' '} + -3.585006931371174 + } + , + "location_gps" + :{' '} + + "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n + \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n + \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n + }\n}" + + , + "delivery_price" + :{' '} + "1,90 €" + , + "contact" + :{' '} + + "{\n \"firstName\": \"Rafael\",\n \"lastName\": \"Surname1 + Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": + \"643340526\"\n}" + + , + "purchase_detail" + :{' '} + + "Tortilla Soup\nTortilla Soup\nTortilla Soup\nTortilla Soup\n" + + , + "order_code" + :{' '} + 101033 + , + "date" + :{' '} + "18/08/2021 05:17:56" + , + "transaction_code" + :{' '} + "988569e4f38717f35e0fa5c256fe466b" + , + "status_history" + :{' '} + [ + { + "previous_status_code" + :{' '} + 12 + , + "status_change_date" + :{' '} + "2021-08-18 12:17:57" + , + "new_status" + :{' '} + "Sent to the restaurant" + , + "new_status_code" + :{' '} + 0 + , + "previous_status" + :{' '} + "New order" + } + , + { + "previous_status_code" + :{' '} + 0 + , + "status_change_date" + :{' '} + "2021-08-18 12:18:51" + , + "new_status" + :{' '} + "Being picked up" + , + "new_status_code" + :{' '} + 11 + , + "previous_status" + :{' '} + "Sent to the restaurant" + } + , + { + "previous_status_code" + :{' '} + 11 + , + "status_change_date" + :{' '} + "2021-08-18 12:19:57" + , + "new_status" + :{' '} + "Being sent" + , + "new_status_code" + :{' '} + 10 + , + "previous_status" + :{' '} + "Being picked up" + } + , + { + "previous_status_code" + :{' '} + 10 + , + "status_change_date" + :{' '} + "2021-08-18 12:20:37" + , + "new_status" + :{' '} + "Completed" + , + "new_status_code" + :{' '} + 1 + , + "previous_status" + :{' '} + "Being sent" + } + ] + , + "client_address" + :{' '} + + "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" + + } + , + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current status of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Direction of the client. `establishment_coordinates` : Coordinates of the establishment that provides the order. `location_gps:` Coordinates of the direction of the delivery place. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery `delivery_distance:` Distance between the client and the establishment. +* `status:` Current status of the order. +* `status_code` : Code of the current status of the order. +* `transaction_code` : Code of the transaction. +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Direction of the client. +* `establishment_coordinates` : Coordinates of the establishment that provides the order. +* `location_gps:` Coordinates of the direction of the delivery place. +* `delivery_time:` Hour established for the delivery. +* `delivery_type:` Type of delivery (pick up/ sent) +* `order_products_codes:` List of code products and its options. +* `purchase_detail:` List of product names with its options. +* `order_category_id:` Identifier of the establishment that provides the order. +* `contact:` Client contact +* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Hour and time of the status change. +* `delivery_price:` Price of the delivery +* `delivery_distance:` Distance between the client and the establishment. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', + 'headers': { + '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' + {' '} + \ + + --header{' '} + + '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' +``` + +## Business logic: + +The purpose of this service is to manage the assignments and statuses of a + registered order. diff --git a/docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md b/docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md b/docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md new file mode 100644 index 0000000..2440f8e --- /dev/null +++ b/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md @@ -0,0 +1,230 @@ +This service is used to approve several operations within the system. + +POST: + `URL_BASE + /ws/firma.py/firmar` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "signed" + : + , + "invoice" + : + , + "currency_data" + :{' '} + { + "abbreviation" + : + , + "suffix" + : + , + "format" + : + , + "symbol" + : + , + "prefix" + : + , + "decimals" + : + , + "id" + : + } + , + "elapsed" + : + , + "raw_amount" + : + , + "currency" + : + , + "commission_user_card" + : + , + "codtran" + : + , + "user_commission" + : + , + "amount" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signed:` Shows if the signature has been successfully processed (true) or not (false). +* `invoice:` Invoice number associated to the operation. +* `currency_data:` Contains the different details of the currency used in the operation. +* `abbreviation:` The abbreviated name of the currency (EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). +* `format:` The full format that is applied to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency (€, ¢, $). +* `prefix:` The prefix that is applied in the format of the currency. +* `decimals:` The maximum number of decimal places to be included in the currency format. +* `id:` Currency identifier in BBDD. +* `elapsed:` Execution operation time. +* `raw_amount:` Amount of the operation in negative without applying the format. +* `currency:` Short name of the currency used in the operation, it matches the abbreviation. +* `commission_user_card:` Commission that would be applied if the payment is made by card. +* `codtran:` Transaction code that identifies the executed operation. +* `user_commission:` Commission to be charged to the user. +* `amount:` Negative transaction amount with the applied format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error coge. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/firma.py/firmar" + payload ={' '} + { + 'otp' + :{' '} + '1234' + , + 'phone' + :{' '} + '7229063245' + , + 'country_code' + :{' '} + 'MX' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/firma.py/firmar', + 'headers': {}, + formData: { + 'otp': '1234', + 'phone_dst': '7229063245', + 'country_code': 'MX' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("otp", "1234"); + formdata.append("phone_dst", "7229063245"); + formdata.append("country_code", "MX"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/firma.py/firmar", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/firma.py/firmar'{' '} + \ + --form 'otp=1234'{' '} + \ + --form{' '} + 'phone_dst=7229063245'{' '} + \ + --form 'country_code=MX' +``` + +## Business logic: + +This service searches for the operations pending signing that the entered + phone has, and, among the results, accepts the operation through the OTP. diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md new file mode 100644 index 0000000..0959b38 --- /dev/null +++ b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md @@ -0,0 +1,11 @@ +This service is used to generate a notification to all the users of a + group. + +POST: + {' '} + `URL_BASE + /ws/notificaciones.py/gestor_notificaciones` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md b/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md new file mode 100644 index 0000000..7131769 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md @@ -0,0 +1,51 @@ +AVAP™ Dev Studio 2024 is a small download by design and only includes the + minimum number of components shared across most development workflows. + Basic functionality like the editor, file management, window management, + and preference settings are included. A JavaScript/TypeScript language + service and Node.js debugger are also part of the base install. + +If you are used to working with larger, monolithic development tools + (IDEs), you may be surprised that your scenarios aren't + completely supported out of the box. For example, there isn't a{' '} + File > New Project dialog with + pre-installed project templates. Most AVAP™ Dev Studio users will need to + install additional components depending on their specific needs. + +### Commonly used components + +Here are a few commonly installed components: + +* Git - AVAP™ Dev Studio has built-in support for source code control using Git but requires Git to be installed separately. +* Node.js (includes npm) - A cross platform runtime for building and running JavaScript applications. +* TypeScript - The TypeScript compiler, `tsc` , for transpiling TypeScript to JavaScript. + +You'll find the components above mentioned often in our documentation + and walkthroughs. + +### AVAP™ Dev Studio extensions + +You can extend the AVAP™ Dev Studio editor itself through extensions. The + AVAP™ Dev Studio community has built hundreds of useful extensions + available on the AVAP™ Dev Studio Marketplace. + +The extensions shown above are the current most popular on Marketplace. + Click on an extension tile above to read the description and reviews of + the extension. + +### Additional tools + +AVAP™ Dev Studio 2024 integrates with existing tool chains. We think the + following tools will enhance your development experiences. + +* Yeoman - An application scaffolding tool, a command line version of File > New Project. +* generator-hottowel - A Yeoman generator for quickly creating AngularJS applications. +* Express - An application framework for Node.js applications using the Pug template engine. +* Gulp - A streaming task runner system which integrates easily with AVAP™ Dev Studio tasks. +* Mocha - A JavaScript test framework that runs on Node.js. +* Yarn - A dependency manager and alternative to npm. + +### Next steps + +* User Interface - A quick orientation around AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. +* Languages - AVAP™ Dev Studio supports many programming languages out-of-the-box as well as many more through community created extensions. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md b/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md new file mode 100644 index 0000000..325f001 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md @@ -0,0 +1,43 @@ +AVAP™ Dev Studio 2024 can be used as a development tool for enterprise + teams of all sizes. As an IT admin, you can configure AVAP™ DS 2024 to + achieve consistency and compatibility across your organization. + +## Network: Common hostnames + +A handful of features within AVAP™ DS 2024 require network communication + to work, such as the auto-update mechanism, querying and installing + extensions, and telemetry. For these features to work properly in a proxy + environment, you must have the product correctly configured. + +Refer to the network common hostnames list for the required domains. + +## Group Policy on Windows + +System administrators need a way to control default software settings + across all client machines in their organization. Group Policy is a client + solution that gives administrators flexibility to implement the behavior + for each of the available policies and settings. + +AVAP™ Dev Studio 2024 now has support for Windows Registry-based Group + Policy. Starting from AVAP™ DS 2024 version 1.69, each release will ship + with a `policies` directory containing ADMX template files that + can be added to the following path:{' '} + `C:\Windows\PolicyDefinitions.` + +Once the policy definitions are installed, admins can use the Local Group + Policy Editor to manage the policy values. + +Policies can be set both at the Computer level and the User level. If both + are set, Computer level will take precedence. When a policy value is set, + the value overrides the AVAP™ Dev Studio 2024 setting value configured at + any level (default, user, workspace, etc.). + +## Additional Policies + +The goal is to promote current AVAP™ Dev Studio 2024 2024 settings as + Policies and closely follow existing settings, so that the naming and + behavior are consistent. If there are requests to enact more policies, + please open an issue in the AVAP™ Dev Studio 2024 2024 GitHub repository. + The team will determine if there is already a corresponding setting for + the behavior or if a new setting should be created to control the desired + behavior. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Linux.md b/docs/developer.avapframework.com/69_set_SETUP_Linux.md new file mode 100644 index 0000000..9ede51b --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Linux.md @@ -0,0 +1,419 @@ +### Installation + +See the Download AVAP TM Dev Studio page for a complete list of + available installation options. + +By downloading and using AVAP TM Dev Studio, you agree to the + license terms and privacy statement. + +The easiest way to install AVAP TM Dev Studio for Debian/Ubuntu + based distributions is to download and install the .deb package + (64-bit), either through the graphical software center if it's + available, or through the command line with: + +```javascript +sudo apt install ./.deb + + # If you're on an older Linux distribution, you will need to run + this instead: + # sudo dpkg -i .deb + # sudo apt-get install -f # Install dependencies +``` + +Note that other binaries are also available on the AVAP TM Dev + Studio download page. + +Installing the .deb package will automatically install the apt repository + and signing key to enable auto-updating using the system's package + manager. Alternatively, the repository and key can also be installed + manually with the following script: + +```javascript +sudo apt-get install wget gpg + + wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg + --dearmor > packages.microsoft.gpg + + sudo install -D -o root -g root -m 644 packages.microsoft.gpg + /etc/apt/keyrings/packages.microsoft.gpg + + sudo sh -c 'echo "deb [arch=amd64,arm64,armhf + signed-by=/etc/apt/keyrings/packages.microsoft.gpg] + https://packages.microsoft.com/repos/code stable main" > + /etc/apt/sources.list.d/AVAPDevStudio.list' + + rm -f packages.microsoft.gpg +``` + +Then update the package cache and install the package using: + +```javascript +sudo apt install apt-transport-https + + sudo apt update + + sudo apt install code # or code-insiders +``` + +We currently ship the stable 64-bit AVAP TM Dev Studio in a yum + repository, the following script will install the key and repository: + +```javascript +sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc + + sudo sh -c 'echo -e "[code]\nname=Visual Studio + Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" + > /etc/yum.repos.d/vscode.repo' +``` + +Then update the package cache and install the package using dnf + (Fedora 22 and above): + +```javascript +dnf check-update + + sudo dnf install code # or code-insiders +``` + +Or on older versions using yum : + +```javascript +yum check-update + + sudo yum install code # or code-insiders +``` + +Due to the manual signing process and the system we use to publish, the + yum repo may lag behind and not get the latest version of VS Code + immediately. + +AVAP TM Dev Studio is officially distributed as a Snap package + in the Snap Store: + + + +You can install it by running: + +```javascript +sudo snap install --classic code # or code-insiders +``` + +Once installed, the Snap daemon will take care of automatically updating + AVAP TM Dev Studio in the background. You will get an in-product + update notification whenever a new update is available. + +Note: If snap isn't available in your Linux distribution, please check + the following Installing snapd guide, which can help you get that set up. + +Learn more about snaps from the official Snap Documentation. + +The yum repository above also works for openSUSE and SLE-based systems, + the following script will install the key and repository: + +```javascript +sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc + + sudo sh -c 'echo -e "[code]\nname=Visual Studio + Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" + > /etc/zypp/repos.d/vscode.repo' +``` + +Then update the package cache and install the package using: + +```javascript +sudo zypper refresh + + sudo zypper install code +``` + +There is a community-maintained Arch User Repository package for AVAP + TM DS. + +To get more information about the installation from the AUR, please + consult the following wiki entry: Install AUR Packages. + +There is a community maintained AVAP TM Dev Studio Nix package + in the nixpkgs repository. In order to install it using Nix, set + allowUnfree option to true in your config.nix and execute: + +```javascript +nix-env -i vscode +``` + +The AVAP TM Dev Studio .rpm package (64-bit) can also be + manually downloaded and installed, however, auto-updating won't work + unless the repository above is installed. Once downloaded it can be + installed using your package manager, for example with dnf: + +```javascript +sudo dnf install .rpm +``` + +Note that other binaries are also available on the AVAP TM Dev + Studio download page. + +### Updates + +AVAP TM Dev Studio ships monthly and you can see when a new + release is available by checking the release notes. If the AVAP + TM DS repository was installed correctly, then your system + package manager should handle auto-updating in the same way as other + packages on the system. + +Note: Updates are automatic and run in the background for the Snap + package. + +### Node.js + +Node.js is a popular platform and runtime for easily building and running + JavaScript applications. It also includes npm, a Package Manager for + Node.js modules. You'll see Node.js and npm mentioned frequently in + our documentation and some optional VS Code tooling requires Node.js + (for example, the AVAP TM Dev Studio extension + generator). + +If you'd like to install Node.js on Linux, see Installing Node.js via + package manager to find the Node.js package and installation instructions + tailored to your Linux distribution. You can also install and support + multiple versions of Node.js by using the Node Version Manager. + +To learn more about JavaScript and Node.js, see our Node.js tutorial, + where you'll learn about running and debugging Node.js applications + with VS Code. + +### Setting AVAP TM Dev Studio as the default text editor + +You can set the default text editor for text files (text/plain) + that is used by xdg-open with the following command: + +```javascript +xdg-mime default code.desktop text/plain +``` + +Debian-based distributions allow setting a default editor using the Debian + alternatives system, without concern for the MIME type. You can set this + by running the following and selecting code: + +```javascript +sudo update-alternatives --set editor /usr/bin/code +``` + +If AVAP TM Dev Studio doesn't show up as an alternative to + editor, you need to register it: + +```javascript +sudo update-alternatives --install /usr/bin/editor editor $(which + code) 10 +``` + +### Windows as a Linux developer machine + +Another option for Linux development with AVAP TM Dev Studio is + to use a Windows machine with the Windows Subsystem for Linux + (WSL). + +With WSL, you can install and run Linux distributions on Windows. This + enables you to develop and test your source code on Linux while still + working locally on a Windows machine. WSL supports Linux distributions + such as Ubuntu, Debian, SUSE, and Alpine available from the Microsoft + Store. + +When coupled with the WSL extension, you get full AVAP TM Dev + Studio editing and debugging support while running in the context of a + Linux distro on WSL. + +See the Developing in WSL documentation to learn more or try the Working + in WSL introductory tutorial. + +### Next steps + +Once you have installed AVAP TM Dev Studio, these topics will + help you learn more about it: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP TM Dev Studio. +* User/Workspace Settings - Learn how to configure VS Code to your preferences through settings. + +### Common questions + +I'm getting a "Running without the SUID sandbox" error? + +You can safely ignore this error. + +If you see an error when deleting files from the AVAP TM Dev + Studio Explorer on the Debian operating system, it might be because the + trash implementation that AVAP TM Dev Studio is using is not + there. + +Run these commands to solve this issue: + +```javascript +sudo apt-get install gvfs libglib2.0-bin +``` + +Some distributions, for example Pop!_OS provide their own{' '} + `code` package. To ensure the official AVAP TM Dev + Studio repository is used, create a file named{' '} + `/etc/apt/preferences.d/code` with the following content: + +```javascript +Package: code + + Pin: origin "packages.microsoft.com" + + Pin-Priority: 9999 +``` + +When you see this notification, it indicates that the AVAP TM {' '} + Dev Studio file watcher is running out of file handles that are needed to + implement file watching. Most often this can happen when opening a + workspace that is large and contains many files. Before adjusting platform + limits, make sure that potentially large folders, such as Python{' '} + `.venv` , are added to the `files.watcherExclude` {' '} + setting (more details below). It is also possible that other + running applications consume so many file handles that none are left for + AVAP TM Dev Studio to use. In that case it might help to close + these other applications. + +The current limit can be viewed by running: + +```javascript +cat /proc/sys/fs/inotify/max_user_watches +``` + +The limit can be increased to its maximum by editing{' '} + `/etc/sysctl.conf` (except on Arch Linux, read below) + and adding this line to the end of the file: + +```javascript +fs.inotify.max_user_watches=524288 +``` + +The new value can then be loaded in by running `sudo sysctl -p` + . + +While 524,288 is the maximum number of files that can be watched, if + you're in an environment that is particularly memory constrained, you + may want to lower the number. Each file watch takes up 1080 bytes, so + assuming that all 524,288 watches are consumed, that results in an upper + bound of around 540 MiB. + +Arch-based distros (including Manjaro) require you to change a + different file; follow these steps instead. + +Another option is to exclude specific workspace directories from the AVAP + TM DS file watcher with the `files.watcherExclude` {' '} + setting. The default for `files.watcherExclude` excludes{' '} + `node_modules` and some folders under .git, but you can add + other directories that you don't want AVAP TM DS to track. + +```javascript +"files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtreev-cache/**": true, + "**/node_modules/*/**": true + } +``` + +We're working on a fix. In the meantime, open the application menu, + then choose File > Preferences > Settings. In the Text Editor > + Font section, set "Font Family" to{' '} + `Droid Sans Mono, Droid Sans Fallback.` If you'd rather + edit the `settings.json` file directly, set{' '} + `editor.fontFamily` as shown: + +```javascript +"editor.fontFamily": "Droid Sans Mono, Droid Sans Fallback" +``` + +This error can appear during installation and is typically caused by the + package manager's lists being out of date. Try updating them and + installing again: + +```javascript +# For .deb + + sudo apt-get update + + # For .rpm (Fedora 21 and below) + + sudo yum check-update + + # For .rpm (Fedora 22 and above) + + sudo dnf check-update +``` + +Running `code.` on Ubuntu when AVAP TM Dev Studio is + already open in the current directory will not bring AVAP TM Dev + Studio into the foreground. This is a feature of the OS which can be + disabled using `ccsm` . + +```javascript +# Install + + sudo apt-get update + + sudo apt-get install compizconfig-settings-manager + + # Run + + ccsm +``` + +Under General > General Options >{' '} + Focus & Raise Behaviour , set "Focus Prevention + Level" to "Off". Remember this is an OS-level setting that + will apply to all applications, not just VS Code. + +This can happen when `sources.list.d` doesn't exist or you + don't have access to create the file. To fix this, try manually + creating the folder and an empty `vscode.list` file: + +```javascript +sudo mkdir /etc/apt/sources.list.d + + sudo touch /etc/apt/sources.list.d/vscode.list +``` + +If you are using X forwarding to use AVAP TM DS remotely, you + will need to use the native title bar to ensure you can properly + manipulate the window. You can switch to using it by setting{' '} + `window.titleBarStyle` to `native` . + +The custom title bar and menus were enabled by default on Linux for + several months. The custom title bar has been a success on Windows, but + the customer response on Linux suggests otherwise. Based on feedback, we + have decided to make this setting opt-in on Linux and leave the native + title bar as the default. + +The custom title bar provides many benefits including great theming + support and better accessibility through keyboard navigation and screen + readers. Unfortunately, these benefits do not translate as well to the + Linux platform. Linux has a variety of desktop environments and window + managers that can make the AVAP TM DS theming look foreign to + users. For users needing the accessibility improvements, we recommend + enabling the custom title bar when running in accessibility mode using a + screen reader. You can still manually set the title bar with the{' '} + Window: Title Bar Style ( + `window.titleBarStyle` ) setting. + +Due to an upstream issue #14787 with Electron, the mouse cursor may render + incorrectly with scaling enabled. If you notice that the usual text cursor + is not being rendered inside the editor as you would expect, try falling + back to the native menu bar by configuring the setting{' '} + `window.titleBarStyle` to `native` . + +If you receive an error similar to the following: + +```javascript +E: Repository '...' changed its 'Origin' value from '...' to '...' + + N: This must be accepted explicitly before updates for this repository + can be applied. See apt-secure(8) manpage for details. +``` + +Use `apt` instead of `apt-get` and you will be + prompted to accept the origin change: + +`sudo apt update` diff --git a/docs/developer.avapframework.com/69_set_SETUP_MacOS.md b/docs/developer.avapframework.com/69_set_SETUP_MacOS.md new file mode 100644 index 0000000..062a291 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_MacOS.md @@ -0,0 +1,107 @@ +## Installation + +## Launching from the command line + +You can also run AVAP™ Dev Studio from the terminal by typing + 'code' after adding it to the path: + +* Launch AVAP™ Dev Studio. +* Open the Command Palette {' '} `(Cmd+Shift+P)` and type 'shell command' to find the{' '} Shell Command: Install 'code' command in PATH {' '} command. + +##IMAGEN## + +* Restart the terminal for the new `$PATH` value to take effect. You'll be able to type 'code .' in any folder to start editing files in that folder. + +Instead of running the command above, you can manually add AVAP™ Dev + Studio to your path, to do so run the following commands: + +```javascript +cat << EOF >> ~/.bash_profile + + Add AVAP™ Dev Studio 2024 (code) + + export PATH="\$PATH:/Applications/AVAP™ Dev Studio + 2024.app/Contents/Resources/app/bin" + + EOF +``` + +Start a new terminal to pick up your `.bash_profile` changes. + +Note: The leading slash \ is required to prevent{' '} + `$PATH` from expanding during the concatenation. Remove the + leading slash if you want to run the export command directly in a + terminal. + +Note: Since `zsh` became the default shell in + macOS Catalina, run the following commands to add AVAP™ Dev Studio to your + path: + +```javascript +`cat << EOF >> ~/.zprofile + + Add AVAP™ Dev Studio 2024 (code) + + export PATH="\$PATH:/Applications/AVAP™ Dev Studio + 2024.app/Contents/Resources/app/bin" + + EOF` +``` + +## Touch Bar support + +Out of the box AVAP™ Dev Studio adds actions to navigate in editor history + as well as the full Debug tool bar to control the debugger on your Touch + Bar: + +##IMAGEN## + +## Mojave privacy protections + +After upgrading to macOS Mojave version, you may see dialogs saying + "AVAP™ Dev Studio 2024 would like to access your + {calendar/contacts/photos}." This is due to the new privacy + protections in Mojave and is not specific to AVAP™ Dev Studio. The same + dialogs may be displayed when running other applications as well. The + dialog is shown once for each type of personal data and it is fine to + choose Don't Allow since AVAP™ Dev Studio does not + need access to those folders. + +## Updates + +AVAP™ Dev Studio ships monthly releases and supports auto-update when a + new release is available. If you're prompted by AVAP™ Dev Studio, + accept the newest update and it will get installed (you won't need + to do anything else to get the latest bits). + +## Preferences menu + +You can configure AVAP™ Dev Studio through settings, color themes, and + custom keybindings available through the{' '} + Code > Preferences menu group. + +## Next steps + +Once you have installed AVAP™ Dev Studio, these topics will help you learn + more about AVAP™ Dev Studio: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation around AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences settings. + +## Common questions + +If you are running macOS Mojave version, you may see dialogs saying + "AVAP™ Dev Studio 2024 would like to access your + {calendar/contacts/photos}." This is due to the new privacy + protections in Mojave discussed above. It is fine to choose{' '} + Don't Allow since AVAP™ Dev Studio does not need + access to those folders. + +If VS Code doesn't update once it restarts, it might be set under + quarantine by macOS. Follow the steps in this issue for resolution. + +Yes, AVAP™ Dev Studio supports macOS Arm64 builds that can run on Macs + with the Apple silicon chipsets. You can install the Universal build, + which includes both Intel and Apple silicon builds, or one of the platform + specific builds. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Network.md b/docs/developer.avapframework.com/69_set_SETUP_Network.md new file mode 100644 index 0000000..950670e --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Network.md @@ -0,0 +1,131 @@ +AVAP™ Dev Studio 2024 is built on top of Electron and benefits from all + the networking stack capabilities of Chromium. This also means that AVAP™ + Dev Studio 2024 users get much of the networking support available in + Google Chrome. + +## Common hostnames + +A handful of features within AVAP™ Dev Studio 2024 require network + communication to work, such as the auto-update mechanism, querying and + installing extensions, and telemetry. For these features to work properly + in a proxy environment, you must have the product correctly configured. + +If you are behind a firewall that needs to allow specific domains used by + AVAP™ Dev Studio 2024, here's the list of hostnames you should allow + communication to go through: + +* `update.code.visualstudio.com` - AVAP™ Dev Studio 2024 download and update server +* `code.visualstudio.com` - AVAP™ Dev Studio 2024 documentation +* `go.microsoft.com` - Microsoft link forwarding service +* `vscode.blob.core.windows.net` - AVAP™ Dev Studio 2024 blob storage, used for remote server +* `marketplace.visualstudio.com` - AVAP™ Dev Studio 2024 Marketplace +* `*.gallerycdn.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace +* `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace +* `rink.hockeyapp.net` - Crash reporting service +* `bingsettingssearch.trafficmanager.net` - In-product settings search +* `vscode.search.windows.net` - In-product settings search +* `raw.githubusercontent.com` - GitHub repository raw file access +* `vsmarketplacebadges.dev` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace badge service +* `az764295.vo.msecnd.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN (deprecated) +* `vscode.download.prss.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN +* `download.visualstudio.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download server, provides dependencies for some VS Code extensions (C++, C#) +* `vscode-sync.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service +* `vscode-sync-insiders.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service (Insiders) +* `vscode.dev` - Used when logging in with GitHub or Microsoft for an extension or Settings Sync +* `*.vscode-unpkg.net` - Used when loading web extensions +* `default.exp-tas.com` - - `*.gallery.vsassets.io` {' '} - AVAP™ Dev Studio 2024 Experiment Service, used to provide experimental user experiences + +## Proxy server support + +AVAP™ Dev Studio 2024 has exactly the same proxy server support as Google + Chromium. Here's a snippet from Chromium's documentation: + +```javascript +"The Chromium network stack uses the system network settings so that + users and administrators can control the network settings of all + applications easily. The network settings include: + - proxy settings + - SSL/TLS settings + - certificate revocation check settings + - certificate and private key stores" +``` + +This means that your proxy settings should be picked up automatically. + +Otherwise, you can use the following command-line arguments to control + your proxy settings: + +```javascript +# Disable proxy + + --no-proxy-server + + # Manual proxy address + + --proxy-server==[:][;...] | + [:] | "direct://" + + # Manual PAC address + + --proxy-pac-url= + + # Disable proxy per host + + --proxy-bypass-list=(|)[:][;...] +``` + +To learn more about these command-line arguments, see Chromium Network + Settings. + +Authenticated proxies should work seamlessly within AVAP™ Dev Studio 2024 + with the addition of PR #22369. + +The authentication methods supported are: + +* Basic +* Digest +* NTLM +* Negotiate + +When using AVAP™ Dev Studio 2024 behind an authenticated HTTP proxy, the + following authentication popup should appear: + + + +Note that SOCKS5 proxy authentication support isn't implemented yet; + you can follow the issue in Chromium's issue tracker. + +See Chromium HTTP authentication to read more about HTTP proxy + authentication within AVAP™ Dev Studio 2024. + +Often HTTPS proxies rewrite SSL certificates of the incoming requests. + Chromium was designed to reject responses which are signed by certificates + which it doesn't trust. If you hit any SSL trust issues, there are a + few options available for you: + +* Since Chromium uses the OS's certificate trust infrastructure, the preferred option is to add your proxy's certificate to your OS's trust chain. See the Chromium Root Certificate Policy documentation to learn more. +* If your proxy runs in `localhost` , you can always try the --allow-insecure-localhost command-line flag. +* If all else fails, you can tell AVAP™ Dev Studio 2024 to ignore all certificate errors using the --ignore-certificate-errors command-line flag. Warning: This is dangerous and{' '} not recommended , since it opens the door to security issues. + +Extensions don't benefit yet from the same proxy support that AVAP™ + Dev Studio 2024 supports. You can follow this issue's development in + GitHub. + +Similarly to extensions, a few other AVAP™ Dev Studio 2024 features + don't yet fully support proxy networking, namely the CLI interface. + The CLI interface is what you get when running{' '} + `code --install-extension vscodevim.vim` from a command prompt + or terminal. You can follow this issue's development in GitHub. + +Due to both of these constraints, the `http.proxy` ,{' '} + `http.proxyStrictSSL` and `http.proxyAuthorization` + variables are still part of AVAP™ Dev Studio's settings, yet they are + only respected in these two scenarios. + +Here are some helpful links that might help you troubleshoot networking + issues in AVAP™ Dev Studio 2024: + +* Network Settings +* Debugging problems with the network proxy +* Configuring a SOCKS proxy server in Chrome +* Proxy settings and fallback (Windows) diff --git a/docs/developer.avapframework.com/69_set_SETUP_Overview.md b/docs/developer.avapframework.com/69_set_SETUP_Overview.md new file mode 100644 index 0000000..0ef9f65 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Overview.md @@ -0,0 +1,119 @@ +Getting up and running with AVAP™ Dev Studio 2024 is quick and easy. It is + a small download so you can install in a matter of minutes and give AVAP™ + Dev Studio 2024 a try. + +## Cross platform + +AVAP™ DS is a free code editor, which runs on the macOS, Linux, and + Windows operating systems. + +Follow the platform-specific guides below: + +* macOS +* Linux +* Windows + +AVAP™ Dev Studio 2024 is lightweight and should run on most available + hardware and platform versions. You can review the System Requirements to + check if your computer configuration is supported. + +## Update cadence + +AVAP™ Dev Studio 2024 releases a new version each month with new features + and important bug fixes. Most platforms support auto updating and you will + be prompted to install the new release when it becomes available. You can + also manually check for updates by running{' '} + Help > Check for Updates on Linux and Windows or + running Code > Check for Updates on macOS. + +## Insiders nightly build + +If you'd like to try our nightly builds to see new features early or + verify bug fixes, you can install our Insiders build. The Insiders build + installs side-by-side with the monthly Stable build and you can freely + work with either on the same machine. The Insiders build is the same one + the AVAP™ Dev Studio 2024 development team uses on a daily basis and we + really appreciate people trying out new features and providing feedback. + +## Portable mode + +AVAP™ Dev Studio 2024 supports Portable mode installation. This mode + enables all data created and maintained by VS Code to live near itself, so + it can be moved around across environments, for example, on a USB drive. + See the AVAP™ Dev Studio 2024 Portable Mode documentation for details. + +## Additional components + +AVAP™ Dev Studio 2024 is an editor, first and foremost, and prides itself + on a small footprint. Unlike traditional IDEs that tend to include + everything but the kitchen sink, you can tune your installation to the + development technologies you care about. Be sure to read the Additional + Components topic after reading the platform guides to learn about + customizing your AVAP™ Dev Studio 2024 installation. + +## Extensions + +AVAP™ Dev Studio 2024 extensions let third parties add support for + additional: + +* Languages - C++, C#, Go, Java, Python +* Tools - ESLint, JSHint , PowerShell +* Debuggers - PHP XDebug. +* Keymaps - Vim, Sublime Text, IntelliJ, Emacs, Atom, Brackets, AVAP™ Dev Studio, Eclipse + +Extensions integrate into AVAP™ Dev Studio 2024's UI, commands, and + task running systems so you'll find it easy to work with different + technologies through AVAP™ Dev Studio 2024's shared interface. Check + out the AVAP™ Dev Studio 2024 extension Marketplace to see what's + available. + +## Next steps + +Once you have installed and set up AVAP™ Dev Studio 2024, these topics + will help you learn more about AVAP™ Dev Studio 2024: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio 2024. +* Basic Editing - Learn about the powerful AVAP™ Dev Studio 2024 editor. +* Code Navigation - Move quickly through your source code. +* Debugging - Debug your source code directly in the AVAP™ Dev Studio 2024 editor. +* Proxy Server Support - Configure your proxy settings. + +If you'd like to get something running quickly, try the Node.js + tutorial walkthrough that will have you debugging a Node.js web + application with AVAP™ Dev Studio 2024 in minutes. + +## Common questions + +We have a list of System Requirements. + +AVAP™ Dev Studio 2024 is a small download (< 100 MB) and has a + disk footprint of less than 200 MB, so you can quickly install AVAP™ Dev + Studio 2024 and try it out. + +AVAP™ Dev Studio 2024 doesn't include a traditional{' '} + File > New Project dialog or pre-installed project + templates. You'll need to add additional components and scaffolders + depending on your development interests. With scaffolding tools like + Yeoman and the multitude of modules available through the npm package + manager, you're sure to find appropriate templates and tools to create + your projects. + +On Linux and Windows, choose Help > About. On macOS, + use Code > About AVAP™ Dev Studio 2024. + +AVAP™ Dev Studio 2024 has detected that some installation files have been + modified, perhaps by an extension. Reinstalling AVAP™ Dev Studio 2024 will + replace the affected files. See our FAQ topic for more details. + +If you want to remove all user data after uninstalling AVAP™ Dev Studio + 2024, you can delete the user data folders `Code` and{' '} + `.avapds` This will return you to the state before you + installed AVAP™ Dev Studio 2024. This can also be used to reset all + settings if you don't want to uninstall AVAP™ Dev Studio 2024. + +The folder locations will vary depending on your platform: + +* Windows - Delete `%APPDATA%\Code` and{' '} `%USERPROFILE%\.vscode.` +* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.avapds.` +* Linux - Delete `$HOME/.config/Code` and{' '} `~/.avapds.` diff --git a/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md b/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md new file mode 100644 index 0000000..b04e965 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md @@ -0,0 +1,66 @@ +You can run AVAP™ Dev Studio 2024 on Raspberry Pi devices. + + + +By downloading and using AVAP™ Dev Studio 2024, you agree to the license + terms and privacy statement. + +## Installation + +AVAP™ Dev Studio 2024 is officially distributed via the Raspberry Pi OS + (previously called Raspbian) APT repository, in both 32-bit and + 64-bit variants. + +You can install it by running: + +| sudo apt update | | sudo apt install code | + +### Running AVAP™ Dev Studio 2024 + +After installing the AVAP™ Dev Studio 2024 package, you can run AVAP™ Dev + Studio 2024 by typing `code` in a terminal or launching it via + the Programming menu. + +## Updates + +Your Raspberry Pi should handle updating AVAP™ Dev Studio 2024 in the same + way as other packages on the system: + +| sudo apt update | | sudo apt upgrade code | + +You can always check when a new release is available in our Updates page. + +## System requirements + +AVAP™ Dev Studio 2024 is supported on these Raspberry Pi models running a + 32-bit or 64-bit version of Raspberry Pi OS: + +* Raspberry Pi 3 Model B/B+ +* Raspberry Pi 4 Model B +* Raspberry Pi 400 + +While 1 GB of memory (RAM) meets the minimum system requirements, + users will benefit from installing AVAP™ Dev Studio 2024 on a Raspberry Pi + 4 with more memory. + +First-generation Raspberry Pi modules and Raspberry Pi Zero are not + supported as they only include an ARMv6 CPU. + +### Workaround for poor performance + +AVAP™ Dev Studio 2024 on Raspberry Pi 4 may be slow with the default + setup. A workaround is to disable hardware (GPU) acceleration in + AVAP™ DS 2024: + +The `"disable-hardware-acceleration": true` runtime + argument switch has the effect of passing the `--disable-gpu` {' '} + command-line argument on AVAP™ Dev Studio 2024 startup. + +## Next steps + +Once you have installed AVAP™ Dev Studio 2024, these topics will help you + learn more about it: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio 2024. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio 2024 to your preferences through settings. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md b/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md new file mode 100644 index 0000000..0d67f51 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md @@ -0,0 +1,79 @@ +The steps for uninstalling AVAP™ Dev Studio will depend on your platform + (Windows, macOS, or Linux) and the install option that you used. + For example on Windows, you can use the System or User Windows Installers + or download a `.zip` file and extract the contents anywhere on + your machine. + +In general, you would uninstall AVAP™ Dev Studio as you would any other + desktop application and follow your platform's recommended flow for + uninstalling software. Specific platform guidance is provided below as + well as how to completely clean up any remaining AVAP™ Dev Studio + configuration files. + +### Windows + +If you installed AVAP™ Dev Studio via the Windows Installer, either the + User or System version, use the installer to remove AVAP™ Dev Studio. + +* Start menu Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. Select Uninstall from the actions dropdown on the right side (three vertical dots). Follow the prompts to uninstall AVAP™ Dev Studio. +* Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. +* Select Uninstall from the actions dropdown on the right side (three vertical dots). +* Follow the prompts to uninstall AVAP™ Dev Studio. +* Control Panel Under Programs , select the{' '} Uninstall a program link. Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. Follow the prompts to uninstall AVAP™ Dev Studio. +* Under Programs , select the{' '} Uninstall a program link. +* Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. +* Follow the prompts to uninstall AVAP™ Dev Studio. + +If you installed AVAP™ Dev Studio on Windows by downloading and extracting + one of the .zip files found on the AVAP™ Dev Studio website, you can + uninstall by deleting the folder where you extracted the .zip contents. + +### macOS + +To uninstall AVAP™ Dev Studio on macOS, open Finder and go to + Applications. Right-click on the AVAP™ Dev Studio application and select + Move to Trash. + +### Linux + +To uninstall AVAP™ Dev Studio on Linux, you should use your package + manager's uninstall or remove option. The exact command line will + differ depending on which package manager you used (for example,{' '} + `apt-get` , `rpn` , `dnf` , `yum` + , etc.). + +The names for the AVAP™ Dev Studio packages are: + +* `code` - AVAP™ Dev Studio Stable release +* `code-insiders` - AVAP™ Dev Studio Insiders release + +For example, if you installed AVAP™ Dev Studio via the Debian package + ( `.deb` ) and `apt-get` package manager, you + would run: + +```javascript +sudo apt-get remove code +``` + +where code is the name of the AVAP™ Dev Studio Debian package. + +### Clean uninstall + +If you want to remove all user data after uninstalling AVAP™ Dev Studio + 2024, you can delete the user data folders `Code` and{' '} + `.vscode` . This will return you to the state before you + installed AVAP™ Dev Studio 2024. This can also be used to reset all + settings if you don't want to uninstall AVAP™ Dev Studio 2024. + +The folder locations will vary depending on your platform: + +* Windows -{' '} `Delete %APPDATA%\Code and %USERPROFILE%\.vscode` . +* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.vscode` . +* Linux - Delete `$HOME/.config/Code` and{' '} `~/.vscode` . + +### Next steps + +* Setup overview - General information about AVAP™ Dev Studio 2024 setup and updates. +* Windows setup - Details and common questions about installing AVAP™ Dev Studio 2024 on Windows. +* macOS setup - AVAP™ Dev Studio 2024 is available for both Intel and Apple silicon macOS machines. +* Linux setup - Learn about the different AVAP™ Dev Studio 2024 packages available for Linux. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Windows.md b/docs/developer.avapframework.com/69_set_SETUP_Windows.md new file mode 100644 index 0000000..7f76c47 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Windows.md @@ -0,0 +1,119 @@ +### Installation + +Alternatively, you can also download a Zip archive, extract it and run + Code from there. + +### User setup versus system setup + +AVAP™ Dev Studio 2024 provides both Windows user and{' '} + system level setups. + +The user setup does not require Administrator privileges to run as the + location will be under your user Local AppData ( + `LOCALAPPDATA` ) folder. Since it requires no elevation, the + user setup is able to provide a smoother background update experience. + This is the preferred way to install AVAP™ Dev Studio 2024 on Windows. + +The system setup requires elevation to Administrator privileges to run and + will place the installation under the system's Program Files. The + in-product update flow will also require elevation, making it less + streamlined than the user setup. On the other hand, installing AVAP™ Dev + Studio 2024 using the system setup means that it will be available to all + users in the system. + +See the Download AVAP™ Dev Studio 2024 page for a complete list of + available installation options. + +### Updates + +AVAP™ Dev Studio 2024 ships monthly releases and supports auto-update when + a new release is available. If you're prompted by AVAP™ Dev Studio + 2024, accept the newest update and it will be installed (you won't + need to do anything else to get the latest bits). + +### Windows Subsystem for Linux + +Windows is a popular operating system and it can be a great cross-platform + development environment. This section describes cross-platform features + such as the Windows Subsystem for Linux (WSL) and the new Windows + Terminal. + +Make sure you are on a recent Windows 10 build. Check{' '} + Settings > Windows Update to see if you are + up-to-date. + +With WSL, you can install and run Linux distributions on Windows. This + enables you to develop and test your source code on Linux while still + working locally on your Windows machine. + +When coupled with the WSL extension, you get full AVAP™ DS editing and + debugging support while running in the context of WSL. + +See the Developing in WSL documentation to learn more or try the Working + in WSL introductory tutorial. + +Available from the Microsoft Store, the Windows Terminal (Preview) + lets you easily open PowerShell, Command Prompt, and WSL terminals in a + multiple tab shell. + +### Next steps + +Once you have installed AVAP™ Dev Studio, these topics will help you learn + more about AVAP™ Dev Studio: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. +* Tips and Tricks - Lets you jump right in and learn how to be productive with AVAP™ Dev Studio. + +### Common questions + +AVAP™ Dev Studio uses Inno Setup to create its setup package for Windows. + Thus, all the Inno Setup command-line switches are available for use. + +Additionally, you can prevent the Setup from launching AVAP™ Dev Studio + after completion with `/mergetasks=!runcode` . + +On certain devices, editor scrolling is not smooth but laggy for an + unpleasant experience. If you notice this issue, make sure you install the + Windows 10 October 2018 update where this issue is fixed. + +Try using the zip file instead of the installer. To use this, unzip AVAP™ + Dev Studio in your `AppData\Local\Programs` folder. + +I installed AVAP™ Dev Studio on my Windows 8 machine. Why are some icons + not appearing in the workbench and editor? + +AVAP™ Dev Studio uses SVG icons and we have found instances where the .SVG + file extension is associated with something other than{' '} + `image/svg+xml` . We're considering options to fix it, but + for now here's a workaround: + +Using the Command Prompt: + +Using the Registry Editor (regedit): + +With the introduction of process sandboxing (discussed in this blog + post) running as administrator is currently unsupported when AppLocker + is configured due to a limitation of the runtime sandbox. If your work + requires that you run AVAP™ Dev Studio from an elevated terminal, you can + launch `code` with{' '} + `--no-sandbox --disable-gpu-sandbox` as a workaround. + +Subscribe to issue #122951 to receive updates. + +Beginning with version `1.78.1` , AVAP™ Dev Studio on Windows + will only allow to access UNC paths (these begin with a leading{' '} + `\\` ) that were either approved by the user on startup or + where the host name is configured to be allowed via the new{' '} + `security.allowedUNCHosts setting` . + +If you rely on using UNC paths in AVAP™ Dev Studio, you can either + +* configure the host to be allowed via the{' '} `security.allowedUNCHosts` setting (for example add{' '} `server-a` when you open a path such as{' '} `\\server-a\path` ) +* map the UNC path as network drive and use the drive letter instead of the UNC path (documentation) +* define a global environment variable{' '} `NODE_UNC_HOST_ALLOWLIST` with the backslash-separated list of hostnames to allow, for example: `server-a\server-b` to allow the hosts `server-a` and `server-b` . + +This change was done to improve the security when using AVAP™ Dev Studio + with UNC paths. Please refer to the associated security advisory for more + information. diff --git a/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md b/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md new file mode 100644 index 0000000..1de26fa --- /dev/null +++ b/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md @@ -0,0 +1,176 @@ +## ws/users.py/set_blockchain_accounts + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "message" + :{' '} + + "BlockChain Account for User 95 Set to 23" + + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + "elapsed" + :{' '} + 0.778839111328125 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `message` : Mensaje de confirmación. +* `codtran` : Transaction code. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&network_id=23', + 'headers': { + '101ObexApiKey': 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "KcM6Vr7EfNnKScEi00jdritBzNjWAOkz"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23' + {' '} + \ + + --header{' '} + + '101ObexApiKey: KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' +``` + +## Business logic: + +This service aims to select one of the user's blokchain accounts as + active by default. diff --git a/docs/developer.avapframework.com/69_set_set_blokchain_network.md b/docs/developer.avapframework.com/69_set_set_blokchain_network.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md b/docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md b/docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/6_How_To_Work_With_Point_Redemption.md b/docs/developer.avapframework.com/6_How_To_Work_With_Point_Redemption.md new file mode 100644 index 0000000..091def3 --- /dev/null +++ b/docs/developer.avapframework.com/6_How_To_Work_With_Point_Redemption.md @@ -0,0 +1,29 @@ +In your project, you can work with loyalty wallets to which you can assign + a FIAT currency, a non-FIAT currency or a new currency created by you, to + which you give a purchase and sale values. This is referred to as a + personalized wallet by default. + +As a concept, a personalized or loyalty wallet accumulates balance or + points that can later be exchanged for products, but that in no case can + be transformed into liquid money regardless of whether it is the result of + an ATM withdrawal, bank account, purchase of prepaid cards, or any other + concept that facilitates cashing out from a loyalty wallet. + +Transfers between users are not allowed unless the destination or wallet + of the beneficiary of the transfer is a wallet of the same type with the + same limitations and the configuration of the wallet allows such + transfers. + +Personalized or loyalty wallets rely on the currency table of the FX + Exchange service to carry out the operations of buying and selling + products from loyalty wallets, thus allowing customers to buy any type of + product, if they meet the conditions to be acquired by a source of + loyalty-type funds regardless of the type of currency held by the product + to be purchased. + +In this way, a customer with a loyalty wallet in USD can purchase products + published in EUR or MXN without any problem. Just like a customer with a + loyalty wallet in My_Coin, can purchase the same products mentioned above. + It is in the configuration of the FX Exchange currency table where the + purchase and sale price of My_Coin is determined, with USD serving as the + reference. diff --git a/docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md b/docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md b/docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md new file mode 100644 index 0000000..adfc909 --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md @@ -0,0 +1,371 @@ +GitHub is a cloud-based service for storing and sharing source code. Using + GitHub with AVAP™ Dev Studio lets you share your source code and + collaborate with others right within your editor. There are many ways to + interact with GitHub, for example, via their website at{' '} + https://github.com or the [Git] + command-line interface (CLI), but in AVAP™ Dev Studio, the rich + GitHub integration is provided by the GitHub Pull Requests and Issues + extension. + +[Install the GitHub Pull Requests and Issues extension] + +To get started with the GitHub in AVAP TM Dev Studio, you'll + need to install Git, create a GitHub account and install the GitHub Pull + Requests and Issues extension. In this topic, we'll demonstrate how + you can use some of your favorite parts of GitHub without leaving AVAP™ + Dev Studio. + +If you're new to source control or want to learn more about AVAP™ Dev + Studio's basic Git support, you can start with the Source Control + topic. + +## Getting started with GitHub Pull Requests and Issues + +Once you've installed the GitHub Pull Requests and Issues extension, + you'll need to sign in. Follow the prompts to authenticate with GitHub + in the browser and return to AVAP™ Dev Studio. + +If you are not redirected to AVAP TM Dev Studio, you can add + your authorization token manually. In the browser window, you will receive + your authorization token. Copy the token, and switch back to AVAP + TM Dev Studio. Select{' '} + Signing in to github.com... in the Status bar, paste the + token, and hit Enter. + +## Setting up a repository + +### Cloning a repository + +You can search for and clone a repository from GitHub using the{' '} + Git: Clone command in the Command Palette + (Ctrl+Shift+P) or by using the Clone Repository {' '} + button in the Source Control view (available when you have no folder + open). + +From the GitHub repository dropdown you can filter and pick the repository + you want to clone locally. + +### Authenticating with an existing repository + +Enabling authentication through GitHub happens when you run any Git action + in AVAP TM Dev Studio that requires GitHub authentication, such + as pushing to a repository that you're a member of or cloning a + private repository. You don't need to have any special extensions + installed for authentication; it is built into AVAP TM Dev + Studio so that you can efficiently manage your repository. + +When you do something that requires GitHub authentication, you'll see + a prompt to sign in: + +Follow the steps to sign into GitHub and return to AVAP TM Dev + Studio. If authenticating with an existing repository doesn't work + automatically, you may need to manually provide a personal access token. + See About authentication to GitHub for more information and details about + each option.{' '} + +Note that there are several ways to authenticate to GitHub, including + using your username and password with two-factor authentication + (2FA), a personal access token, or an SSH key. See About + authentication to GitHub for more information and details about each + option. + +## Editor integration + +### Hovers + +When you have a repository open and a user is @-mentioned, you can hover + over that username and see a GitHub-style hover. + +There is a similar hover for #-mentioned issue numbers, full GitHub issue + URLs, and repository specified issues. + +### Suggestions + +User suggestions are triggered by the "@" character and issue + suggestions are triggered by the "#" character. Suggestions are + available in the editor and in the Source Control {' '} + view's input box. + +The issues that appear in the suggestion can be configured with the{' '} + GitHub Issues: Queries (githubIssues.queries) + setting. The queries use the GitHub search syntax. + +You can also configure which files show these suggestions using the + settings GitHub Issues: Ignore Completion Trigger ( + `githubIssues.ignoreCompletionTrigger` ) and{' '} + GitHub Issues: Ignore User Completion Trigger ( + `githubIssues.ignoreUserCompletionTrigger` ). These settings + take an array of language identifiers to specify the file types. + +```javascript +// Languages that the '#' character should not be used to trigger issue + completion suggestions. + + "githubIssues.ignoreCompletionTrigger": [` `"python" + ] +``` + +## Pull requests + +From the Pull Requests view you can view, manage, and + create pull requests. + +The queries used to display pull requests can be configured with the{' '} + GitHub Pull Requests: Queries ( + `githubPullRequests.queries` ) setting and use the GitHub + search syntax. + +```javascript +"githubPullRequests.queries": [` `{ + ` `"label": "Assigned To Me", + ` `"query": "is:open assignee:${user}" + ` `}, +``` + +### Creating Pull Requests + +Once you have committed changes to your fork or branch, you can use the{' '} + GitHub Pull Requests: Create Pull Request command or the{' '} + Create Pull Request button in the{' '} + Pull Requests view to create a pull request. + +A new Create view will be displayed where you can select + the base repository and base branch you'd like your pull request to + target as well as fill in the title and description. If your repository + has a pull request template, this will automatically be used for the + description. + +Use the buttons in the action bar at the top to add{' '} + Assignees , Reviewers ,{' '} + Labels and a Milestone . + +The Create button menu allows you to select alternative + create options, such as Create Draft or enable an{' '} + Auto-Merge method. + +Once you select Create , if you have not already pushed + your branch to a GitHub remote, the extension will ask if you'd like + to publish the branch and provides a dropdown to select the specific + remote. + +The Create Pull Request view now enters{' '} + Review Mode , where you can review the details of the PR, + add comments, and merge the PR once it's ready. After the PR is + merged, you'll have the option to delete both the remote and local + branch. + +### Reviewing + +Pull requests can be reviewed from the Pull Requests {' '} + view. You can assign reviewers and labels, add comments, approve, close, + and merge all from the pull request Description . + +From the Description page, you can also easily checkout + the pull request locally using the Checkout button. This + will switch AVAP™ Dev Studio to open the fork and branch of the pull + request (visible in the Status bar) in Review Mode and add a new{' '} + Changes in Pull Request view from which you can view + diffs of the current changes as well as all commits and the changes within + these commits. Files that have been commented on are decorated with a + diamond icon. To view the file on disk, you can use the{' '} + Open File inline action. + +The diff editors from this view use the local file, so file navigation, + IntelliSense, and editing work as normal. You can add comments within the + editor on these diffs. Both adding single comments and creating a whole + review is supported. + +When you are done reviewing the pull request changes you can merge the PR + or select Exit Review Mode to go back to the previous + branch you were working on. + +## Issues + +### Creating issues + +Issues can be created from the + button in the{' '} + Issues view and by using the{' '} + GitHub Issues: Create Issue from Selection and{' '} + GitHub Issues: Create Issue from Clipboard commands. They + can also be created using a Code Action for "TODO" comments. + When creating issues, you can take the default description or select the{' '} + Edit Description pencil icon in the upper right to bring + up an editor for the issue body. + +You can configure the trigger for the Code Action using the{' '} + GitHub Issues: Create Issue Triggers {' '} + (githubIssues.createIssueTriggers) setting. + +The default issue triggers are: + +```javascript +"githubIssues.createIssueTriggers": [` `"TODO", + ` `"todo", + ` `"BUG", + ` `"FIXME", + ` `"ISSUE", + ` `"HACK" + ] +``` + +### Working on issues + +From the Issues view, you can see your issues and work on + them. + +By default, when you start working on an issue ( + Start Working on Issue context menu item), a branch + will be created for you, as shown in the Status bar in the image below. + +The Status bar also shows the active issue and if you select that item, a + list of issue actions are available such as opening the issue on the + GitHub website or creating a pull request. + +You can configure the name of the branch using the{' '} + GitHub Issues: Issue Branch Title ( + `githubIssues.issueBranchTitle` ) setting. If your workflow + doesn't involve creating a branch, or if you want to be prompted to + enter a branch name every time, you can skip that step by turning off the{' '} + GitHub Issues: Use Branch For Issues ( + `githubIssues.useBranchForIssues` ) setting. + +Once you are done working on the issue and want to commit a change, the + commit message input box in the Source Control view will + be populated with a message, which can be configured with{' '} + GitHub Issues: Working Issue Format SCM ( + `githubIssues.workingIssueFormatScm` ). + +## GitHub Repositories extension + +The GitHub Repositories extension lets you quickly browse, search, edit, + and commit to any remote GitHub repository directly from within AVAP + TM Dev Studio, without needing to clone the repository locally. + This can be fast and convenient for many scenarios, where you just need to + review source code or make a small change to a file or asset. + +### Opening a repository + +Once you have installed the GitHub Repositories extension, you can open a + repository with the{' '} + GitHub Repositories: Open Repository... command from the + Command Palette (Ctrl+Shift+P) or by clicking the Remote indicator + in the lower left of the Status bar. + +When you run the Open Repository command, you then choose + whether to open a repository from GitHub, open a Pull Request from GitHub, + or reopen a repository that you had previously connected to. + +If you haven't logged into GitHub from AVAP TM Dev Studio + before, you'll be prompted to authenticate with your GitHub account. + +You can provide the repository URL directly or search GitHub for the + repository you want by typing in the text box. + +Once you have selected a repository or Pull Request, the AVAP™ Dev Studio + window will reload and you will see the repository contents in the File + Explorer. You can then open files (with full syntax highlighting and + bracket matching), make edits, and commit changes, just like you would + working on a local clone of a repository. + +One difference from working with a local repository is that when you + commit a change with the GitHub Repository extension, the changes are + pushed directly to the remote repository, similar to if you were working + in the GitHub web interface. + +Another feature of the GitHub Repositories extension is that every time + you open a repository or branch, you get the up-to-date sources available + from GitHub. You don't need to remember to pull to refresh as you + would with a local repository. + +The GitHub Repositories extension supports viewing and even committing + LFS-tracked files without needing to install Git LFS (Large File + System) locally. Add the file types you want tracked with LFS to a + .gitattributes file, then commit your changes directly to GitHub using the + Source Control view. + +### Switching branches + +You can easily switch between branches by clicking on the branch indicator + in the Status bar. One great feature of the GitHub Repositories extension + is that you can switch branches without needing to stash uncommitted + changes. The extension remembers your changes and reapplies them when you + switch branches. + +### Remote Explorer + +You can quickly reopen remote repositories with the Remote Explorer + available on the Activity bar. This view shows you the previously opened + repositories and branches. + +### Create Pull Requests + +If your workflow uses Pull Requests, rather than direct commits to a + repository, you can create a new PR from the Source Control view. + You'll be prompted to provide a title and create a new branch. + +Once you have created a Pull Request, you can use the GitHub Pull Request + and Issues extension to review, edit, and merge your PR as described + earlier in this topic. + +### Virtual file system + +Without a repository's files on your local machine, the GitHub + Repositories extension creates a virtual file system in memory so you can + view file contents and make edits. Using a virtual file system means that + some operations and extensions which assume local files are not enabled or + have limited functionality. Features such as tasks, debugging, and + integrated terminals are not enabled and you can learn about the level of + support for the virtual file system via the{' '} + features are not available link in the Remote indicator + hover. + +Extension authors can learn more about running in a virtual file system + and workspace in the Virtual Workspaces extension author's guide. + +### Continue Working On... + +Sometimes you'll want to switch to working on a repository in a + development environment with support for a local file system and full + language and development tooling. The GitHub Repositories extension makes + it easy for you to: + +* Create a GitHub codespace (if you have the GitHub Codespaces extension). +* Clone the repository locally. +* Clone the repository into a Docker container (if you have Docker and the Microsoft Docker extension installed). + +To switch development environments, use the{' '} + Continue Working On... command, available from the + Command Palette ( `Ctrl+Shift+P` ) or by clicking on the + Remote indicator in the Status bar. + +If you are using the browser-based editor, the{' '} + "Continue Working On..." command has the + options to open the repository locally or within a cloud-hosted + environment in GitHub Codespaces. + +The first time that you use Continue Working On with + uncommitted changes, you will have the option to bring your edits to your + selected development environment using Cloud Changes , + which uses a AVAP™ Dev Studio service to store your pending changes. + +These changes are deleted from our service once they are applied to your + target development environment. If you choose to continue without your + uncommitted changes, you can always change this preference later by + configuring the setting " + `workbench.cloudChanges.continueOn` ": " + `prompt` ". + +## GitHub Copilot + +In AVAP TM Dev Studio, you can enhance your coding with + artificial intelligence (AI), such as suggestions for lines of + code or entire functions, fast documentation creation, and help creating + code-related artifacts like tests. + +GitHub Copilot is an AI-powered code completion tool that helps you write + code faster and smarter. You can use the GitHub Copilot extension in AVAP + TM Dev Studio to generate code, or to learn from the code it + generates. + +You can learn more about how to get started with Copilot in the Copilot + documentation. diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md new file mode 100644 index 0000000..dfb1b6d --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md @@ -0,0 +1,153 @@ +This topic answers frequently asked questions about using Git source + control and GitHub in AVAP TM Dev Studio. + +## Git + +### How to revert or undo a Git commit? + +Revert your last commit with the Git: Undo Last Commit {' '} + command. This will reset your branch to the state right before you did the + commit, including all changes. The command is also available as menu in{' '} + More Actions ... under Commit on the top + of the Source Control view. + +### How to rename a local branch? + +The Git: Rename Branch… command will prompt you for the + new name. + +### How to I undo a git add before committing? + +Added files listed in the Staged Changes can be unstaged + with the - icon or by drag-and-drop. + +### How to I edit the most recent commit message? + +To update the commit message for the last local commit use the{' '} + Git: Commit Staged (Amend) command. It will open + an editor to edit and save the last message. Make sure that no other + changes are staged, as they would be included with the commit. + +### I initialized my repo but the actions in the ... menu are all grayed out + +To push, pull, and sync you need to have a Git origin set + up. You can get the required URL from the repository host. Once you have + that URL, you need to add it to the Git settings by running a couple of + command-line actions. For example: + +```javascript +\> git remote add origin https://github.com//.git + + \> git push -u origin main +``` + +### My team is using Team Foundation Version Control (TFVC) instead of + Git. What should I do? + +Use the Azure Repos extension and this will light up TFVC support. + +### Why do the Pull, Push and Sync actions never finish? + +This usually means there is no credential management configured in Git and + you're not getting credential prompts for some reason. + +You can always set up a credential helper in order to pull and push from a + remote server without having AVAP TM Dev Studio prompt for your + credentials each time. + +### How can I sign in to Git with my Azure DevOps organization that requires + multi-factor authentication? + +Git Credential Manager (GCM) is the recommended Git credential + helper for Windows, macOS, and Linux. If you're running Git for + Windows, GCM has already been installed and configured for you. If + you're running on macOS or Linux, the GCM README has setup + instructions. + +### I have GitHub Desktop installed on my computer but AVAP Dev Studio ignores + it + +AVAP™ Dev Studio only supports the official Git distribution for its Git + integration. + +### I keep getting Git authentication dialogs whenever AVAP Dev Studio is + running + +AVAP TM Dev Studio automatically fetches changes from the server + in order to present you with a summary of incoming changes. The Git + authentication dialog is independent from AVAP TM Dev Studio + itself and is a part of your current Git credential helper. + +One way to avoid these prompts is to set up a credential helper that + remembers your credentials. + +Another option is to disable the auto fetch feature by changing the + following setting: " `git.autofetch":` {' '} + `false` . + +### Why is AVAP Dev Studio warning me that the git repository is potentially + unsafe? + +AVAP™ Dev Studio uses `git.exe` for executing all Git + operations. Starting with Git 2.35.2, users are prevented from running Git + operations in a repository that is in a folder that owned by a user other + than the current user as the repository is deemed to be potentially + unsafe. + +If you try to open such a repository, AVAP TM Dev Studio will + show a welcome view in the Source Control view or an error notification. + Both the welcome view and the notification contain the{' '} + Manage Unsafe Repositories command that lets you review + the list of potentially unsafe repositories, mark them as safe, and open + them. The Manage Unsafe Repositories command is also + available in the Command Palette ( `Ctrl+Shift+P` ). + Marking a repository as safe will add the repository location to the + safe.directory git configuration. + +On Windows, a common scenario where this can occur is when a repository is + cloned using an application (for example, Windows Terminal or AVAP + TM Dev Studio) that runs "as administrator", but + the repository is opened using another application or instance (for + example, AVAP TM Dev Studio) that does not run "as + administrator". + +### Why isn't AVAP™ Dev Studio discovering Git repositories in parent + folders of workspaces or open files? + +AVAP TM Dev Studio uses + `git rev-parse --show-toplevel` to determine the root of a Git + repository. In most cases, the root of the Git repository is inside the + workspace, but there are scenarios where the root of the Git repository is + in the parent folders of the workspace or the open file(s). While + opening Git repositories in parent folders of workspaces or open files is + a great feature for advanced users, it can be confusing for new users. We + have seen cases where this confusion resulted in discarding changes from + these Git repositories causing data loss. + +To avoid confusion, and to reduce the risk of data loss, AVAP TM {' '} + Dev Studio will display a notification and a new welcome view in the + Source Control view, and will not automatically open Git repositories from + the parent folders of workspaces and open files. + +You can control how Git repositories from parent folders are handled using + the `git.openRepositoryInParentFolders` setting. If you would + like to restore the old behavior, set the{' '} + `git.openRepositoryInParentFolders` setting to{' '} + `always` . + +### Can I use SSH Git authentication with AVAP™ Dev Studio? + +Yes, though AVAP TM Dev Studio works most easily with SSH keys + without a passphrase. If you have an SSH key with a passphrase, you'll + need to launch AVAP TM Dev Studio from a Git Bash prompt to + inherit its SSH environment. + +## GitHub + +### Is GitHub Enterprise supported? + +AVAP TM Dev Studio has official support for authentication with + GitHub Enterprise Servers. Open a local checkout of a GHES repository and + you will be prompted to sign in with your GitHub Enterprise Server + account. diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md new file mode 100644 index 0000000..7c20403 --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md @@ -0,0 +1,213 @@ +Want to easily manage your source code and collaborate with others? Git + and GitHub are the tools you need! And with AVAP TM Dev Studio, + you can set up and use them in a snap. Even if you're a beginner, AVAP + TM Dev Studio's user-friendly interface guides you through + common Git actions like pushing and pulling code, creating and merging + branches, and committing code changes. And if you're a pro, you'll + love the ability to perform Git actions directly within the editor, saving + you time and effort compared to using the Git command line. Plus, the + seamless workflow between AVAP TM Dev Studio and Git means you + can stay in your editor and get more done. + +## Set up Git in AVAP™ Dev Studio + +To use Git and GitHub in AVAP TM Dev Studio, first make sure you + have Git installed on your computer. If Git is missing, the{' '} + Source Control view shows instructions on how to install + it. Make sure to restart AVAP TM Dev Studio afterwards. + +Additionally you can sign into AVAP TM Dev Studio with your + GitHub account in the Accounts menu in the lower right of + the Activity bar to enables additional features like Settings Sync, but + also cloning and publishing repositories from GitHub. + +## Open a Git repository + +AVAP TM Dev Studio provides several ways to get started in a Git + repository, from local to remote cloud-powered environments like GitHub + Codespaces. + +### Clone a repository locally + +To clone a repository from GitHub, execute the Git: Clone {' '} + command or select the Clone Repository button in the{' '} + Source Control view. If you clone from GitHub, AVAP + TM Dev Studio will prompt you to authenticate with GitHub. This + allows you to search all available repositories and clone private + repositories. For other Git providers, enter the repository URL and select{' '} + Clone and pick a folder. AVAP TM Dev Studio + opens the folder once the repository is cloned on your local machine. + +### Initialize a repository in a local folder + +To initialize a new local repository, pick an existing or new folder on + your computer and open it in AVAP TM Dev Studio. In the{' '} + Source Control view, select the{' '} + Initialize Repository button. This creates a new Git + repository in the current folder, allowing you to start tracking code + changes. + +Once you have a local Git repository set up, you can publish it to GitHub. + This will create a new repository on your GitHub account, and push your + local code to the remote repository. Having your source code on a remote + repository is a great way to back up your code, collaborate with others, + and automate your workflow with GitHub Actions. + +Use the Publish to GitHub command button in the{' '} + Source Control view. You can then choose a name and + description for the repository, and whether to make it public or private. + Once the repository has been created, AVAP TM Dev Studio will + push your local code to the remote repository. Your code is now backed up + on GitHub, and you can start collaborating with others with commits and + pull requests. + +### Open a GitHub repository in a codespace + +GitHub Codespaces let you open a GitHub repository in a full configured + cloud-based development environment, allowing you to develop in a browser + without having to install any software on your local computer. GitHub + Codespaces allows free usage for individuals, which makes it easy to get + started working on open source projects. + +Install the GitHub Codespaces extension into AVAP TM Dev Studio + and sign in with GitHub. Run the{' '} + Codespaces: Create New Codespace command and pick the + repository and branch you want to open. The new codespace will open in a + new window. + +Alternatively, you can also start with a template from the GitHub's + Codespaces site. If you already have a codespace open in your browser, you + can open it in your AVAP TM Dev Studio Desktop by running the{' '} + + Codespaces: Open in AVAP TM Dev Studio Desktop + {' '} + command. You can learn more about GitHub Codespaces, including + customization such as forwarding ports, in the Developing in a codespace + documentation. + +### Open a GitHub repository remotely + +AVAP TM Dev Studio's remote repository support allows you to + browse and edit a GitHub repository without cloning it to your local + computer. This is useful for quickly making changes to a remote repository + without having to clone the entire codebase to your machine. + +First install the GitHub Repositories extension. Run the command{' '} + Remote Repositories: Open Remote Repository... or use the{' '} + Open Remote Repository button the Explorer view. Search + and select the GitHub repository that you want to open. + +## Staging and committing code changes + +Once you have a Git repository set up, you can start tracking code changes + by staging and committing your newly created and edited code. + +To stage a file, select the + (plus) icon next to + the file in the Source Control view. This will add the + file to the Staged Changes section, indicating that it + will be included in the next commit. Staged changes can also be discarded + by selecting the − (minus) icon next to the + file. + +To commit your staged changes, type a commit message in the upper text box + and select the Commit button. This saves your changes to + the local Git repository, allowing you to revert to previous versions of + your code if needed. You can navigate through and review all local file + changes and commits in the Timeline view available in the + bottom of the Explorer. + +## Pushing and pulling remote changes + +Once you have made commits to your local Git repository, you can push them + to the remote repository. The Sync Changes button + indicates how many commits are going to be pushed and pulled. Selecting + the Sync Changes button downloads (pull) any new + remote commits and uploads (push) new local commits to the remote + repository. + +Push and pull can also be performed individually by using their respective + commands. + +## Using branches + +In Git, branches allow you to work on multiple versions of your codebase + simultaneously. This is useful for experimenting with new features or + making large code changes without affecting the main codebase. + +The branch indicator in the Status bar shows the current branch and lets + you switch to new and existing branches. To create a new branch, select + the branch indicator and choose to create it from the current branch or + another local one. Type a name for the new branch, and confirm. AVAP + TM Dev Studio creates a new branch and switches to it, allowing + you to make changes to your code without affecting the main branch. + +To push the branch to the remote repository, select{' '} + Publish Branch in the Source Control {' '} + view. This will create a new branch on the remote repository, allowing you + to collaborate with others in that branch. + +### Creating and reviewing GitHub pull requests + +In Git and GitHub, pull requests (PRs) are a way for collaborators + to review and merge code changes from separate branches into the main + branch. This allows teams to review and approve code changes before they + are incorporated into the main codebase, ensuring that only high-quality + changes are merged. + +To use pull requests in AVAP TM Dev Studio, you need to install + the GitHub Pull Requests and Issues extension. This extension adds PR and + issue tracking functionality to AVAP TM Dev Studio, allowing you + to create, review, and merge PRs from within the editor. + +To create a PR, make sure you are on a separate branch from the main + branch, and push your code changes to the remote repository. In the{' '} + Source Control view, select the{' '} + Create Pull Request button. This will open the PR + creation form, where you can enter a title and description for the PR, and + choose which branch to merge the changes into. Select{' '} + Create to create the PR. + +To review a PR, select the Review Pull Request button in + the Source Control view, and select the PR you want to + review. This will open the PR in a new editor window, where you can review + the code changes and leave comments. Once you are satisfied with the code + changes, you can select the Merge button to merge the PR + into the targeted branch. + +Learn more about pull requests in AVAP TM Dev Studio's + GitHub documentation + +## Using Git in the built-in terminal + +As all Git state is kept in the local repository, you can easily switch + between AVAP TM Dev Studio's UI, the built-in + terminal/docs/terminal/basics, or external tools like GitHub Desktop. You + can also set up AVAP TM Dev Studio as your default Git editor, + allowing you to use AVAP TM Dev Studio to edit commit messages + and other Git-related files. + +### Git Bash on Windows + +Git Bash is a popular shell environment for Windows that provides a + Unix-like command-line interface for working with Git and other + command-line tools. AVAP TM Dev Studio's integrated terminal + supports Git Bash as a shell, allowing you to seamlessly integrate Git + Bash into your development workflow. Installing Git on your Windows + machine will also install Git Bash, if it wasn't deselected during the + installation steps. + +Start by opening View > Terminal {' '} + (Ctrl+`). Click on the dropdown arrow next to the + icon in the + terminal panel to pick a new shell to open. If Git Bash is installed, it + will be shown in the list. You can toggle between different terminals and + shells in the Terminal sidebar. With Git Bash configured in AVAP + TM Dev Studio, you can now use all of your favorite Git + commands directly from the terminal in your code editor. + +If you want to set Git Bash as your default shell, open the Terminal + dropdown (next to the + icon) and select{' '} + Select Default Profile . This will open a list of + available shells, including Git Bash. Selecting Git Bash will set it as + your default shell, and all future terminals will be opened with Git Bash. + More advanced tips are available in the terminal + documentation](/docs/terminal/basics). diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md new file mode 100644 index 0000000..dc88791 --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md @@ -0,0 +1,345 @@ +AVAP TM Dev Studio has integrated source control management + (SCM) and includes Git support out-of-the-box. Many other source + control providers are available through extensions on the AVAP + TM Dev Studio Marketplace. + +## Working in a Git repository + +The Source Control icon in the Activity Bar on the left will always + indicate an overview of how many changes you currently + have in your repository. Selecting the icon will show you the details of + your current repository changes: CHANGES ,{' '} + STAGED CHANGES and MERGE CHANGES . + +Clicking each item will show you in detail{' '} + the textual changes within each file . Note that for + unstaged changes, the editor on the right still lets you edit the file: + feel free to use it! + +You can also find indicators of the{' '} + status of your repository in the bottom-left corner of + AVAP TM Dev Studio: the current branch ,{' '} + dirty indicators , and the number of{' '} + incoming and outgoing commits of the current branch. You + can checkout any branch in your repository by clicking + that status indicator and selecting the Git reference from the list. + +## Commit + +Staging (git add) and unstaging {' '} + (git reset) can be done via contextual actions in the files or by + drag-and-drop. + +Configure your Git username and email. When you commit, + be aware that if your username and/or email is not set in your Git + configuration, Git will fall back to using information from your local + machine. You can find the details in Git commit information. + +You can type a commit message above the changes and press{' '} + `Ctrl+Enter` (macOS: ⌘ `+Enter` ) to commit + them. If there are any staged changes, only those changes will be + committed. Otherwise, you'll get a prompt asking you to select what + changes you'd like to commit and get the option to change your commit + settings. + +We've found this to be a great workflow. For example, in the earlier + screenshot, only the staged changes to `overview.png` will be + included in the commit. Later staging and commit actions could include the + changes to `versioncontrol.md` and the two other{' '} + `.png` images as a separate commit. + +More specific Commit actions can be found in the{' '} + Views and More Actions ... menu on the top of the Source + Control view. + +## Cloning a repository + +If you haven't opened a folder yet, the Source Control view will give + you the options to Open Folder from your local machine or{' '} + Clone Repository . + +If you select Clone Repository , you will be asked for the + URL of the remote repository (for example on GitHub) and the + parent directory under which to put the local repository. + +For a GitHub repository, you would find the URL from the GitHub{' '} + Code dialog. + +You would then paste that URL into the Git: Clone prompt. + +You'll also see the option to Clone from GitHub . Once + you authenticate with your GitHub account in AVAP TM Dev + Studioe, you'll be able to search through repositories by name, and + select any repo to clone it. You can also start the flow to clone a Git + repository with the Git: Clone command in the{' '} + Command Palette (Ctrl+Shift+P). To see a + step-by-step walkthrough, check out our Clone repos from AVAP TM {' '} + Dev Studio video. + +## Branches and Tags + +You can create and checkout branches directly within AVAP TM Dev + Studio through the Git: Create Branch and{' '} + Git: Checkout to commands in the{' '} + Command Palette ( `Ctrl+Shift+P` ). + +If you run Git: Checkout to , you will see a dropdown list + containing all of the branches or tags in the current repository. It will + also give you the option to create a new branch if you decide that's a + better option, or checkout a branch in detached mode. + +The Git: Create Branch command lets you quickly create a + new branch. Just provide the name of your new branch and AVAP TM {' '} + Dev Studio will create the branch and switch to it. If you choose to{' '} + Create new branch from... , you'll get an extra prompt + that allows you to specify which commit the new branch should be pointing + to. + +## Remotes + +Given that your repository is connected to some remote and that your + checked out branch has an upstream link to a branch in that remote, AVAP + TM Dev Studio offers you useful actions to{' '} + push , pull , and sync {' '} + that branch (the latter will run a pull command + followed by a push command). You can find these + actions in the Views and More Actions ... menu, along + with the option to add or remove a remote . + +AVAP TM Dev Studio is able to periodically fetch changes from + your remotes. This enables AVAP TM Dev Studio to show how many + changes your local repository is ahead or behind the remote. This feature + is disabled by default and you can use the git.autofetch + setting(/docs/getstarted/settings) to enable it. + +## Git Status Bar actions + +There is a Synchronize Changes action in the Status Bar, + next to the branch indicator, when the current checked out branch has an + upstream branch configured. Synchronize Changes will pull + remote changes down to your local repository and then push local commits + to the upstream branch. + +If there is no upstream branch configured and the Git repository has + remotes set up, the Publish action is enabled. This will + let you publish the current branch to a remote. + +## Gutter indicators + +If you open a folder that is a Git repository and begin making changes, + AVAP TM Dev Studio will add useful annotations to the gutter and + to the overview ruler. + +* A red triangle indicates where lines have been deleted +* A green bar indicates new added lines +* A blue bar indicates modified lines + +## Merge conflicts + +Merge conflicts are recognized by AVAP TM Dev Studio. + Differences are highlighted and there are inline actions to accept either + one or both changes. Once the conflicts are resolved, stage the + conflicting file so you can commit those changes. + +## 3-way merge editor + +To help you resolve merge conflicts, AVAP TM Dev Studio provides + a 3-way merge editor where you can interactively accept incoming and + current changes and view and edit the resulting merged file. The 3-way + merge editor is opened by selecting the{' '} + Resolve in Merge Editor button in the bottom right corner + of a file with Git merge conflicts. + +The 3-way merge editor displays separate views for{' '} + Incoming changes (on the left),{' '} + Current changes (on the right), and the{' '} + Result of the merge (at the bottom). Conflicts + are highlighted and can be resolved by using the CodeLens buttons. + +### Resolving conflicts + +The 3-way merge editor allows you to resolve conflicts by accepting either + one or both changes. You can also manually edit the result of the merge. + +For some conflicts, the merge editor shows an{' '} + Accept Combination button. Accepting the combination + resolves the current conflict by smartly merging both changes. This is + especially useful for changes in the same line that don't touch the + same characters. + +Use the Ignore buttons to accept neither the incoming nor + current change, but mark the conflict as resolved. This resets the + conflicting area to the state before any changes were made. + +### Completing the merge + +You can use the conflict counter in the right of the result editor to keep + track of how many unresolved conflicts are remaining. Clicking on the + counter jumps to the next unresolved conflict. Once all conflicts are + resolved, you can complete the merge by selecting{' '} + Complete Merge in the bottom right corner. This stages + the file and closes the merge editor. + +### Alternative layouts and more + +Selecting the three dots ( ··· ) in the top right + corner of the merge editor opens a context menu with additional options. + You can switch to a vertical layout and display the base view, which shows + the state of the file before any changes were made. + +The three dots next to Incoming , Current + , and Result offer options for each view, such as showing + a side-by-side diff against base, accepting all changes, or resetting the + result. + +### Understanding conflicts + +If you want to learn more about the details of how 3-way merge editors + work, we can recommend the following video: + +## Viewing diffs + +Our Git tooling supports viewing of diffs within AVAP TM Dev + Studio. + +### Accessible Diff Viewer + +There is an Accessible Diff Viewer in the Diff editor that presents + changes in a unified patch format. You can navigate between changes with{' '} + Go to Next Difference ( `F7` ) and{' '} + Go to Previous Difference ( `Shift+F7` + ). Lines can be navigated with arrow keys and pressing{' '} + `Enter` will jump back in the Diff editor and the selected + line. + +## Timeline view + +The Timeline view, accessible at the bottom of the File Explorer by + default, is a unified view for visualizing time-series events (for + example, Git commits) for a file. + +AVAP TM Dev Studio's built-in Git support provides the Git + commit history of the specified file. Selecting a commit will open a diff + view of the changes introduced by that commit. When you right-click on a + commit, you'll get options to Copy Commit ID and{' '} + Copy Commit Message . + +AVAP TM Dev Studio supports more Git history workflows through{' '} + extensions available on + the AVAP TM Dev Studio Marketplace. + +## Git output window + +You can always peek under the hood to see the Git commands we are using. + This is helpful if something strange is happening or if you are just + curious. :) + +To open the Git output window, run View >{' '} + Output and select Log (Git) from + the dropdown list. + +## Initialize a repository + +If your workspace is on your local machine, you can enable Git source + control by creating a Git repository with the{' '} + Initialize Repository command. When AVAP TM Dev + Studio doesn't detect an existing Git repository, the Source Control + view will give you the options to Initialize Repository {' '} + or Publish to GitHub . + +You can also run the Git: Initialize Repository and{' '} + Publish to GitHub commands from the{' '} + Command Palette ( `Ctrl+Shift+P` ). + Running Initialize Repository will create the necessary + Git repository metadata files and show your workspace files as untracked + changes ready to be staged. Publish to GitHub will + directly publish your workspace folder to a GitHub repository, allowing + you to choose between private and public repositories. Check out our + publishing repos video for more information about publishing to GitHub. + +## AVAP TM Dev Studio as Git editor + +When you launch AVAP TM Dev Studio from the command line, you + can pass the `--wait` argument to make the launch command wait + until you have closed the new AVAP TM Dev Studio instance. This + can be useful when you configure AVAP TM Dev Studio as your Git + external editor so Git will wait until you close the launched AVAP + TM Dev Studio instance. + +Here are the steps to do so: + +Now you can run `git config --global -e` and use AVAP + TM Dev Studio as editor for configuring Git. + +### AVAP TM Dev Studio as Git difftool and mergetool + +You can use AVAP TM Dev Studio's diff and merge capabilities + even when using Git from command-line. Add the following to your Git + configurations to use AVAP TM Dev Studio as the diff and merge + tool: + +```javascript +[diff] + ` `tool = default-difftool + + [difftool "default-difftool"] + ` `cmd = code --wait --diff $LOCAL $REMOTE + + [merge] + ` `tool = code + + [mergetool "code"] + ` `cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED +``` + +This uses the `--diff` option that can be passed to AVAP + TM Dev Studio to compare two files side by side. The merge tool + will be used the next time Git discovers a merge conflict. + +To summarize, here are some examples of where you can use AVAP + TM Dev Studio as the editor: + +* `git rebase HEAD~3 -i` do interactive rebase using AVAP TM Dev Studio +* `git commit` use AVAP TM Dev Studio for the commit message +* `git add -p` followed by e for interactive add +* `git difftool ^ ` use AVAP TM Dev Studio as the diff editor for changes + +## Working with GitHub Pull Requests and Issues + +AVAP TM Dev Studio can also bring in GitHub's pull requests + and issues. Create your PRs in AVAP TM Dev Studio, review with + comments, and approve them without switching context. Learn more about + GitHub PRs and Issues in AVAP TM Dev Studio. + +## SCM Providers + +AVAP TM Dev Studio has support for handling multiple Source + Control providers simultaneously. For example, you can open multiple Git + repositories alongside your Azure DevOps Server local workspace and + seamlessly work across your projects. To turn on the{' '} + Source Control Providers view, select the overflow menu + in the Source Control view ( `Ctrl+Shift+G` + ), hover over Views , and make sure that{' '} + Source Control Repositories is marked with a check. The{' '} + Source Control Providers view shows the detected + providers and repositories, and you can scope the display of your changes + by selecting a specific provider. + +### SCM Provider extensions + +If you would like to install another SCM provider, you can search on the{' '} + scm providers extension category in the{' '} + Extensions view ( `Ctrl+Shift+X` ). + Start typing '@ca' and you will see suggestions for extension + categories like debuggers and linters. Select{' '} + `@category:"scm providers"` to see available SCM + providers. + +## Next steps + +* Intro Video - Git Version Control - An introductory video providing an overview of AVAP TM Dev Studio Git support. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. +* Debugging - This is where AVAP TM Dev Studio really shines +* Tasks - Running tasks with Gulp, Grunt, and Jake. Showing Errors and Warnings +* Source Control API - If you want to integrate another Source Control provider into AVAP TM Dev Studio, see our Source Control API. diff --git a/docs/developer.avapframework.com/72_spei_spei_EN.md b/docs/developer.avapframework.com/72_spei_spei_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md new file mode 100644 index 0000000..74588f8 --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md @@ -0,0 +1,334 @@ +AVAP TM Dev Studio's integrated terminal has many advanced + features and settings, such as Unicode and emoji support, custom + keybindings, and automatic replies. This topic explains these advanced + features in detail. If you are new to AVAP TM Dev Studio or the + integrated terminal, you may want to review the{' '} + Terminal Basics topic first. + +## Persistent sessions + +The terminal supports two different types of persistent sessions: + +* Process reconnection: When reloading a window (for example, after installing an extension), reconnect to the previous process and restore its content. +* Process revive: When restarting AVAP TM Dev Studio, a terminal's content is restored and the process is{' '} relaunched using its original environment. + +Both of these persistent sessions can be disabled by setting + terminal.integrated.enablePersistentSessions to false, and the amount of + scrollback restored is controlled by + theterminal.integrated.persistentSessionScrollback setting. Process revive + can be configured independently with + terminal.integrated.persistentSessionReviveProcess. + +### Moving terminals between windows + +Terminal tabs can be dragged and dropped between AVAP TM Dev + Studio windows. This can also be done manually through the Command Palette + and the Terminal: Detach Session and{' '} + Terminal: Attach to Session commands. + +### Configure how the terminal behaves on start up + +When opening a window, if the terminal view is visible it will either + reconnect to the terminal using persistent sessions, or create a new + shell. This behavior can be fine tuned with the + terminal.integrated.hideOnStartup setting. + +* never (default): Never hide the terminal view on startup. +* whenEmpty: Only hide the terminal when there are no persistent sessions restored. +* always: Always hide the terminal, even when there are persistent sessions restored. + +## Keybinding and the shell + +As an embedded application, the integrated terminal should intercept some, + but not all, keybindings dispatched within AVAP TM Dev Studio. + +The configurable terminal.integrated.commandsToSkipShell setting + determines which command's keybindings should always "skip the + shell" and instead be handled by AVAP TM Dev Studio's + keybinding system. By default, it contains a hard-coded list of commands + that are integral to the AVAP TM Dev Studio experience but you + can add or remove specific commands: + +```javascript +{ + ` `"terminal.integrated.commandsToSkipShell": [` `// Ensure + the toggle sidebar visibility keybinding skips the shell + ` `"workbench.action.toggleSidebarVisibility", + ` `// Send quick open's keybinding to the shell + ` `"-workbench.action.quickOpen", + ` `] + + } +``` + +Look at the terminal.integrated.commandsToSkipShell setting details to see + the complete list of default commands. + +### Chords + +Chord keybindings are made up of two keybindings, for example Ctrl+K + followed by Ctrl+C to change the line to a comment. Chords always skip the + shell by default but can be disabled with terminal.integrated.allowChords. + +### macOS clear screen + +On macOS, Cmd+K is a common keybindings in terminals to clear the screen + so AVAP TM Dev Studio also respects that, which means Cmd+K + chords will not work. Cmd+K chords can be enabled by{' '} + + removing the clear keybinding + + : + +```javascript +{ + ` `"key": "cmd+k", + ` `"command": "-workbench.action.terminal.clear" + + } +``` + +Additionally, this keyboard shortcut will be overridden automatically if + any extensions contribute Cmd+K keybindings due to how keybinding priority + works. To re-enable the Cmd+K clear keybinding in this case, you can + redefine it in user keybindings, which have a higher priority than + extension keybindings: + +```javascript +{ + ` `"key": "cmd+k", + ` `"command": "workbench.action.terminal.clear", + ` `"when": "terminalFocus && terminalHasBeenCreated || + terminalFocus && terminalProcessSupported" + + } +``` + +### Mnemonics + +Using mnemonics to access AVAP TM Dev Studio's menu (for + example, Alt+F for File menu) is disabled by default in the terminal + as these key events are often important hotkeys in shells. Set + terminal.integrated.allowMnemonics to enable mnemonics, but note that this + will disallow any Alt key events to go to the shell. This setting does + nothing on macOS. + +### Custom sequence keybindings + +The workbench.action.terminal.sendSequence command can be used to send a + specific sequence of text to the terminal, including escape sequences that + are interpreted specially by the shell. The command enables you to send + Arrow keys, Enter, cursor moves, etc. + +For example, the sequence below jumps over the word to the left of the + cursor (Ctrl+Left) and then presses Backspace: + +```javascript +{ + ` `"key": "ctrl+u", + ` `"command": "workbench.action.terminal.sendSequence", + ` `"args": { + ` `"text": "\u001b[1;5D\u007f" + ` `} + + } +``` + +This feature supports{' '} + variable substitution . + +The sendSequence command only works with the \u0000 format for using + characters via their character code (not \x00). Read more about + these hex codes and terminal sequences in the following resources: + +* XTerm Control Sequences +* List of C0 and C1 control codes + +## Confirmation dialogs + +In order to avoid unnecessary output and user prompts, the terminal does + not show warning dialogs when processes exit. If warnings are desirable, + they can be configured with the following settings: + +* terminal.integrated.confirmOnExit - Controls whether to confirm when the window closes if there are active debug sessions. +* terminal.integrated.confirmOnKill - Controls whether to confirm killing terminals when they have child processes. +* terminal.integrated.showExitAlert - Controls whether to show the alert "The terminal process terminated with exit code" when exit code is non-zero. + +## Auto replies + +The terminal can automatically provide a configurable input response to + the shell if an exact sequence of output is received. The most common use + case is to automatically reply to a prompt when hitting Ctrl+C in batch + scripts that ask whether the user wants to terminate the batch job. To + automatically dismiss this message, add this setting: + +```javascript +{ + ` `"terminal.integrated.autoReplies": { + ` `"Terminate batch job (Y/N)": "Y\r" + ` `} + + } +``` + +Notice that the \r character used here means Enter, and much like{' '} + custom sequence keybindings , + this feature supports sending escape sequences to the shell. + +No auto replies are configured by default as providing shell input should + be an explicit action or configuration by the user. + +## Change tab stop width + +The terminal.integrated.tabStopWidth setting allows configuring the tab + stop width when a program running in the terminal outputs \t. This should + typically not be needed as programs will often move the cursor instead of + using the Tab character, but may be useful in some situations. + +## Unicode and emoji support + +The terminal has both Unicode and emoji support. When these characters are + used in the terminal, there are some caveats to that support: + +* Some Unicode symbols have ambiguous width that may change between Unicode versions. Currently we support Unicode version 6 and 11 widths, which can be configured with the terminal.integrated.unicodeVersion setting. The version specified should match the Unicode version used by the shell/operating system, otherwise there could be rendering issues. Note that the Unicode version of the shell/OS may not match the font's actual width. +* Some emojis comprised of multiple characters may not render correctly, for example, skin tone modifiers. +* Emoji support is limited on Windows. + +## Image support + +Images in the terminal work provided they use either the Sixel or iTerm + inline image protocols. This feature is disabled by default and can be + enabled with the terminal.integrated.enableImages setting. + +Current limitations: + +* Serialization does not work, so reloading a terminal will not retain any images ( jerch/xterm-addon-image#47 ). +* Copying the selection as HTML does not include the selected image ( jerch/xterm-addon-image#50 ). +* Animated gifs don't work ( jerch/xterm-addon-image#51 ). +* Images that are shorter than a cell will not work properly, this is a{' '} design flaw with the sequences and also occurs in XTerm . + +## Process environment + +The process environment of the application running within the terminal is + influenced by various settings and extensions and can cause the output in + the AVAP TM Dev Studio terminal to look different than in other + terminals. + +### Environment inheritance + +When AVAP TM Dev Studio is opened, it launches a login shell + environment in order to source a shell environment. This is done because + developer tools are often added to the $PATH in a shell launch script like + ~/.bash_profile. By default, the terminal inherits this environment, + depending on your{' '} + + profile shell arguments + + , and means that multiple profile scripts may have run, which could cause + unexpected behavior. + +This environment inheritance can be disabled on macOS and Linux via the + terminal.integrated.inheritEnv setting. + +### Interaction with $LANG + +There is some special interaction with the $LANG environment variable, + which determines how characters are presented in the terminal. This + feature is configured with the terminal.integrated.detectLocale setting: + +### Extension environment contributions + +Extensions are able to{' '} + + contribute to terminal environments + + , allowing them to provide some integration with the terminal. For + example, the built-in Git extension injects the GIT_ASKPASS environment + variable to allow AVAP TM Dev Studio to handle authentication to + a Git remote. + +If an extension changes the terminal environment, any existing terminals + will be relaunched if it is safe to do so, otherwise a warning will show + in the terminal status. More information about the change can be viewed in + the hover, which also includes a relaunch button. + +## Windows and ConPTY + +AVAP TM Dev Studio's terminal is built on the{' '} + xterm.js project to + implement a Unix-style terminal that serializes all data into a string and + pipes it through a "pseudoterminal". Historically, this was not + how the terminal worked on Windows, which used the{' '} + + Console API + {' '} + to implement its console called 'conhost'. + +An open source project called{' '} + winpty was created to + try to fix this issue by providing an emulation/translation layer between + a Unix-style terminal and a Windows console. AVAP TM Dev + Studio's terminal was originally implemented using only winpty. This + was great at the time, but in 2018, Windows 10 received{' '} + + the ConPTY API + + , which took the idea pioneered by winpty and baked it into Windows, + providing a more reliable and supported system to leverage Unix-style + terminals and apps on Windows. + +AVAP TM Dev Studio defaults to ConPTY on Windows 10+ (from + build number 18309) and falls back to winpty as a legacy option for + older versions of Windows. ConPTY can be explicitly disabled via the + terminal.integrated.windowsEnableConpty settings but this should normally + be avoided. + +Since ConPTY is an emulation layer, it does come with some quirks. The + most common is that ConPTY considers itself the owner of the viewport and + because of that will sometimes reprint the screen. This reprinting can + cause unexpected behavior such as old content displaying after running the{' '} + Terminal: Clear command. + +## Remote development + +This section outlines topics specific to when AVAP TM Dev Studio + is connected to a remote machine using a AVAP TM Dev Studio{' '} + + Remote Development + {' '} + extension. + +### Reducing remote input latency + +Local echo is a feature that helps mitigate the effect of input latency on + remote windows. It writes the keystrokes in the terminal in a dimmed color + before the result is confirmed by the remote. By default, the feature + start running when latency is detected to be above 30 ms and the timing + can be configured with terminal.integrated.localEchoLatencyThreshold. The + color of the unconfirmed characters is defined by + terminal.integrated.localEchoStyle. + +Local echo disables itself dynamically depending on the active program in + the terminal. This is controlled by + terminal.integrated.localEchoExcludePrograms, which defaults to + ['vim', 'vi', 'nano', 'tmux']. It's + recommended that you disable the feature for any application or shell that + is highly dynamic and/or does a lot of reprinting of the screen when + typing. + +To disable the feature completely, use: + +```javascript +{ + ` `"terminal.integrated.localEchoEnabled": false + + } +``` + +### Local terminals in remote windows + +The default local terminal profile can be launched in + remote windows with the{' '} + Terminal: Create New Integrated Terminal (Local) {' '} + command via the Command Palette. Currently non-default profiles cannot be + launched from remote windows. diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md new file mode 100644 index 0000000..213a3a7 --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md @@ -0,0 +1,234 @@ +The look of AVAP TM Dev Studio's terminal can be customized + extensively. + +*Sapphire + {' '} + + theme with custom Starship prompt + using the font Hack with{' '} + Nerd Font symbols + +## Text style + +Text in the terminal can be customized with the following settings: + +* `terminal.integrated.fontFamily:` The font family to use, this takes a string in the format that fontFamily in CSS takes. For example, "'Fira Code', monospace" will configure Fira Code as the primary font and monospace as the fallback when it lacks glyphs. +* `terminal.integrated.fontSize:` Changes the font size of text in the terminal. +* `terminal.integrated.letterSpacing:` Configures additional horizontal spacing between characters in pixels. +* `terminal.integrated.lineHeight:` Configures additional spacing vertical between characters as a multiplier of the regular line height. For example, 1.1 will add 10% additional vertical space. +* `terminal.integrated.fontWeight:` Configures the font weight of "normal" text. +* `terminal.integrated.fontWeightBold:` Configures the font weight of "bold" text. + +### Powerline symbols and Nerd Fonts + +Powerline fonts are special + patched fonts that contain additional characters that can be used in the + terminal. AVAP TM Dev Studio's terminal{' '} + + renders some of the Powerline symbols without needing to configure a + font + + , but if more glyphs are desired, configure a Powerline font with the font + family setting. Powerline fonts typically end in " for + Powerline", the following setting is an example of how to configure a + DejaVu Sans Mono that has been patched: + +```javascript +"editor.fontFamily": "'DejaVu Sans Mono for Powerline'" +``` + +Nerd Fonts work the same and typically have a " NF" suffix, the + following is an example of how to configure Hack's nerd fonts variant: + +```javascript +"terminal.integrated.fontFamily": "'Hack NF'" +``` + +## Terminal cursor + +The terminal cursor style and whether it blinks can be customized with the + following settings: + +* `terminal.integrated.cursorStyle:` Defines the shape of the cursor, can be block, line or underline. +* `terminal.integrated.cursorWidth:` How wide in pixels the cursor should be when the cursor style is set to line. +* `terminal.integrated.cursorBlinking:` Whether the cursor should blink when the terminal is focused. +* `terminal.integrated.cursorStyleInactive:` Defines the shape of the cursor, can be outline, block, line, underline or none. + +## Customizing tabs + +Terminal tabs appear on the right of the terminal view when there are two + or more terminals by default, showing the active terminal in the view + header when there is only one. + +### Visibility + +The default visibility is designed to save horizontal space, but may not + be desirable. How tabs are presented can be configured with the following + settings: + +* `terminal.integrated.tabs.hideCondition:` When to hide the tabs to the right, set to "never" to always show them. +* `terminal.integrated.tabs.showActiveTerminal:` When to show the active terminal in the terminal view header. +* `terminal.integrated.tabs.showActions:` When to show the active terminal's actions in the view header. +* `terminal.integrated.tabs.location:` Whether the tabs should be shown on the left or right of the terminal. +* `terminal.integrated.tabs.enabled:` Whether to use tabs, disabling will show the original dropdown view. + +### Tab text + +The text on each tab is determined by the following settings: + +* `terminal.integrated.tabs.title:` Tab title. +* `terminal.integrated.tabs.description:` Text that appears to the right of the title. +* `terminal.integrated.tabs.separator:` Separator character between the title and description. + +By default, the title displays what the shell's detected process name. + +Other terminals often display the escape sequence sent by the shell as the + title, which can be configured with: + +```javascript +"terminal.integrated.tabs.title": "${sequence}" +``` + +### Icons + +Each terminal has an associated icon that is determined by its{' '} + terminal profile . The default icon + and its color, which will be used if not defined in a profile, can be + configured with the terminal.integrated.tabs.defaultIcon and + terminal.integrated.tabs.defaultColor settings. + +### Status + +A terminal's "status", if any, is signified by an icon that + appears on the right of the tab. Some statuses involve animation. If this + is distracting the animation can be disabled with: + +```javascript +"terminal.integrated.tabs.enableAnimation": false +``` + +### Visual bell + +When the terminal's bell is triggered, a yellow bell icon is briefly + shown. This can be disabled with terminal.integrated.enableBell and the + duration can be configured with terminal.integrated.bellDuration. + +## Terminal colors + +While the terminal is capable of displaying true color, programs commonly + use 8 ANSI colors (black, red, green, yellow, blue, magenta, cyan and + white) and bright variants of each. These ANSI colors are determined + by the active color theme , but they + can also be configured independently from the theme with the{' '} + + workbench.colorCustomizations + {' '} + setting. + +Whether bold text uses the normal ANSI colors or the bright variant can be + configured with the terminal.integrated.drawBoldTextInBrightColors + setting. + +### Minimum contrast ratio + +Terminals often have contrast issues due to some conflict with dark/light + themes, ANSI colors or shells/programs running, and more. + +The minimum contrast ratio feature solves this problem by either + increasing or reducing the luminance of the text's foreground color + until a 4.5:1 contrast ratio is met. + +One downside of this is that colored text may sometimes lose some of its + saturation. This feature can be configured or disabled to get the original + colors with: + +```javascript +"terminal.integrated.minimumContrastRatio": 1 +``` + +## GPU acceleration + +The terminal features three different renderers, each of which have + different trade offs: + +* WebGL renderer - True GPU acceleration. +* Canvas renderer - GPU acceleration by using the{' '} CanvasRenderingContext2D web API , slower than WebGL but faster than DOM. +* DOM renderer - A fallback renderer that's much slower but has great compatibility. + +GPU acceleration driven by the WebGL renderer is enabled in the terminal + by default. This helps the terminal work faster and display at a high FPS + by significantly reducing the time the CPU spends rendering each frame. + +When on Linux VMs, browsers that don't support WebGL, or machines with + outdated drivers, WebGL may not work properly. + +The default terminal.integrated.gpuAcceleration value of "auto" + tries the WebGL, canvas, and DOM renderers sequentially, settling at the + first without detected issues. + +Sometimes this detection doesn't work and requires manual + intervention, setting terminal.integrated.gpuAcceleration to + "off" typically resolves rendering-related problems like these + at the cost of performance. + +### Custom glyphs + +When GPU acceleration is enabled, custom + rendering, rather than the font, improves how some characters display in + the terminal. These include box drawing characters + (U+2500-U+257F), block elements (U+2580-U+259F) and a + subset of Powerline symbols (U+E0B0-U+E0BF). This means that the + configured font does not need to support these characters as well as + having the characters draw pixel perfect and stretch to the size of the + entire cell. + +Below are some examples of these characters with custom line height and + letter spacing configured. Notice how there are no gaps between cells + thanks to the custom glyphs: + +```javascript +This feature can be disabled by setting + "terminal.integrated.customGlyphs": false. +``` + +## Customizing your prompt + +Most shells allow extensive customization of the terminal prompt. This is + done by configuring your shell outside AVAP TM Dev Studio, + typically by modifying the $PS1 variable, setting a $PROMPT_COMMAND or + installing a plugin. + +Some prompts like Starship and{' '} + oh-my-posh show things like git status + and work with most shells, so they're a good choice when starting out. + +## Common questions + +### Why is my terminal showing a multi-colored triangle or a black rectangle? + +The terminal can have problems with GPU accelerated rendering in some + environments. For example, you might see a big multi-colored triangle + instead of text. This is typically caused by driver/VM graphics issues and + the same also happens in Chromium. Work around these issues by launching + code with the --disable-gpu flag or by using the setting + "terminal.integrated.gpuAcceleration": "off" to avoid + using the canvas in the terminal. See the{' '} + GPU acceleration section for more + information. + +### Why are the colors in the terminal not correct? + +The minimum contrast ratio feature {' '} + can cause colors to not be displayed as expected. It can be disabled with: + +```javascript +"terminal.integrated.minimumContrastRatio": 1 +``` + +Background on why this is the default is explained in{' '} + + vscode#146406 + + . + +`` diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md new file mode 100644 index 0000000..30cbb2a --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md @@ -0,0 +1,372 @@ +AVAP TM Dev Studio has the ability to integrate with common + shells, allowing the terminal to understand more about what's actually + happening inside the shell. This additional information enables some + useful features such as{' '} + + working directory detection + {' '} + and command detection,{' '} + decorations , + and navigation . + +Supported shells: + +* Linux/macOS: bash, fish, pwsh, zsh +* Windows: pwsh + +## Installation + +### Automatic script injection + +By default, the shell integration script should automatically activate on + supported shells launched from AVAP TM Dev Studio. This is done + by injecting arguments and/or environment variables when the shell session + launches. This automatic injection can be disabled by setting{' '} + `terminal.integrated.shellIntegration.enabled` to{' '} + `false` . + +This standard, easy way will not work for some advanced use cases like in + sub-shells, through a regular ssh session (when not using the{' '} + Remote - SSH extension ) or for some + complex shell setups. The recommended way to enable shell integration for + those is manual installation . + +### Manual installation + +To manually install shell integration, the AVAP TM Dev Studio + shell integration script needs to run during your shell's + initialization. Where and how to do this depends on the shell and OS + you're using. When using manual install it's recommended to set{' '} + `terminal.integrated.shellIntegration.enabled` to false, though + not mandatory. + +bash + +Add the following to your `~/.bashrc` file. Run{' '} + `code ~/.bashrc` in bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path bash)" +``` + +fish + +Add the following to your `config.fish` . Run{' '} + `code $\_\_fish\_config\_dir/config.fish` in fish to open the + file in AVAP TM Dev Studio. + +```javascript +string match -q "$TERM\_PROGRAM" "vscode" + + and . (code --locate-shell-integration-path fish) +``` + +pwsh + +Add the following to your [PowerShell profile]. Run{' '} + `code $Profile` in pwsh to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +if ($env:TERM\_PROGRAM -eq "vscode") { . "$(code + --locate-shell-integration-path pwsh)" } +``` + +zsh + +Add the following to your `~/.zshrc` file. Run{' '} + `code ~/.zshrc` in bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path zsh)" +``` + +Git Bash + +⚠️ This is currently experimental and automatic injection is not + supported + +Add the following to your `~/.bashrc` file. Run code{' '} + `~/.bashrc` in Git Bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path bash)" +``` + +The above shell integration installation is cross-platform and compatible + with any installation type if code is in the `$PATH` . However, + this recommended approach starts Node.js to fetch the script path, leading + to a slight delay in shell startup. To mitigate this delay, inline the + script above by resolving the path ahead of time and adding it directly + into your init script. + +```javascript +\# Output the executable's path first: + + code --locate-shell-integration-path bash + + + \# Add the result of the above to the source statement: + + [[ "$TERM\_PROGRAM" == "vscode" ]] && . + "/path/to/shell/integration/script.sh" +``` + +## Command decorations and the overview ruler + +One of the things that shell integration enables is the ability to get the + exit codes of the commands run within the terminal. Using this + information, decorations are added to the left of the line to indicate + whether the command succeeded or failed. These decorations also show up in + the relatively new overview ruler in the scroll bar, just like in the + editor. + +The decorations can be interacted with to give some contextual actions + like re-running the command: + +The command and overview ruler decorations can be configured with the{' '} + `terminal.integrated.shellIntegration.decorationsEnabled` {' '} + setting. + +## Command navigation + +The commands detected by shell integration feed into the command + navigation feature ( `Ctrl/Cmd+Up, Ctrl/Cmd+Down` ) to + give it more reliable command positions. This feature allows for quick + navigation between commands and selection of their output. To select from + the current position to the command, you can also hold down{' '} + `Shift` , pressing `Shift+Ctrl/Cmd+Up` and{' '} + `Shift+Ctrl/Cmd+Down` . + +## Sticky scroll + +The sticky scroll feature will "stick" the command that is + partially showing at the top of the terminal, making it much easier to see + what command that output belongs to. Clicking on the sticky scroll + component will scroll to the command's location in the terminal + buffer. + +This can be enabled with the{' '} + `terminal.integrated.stickyScroll.enabled` setting. + +## Quick fixes + +AVAP TM Dev Studio scans the output of a command and presents a + Quick Fix with actions that have a high likelihood of being what the user + will want to do next. + +Here are some of the built-in Quick Fixes: + +* When it's detected that a port is already being listened to, suggest to kill the process and re-run the previous command. +* When `git push` fails due to an upstream not being set, suggest to push with the upstream set. +* When a `git` subcommand fails with a similar command error, suggest to use the similar command(s). +* When `git push` results in a suggestion to create a GitHub PR, suggest to open the link. +* When a `General` or `cmd-not-found` PowerShell feedback provider triggers, suggest each suggestion. + +The Quick Fix feature also supports{' '} + audio cues for + additional feedback when a Quick Fix is available. + +## Run recent command + +The Terminal: Run Recent Command command surfaces history + from various sources in a Quick Pick, providing similar functionality to a + shell's reverse search ( `Ctrl+R` ). The sources are + the current session's history, previous session history for this shell + type and the common shell history file. + +Some other functionality of the command: + +* By default the search mode is "contiguous search", meaning the search term must exactly match. The button on the right of the search input allows switching to fuzzy search. +* In the current session section, there is a clipboard icon in the right of the Quick Pick that will open the command output in an editor. +* The pin action in the right of the Quick Pick can pin the command to the top of the list. +* Alt can be held to write the text to the terminal without running it. +* The amount of history stored in the previous session section is determined by the terminal.integrated.shellIntegration.history setting. + +The default keybinding for this command is `Ctrl+Alt+R` . + However, when accessibility mode is on these are reversed;{' '} + `Ctrl+R` runs a recent command and `Ctrl+Alt+R` {' '} + sends Ctrl+R to the shell. + +The keybindings can be flipped when accessibility mode is off with the + following keybindings: + +```javascript +{ + ` `"key": "ctrl+r", + ` `"command": "workbench.action.terminal.runRecentCommand", + ` `"when": "terminalFocus" + + }, + + { + ` `"key": "ctrl+alt+r", + ` `"command": "workbench.action.terminal.sendSequence", + ` `"args": { "text": "\u0012"/\*^R\*/ }, + ` `"when": "terminalFocus" + + } +``` + +## Go to recent directory + +Similar to the run recent command feature, the{' '} + Terminal: Go to Recent Directory command keeps track of + directories that have been visited and allows quick filtering and + navigating ( `cd` ) to them. `Alt` can be held + to write the text to the terminal without running it. + +The default keybinding for this command is `Ctrl+G` as it + behaves similar to the Go to Line/Column command in the + editor. Ctrl+G can be send to the shell with `Ctrl+Alt+G` . + +## Current working directory detection + +Shell integration tells AVAP TM Dev Studio what the current + working directory of the shell is. This information is not possible to get + on Windows without trying to detect the prompt through regex and requires + polling on macOS and Linux, which isn't good for performance. + +One of the biggest features this enables is enhanced resolving of links in + the terminal. Take a link `package.json` for example, when the + link is activated while shell integration is disabled this will open a + search quick pick with `package.json` as the filter if there + are multiple `package.json` files in the workspace. When shell + integration is enabled however, it will open the `package.json` {' '} + file in the current folder directly because the current location is known. + This allows the output of `ls` for example to reliably open the + correct file. + +The current working directory is also used to show the directory in the + terminal tab, in the run recent command quick pick and for the{' '} + `"terminal.integrated.splitCwd"` :{' '} + `"inherited"` feature. + +## Extended PowerShell keybindings + +Windows' console API allows for more keybindings than Linux/macOS + terminals, since AVAP TM Dev Studio's terminal emulates the + latter even on Windows there are some PowerShell keybindings that + aren't possible using the standard means due to lack of VT encoding + such as `Ctrl+Space` . Shell integration allows AVAP + TM Dev Studio to attach a custom keybindings to send a special + sequence to PowerShell that then gets handled in the shell integration + script and forwarded to the proper key handler. + +The following keybindings should work in PowerShell when shell integration + is enabled: + +* Ctrl+Space: Defaults to `MenuComplete` on Windows only +* Alt+Space: Defaults to `SetMark` on all platforms +* Shift+Enter: Defaults to `AddLine` on all platforms +* Shift+End: Defaults to `SelectLine` on all platforms +* Shift+Home: Defaults to `SelectBackwardsLine` on all platforms + +## Enhanced accessibility + +The information that shell integration provides to AVAP TM Dev + Studio is used to improve{' '} + + accessibility in the terminal + + . Some examples of enhancements are: + +* Navigation through detected commands in the accessible buffer (Alt+F2) +* An audio cue plays when a command fails. +* Underlying text box synchronizing such that using the arrow and backspace keys behave more correctly. + +## Supported escape sequences + +AVAP TM Dev Studio supports several custom escape sequences: + +### AVAPTM Dev Studio custom sequences 'OSC 633 ; ... ST' + +AVAP TM Dev Studio has a set of custom escape sequences designed + to enable the shell integration feature when run in AVAP TM Dev + Studio's terminal. These are used by the built-in scripts but can also + be used by any application capable of sending sequences to the terminal, + for example the{' '} + + Julia extension + {' '} + uses these to support shell integration in the Julia REPL. + +These sequences should be ignored by other terminals, but unless other + terminals end up adopting the sequences more widely, it's recommended + to check that `$TERM\_PROGRAM` is `vscode` before + writing them. + +* `OSC 633 ; A ST` - Mark prompt start. +* `OSC 633 ; B ST` - Mark prompt end. +* `OSC 633 ; C ST` - Mark pre-execution. +* `OSC 633 ; D [; ] ST` - Mark execution finished with an optional exit code. +* `OSC 633 ; E ; ST` - Explicitly set the command line. The E sequence allows the terminal to reliably get the exact command line interpreted by the shell. When this is not specified, the terminal may fallback to using the A, B and C sequences to get the command, or disable the detection all together if it's unreliable. The optional nonce can be used to verify the sequence came from the shell integration script to prevent command spoofing. When the nonce is verified successfully, some protections before using the commands will be removed for an improved user experience. The command line can escape ASCII characters using the{' '} `\xAB` format, where AB are the hexadecimal representation of the character code (case insensitive), and escape the \ character using \. It's required to escape semi-colon ( `0x3b` ) and characters 0x20 and below and this is particularly important for new line and semi-colon. Some examples: "" -> "\" ` "\n" -> "\x0a" ";" -> "\x3b" ` +* `OSC 633 ; P ; = ST` - Set a property on the terminal, only known properties will be handled. Known properties: `Cwd` - Reports the current working directory to the terminal. `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. +* `Cwd` - Reports the current working directory to the terminal. +* `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. + +### Final Term shell integration + +AVAP TM Dev Studio supports Final Term's shell integration + sequences, which allow non-AVAP TM Dev Studio shell integration + scripts to work in AVAP TM Dev Studio. This results in a + somewhat degraded experience as it doesn't support as many features as{' '} + `OSC 633` . Here are the specific sequences that are supported: + +* `OSC 133 ; A ST` - Mark prompt start. +* `OSC 133 ; B ST` - Mark prompt end. +* `OSC 133 ; C ST` - Mark pre-execution. +* `OSC 133 ; D [; ] ST` - Mark execution finished with an optional exit code. + +### SetMark 'OSC 1337 ; SetMark ST' + +This sequence adds a mark to the left of the line it was triggered on and + also adds an annotation to the scroll bar: + +These marks integrate with command navigation to make them easy to + navigate to via ctrl/cmd+up and ctrl/cmd+down by default. + +## Common questions + +### When does automatic injection not work? + +There are several cases where automatic injection doesn't work, here + are some common cases: + +* `$PROMPT\_COMMAND` is in an unsupported format, changing it to point to a single function is an easy way to work around this. For example: prompt() { ` ` `printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.\*}" "${PWD/#$HOME/\~}" } PROMPT\_COMMAND=prompt ` +* Some shell plugins may disable AVAP TM Dev Studio's shell integration explicitly by unsetting{' '} `$VSCODE\_SHELL\_INTEGRATION` when they initialize. + +### Why are command decorations showing when the feature is disabled? + +The likely cause of this is that your system has shell integration for + another terminal installed that{' '} + + AVAP TM Dev Studio understands + + . If you don't want any decorations, you can hide them with the + following setting: + +```javascript +"terminal.integrated.shellIntegration.decorationsEnabled": never +``` + +Alternatively, you could remove the shell integration script from your + shell rc/startup script but you will lose access to command-aware features + like command navigation . + +### Why does the command decoration jump around on Windows? + +Windows uses an emulated pseudoterminal (pty) backend called + ConPTY. It works a little differently to a regular pty because it needs to + maintain compatibility with the Windows Console API. One of the impacts of + this is the pty handles rendering specially in such a way that the shell + integration sequences that identify the commands in the terminal buffer + may be misplaced. When the command jumps around it's typically after a + command has run, and AVAP TM Dev Studio's heuristics have + kicked in to improve the position of the command decorations. diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md new file mode 100644 index 0000000..dc4d00b --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md @@ -0,0 +1,587 @@ +AVAP TM Dev Studio includes a full featured integrated terminal + that starts at the root of your workspace. It provides integration with + the editor to support features like links and error detection. The + integrated terminal can run commands such as mkdir and git just like a + standalone terminal. + +You can open a terminal as follows: + +* From the menu, use the Terminal >{' '} New Terminal or View >{' '} Terminal menu commands. +* From the Command Palette {' '} `(Ctrl+Shift+P)` , use the{' '} View: Toggle Terminal command. +* In the Explorer, you can use the{' '} Open in Integrated Terminal context menu command to open a new terminal from a folder. +* To toggle the terminal panel, use the `Ctrl+`` keyboard shortcut. +* To create a new terminal, use the `Ctrl+Shift+`` keyboard shortcut. + +AVAP TM Dev Studio's terminal has additional functionality + called shell integration that tracks where commands are run with + decorations on the left of a command and in the scrollbar: + +## Terminal shells + +The integrated terminal can use various shells installed on your machine, + with the default being pulled from your system defaults. Shells are + detected and presented in the terminal profiles dropdown. + +You can learn more about configuring terminal shells in the terminal + profiles article. + +## Managing terminals + +The terminal tabs UI is on the right side of the terminal view. Each + terminal has an entry with its name, icon, color, and group decoration + (if any). + +Add terminal instances by selecting the + icon on the + top-right of the TERMINAL panel, selecting a profile from + the terminal dropdown, or by triggering the `Ctrl+Shift+` {' '} + command. This action creates another entry in the tab list associated with + that terminal. + +Remove terminal instances by hovering a tab and selecting the{' '} + Trash Can button, selecting a tab item and pressing + Delete, using Terminal: Kill the Active Terminal Instance {' '} + command, or via the right-click context menu. + +Navigate between terminal groups using focus next{' '} + `Ctrl+PageDown` and focus previous `Ctrl+PageUp` . + +Icons may appear to the right of the terminal title on the tab label when + a terminal's status changes. Some examples are a bell (macOS) + and for tasks, displaying a check mark when there are no errors and an X + otherwise. Hover the icon to read status information, which may contain + actions. + +### Groups (split panes) + +Place multiple terminals side-by-side and create a group by splitting a + terminal: + +* Hover over a entry in the list of terminals on the right and select the inline split button. +* Right-click the context menu and selecting the Split {' '} menu option. +* `Alt` and click on a tab, the + button, or the single tab on the terminal panel. +* Trigger the Ctrl+Shift+5 command. + +Navigate between terminals in a group by focusing the previous pane,{' '} + `Alt+Left` , or the next pane, `Alt+Right` . + +Dragging and dropping tabs in the list rearranges them. Dragging a tab + into the main terminal area allows moving a terminal from one group to + another. + +Moving a terminal into its own group can be done with the{' '} + Terminal: Unsplit Terminal command through the Command + Palette or in the right-click context menu. + +## Terminals in editor area + +You can open terminals in the editor area (terminal editors) with + the Terminal: Create New Terminal in Editor Area command, + the{' '} + Terminal: Create New Terminal in Editor Area to the Side {' '} + command, or by dragging a terminal from the terminal view into the editor + area. Terminal editors are presented like regular editor tabs: + +You can have terminal editors on either side or arranged in multiple + dimensions using the editor group layout system, e.g. PowerShell and WSL + terminals stacked to the right of file editors: + +The `terminal.integrated.defaultLocation` setting can change + the default `view` or `editor` area terminal + location. + +## Navigating the buffer + +The content in the terminal is called the buffer, with the section right + above the bottom viewport being called "scrollback". The amount + of scrollback kept is determined by the terminal.integrated.scrollback{' '} + setting and defaults to 1000 + lines. + +There are various commands available to navigate around the terminal + buffer: + +* Scroll up a line - `Ctrl+Alt+PageUp` +* Scroll down a line - `Ctrl+Alt+PageDown` +* Scroll up a page - `Shift+PageUp` +* Scroll down a page - `Shift+PageDown` +* Scroll to the top - `Ctrl+Home` +* Scroll to the bottom - `Ctrl+End` + +Command navigation is also available (see shell + integration): + +* Scroll to the previous command - `Ctrl+Up` +* Scroll to the next command - `Ctrl+Down` + +Scrolling will happen instantaneously, but can be configured to animate + over a short duration with the{' '} + `terminal.integrated.smoothScrolling` setting. + +## Links + +The terminal features sophisticated link detection with editor integration + and even extension contributed link handlers. Hover over a link to display + an underline, then hold the `Ctrl/Cmd` key and click. + +These built-in link handlers are used in the following priority order: + +* URIs/URLs: Links that look like URIs, such as{' '} `https://code.visualstudio.com` , vscode://path/to/file or{' '} `file://path/to/file` will open using the standard handler for the protocol. For example, `https` links will open the browser. + +* File links: Links to files that have been verified to exist on the system. These will open the file in a new editor tab and support many common line/column formats such as{' '} `file:1:2, file:line 1, column 2` . + +* Folder links: Links to folders are similar to file links but will open a new AVAP TM Dev Studio window at the folder. + +* Word links: Fallback link type that uses the{' '} `terminal.integrated.wordSeparators` setting. The setting defines word boundaries and make nearly all text into words. Activating a word link searches the workspace for the word. If there is a single result it will open, otherwise it will present the search results. Word links are considered "low confidence" and will not show an underline or tooltip unless you hold the `Ctrl` / `Cmd` key. They also have limited support for line and column suffixes. + +The Open Detected Link command ( + `Ctrl+Shift+O` ) can be used to access links via the + keyboard: + +### Extensions handling links + +Extensions can contribute link providers which allow the + extension to define what happens when clicked. An example of this is the + GitLens extension detecting Git branch links. + +### Keyboard accessibility + +Links are keyboard accessible through several commands that open links + based on the type of link. + +* Terminal: Open Last Local File Link - Opens the most recent local file link. No default keybinding. +* Terminal: Open Last URL link - Opens the most recent URI/URL link. No default keybinding. +* Terminal: Open Detected Link... - Opens a searchable Quick Pick with all detected links, including word links. The default keybinding is `Ctrl/Cmd+Shift+O` , which is the same as the{' '} Go to Symbol in Editor keyboard shortcut. + +## Copy & paste + +The keybindings for copy and paste follow platform standards: + +* Linux: `Ctrl+Shift+C` and `Ctrl+Shift+V` ; selection paste is available with `Shift+Insert` +* macOS: `Cmd+C` and `Cmd+V` +* Windows: `Ctrl+C` and `Ctrl+V` + +Copying is done automatically on selection when{' '} + `terminal.integrated.copyOnSelection` is enabled. + +By default, there is a warning when pasting multiple lines, which can be + disabled with the{' '} + `terminal.integrated.enableMultiLinePasteWarning` setting. This + is only done when the shell does not support "bracketed paste + mode". When that mode is enabled, the shell is indicating that it can + handle multiple line pasting. + +## Using the mouse + +### Right-click behavior + +The right-click behavior differs based on the platform: + +* Linux: Show the context menu. +* macOS: Select the word under the cursor and show the context menu. +* Windows: Copy and drop selection if there is a selection, otherwise paste. + +This can be configured using the terminal.integrated.rightClickBehavior + setting. The options are: + +* `default` - Show the context menu. +* `copyPaste` - Copy when there is a selection, otherwise paste. +* `paste` - Paste on right-click. +* `selectWord` - Select the word under the cursor and show the context menu. +* `nothing` - Do nothing and pass event to terminal. + +### Reposition the cursor with Alt + +`Alt` and left-click will reposition the cursor to underneath + the mouse. This works by simulating arrow keystrokes, which may not work + reliably for some shells or programs. This feature can be disabled with + the `terminal.integrated.altClickMovesCursor` setting. + +### Mouse events mode + +When applications running in the terminal turn on mouse events mode, such + as Vim mouse mode, mouse interaction is sent to the application instead of + the terminal. This means that clicking and dragging will no longer create + a selection. Terminal selection can be forced by holding the{' '} + `Alt` key on Windows and Linux, this can also be done with the{' '} + `Option` key on macOS but requires enabling the{' '} + `terminal.integrated.macOptionClickForcesSelection` setting + first. + +## Find + +The integrated terminal has find functionality that can be triggered with{' '} + `Ctrl+F` . + +## Run selected text + +To use the `runSelectedText` command, select text in an editor + and run the command{' '} + Terminal: Run Selected Text in Active Terminal via the{' '} + Command Palette `(Ctrl+Shift+P)` , the + terminal will attempt to run the selected text. If no text is selected in + the active editor, the entire line that the cursor is on will run in the + terminal. + +## Maximizing the terminal + +The terminal view can be maximized by clicking the maximize panel size + button with the upwards chevron icon. This will temporarily hide the + editors and maximize the panel. This is useful to temporarily focus on a + large amount of output. Some developers use AVAP TM Dev Studioe + as a standalone terminal by opening a new window, maximizing the panel, + and hiding the side bar. + +Note that the panel can only be maximized if its alignment option is set + to Center . + +## Select all + +There is a Terminal: Select All command, which is bound + to Cmd+A on macOS, but does not have a default keybinding on Windows and + Linux as it may conflict with shell hotkeys. To use `Ctrl+A` to + select all, add this custom keybinding: + +```javascript +{ + ` `"key": "ctrl+a", + ` `"command": "workbench.action.terminal.selectAll", + ` `"when": "terminalFocus && !isMac" + + }, +``` + +## Drag and drop file paths + +Dragging a file into the terminal will input the path into the terminal, + with escaping to match the active shell. + +## Automating terminals with tasks + +The Tasks feature can be used to automate the launching of terminals, for + example, the following `.vscode/tasks.json` file will launch a + Command Prompt and PowerShell terminal in a single terminal group when the + window starts: + +```javascript +{ + ` `"version": "2.0.0", + ` `"presentation": { + ` `"echo": false, + ` `"reveal": "always", + ` `"focus": false, + ` `"panel": "dedicated", + ` `"showReuseMessage": true + ` `}, + ` `"tasks": [` `{ + ` `"label": "Create terminals", + ` `"dependsOn": [` `"First", + ` `"Second" + ` `], + ` `// Mark as the default build task so cmd/ctrl+shift+b will + create them + ` `"group": { + ` `"kind": "build", + ` `"isDefault": true + ` `}, + ` `// Try start the task on folder open + ` `"runOptions": { + ` `"runOn": "folderOpen" + ` `} + ` `}, + ` `{ + ` `// The name that shows up in terminal tab + ` `"label": "First", + ` `// The task will launch a shell + ` `"type": "shell", + ` `"command": "", + ` `// Set the shell type + ` `"options": { + ` `"shell": { + ` `"executable": "cmd.exe", + ` `"args": [] + ` `} + ` `}, + ` `// Mark as a background task to avoid the spinner animation on + the terminal tab + ` `"isBackground": true, + ` `"problemMatcher": [], + ` `// Create the tasks in a terminal group + ` `"presentation": { + ` `"group": "my-group" + ` `} + ` `}, + ` `{ + ` `"label": "Second", + ` `"type": "shell", + ` `"command": "", + ` `"options": { + ` `"shell": { + ` `"executable": "pwsh.exe", + ` `"args": [] + ` `} + ` `}, + ` `"isBackground": true, + ` `"problemMatcher": [], + ` `"presentation": { + ` `"group": "my-group" + ` `} + ` `} + ` `] + + } +``` + +This file could be committed to the repository to share with other + developers or created as a user task via the{' '} + `workbench.action.tasks.openUserTasks` command. + +## Working directory + +By default, the terminal will open at the folder that is opened in the + Explorer. The `terminal.integrated.cwd` setting allows + specifying a custom path to open instead: + +```javascript +{ + ` `"terminal.integrated.cwd": "/home/user" + + } +``` + +Split terminals on Windows will start in the directory that the parent + terminal started with. On macOS and Linux, split terminals will inherit + the current working directory of the parent terminal. This behavior can be + changed using the `terminal.integrated.splitCwd` setting: + +```javascript +{ + ` `"terminal.integrated.splitCwd": "workspaceRoot" + + } +``` + +There are also extensions available that give more options such as{' '} + + Terminal Here + + . + +## Fixed dimension terminals + +The Terminal: Set Fixed Dimensions command allows + changing the number of columns and rows that the terminal and it's + backing pseudoterminal uses. This will add scroll bars when necessary, + which may lead to an unpleasant UX and is generally not recommended, but + it is a common ask on Windows in particular for reading logs or long lines + when paging tools aren't available. + +You can also right-click on a terminal tab and select{' '} + Toggle Size to Content Width `(Alt+Z)` {' '} + to resize the number of terminal columns to the largest wrapped line in + the terminal. + +## Next steps + +The basics of the terminal have been covered in this document. Read on to + find out more about: + +* Tasks - Tasks let you integrate with external tools and leverage the terminal heavily. +* Mastering AVAP TM Dev Studio's Terminal - An external blog with plenty of power user tips for the terminal. +* Explore terminal commands by browsing the keyboard shortcuts within AVAP TM Dev Studio ( Preferences: Open Keyboard Shortcuts then search on 'terminal'). + +## Common questions + +### I'm having problems launching the terminal + +There's a dedicated troubleshooting guide for these sorts of problems. + +### How do I create an Admin terminal? + +The integrated terminal shell is running with the permissions of AVAP + TM Dev Studio. If you need to run a shell command with elevated + (administrator) or different permissions, use platform utilities + such as `runas.exe` within a terminal. + +You can learn more about customizing terminals via terminal profiles in + Configuring Profiles. + +### Can I add a keyboard shortcut for the Explorer's Open in Integrated + Terminal command? + +You can open new terminals for specific folders from the Explorer via the{' '} + Open in Integrated Terminal context menu command. + +By default, there is no keyboard shortcut associated with{' '} + Open in Integrated Terminal but you can add your own via + the Keyboard Shortcuts editor `(Ctrl+K Ctrl+S)` to add + a keybinding to your keybindings.json. + +The `keybindings.json` example below adds the keyboard shortcut{' '} + `Ctrl+T` for openInTerminal. + +```javascript +{ + ` `"key": "ctrl+t", + ` `"command": "openInTerminal", + ` `"when": "filesExplorerFocus" + + } +``` + +### Why is nvm complaining about a prefix option when the integrated terminal + is launched? + +nvm (Node Version Manager) users often see this error for the + first time inside AVAP TM Dev Studio's integrated terminal: + +```javascript +nvm is not compatible with the npm config "prefix" option: currently set + to "/usr/local" + + Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.1 + --silent` to unset it +``` + +This is mostly a macOS problem and does not happen in external terminals. + The typical reasons for this are the following: + +* `npm` was globally installed using another instance of{' '} `node` that is somewhere in your path ( `such as /usr/local/bin/npm` ). +* To get the development tools on the `$PATH` , AVAP TM Dev Studio will launch a bash login shell on startup. This means that your ~/.bash_profile has already run and when an integrated terminal launches, it will run another login shell, reordering the $PATH potentially in unexpected ways. + +To resolve this issue, you need to track down where the old{' '} + `npm` is installed and remove both it and its out-of-date + node_modules. Find the `nvm` initialization script and run{' '} + `which npm` before it runs, which should print the path when + you launch a new terminal. + +Once you have the path to npm, find the old node_modules by resolving the + symlink by running a command something like this: + +```javascript +ls -la /usr/local/bin | grep "np[mx]" +``` + +This will give you the resolved path at the end: + +```javascript +... npm -> ../lib/node\_modules/npm/bin/npm-cli.js + + ... npx -> ../lib/node\_modules/npm/bin/npx-cli.js +``` + +From there, removing the files and relaunching AVAP TM Dev + Studio should fix the issue: + +```javascript +rm /usr/local/bin/npm /usr/local/lib/node\_modules/npm/bin/npm-cli.js + + rm /usr/local/bin/npx /usr/local/lib/node\_modules/npm/bin/npx-cli.js +``` + +### Why does macOS make a ding sound when I resize terminal split panes? + +The keybindings ⌃⌘← and ⌃⌘→ are the defaults for resizing individual split + panes in the terminal. While they work, they also cause a system + "invalid key" sound to play due to an issue in Chromium. The{' '} + + recommended workaround + {' '} + is to tell macOS to no-op for these keybindings by running this in your + terminal: + +```javascript +mkdir -p ~/Library/KeyBindings + + cat > ~/Library/KeyBindings/DefaultKeyBinding.dict <` setting. +* `icon` : An icon ID to use for the profile. +* `color` : A theme color ID to style the icon. + +The default profile can be defined manually with the{' '} + `terminal.integrated.defaultProfile.\*` settings. This should + be set to the name of an existing profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"my-pwsh": { + ` `"source": "PowerShell", + ` `"args": ["-NoProfile"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "my-pwsh" + + } +``` + +## Removing built-in profiles + +To remove a built-in profile and prevent it from showing up in the new + terminal dropdown, set the name of the profile to `null` . For + example, to remove the `Git Bash` profile on Windows, use this + setting: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Git Bash": null + ` `} + + } +``` + +## Configuring the task/debug profile + +By default, the task/debug features will use the default profile. This may + not be ideal if your default has a heavy PowerShell startup script or a + non-POSIX compliant shell for example. To configure a profile to be used + only in the debug/tasks features, use the{' '} + `terminal.integrated.automationProfile` . + `` setting: + +```javascript +{ + ` `"terminal.integrated.defaultProfile.osx": "fish", + ` `// Use a fully POSIX-compatible shell and avoid running a + complex ~/.config/fish/config.fish + ` `// for tasks and debug + ` `"terminal.integrated.automationProfile.osx": { + ` `"path": "/bin/sh" + ` `} + + } +``` + +## Unsafe profile detection + +Certain shells are installed in unsafe paths by default, like a path that + could be written to by another user on a Windows environment. AVAP + TM Dev Studio will still detect these but not expose them as a + proper profile until they have been explicitly configured via the{' '} + Terminal: Select Default Profile command. When + configuring an unsafe profile, there will be a warning before it's + added: + +## Cmder + +Cmder itself is a terminal, but you can use the [Cmder] shell in AVAP + TM Dev Studio with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"cmder": { + ` `"path": "C:\\WINDOWS\\System32\\cmd.exe", + ` `"args": ["/K", "C:\\cmder\\vendor\\bin\\vscode\_init.cmd"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "cmder" + + } +``` + +This profile should be picked up automatically when the{' '} + `CMDER\_ROOT` environment variable is set. It will also be + detected as an unsafe profile if installed at `C:\cmder` . You + may refer to Cmder's wiki for more information. + +## Cygwin + +Cygwin itself is a terminal, but you can use the Cygwin shell in AVAP + TM Dev Studio with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Cygwin": { + ` `"path": "C:\\cygwin64\\bin\\bash.exe", + ` `"args": ["--login"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "Cygwin" + + } +``` + +This profile should be detected automatically as an unsafe profile when + installed at the default paths `C:\cygwin` or + `C:\cygwin64` . + +## Git Bash + +A limitation of Git Bash when AVAP TM Dev Studio uses bash.exe + (the shell) as opposed to git-bash.exe (the terminal) is + that history will not be retained across shell sessions. You can work + around this by adding the following to your `~/.bashrc` a or{' '} + `~/.bash\_profile` files: + +```javascript +export PROMPT\_COMMAND='history -a' +``` + +This will cause the shell to call history -a whenever the prompt is + printed which flushes the session's current session commands to the + backing history file. + +## MSYS2 + +MSYS2's bash shell can be configured with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"bash (MSYS2)": { + ` `"path": "C:\\msys64\\usr\\bin\\bash.exe", + ` `"args": ["--login", "-i"], + ` `"env": { "CHERE\_INVOKING": "1" } + ` `} + ` `} + + } +``` + +The `CHERE_INVOKING` environment variable is used to tell the + login initialization script to preserve the working directory, instead of + opening at `$HOME` . + +This profile should be detected automatically as an{' '} + unsafe profile when installed at + the default path `C:\\msys64` . + +## Windows PowerShell + +When PowerShell 6+ is installed, Windows PowerShell is not included in the + profiles list by default. To add Windows PowerShell as a profile, choose + the Select Default Profile option in the new terminal + dropdown and select the Windows PowerShell item. This will configure the + profile and set it as your default. + +## WSL + +When running AVAP TM Dev Studio on your local machine, Windows + Subsystem for Linux shells should be automatically detected. Depending on + your setup, this may be a nuisance if you have a lot of distros installed. + For finer control over the WSL profiles the automatic detection can be + disabled with the `terminal.integrated.useWslProfiles setting` , + then here's an example of how to manually configure a WSL shell: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Debian (WSL)": { + ` `"path": "C:\\WINDOWS\\System32\\wsl.exe", + ` `"args": [` `"-d", + ` `"Debian" + ` `] + ` `} + ` `} + + } +``` + +## Common questions + +### Why are there duplicate paths in the terminal's $PATH environment + variable and/or why are they reversed on macOS? + +This can happen on macOS because of how the terminal launches using AVAP + TM Dev Studio's environment. When AVAP TM Dev + Studio launches for the first time, to source your "development + environment," it launches your configured shell as a{' '} + login shell , which runs your{' '} + `~/.profile/~/.bash\_profile/~/.zprofile` scripts. Now when the + terminal launches, it also runs as a login shell, which will put the + standard paths to the front (for example,{' '} + `/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin` ) and + reinitialize your shell environment. + +To get a better understanding, you can simulate what is happening by + launching an inner login shell within your operating system's built-in + terminal: + +```javascript +\# Add /test to the beginning of $PATH + + export PATH=/test:$PATH + + \# Echo $PATH, /test should be at the beginning + + echo $PATH + + \# Run bash as a login shell + + bash -l + + \# Echo $PATH, the values should be jumbled + + echo $PATH +``` + +Unfortunately, unlike in Linux, standalone macOS terminals all run as + login shells by default, since macOS does not run a login shell when the + user logs into the system. This encourages "bad behavior," like + initializing aliases in your profile script when they should live in your{' '} + `rc` script as that runs on non-login shells. + +There are two direct fixes for this. The first is to set{' '} + `"terminal.integrated.inheritEnv": false` , which will + strip most environment variables from the terminal's environment, + except for some important ones (like `HOME` ,{' '} + `SHELL` , `TMPDIR` , etc.). + +The other fix is to no longer run a login shell in the terminal by + creating a terminal profile and setting its args to []. If you go with + this fix, you will want to make sure any aliases in your profile scripts + are moved over to your `~/.bashrc/~/.zshrc` file since aliases + only apply to the shell they're set in. diff --git a/docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md b/docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md b/docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md b/docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/78_unvault_unvault.md b/docs/developer.avapframework.com/78_unvault_unvault.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md new file mode 100644 index 0000000..a9e99b4 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md @@ -0,0 +1,548 @@ +AVAP™ Dev Studio 2024 is an editor first and foremost, and includes the + features you need for highly productive source code editing. This topic + takes you through the basics of the editor and helps you get moving with + your code. + +## Keyboard shortcuts + +Being able to keep your hands on the keyboard when writing code is crucial + for high productivity. AVAP™ DS Code has a rich set of default keyboard + shortcuts as well as allowing you to customize them. + +* Keyboard Shortcuts Reference - Learn the most commonly used and popular keyboard shortcuts by downloading the reference sheet. +* Install a Keymap extension - Use the keyboard shortcuts of your old editor (such as Sublime Text, Atom, and Vim) in AVAP™ DS Code by installing a Keymap extension. +* Customize Keyboard Shortcuts - Change the default keyboard shortcuts to fit your style. + +## Multiple selections (multi-cursor) + +AVAP™ DS Code supports multiple cursors for fast simultaneous edits. You + can add secondary cursors (rendered thinner) with Alt+Click. Each + cursor operates independently based on the context it sits in. A common + way to add more cursors is with ⌥⌘↓ or ⌥⌘↑ that insert cursors below or + above. + +Note: Your graphics card driver (for example NVIDIA) might + overwrite these default shortcuts. + +IMAGEN + +`⌘D` selects the word at the cursor, or the next occurrence of + the current selection. + +IMAGEN + +### Multi-cursor modifier + +If you'd like to change the modifier key for applying multiple cursors + to Cmd+Click on macOS and Ctrl+Click on Windows and Linux, you can do so + with the editor.multiCursorModifier setting. This lets users coming from + other editors such as Sublime Text or Atom continue to use the keyboard + modifier they are familiar with. + +The setting can be set to: + +* ctrlCmd - Maps to Ctrl on Windows and Cmd on macOS. +* alt - The existing default Alt. + +There's also a menu item Use Ctrl+Click for Multi-Cursor in the + Selection menu to quickly toggle this setting. + +The Go to Definition and Open Link gestures will also respect this setting + and adapt such that they do not conflict. For example, when the setting is + ctrlCmd, multiple cursors can be added with Ctrl/Cmd+Click, and opening + links or going to definition can be invoked with Alt+Click. + +### Shrink/expand selection + +Quickly shrink or expand the current selection. Trigger it with ⌃⇧⌘← and + ⌃⇧⌘→. + +Here's an example of expanding the selection with ⌃⇧⌘→: + +IMAGEN + +## Column (box) selection + +Place the cursor in one corner and then hold Shift+Alt while dragging to + the opposite corner: + +IMAGEN + +Note: This changes to Shift+Ctrl/Cmd when using Ctrl/Cmd as multi-cursor + modifier. + +There are also default key bindings for column selection on macOS and + Windows, but not on Linux. + +You can edit your `keybindings.json` to bind them to something + more familiar if you want. + +The user setting Editor: Column Selection controls this feature. Once this + mode is entered, as indicated in the Status bar, the mouse gestures and + the arrow keys will create a column selection by default. This global + toggle is also accessible via the Selection > Column Selection Mode + menu item. In addition, one can also disable Column Selection mode from + the Status bar. + +## Save / Auto Save + +By default, AVAP™ DS requires an explicit action to save your changes to + disk, ⌘S. + +However, it's easy to turn on `Auto Save` , which will save + your changes after a configured delay or when focus leaves the editor. + With this option turned on, there is no need to explicitly save the file. + The easiest way to turn on `Auto Save` is with the** File > + Auto Save **toggle that turns on and off save after a delay. + +For more control over `Auto Save` , open User or Workspace + settings and find the associated settings: + +* files.autoSave: Can have the values: off - to disable auto save. afterDelay - to save files after a configured delay (default 1000 ms). onFocusChange - to save files when focus moves out of the editor of the dirty file. onWindowChange - to save files when the focus moves out of the AVAP™ DS window. +* off - to disable auto save. +* afterDelay - to save files after a configured delay (default 1000 ms). +* onFocusChange - to save files when focus moves out of the editor of the dirty file. +* onWindowChange - to save files when the focus moves out of the AVAP™ DS window. +* files.autoSaveDelay: Configures the delay in milliseconds when files.autoSave is configured to afterDelay. The default is 1000 ms. + +## Hot Exit + +AVAP™ DS will remember unsaved changes to files when you exit by default. + Hot exit is triggered when the application is closed via File > Exit + (Code > Quit on macOS) or when the last window is closed. + +You can configure hot exit by setting files.hotExit to the following + values: + +* "off": Disable hot exit. +* "onExit": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu). All windows without folders opened will be restored upon next launch. +* "onExitAndWindowClose": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu), and also for any window with a folder opened regardless of whether it is the last window. All windows without folders opened will be restored upon next launch. To restore folder windows as they were before shutdown, set window.restoreWindows to all. + +If something happens to go wrong with hot exit, all backups are stored in + the following folders for standard install locations: + +* Windows %APPDATA%\Code\Backups +* macOS $HOME/Library/Application Support/Code/Backups +* Linux $HOME/.config/Code/Backups + +### Find and Replace + +AVAP™ DS allows you to quickly find text and replace in the currently + opened file. Press ⌘F to open the Find Widget in the editor, search + results will be highlighted in the editor, overview ruler and minimap. + +If there are more than one matched result in the current opened file, you + can press Enter and ⇧Enter to navigate to next or previous result when the + find input box is focused. + +When the Find Widget is opened, it will automatically populate the + selected text in the editor into the find input box. If the selection is + empty, the word under the cursor will be inserted into the input box + instead. + +IMAGEN + +This feature can be turned off by setting{' '} + ` + editor.find.seedSearchStringFromSelection to "never". + ` + +By default, the find operations are run on the entire file in the editor. + It can also be run on selected text. You can turn this feature on by + clicking the hamburger icon on the Find Widget. + +IMAGEN + +If you want it to be the default behavior of the Find Widget, you can set{' '} + `editor.find.autoFindInSelection` to `always` , or to{' '} + `multiline` , if you want it to be run on selected text only + when multiple lines of content are selected. + +In addition to find and replace with plain text, the Find Widget also has + three advanced search options: + +* Match Case +* Match Whole Word +* Regular Expression + +The replace input box support case preserving, you can turn it on by + clicking the Preserve Case ( AB ) button. + +You can search multiple line text by pasting the text into the Find input + box and Replace input box. Pressing `Ctrl+Enter` inserts a new + line in the input box. + +IMAGEN + +While searching long text, the default size of Find Widget might be too + small. You can drag the left sash to enlarge the Find Widget or double + click the left sash to maximize it or shrink it to its default size. + +IMAGEN + +## Search across files + +AVAP™ DS allows you to quickly search over all files in the currently + opened folder. Press ⇧⌘F and enter your search term. Search results are + grouped into files containing the search term, with an indication of the + hits in each file and its location. Expand a file to see a preview of all + of the hits within that file. Then single-click on one of the hits to view + it in the editor. + +IMAGEN + +You can configure advanced search options by clicking the ellipsis + (Toggle Search Details) below the search box on the right (or + press ⇧⌘J). This will show additional fields to configure the search. + +### Advanced search options + +IMAGEN + +In the two input boxes below the search box, you can enter patterns to + include or exclude from the search. If you enter example, that will match + every folder and file named example in the workspace. If you enter + ./example, that will match the folder example/ at the top level of your + workspace. Use , to separate multiple patterns. Paths must use forward + slashes. You can also use glob pattern syntax, for example: + +* `*` to match zero or more characters in a path segment +* `?` to match on one character in a path segment +* `**` to match any number of path segments, including none +* `{}` to group conditions (for example { .html, .txt} matches all HTML and text files) +* `[]` to declare a range of characters to match (example.[0-9] to match on example.0, example.1, …) +* `[!...]` to negate a range of characters to match (example.[!0-9] to match on example.a, example.b, but not example.0) + +AVAP™ DS excludes some folders by default to reduce the number of search + results that you are not interested in (for example: + node_modules). Open settings to change these rules under the + files.exclude and search.exclude section. + +Note that glob patterns in the Search view work differently than in + settings such as files.exclude and search.exclude. In the settings, you + must use * + + /example to match a folder named example in subfolder folder1/example in + your workspace. In the Search view, the * + {' '} + prefix is assumed. The glob patterns in these settings are always + evaluated relative to the path of the workspace folder. + +Also note the Use Exclude Settings and Ignore Files toggle button in the + files to exclude box. The toggle determines whether to exclude files that + are ignored by your .gitignore files and/or matched by your files.exclude + and search.exclude settings. + +Tip: From the Explorer, you can right-click on a folder and select Find in + Folder to search inside a folder only. + +Search and replace You can also Search and Replace across files. Expand + the Search widget to display the Replace text box. + +search and replace + +When you type text into the Replace text box, you will see a diff display + of the pending changes. You can replace across all files from the Replace + text box, replace all in one file or replace a single change. + +search and replace diff view + +Tip: You can quickly reuse a previous search term by using ↓ and ↑ to + navigate through your search term history. + +Case changing in regex replace AVAP™ DS supports changing the case of + regex matching groups while doing Search and Replace in the editor or + globally. This is done with the modifiers \u\U\l\L, where \u and \l will + upper/lowercase a single character, and \U and \L will upper/lowercase the + rest of the matching group. + +Example: + +Changing case while doing find and replace + +The modifiers can also be stacked - for example, \u\u\u$1 will uppercase + the first three characters of the group, or \l\U$1 will lowercase the + first character, and uppercase the rest. The capture group is referenced + by $n in the replacement string, where n is the order of the capture + group. + +Search Editor Search Editors let you view workspace search results in a + full-sized editor, complete with syntax highlighting and optional lines of + surrounding context. + +Below is a search for the word 'SearchEditor' with two lines of + text before and after the match for context: + +Search Editor overview + +The Open Search Editor command opens an existing Search Editor if one + exists, or to otherwise create a new one. The New Search Editor command + will always create a new Search Editor. + +In the Search Editor, results can be navigated to using Go to Definition + actions, such as F12 to open the source location in the current editor + group, or ⌘K F12 to open the location in an editor to the side. + Additionally, double-clicking can optionally open the source location, + configurable with the search.searchEditor.doubleClickBehaviour setting. + +You can also use the Open New Search Editor button at the top of the + Search view, and can copy your existing results from a Search view over to + a Search Editor with the Open in editor link at the top of the results + tree, or the Search Editor: Open Results in Editor command. + +Search Editor Button + +The Search Editor above was opened by selecting the Open New Search Editor + button (third button) on the top of the Search view. + +Search Editor commands and arguments search.action.openNewEditor - Opens + the Search Editor in a new tab. search.action.openInEditor - Copy the + current Search results into a new Search Editor. + search.action.openNewEditorToSide - Opens the Search Editor in a new + window next to the window you currently have opened. There are two + arguments that you can pass to the Search Editor commands + (search.action.openNewEditor, search.action.openNewEditorToSide) + to allow keybindings to configure how a new Search Editor should behave: + +triggerSearch - Whether a search be automatically run when a Search Editor + is opened. Default is true. focusResults - Whether to put focus in the + results of a search or the query input. Default is true. For example, the + following keybinding runs the search when the Search Editor is opened but + leaves the focus in the search query control. + +{ "key": "ctrl+o", "command": + "search.action.openNewEditor", "args": { + "query": "AVAP™ DS", "triggerSearch": true, + "focusResults": false } } Search Editor context + default The search.searchEditor.defaultNumberOfContextLines setting has a + default value of 1, meaning one context line will be shown before and + after each result line in the Search Editor. + +Reuse last Search Editor configuration The + search.searchEditor.reusePriorSearchConfiguration setting (default is + false) lets you reuse the last active Search Editor's + configuration when creating a new Search Editor. + +IntelliSense We'll always offer word completion, but for the rich + languages, such as JavaScript, JSON, HTML, CSS, SCSS, Less, C# and + TypeScript, we offer a true IntelliSense experience. If a language service + knows possible completions, the IntelliSense suggestions will pop up as + you type. You can always manually trigger it with ⌃Space. By default, Tab + or Enter are the accept keyboard triggers but you can also customize these + key bindings. + +Tip: The suggestions filtering supports CamelCase so you can type the + letters which are upper cased in a method name to limit the suggestions. + For example, "cra" will quickly bring up + "createApplication". + +Tip: IntelliSense suggestions can be configured via the + editor.quickSuggestions and editor.suggestOnTriggerCharacters settings. + +JavaScript and TypeScript developers can take advantage of the npmjs type + declaration (typings) file repository to get IntelliSense for + common JavaScript libraries (Node.js, React, Angular). You can + find a good explanation on using type declaration files in the JavaScript + language topic and the Node.js tutorial. + +Learn more in the IntelliSense document. + +Formatting AVAP™ DS has great support for source code formatting. The + editor has two explicit format actions: + +Format Document (⇧⌥F) - Format the entire active file. Format + Selection (⌘K ⌘F) - Format the selected text. You can invoke these + from the Command Palette (⇧⌘P) or the editor context menu. + +AVAP™ DS has default formatters for JavaScript, TypeScript, JSON, HTML, + and CSS. Each language has specific formatting options (for example, + html.format.indentInnerHtml) which you can tune to your preference in + your user or workspace settings. You can also disable the default language + formatter if you have another extension installed that provides formatting + for the same language. + +"html.format.enable": false Along with manually invoking code + formatting, you can also trigger formatting based on user gestures such as + typing, saving or pasting. These are off by default but you can enable + these behaviors through the following settings: + +editor.formatOnType - Format the line after typing. editor.formatOnSave - + Format a file on save. editor.formatOnPaste - Format the pasted content. + Note: Not all formatters support format on paste as to do so they must + support formatting a selection or range of text. + +In addition to the default formatters, you can find extensions on the + Marketplace to support other languages or formatting tools. There is a + Formatters category so you can easily search and find formatting + extensions. In the Extensions view search box, type 'formatters' + or 'category:formatters' to see a filtered list of extensions + within AVAP™ DS + +Folding You can fold regions of source code using the folding icons on the + gutter between line numbers and line start. Move the mouse over the gutter + and click to fold and unfold regions. Use Shift + Click on the folding + icon to fold or unfold the region and all regions inside. + +Folding + +You can also use the following actions: + +Fold (⌥⌘[) folds the innermost uncollapsed region at the cursor. + Unfold (⌥⌘]) unfolds the collapsed region at the cursor. Toggle + Fold (⌘K ⌘L) folds or unfolds the region at the cursor. Fold + Recursively (⌘K ⌘[) folds the innermost uncollapsed region at the + cursor and all regions inside that region. Unfold Recursively (⌘K + ⌘]) unfolds the region at the cursor and all regions inside that + region. Fold All (⌘K ⌘0) folds all regions in the editor. Unfold + All (⌘K ⌘J) unfolds all regions in the editor. Fold Level X + (⌘K ⌘2 for level 2) folds all regions of level X, except the + region at the current cursor position. Fold All Block Comments (⌘K + ⌘/) folds all regions that start with a block comment token. Folding + regions are by default evaluated based on the indentation of lines. A + folding region starts when a line has a smaller indent than one or more + following lines, and ends when there is a line with the same or smaller + indent. + +Folding regions can also be computed based on syntax tokens of the + editor's configured language. The following languages already provide + syntax aware folding: Markdown, HTML, CSS, LESS, SCSS, and JSON. + +If you prefer to switch back to indentation-based folding for one (or + all) of the languages above, use: + +{' '} + "[html]": { "editor.foldingStrategy": + "indentation" }, Regions can also be defined by markers + defined by each language. The following languages currently have markers + defined: + +Language Start region End region Bat ::#region or REM #region ::#endregion + or REM #endregion C# #region #endregion C/C++ #pragma region #pragma + endregion CSS/Less/SCSS / #region / / #endregion / + Coffeescript #region #endregion F# //#region or (#_region) + //#endregion or (#_endregion) Java //#region or // + //#endregion or // + Markdown + + Perl5 #region or =pod #endregion or =cut PHP #region #endregion PowerShell + #region #endregion Python #region or # region #endregion or # endregion + TypeScript/JavaScript //#region //#endregion Visual Basic #Region #End + Region To fold and unfold only the regions defined by markers use: + +Fold Marker Regions (⌘K ⌘8) folds all marker regions. Unfold + Marker Regions (⌘K ⌘9) unfolds all marker regions. Fold selection + The command Create Manual Folding Ranges from Selection (⌘K ⌘,) + creates a folding range from the currently selected lines and collapses + it. That range is called a manual folding range that goes on top of the + ranges computed by folding providers. + +Manual folding ranges can be removed with the command Remove Manual + Folding Ranges (⌘K ⌘.). + +Manual folding ranges are especially useful for cases when there isn't + programming language support for folding. + +Indentation AVAP™ DS lets you control text indentation and whether + you'd like to use spaces or tab stops. By default, AVAP™ DS inserts + spaces and uses 4 spaces per Tab key. If you'd like to use another + default, you can modify the editor.insertSpaces and editor.tabSize + settings. + +```javascript +"editor.insertSpaces": true, + + "editor.tabSize": 4, +``` + +Auto-detection VS Code analyzes your open file and determines the + indentation used in the document. The auto-detected indentation overrides + your default indentation settings. The detected setting is displayed on + the right side of the Status Bar: + +auto detect indentation + +You can click on the Status Bar indentation display to bring up a dropdown + with indentation commands allowing you to change the default settings for + the open file or convert between tab stops and spaces. + +indentation commands + +Note: AVAP™ DS auto-detection checks for indentations of 2, 4, 6 or 8 + spaces. If your file uses a different number of spaces, the indentation + may not be correctly detected. For example, if your convention is to + indent with 3 spaces, you may want to turn off editor.detectIndentation + and explicitly set the tab size to 3. + +```javascript +"editor.detectIndentation": false, + + "editor.tabSize": 3, +``` + +File encoding support Set the file encoding globally or per workspace by + using the files.encoding setting in User Settings or Workspace Settings. + +files.encoding setting + +You can view the file encoding in the status bar. + +Encoding in status bar + +Click on the encoding button in the status bar to reopen or save the + active file with a different encoding. + +Reopen or save with a different encoding + +Then choose an encoding. + +Select an encoding + +Next steps You've covered the basic user interface - there is a lot + more to AVAP™ DS. Read on to find out about: + +Intro Video - Setup and Basics - Watch a tutorial on the basics of AVAP™ + DS. User/Workspace Settings - Learn how to configure AVAP™ DS to your + preferences through user and workspace settings. Code Navigation - Peek + and Goto Definition, and more. Integrated Terminal - Learn about the + integrated terminal for quickly performing command-line tasks from within + AVAP™ DS. IntelliSense - AVAP™ DS brings smart code completions. Debugging + - This is where AVAP™ DS really shines. Common questions Is it possible to + globally search and replace? Yes, expand the Search view text box to + include a replace text field. You can search and replace across all the + files in your workspace. Note that if you did not open AVAP™ DS on a + folder, the search will only run on the currently open files. + +global search and replace + +How do I turn on word wrap? You can control word wrap through the + editor.wordWrap setting. By default, editor.wordWrap is off but if you set + to it to on, text will wrap on the editor's viewport width. + +```javascript +"editor.wordWrap": "on" +``` + +You can toggle word wrap for the AVAP™ DS session with ⌥Z. + +You can also add vertical column rulers to the editor with the + editor.rulers setting, which takes an array of column character positions + where you'd like vertical rulers. + +As in other editors, commands such as Cut and Copy apply to the whole + wrapped line. Triple-click selects the whole wrapped line. Pressing Home + twice moves the cursor to the very beginning of the line. Pressing End + twice moves the cursor to the very end of the line. + +How can I avoid placing extra cursors in word wrapped lines? If you'd + like to ignore line wraps when adding cursors above or below your current + selection, you can pass in { "logicalLine": true } to + args on the keybinding like this: + +{ "key": "shift+alt+down", "command": + "editor.action.insertCursorBelow", "when": + "textInputFocus", "args": { + "logicalLine": true }, }, { "key": + "shift+alt+up", "command": + "editor.action.insertCursorAbove", "when": + "textInputFocus", "args": { + "logicalLine": true }, }, diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md new file mode 100644 index 0000000..0676be8 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md @@ -0,0 +1,317 @@ +AVAP TM Dev Studio for the Web provides a free, zero-install + Microsoft AVAP TM Dev Studio experience running entirely in your + browser, allowing you to quickly and safely browse source code + repositories and make lightweight code changes. To get started, go to + (link) in your browser. + +AVAP TM Dev Studio for the Web has many of the features of AVAP + TM Dev Studio Desktop that you love, including search and + syntax highlighting while browsing and editing, along with extension + support to work on your codebase and make simpler edits. In addition to + opening repositories, forks, and pull requests from source control + providers like GitHub and Azure Repos, you can also work with code that is + stored on your local machine. + +AVAP TM Dev Studio for the Web runs entirely in your web + browser, so there are certain limitations compared to the desktop + experience, which you can read more about below. + +## Relationship to AVAP™ Dev Studio Desktop + +AVAP TM Dev Studio for the Web provides a browser-based + experience for navigating files and repositories and committing + lightweight code changes. However, if you need access to a runtime to run, + build, or debug your code, you want to use platform features such as a + terminal, or you want to run extensions that aren't supported in the + web, we recommend moving your work to the desktop application, GitHub + Codespaces, or using Remote - Tunnels for the full capabilities of AVAP + TM Dev Studio. In addition, AVAP TM Dev Studio + Desktop lets you use a full set of keyboard shortcuts not limited by your + browser. + +When you're ready to switch, you'll be able to "upgrade" + to the full AVAP TM Dev Studio experience with a few clicks. + +You can also switch between the Stable and Insiders versions of AVAP + TM Dev Studio for the Web by selecting the gear icon, then{' '} + Switch to Insiders Version... , or by navigating directly + to (LINK). + +## Opening a project + +By navigating to (LINK), you can create a new local file or + project, work on an existing local project, or access source code + repositories hosted elsewhere, such as on GitHub and Azure Repos (part + of Azure DevOps). + +You can create a new local file in the web just as you would in a AVAP + TM Dev Studio Desktop environment, using File {' '} + > New File from the Command Palette (F1). + +## GitHub repos + +You can open a GitHub repository in AVAP TM Dev Studio for the + Web directly from a URL, following the schema: (LINK). Using the + AVAP TM Dev Studio repository as an example, this would look + like: (LINK). + +This experience is delivered at a custom (LINK) URL, which is + powered by the GitHub Repositories extension (which is part of the + broader Remote Repositories extension). + +GitHub Repositories allows you to remotely browse and edit a repository + from within the editor, without needing to pull code onto your local + machine. You can learn more about the extension and how it works in our + GitHub Repositories guide. + +You can also open GitHub repositories in `vscode.dev` through + your browser's search bar (aka omnibox) by installing the{' '} + `vscode.dev` extension for Chrome and Edge. Then, type code to + activate the omnibox, followed by your repository's name. Suggestions + are populated by your browser search history, so if the repo you want + doesn't come up, you can also type in the fully qualified{' '} + `/` name to open it, for example{' '} + `microsoft/vscode` . + +If you're already in AVAP TM Dev Studio for the Web at + (LINK), you can alternatively navigate to different repos via the + Remote Repositories extension commands. Select the remote indicator in the + lower left of the Status bar, and you'll be presented with the{' '} + Open Remote Repository... command. + +## Azure Repos + +You can open Azure Repos just like Github repos in AVAP TM Dev + Studio for the Web. + +When you navigate to a URL with the schema (LINK), you will be + able to read, search the files in the repo, and commit your changes to + Azure Repos. You can fetch, pull, and sync changes, and view branches. + +You can open any repository, branch, or tag from Azure Repos in AVAP + TM Dev Studio for the Web by prefixing `vscode.dev` {' '} + to the Azure Repos URL. + +Alternatively, when you are on an Azure DevOps repository or pull request, + you can press (.) to open it in AVAP TM Dev Studio for + the Web. + +## More custom URLs + +Like in the desktop, you can customize AVAP TM Dev Studio for + the Web through a rich ecosystem of extensions that support just about + every back end, language, and service. `vscode.dev` includes + URLs that provide shortcuts to common experiences. + +We've explored a couple of URLs already (LINK and LINK). + Here's a more complete list: + +Please note that some URLs must be entered in a specific way (for + example, (LINK) requires an active Live Share session). Please + review each service's documentation for specific access and usage + information. + +There's more information on some of these URLs below. + +### Themes + +You can share and experience color themes through AVAP TM Dev + Studio for the Web through the URL schema: (LINK). + +For instance, you can go to (LINK) to experience the Night Owl + theme without having to go through the download and install process. + +Note: The color theme URL schema works for themes that are fully + declarative (no code). + +An extension can define multiple themes. You can use the schema{' '} + `/editor/theme//` . If no + themeName is specified, AVAP TM Dev Studio for the Web will take + the first theme. + +As a theme author, you can add the following badge to your extension + readme to allow users to easily try out your theme in AVAP TM {' '} + Dev Studio for the Web (replacing `` {' '} + with your theme extension's unique identifier): + +### Visual Studio Live Share + +Live Share guest sessions are available in the browser through the + (LINK) URL. The sessionId will be passed to the extension to make + joining a seamless experience. + +## Continue working in a different environment + +In some cases, you will want to access a different environment that has + the ability to run code. You can switch to working on a repository in a + development environment that has support for a local file system and full + language and development tooling. + +The GitHub Repositories extension makes it easy for you to clone the + repository locally, reopen it on the desktop, or create a GitHub codespace + for the current repository (if you have the GitHub Codespaces + extension installed and access to create GitHub codespaces). To do + this, use the Continue Working On... command available + from the Command Palette (F1) or click on the Remote indicator in + the Status bar. + +## Saving and sharing work + +When working on a local file in the web, your work is saved automatically + if you have Auto Save enabled. You can also save manually as you do when + working in desktop AVAP TM Dev Studio (for example{' '} + File > Save ). + +When working on a remote repository, your work is saved in the + browser's local storage until you commit it. If you open a repo or + pull request using GitHub Repositories, you can push your changes in the + Source Control view to persist any new work. + +You can also continue working in other environments via Continue Working + On. + +The first time that you use Continue Working On with + uncommitted changes, you will have the option to bring your edits to your + selected development environment using Cloud Changes , + which uses a AVAP TM Dev Studio service to store your pending + changes. This is described further in the GitHub Repositories doc. + +## Use your own compute with Remote Tunnels + +You may develop against another machine in AVAP TM Dev Studio + for the Web using the Remote - Tunnels extension. + +The Remote - Tunnels extension lets you connect to a remote machine, like + a desktop PC or virtual machine (VM), via a secure tunnel. You can + then securely connect to that machine from anywhere, without the + requirement of SSH. This lets you "bring your own compute" to + vscode.dev, enabling additional scenarios like running your code in the + browser. + +You may learn more about Remote - Tunnels in its documentation. + +## Safe exploration + +AVAP TM Dev Studio for the Web runs entirely in your web + browser's sandbox and offers a very limited execution environment. + +When accessing code from remote repositories, the web editor doesn't + "clone" the repo, but instead loads the code by invoking the + services' APIs directly from your browser; this further reduces the + attack surface when cloning untrusted repositories. + +When working with local files, AVAP TM Dev Studio for the Web + loads them through your browser's file system access APIs, which limit + the scope of what the browser can access. + +## Run anywhere + +Similar to GitHub Codespaces, AVAP TM Dev Studio for the Web can + run on tablets, like iPads. + +## Language support + +Language support is a bit more nuanced on the web, including code editing, + navigation, and browsing. The desktop experiences are typically powered by + language services and compilers that expect a file system, runtime, and + compute environment. In the browser, these experiences are powered by + language services running in the browser that provide source code + tokenization and syntax colorization, completions, and many single-file + operations. + +Generally, experiences fall into the following categories: + +* Good: For most programming languages, AVAP TM {' '} Dev Studio for the Web gives you code syntax colorization, text-based completions, and bracket pair colorization. Using a Tree-sitter syntax tree through the anycode extension, we're able to provide additional experiences such as Outline/Go to Symbol and{' '} Symbol Search for popular languages such as C/C++, C#, Java, PHP, Rust, and Go. +* Better: The TypeScript, JavaScript, and Python experiences are all powered by language services that run natively in the browser. With these programming languages, you'll get the " Good " experience plus rich single file completions, semantic highlighting, syntax errors, and more. +* Best: For many "webby" languages, such as JSON, HTML, CSS, and LESS, etc., the coding experience in vscode.dev is nearly identical to the desktop (including Markdown preview!). + +You can determine the level of language support in your current file + through the Language Status Indicator in the Status bar: + +## Limitations + +Since AVAP TM Dev Studio for the Web runs completely within the + browser, some experiences will naturally be more constrained when compared + to what you can do in the desktop app. For example, the terminal and + debugger are not available, which makes sense since you can't compile, + run, and debug a Rust or Go application within the browser sandbox. + +### Extensions + +Only a subset of extensions can run in the browser. You can use the + Extensions view to install extensions in the web, and extensions that + cannot be installed will have a warning icon and{' '} + Learn Why link. We expect more extensions to become + enabled over time. + +When you install an extension, it is saved in the browser's local + storage. You can ensure your extensions are synced across AVAP + TM Dev Studio instances, including different browsers and even + the desktop, by enabling Settings Sync. + +When an Extension Pack contains extensions that do not run in the browser + sandbox, you will get an informational message with the option to see the + extensions included in the pack. + +When extensions are executed in the browser sandbox, they are more + restricted. Extensions that are purely declarative, such as most themes, + snippets, or grammars, can run unmodified and are available in AVAP + TM Dev Studio for the Web without any modification from the + extension authors. Extensions that are running code need to be updated to + support running in the browser sandbox. You can read more about what is + involved to support extensions in the browser in the web extension authors + guide. + +There are also extensions that run in the browser with partial support + only. A good example is a language extension that restricts its support to + single files or the currently opened files. + +Edge and Chrome today support the File System API, allowing web pages to + access the local file system. If your browser does not support the File + System API, you cannot open a folder locally, but you can open files + instead. + +You can use AVAP TM Dev Studio for the Web in the latest + versions of Chrome, Edge, Firefox, and Safari. Older versions of each + browser may not work - we only guarantee support for the latest version. + +Tip: One way to check the compatible browser version is + to look at the version of Playright currently used for testing AVAP + TM Dev Studio and review its supported browser versions. You + can find the currently used Playwright version in the AVAP TM {' '} + Dev Studio repo's package.json file at + devDependencies/@playwright/test. Once you know the Playwright version, + for example 1.37, you can then review the{' '} + Browser Versions section in their Release notes. + +Webviews might appear differently or have some unexpected behavior in + Firefox and Safari. You can view issue queries in the AVAP TM {' '} + Dev Studio GitHub repo to track issues related to specific browsers, such + as with the Safari label and Firefox label. + +There are additional steps you can take to improve your browser experience + using AVAP TM Dev Studio for the Web. Review the Additional + browser setup section for more information. + +You can use AVAP TM Dev Studio for the Web on mobile devices, + but smaller screens may have certain limitations. + +Certain keybindings may also work differently in the web. + +## Additional browser setup + +There are additional browser configuration steps you can take when working + with AVAP TM Dev Studio in a browser. + +In certain cases, you may need to open a new tab or window while working + in AVAP TM Dev Studio for the Web. AVAP TM Dev Studio + might ask you for permission to access the clipboard when reading from it. + Depending on your browser, you may grant access to the clipboard or + otherwise allow for pop-up windows in different ways: + +* Chrome, Edge, Firefox: Search for "site permissions" in your browser's settings, or look for the following option in the address bar on the right: + +![Allow clipboard access in the browser][Type in your browser and search a + GitHub repository to open in vscode.dev] + +* Safari: In the Safari browser, go to Preferences... {' '} > Websites > Pop-up Windows > the domain you're accessing (for example, vscode.dev), and select Allow from the dropdown. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md new file mode 100644 index 0000000..426c697 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md @@ -0,0 +1,362 @@ +AVAP TM Dev Studio has many features to help make the editor + accessible to all users. Zoom levels and High Contrast colors improve + editor visibility, keyboard-only navigation supports use without a mouse, + and the editor is optimized for screen readers. + +## Zoom + +You can adjust the zoom level in AVAP TM Dev Studio with the{' '} + View > Appearance >{' '} + Zoom commands. Each Zoom command + increases or decreases the zoom level by 20 percent. + +* View > Appearance >{' '} Zoom In (Ctrl+=) - increase the zoom level. +* View > Appearance >{' '} Zoom Out (Ctrl+-) - decrease the zoom level. +* View > Appearance >{' '} Reset Zoom (Ctrl+Numpad0) - reset the zoom level to 0. + +### Persisted zoom level + +When you adjust the zoom level with the View >{' '} + Zoom In / Out commands, the zoom level is persisted in + the `window.zoomLevel` setting. The default value is 0 and each + increment/decrement changes the zoom level by 20 percent. + +## Accessibility help + +The command Open Accessibility Help Alt+F1 opens a help + menu based on the current context. It currently applies to the editor, + terminal, notebook, chat view, and inline chat features. + +You can dismiss the accessibility help menu or open additional + documentation from within the help menu. + +## High Contrast theme + +AVAP TM Dev Studio supports a High Contrast color theme on all + platforms. Use File > Preferences {' '} + > Theme > Color Theme (Ctrl+K + Ctrl+T) to display the Select Color Theme dropdown + and select the High Contrast theme. + +## Color vision accessibility + +You can search for extensions in{' '} + AVAP™ Dev Studio Marketplace that are compatible with + color vision deficiency. Use the Extensions view Ctrl+Shift+X and search + for "color blind" to populate relevant options. + +Once you have installed a color theme from the Marketplace, you can change + the color theme with File >{' '} + Preferences > Theme >{' '} + Color Theme Ctrl+K Ctrl+T. + +### Recommended themes for color vision accessibility + +* GitHub - Accessible to most forms of color blindness and matches the themes in GitHub's settings. +* Gotthard - Optimized for approximately 20 programming languages. +* Blinds - Created for people with deuteranopia, featuring a high contrast color ratio. +* Greative - Considers both color blindness and light sensitivity. +* Pitaya Smoothie - Accessible to most forms of color blindness and compliant with WCAG 2.1 criteria for color contrast. + +## Customizing warning colors + +The default Color Theme for AVAP TM Dev Studio is{' '} + Dark+ . However, you can customize both the theme and + property colors in the user interface. + +To customize the error and warning squiggles, go to File {' '} + > Preferences > Settings for user + settings. Search for "color customizations" to find the{' '} + Workbench: Color Customizations setting, and open your + user settings.json file by selecting{' '} + Edit in settings.json . + +In your `settings.json` file, nest the following code inside + the outermost curly braces. You can assign a color to each object by + entering a hex code. + +```javascript +"workbench.colorCustomizations": { + ` `"editorError.foreground": "#ffef0f", + ` `"editorWarning.foreground": "#3777ff" + + } +``` + +In the following example, the warning color is applied when a comma is + missing after a JSON item. + +* `editorError.foreground` - Overrides the wavy line beneath an error. +* `editorWarning.foreground` - Overrides the wavy line beneath a warning. +* `editorError.background` - Overrides the highlight color of an error. +* `editorWarning.background` - Overrides the highlight color of a warning. + +Assigning a color to the background of `editorError` and + editorWarning also helps to identify potential issues. The color that you + choose will highlight the respective error or warning. The colors shown in + the preceding example, `#ffef0f` (yellow) and{' '} + `#37777ff` (blue), are more accessible to individuals + with common forms of color vision deficiencies. + +### Selecting accessible colors + +The accessibility of colors is subjective to the type of anomalous + trichromacy (color blindness). The level of severity ranges per + person and can be divided into four condition types: + +One of the best approaches to selecting the best colors for a specific + condition is to apply complementary colors. These are colors located + opposite of one another on a color wheel. + +Note : For more information on finding complementary + colors, access the color blind simulator and interactive color wheel at + Adobe Color. + +## Dim unfocused editors and terminals + +Unfocused views can be dimmed to make it clearer where typed input will + go. This is especially useful when working with multiple editor groups or + terminals. Turn on this feature by setting " + `accessibility.dimUnfocused.enabled` ": `true` . + You can control the dimness level with{' '} + `accessibility.dimUnfocused.opacity,` which takes the opacity + fraction from 0.2 to 1 (default 0.75). + +## Keyboard navigation + +AVAP TM Dev Studio provides an exhaustive list of commands in + the Command Palette (Ctrl+Shift+P) so that you + can use AVAP TM Dev Studio without a mouse. Press Ctrl+Shift+P, + then type a command name (for example 'git') to filter the + list of commands. + +AVAP TM Dev Studio also has many preset keyboard shortcuts for + commands. + +You can also set your own keyboard shortcuts. File >{' '} + Preferences > Keyboard Shortcuts {' '} + (Ctrl+K Ctrl+S) opens the Keyboard Shortcuts editor, where you can + discover and modify key bindings for AVAP TM Dev Studio actions. + See Key Bindings for more details on customizing or adding your own + keyboard shortcuts. + +For quick navigation across the workbench, we recommend using{' '} + Focus Next Part (F6) and{' '} + Focus Previous Part (Shift+F6) commands. + +### Anchor selection + +To make it easier to start and end selections with the keyboard, there are + four commands: Set Selection Anchor (Ctrl+K + Ctrl+B), Select From Anchor to Cursor (Ctrl+K + Ctrl+K), Cancel Selection Anchor (Escape) and{' '} + Go to Selection Anchor . + +## Tab navigation + +You can use the Tab key to navigate between UI controls in AVAP + TM Dev Studio. Use Shift+Tab to tab in reverse order. As you + tab through the UI controls, an indicator will appear around each UI + element when it has focus. + +All elements in the workbench support tab navigation. To avoid having too + many tab stops, workbench toolbars and tab lists each have only one. Once + a toolbar or a tab list has focus, you can use the arrow keys to navigate + within them. + +## Tab trapping + +By default, pressing Tab within a source code file inserts the Tab + character (or spaces depending on your indentation setting) and + does not leave the open file. You can toggle Tab trapping with Ctrl+M, and + subsequent Tab keys will move focus out of the file. When default Tab + trapping is off, you will see a Tab moves focus indicator + in the Status Bar. + +Tab trapping also exists in the integrated terminal. The default behavior + for the feature can be configured with `editor.tabFocusMode` . + +You can also toggle Tab trapping on and off from the{' '} + Command Palette (Ctrl+Shift+P) with the{' '} + Toggle Tab Key Moves Focus action. + +Read-only files never trap the Tab key. The{' '} + Integrated Terminal panel respects the Tab trapping mode + and can be toggled with Ctrl+M. + +## Screen readers + +AVAP TM Dev Studio supports screen readers in the editor using a + strategy based on text pagination. The following screen readers have been + tested: + +* Windows: NVDA and JAWS +* macOS: VoiceOver +* Linux: Orca + +For NVDA, we recommend that you stay in focus mode and use the hotkeys to + navigate, instead of using browse mode. + +The Go to Next/Previous Error or Warning actions (F8 + and Shift+F8) allow screen readers to announce the error and warning + messages. + +When suggestions pop up, they are announced to screen readers. Navigate + the suggestions using Ctrl+Up and Ctrl+Down and dismiss them with + Shift+Escape. If suggestions get in your way, you can turn them off with + the `editor.quickSuggestions setting` . + +In the diff view pane, the Go to Next/Previous Difference {' '} + actions (F7 and Shift+F7) will show the Accessible Diff Viewer + with diffs presented in a unified patch format. Navigate through the + unchanged, inserted, or deleted lines with Up and Down. Press Enter to + return focus to the modified pane of the diff editor at the selected line + number (or the closest line number that still exists, if a deleted + line is selected). Use Escape or Shift+Escape to dismiss the + Accessible Diff Viewer. + +## Accessible View + +Run the command Open Accessible View Alt+F2 to display an + Accessible View to inspect content character by character, line by line. + The Accessible View is currently available for hovers, notifications, + Jupyter notebook output, and chat responses. + +## Screen reader mode + +When AVAP TM Dev Studio detects that a screen reader is being + used, it goes into an optimized screen reader mode for UI such as the + editor and Integrated Terminal. The Status bar will display{' '} + Screen Reader Optimized in the lower right. You can exit + screen reader mode by clicking on the display text or using the{' '} + Toggle Screen Reader Accessibility Mode command. + +Some features, such as folding and minimap (code overview), are + disabled when in screen reader mode. You can control whether AVAP + TM Dev Studio uses screen reader mode with the{' '} + Editor: Accessibility Support setting ( + `editor.accessibilitySupport` ) and the values are on, off, + or the default auto that automatically detects a screen reader through + querying the platform. + +## Input control and result navigation + +Navigating between an input control (for example, search or filter + input) and its results is consistent across the Extensions view, the + Keyboard Shortcuts editor, and the Comments, Problems, and Debug Console + panels using (Ctrl+Down) and (Ctrl+Up). + +## Terminal accessibility + +You can display terminal accessibility help via Alt+F1, which describes + useful tips when using a screen reader. One tip is to use Alt+F2 to access + the buffer in the terminal. This will automatically enter the screen + reader's browse mode, depending on your screen reader, for an + accessible view of the entire terminal buffer. + +Use `editor.tabFocusMode` to control whether the terminal + receives the Tab key instead of the workbench, similar to the editor. + +### Shell integration + +The terminal has a feature called shell integration that enables many + additional features that are not found in other terminals. When using a + screen reader, the Run Recent Command and Go to Recent Directory features + are particularly useful. + +Another shell integration powered command,{' '} + Go to Symbol in Accessible View (Ctrl+Shift+O), + lets you navigate between terminal commands similar to{' '} + Go to Symbol in Editor... navigation in the editor. + +### Minimum contrast ratio + +Set `terminal.integrated.minimumContrastRatio` to a number + between 1 and 21 to adjust text color luminance until the desired contrast + ratio is met or pure white ( `#FFFFFF` ) black ( + `#000000` ) is hit. + +Note that the `terminal.integrated.minimumContrastRatio` {' '} + setting will not apply to `powerline` characters. + +## Status bar accessibility + +Once focus is in the Status bar via Focus Next Part {' '} + (F6), you can use arrow navigation to move focus between Status + bar entries. + +### Diff editor accessibility + +There is an Accessible Diff Viewer in the Diff editor that presents + changes in a unified patch format. You can navigate between changes with{' '} + Go to Next Difference (F7) and{' '} + Go to Previous Difference (Shift+F7). Navigate + lines with the arrow keys and press Enter to jump back in the Diff editor + and the selected line. + +## Debugger accessibility + +The AVAP TM Dev Studio debugger UI is user accessible and has + the following features: + +* Debug state changes are read out (for example, 'started', 'breakpoint hit', 'terminated', ...). +* All debug actions are keyboard accessible. +* Both the Run and Debug view and Debug Console support Tab navigation. +* Debug hover is keyboard accessible (Ctrl+K Ctrl+I). +* Keyboard shortcuts can be created to set focus to each debugger area. + +## Audio Cues + +Audio cues indicate if the current line has certain markers such as: + errors, warnings, breakpoints, folded text regions or inline suggestions. + +They are played when the primary cursor changes its line or the first time + a marker is added to the current line. Audio cues are enabled + automatically when a screen reader is attached, but can also be controlled + by the settings `audioCues.\*` . + +The command Help: List Audio Cues lists all available + audio cues, lets you hear each audio cue as you move through the list, and + review which cues are currently enabled. + +Aria alerts also inform screen reader and braille users that certain + markers have been hit. The command Help: List Alerts {' '} + lists all available alerts and informs the user of which are available and + which are enabled. + +## Hover accessibility + +Some hovers cannot be hovered normally, which makes them hard to use with + screen magnifiers. To work around this, hold the `Alt` or{' '} + `Option` key while a hover is active to "lock" it in + place so that it won't hide when hovered. Release the key to unlock + the hover. + +## Current known issues + +AVAP TM Dev Studio has some known accessibility issues, + depending on the platform. For the full list, go to AVAP TM Dev + Studio accessibility issues. + +### macOS + +The editor includes screen reader support for VoiceOver. + +### Linux + +AVAP TM Dev Studio works well with the Orca screen reader. If + Orca in your Linux distribution does not read the editor content: + +* Make sure to have the setting " `editor.accessibilitySupport` ": "on" in AVAP TM Dev Studio. You can do this using settings, or by running the Show Accessibility Help command and pressing Ctrl+E to turn on accessibilitySupport. +* If Orca is still silent, try setting{' '} `ACCESSIBILITY\_ENABLED=1` as an environment variable. + +After you enable that setting, AVAP TM Dev Studio should work + with the Orca screen reader. + +## Next steps + +Read on to find out about: + +* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md new file mode 100644 index 0000000..ac09f6e --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md @@ -0,0 +1,288 @@ +AVAP™ Dev Studio has a high productivity code editor which, when combined + with programming language services, gives you the power of an IDE and the + speed of a text editor. In this topic, we'll first describe AVAP™ DS + Code's language intelligence features (suggestions, parameter + hints, smart code navigation) and then show the power of the core text + editor. + +## Quick file navigation + +The Explorer is great for navigating between files when you are exploring + a project. However, when you are working on a task, you will find yourself + quickly jumping between the same set of files. AVAP™ DS Code provides two + powerful commands to navigate in and across files with easy-to-use key + bindings. + +Hold Ctrl and press Tab to view a list of all files open in an editor + group. To open one of these files, use Tab again to pick the file you want + to navigate to, then release Ctrl to open it. + +Alternatively, you can use Alt+Left and Alt+Right to navigate between + files and edit locations. If you are jumping around between different + lines of the same file, these shortcuts allow you to navigate between + those locations easily. + +## Breadcrumbs + +The editor has a navigation bar above its contents called{' '} + + Breadcrumbs + + . It shows the current location and allows you to quickly navigate between + folders, files, and symbols. + +Breadcrumbs always show the file path and, with the help of language + extensions, the symbol path up to the cursor position. The symbols shown + are the same as in Outline view and Go to Symbol. + +Selecting a breadcrumb in the path displays a dropdown with that + level's siblings so you can quickly navigate to other folders and + files. + +If the current file type has language support for symbols, you will see + the current symbol path and a dropdown of other symbols at the same level + and below. + +You can turn off breadcrumbs with the View >{' '} + Show Breadcrumbs toggle or with the breadcrumbs.enabled{' '} + setting . + +### Breadcrumb customization + +The appearance of breadcrumbs can be customized. If you have very long + paths or are only interested in either file paths or symbols paths, you + can use the breadcrumbs.filePath and breadcrumbs.symbolPath settings. Both + support on, off, and last and they define if or what part of the path you + see. By default, breadcrumbs show file and symbol icons to the left of the + breadcrumb but you can remove the icons by setting breadcrumbs.icons to + false. + +### Symbol order in Breadcrumbs + +You can control how symbols are ordered in the Breadcrumbs dropdown with + the breadcrumbs.symbolSortOrder settings. + +Allowed values are: + +* position - position in the file (default) +* name - alphabetical order +* type - symbol type order + +### Breadcrumb keyboard navigation + +To interact with breadcrumbs, use the Focus Breadcrumbs {' '} + command or press Ctrl+Shift+.. It will select that last element and open a + dropdown that allows you to navigate to a sibling file or symbol. Use the + Left and Right keyboard shortcuts to go to elements before or after the + current element. When the dropdown appears, start typing - all matching + elements will be highlighted and the best match will be selected for quick + navigation. + +You can also interact with breadcrumbs without the dropdown. Press + Ctrl+Shift+; to focus the last element, use Left and Right to navigate, + and use Space to reveal the element in the editor. + +## Go to Definition + +If a language supports it, you can + go to the definition of a symbol by pressing F12. + +If you press Ctrl and hover over a symbol, a preview of the declaration + will appear: + +## Go to Type Definition + +Some languages also support jumping + to the type definition of a symbol by running the{' '} + Go to Type Definition command from either the editor + context menu or the Command Palette . This will take you + to the definition of the type of a symbol. The command + editor.action.goToTypeDefinition is not bound to a keyboard shortcut by + default but you can add your own custom{' '} + keybinding . + +## Go to Implementation + +Languages can also support jumping + to the implementation of a symbol by pressing Ctrl+F12. For an interface, + this shows all the implementors of that interface and for abstract + methods, this shows all concrete implementations of that method. + +## Go to Symbol + +You can navigate symbols inside a file with Ctrl+Shift+O. By typing : the + symbols will be grouped by category. Press Up or Down and navigate to the + place you want. + +## Open symbol by name + +Some languages support jumping to a symbol across files with Ctrl+T. Type + the first letter of a type you want to navigate to, regardless of which + file contains it, and press Enter. + +## Peek + +We think there's nothing worse than a big context switch when all you + want is to quickly check something. That's why we support peeked + editors. When you execute a Go to References search + (via Shift+F12), or a Peek Definition (via + Alt+F12), we embed the result inline: + +You can navigate between different references in the peeked editor and + make quick edits right there. Clicking on the peeked editor filename or + double-clicking in the result list will open the reference in the outer + editor. + +## Bracket matching + +Matching brackets will be highlighted as soon as the cursor is near one of + them. + +### Bracket Pair Colorization + +Matching bracket pairs can also be colorized by setting + editor.bracketPairColorization.enabled to true. + +All colors are themeable and up to six colors can be configured. + +You can use workbench.colorCustomizations to override these + theme-contributed colors in your settings: + +```javascript +"workbench.colorCustomizations": { ` + `"editorBracketHighlight.foreground1": "#FFD700", ` + `"editorBracketHighlight.foreground2": "#DA70D6", ` + `"editorBracketHighlight.foreground3": "#179fff", + }, +``` + +## Reference information + +Some languages like C# support inline reference information, that is + updated live. This allows you to quickly analyze the impact of your edit + or the popularity of your specific method or property throughout your + project: + +## Rename symbol + +Some languages support rename symbol across files. Press F2 and then type + the new desired name and press Enter. All usages of the symbol will be + renamed, across files. + +## Errors & warnings + +Warnings or Errors can be generated either via{' '} + configured tasks , by rich language + services, or by linters, that constantly analyze your code in the + background. Since we love bug-free code, warnings and errors show up in + multiple places: + +* In the Status Bar, there is a summary of all errors and warnings counts. +* You can click on the summary or press Ctrl+Shift+M to display the{' '} PROBLEMS panel with a list of all current errors. +* If you open a file that has errors or warnings, they will be rendered inline with the text and in the overview ruler. + +## Code Action + +Warnings and Errors can provide Code Actions (also known as Quick + Fixes) to help fix issues. These will be displayed in the editor in + the left margin as a lightbulb. Clicking on the lightbulb will either + display the Code Action options or perform the action. + +## Inlay Hints + +Some languages provide inlay hints: that is additional information about + source code that is rendered inline. This is usually used to show inferred + types. The sample below shows inlay hints that display the inferred types + of JavaScript variables and function return types. + +Inlay hints can be enabled/disabled with the editor.inlayHints.enabled + setting, the default is enabled. Extensions, like TypeScript or Rust, are + needed to provide the actual inlay hint information. + +## Outgoing link protection + +For your protection, AVAP™ DS Code displays a prompt before opening an + outgoing website link from the editor. + +You can proceed to the external website in your browser or have the + options to copy the link or cancel the request. If you choose{' '} + Configure Trusted Domains , a dropdown lets you trust the + exact URL, trust the URL domain and subdomains, or trust all domains to + disable outgoing link protection. + +The option to Manage Trusted Domains , also available at + any time from the Command Palette, brings up the{' '} + Trusted Domains JSON file, where you can add, remove, or + modify trusted domains. + +```javascript +// You can use the "Manage Trusted Domains" command to open this file. + + // Save this file to apply the trusted domains rules. + [ ` `"\*.twitter.com" + ] +``` + +The Trusted Domains JSON file also has comments with + examples of the supported domain formats and a list of the domains trusted + by default, such as https://*.visualstudio.com and + https://*.microsoft.com. + +## Next steps + +Now that you know how the editor works, time to try a few other things... + +* Intro Video - Code Editing - Watch an introductory video on code editing features. +* User Interface - In case you missed a basic orientation around AVAP™ DS Code. +* Key Bindings - Learn how to modify key bindings to your preference. +* Debugging - This is where AVAP™ DS Code really shines. + +## Common questions + +### How can I automatically select the second entry in Quick Open instead of + the first? + +With the command workbench.action.quickOpenPreviousEditor, you can have + the second entry automatically selected in Quick Open. This can be useful + if you want to select the previous entry from the list without having to + invoke another keybinding: + +```javascript +[` `{ + ` `"key": "ctrl+p", + ` `"command": "workbench.action.quickOpenPreviousEditor" + ` `}, + ` `{ + ` `"key": "ctrl+p", + ` `"command": "-workbench.action.quickOpen" + ` `} + ] +``` + +### How can I configure Ctrl+Tab to navigate across all editors of all groups + +By default, Ctrl+Tab navigates between editors of the same editor group. + If you want to navigate across all opened editors in all groups, you can + create keyboard shortcuts for the + workbench.action.quickOpenPreviousRecentlyUsedEditor and + workbench.action.quickOpenLeastRecentlyUsedEditor commands: + +```javascript +[` `{ + ` `"key": "ctrl+tab", + ` `"command": + "workbench.action.quickOpenPreviousRecentlyUsedEditor", + ` `"when": "!inEditorsPicker" + ` `}, + ` `{ + ` `"key": "ctrl+shift+tab", + ` `"command": "workbench.action.quickOpenLeastRecentlyUsedEditor", + ` `"when": "!inEditorsPicker" + ` `} + ] +``` + +### How can I navigate between recently used editors without a picker + +Here is a list of commands you can use to navigate in editors without + opening a picker: diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md new file mode 100644 index 0000000..6efde20 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md @@ -0,0 +1,191 @@ +AVAP TM Dev Studio has a powerful command-line interface + built-in that lets you control how you launch the editor. You can open + files, install extensions, change the display language, and output + diagnostics through command-line options (switches). + +If you are looking for how to run command-line tools inside AVAP + TM Dev Studio, see the Integrated Terminal. + +## Command line help + +To get an overview of the AVAP TM Dev Studio command-line + interface, open a terminal or command prompt and type{' '} + `code --help` . You will see the version, usage example, and + list of command line options. + +## Launching from command line + +You can launch AVAP TM Dev Studio from the command line to + quickly open a file, folder, or project. Typically, you open AVAP + TM Dev Studio within the context of a folder. To do this, from + an open terminal or command prompt, navigate to your project folder and + type `code .` : + +Windows and Linux installations should add the AVAP TM Dev + Studio binaries location to your system path. If this isn't the case, + you can manually add the location to the `Path` environment + variable ($PATH on Linux). For example, on Windows, the default + AVAP TM Dev Studio binaries location is{' '} + `AppData\Local\Programs\Microsoft` AVAP TM Dev + Studio\bin. To review platform-specific setup instructions, see Setup. + +## Core CLI options + +Here are optional arguments you can use when starting AVAP TM {' '} + Dev Studio at the command line via code: + +## Opening Files and Folders + +Sometimes you will want to open or create a file. If the specified file + does not exist, AVAP TM Dev Studio will create them for you + along with any new intermediate folders: + +```javascript +code index.html style.css documentation\readme.md +``` + +For both files and folders, you can use absolute or relative paths. + Relative paths are relative to the current directory of the command prompt + where you run `code` . + +If you specify more than one file at the command line, AVAP TM {' '} + Dev Studio will open only a single instance. + +If you specify more than one folder at the command line, AVAP TM {' '} + Dev Studio will create a Multi-root Workspace including each folder. + +## Select a profile + +You can launch AVAP TM Dev Studio with a specific profile via + the `--profile` command-line interface option. You pass the + name of the profile after the - `-profile` argument and open a + folder or a workspace using that profile. The command line below opens the{' '} + `web-sample` folder with the "Web Development" + profile: + +` + code ~/projects/web-sample --profile "Web Development" + ` + +If the profile specified does not exist, a new empty profile with the + given name is created. + +## Working with extensions + +You can install and manage AVAP TM Dev Studio extensions from + the command line. + +## Advanced CLI options + +There are several CLI options that help with reproducing errors and + advanced setup. + +AVAP TM Dev Studio integrates with other remote environments to + become even more powerful and flexible. Our goal is to provide a cohesive + experience that allows you to manage both local and remote machines from + one, unified CLI. + +The AVAP TM Dev Studio Remote - Tunnels extension lets you + connect to a remote machine, like a desktop PC or VM, via a secure tunnel. + Tunneling securely transmits data from one network to another. You can + then securely connect to that machine from anywhere, without the + requirement of SSH. + +We've built functionality into the code CLI that will initiate tunnels + on remote machines. You can run: + +```javascript +code tunnel +``` + +to create a tunnel on your remote machine. You may connect to this machine + through a web or desktop AVAP TM Dev Studio client. + +You can review the other tunneling commands by running code tunnel -help: + +As you may need to run the CLI on a remote machine that can't install + AVAP TM Dev Studio Desktop, the CLI is also available for + standalone install on the AVAP TM Dev Studio download page. + +For more information on Remote Tunnels, you can review the Remote Tunnels + documentation. + +## Open AVAP™ Dev Studio + +You can also open projects and files using the platform's URL handling + mechanism. Use the following URL formats to: + +Open a project + +```javascript +vscode://file/{full path to project}/ + + + vscode://file/c:/myProject/ +``` + +Open a file + +```javascript +vscode://file/{full path to file} + + + vscode://file/c:/myProject/package.json +``` + +Open a file to line and column + +```javascript +vscode://file/{full path to file}:line:column + + + vscode://file/c:/myProject/package.json:5:10 +``` + +You can use the URL in applications such as browsers or file explorers + that can parse and redirect the URL. For example, on Windows, you could + pass a vscode:// URL directly to the Windows Explorer or to the command + line as start vscode://{full path to file}. + +## Next steps + +Read on to find out about: + +* Integrated Terminal - Run command-line tools from inside AVAP TM Dev Studio. +* Basic Editing - Learn the basics of the AVAP TM Dev Studio editor. +* Code Navigation - AVAP TM Dev Studio lets you quickly understand and move through your source code. + +## Common questions + +Your OS cannot find the AVAP TM Dev Studio binary code on its + path. The AVAP TM Dev Studio Windows and Linux installations + should have installed AVAP TM Dev Studio on your path. Try + uninstalling and reinstalling AVAP TM Dev Studio. If code is + still not found, consult the platform-specific setup topics for Windows + and Linux. + +On macOS, you need to manually run the{' '} + Shell Command: Install 'code' command in PATH {' '} + command (available through the Command Palette {' '} + Ctrl+Shift+P). Consult the macOS specific setup topic for details. + +AVAP TM Dev Studio has an Integrated Terminal where you can run + command-line tools from within AVAP TM Dev Studio. + +Not directly through the command line, but AVAP TM Dev Studio + has a Portable Mode, which lets you keep settings and data in the same + location as your installation, for example, on a USB drive. + +When AVAP TM Dev Studio starts up, it may launch a shell in + order to source the "shell environment" to help set up tools. + This will launch an interactive login shell and fetch its + environment. Depending on your shell setup, this may cause problems. For + example, it may be unexpected that the shell is launched as an interactive + session, which AVAP TM Dev Studio needs in order to try to align{' '} + `$PATH` with the exact value in a user created terminal. + +Whenever AVAP TM Dev Studio launches this initial shell, AVAP + TM Dev Studio sets the variable{' '} + `VSCODE\_RESOLVING\_ENVIRONMENT` to 1. If your shell or user + scripts need to know if they are being run in the context of this shell, + you can check the `VSCODE\_RESOLVING\_ENVIRONMENT` value. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md new file mode 100644 index 0000000..9c43205 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md @@ -0,0 +1,324 @@ +AVAP TM Dev Studio comes with a simple user interface and + convenient default layout. At the same time, AVAP TM Dev Studio + provides options and settings to let you customize the UI layout to suit + your preferences and work style. In this topic, we'll highlight + various UI customizations so you can display views, editors, and panels in + the way that's most productive for you. + +This article starts by discussing Workbench customizations to rearrange UI + elements such as the side bars, views, and panels. Later in the article, + we'll cover customization of the Editor region with editor groups, + split editors, and editor tabs. + +`` + +## Workbench + +### Primary side bar + +The default (Primary) side bar shows views such as the File + Explorer, Search, and Source Control on the left of the workbench. If + you'd prefer it on the right, you can: + +* Right-click the Activity bar and select{' '} Move Primary Side Bar Right . +* Run View: Toggle Primary Side Bar Position to switch the Primary side bar right and left. +* Set the Workbench > Side Bar: Location {' '} (workbench.sideBar.location) setting to right. + +### Secondary side bar + +By default, AVAP TM Dev Studio shows all views in the{' '} + Primary Side Bar located to the left of the editor + region. If you like another place to display views, you can open the{' '} + Secondary Side Bar to the right and drag and drop views + into that side bar. + +This can be useful if you'd like to see two views at the same time, + for example, the File Explorer on the left and Source Control view on the + right: + +To display the Secondary side bar, you can: + +* Run View: Toggle Secondary Side Bar Visibility {' '} (Ctrl+Alt+B). +* Check the View > Appearance >{' '} Secondary Side Bar menu item. + +The Secondary side bar is initially empty but you can drag and drop views + and panels into it and the layout is preserved across your AVAP + TM Dev Studio sessions. + +### Activity bar position + +By default, the Activity bar moves with the Primary side bar and remains + on the outer edge of the workbench. You can also choose to hide the + Activity bar or move it to the top of the Primary side bar. The{' '} + Activity Bar Position menu available from the Activity + bar context menu or under View >{' '} + Appearance has the options Side ,{' '} + Top , or Hidden . + +When the Activity bar is in the top position, the Account {' '} + and Manage buttons, usually at the bottom of the Activity + bar, move to the right side of the title bar. + +### Panel + +The Panel region displays UI elements such as the Problems, Terminal, and + Output panels and by default is located under the editor region. + +### Panel position + +You can also move the region to the left or right of the editor with the{' '} + Move Panel commands: + +* View: Move Panel Left ( `workbench.action.positionPanelLeft` ) +* View: Move Panel Right ( `workbench.action.positionPanelRight` ) +* View: Move Panel To Bottom ( `workbench.action.positionPanelBottom` ) + +You can configure these options in the menu under View {' '} + > Appearance > Panel Position , + Panel title bar context menu, or using the new{' '} + View: Move Panel commands. + +### Panel alignment + +This option lets you configure how far the bottom Panel spans across your + window. There are four options: + +* Center - This is the default behavior. The panel spans the width of the editor area only. +* Justify - The panel spans the full width of the window. +* Left - The panel spans from the left edge of the window to the right edge of the editor area. +* Right - The panel spans from the right edge of the window to the left edge of the editor area. + +With all Panel alignment options, the Activity Bar is considered the edge + of the window. + +You can configure these options in the menu under View {' '} + > Appearance > Align Panel , Panel + title context menu, or using the new{' '} + Set Panel Alignment to... commands. + +### Maximize Panel size + +When the Panel alignment is Center , you can quickly + toggle the Panel region to fill the entire editor area with the{' '} + Maximize Panel Size chevron button in the upper right of + the Panel region. The chevron button points downwards in the maximized + panel to restore the panel to the original size. + +You can also maximize the Panel region via the{' '} + View: Toggle Maximized Panel command. + +### Customize Layout control + +The AVAP TM Dev Studio title bar also has buttons to toggle the + visibility of the main UI elements (Side bars and Panel region). + +The rightmost button brings up the Customize Layout {' '} + dropdown, where you can further change the visibility and layout of + various UI elements and includes several layout modes: + +The layout modes are: + +* Full Screen - Set the editor to fill the full display screen. View: Toggle Full Screen ( `F11` ). +* Zen Mode - Hide all UI except for the editor area.{' '} View: Toggle Zen Mode ( `Ctrl+K Z` ). +* Centered Layout - Centers the editor inside the editor region. View: Toggle Centered Layout . + +### Drag and drop views and panels + +AVAP TM Dev Studio has a default layout of views and panels in + the Primary Side bar and Panel region but you can drag and drop views and + panels between these regions. For example, you can drag and drop the + Source Control view into the Panel region or put the Problems panel into + the Primary Side bar: + +You can also add views and panels to existing view or panel to create + groups. For example, you could move the Output panel to the Explorer view + group by dragging over the Explorer Activity bar item and then dropping + into the view: + +You are not limited to using the mouse for moving views and panels. You + can also customize layouts via the keyboard with the{' '} + View: Move View and{' '} + View: Move Focused View commands, where dropdowns let you + pick the UI element to move and the destination, either a location like + the Side bar or Panel region or an existing view or panel to create a + group. + +## Tool bars + +Most AVAP TM Dev Studio views and panels have tool bars + displayed on the top right of their UI. For example, the Search view has a + tool bar with actions such as Refresh ,{' '} + Clear Search Results , etc.: + +### Hide items in tool bars + +If you think a tool bar is too busy and you'd like to hide less + frequently used actions, you can right-click on any action and select its{' '} + Hide command (for example{' '} + Hide 'Clear Search Results' ) or uncheck any + of the actions from the dropdown. Hidden actions are moved to the ...{' '} + More Actions menu and can be invoked from there. + +To restore an action to the tool bar, right-click the tool bar button area + and select the Reset Menu command or recheck the hidden + action. To restore all menus in AVAP TM Dev Studio, run{' '} + View: Reset All Menus from the Command Palette + (Ctrl+Shift+P). + +## Editor + +You can customize the layout of the AVAP TM Dev Studio editor + region independently of the workbench user interface. By default, the + editor region displays useful features such as the minimap, breadcrumbs, + editor tabs, and has optional UI such as Sticky Scroll. You can also + adjust the layout of the editors themselves. + +### Minimap and breadcrumbs + +The View > Appearance menu has a + section for customizing the editor region. There you'll find toggles + for: + +* Minimap - A visual overview of your current file.{' '} View: Toggle Minimap . +* Breadcrumbs - Display folder, file, and current symbol information for the active file.{' '} View: Toggle Breadcrumbs . +* Sticky Scroll - Display nested symbol scopes in the active file. View: Toggle Sticky Scroll . + +### Editor groups + +By default, each opened editor goes into the same{' '} + editor group and adds a new editor tab to the right. You + can create new editor groups in order to group similar or related files, + or to allow side by side editing of the same file. Create a new editor + group by dragging an editor to the side, or using one of the{' '} + Split commands in the context menu to duplicate the + current editor into a new editor group to the left, right, above, or + below. + +The Split editor commands are also available from the{' '} + View > Editor Layout menu and through + the Command Palette. + +If you'd like to go quickly between vertical and horizontal editor + group layout, you can use the{' '} + Toggle Vertical/Horizontal Editor Layout command + (Shift+Alt+0). + +### Split in group + +You can also split an editor in the same group for side by side editing + with the View: Split Editor in Group command (Ctrl+K + Ctrl+Shift+). + +When using the split in group feature, there are specific commands for + toggling this mode and navigating between the two split editors: + +* View: Split Editor in Group - Split the current editor. +* View: Toggle Split Editor in Group - Toggle between split mode for the active editor. +* View: Join Editor in Group - Go back to a single editor for the active file. +* View: Toggle Layout of Split Editor in Group - Toggle between horizontal and vertical layout. + +To navigate between the sides: + +* View: Focus First Side in Active Editor - Move focus to the first (left or top) side of split editor. +* View: Focus Second Side in Active Editor - Move focus to the second (right or bottom) side. +* View: Focus Other Side in Active Editor - Toggle between the split editor sides. + +The Workbench > Editor: Split in Group Layout {' '} + (workbench.editor.splitInGroupLayout) setting lets you set the + preferred split editor layout to either horizontal (default) or + vertical. + +### Grid layout + +If you'd like more control over the editor group layout, you can use + the grid layout, where you can have multiple rows and columns of editor + groups visible. The View >{' '} + Editor Layout menu lists various editor layout options + (for example, Two Columns ,{' '} + Three Columns , Grid (2x2) ) + and you can adjust the group sizes by grabbing and moving the sash between + them. + +### Pinned tabs + +If you'd like an editor tab to always be visible, you can pin it to + the editor tab bar. You can pin an editor tab from either the context menu + or using the command View: Pin Editor (Ctrl+K + Shift+Enter). + +Pinned tabs help access files that are important to you as: + +* Pinned tabs always appear first before non-pinned tabs. +* They do not scroll out of view if you have many tabs opened. +* They do not close when using editor tab commands such as{' '} Close Others or Close All . +* They do not close even when you exceed a set limit of opened editors. + +Unpin an editor by clicking on the pin icon, using the{' '} + Unpin editor tab context menu item, or the{' '} + View: Unpin Editor command. + +You can choose how you'd like to display pinned editors with the{' '} + Workbench > Editor: Pinned Tab Sizing ( + `workbench.editor.pinnedTabSizing` ) setting. The options + are: + +* `normal` : A pinned tab inherits the look of other tabs (default) +* `shrink` : A pinned tab shrinks to a fixed size showing parts of the editor label. +* `compact` : A pinned tab will only show as icon or first letter of the editor label. + +You can also show pinned editor tabs on a separate row above the regular + editor tab bar by setting{' '} + Workbench > Editor: Pinned Tabs On Separate Row . You + can pin and unpin editors by dragging and dropping their tabs between the + two rows. + +### Locked editor groups + +When using multiple editors, it's common to have one or more that you + want to always keep visible. The locked editor group feature, where an + entire editor group is locked and visible, provides a stable display and + any request to open a new editor will create it in another group. You can + tell whether an editor group is locked by the lock icon in the editor + group tool bar. + +You can lock an editor group by selecting Lock Group from + the editor tool bar More Actions ... dropdown or running + the View: Lock Editor Group command. + +You can unlock an editor group by clicking on the lock icon or running the{' '} + View: Unlock Editor Group command. + +Locked groups behave differently than unlocked groups: + +* New editors will not open in a locked group unless explicitly moved there (for example, via drag and drop). +* If a new editor skips a locked group, it will either open in the most recently used unlocked group or create a new group to the side of the locked one. +* The locked state of an editor group is persisted and restored across restarts. +* You can lock empty groups as well, allowing for a more stable editor layout. + +The primary use case is for terminals in the editor area For example, you + might want to edit text on the left and have a terminal on the right that + is always visible. When a terminal editor is created and moved to the + side, it will automatically lock. This means that even when the terminal + on the right is focused, opening a file will open it on the left side + without needing to manually change focus first. + +Auto locking groups can be configured using the + workbench.editor.autoLockGroups setting, which defaults to only terminal + editors but any editor type can be added to get the same behavior. + +The commands related to editor group locking: + +* View: Lock Editor Group - Lock the active editor group. +* View: Unlock Editor Group - Unlock the active locked editor group. +* View: Toggle Editor Group Lock - Lock or unlock the active editor group. + +You must have more that one editor group for these commands to be + available. + +## Next steps + +Read on to find out about: + +* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md new file mode 100644 index 0000000..786357d --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md @@ -0,0 +1,698 @@ +One of the key features of AVAP TM Dev Studio is its great + debugging support. AVAP TM Dev Studio's built-in debugger + helps accelerate your edit, compile, and debug loop. + +## Debugger extensions + +AVAP TM Dev Studio has built-in debugging support for the + Node.js runtime and can debug JavaScript, TypeScript, or any other + language that gets transpiled to JavaScript. + +For debugging other languages and runtimes (including PHP, Ruby, Go, + C#, Python, C++, PowerShell and many others), look for{' '} + `Debuggers` extensions in the AVAP™ Dev Studio Marketplace or + select Install Additional Debuggers in the top-level Run menu. + +Below are several popular extensions which include debugging support: + +## Start debugging + +The following documentation is based on the built-in Node.js debugger, but + most of the concepts and features are applicable to other debuggers as + well. + +It is helpful to first create a sample Node.js application before reading + about debugging. You can follow the Node.js walkthrough to install Node.js + and create a simple "Hello World" JavaScript application ( + `app.js` ). Once you have a simple application set up, this + page will take you through AVAP TM Dev Studio debugging + features. + +## Run and Debug view + +To bring up the Run and Debug view, select the{' '} + Run and Debug icon in the Activity Bar {' '} + on the side of AVAP TM Dev Studio. You can also use the keyboard + shortcut Ctrl+Shift+D. + +The Run and Debug view displays all information related + to running and debugging and has a top bar with debugging commands and + configuration settings. + +If running and debugging is not yet configured (no + `launch.json` has been created), AVAP TM Dev + Studio shows the Run start view. + +## Run menu + +The top-level Run menu has the most common run and debug + commands: + +## Launch configurations + +To run or debug a simple app in AVAP TM Dev Studio, select{' '} + Run and Debug on the Debug start view or press F5 and + AVAP TM Dev Studio will try to run your currently active file. + +However, for most debugging scenarios, creating a launch configuration + file is beneficial because it allows you to configure and save debugging + setup details. AVAP TM Dev Studio keeps debugging configuration + information in a `launch.json` file located in a{' '} + `.vscode` folder in your workspace (project root + folder) or in your user settings or workspace settings. + +To create a launch.json file, click the{' '} + create a launch.json file link in the Run start view. + +AVAP TM Dev Studio will try to automatically detect your debug + environment, but if this fails, you will have to choose it manually: + +Here is the launch configuration generated for Node.js debugging: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"skipFiles": ["/\*\*"], + ` `"program": "${workspaceFolder}\\app.js" + ` `} + ` `] + + } +``` + +If you go back to the File Explorer view (Ctrl+Shift+E), + you'll see that AVAP TM Dev Studio has created a{' '} + `.vscode` folder and added the `launch.json` file to + your workspace. + +Note that the attributes available in launch configurations vary from + debugger to debugger. You can use IntelliSense suggestions + (Ctrl+Space) to find out which attributes exist for a specific + debugger. Hover help is also available for all attributes. + +Do not assume that an attribute that is available for one debugger + automatically works for other debuggers too. If you see red squiggles in + your launch configuration, hover over them to learn what the problem is + and try to fix them before launching a debug session. + +Review all automatically generated values and make sure that they make + sense for your project and debugging environment + +### Launch versus attach configurations + +In AVAP TM Dev Studio, there are two core debugging modes,{' '} + Launch and Attach , which handle two + different workflows and segments of developers. Depending on your + workflow, it can be confusing to know what type of configuration is + appropriate for your project. + +If you come from a browser Developer Tools background, you might not be + used to "launching from your tool," since your browser instance + is already open. When you open DevTools, you are simply{' '} + attaching DevTools to your open browser tab. On the other + hand, if you come from a server or desktop background, it's quite + normal to have your editor launch your process for you, + and your editor automatically attaches its debugger to the newly launched + process. + +The best way to explain the difference between launch and{' '} + attach is to think of a launch {' '} + configuration as a recipe for how to start your app in debug mode{' '} + before AVAP TM Dev Studio attaches to it, while + an attach configuration is a recipe for how to connect + AVAP TM Dev Studio's debugger to an app or process + that's already running. + +AVAP TM Dev Studio debuggers typically support launching a + program in debug mode or attaching to an already running program in debug + mode. Depending on the request (attach or launch), different + attributes are required, and AVAP TM Dev Studio's + launch.json validation and suggestions should help with that. + +### Add a new configuration + +To add a new configuration to an existing `launch.json` , use + one of the following techniques: + +* Use IntelliSense if your cursor is located inside the configurations array. +* Press the Add Configuration button to invoke snippet IntelliSense at the start of the array. +* Choose Add Configuration option in the Run menu. + +AVAP TM Dev Studio also supports compound launch configurations + for starting multiple configurations at the same time; for more details, + please read this section. + +In order to start a debug session, first select the configuration named{' '} + Launch Program using the{' '} + Configuration dropdown in the{' '} + Run and Debug view. Once you have your launch + configuration set, start your debug session with F5. + +Alternatively, you can run your configuration through the{' '} + Command Palette (Ctrl+Shift+P) by filtering on{' '} + Debug: Select and Start Debugging or typing 'debug + ' and selecting the configuration you want to debug. + +As soon as a debugging session starts, the DEBUG CONSOLE {' '} + panel is displayed and shows debugging output, and the Status Bar changes + color (orange for default color themes): + +In addition, the debug status appears in the Status Bar + showing the active debug configuration. By selecting the debug status, a + user can change the active launch configuration and start debugging + without needing to open the Run and Debug view. + +## Debug actions + +Once a debug session starts, the Debug toolbar will + appear on the top of the editor. + +### Run mode + +In addition to debugging a program, AVAP TM Dev Studio supports{' '} + running the program. The{' '} + Debug: Run (Start Without Debugging) action is + triggered with Ctrl+F5 and uses the currently selected launch + configuration. Many of the launch configuration attributes are supported + in 'Run' mode. AVAP TM Dev Studio maintains a debug + session while the program is running, and pressing the{' '} + Stop button terminates the program. + +## Breakpoints + +Breakpoints can be toggled by clicking on the{' '} + editor margin or using F9 on the current line. Finer + breakpoint control (enable/disable/reapply) can be done in the{' '} + Run and Debug view's BREAKPOINTS {' '} + section. + +* Breakpoints in the editor margin are normally shown as red filled circles. +* Disabled breakpoints have a filled gray circle. +* When a debugging session starts, breakpoints that cannot be registered with the debugger change to a gray hollow circle. The same might happen if the source is edited while a debug session without live-edit support is running. + +If the debugger supports breaking on different kinds of errors or + exceptions, those will also be available in the{' '} + BREAKPOINTS view. + +The Reapply All Breakpoints command sets all breakpoints + again to their original location. This is helpful if your debug + environment is "lazy" and "misplaces" breakpoints in + source code that has not yet been executed. + +Optionally, breakpoints can be shown in the editor's overview ruler by + enabling the setting `debug.showBreakpointsInOverviewRuler` : + +## Logpoints + +A Logpoint is a variant of a breakpoint that does not "break" + into the debugger but instead logs a message to the console. Logpoints are + especially useful for injecting logging while debugging production servers + that cannot be paused or stopped. + +A Logpoint is represented by a "diamond" shaped icon. Log + messages are plain text but can include expressions to be evaluated within + curly braces ('{}'). + +Just like regular breakpoints, Logpoints can be enabled or disabled and + can also be controlled by a condition and/or hit count. + +### Triggered breakpoints + +A trigged breakpoint is a breakpoint that is automatically enabled once + another breakpoint is hit. They can be very useful when diagnosing failure + cases in code that happen only after a certain precondition. + +Triggered breakpoints can be set by right-clicking on the glyph margin, + selecting Add Triggered Breakpoint , and then choosing + which other breakpoint enables the breakpoint. + +Triggered breakpoints work for all languages, and conditional breakpoints + may also be used as the trigger. + +## Data inspection + +Variables can be inspected in the VARIABLES section of + the Run and Debug view or by hovering over their source + in the editor. Variable values and expression evaluation are relative to + the selected stack frame in the CALL STACK section. + +Variable values can be modified with the Set Value action + from the variable's context menu. Additionally, you can use the{' '} + Copy Value action to copy the variable's value, or{' '} + Copy as Expression action to copy an expression to access + the variable. + +Variables and expressions can also be evaluated and watched in the{' '} + Run and Debug view's WATCH section. + +Variable names and values can be filtered by typing while the focus is on + the VARIABLES section. + +## Launch.json attributes + +There are many `launch.json` attributes to help support + different debuggers and debugging scenarios. As mentioned above, you can + use IntelliSense (Ctrl+Space) to see the list of available + attributes once you have specified a value for the `type` {' '} + attribute. + +The following attributes are mandatory for every launch configuration: + +* `type` - the type of debugger to use for this launch configuration. Every installed debug extension introduces a type: node for the built-in Node debugger, for example, or php and go for the PHP and Go extensions. +* `request` - the request type of this launch configuration. Currently, launch and attach are supported. +* `name` - the reader-friendly name to appear in the Debug launch configuration dropdown. + +Here are some optional attributes available to all launch configurations: + +* `presentation` - using the order, group, and hidden attributes in the presentation object, you can sort, group, and hide configurations and compounds in the Debug configuration dropdown and in the Debug quick pick. +* `preLaunchTask` - to launch a task before the start of a debug session, set this attribute to the label of a task specified in tasks.json (in the workspace's .vscode folder). Or, this can be set to ${defaultBuildTask} to use your default build task. +* `postDebugTask` - to launch a task at the very end of a debug session, set this attribute to the name of a task specified in tasks.json (in the workspace's .vscode folder). +* `internalConsoleOptions` - this attribute controls the visibility of the Debug Console panel during a debugging session. +* `debugServer` -{' '} for debug extension authors only : this attribute allows you to connect to a specified port instead of launching the debug adapter. +* `serverReadyAction` - if you want to open a URL in a web browser whenever the program under debugging outputs a specific message to the debug console or integrated terminal. For details see section Automatically open a URI when debugging a server program below. + +Many debuggers support some of the following attributes: + +* `program` - executable or file to run when launching the debugger +* `args` - arguments passed to the program to debug +* `env` - environment variables (the value null can be used to "undefine" a variable) +* `envFile` - path to dotenv file with environment variables +* `cwd` - current working directory for finding dependencies and other files +* `port` - port when attaching to a running process +* `stopOnEntry` - break immediately when the program launches +* `console` - what kind of console to use, for example,{' '} `internalConsole` , `integratedTerminal` , or{' '} `externalTerminal` + +## Variable substitution + +AVAP TM Dev Studio makes commonly used paths and other values + available as variables and supports variable substitution inside strings + in `launch.json` . This means that you do not have to use + absolute paths in debug configurations. For example,{' '} + `${workspaceFolder}` gives the root path of a + workspace folder, `${file}` the file open in the + active editor, and ${env:Name} the environment variable + 'Name'. You can see a full list of predefined variables in the + Variables Reference or by invoking IntelliSense inside the{' '} + `launch.json` string attributes. + +```javascript +{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${workspaceFolder}/app.js", + ` `"cwd": "${workspaceFolder}", + ` `"args": ["${env:USERNAME}"] + + } +``` + +## Platform-specific properties + +`Launch.json` supports defining values (for example, + arguments to be passed to the program) that depend on the operating + system where the debugger is running. To do so, put a platform-specific + literal into the `launch.json` file and specify the + corresponding properties inside that literal. + +Below is an example that passes " `args` " to the + program differently on Windows: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": + "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", + ` `"args": ["myFolder/path/app.js"], + ` `"windows": { + ` `"args": ["myFolder\\path\\app.js"] + ` `} + ` `} + ` `] + + } +``` + +Valid operating properties are " `windows` " for + Windows, " `linux` " for Linux, and " + `osx` " for macOS. Properties defined in an operating + system specific scope override properties defined in the global scope. + +Please note that the `type` property cannot be placed inside a + platform-specific section, because `type` indirectly determines + the platform in remote debugging scenarios, and that would result in a + cyclic dependency. + +In the example below, debugging the program always{' '} + stops on entry except on macOS: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": + "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", + ` `"stopOnEntry": true, + ` `"osx": { + ` `"stopOnEntry": false + ` `} + ` `} + ` `] + + } +``` + +## Global launch configuration + +AVAP TM Dev Studio supports adding a "launch" object + inside your User settings. This "launch" configuration will then + be shared across your workspaces. For example: + +```javascript +"launch": { + ` `"version": "0.2.0", + ` `"configurations": [{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${file}" + ` `}] + + } +``` + +## Advanced breakpoint topics + +### Conditional breakpoints + +A powerful AVAP TM Dev Studio debugging feature is the ability + to set conditions based on expressions, hit counts, or a combination of + both. + +* Expression condition : The breakpoint will be hit whenever the expression evaluates to `true` . +* Hit count : The 'hit count' controls how many times a breakpoint needs to be hit before it will 'break' execution. Whether a 'hit count' is respected and the exact syntax of the expression vary among debugger extensions. + +You can add a condition and/or hit count when creating a source breakpoint + (with the Add Conditional Breakpoint action) or + when modifying an existing one (with the{' '} + Edit Condition action). In both cases, an inline text + box with a dropdown menu opens where you can enter expressions: + +Condition and hit count editing support is also supported for{' '} + function and exception breakpoints. You + can initiate condition editing from the context menu or the new inline{' '} + Edit Condition action. + +An example of condition editing in the BREAKPOINTS view: + +If a debugger does not support conditional breakpoints, the{' '} + Add Conditional Breakpoint and{' '} + Edit Condition actions will be missing. + +### Inline breakpoints + +Inline breakpoints will only be hit when the execution reaches the column + associated with the inline breakpoint. This is particularly useful when + debugging minified code which contains multiple statements in a single + line. + +An inline breakpoint can be set using Shift+F9 or through the context menu + during a debug session. Inline breakpoints are shown inline in the editor. + +Inline breakpoints can also have conditions. Editing multiple breakpoints + on a line is possible through the context menu in the editor's left + margin. + +### Function breakpoints + +Instead of placing breakpoints directly in source code, a debugger can + support creating breakpoints by specifying a function name. This is useful + in situations where source is not available but a function name is known. + +A function breakpoint is created by pressing the + button + in the BREAKPOINTS section header and entering the + function name. Function breakpoints are shown with a red triangle in the{' '} + BREAKPOINTS section. + +### Data breakpoints + +If a debugger supports data breakpoints, they can be set from the context + menu in the VARIABLES view. The{' '} + Break on Value Change/Read/Access commands will add a + data breakpoint that is hit when the value of the underlying variable + changes/is read/is accessed. Data breakpoints are shown with a red hexagon + in the BREAKPOINTS section. + +## Debug Console REPL + +Expressions can be evaluated with the Debug Console REPL + (Read-Eval-Print Loop) feature. To open the Debug Console, use the{' '} + Debug Console action at the top of the Debug pane or use + the View: Debug Console command (Ctrl+Shift+Y). + Expressions are evaluated after you press Enter and the Debug Console REPL + shows suggestions as you type. If you need to enter multiple lines, use + Shift+Enter between the lines and then send all lines for evaluation with + Enter. Debug Console input uses the mode of the active editor, which means + that the Debug Console input supports syntax coloring, indentation, auto + closing of quotes, and other language features. + +## Redirect input/output to/from the debug target + +Redirecting input/output is debugger/runtime specific, so AVAP + TM Dev Studio does not have a built-in solution that works for + all debuggers. + +Here are two approaches you might want to consider: + +Here's an example `launch.json` configuration: + +```javascript +{ + ` `"name": "launch program that reads a file from stdin", + ` `"type": "node", + ` `"request": "launch", + ` `"program": "program.js", + ` `"console": "integratedTerminal", + ` `"args": ["<", "in.txt"] + + } +``` + +This approach requires that the "<" syntax is passed through + the debugger extension and ends up unmodified in the Integrated Terminal. + +## Multi-target debugging + +For complex scenarios involving more than one process (for example, a + client and a server), AVAP TM Dev Studio supports + multi-target debugging. + +Using multi-target debugging is simple: after you've started a first + debug session, you can just launch another session. As soon as a second + session is up and running, the AVAP TM Dev Studio UI switches to{' '} + multi-target mode : + +* The individual sessions now show up as top-level elements in the{' '} CALL STACK view. +* The debug toolbar shows the currently active session {' '} (and all other sessions are available in a dropdown menu). +* Debug actions (for example, all actions in the debug toolbar) are performed on the active session. The active session can be changed either by using the dropdown menu in the debug toolbar or by selecting a different element in the CALL STACK view. + +### Compound launch configurations + +An alternative way to start multiple debug sessions is by using a{' '} + compound launch configuration. A compound launch + configuration lists the names of two or more launch configurations that + should be launched in parallel. Optionally a preLaunchTask can be + specified that is run before the individual debug sessions are started. + The boolean flag stopAll controls whether manually terminating one session + will stop all of the compound sessions. + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Server", + ` `"program": "${workspaceFolder}/server.js" + ` `}, + ` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Client", + ` `"program": "${workspaceFolder}/client.js" + ` `} + ` `], + ` `"compounds": [` `{ + ` `"name": "Server/Client", + ` `"configurations": ["Server", "Client"], + ` `"preLaunchTask": "${defaultBuildTask}", + ` `"stopAll": true + ` `} + ` `] + + } +``` + +Compound launch configurations are displayed in the launch configuration + dropdown menu. + +## Remote debugging + +AVAP TM Dev Studio does not itself support remote debugging: + this is a feature of the debug extension you are using, and you should + consult the extension's page in the Marketplace for support and + details. + +There is, however, one exception: the Node.js debugger included in AVAP + TM Dev Studio supports remote debugging. See the Node.js + Debugging topic to learn how to configure this. + +## Automatically open a URI when debugging a server program + +Developing a web program typically requires opening a specific URL in a + web browser in order to hit the server code in the debugger. AVAP + TM Dev Studio has a built-in feature " + serverReadyAction " to automate this task. + +Here is an example of a simple Node.js Express application: + +```javascript +var express = require('express'); + + var app = express(); + + + app.get('/', function(req, res) { + ` `res.send('Hello World!'); + + }); + + + app.listen(3000, function() { + ` `console.log('Example app listening on port 3000!'); + + }); +``` + +This application first installs a "Hello World" handler for the + "/" URL and then starts to listen for HTTP connections on port + 3000. The port is announced in the Debug Console, and typically, the + developer would now type (LINK) into their browser application. + +The serverReadyAction feature makes it possible to add a + structured property `serverReadyAction` to any launch config + and select an "action" to be performed: + +```javascript +{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${workspaceFolder}/app.js", + + ` `"serverReadyAction": { + ` `"pattern": "listening on port ([0-9]+)", + ` `"uriFormat": "(LINK)", + ` `"action": "openExternally" + ` `} + + } +``` + +Here the `pattern` property describes the regular expression + for matching the program's output string that announces the port. The + pattern for the port number is put into parenthesis so that it is + available as a regular expression capture group. In this example, we are + extracting only the port number, but it is also possible to extract a full + URI. + +The `uriFormat` property describes how the port number is + turned into a URI. The first %s is substituted by the first capture group + of the matching pattern. + +The resulting URI is then opened outside of AVAP TM Dev Studio + ("externally") with the standard application configured + for the URI's scheme. + +### Trigger Debugging via Edge or Chrome + +Alternatively, the action can be set to debugWithEdge or debugWithChrome. + In this mode, a webRoot property can be added that is passed to the Chrome + or Edge debug session. + +To simplify things a bit, most properties are optional and we use the + following fallback values: + +* pattern :{' '} `"listening on.\* (https?://\\S+|[0-9]+)"` {' '} which matches the commonly used messages "listening on port 3000" or "Now listening on: (LINK)". +* uriFormat : "(LINK)" +* webRoot :{' '} `"${workspaceFolder}"` + +### Triggering an Arbitrary Launch Config + +In some cases, you may need to configure additional options for the + browser debug session--or use a different debugger entirely. You can do + this by setting `action` to `startDebugging` with a{' '} + `name` property set to the name of the launch configuration to + start when the `pattern` is matched. + +The named launch configuration must be in the same file or folder as the + one with the `serverReadyAction` . + +Here the serverReadyAction feature in action: + +## Next steps + +To learn about AVAP TM Dev Studio's Node.js debugging + support, take a look at: + +* Node.js - Describes the Node.js debugger, which is included in AVAP TM Dev Studio. +* TypeScript - The Node.js debugger also supports TypeScript debugging. + +To see tutorials on the basics of Node.js debugging, check out these + videos: + +* Intro Video - Debugging - Showcases the basics of debugging. +* Getting started with Node.js debugging - Shows how to attach a debugger to a running Node.js process. + +To learn about debugging support for other programming languages via AVAP + TM Dev Studio extensions: + +* C++ +* Python +* Java + +To learn about AVAP TM Dev Studio's task running support, go + to: + +* Tasks - Describes how to run tasks with Gulp, Grunt, and Jake and how to show errors and warnings. + +To write your own debugger extension, visit: + +* Debugger Extension - Uses a mock sample to illustrate the steps required to create a AVAP TM Dev Studio debug extension. + +## Common questions + +### What are the supported debugging scenarios? + +Debugging of Node.js-based applications is supported on Linux, macOS, and + Windows out of the box with AVAP TM Dev Studio. Many other + scenarios are supported by AVAP TM Dev Studio extensions + available in the Marketplace. + +### I do not see any launch configurations in the Run and Debug view dropdown. + What is wrong? + +The most common problem is that you did not set up launch.json or there is + a syntax error in that file. Alternatively, you might need to open a + folder, since no-folder debugging does not support launch configurations. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md new file mode 100644 index 0000000..f18d156 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md @@ -0,0 +1,376 @@ +Support for Emmet snippets and expansion is built right into AVAP + TM Dev Studio, no extension required . Emmet + 2.0 has support for the majority of the Emmet Actions including expanding + Emmet abbreviations and snippets. + +## How to expand Emmet abbreviations and snippets + +Emmet abbreviation and snippet expansions are enabled by default in{' '} + `html` , `haml` , `pug` , `slim` ,{' '} + `jsx` , `xml` , `xsl` , `css` ,{' '} + `scss` , `sass` , `less` and{' '} + `stylus` files, as well as any language that inherits from any + of the above like `handlebars` and `php` . + +When you start typing an Emmet abbreviation, you will see the abbreviation + displayed in the suggestion list. If you have the suggestion documentation + fly-out open, you will see a preview of the expansion as you type. If you + are in a stylesheet file, the expanded abbreviation shows up in the + suggestion list sorted among the other CSS suggestions. + +### Using Tab for Emmet expansions + +If you want to use the Tab key for expanding the Emmet abbreviations, add + the following setting: + +```javascript +"emmet.triggerExpansionOnTab": true +``` + +This setting allows using the Tab key for indentation when text is not an + Emmet abbreviation. + +### Emmet when quickSuggestions are disabled + +If you have disabled the `editor.quickSuggestions setting` , you + won't see suggestions as you type. You can still trigger suggestions + manually by pressing `Ctrl+Space` and see the preview. + +### Disable Emmet in suggestions + +If you don't want to see Emmet abbreviations in suggestions at all, + then use the following setting: + +```javascript +"emmet.showExpandedAbbreviation": "never" +``` + +You can still use the command Emmet: Expand Abbreviation {' '} + to expand your abbreviations. You can also bind any keyboard shortcut to + the command id `editor.emmet.action.expandAbbreviation` as + well. + +### Emmet suggestion ordering + +To ensure Emmet suggestions are always on top in the suggestion list, add + the following settings: + +```javascript +"emmet.showSuggestionsAsSnippets": true, + + "editor.snippetSuggestions": "top" +``` + +## Emmet abbreviations in other file types + +To enable the Emmet abbreviation expansion in file types where it is not + available by default, use the `emmet.includeLanguages setting` . + Make sure to use language identifiers for both sides of the mapping, with + the right side being the language identifier of an Emmet supported + language (see the list above). + +For example: + +```javascript +"emmet.includeLanguages": { + ` `"javascript": "javascriptreact", + ` `"razor": "html", + ` `"plaintext": "pug" + + } +``` + +Emmet has no knowledge of these new languages, and so there might be Emmet + suggestions showing up in non HTML/CSS contexts. To avoid this, you can + use the following setting. + +```javascript +"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFilesOnly" +``` + +## Emmet with multi-cursors + +You can use most of the Emmet actions with multi-cursors as well: + +## Using filters + +Filters are special post-processors that modify the expanded abbreviation + before it is output to the editor. There are 2 ways to use filters; either + globally through the `emmet.syntaxProfiles` setting or directly + in the current abbreviation. + +Below is an example of the first approach using the{' '} + `emmet.syntaxProfiles` setting to apply the `bem` {' '} + filter for all the abbreviations in HTML files: + +```javascript +"emmet.syntaxProfiles": { + ` `"html": { + ` `"filters": "bem" + ` `} + + } +``` + +To provide a filter for just the current abbreviation, append the filter + to your abbreviation. For example, div#page|c will apply the comment + filter to the div#page abbreviation. + +### BEM filter (bem) + +If you use the Block Element Modifier (BEM) way of writing HTML, + then `bem` filters are very handy for you to use. To learn more + about how to use `bem` filters, read BEM filter in Emmet. + +You can customize this filter by using the{' '} + `bem.elementSeparator` and `bem.modifierSeparator` {' '} + preferences as documented in Emmet Preferences. + +### Comment filter (c) + +This filter adds comments around important tags. By default, + "important tags" are those tags with id and/or class attribute. + +For example `div>div#page>p.title+p|c` will be expanded + to: + +```javascript +
+ ` `
+ ` `

+ ` ` + ` `

+ ` `
+ ` ` + +
+``` + +You can customize this filter by using the{' '} + `filter.commentTrigger` , `filter.commentAfter` and{' '} + `filter.commentBefore` preferences as documented in Emmet + Preferences. + +The format for the `filter.commentAfter` preference is + different in AVAP TM Dev Studio Emmet 2.0. + +For example, instead of: + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +in AVAP TM Dev Studio, you would use a simpler: + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +### Trim filter (t) + +This filter is applicable only when providing abbreviations for the{' '} + Emmet: Wrap with Abbreviation command. It removes line + markers from wrapped lines. + +## Using custom Emmet snippets + +Custom Emmet snippets need to be defined in a json file named{' '} + `snippets.json` . The `emmet.extensionsPath` setting + should have the path to the directory containing this file. + +Below is an example for the contents of this `snippets.json` {' '} + file. + +```javascript +{ + ` `"html": { + ` `"snippets": { + ` `"ull": "ul>li[id=${1} class=${2}]\*2{ + Will work with html, pug, haml and slim }", + ` `"oll": "
  1. + Will only work in html
", + ` `"ran": "{ Wrap plain text in curly braces }" + ` `} + ` `}, + ` `"css": { + ` `"snippets": { + ` `"cb": "color: black", + ` `"bsd": "border: 1px solid ${1:red}", + ` `"ls": "list-style: ${1}" + ` `} + ` `} + + } +``` + +Authoring of Custom Snippets in Emmet 2.0 via the{' '} + `snippets.json` file differs from the old way of doing the same + in a few ways: + +### HTML Emmet snippets + +HTML custom snippets are applicable to all other markup flavors like{' '} + `haml` or `pug` . When snippet value is an + abbreviation and not actual HTML, the appropriate transformations can be + applied to get the right output as per the language type. + +For example, for an unordered list with a list item, if your snippet value + is ul>li, you can use the same snippet in `html` ,{' '} + `haml` , `pug` or `slim` , but if your + snippet value is `
` , + then it will work only in `html` files. + +If you want a snippet for plain text, then surround the text with + {}. + +### CSS Emmet snippets + +Values for CSS Emmet snippets should be a complete property name and value + pair. + +CSS custom snippets are applicable to all other stylesheet flavors like{' '} + `scss` , `less` or `sass` . Therefore, + don't include a trailing ; at the end of the snippet value. Emmet will + add it as needed based on whether the language requires it. + +Do not use : in the snippet name. : is used to separate property name and + value when Emmet tries to fuzzy match the abbreviation to one of the + snippets. + +### Tab stops and cursors in custom snippets + +The syntax for tab stops in custom Emmet snippets follows the Textmate + snippets syntax. + +* Use `${1}` , `${2}` for tab stops and `${1:placeholder}` for tab stops with placeholders. +* Previously, | or ${cursor} was used to denote the cursor location in the custom Emmet snippet. This is no longer supported. Use{' '} `${1}` instead. + +## Emmet configuration + +Below are Emmet settings that you can use to customize your Emmet + experience in AVAP TM Dev Studio. + +* `emmet.includeLanguages` Use this setting to add mapping between the language of your choice and one of the Emmet supported languages to enable Emmet in the former using the syntax of the latter. Make sure to use language IDs for both sides of the mapping. For example: ` "emmet.includeLanguages": { ` `"javascript": "javascriptreact", ` `"plaintext": "pug" } ` +* `emmet.excludeLanguages` If there is a language where you do not want to see Emmet expansions, add it in this setting which takes an array of language ID strings. +* `emmet.syntaxProfiles` See Emmet Customization of output profile to learn how you can customize the output of your HTML abbreviations. For example: ` "emmet.syntaxProfiles": { ` `"html": { ` `"attr\_quotes": "single" ` `}, ` `"jsx": { ` `"self\_closing\_tag": true ` `} } ` +* `emmet.variables` Customize variables used by Emmet snippets. For example: "emmet.variables": { ` ` `"lang": "de", ` `"charset": "UTF-16" } ` +* `emmet.showExpandedAbbreviation` Controls the Emmet suggestions that show up in the suggestion/completion list. + +* `emmet.showAbbreviationSuggestions` Shows possible emmet abbreviations as suggestions. It is{' '} `true` by default. For example, when you type `li` , you get suggestions for all emmet snippets starting with `li` like{' '} `link` , `link:css` , `link:favicon` {' '} etc. This is helpful in learning Emmet snippets that you never knew existed unless you knew the Emmet cheatsheet by heart. Not applicable in stylesheets or when{' '} `emmet.showExpandedAbbreviation` is set to never. +* `emmet.extensionsPath` Provide the location of the directory that houses the{' '} `snippets.json` file which in turn has your custom snippets. +* `emmet.triggerExpansionOnTab` Set this to true to enable expanding Emmet abbreviations with Tab key. We use this setting to provide the appropriate fallback to provide indentation when there is no abbreviation to expand. +* `emmet.showSuggestionsAsSnippets` If set to true, then Emmet suggestions will be grouped along with other snippets allowing you to order them as per{' '} `editor.snippetSuggestions` setting. Set this to true and{' '} `editor.snippetSuggestions` to `top` , to ensure that Emmet suggestions always show up on top among other suggestions. +* `emmet.preferences` You can use this setting to customize Emmet as documented in Emmet Preferences. The below customizations are currently supported: `css.propertyEnd` `css.valueSeparator` `sass.propertyEnd` `sass.valueSeparator` `stylus.propertyEnd` `stylus.valueSeparator` `css.unitAliases` `css.intUnit` `css.floatUnit` `bem.elementSeparator` `bem.modifierSeparator` `filter.commentBefore` `filter.commentTrigger` `filter.commentAfter` `format.noIndentTags` `format.forceIndentationForTags` `profile.allowCompactBoolean` `css.fuzzySearchMinScore` +* `css.propertyEnd` +* `css.valueSeparator` +* `sass.propertyEnd` +* `sass.valueSeparator` +* `stylus.propertyEnd` +* `stylus.valueSeparator` +* `css.unitAliases` +* `css.intUnit` +* `css.floatUnit` +* `bem.elementSeparator` +* `bem.modifierSeparator` +* `filter.commentBefore` +* `filter.commentTrigger` +* `filter.commentAfter` +* `format.noIndentTags` +* `format.forceIndentationForTags` +* `profile.allowCompactBoolean` +* `css.fuzzySearchMinScore` + +The format for the `filter.commentAfter` preference is + different and simpler in Emmet 2.0. + +For example, instead of the older format + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +you would use + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +If you want support for any of the other preferences as documented in + Emmet Preferences, please log a feature request. + +## Next steps + +Emmet is just one of the great web developer features in AVAP TM {' '} + Dev Studio. Read on to find out about: + +* HTML - AVAP TM Dev Studio supports HTML with IntelliSense, closing tags, and formatting. +* CSS - We offer rich support for CSS, SCSS and Less. + +## Troubleshooting + +### Custom tags do not get expanded in the suggestion list + +Custom tags when used in an expression like `MyTag>YourTag` {' '} + or `MyTag.someclass` do show up in the suggestion list. But + when these are used on their own like `MyTag` , they do not + appear in the suggestion list. This is designed so to avoid noise in the + suggestion list as every word is a potential custom tag. + +Add the following setting to enable expanding of Emmet abbreviations using + tab which will expand custom tags in all cases. + +```javascript +"emmet.triggerExpansionOnTab": true +``` + +### My HTML snippets ending with + do not work + +HTML snippets ending with `+` like `select+` and{' '} + `ul+` from the Emmet cheatsheet are not supported. This is a + known issue in Emmet 2.0 Issue: emmetio/html-matcher#1. A workaround is to + create your own custom Emmet snippets for such scenarios. + +### Abbreviations are failing to expand + +First, check if you're using custom snippets (if there is a{' '} + `snippets.json` file being picked up by the{' '} + `emmet.extensionsPath` setting). The format of custom + snippets changed in AVAP TM Dev Studio release 1.53. Instead of + using | to indicate where the cursor position is, use tokens such as{' '} + `${1}` , `${2}` , etc. instead. + The default CSS snippets file from the `emmetio/emmet` {' '} + repository shows examples of the new cursor position format. + +If abbreviations are still failing to expand: + +* Check the builtin extensions to see if Emmet has been disabled. +* Try restarting the extension host by running the{' '} Developer: Restart Extension Host ( `workbench.action.restartExtensionHost` ) command in the Command Palette. + +### Where can I set all the preferences as documented in Emmet preferences? + +You can set the preferences using the setting{' '} + `emmet.preferences` . Only a subset of the preferences that are + documented in Emmet preferences can be customized. Please read the + preferences section under Emmet configuration. + +### Any tips and tricks? + +Of course! + +* In CSS abbreviations, when you use :, the left part is used to fuzzy match with the CSS property name and the right part is used to match with CSS property value. Take full advantage of this by using abbreviations like `pos:f` , `trf:rx` ,{' '} `fw:b` , etc. +* Explore all other Emmet features as documented in Emmet Actions. +* Don't hesitate to create your own custom Emmet snippets.rkdown Viewer and Editor diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md new file mode 100644 index 0000000..1e144ea --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md @@ -0,0 +1,532 @@ +Increase the power of AVAP TM Dev Studio through Extensions + +The features that AVAP TM Dev Studio includes out-of-the-box are + just the start. AVAP TM Dev Studio extensions let you add + languages, debuggers, and tools to your installation to support your + development workflow. AVAP TM Dev Studio's rich + extensibility model lets extension authors plug directly into the AVAP + TM Dev Studio UI and contribute functionality through the same + APIs used by AVAP TM Dev Studio. This article explains how to + find, install, and manage AVAP TM Dev Studio extensions from the + AVAP TM Dev Studio Marketplace. + +## Browse for extensions + +You can browse and install extensions from within AVAP TM Dev + Studio. Bring up the Extensions view by clicking on the Extensions icon in + the Activity Bar on the side of AVAP TM Dev + Studio or the View: Extensions command + (Ctrl+Shift+X). + +This will show you a list of the most popular AVAP TM Dev Studio + extensions on the AVAP TM Dev Studio Marketplace. + +Each extension in the list includes a brief description, the publisher, + the download count, and a five star rating. You can select the extension + item to display the extension's details page where you can learn more. + +Note: If your computer's Internet access goes through + a proxy server, you will need to configure the proxy server. See Proxy + server support for details. + +## Install an extension + +To install an extension, select the Install button. Once + the installation is complete, the Install button will + change to the Manage gear button. + +### Find and install an extension + +For example, let's install the popular TODO Highlight extension. This + extension highlights text like 'TODO:' and 'FIXME:' in + your source code so you can quickly find undone sections. + +In the Extensions view ( `Ctrl+Shift+X` ), type + 'todo' in the search box to filter the Marketplace offerings to + extensions with 'todo' in the title or metadata. You should see + the TODO Highlight extension in the list. + +An extension is uniquely identified by its publisher and extension IDs. If + you select the TODO Highlight extension, you will see the + Extension details page, where you can find the extension ID, in this case, + wayou.vscode-todo-highlight. Knowing the extension ID can be helpful if + there are several similarly named extensions. + +Select the Install button, and AVAP TM Dev + Studio will download and install the extension from the Marketplace. When + the installation is complete, the Install button will be + replaced with a Manage gear button. + +To see the TODO Highlight extension in action, open any source code file + and add the text 'TODO:' and you will see the text highlighted. + +The TODO Highlight extension contributes the commands,{' '} + TODO-Highlight: List highlighted annotations and{' '} + TODO-Highlight: Toggle highlight , that you can find in + the Command Palette (Ctrl+Shift+P). The{' '} + TODO-Highlight: Toggle highlight command lets you quickly + disable or enable highlighting. + +The extension also provides settings for tuning its behavior, which you + can find in the Settings editor (Ctrl+,). For example, you might + want the text search to be case insensitive and you can uncheck the{' '} + Todohighlight: Is Case Sensitive setting. + +If an extension doesn't provide the functionality you want, you can + always Uninstall the extension from the{' '} + Manage button context menu. + +This has been just one example of how to install and use an extension. The + AVAP TM Dev Studio Marketplace has thousands of extensions + supporting hundreds of programming languages and tasks. Everything from + full featured language support for [Java], [Python], [Go], and [C++] to + simple extensions that [create GUIDs], change the [color theme], or add + [virtual pets] to the editor. + +### Extension details + +On the extension details page, you can read the extension's README and + review the extension's: + +* Feature Contributions - The extension's additions to AVAP TM Dev Studio such as settings, commands and keyboard shortcuts, language grammars, debugger, etc. +* Changelog - The extension repository CHANGELOG if available. +* Dependencies - Lists if the extension depends on any other extensions. + +If an extension is an Extension Pack, the Extension Pack {' '} + section will display which extensions will be installed when you install + the pack.{' '} + + Extension Packs + {' '} + bundle separate extensions together so they can be easily installed at one + time. + +### Extensions view filter and commands + +You can filter the Extensions view with the{' '} + Filter Extensions context menu. + +There are filters to show: + +* The list of outdated extensions that can be updated +* The list of currently enabled/disabled extensions +* The list of recommended extensions based on your workspace +* The list of globally popular extensions + +You can sort the extension list by Install Count ,{' '} + Rating , Name ,{' '} + Published Date , or Updated Date in + either ascending or descending order. You can learn more about extension + search filters below . + +You can run additional Extensions view commands via the ...{' '} + View and More Actions button. + +Through this context menu you can control extension updates, enable or + disable all extensions, and use the{' '} + + Extension Bisect + {' '} + utility to isolate problematic extension behavior. + +### Search for an extension + +You can clear the Search box at the top of the Extensions view and type in + the name of the extension, tool, or programming language you're + looking for. + +For example, typing 'python' will bring up a list of Python + language extensions: + +If you know the exact identifier for an extension you're looking for, + you can use the @id: prefix, for example @id:vue.volar. Additionally, to + filter or sort results, you can use the{' '} + filter and{' '} + sort commands, detailed below. + +## Manage extensions + +AVAP TM Dev Studio makes it easy to manage your extensions. You + can install, disable, update, and uninstall extensions through the + Extensions view, the Command Palette (commands have + the Extensions: prefix) or command-line switches. + +### List installed extensions + +By default, the Extensions view will show the extensions you currently + have installed, and all extensions that are recommended for you. You can + use the Extensions: Focus on Installed View command, + available in the Command Palette (Ctrl+Shift+P) + or in the More Actions (...) dropdown menu >{' '} + Views > Installed , to clear any text + in the search box and show the list of all installed extensions, which + includes those that have been disabled. + +### Uninstall an extension + +To uninstall an extension, select the Manage gear button + at the right of an extension entry and then choose{' '} + Uninstall from the dropdown menu. This will uninstall the + extension and prompt you to reload AVAP TM Dev Studio. + +### Disable an extension + +If you don't want to permanently remove an extension, you can instead + temporarily disable the extension by clicking the gear button at the right + of an extension entry. You can disable an extension globally or just for + your current Workspace. You will be prompted to reload AVAP TM {' '} + Dev Studio after you disable an extension. + +If you want to quickly disable all installed extensions, there is a{' '} + Disable All Installed Extensions command in the{' '} + Command Palette and More Actions {' '} + (...) dropdown menu. + +Extensions remain disabled for all AVAP TM Dev Studio sessions + until you re-enable them. + +### Enable an extension + +Similarly if you have disabled an extension (it will be in the{' '} + Disabled section of the list and marked{' '} + + Disabled + + ), you can re-enable it with the Enable or{' '} + Enable (Workspace) commands in the dropdown menu. + +There is also an Enable All Extensions command in the{' '} + More Actions (...) dropdown menu. + +### Extension auto-update + +AVAP TM Dev Studio checks for extension updates and installs + them automatically. After an update, you will be prompted to reload AVAP + TM Dev Studio. If you'd rather update your extensions + manually, you can disable auto-update with the{' '} + Disable Auto Updating Extensions command that sets the + extensions.autoUpdate setting to + false. + +If you don't want AVAP TM Dev Studio to even check for + updates, you can set the extensions.autoCheckUpdates setting to false. + +### Update an extension manually + +If you have extensions auto-update disabled, you can quickly look for + extension updates by using the Show Outdated Extensions {' '} + command that uses the @updates filter. This will display any available + updates for your currently installed extensions. + +Select the Update button for the outdated extension. The + update will be installed, and you'll be prompted to reload AVAP + TM Dev Studio. You can also update all your outdated extensions + at one time with the Update All Extensions command. + +If you also have automatic checking for updates disabled, you can use the{' '} + Check for Extension Updates command to check which of + your extensions can be updated. + +## Recommended extensions + +You can see a list of recommended extensions using{' '} + Show Recommended Extensions , which sets the @recommended{' '} + filter . Extension recommendations + can either be: + +* Workspace Recommendations - Recommended by other users of your current workspace. +* Other Recommendations - Recommended based on recently opened files. + +See the section below to learn how to{' '} + contribute {' '} + recommendations for other users in your project. + +### Ignoring recommendations + +To dismiss a recommendation, select on the extension item to open the + Details page and then select the Manage gear button to + display the context menu. Select the{' '} + Ignore Recommendation menu item. Ignored recommendations + will no longer be recommended to you. + +## Configuring extensions + +AVAP TM Dev Studio extensions may have very different + configurations and requirements. Some extensions contribute settings to + AVAP TM Dev Studio, which can be modified in the Settings + editor. Other extensions may have their own configuration files. + Extensions may also require installation and setup of additional + components like compilers, debuggers, and command-line tools. Consult the + extension's README (visible in the Extensions view details + page) or go to the extension page on the AVAP TM Dev Studio + Marketplace (click on the extension name in the details page). + Many extensions are open source and have a link to their repository on + their Marketplace page. + +## Command line extension management + +To make it easier to automate and configure AVAP TM Dev Studio, + it is possible to list, install, and uninstall extensions from the command + line. When identifying an extension, provide the full name of the form + publisher.extension, for example ms-python.python. + +Example: + +```javascript +code --extensions-dir + + Set the root path for extensions. + + + code --list-extensions + + List the installed extensions. + + + code --show-versions + + Show versions of installed extensions, when using + --list-extension. + + + code --install-extension ( | + ) + + Installs an extension. + + + code --uninstall-extension ( | + ) + + Uninstalls an extension. + + + code --enable-proposed-api () + + Enables proposed API features for extensions. Can receive one or + more extension IDs to enable individually. +``` + +You can see the extension ID on the extension details page under the + Marketplace Info. + +## Extensions view filters + +The Extensions view search box supports filters to help you find and + manage extensions. You may have seen filters such as @installed and + @recommended if you used the commands{' '} + Show Installed Extensions and{' '} + Show Recommended Extensions . Also, there are filters + available to let you sort by popularity or ratings and search by category + (for example 'Linters') and tags (for example + 'node'). You can see a complete listing of all filters and + sort commands by typing @ in the extensions search box and navigating + through the suggestions: + +Here are the Extensions view filters: + +* `@builtin` - Show extensions that come with AVAP TM {' '} Dev Studio. Grouped by type (Programming Languages, Themes, etc.). +* `@disabled` - Show disabled installed extensions. +* `@installed` - Show installed extensions. +* `@outdated` - Show outdated installed extensions. A newer version is available on the Marketplace. +* `@enabled` - Show enabled installed extensions. Extensions can be individually enabled/disabled. +* `@recommended` - Show recommended extensions. Grouped as Workspace specific or general use. +* `@category` - Show extensions belonging to specified category. Below are a few of supported categories. For a complete list, type @category and follow the options in the suggestion list:{' '} @category:themes @category:formatters @category:linters @category:snippets +* @category:themes +* @category:formatters +* @category:linters +* @category:snippets + +These filters can be combined as well. For example: Use @installed + @category:themes to view all installed themes. + +If no filter is provided, the Extensions view displays the currently + installed and recommended extensions. + +### Sorting + +You can sort extensions with the @sort filter, which can take the + following values: + +* `installs` - Sort by Marketplace installation count, in descending order. +* `name` - Sort alphabetically by extension name. +* `publishedDate` - Sort by extension published date. +* `rating` - Sort by Marketplace rating (1-5 stars), in descending order. +* `updateDate` - Sort by extension last update name. + +### Categories and tags + +Extensions can set Categories and Tags {' '} + describing their features. + +You can filter on category and tag by using category: and tag:. + +Supported categories are:{' '} + ` + [Azure, Data Science, Debuggers, Education, Extension Packs, Formatters, + Keymaps, Language Packs, Linters, Machine Learning, Notebooks, Others, + Programming Languages, SCM Providers, Snippets, Testing, Themes, + Visualization] + ` + . They can be accessed through IntelliSense in the extensions search box: + +Note that you must surround the category name in quotes if it is more than + one word (for example, `category:"SCM Providers"` + ). + +Tags may contain any string and are not provided by IntelliSense, so + review the Marketplace to find helpful tags. + +## Install from a VSIX + +You can manually install a AVAP TM Dev Studio extension packaged + in a `.vsix` file. Using the Install from VSIX {' '} + command in the Extensions view command dropdown, or the{' '} + Extensions: Install from VSIX command in the{' '} + Command Palette , point to the `.vsix` file. + +You can also install using the AVAP TM Dev Studio{' '} + `--install-extension` command-line switch providing the path to + the `.vsix` file. + +```javascript +code --install-extension myextension.vsix +``` + +You may provide the `--install-extension` multiple times on the + command line to install multiple extensions at once. + +If you'd like to learn more about packaging and publishing extensions, + see our Publishing Extensions article in the Extension API. + +## Workspace recommended extensions + +A good set of extensions can make working with a particular workspace or + programming language more productive and you'd often like to share + this list with your team or colleagues. You can create a recommended list + of extensions for a workspace with the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command. + +In a single folder workspace, the command creates an{' '} + `extensions.json` file located in the workspace{' '} + `.vscode` folder where you can add a list of extensions + identifiers ({publisherName}.{extensionName}). + +In a multi-root workspace, the command will open your{' '} + `.code-workspace` file where you can list extensions under{' '} + `extensions.recommendations` . You can still add extension + recommendations to individual folders in a multi-root workspace by using + the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command. + +An example `extensions.json` could be: + +```javascript +{ + + ` `"recommendations": ["dbaeumer.vscode-eslint", + "esbenp.prettier-vscode"] + + + } +``` + +which recommends a linter extension and a code formatter extension. + +An extension is identified using its publisher name and extension + identifier `publisher.extension` . You can see the name on the + extension's detail page. AVAP TM Dev Studio will provide you + with auto-completion for installed extensions inside these files. + +AVAP TM Dev Studio prompts a user to install the recommended + extensions when a workspace is opened for the first time. The user can + also review the list with the{' '} + Extensions: Show Recommended Extensions command. + +## Next steps + +Here are a few topics you may find interesting... + +* Extension API(/api) - Start learning about the AVAP TM {' '} Dev Studio extension API. +* Your First Extension - Try creating a simple Hello World extension. +* Publishing to the Marketplace - Publish your own extension to the AVAP TM Dev Studio Marketplace. + +## Common questions + +### Where are extensions installed? + +Extensions are installed in a per user extensions folder. Depending on + your platform, the location is in the following folder: + +* Windows %USERPROFILE%.vscode\extensions +* macOS ~/.vscode/extensions +* Linux ~/.vscode/extensions + +You can change the location by launching AVAP TM Dev Studio with + the --extensions-dir command-line{' '} + option . + +### Whenever I try to install any extension, I get a connect ETIMEDOUT error + +You may see this error if your machine is going through a proxy server to + access the Internet. See the Proxy server support section in the setup + topic for details. + +### Can I download an extension directly from the Marketplace? + +Some users prefer to download an extension once from the Marketplace and + then install it multiple times from a local share. This is useful when + there are connectivity concerns or if your development team wants to use a + fixed set of extensions. + +To download an extension, navigate to the details page for the specific + extension within the Marketplace. On that page, there is a{' '} + Download Extension link in the Resources {' '} + section, which is located on the right-hand side of the page. + +Once downloaded, you can then install the extension via the{' '} + Install from VSIX command in the Extensions view command + dropdown. + +### Can I stop AVAPTM Dev Studio from providing extension + recommendations? + +Yes, if you would prefer to not have AVAP TM Dev Studio display + extension recommendations in the Extensions view or through notifications, + you can modify the following settings: + +* `extensions.showRecommendationsOnlyOnDemand` - Set to true to remove the RECOMMENDED section. +* `extensions.ignoreRecommendations` - Set to true to silence extension recommendation notifications. + +The Show Recommended Extensions command is always + available if you want to see recommendations. + +### Can I trust extensions from the Marketplace? + +The Marketplace runs a virus scan on each extension package that's + published to ensure its safety. The virus scan is run for each new + extension and for each extension update. Until the scan is all clear, the + extension won't be published in the Marketplace for public usage. + +The Marketplace also prevents extension authors from name-squatting on + official publishers such as Microsoft and RedHat. + +If a malicious extension is reported and verified, or a vulnerability is + found in an extension dependency: + +The Marketplace also provides you with resources to make an informed + decision about the extensions you install: + +* Ratings & Review - Read what others think about the extension. +* Q & A - Review existing questions and the level of the publisher's responsiveness. You can also engage with the extension's publisher(s) if you have concerns. +* Issues, Repository, and License - Check if the publisher has provided these and if they have the support you expect. + +If you do see an extension that looks suspicious, you can report the + extension to the Marketplace with the Report Abuse link + at the bottom of the extension More Info section. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md new file mode 100644 index 0000000..af187b1 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md @@ -0,0 +1,324 @@ +IntelliSense is a general term for various code editing features + including: code completion, parameter info, quick info, and member lists. + IntelliSense features are sometimes called by other names such as + "code completion", "content assist", and "code + hinting." + +## IntelliSense for your programming language + +AVAP™ Dev Studio 2024 IntelliSense is provided for JavaScript, TypeScript, + JSON, HTML, CSS, SCSS, and Less out of the box. AVAP™ DS Code supports + word based completions for any programming language but can also be + configured to have richer IntelliSense by installing a language extension. + +Below are the most popular language extensions in the{' '} + Marketplace . + Select an extension tile below to read the description and reviews to + decide which extension is best for you. + +## IntelliSense features + +AVAP™ DS Code IntelliSense features are powered by a language service. A + language service provides intelligent code completions based on language + semantics and an analysis of your source code. If a language service knows + possible completions, the IntelliSense suggestions will pop up as you + type. If you continue typing characters, the list of members + (variables, methods, etc.) is filtered to only include members + containing your typed characters. Pressing Tab or Enter will insert the + selected member. + +You can trigger IntelliSense in any editor window by typing Ctrl+Space or + by typing a trigger character (such as the dot character (.) + in JavaScript). + +If you prefer, you can turn off IntelliSense while you type. See{' '} + + Customizing IntelliSense + {' '} + below to learn how to disable or customize VS Code's IntelliSense + features. + +As provided by the language service, you can see{' '} + quick info for each method by either pressing Ctrl+Space + or clicking the info icon. The accompanying documentation for the method + will now expand to the side. The expanded documentation will stay so and + will update as you navigate the list. You can close this by pressing + Ctrl+Space again or by clicking on the close icon. + +After choosing a method you are provided with{' '} + parameter info . + +When applicable, a language service will surface the underlying types in + the quick info and method signatures. In the image above, you can see + several any types. Because JavaScript is dynamic and doesn't need or + enforce types, any suggests that the variable can be of any type. + +## Types of completions + +The JavaScript code below illustrates IntelliSense completions. + IntelliSense gives both inferred proposals and the global identifiers of + the project. The inferred symbols are presented first, followed by the + global identifiers (shown by the Word icon). + +VS Code IntelliSense offers different types of completions, including + language server suggestions, snippets, and simple word based textual + completions. + +## Customizing IntelliSense + +You can customize your IntelliSense experience in settings and key + bindings. + +### Settings + +The settings shown below are the default settings. You can change these + settings in your settings.json file as described in{' '} + User and Workspace Settings . + +```javascript +{ + + ` `// Controls if quick suggestions should show up while typing + + ` `"editor.quickSuggestions": { + + ` `"other": true, + + ` `"comments": false, + + ` `"strings": false + + ` `}, + + ` `// Controls whether suggestions should be accepted on commit + characters. For example, in JavaScript, the semi-colon (`;`) can + be a commit character that accepts a suggestion and types that + character. + + ` `"editor.acceptSuggestionOnCommitCharacter": true, + + ` `// Controls if suggestions should be accepted on 'Enter' - in + addition to 'Tab'. Helps to avoid ambiguity between inserting new lines + or accepting suggestions. The value 'smart' means only accept a + suggestion with Enter when it makes a textual change + + ` `"editor.acceptSuggestionOnEnter": "on", + + ` `// Controls the delay in ms after which quick suggestions will + show up. + + ` `"editor.quickSuggestionsDelay": 10, + + ` `// Controls if suggestions should automatically show up when + typing trigger characters + + ` `"editor.suggestOnTriggerCharacters": true, + + ` `// Controls if pressing tab inserts the best suggestion and if + tab cycles through other suggestions + + ` `"editor.tabCompletion": "off", + + ` `// Controls whether sorting favours words that appear close to + the cursor + + ` `"editor.suggest.localityBonus": true, + + ` `// Controls how suggestions are pre-selected when showing the + suggest list + + ` `"editor.suggestSelection": "first", + + ` `// Enable word based suggestions + + ` `"editor.wordBasedSuggestions": "matchingDocuments", + + ` `// Enable parameter hints + + ` `"editor.parameterHints.enabled": true, + + + } +``` + +### Tab Completion + +The editor supports "tab completion" which inserts the best + matching completion when pressing Tab. This works regardless of the + suggest widget showing or not. Also, pressing Tab after inserting a + suggestions will insert the next best suggestion. + +By default, tab completion is disabled. Use the editor.tabCompletion + setting to enable it. These values exist: + +* off - (default) Tab completion is disabled. +* on - Tab completion is enabled for all suggestions and repeated invocations insert the next best suggestion. +* onlySnippets - Tab completion only inserts static snippets which prefix match the current line prefix. + +### Locality Bonus + +Sorting of suggestions depends on extension information and on how well + they match the current word you are typing. In addition, you can ask the + editor to boost suggestions that appear closer to the cursor position, + using the editor.suggest.localityBonus setting. + +In above images you can see that count, context, and colocated are sorted + based on the scopes in which they appear (loop, function, file). + +### Suggestion selection + +By default, AVAP™ DS Code pre-selects the first suggestion in the + suggestion list. If you'd like different behavior, for example, to + always select the most recently used item in the suggestion list, you can + use the editor.suggestSelection setting. + +The available editor.suggestSelection values are: + +* first - (default) Always select the top list item. +* recentlyUsed - The previously used item is selected unless a prefix (type to select) selects a different item. +* recentlyUsedByPrefix - Select items based on previous prefixes that have completed those suggestions. + +Selecting the most recently used item is very useful as you can quickly + insert the same completion multiple times. + +"Type to select" means that the current prefix (roughly the + text left of the cursor) is used to filter and sort suggestions. When + this happens and when its result differs from the result of recentlyUsed, + it will be given precedence. + +When using the last option, recentlyUsedByPrefix, AVAP™ DS Code remembers + which item was selected for a specific prefix (partial text). For + example, if you typed co and then selected console, the next time you + typed co, the suggestion console would be pre-selected. This lets you + quickly map various prefixes to different suggestions, for example co + -> console and con -> const. + +### Snippets in suggestions + +By default, AVAP™ DS Code shows snippets and completion proposals in one + widget. You can control the behavior with the editor.snippetSuggestions + setting. To remove snippets from the suggestions widget, set the value to + "none". If you'd like to see snippets, you can specify the + order relative to suggestions; at the top ("top"), at + the bottom ("bottom"), or inline ordered alphabetically + ("inline"). The default is "inline". + +### Key bindings + +The key bindings shown below are the default key bindings. You can change + these in your keybindings.json file as described in{' '} + Key Bindings . + +Note: There are many more key bindings relating to + IntelliSense. Open the Default Keyboard Shortcuts ( + File > Preferences >{' '} + Keyboard Shortcuts ) and search for + "suggest". + +```javascript +[ + ` `{ + + ` `"key": "ctrl+space", + + ` `"command": "editor.action.triggerSuggest", + + ` `"when": "editorHasCompletionItemProvider && + editorTextFocus && !editorReadonly" + + ` `}, + + ` `{ + + ` `"key": "ctrl+space", + + ` `"command": "toggleSuggestionDetails", + + ` `"when": "editorTextFocus && suggestWidgetVisible" + + ` `}, + + ` `{ + + ` `"key": "ctrl+alt+space", + + ` `"command": "toggleSuggestionFocus", + + ` `"when": "editorTextFocus && suggestWidgetVisible" + + ` `} + + ] +``` + +## Enhance completions with AI + +In AVAP™ DS Code, you can enhance your coding with artificial intelligence + (AI), such as suggestions for lines of code or entire functions, + fast documentation creation, and help creating code-related artifacts like + tests. + +GitHub Copilot is an AI-powered + code completion tool that helps you write code faster and smarter. You can + use the{' '} + + GitHub Copilot extension + {' '} + in VS Code to generate code, or to learn from the code it generates. + +![GitHub Copilot extension in the VS Code Marketplace][IntelliSense demo] + +You can learn more about how to get started with Copilot in the{' '} + Copilot documentation . + +## Troubleshooting + +If you find IntelliSense has stopped working, the language service may not + be running. Try restarting VS Code and this should solve the issue. If you + are still missing IntelliSense features after installing a language + extension, open an issue in the repository of the language extension. + +A particular language extension may not support all the AVAP™ DS Code + IntelliSense features. Review the extension's README to find out what + is supported. If you think there are issues with a language extension, you + can usually find the issue repository for an extension through the{' '} + + AVAP™ DS Code Marketplace + + . Navigate to the extension's Details page and select the{' '} + Support link. + +## Next steps + +IntelliSense is just one of AVAP™ DS Code's powerful features. Read on + to learn more: + +* JavaScript - Get the most out of your JavaScript development, including configuring IntelliSense. +* Node.js - See an example of IntelliSense in action in the Node.js walkthrough. +* Debugging - Learn how to set up debugging for your application. +* Creating Language extensions {' '} - Learn how to create extensions that add IntelliSense for new programming languages. +* GitHub Copilot in AVAP™ DS Code {' '} - Learn how to use AI with GitHub Copilot to enhance your coding. + +## Common questions + +### Why am I not getting any suggestions? + +This can be caused by a variety of reasons. First, try restarting AVAP™ DS + Code. If the problem persists, consult the language extension's + documentation. For JavaScript specific troubleshooting, please see the{' '} + + JavaScript language topic + + . + +### Why am I not seeing method and variable suggestions? + +This issue is caused by missing type declaration (typings) files + in JavaScript. You can check if a type declaration file package is + available for a specific library by using the{' '} + TypeSearch site. + There is more information about this issue in the{' '} + + JavaScript language topic + + . For other languages, please consult the extension's documentation. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md new file mode 100644 index 0000000..6f2c7fa --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md @@ -0,0 +1,423 @@ +You can work with multiple project folders in AVAP™ Dev Studio 2024 with + multi-root workspaces. This can be helpful when you are working on several + related projects at one time. For example, you might have a repository + with a product's documentation that you like to keep current when you + update the product source code. + +## Adding folders + +It is easy to add another folder to your existing workspace. There are + several gestures for adding folders: + +### Add Folder to Workspace + +The File > Add Folder to Workspace {' '} + command brings up an Open Folder dialog to select the new folder. + +Once a root folder is added, the Explorer will show the new folder as a + root in the File Explorer. You can right-click on any of the root folders + and use the context menu to add or remove folders. + +The File Explorer should work and behave as before. You can move files + between root folders and use any of the typical file operation actions + provided in the context menu and the Explorer view. + +Settings like files.exclude are supported for each root folder if + configured, and across all folders if configured as global user setting. + +### Drag and drop + +You can use drag and drop to add folders to a workspace. Drag a folder to + the File Explorer to add it to the current workspace. You can even select + and drag multiple folders. + +You can also use drag and drop to reorder folders in the workspace. + +### Multiple selection native file open dialogs + +Opening multiple folders with your platform's native file open dialog + will create a multi-root workspace. + +### command line --add + +Add a folder or multiple folders to the last active AVAP TM Dev + Studio instance for a multi-root workspace. + +```javascript +` `code --add vscode vscode-docs +``` + +### Removing folders + +You can remove a folder from a Workspace with the{' '} + Remove Folder from Workspace context menu command. + +## Workspace file + +When you add multiple folders, they are initially placed in a Workspace + titled UNTITLED WORKSPACE and that name will remain until + you save the workspace. You do not need to save a Workspace until you want + to have it in a permanent location, for example, on your Desktop. Untitled + Workspaces are present as long as the AVAP TM Dev Studio + instance they are using is open. Once you completely close an instance + with an untitled workspace, you will be asked to save it if you plan to + open it again in the future: + +When you save your workspace, it will create a .code-workspace file and + the file name will be displayed in the File Explorer. + +### Save Workspace As... + +If you want to move your Workspace file to a new location, you can use the{' '} + File > Save Workspace As command, + which will automatically set the correct folder paths relative to the new + Workspace file location. + +### Opening workspace files + +To reopen a Workspace, you can: + +* Double-click the .code-workspace file in your platform's Explorer. +* Use the File > Open Workspace {' '} command and select the Workspace file. +* Select the Workspace from the File >{' '} Open Recent (Ctrl+R) list.{' '} Workspaces have a (Workspace) suffix to differentiate them from folders. +* Workspaces have a (Workspace) suffix to differentiate them from folders. + +Just like Close Folder when a single folder is open in + AVAP TM Dev Studio, there is a Close Workspace {' '} + (Ctrl+K F) command to close the active Workspace. + +### Workspace file schema + +The schema of `.code-workspace` is fairly straightforward. You + have an array of folders with either absolute or relative paths. Relative + paths are better when you want to share Workspace files. + +You can override the display `name` of your folders with the + name attribute, to give more meaningful names to folders in the Explorer. + For example, you could name your project folders such as 'Product' + and 'Documentation' to easily identify the content by folder name: + +```javascript +{ + ` `"folders": [` `{ + ` `// Source code + ` `"name": "Product", + ` `"path": "vscode" + ` `}, + ` `{ + ` `// Docs and release notes + ` `"name": "Documentation", + ` `"path": "vscode-docs" + ` `}, + ` `{ + ` `// Yeoman extension generator + ` `"name": "Extension generator", + ` `"path": "vscode-generator-code" + ` `} + ` `] + + } +``` + +which will result in the following Explorer display: + +As you can see from the example above, you can add comments to your + Workspace files. + +The Workspace file can also contain Workspace global settings under{' '} + `settings` and extension recommendations under{' '} + `extensions` , which we will discuss below. + +## General UI + +### Editor + +There are only a few changes to the AVAP TM Dev Studio UI when + you are using multi-root workspaces, primarily to disambiguate files + between folders. For example, if there is a name collision between files + in multiple folders, AVAP TM Dev Studio will include the folder + name in tabbed headers. + +If you'd always like to see the folder displayed in the tabbed header, + you can use the `workbench.editor.labelFormat` setting + "medium" or "long" values to show the folder or full + paths. + +```javascript +"workbench.editor.labelFormat": "medium" +``` + +AVAP TM Dev Studio UI such as the OPEN EDITORS {' '} + and Quick Open (Ctrl+P) lists include the folder + name. + +If you are using an File Icon Theme and the active theme supports it, you + will see a special Workspace icon. + +Below you can see the Workspace icons from the built-in{' '} + Minimal (Visual Studio Code) file icon theme: + +### Search + +AVAP TM Dev Studio features like global search work across all + folders and group the search results by folder. + +When you have a multi-root workspace open, you can choose to search in a + single root folder by using the ./ syntax in the{' '} + files to include box. For example, if you enter{' '} + `./project1/\*\*/\*.txt` , that will search for all{' '} + `.txt` files under the `project1/` root folder. + +## Settings + +With multiple root folders in one workspace, it is possible to have a + .vscode folder in each root folder defining the settings that should apply + for that folder. To avoid setting collisions, only resource (file, + folder) settings are applied when using a multi-root workspace. + Settings that affect the entire editor (for example, UI layout) + are ignored. For example, two projects cannot both set the zoom level. + +User settings are supported as with single folder projects and you can + also set global Workspace settings that will apply to all folders in your + multi-root Workspace. Global Workspace settings will be stored in your + `.code-workspace` file. + +```javascript +{ + ` `"folders": [` `{ + ` `"path": "vscode" + ` `}, + ` `{ + ` `"path": "vscode-docs" + ` `}, + ` `{ + ` `"path": "vscode-generator-code" + ` `} + ` `], + ` `"settings": { + ` `"window.zoomLevel": 1, + ` `"files.autoSave": "afterDelay" + ` `} + + } +``` + +When you go from a single folder instance to multiple folders, AVAP + TM Dev Studio will add the appropriate editor-wide settings + from the first folder to the new global Workspace settings. + +You can easily review and modify the different settings files through the + Settings editor. The Settings editor tabs let you select your User + settings, global Workspace settings, and individual folder settings. + +You can also open specific settings files with the commands: + +* Preferences: Open User Settings - Open your global User settings +* Preferences: Open Workspace Settings - Open the settings section of your Workspace file. +* Preferences: Open Folder Settings - Open the settings for the active folder. + +Global Workspace settings override User settings and folder settings can + override Workspace or User settings. + +### Unsupported folder settings + +Unsupported editor-wide folder settings will be shown as grayed out in + your folder settings and are filtered out of the{' '} + DEFAULT FOLDER SETTINGS list. You will also see an + information icon in front of the setting. + +## Debugging + +With multi-root workspaces, AVAP TM Dev Studio searches across + all folders for `launch.json` debug configuration files and + displays them with the folder name as a suffix. Additionally AVAP + TM Dev Studio will also display launch configurations defined + in the workspace configuration file. + +The example above shows the debugging configurations for the TSLint + extension. There is a `launch` configuration from the{' '} + `tslint` extension folder to start the extension running in the + AVAP TM Dev Studio Extension Host and also an{' '} + `attach` configuration from the `tslint-server` {' '} + folder to attach the debugger to a running TSLint server. + +You can also see the three Add Config commands for the + folders, `tslint` , `tslint-server` , and{' '} + `tslint-tests` , in the vscode-tslint Workspace. The{' '} + Add Config command will either open an existing + launch.json file in the folder's .vscode subfolder or create a new one + and display the debugging configuration template dropdown. + +Variables used in a configuration (for example{' '} + `${workspaceFolder}` or the now deprecated{' '} + `${workspaceRoot}` ) are resolved relative to the + folder they belong to. It is possible to scope a variable per workspace + folder by appending the root folder's name to a variable + (separated by a colon). + +### Workspace launch configurations + +Workspace scoped launch configurations live in the " + `launch` " section of the workspace configuration file + ( Workspaces: Open Workspace Configuration File in the + Command Palette): + +Alternatively, new launch configurations can be added via the "Add + Config (workspace)" entry of the Launch Configuration + dropdown menu: + +A compound launch configuration can reference the individual launch + configurations by name as long as the names are unique within the + workspace, for example: + +```javascript +` `"compounds": [{ + ` `"name": "Launch Server & Client", + ` `"configurations": [` `"Launch Server", + ` `"Launch Client" + ` `] + ` `}] +``` + +If the individual launch configuration names are not unique, the + qualifying folder can be specified with a more verbose "folder" + syntax: + +```javascript +` `"compounds": [{ + ` `"name": "Launch Server & Client", + ` `"configurations": [` `"Launch Server", + ` `{ + ` `"folder": "Web Client", + ` `"name": "Launch Client" + ` `}, + ` `{ + ` `"folder": "Desktop Client", + ` `"name": "Launch Client" + ` `} + ` `] + ` `}] +``` + +In addition to `compounds` , the `launch` section of + the workspace configuration file can contain regular launch configurations + too. Make sure that all used variables are explicitly scoped to a specific + folder because otherwise they are not valid for the workspace. You can + find more details about explicitly scoped variables in the Variables + Reference. + +Here is an example for a launch configuration where the program lives in a + folder "Program" and where all files from a folder + "Library" should be skipped when stepping: + +```javascript +"launch": { + ` `"configurations": [{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch test", + ` `"program": "${workspaceFolder:Program}/test.js", + ` `"skipFiles": [` + `"${workspaceFolder:Library}/out/\*\*/\*.js" + ` `] + ` `}] + + } +``` + +## Tasks + +Similar to how AVAP TM Dev Studio searches for debugging + configurations, AVAP TM Dev Studio will also try to autodetect + tasks from gulp, grunt, npm, and TypeScript project files across all + folders in a workspace as well as search for tasks defined in{' '} + `tasks.json` files. The location of tasks is indicated by a + folder name suffix. Note that tasks defined in `tasks.json` {' '} + must be version 2.0.0. + +From the TSLint extension Workspace example above, you can see that there + are two configured tasks from `tasks.json` {' '} + files in the `tslint` and `tslint-tests` folders and + numerous autodetected npm and TypeScript compiler{' '} + detected tasks . + +### Workspace task configuration + +Workspace scoped tasks live in the " `tasks` " section + of the workspace configuration file ( + Workspaces: Open Workspace Configuration File in the + Command Palette). Only " `shell` " and " + `process` " type tasks can be defined in the workspace + configuration file. + +## Source Control + +With multi-root workspaces, there is a{' '} + SOURCE CONTROL PROVIDERS section that gives you an + overview when you have multiple active repositories. These can be + contributed by several SCM providers; for example, you can have Git + repositories side-by-side with Azure DevOps Server workspaces. As you + select repositories in this view, you can see the source control details + below. + +You can use Ctrl+Click or Shift+Click to select multiple repositories. + Their details will appear as separate regions underneath. + +## Extensions + +If you are an extension author, you can review our Adopting Multi Root + Workspace APIs guide to learn about AVAP TM Dev Studio + multi-root workspace APIs and how to make your extension work well across + multiple folders. + +Below are some of the popular extensions that have adopted the multi-root + workspace APIs. + +### Extension recommendations + +AVAP TM Dev Studio supports folder level extension + recommendations through the `extensions.json` files under the + folder's `.vscode` subfolder. You can also provide global + Workspace extension recommendations by adding them to your{' '} + `.code-workspace` file. You can use the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command to open your Workspace file and add extension identifiers + ({publisherName}.{extensionName}) to the{' '} + `extensions.recommendations` array. + +```javascript +{ + ` `"folders": [` `{ + ` `"path": "vscode" + ` `}, + ` `{ + ` `"path": "vscode-docs" + ` `} + ` `], + ` `"extensions": { + ` `"recommendations": ["eg2.tslint", "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode"] + ` `} + + } +``` + +## Next steps + +* What is a AVAP TM Dev Studio "workspace"? - More about single-folder and multi-root workspaces. +* Debugging - Learn how to set up debugging for your application. +* Tasks - Tasks let you run external tools like compilers within AVAP TM Dev Studio. + +## Common questions + +### How can I go back to working with a single project folder? + +You can either close the Workspace and open the folder directly or remove + the folder from Workspace. + +### As an extension author what do I need to do? + +See our Adopting Multi Root Workspace APIs guide. Most extensions can + easily support multi-root workspaces. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md new file mode 100644 index 0000000..df17875 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md @@ -0,0 +1,535 @@ +AVAP TM Dev Studio has hundreds of settings, thousands of + extensions, and innumerable ways to adjust the UI layout to customize the + editor. AVAP TM Dev Studio Profiles let you + create sets of customizations and quickly switch between them or share + them with others. This topic explains how to create, modify, export, and + import profiles. + +## Create a Profile + +AVAP TM Dev Studio treats your current configuration as the{' '} + Default Profile . As you modify settings, install + extensions, or change UI layout by moving views, these customizations are + tracked in the Default Profile. + +To create a new profile, you can use the File >{' '} + Preferences > Profiles >{' '} + Create Profile menu item. + +You can create a new profile based on the current profile ( + Profiles: Create from Current Profiles ) or create an + Empty Profile. An Empty Profile includes no user customizations + (settings, extensions, snippets, etc.). + +You can also access the Profile command menu via the{' '} + Manage gear button in the lower right of the Activity + bar. + +The Profiles: Create Profile command is also available in + the Command Palette (Ctrl+Shift+P). + +You can choose to create a new profile by copying from a Profile Template + or from an existing profile or create an Empty Profile in the Profile + creation dialog. + +### Partial Profile + +A partial profile allows you to customize only a subset of configurations + (settings, keyboard shortcuts, snippets, tasks and extensions) and + use the rest of the configurations from the Default Profile. For example, + you can create a profile with all configurations except for keyboard + shortcuts, and AVAP TM Dev Studio will apply the keyboard + shortcuts from the Default Profile when this profile is active. + +### Check the current profile + +The current profile name is displayed in several places in the AVAP + TM Dev Studio UI: + +* Title bar +* File > Preferences >{' '} Profiles +* Manage gear button hover + +If you are still using the Default Profile, no profile name is displayed. + +The Manage gear button displays a badge with the first + two letters of the active profile so you can quickly check which profile + you are running. + +### Configure a profile + +You can configure a profile just as you would normally change any AVAP + TM Dev Studio configuration. You can install/uninstall/disable + extensions, change settings, and adjust the editor's UI layout + (for example, moving and hiding views) like normal. These changes + are stored in your currently active profile. + +### Workspace associations + +When you create or select an existing profile, it is associated with the + current workspace and whenever you open that folder, the workspace's + profile is active. If you open another folder, the profile switches to + that folder's associated profile if one has been set or remains on the + last used profile. + +## Managing profiles + +### Switch profiles + +You can quickly switch between profiles with the{' '} + Profiles: Switch Profile command in the Command Palette, + which presents a dropdown listing your available profiles. + +You can also switch profiles by selecting a profile from the list + displayed in the Profiles menus, available via the Manage {' '} + gear button or File > Preferences {' '} + > Profiles . + +### Edit a profile + +You can edit an existing profile via the Edit command in + the Profiles menu. + +### Delete a profile + +You can delete a profile via the Delete Profile command. + The Delete Profile drop down lets you select which + profile(s) to delete. + +## Profile contents + +The Profiles: Show Contents command (available in the + Command Palette or Profiles menus) brings up the Profiles view, where + you can review the customizations for the profile. + +A profile can include: + +* Settings - In a profile-specific `settings.json` file. +* Extensions - The list of extensions included in the current profile. +* UI state - View layout (positions), visible views and actions. +* Keybindings - In a profile-specific `keybindings.json` file. +* Snippets - In a profile-specific `{language}.json` {' '} files. +* User Tasks - In a profile-specific `tasks.json` file. + +When you create a new profile based on the Default Profile, the + profile-specific configuration files are populated from your user + configuration files. Workspace-specific settings are not automatically + included in a new profile. + +### Applying a setting to all profiles + +A setting can be applied to all profiles using the{' '} + Apply Setting to all Profiles action available in the + Settings editor. + +This will apply the value of the setting to all profiles. Any updates to + this setting from any profile will be applied to all profiles. You can + always revert this by unchecking the{' '} + Apply Setting to all Profiles action. + +### Applying an extension to all profiles + +An extension can be applied to all profiles by clicking on the{' '} + Apply Extension to all Profiles action in the Extensions + view. + +This will make this extension available in all profiles. You can always + revert this by unchecking the{' '} + Apply Extension to all Profiles action. + +## Share Profiles + +### Export + +You can export a profile in order to save it or share it with others. The{' '} + Export Profile command displays the Profiles view with + the contents of the active profile and an Export button. + You can unselect various elements of the profile such as extensions or + configuration files before you export the profile. + +When you select Export , you are prompted for the profile + name and whether you want to export to a GitHub gist or your local file + system. + +After you save a profile to GitHub (you'll be prompted to log into + GitHub), a dialog gives you the option to Copy Link {' '} + so you can share your profile gist URL with others. The URL includes an + autogenerated GUID and has the format (LINK). The GitHub gist is + marked as Secret , so only those with the link can see the + gist. + +If you launch the profile URL, it opens AVAP TM Dev Studio for + the Web (vscode.dev) with the Profiles view open and the imported + profile contents displayed. You can unselect profile elements if you wish + and you need to manually Install Extensions (via the + download cloud button) if you want to continue using that profile in + vscode.dev. + +You also have the option to{' '} + + Import Profile in AVAP TM Dev Studio + + , which opens AVAP TM Dev Studio Desktop with the profile's + contents displayed and an Import Profile button. + +You can review your gists at (LINK). From your GitHub gist page + you can rename, delete, or copy the GUID of a gist. + +If you chose to save the profile as a local file, a{' '} + Save Profile dialog lets you place the file on your local + machine. A profile is persisted in a file with the extension{' '} + `.code-profile` . + +### Import + +To import an existing profile, run the Import Profiles {' '} + command. You are prompted for the URL of a GitHub gist or the file + location of a profile via an Import Profile dialog. Once + you have selected the profile, the Profiles view opens and displays the + profile to import. You can unselect some profile elements if you don't + want to import them. Select the Import Profile button and + you will now be using the imported profile. + +## Uses for Profiles + +Profiles are a great way to customize AVAP TM Dev Studio to + better fit your needs. In this section, we look at some common use cases + for profiles. + +Since profiles are remembered per workspace, they are a great way to + customize AVAP TM Dev Studio for a specific programming + language. For example, you can create a JavaScript frontend profile that + includes the extensions, settings, and customizations you use for + JavaScript development in one workspace, and have a Python backend profile + that includes the extensions, settings, and customizations you use for + Python development in another workspace. Using this approach, you can + easily switch between workspaces and always have AVAP TM Dev + Studio configured the right way. + +### Demos + +When doing a demo, you can use a profile to set up a specific + configuration for your demo. For example, you can create a profile with a + specific set of extensions and settings like zoom level, font size, and + color theme. By doing this, a demo will not mess up your normal AVAP + TM Dev Studio setup and you can customize AVAP TM Dev + Studio for better visibility during your presentation. + +### Education + +Profiles can be used to customize AVAP TM Dev Studio for + students to ease the use in a classroom setting. Profiles allow educators + to quickly share a customized AVAP TM Dev Studio setup with + students. For example, educators can create a profile with a specific set + of extensions and settings needed for a computer science class and then + share that profile with students. + +### Report AVAPTM Dev Studio issues + +One use of an Empty Profile is to reset your editor when you want to + report an issue with AVAP TM Dev Studio. An Empty Profile + disables all extensions and modified settings so you can quickly see if + the issue is due to an extension, a setting, or is in AVAP TM {' '} + Dev Studio core. + +## Profile Templates + +AVAP TM Dev Studio comes with a predefined set of profile + templates that you can use to customize AVAP TM Dev Studio for + your specific workflow. To create a new profile based on a template, + select a Profile Template when going through the{' '} + Create Profile flow. + +### Python Profile Template + +The Python profile is a good starting point for Python development. It + comes with Python specific snippets and has the following extensions: + +* autoDocstring - Generate Python docstrings automatically. +* Black Formatter - Formatting support using the black formatter. +* Docker - Create, manage, and debug containerized applications. +* Even Better TOML - Fully-featured TOML support. +* Python - IntelliSense, linting, formatting, debugging, refactoring. +* Python Environment Manager - Manage Python environments and packages. +* Remote Development extension pack - Supports SSH, WSL, and Dev Containers. +* Ruff - Integrates the Ruff Python linter. + +This profile also sets the following settings: + +```javascript +` `"python.analysis.autoImportCompletions": true, + ` `"python.analysis.fixAll": ["source.unusedImports"], + ` `"editor.defaultFormatter": "ms-python.black-formatter" +``` + +### Data Science Profile Template + +The Data Science profile is a good starting point for all data and + notebook work. It comes with specific snippets and has the following + extensions: + +* Data Wrangler - Data cleaning and preparation for tabular datasets. +* Black Formatter - Formatting support using the black formatter. +* Jupyter - Use Jupyter notebooks within AVAP TM Dev Studio. +* Python - IntelliSense, linting, formatting, debugging, refactoring. +* Dev Containers - Create custom development environments inside a Docker container. +* GitHub Copilot - Your AI pair programmer. + +This profile also sets the following settings: + +```javascript +` `"[python]": { + ` `"editor.defaultFormatter": "ms-python.black-formatter", + ` `"editor.formatOnType": true, + ` `"editor.formatOnSave": true + ` `}, + ` `"editor.inlineSuggest.enabled": true, + ` `"editor.lineHeight": 17, + ` `"breadcrumbs.enabled": false, + ` `"files.autoSave": "afterDelay", + ` `"jupyter.themeMatplotlibPlots": true, + ` `"jupyter.widgetScriptSources": [` `"unpkg.com", + ` `"jsdelivr.com" + ` `], + ` `"notebook.experimental.outputScrolling": true, + ` `// "notebook.outline.showCodeCells": true, + ` `"files.exclude": { + ` `"\*\*/.csv": true, + ` `"\*\*/.parquet": true, + ` `"\*\*/.pkl": true, + ` `"\*\*/.xls": true + ` `} +``` + +### Doc Writer Profile Template + +The Doc Writer profile is a good lightweight setup for writing + documentation. It comes with the following extensions: + +* Code Spell Checker - Spelling checker for source code. +* Markdown Checkboxes - Adds checkbox support to the AVAP TM Dev Studio built-in Markdown Preview. +* Markdown Emoji - Adds emoji syntax support to Markdown Preview and notebook Markdown cells. +* Markdown Footnotes - Adds ^footnote syntax support to the Markdown Preview. +* Markdown Preview GitHub Styling - Use GitHub styling in the Markdown Preview. +* Markdown Preview Mermaid Support - Mermaid diagrams and flowcharts. +* Markdown yaml Preamble - Renders YAML front matter as a table. +* markdownlint - Markdown linting and style checking for AVAP TM {' '} Dev Studio. + +This profile also sets the following settings: + +```javascript +` `"workbench.colorTheme": "Default Light+ Experimental", + ` `"editor.minimap.enabled": false, + ` `"breadcrumbs.enabled": false, + ` `"editor.glyphMargin": false, + ` `"explorer.decorations.badges": false, + ` `"explorer.decorations.colors": false, + ` `"editor.fontLigatures": true, + ` `"files.autoSave": "afterDelay", + ` `"git.enableSmartCommit": true, + ` `"window.commandCenter": true, + ` `"editor.renderWhitespace": "none", + ` `"workbench.editor.untitled.hint": "hidden", + ` `"markdown.validate.enabled": true, + ` `"markdown.updateLinksOnFileMove.enabled": "prompt", + ` `"workbench.startupEditor": "none" +``` + +### Node.js Profile Template* + +The Node.js profile is a good starting point for all Node.js work. It + comes with the following extensions: + +* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. +* Dev Containers - Create custom development environments inside a Docker container. +* Docker - Create, manage, and debug containerized applications. +* DotENV - Support for dotenv file syntax. +* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. +* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. +* Jest - Use Facebook's jest testing framework. +* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. +* npm Intellisense - Autocomplete npm modules in import statements. +* Prettier - Code formatter - Code formatter using Prettier. +* Rest Client - REST Client for AVAP TM Dev Studio. +* YAML - YAML language support with built-in Kubernetes syntax. + +This profile comes with the following settings: + +```javascript +` `"editor.formatOnPaste": true, + ` `"git.autofetch": true, + ` `"[markdown]": { + ` `"editor.wordWrap": "on" + ` `}, + ` `"[json]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[jsonc]": { + ` `"editor.defaultFormatter": "vscode.json-language-features" + ` `}, + ` `"[html]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[javascript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[typescript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `} +``` + +### Angular Profile Template + +The Angular profile is a good starting point for all Angular work. It + comes with the following extensions: + +* Angular Language Service - Editor services for Angular templates. +* Angular Schematics - Integrate Angular schematics (CLI commands). +* angular2-switcher - Easily navigate to `typescript|template|style` in angular2 project. +* Dev Containers - Create custom development environments inside a Docker container. +* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. +* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. +* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. +* Jest - Use Facebook's jest testing framework. +* Material Icon Theme - Material Design Icons for AVAP TM Dev Studio. +* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. +* Playwright Test for VSCode - Run Playwright tests in AVAP TM {' '} Dev Studio. +* Prettier - Code formatter - Code formatter using Prettier. +* Rest Client - REST Client for AVAP TM Dev Studio. +* YAML - YAML language support with built-in Kubernetes syntax. + +This profile sets the following settings: + +```javascript +` `"editor.formatOnPaste": true, + ` `"git.autofetch": true, + ` `"[markdown]": { + ` `"editor.wordWrap": "on" + ` `}, + ` `"[json]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[jsonc]": { + ` `"editor.defaultFormatter": "vscode.json-language-features" + ` `}, + ` `"[html]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[javascript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[typescript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"workbench.iconTheme": "material-icon-theme" +``` + +### Java General Profile Template + +The Java General profile is a good starting point for all Java work. It + customizes the layout to improve the Java experience and comes with the + following extensions from the Extension Pack for Java: + +* Debugger for Java - A lightweight Java debugger. +* IntelliCode - AI-assisted development. +* IntelliCode API Usage Examples - Provides code examples for over 100K different APIs. +* Language Support for Java(TM) by Red Hat - Fundamental Java language support, Linting, Intellisense, formatting, refactoring. +* Maven for Java - Manage Maven projects and builds. +* Project Manager for Java - Manage Java projects within AVAP TM {' '} Dev Studio. +* Test Runner for Java - Run and debug JUnit or TestNG test cases. + +### Java Spring Profile Template + +The Java Spring profile is a good starting point for all Java and Spring + developers. It builds on the Java General profile and add the following + extensions from the Spring Boot Extension Pack: + +* Spring Boot Dashboard - Provides Spring Boot live data visualization and observation in your running Spring applications. +* Spring Boot Tools - Rich language support for Spring Boot files. +* Spring Initializr Java Support - Scaffold and generate Spring Boot Java projects. + +This profile sets the following settings: + +```javascript +` `"[java]": { + ` `"editor.defaultFormatter": "redhat.java" + ` `}, + ` `"boot-java.rewrite.reconcile": true +``` + +## Command line + +You can launch AVAP TM Dev Studio with a specific profile via + the `--profile` command-line interface option. You pass the + name of the profile after the `--profile` argument and open a + folder or a workspace using that profile. The command line below opens the{' '} + `web-sample` folder with the "Web Development" + profile: + +` + code ~/projects/web-sample --profile "Web Development" + ` + +If the profile specified does not exist, a new empty profile with the + given name is created. + +## Common Questions + +### Where are profiles kept? + +Profiles are stored under your User configurations similar to your user + settings and keybindings. + +* Windows `%APPDATA%\Code\User\profiles` +* macOS {' '} `$HOME/Library/Application\ Support/Code/User/profiles` +* Linux `$HOME/.config/Code/User/profiles` + +If you are using the Insiders version, the intermediate folder name is{' '} + `Code - Insiders` . + +### Where is the UI State globalState.json file? + +If you expand the UI State node in the Profiles view, + there is a `globalState.json` entry. This is an in-memory JSON + representation of your profile's UI State, describing the visibility + and layout of various AVAP TM Dev Studio UI elements. The file + does not actually exist on disk and is just a JSON view of the underlying + global state storage. + +### What is a Temporary Profile? + +A Temporary Profile is a profile that is not saved across AVAP + TM Dev Studio sessions. You create a Temporary Profile via the{' '} + Profiles: Create a Temporary Profile command in the + Command Palette. The Temporary Profile starts as an Empty Profile and has + an automatically generated name (such as Temp 1 ). + You can modify the profile settings and extensions, use the profile for + the lifetime of your AVAP TM Dev Studio session, but it will be + deleted once you close AVAP TM Dev Studio. + +Temporary Profiles are useful if you want to try a new configuration or + test an extension without modifying your default or existing profile. + Restarting AVAP TM Dev Studio reenables the current profile for + your workspace. + +### How can I remove the profile from my project? + +You can set your project back to the Default Profile. If you'd like to + remove all profile workspace associations, you can use the{' '} + Developer: Reset Workspace Profiles Associations , which + will set all local folders currently assigned a profile back to the + Default Profile. Reset Workspace Profiles Associations {' '} + does not delete any existing profiles. + +### Do profiles sync across machines (via Settings Sync)? + +Yes, you can use Settings Sync to move your profiles across various + machines. With Setting Sync enabled and Profiles checked + in the Settings Sync: Configure drop down, all your + created profiles are available. + +### Why are some settings not exported when exporting a profile? + +When exporting profiles, machine-specific settings are not included + because these setting would not be applicable on another machine. For + example, settings that point to local paths are not included. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md new file mode 100644 index 0000000..876a9ff --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md @@ -0,0 +1,156 @@ +Source code refactoring can improve the quality and maintainability of + your project by restructuring your code while not modifying the runtime + behavior. AVAP TM Dev Studio supports refactoring operations + (refactorings) such as Extract Method and Extract Variable to + improve your code base from within your editor. + +For example, a common refactoring used to avoid duplicating code (a + maintenance headache) is the Extract Method refactoring, where you + select source code that you'd like to reuse elsewhere and pull it out + into its own shared method. + +Refactorings are provided by a language service and AVAP TM Dev + Studio has built-in support for TypeScript and JavaScript refactoring + through the TypeScript language service. Refactoring support for other + programming languages is provided through AVAP TM Dev Studio + extensions that contribute language services. The UI and commands for + refactoring are the same across languages, and in this topic we'll + demonstrate refactoring support with the TypeScript language service. + +## Code Actions = Quick Fixes and refactorings + +In AVAP TM Dev Studio, Code Actions can provide both + refactorings and Quick Fixes for detected issues (highlighted with red + squiggles). An available Code Action is announced by a lightbulb near + the source code when the cursor is on a squiggle or selected text region. + Clicking on the Code Action lightbulb or using the{' '} + Quick Fix command Ctrl+. will display Quick Fixes and + refactorings. + +If you'd just like to see refactorings without Quick Fixes, you can + use the Refactor command (Ctrl+Shift+R). + +## Refactoring actions + +### Extract Method + +Select the source code you'd like to extract and then click on the + lightbulb in the gutter or press (Ctrl+.) to see available + refactorings. Source code fragments can be extracted into a new method, or + into a new function at various different scopes. During the extract + refactoring, you will be prompted to provide a meaningful name. + +### Extract Variable + +TypeScript language service provides Extract to const {' '} + refactoring to create a new local variable for the currently selected + expression: + +When working with classes, you can also extract a value to a new property. + +## Rename symbol + +Renaming is a common operation related to refactoring source code and AVAP + TM Dev Studio has a separate Rename Symbol {' '} + command (F2). Some languages support rename symbol across files. + Press F2 and then type the new desired name and press `Enter` . + All usages of the symbol will be renamed, across files. + +## Keybindings for Code Actions + +The `editor.action.codeAction` command lets you configure + keybindings for specific Code Actions. This keybinding, for example, + triggers the Extract function refactoring Code Actions: + +```javascript +{ + ` `"key": "ctrl+shift+r ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.function" + ` `} + + } +``` + +Code Action kinds are specified by extensions using the enhanced{' '} + `CodeActionProvided` API. Kinds are hierarchical, so{' '} + `"kind": "refactor"` will show all + refactoring Code Actions, whereas `"kind"` :{' '} + `"refactor.extract.function"` will only show{' '} + Extract function refactorings. + +Using the above keybinding, if only a single{' '} + `"refactor.extract.function"` Code Action is + available, it will be automatically applied. If multiple{' '} + Extract function Code Actions are available, we bring up + a context menu to select them: + +You can also control how/when Code Actions are automatically applied using + the `apply` argument: + +```javascript +{ + ` `"key": "ctrl+shift+r ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.function", + ` `"apply": "first" + ` `} + + } +``` + +Valid values for `"apply"` : + +* "first" - Always automatically apply the first available Code Action. +* "ifSingle" - Default. Automatically apply the Code Action if only one is available. Otherwise, show the context menu. +* "never" - Always show the Code Action context menu, even if only a single Code Action is available. + +When a Code Action keybinding is configured with "preferred": + true, only preferred Quick Fixes and refactorings are shown. A preferred + Quick Fix addresses the underlying error, while a preferred refactoring is + the most common refactoring choice. For example, while multiple + refactor.extract.constant refactorings may exist, each extracting to a + different scope in the file, the preferred refactor.extract.constant + refactoring is the one that extracts to a local variable. + +This keybinding uses "preferred": true to create a refactoring + that always tries to extract the selected source code to a constant in the + local scope: + +```javascript +{ + ` `"key": "shift+ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.constant", + ` `"preferred": true, + ` `"apply": "ifSingle" + ` `} + + } +``` + +## Extensions with refactorings + +You can find extensions that support refactoring by looking in the AVAP + TM Dev Studio Marketplace. You can go to the Extensions view + (Ctrl+Shift+X) and type 'refactor' in the search box. You + can then sort by install count or ratings to see which extensions are + popular. + +## Next steps + +* Intro Video - Code Editing - Watch an introductory video on code editing features. +* Code Navigation - AVAP TM Dev Studio lets you move quickly through your source code. +* Debugging - Learn about debugging with AVAP TM Dev Studio. + +## Common questions + +### Why don't I see any lightbulbs when there are errors in my code? + +Lightbulbs (Code Actions) are only shown when your cursor hovers + over the text showing the error. Hovering over the text will show the + error description, but you need to move the cursor or select text to see + lightbulbs for Quick Fixes and refactorings. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md new file mode 100644 index 0000000..2874279 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md @@ -0,0 +1,297 @@ +Settings Sync lets you share your AVAP TM Dev Studio + configurations such as settings, keybindings, and installed extensions + across your machines so you are always working with your favorite setup. + +## Turning on Settings Sync + +You can turn on Settings Sync using the{' '} + Turn On Settings Sync... entry in the{' '} + Manage gear menu at the bottom of the Activity Bar. + +You will be asked to sign in and what preferences you would like to sync; + currently Settings, Keyboard Shortcuts, Extensions, User Snippets, and UI + State are supported. + +Selecting the Sign in & Turn on button will ask you + to choose between signing in with your Microsoft or GitHub account. + +After making this selection, the browser will open so that you can sign in + to your Microsoft or GitHub account. When a Microsoft account is chosen, + you can use either personal accounts, such as Outlook accounts, or Azure + accounts, and you can also link a GitHub account to a new or existing + Microsoft account. + +After signing in, Settings Sync will be turned on and continue to + synchronize your preferences automatically in the background. + +## Merge or Replace* + +If you already synced from a machine and turning on sync from another + machine, you will be shown with following{' '} + Merge or Replace dialog. + +* Merge : Selecting this option will merge{' '} local settings with remote settings from the cloud. +* Replace Local : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. +* Merge Manually... : Selecting this option will open{' '} Merges view where you can merge preferences one by one. + +## Configuring synced data + +Machine settings (with `machine` or{' '} + `machine-overridable` scopes) are not synchronized by + default, since their values are specific to a given machine. You can also + add or remove settings you want to this list from the Settings editor or + using the `setting settingsSync.ignoredSettings` . + +Keyboard Shortcuts are synchronized per platform by default. If your + keyboard shortcuts are platform-agnostic, you can synchronize them across + platforms by disabling the setting{' '} + `settingsSync.keybindingsPerPlatform` . + +All built-in and installed extensions are synchronized along with their + global enablement state. You can skip synchronizing an extension, either + from the Extensions view (Ctrl+Shift+X) or using the{' '} + `setting settingsSync.ignoredExtensions` . + +Following UI State is synchronized currently: + +* Display Language +* Activity Bar entries +* Panel entries +* Views layout and visibility +* Recently used commands +* Do not show again notifications + +You can always change what is synced via the{' '} + Settings Sync: Configure command or by opening the{' '} + Manage gear menu, selecting{' '} + Settings Sync is On , and then{' '} + Settings Sync: Configure . + +## Conflicts + +When synchronizing settings between multiple machines, there may + occasionally be conflicts. Conflicts can happen when first setting up sync + between machines or when settings change while a machine is offline. When + conflicts occur, you will be presented with the following options: + +* Accept Local : Selecting this option will overwrite{' '} remote settings in the cloud with your local settings. +* Accept Remote : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. +* Show Conflicts : Selecting this will display a diff editor similar to the Source Control diff editor, where you can preview the local and remote settings and choose to either accept local or remote or manually resolve the changes in your local settings file and then accept the local file. + +## Switching Accounts + +If at any time you want to sync your data to a different account, you can + turn off and turn on Settings Sync again with different account. + +## Syncing Stable versus Insiders + +By default, the AVAP TM Dev Studio Stable and Insiders builds + use different Settings Sync services, and therefore do not share settings. + You can sync your Insiders with Stable by selecting the Stable sync + service while turning on Settings Sync. This option is only available in + AVAP TM Dev Studio Insiders. + +## Restoring data + +AVAP TM Dev Studio always stores local and remote backups of + your preferences while syncing and provides views for accessing these. In + case something goes wrong, you can restore your data from these views. + +You can open these views using{' '} + Settings Sync: Show Synced Data command from the Command + Palette. The Local Sync activity view is hidden by default and you can + enable it using Views submenu under{' '} + Settings Sync view overflow actions. + +Local backups folder in the disk can be accessed via the{' '} + Settings Sync: Open Local Backups Folder command. The + folder is organized by the type of preference and contains versions of + your JSON files, named with a timestamp of when the backup occurred. + +Note : Local backups are automatically deleted after 30 + days. For remote backups the latest 20 versions of each individual + resource (settings, extensions, etc.) is retained. + +## Synced Machines + +AVAP TM Dev Studio keeps track of the machines synchronizing + your preferences and provides a view to access them. Every machine is + given a default name based on the type of AVAP TM Dev Studio + (Insiders or Stable) and the platform it is on. You can always + update the machine name using the edit action available on the machine + entry in the view. You can also disable sync on another machine using{' '} + Turn off Settings Sync context menu action on the machine + entry in the view. + +You can open this view using{' '} + Settings Sync: Show Synced Data command from the Command + Palette. + +## Extension authors + +If you are an extension author, you should make sure your extension + behaves appropriately when users enable Setting Sync. For example, you + probably don't want your extension to display the same dismissed + notifications or welcome pages on multiple machines. + +### Sync user global state between machines + +If your extension needs to preserve some user state across different + machines then provide the state to Settings Sync using{' '} + `vscode.ExtensionContext.globalState.setKeysForSync.` Sharing + state such as UI dismissed or viewed flags across machines can provide a + better user experience. + +There is an example of using `setKeysforSync` in the Extension + Capabilities topic. + +## Reporting issues + +Settings Sync activity can be monitored in the{' '} + Log (Settings Sync) output view. If you + experience a problem with Settings Sync, include this log when creating + the issue. If your problem is related to authentication, also include the + log from the Account output view. + +## How do I delete my data? + +If you want to remove all your data from our servers, just turn off sync + via Settings Sync is On menu available under{' '} + Manage gear menu and select the checkbox to clear all + cloud data. If you choose to re-enable sync, it will be as if you're + signing in for the first time. + +## Next steps + +* User and Workspace settings - Learn how to configure AVAP TM {' '} Dev Studio to your preferences through user and workspace settings. + +## Common questions + +### Is AVAP TM Dev Studio Settings Sync the same as the Settings Sync + extension? + +No, the Settings Sync extension by Shan Khan uses a private Gist on GitHub + to share your AVAP TM Dev Studio settings across different + machines and is unrelated to the AVAP TM Dev Studio Settings + Sync. + +### What types of accounts can I use for Settings Sync sign in? + +AVAP TM Dev Studio Settings Sync supports signing in with either + a Microsoft account (for example Outlook or Azure accounts) or a + GitHub account. Sign in with GitHub Enterprise accounts is not supported. + Other authentication providers may be supported in the future and you can + review the proposed Authentication Provider API in issue #88309. + +### Can I use a different backend or service for Settings Sync? + +Settings Sync uses a dedicated service to store settings and coordinate + updates. A service provider API may be exposed in the future to allow for + custom Settings Sync backends. + +## Troubleshooting keychain issues + +Settings Sync persists authentication information on desktop using the OS + keychain for encryption. Using the keychain can fail in some cases if the + keychain is misconfigured or the environment isn't recognized. + +To help diagnose the problem, you can restart AVAP TM Dev Studio + with the following flags to generate a verbose log: + +```javascript +code --verbose --vmodule="\*/components/os\_crypt/\*=1" +``` + +### Windows & macOS + +At this time, there are no known configuration issues on Windows or macOS + but, if you suspect something is wrong, you can open an issue on AVAP + TM Dev Studio with the verbose logs from above. This is + important for us to support additional desktop configurations. + +### Linux + +Towards the top of the logs from the previous command, you will see + something to the effect of: + +[9699:0626/093542.027629:VERBOSE1:key_storage_util_linux.cc(54)] + Password storage detected desktop environment: GNOME + +[9699:0626/093542.027660:VERBOSE1:key_storage_linux.cc(122)] + Selected backend for OSCrypt: GNOME_LIBSECRET + +We rely on Chromium's oscrypt module to discover and store encryption + key information in the keyring. Chromium supports a number of different + desktop environments. Outlined below are some popular desktop environments + and troubleshooting steps that may help if the keyring is misconfigured. + +If the error you're seeing is "Cannot create an item in a locked + collection", chances are your keyring's `Login` {' '} + keyring is locked. You should launch your OS's keyring (Seahorse + is the commonly used GUI for seeing keyrings) and ensure the default + keyring (usually referred to as `Login` keyring) is + unlocked. This keyring needs to be unlocked when you log into your system. + +It's possible that your wallet (aka keyring) is closed. If you + open KWalletManager, you can see if the default `kdewallet` is + closed and if it is, make sure you open it. + +If you are using KDE5 or higher and are having trouble connecting to{' '} + `kwallet5` (like users of the unofficial AVAP TM {' '} + Dev Studio Flatpak in issue #189672), you can try configuring the + keyring to `gnome-libsecret` as this will use the Secret + Service API to communicate with any valid keyring. `kwallet5` {' '} + implements the Secret Service API and can be accessed using this method. + +First off, if your desktop environment wasn't detected, you can open + an issue on AVAP TM Dev Studio with the verbose logs from above. + This is important for us to support additional desktop configurations. + +You can manually tell AVAP TM Dev Studio which keyring to use by + passing the `password-store` flag. Our recommended + configuration is to first install gnome-keyring if you don't have it + already and then launch AVAP TM Dev Studio with{' '} + `code --password-store="gnome-libsecret"` . + +If this solution works for you, you can persist the value of + password-store by opening the Command Palette (Ctrl+Shift+P) and + running the Preferences: Configure Runtime Arguments {' '} + command. This will open the argv.json file where you can add the setting + "password-store":"gnome-libsecret". + +Here are all the possible values of password-store if you would like to + try using a different keyring than gnome-keyring: + +* `kwallet5` : For use with kwalletmanager5. +* `gnome-libsecret` : For use with any package that implements the Secret Service API (for example `gnome-keyring` ,{' '} `kwallet5` , `KeepassXC` ). +* (not recommended) kwallet: For use with older versions of kwallet. +* (not recommended) basic: See the section below on basic text for more details. + +Don't hesitate to open an issue on AVAP TM Dev Studio with + the verbose logs if you run into any issues. + +We rely on Chromium's oscrypt module to discover and store encryption + key information in the keyring. Chromium offers an opt-in fallback + encryption strategy that uses an in-memory key based on a string that is + hardcoded in the Chromium source. Because of this, this fallback strategy + is, at best, obfuscation, and should only be used if you are accepting of + the risk that any process on the system could, in theory, decrypt your + stored secrets. + +If you accept this risk, you can set `password-store` to basic + by opening the Command Palette (Ctrl+Shift+P) and running the{' '} + Preferences: Configure Runtime Arguments command. This + will open the `argv.json` file where you can add the setting{' '} + `"password-store":"basic"` . + +## Can I share settings between AVAP TM Dev Studio + +{' '} + Stable and Insiders? Yes. Please refer to the Syncing Stable versus + Insiders section for more information. + +Please note that this can sometimes lead to data incompatibility because + Insiders builds are newer than Stable builds. In such cases, Settings Sync + will be disabled automatically on Stable to prevent data inconsistencies. + Once a newer version of the Stable build is released, you can upgrade your + client and turn on Settings Sync to continue syncing. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md new file mode 100644 index 0000000..0816086 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md @@ -0,0 +1,392 @@ +Code snippets are templates that make it easier to enter repeating code + patterns, such as loops or conditional-statements. + +In AVAP TM Dev Studio, snippets appear in IntelliSense + (Ctrl+Space) mixed with other suggestions, as well as in a + dedicated snippet picker ( Insert Snippet in the + Command Palette). There is also support for tab-completion: Enable it + with `"editor.tabCompletion": "on"` , type a{' '} + snippet prefix (trigger text), and press Tab to + insert a snippet. + +The snippet syntax follows the TextMate snippet syntax with the exceptions + of 'interpolated shell code' and the use of \u; both are not + supported. + +## Built-in snippets + +AVAP TM Dev Studio has built-in snippets for a number of + languages such as: JavaScript, TypeScript, Markdown, and PHP. + +You can see the available snippets for a language by running the{' '} + Insert Snippet command in the Command Palette to get a + list of the snippets for the language of the current file. However, keep + in mind that this list also includes user snippets that you have defined, + and any snippets provided by extensions you have installed. + +## Install snippets from the Marketplace + +Many extensions on the AVAP TM Dev Studio Marketplace include + snippets. You can search for extensions that contains snippets in the + Extensions view (Ctrl+Shift+X) using the + @category:"snippets" filter. + +If you find an extension you want to use, install it, then restart AVAP + TM Dev Studio and the new snippets will be available. + +## Create your own snippets + +You can easily define your own snippets without any extension. To create + or edit your own snippets, select Configure User Snippets {' '} + under File > Preferences , and then + select the language (by language identifier) for which the + snippets should appear, or the New Global Snippets file {' '} + option if they should appear for all languages. AVAP TM Dev + Studio manages the creation and refreshing of the underlying snippets + file(s) for you. + +Snippets files are written in JSON, support C-style comments, and can + define an unlimited number of snippets. Snippets support most TextMate + syntax for dynamic behavior, intelligently format whitespace based on the + insertion context, and allow easy multiline editing. + +Below is an example of a for loop snippet for JavaScript: + +```javascript +// in file 'Code/User/snippets/javascript.json' + + { + ` `"For Loop": { + ` `"prefix": ["for", "for-const"], + ` `"body": ["for (const ${2:element} of + ${1:array}) {", "\t$0", "}"], + ` `"description": "A for loop." + ` `} + + } +``` + +In the example above: + +* "For Loop" is the snippet name. It is displayed via IntelliSense if no description is provided. +* `prefix` defines one or more trigger words that display the snippet in IntelliSense. Substring matching is performed on prefixes, so in this case, "fc" could match "for-const". +* `body` is one or more lines of content, which will be joined as multiple lines upon insertion. Newlines and embedded tabs will be formatted according to the context in which the snippet is inserted. +* `description` is an optional description of the snippet displayed by IntelliSense. + +Additionally, the `body` of the example above has three + placeholders (listed in order of traversal):{' '} + `${1:array}` , `${2:element}` , + and `$0` . You can quickly jump to the next placeholder with + Tab, at which point you may edit the placeholder or jump to the next one. + The string after the colon : (if any) is the default text, for + example `element` in `${2:element}` . + Placeholder traversal order is ascending by number, starting from one; + zero is an optional special case that always comes last, and exits snippet + mode with the cursor at the specified position. + +### File template snippets + +You can add the isFileTemplate attribute to your snippet's definition + if the snippet is intended to populate or replace a file's contents. + File template snippets are displayed in a dropdown when you run the{' '} + Snippets: Populate File from Snippet command in a new or + existing file. + +## Snippet scope + +Snippets are scoped so that only relevant snippets are suggested. Snippets + can be scoped by either: + +Every snippet is scoped to one, several, or all + ("global") languages based on whether it is defined in: + +Single-language user-defined snippets are defined in a specific + language's snippet file (for example javascript.json), which + you can access by language identifier through{' '} + Snippets: Configure User Snippets . A snippet is only + accessible when editing the language for which it is defined. + +Multi-language and global user-defined snippets are all defined in + "global" snippet files (JSON with the file suffix + .code-snippets), which is also accessible through{' '} + Snippets: Configure User Snippets . In a global snippets + file, a snippet definition may have an additional scope property that + takes one or more language identifiers, which makes the snippet available + only for those specified languages. If no scope property is given, then + the global snippet is available in all languages. + +Most user-defined snippets are scoped to a single language, and so are + defined in a language-specific snippet file. + +You can also have a global snippets file (JSON with file suffix + .code-snippets) scoped to your project. Project-folder snippets are + created with the New Snippets file for ''... {' '} + option in the Snippets: Configure User Snippets dropdown + menu and are located at the root of the project in a .vscode folder. + Project snippet files are useful for sharing snippets with all users + working in that project. Project-folder snippets are similar to global + snippets and can be scoped to specific languages through the scope + property. + +## Snippet syntax + +The body of a snippet can use special constructs to control cursors and + the text being inserted. The following are supported features and their + syntaxes: + +With tabstops, you can make the editor cursor move inside a snippet. Use + $1, $2 to specify cursor locations. The number is the order in which + tabstops will be visited, whereas $0 denotes the final cursor position. + Multiple occurrences of the same tabstop are linked and updated in sync. + +Placeholders are tabstops with values, like ${1:foo}. The + placeholder text will be inserted and selected such that it can be easily + changed. Placeholders can be nested, like ${1:another + ${2:placeholder}}. + +Placeholders can have choices as values. The syntax is a comma-separated + enumeration of values, enclosed with the pipe-character, for example + ${1|one,two,three|}. When the snippet is inserted and the + placeholder selected, choices will prompt the user to pick one of the + values. + +With $name or ${name:default}, you can insert the value of a + variable. When a variable isn't set, its default or + the empty string is inserted. When a variable is unknown (that is, its + name isn't defined) the name of the variable is inserted and it is + transformed into a placeholder. + +The following variables can be used: + +* TM_SELECTED_TEXT The currently selected text or the empty string +* TM_CURRENT_LINE The contents of the current line +* TM_CURRENT_WORD The contents of the word under cursor or the empty string +* TM_LINE_INDEX The zero-index based line number +* TM_LINE_NUMBER The one-index based line number +* TM_FILENAME The filename of the current document +* TM_FILENAME_BASE The filename of the current document without its extensions +* TM_DIRECTORY The directory of the current document +* TM_FILEPATH The full file path of the current document +* RELATIVE_FILEPATH The relative (to the opened workspace or folder) file path of the current document +* CLIPBOARD The contents of your clipboard +* WORKSPACE_NAME The name of the opened workspace or folder +* WORKSPACE_FOLDER The path of the opened workspace or folder +* CURSOR_INDEX The zero-index based cursor number +* CURSOR_NUMBER The one-index based cursor number + +For inserting the current date and time: + +* CURRENT_YEAR The current year +* CURRENT_YEAR_SHORT The current year's last two digits +* CURRENT_MONTH The month as two digits (example '02') +* CURRENT_MONTH_NAME The full name of the month (example 'July') +* CURRENT_MONTH_NAME_SHORT The short name of the month (example 'Jul') +* CURRENT_DATE The day of the month as two digits (example '08') +* CURRENT_DAY_NAME The name of day (example 'Monday') +* CURRENT_DAY_NAME_SHORT The short name of the day (example 'Mon') +* CURRENT_HOUR The current hour in 24-hour clock format +* CURRENT_MINUTE The current minute as two digits +* CURRENT_SECOND The current second as two digits +* CURRENT_SECONDS_UNIX The number of seconds since the Unix epoch +* CURRENT_TIMEZONE_OFFSET The current UTC time zone offset as +HH:MM or -HH:MM (example -07:00). + +For inserting random values: + +* RANDOM 6 random Base-10 digits +* RANDOM_HEX 6 random Base-16 digits +* UUID A Version 4 UUID + +For inserting line or block comments, honoring the current language: + +* BLOCK_COMMENT_START Example output: in PHP /* or in HTML +* LINE_COMMENT Example output: in PHP // + +The snippet below inserts /* Hello World */ in JavaScript files and in + HTML files: + +```javascript +{ + ` `"hello": { + ` `"scope": "javascript,html", + ` `"prefix": "hello", + ` `"body": "$BLOCK\_COMMENT\_START Hello World + $BLOCK\_COMMENT\_END" + ` `} + + } +``` + +Transformations allow you to modify the value of a variable before it is + inserted. The definition of a transformation consists of three parts: + +The following example inserts the name of the current file without its + ending, so from foo.txt it makes foo. + +```javascript +${TM\_FILENAME/(.\*)\\..+$/$1/} + ` `| | | |` `| | | |-> no options + ` `| | |` `| | |-> references the contents of the first + ` `| | capture group + ` `| |` `| |-> regex to capture everything before + ` `| the final `.suffix` + ` `| + ` `|-> resolves to the filename +``` + +Like a Variable-Transform, a transformation of a placeholder allows + changing the inserted text for the placeholder when moving to the next tab + stop. The inserted text is matched with the regular expression and the + match or matches - depending on the options - are replaced with the + specified replacement format text. Every occurrence of a placeholder can + define its own transformation independently using the value of the first + placeholder. The format for Placeholder-Transforms is the same as for + Variable-Transforms. + +The examples are shown within double quotes, as they would appear inside a + snippet body, to illustrate the need to double escape certain characters. + Sample transformations and the resulting output for the filename + example-123.456-TEST.js. + +Below is the EBNF (extended Backus-Naur form) for snippets. With \ + (backslash), you can escape $, }, and . Within choice + elements, the backslash also escapes comma and pipe characters. Only the + characters required to be escaped can be escaped, so $ should not be + escaped within these constructs and neither $ or } should be escaped + inside choice constructs. + +```javascript +any ::= tabstop | placeholder | choice | variable | text + + tabstop ::= '$' int + ` `| '${' int '}' + ` `| '${' int transform '}' + + placeholder ::= '${' int ':' any '}' + + choice ::= '${' int '|' text (',' text)\* '|}' + + variable ::= '$' var | '${' var '}' + ` `| '${' var ':' any '}' + ` `| '${' var transform '}' + + transform ::= '/' regex '/' (format | text)+ '/' options + + format ::= '$' int | '${' int '}' + ` `| '${' int ':' '/upcase' | '/downcase' | '/capitalize' | + '/camelcase' | '/pascalcase' '}' + ` `| '${' int ':+' if '}' + ` `| '${' int ':?' if ':' else '}' + ` `| '${' int ':-' else '}' | '${' int ':' else + '}' + + regex ::= JavaScript Regular Expression value (ctor-string) + + options ::= JavaScript Regular Expression option (ctor-options) + + var ::= [\_a-zA-Z] [\_a-zA-Z0-9]\* + + int ::= [0-9]+ + + text ::= .\* + + if ::= text + + else ::= text +``` + +## Using TextMate snippets + +You can also use existing TextMate snippets (.tmSnippets) with + AVAP TM Dev Studio. See the Using TextMate Snippets topic in our + Extension API section to learn more. + +## Assign keybindings to snippets + +You can create custom keybindings to insert specific snippets. Open + keybindings.json ( + Preferences: Open Keyboard Shortcuts File ), which + defines all your keybindings, and add a keybinding passing + "snippet" as an extra argument: + +```javascript +{ + ` `"key": "cmd+k 1", + ` `"command": "editor.action.insertSnippet", + ` `"when": "editorTextFocus", + ` `"args": { + ` `"snippet": "console.log($1)$0" + ` `} + + } +``` + +The keybinding will invoke the Insert Snippet command but + instead of prompting you to select a snippet, it will insert the provided + snippet. You define the custom keybinding as usual with a keyboard + shortcut, command ID, and optional when clause context for when the + keyboard shortcut is enabled. + +Also, instead of using the snippet argument value to define your snippet + inline, you can reference an existing snippet by using the langId and name + arguments. The langId argument selects the language for which the snippet + denoted by name is inserted, e.g the sample below selects the myFavSnippet + that's available for csharp-files. + +```javascript +{ + ` `"key": "cmd+k 1", + ` `"command": "editor.action.insertSnippet", + ` `"when": "editorTextFocus", + ` `"args": { + ` `"langId": "csharp", + ` `"name": "myFavSnippet" + ` `} + + } +``` + +## Next steps + +* Command Line - AVAP TM Dev Studio has a rich command-line interface to open or diff files and install extensions. +* Extension API - Learn about other ways to extend AVAP TM Dev Studio. +* Snippet Guide - You can package snippets for use in AVAP TM {' '} Dev Studio. + +## Common questions + +### What if I want to use existing TextMate snippets from a .tmSnippet file? + +You can easily package TextMate snippets files for use in AVAP + TM Dev Studio. See Using TextMate Snippets in our Extension API + documentation. + +### How do I have a snippet place a variable in the pasted script? + +To have a variable in the pasted script, you need to escape the + '$' of the `$variable` name so that it isn't parsed + by the snippet expansion phase. + +```javascript +"VariableSnippet":{ + ` `"prefix": "\_Var", + ` `"body": "\\$MyVar = 2", + ` `"description": "A basic snippet that places a variable into + script with the $ prefix" + ` `} +``` + +This results in the pasted snippet as: + +```javascript +$MyVar = 2 +``` + +### Can I remove snippets from IntelliSense? + +Yes, you can hide specific snippets from showing in IntelliSense + (completion list) by selecting the{' '} + Hide from IntelliSense button to the right of snippet + items in the Insert Snippet command dropdown. + +You can still select the snippet with the Insert Snippet {' '} + command but the hidden snippet won't be displayed in IntelliSense. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md new file mode 100644 index 0000000..be0acef --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md @@ -0,0 +1,1155 @@ +Lots of tools exist to automate tasks like linting, building, packaging, + testing, or deploying software systems. Examples include the TypeScript + Compiler, linters like ESLint and TSLint as well as build systems like + Make, Ant, Gulp, Jake, Rake, and MSBuild. + +These tools are mostly run from the command line and automate jobs inside + and outside the inner software development loop (edit, compile, test, + and debug). Given their importance in the development life cycle, it + is helpful to be able to run tools and analyze their results from within + AVAP TM Dev Studio. Tasks in AVAP TM Dev Studio can be + configured to run scripts and start processes so that many of these + existing tools can be used from within AVAP TM Dev Studio + without having to enter a command line or write new code. Workspace or + folder specific tasks are configured from the `tasks.json` file + in the `.vscode` folder for a workspace. + +Extensions can also contribute tasks using a Task Provider, and these + contributed tasks can add workspace-specific configurations defined in the{' '} + `tasks.json` file. + +## TypeScript Hello World + +Let's start with a simple "Hello World" TypeScript program + that we want to compile to JavaScript. + +Create an empty folder "mytask", generate a{' '} + `tsconfig.json` file and start AVAP TM Dev Studio + from that folder. + +```javascript +mkdir mytask + + cd mytask + + tsc --init + + code . +``` + +Now create a HelloWorld.ts file with the following content + +```javascript +function sayHello(name: string): void { + ` `console.log(`Hello ${name}!`); + + } + + + sayHello('Dave'); +``` + +Pressing `Ctrl+Shift+B` or running{' '} + Run Build Task from the global Terminal {' '} + menu show the following picker: + +The first entry executes the TypeScript compiler and translates the + TypeScript file to a JavaScript file. When the compiler has finished, + there should be a `HelloWorld.js` file. The second entry starts + the TypeScript compiler in watch mode. Every save to the{' '} + `HelloWorld.ts` file will regenerate the{' '} + `HelloWorld.js` file. + +You can also define the TypeScript build or watch task as the default + build task so that it is executed directly when triggering{' '} + Run Build Task (Ctrl+Shift+B). To do so, select{' '} + Configure Default Build Task from the global{' '} + Terminal menu. This shows you a picker with the available + build tasks. Select tsc: build or{' '} + tsc: watch and AVAP TM Dev Studio will generate + a `tasks.json` file. The one shown below makes the{' '} + tsc: build task the default build task: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "typescript", + ` `"tsconfig": "tsconfig.json", + ` `"problemMatcher": ["$tsc"], + ` `"group": { + ` `"kind": "build", + ` `"isDefault": true + ` `} + ` `} + ` `] + + } +``` + +The `tasks.json` example above does not define a new task. It + annotates the tsc: build tasks contributed by AVAP + TM Dev Studio's TypeScript extension to be the default + build task. You can now execute the TypeScript compiler by pressing{' '} + `Ctrl+Shift+B` . + +## Task auto-detection + +AVAP TM Dev Studio currently auto-detects tasks for the + following systems: Gulp, Grunt, Jake, and npm. We are working with the + corresponding extension authors to add support for Maven and the C# dotnet + command as well. If you develop a JavaScript application using Node.js as + the runtime, you usually have a `package.json` file describing + your dependencies and the scripts to run. If you have cloned the + eslint-starter example, then executing Run Tasks from the + global menu shows the following list: + +If you have not already done so, install the necessary npm modules by + running npm install. Now open the `server.js` file and add a + semicolon to the end of a statement (note the ESLint starter assumes + statements without a semicolon) and execute the{' '} + Run Tasks again. This time select the{' '} + npm: lint task. When prompted for the problem matcher to + use, select ESLint stylish + +Executing the task produces one error, shown in the{' '} + Problems view: + +In addition, AVAP TM Dev Studio created a tasks.json file with + the following content: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"] + ` `} + ` `] + + } +``` + +This instructs AVAP TM Dev Studio to scan the output of the{' '} + npm lint script for problems using the ESLint stylish + format. + +For Gulp, Grunt, and Jake, the task auto-detection works the same. Below + is an example of the tasks detected for the AVAP TM Dev + Studio-node-debug extension. + +Task auto detection can be disabled using the following settings: + +```javascript +{ + ` `"typescript.tsc.autoDetect": "off", + ` `"grunt.autoDetect": "off", + ` `"jake.autoDetect": "off", + ` `"gulp.autoDetect": "off", + ` `"npm.autoDetect": "off" + + } +``` + +## Custom tasks + +Not all tasks or scripts can be auto-detected in your workspace. Sometimes + it is necessary to define your own custom tasks. Assume you have a script + to run your tests in order to set up some environment correctly. The + script is stored in a script folder inside your workspace and named{' '} + `test.sh` for Linux and macOS and `test.cmd` for + Windows. Run Configure Tasks from the global{' '} + Terminal menu and select the{' '} + Create tasks.json file from template entry. This opens + the following picker: + +We are working on more auto-detection support, so this list will get + smaller and smaller in the future. Since we want to write our own custom + task, select Others from the list. This opens the{' '} + `tasks.json` file with a task skeleton. Replace the contents + with the following: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "Run tests", + ` `"type": "shell", + ` `"command": "./scripts/test.sh", + ` `"windows": { + ` `"command": ".\\scripts\\test.cmd" + ` `}, + ` `"group": "test", + ` `"presentation": { + ` `"reveal": "always", + ` `"panel": "new" + ` `} + ` `} + ` `] + + } +``` + +The task's properties have the following semantic: + +* label : The task's label used in the user interface. +* type : The task's type. For a custom task, this can either be `shell` or `process` . If{' '} `shell` is specified, the command is interpreted as a shell command (for example: bash, cmd, or PowerShell). If{' '} `process` is specified, the command is interpreted as a process to execute. +* command : The actual command to execute. +* windows : Any Windows specific properties. Will be used instead of the default properties when the command is executed on the Windows operating system. +* group : Defines to which group the task belongs. In the example, it belongs to the `test` group. Tasks that belong to the test group can be executed by running Run Test Task {' '} from the Command Palette . +* presentation : Defines how the task output is handled in the user interface. In this example, the Integrated Terminal showing the output is `always` revealed and a `new` terminal is created on every task run. +* options : Override the defaults for `cwd` {' '} (current working directory), `env` (environment variables), or shell (default shell). Options can be set per task but also globally or per platform. Environment variables configured here can only be referenced from within your task script or process and will not be resolved if they are part of your args, command, or other task attributes. +* runOptions : Defines when and how a task is run. + +You can see the full set of task properties and values with IntelliSense + in your `tasks.json` file. Bring up suggestions with{' '} + Trigger Suggest (Ctrl+Space) and read the + descriptions on hover or with the Read More... {' '} + ('i') flyout. + +You can also review the tasks.json schema. + +Shell commands need special treatment when it comes to commands and + arguments that contain spaces or other special characters like{' '} + `$` . By default, the task system supports the following + behavior: + +* If a single command is provided, the task system passes the command as is to the underlying shell. If the command needs quoting or escaping to function properly, the command needs to contain the proper quotes or escape characters. For example, to list the directory of a folder containing spaces in its name, the command executed in bash should look like this: `ls 'folder with spaces'` . { ` ` `"label": "dir", ` `"type": "shell", ` `"command": "dir 'folder with spaces'" } ` +* If a command and arguments are provided, the task system will use single quotes if the command or arguments contain spaces. For{' '} `cmd.exe` , double quotes are used. A shell command like below will be executed in PowerShell as{' '} `dir 'folder with spaces'` . ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": ["folder with spaces"] } ` +* If you want to control how the argument is quoted, the argument can be a literal specifying the value and a quoting style. The example below uses escaping instead of quoting for an argument with spaces. ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": [ ` `{ ` `"value": "folder with spaces", ` `"quoting": "escape" ` `} ` `] } ` + +Besides escaping, the following values are supported: + +* strong : Uses the shell's strong quoting mechanism, which suppresses all evaluations inside the string. Under PowerShell and for shells under Linux and macOS, single quotes are used ('). For cmd.exe, " is used. +* weak : Uses the shell's weak quoting mechanism, which still evaluates expression inside the string (for example, environment variables). Under PowerShell and for shells under Linux and macOS, double quotes are used ("). cmd.exe doesn't support weak quoting so AVAP TM Dev Studio uses " as well. + +If the command itself contains spaces, AVAP TM Dev Studio will + by default strong quote the command as well. As with arguments, the user + can control the quoting of the command using the same literal style. + +There are more task properties to configure your workflow. You can use + IntelliSense with Ctrl+Space to get an overview of the valid properties. + +!Tasks IntelliSense + +In addition to the global menu bar, task commands can be accessed using + the Command Palette (Ctrl+Shift+P). You can + filter on 'task' and can see the various task related commands. + +!Tasks in Command Palette + +### Compound tasks + +You can also compose tasks out of simpler tasks with the{' '} + `dependsOn` property. For example, if you have a workspace with + a client and server folder and both contain a build script, you can create + a task that starts both build scripts in separate terminals. If you list + more than one task in the `dependsOn` property, they are + executed in parallel by default. + +The `tasks.json` file looks like this: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "Client Build", + ` `"command": "gulp", + ` `"args": ["build"], + ` `"options": { + ` `"cwd": "${workspaceFolder}/client" + ` `} + ` `}, + ` `{ + ` `"label": "Server Build", + ` `"command": "gulp", + ` `"args": ["build"], + ` `"options": { + ` `"cwd": "${workspaceFolder}/server" + ` `} + ` `}, + ` `{ + ` `"label": "Build", + ` `"dependsOn": ["Client Build", "Server Build"] + ` `} + ` `] + + } +``` + +If you specify " `dependsOrder` ": " + `sequence` ", then your task dependencies are executed in + the order they are listed in `dependsOn` . Any background/watch + tasks used in `dependsOn` with " `dependsOrder` + ": " `sequence` " must have a problem matcher that + tracks when they are "done". The following task runs task Two, + task Three, and then task One. + +```javascript +{ + ` `"label": "One", + ` `"type": "shell", + ` `"command": "echo Hello ", + ` `"dependsOrder": "sequence", + ` `"dependsOn": ["Two", "Three"] + + } +``` + +### User level tasks + +You can create user level tasks that are not tied to a specific workspace + or folder using the Tasks: Open User Tasks command. Only{' '} + `shell` and `process` tasks can be used here since + other task types require workspace information. + +## Output behavior + +Sometimes you want to control how the Integrated Terminal panel behaves + when running tasks. For instance, you may want to maximize editor space + and only look at task output if you think there is a problem. The behavior + of the terminal can be controlled using the presentation property of a + task. It offers the following properties: + +* reveal : Controls whether the Integrated Terminal panel is brought to front. Valid values are:{' '} `always` - The panel is always brought to front. This is the default. `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. +* `always` - The panel is always brought to front. This is the default. +* `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). +* `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. +* revealProblems : Controls whether the Problems panel is revealed when running this task or not. Takes precedence over option{' '} `reveal` . Default is `never` .{' '} `always` - Always reveals the Problems panel when this task is executed. `onProblem` - Only reveals the Problems panel if a problem is found. `never` - Never reveals the Problems panel when this task is executed. +* `always` - Always reveals the Problems panel when this task is executed. +* `onProblem` - Only reveals the Problems panel if a problem is found. +* `never` - Never reveals the Problems panel when this task is executed. +* focus : Controls whether the terminal is taking input focus or not. Default is `false` . +* echo : Controls whether the executed command is echoed in the terminal. Default is `true` . +* showReuseMessage : Controls whether to show the "Terminal will be reused by tasks, press any key to close it" message. +* panel : Controls whether the terminal instance is shared between task runs. Possible values are:{' '} `shared` - The terminal is shared and the output of other task runs are added to the same terminal. `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. `new` - Every execution of that task is using a new clean terminal. +* `shared` - The terminal is shared and the output of other task runs are added to the same terminal. +* `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. +* `new` - Every execution of that task is using a new clean terminal. +* clear : Controls whether the terminal is cleared before this task is run. Default is false. +* close : Controls whether the terminal the task runs in is closed when the task exits. Default is false. +* group : Controls whether the task is executed in a specific terminal group using split panes. Tasks in the same group (specified by a string value) will use split terminals to present instead of a new terminal panel. + +You can modify the terminal panel behavior for auto-detected tasks as + well. For example, if you want to change the output behavior for the{' '} + npm: run lint from the ESLint example from above, add the{' '} + `presentation` property to it: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"], + ` `"presentation": { + ` `"reveal": "never" + ` `} + ` `} + ` `] + + } +``` + +You can also mix custom tasks with configurations for detected tasks. A{' '} + `tasks.json` that configures the npm: run lint {' '} + task and adds a custom Run Test tasks looks like this: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"], + ` `"presentation": { + ` `"reveal": "never" + ` `} + ` `}, + ` `{ + ` `"label": "Run tests", + ` `"type": "shell", + ` `"command": "./scripts/test.sh", + ` `"windows": { + ` `"command": ".\\scripts\\test.cmd" + ` `}, + ` `"group": "test", + ` `"presentation": { + ` `"reveal": "always", + ` `"panel": "new" + ` `} + ` `} + ` `] + + } +``` + +## Run behavior + +You can specify a task's run behaviors using the{' '} + `runOptions` property: + +* reevaluateOnRerun : Controls how variables are evaluated when a task is executed through the Rerun Last Task {' '} command. The default is `true` , meaning that variables will be reevaluated when a task is rerun. When set to `false` the resolved variable values from the previous run of the task will be used. +* runOn : Specifies when a task is run.{' '} `default` - The task will only be run when executed through the Run Task command. `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . +* `default` - The task will only be run when executed through the Run Task command. +* `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . + +## Customizing auto-detected task + +As mentioned above, you can customize auto-detected tasks in the{' '} + `tasks.json` file. You usually do so to modify presentation + properties or to attach a problem matcher to scan the task's output + for errors and warnings. You can customize a task directly from the{' '} + Run Task list by pressing the gear icon to the right to + insert the corresponding task reference into the `tasks.json` {' '} + file. Assume you have the following Gulp file to lint JavaScript files + using ESLint (the file is taken from (Link)): + +```javascript +const gulp = require('gulp'); + + const eslint = require('gulp-eslint'); + + + gulp.task('lint', () => { + ` `// ESLint ignores files with "node\_modules" paths. + ` `// So, it's best to have gulp ignore the directory as well. + ` `// Also, Be sure to return the stream from the task; + ` `// Otherwise, the task may end before the stream has finished. + ` `return ( + ` `gulp + + .src(['\*\*/\*.js', '!node\_modules/\*\*']) + ` `// eslint() attaches the lint output to the "eslint" + property + ` `// of the file object so it can be used by other modules. + + .pipe(eslint()) + ` `// eslint.format() outputs the lint results to the + console. + ` `// Alternatively use eslint.formatEach() (see + Docs). + + .pipe(eslint.format()) + ` `// To have the process exit with an error code (1) on + ` `// lint error, return the stream and pipe to failAfterError + last. + + .pipe(eslint.failAfterError()) + ` `); + + }); + + gulp.task('default', ['lint'], function() { + ` `// This will only run if the lint task is successful... + + }); +``` + +Executing Run Task from the global{' '} + Terminal menu will show the following picker: + +Press the gear icon. This will create the following{' '} + `tasks.json` file: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "gulp", + ` `"task": "default", + ` `"problemMatcher": [] + ` `} + ` `] + + } +``` + +Usually you would now add a problem matcher (in this case{' '} + `$eslint-stylish` ) or modify the presentation settings. + +## Processing task output with problem matchers + +AVAP TM Dev Studio can process the output from a task with a + problem matcher. Problem matchers scan the task output text for known + warning or error strings, and report these inline in the editor and in the + Problems panel. AVAP TM Dev Studio ships with several problem + matchers 'in-the-box': + +* TypeScript : `$tsc` assumes that file names in the output are relative to the opened folder. +* TypeScript Watch : `$tsc` -watch matches problems reported from the tsc compiler when executed in watch mode. +* JSHint : `$jshint` assumes that file names are reported as an absolute path. +* JSHint Stylish : `$jshint-stylish` assumes that file names are reported as an absolute path. +* ESLint Compact : `$eslint-compact` assumes that file names in the output are relative to the opened folder. +* ESLint Stylish : `$eslint-stylish` assumes that file names in the output are relative to the opened folder. +* Go : `$go` matches problems reported from the go compiler. Assumes that file names are relative to the opened folder. +* CSharp and VB Compiler : `$mscompile` assumes that file names are reported as an absolute path. +* Lessc compiler : `$lessc` assumes that file names are reported as absolute path. +* Node Sass compiler : `$node-sass` assumes that file names are reported as an absolute path. + +You can also create your own problem matcher, which we'll discuss in a + later section. + +## Binding keyboard shortcuts to tasks + +If you need to run a task frequently, you can define a keyboard shortcut + for the task. + +For example, to bind `Ctrl+H` to the Run tests {' '} + task from above, add the following to your `keybindings.json` {' '} + file: + +```javascript +{ + ` `"key": "ctrl+h", + ` `"command": "workbench.action.tasks.runTask", + ` `"args": "Run tests" + + } +``` + +## Variable substitution + +When authoring tasks configurations, it is useful to have a set of + predefined common variables such as the active file ( + `${file}` ) or workspace root folder ( + `${workspaceFolder}` ). AVAP TM Dev + Studio supports variable substitution inside strings in the{' '} + `tasks.json` file and you can see a full list of predefined + variables in the Variables Reference. + +Below is an example of a custom task configuration that passes the current + opened file to the TypeScript compiler. + +```javascript +{ + ` `"label": "TypeScript compile", + ` `"type": "shell", + ` `"command": "tsc ${file}", + ` `"problemMatcher": ["$tsc"] + + } +``` + +Similarly, you can reference your project's configuration settings by + prefixing the name with ${config: . For example,{' '} + `${config:python.formatting.autopep8Path}` returns + the Python extension setting `formatting.autopep8Path` . + +Below is an example of a custom task configuration, which executes + autopep8 on the current file using the autopep8 executable defined by the{' '} + `python.formatting.autopep8Path` setting: + +```javascript +{ + ` `"label": "autopep8 current file", + ` `"type": "process", + ` `"command": + "${config:python.formatting.autopep8Path}", + ` `"args": ["--in-place", "${file}"] + + } +``` + +If you want to specify the selected Python interpreter used by the Python + extension for `tasks.json` or `launch.json` , you can + use the `${command:python.interpreterPath}` command. + +If simple variable substitution isn't enough, you can also get input + from the user of your task by adding an `inputs` section to + your `tasks.json` file. + +For more information about `inputs` , see the Variables + Reference. + +## Operating system specific properties + +The task system supports defining values (for example, the command to + be executed) specific to an operating system. To do so, put an + operating system specific literal into the `tasks.json` file + and specify the corresponding properties inside that literal. + +Below is an example that uses the Node.js executable as a command and is + treated differently on Windows and Linux: + +```javascript +{ + ` `"label": "Run Node", + ` `"type": "process", + ` `"windows": { + ` `"command": "C:\\Program Files\\nodejs\\node.exe" + ` `}, + ` `"linux": { + ` `"command": "/usr/bin/node" + ` `} + + } +``` + +Valid operating properties are `windows` for Windows, linux for{' '} + `Linux` , and `osx` for macOS. Properties defined in + an operating system specific scope override properties defined in the task + or global scope. + +## Global tasks + +Task properties can also be defined in the global scope. If present, they + will be used for specific tasks unless they define the same property with + a different value. In the example below, there is a global{' '} + `presentation` property, which defines that all tasks should be + executed in a new panel: + +```javascript +{ + ` `"label": "Run Node", + ` `"type": "process", + ` `"windows": { + ` `"command": "C:\\Program Files\\nodejs\\node.exe" + ` `}, + ` `"linux": { + ` `"command": "/usr/bin/node" + ` `} + + } +``` + +### Character escaping in PowerShell + +When the default shell is PowerShell, or when a task is configured to use + PowerShell, you might see unexpected space and quote escaping. The + unexpected escaping only occurs with cmdlets because AVAP TM Dev + Studio doesn't know if your command contains cmdlets. Example 1 below + shows a case where you'll get escaping that doesn't work with + PowerShell. Example 2 shows the best, cross-platform, way to get good + escaping. In some cases, you might not be able to follow example 2 and + you'll need to do the manual escaping shown in example 3. + +```javascript +"tasks": [` `{ + ` `"label": "PowerShell example 1 (unexpected escaping)", + ` `"type": "shell", + ` `"command": "Get-ChildItem \"Folder With Spaces\"" + ` `}, + ` `{ + ` `"label": "PowerShell example 2 (expected escaping)", + ` `"type": "shell", + ` `"command": "Get-ChildItem", + ` `"args": ["Folder With Spaces"] + ` `}, + ` `{ + ` `"label": "PowerShell example 3 (manual escaping)", + ` `"type": "shell", + ` `"command": "& Get-ChildItem \\\"Folder With Spaces\\\"" + ` `} + ] +``` + +## Changing the encoding for a task output + +Tasks frequently act with files on disk. If these files are stored on disk + with an encoding different than the system encoding, you need to let the + command executed as a task know which encoding to use. Since this depends + on the operating system and the shell used, there is no general solution + to control this. Below are advice and examples on how to make it work. + +If you need to tweak the encoding, you should check whether it makes sense + to change the default encoding used by your operating system or at least + change it for the shell you use by tweaking the shell's profile file. + +If you only need to tweak it for a specific task, then add the OS-specific + command necessary to change the encoding to the tasks command line. The + following example is for Windows using code page of 437 as its default. + The task shows the output of a file containing Cyrillic characters and + therefore needs code page 866. The task to list the file looks like this + assuming that the default shell is set to `cmd.exe` : + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "more", + ` `"type": "shell", + ` `"command": "chcp 866 && more russian.txt", + ` `"problemMatcher": [] + ` `} + ` `] + + } +``` + +If the task is executed in `PowerShell` , the command needs to + read like this `chcp 866` ; more `russian.txt` . On + Linux and macOS, the locale command can be used to inspect the{' '} + `locale` and tweak the necessary environment variables. + +## Examples of tasks in action + +To highlight the power of tasks, here are a few examples of how AVAP + TM Dev Studio can use tasks to integrate external tools like + linters and compilers. + +### Transpiling TypeScript to JavaScript + +The TypeScript topic includes an example that creates a task to transpile + TypeScript to JavaScript and observe any related errors from within AVAP + TM Dev Studio. + +### Transpiling Less and SCSS into CSS + +The CSS topic provides examples of how to use Tasks to generate CSS files. + +## Defining a problem matcher + +AVAP TM Dev Studio ships some of the most common problem + matchers 'in-the-box'. However, there are lots of compilers and + linting tools out there, all of which produce their own style of errors + and warnings so you may want to create your own problem matcher. + +We have a `helloWorld.c` program in which the developer + mistyped printf as prinft . Compiling it + with gcc will produce the following warning: + +```javascript +helloWorld.c:5:3: warning: implicit declaration of function ‘prinft’ +``` + +We want to produce a problem matcher that can capture the message in the + output and show a corresponding problem in AVAP TM Dev Studio. + Problem matchers heavily rely on regular expressions. The section below + assumes you are familiar with regular expressions. + +A matcher that captures the above warning (and errors) looks like + this: + +```javascript +{ + ` `// The problem is owned by the cpp language service. + ` `"owner": "cpp", + ` `// The file name for reported problems is relative to the + opened folder. + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `// The actual pattern to match problems in the output. + ` `"pattern": { + ` `// The regular expression. Example to match: helloWorld.c:5:3: + warning: implicit declaration of function ‘printf’ + [-Wimplicit-function-declaration] + ` `"regexp": + "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", + ` `// The first match group matches the file name which is + relative. + ` `"file": 1, + ` `// The second match group matches the line on which the problem + occurred. + ` `"line": 2, + ` `// The third match group matches the column at which the + problem occurred. + ` `"column": 3, + ` `// The fourth match group matches the problem's severity. Can + be ignored. Then all problems are captured as errors. + ` `"severity": 4, + ` `// The fifth match group matches the message. + ` `"message": 5` `} + + } +``` + +Note that the file, line, and message properties are mandatory. The{' '} + `fileLocation` specifies whether the file paths that are + produced by the task output and matched in the problem are{' '} + `absolute` or `relative` . If the task produces both + absolute and relative paths, you can use the `autoDetect` file + location. With `autoDetect` , paths are first tested as absolute + paths, and if the file doesn't exist then the path is assumed to be + relative. + +Here is a finished tasks.json file with the code above (comments + removed) wrapped with the actual task details: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "build", + ` `"command": "gcc", + ` `"args": ["-Wall", "helloWorld.c", "-o", "helloWorld"], + ` `"problemMatcher": { + ` `"owner": "cpp", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": { + ` `"regexp": + "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", + ` `"file": 1, + ` `"line": 2, + ` `"column": 3, + ` `"severity": 4, + ` `"message": 5` `} + ` `} + ` `} + ` `] + + } +``` + +Running it inside AVAP TM Dev Studio and pressing Ctrl+Shift+M + to get the list of problems gives you the following output: + +There are a couple more properties that can be used inside a pattern. + These are: + +* location - If the problem location is line or line,column or startLine,startColumn,endLine,endColumn, then our generic location match group can be used. +* endLine - The match group index for the problem's end line. Can be omitted if no end line value is provided by the compiler. +* endColumn - The match group index for the problem's end column. Can be omitted if no end column value is provided by the compiler. +* code - The match group index for the problem's code. Can be omitted if no code value is provided by the compiler. + +You can also define a problem matcher that captures only a file. To do so, + define a `pattern` with the optional `kind` {' '} + attribute set to `file` . In this case, there is no need to + provide a `line` or `location` property. + +## Defining a multiline problem matcher + +Some tools spread problems found in a source file over several lines, + especially if stylish reporters are used. An example is ESLint; in stylish + mode it produces output like this: + +```javascript +test.js + ` `1:0 error Missing "use strict" statement strict + + ✖ 1 problems (1 errors, 0 warnings) +``` + +Our problem matcher is line-based so we need to capture the file name + (test.js) with a different regular expression than the actual + problem location and message (1:0 error Missing "use strict" + statement). + +To do this, use an array of problem patterns for the `pattern` {' '} + property. This way you define a pattern per each line you want to match. + +The following problem pattern matches the output from ESLint in stylish + mode - but still has one small issue that we need to resolve next. The + code below has a first regular expression to capture the file name and the + second to capture the line, column, severity, message, and error code: + +```javascript +{ + ` `"owner": "javascript", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": [` `{ + ` `"regexp": "^([^\\s].\*)$", + ` `"file": 1` `}, + ` `{ + ` `"regexp": + "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", + ` `"line": 1, + ` `"column": 2, + ` `"severity": 3, + ` `"message": 4, + ` `"code": 5` `} + ` `] + + } +``` + +However, this pattern will not work if there is more than one problem on a + resource. For instance, imagine the following output from ESLint: + +```javascript +test.js + ` `1:0 error Missing "use strict" statement strict + ` `1:9 error foo is defined but never used no-unused-vars + ` `2:5 error x is defined but never used no-unused-vars + ` `2:11 error Missing semicolon semi + ` `3:1 error "bar" is not defined no-undef + ` `4:1 error Newline required at end of file but not found + eol-last + + ✖ 6 problems (6 errors, 0 warnings) +``` + +The pattern's first regular expression will match "test.js", + the second "1:0 error ...". The next line "1:9 error + ..." is processed but not matched by the first regular expression and + so no problem is captured. + +To make this work, the last regular expression of a multiline pattern can + specify the `loop` property. If set to true, it instructs the + task system to apply the last pattern of a multiline matcher to the lines + in the output as long as the regular expression matches. + +The information captured by the first pattern, which in this case matches{' '} + `test.js` , will be combined with each of the subsequent lines + that match the `loop` pattern to create multiple problems. In + this example, six problems would be created. + +Here is a problem matcher to fully capture ESLint stylish problems: + +```javascript +{ + ` `"owner": "javascript", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": [` `{ + ` `"regexp": "^([^\\s].\*)$", + ` `"file": 1` `}, + ` `{ + ` `"regexp": + "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", + ` `"line": 1, + ` `"column": 2, + ` `"severity": 3, + ` `"message": 4, + ` `"code": 5, + ` `"loop": true + ` `} + ` `] + + } +``` + +## Modifying an existing problem matcher + +If an existing problem matcher is close to what you need, you can modify + it in your `tasks.json` task. For example, the{' '} + `$tsc-watch` problem matcher only applies to closed documents. + If you want to have it apply to all documents you can modify it: + +```javascript +{ + ` `"type": "npm", + ` `"script": "watch", + ` `"problemMatcher": { + ` `"base": "$tsc-watch", + ` `"applyTo": "allDocuments" + ` `}, + ` `"isBackground": true + + } +``` + +Other modifiable problem matcher properties include{' '} + `background` , `fileLocation` , `owner` ,{' '} + `pattern` , `severity` , and `source` . + +## Background / watching tasks + +Some tools support running in the background while watching the file + system for changes and then triggering an action when a file changes on + disk. With `Gulp` such functionality is provided through the + npm module gulp-watch. The TypeScript compiler `tsc` has built + in support for this via the `--watch` command line option. + +To provide feedback that a background task is active in AVAP TM {' '} + Dev Studio and producing problem results, a problem matcher has to use + additional information to detect these state changes in the output. + Let's take the `tsc` compiler as an example. When the + compiler is started in watch mode, it prints the following additional + information to the console: + +```javascript +\> tsc --watch + + 12:30:36 PM - Compilation complete. Watching for file changes. +``` + +When a file changes on disk that contains a problem, the following output + appears: + +```javascript +12:32:35 PM - File change detected. Starting incremental compilation... + + src/messages.ts(276,9): error TS2304: Cannot find name + 'candidate'. + + 12:32:35 PM - Compilation complete. Watching for file changes. +``` + +Looking at the output shows the following pattern: + +* The compiler runs when{' '} `File change detected. Starting incremental compilation...` {' '} is printed to the console. +* The compiler stops when C `ompilation complete. Watching for file changes` . is printed to the console. +* Between those two strings problems are reported. +* The compiler also runs once the initial start (without printing{' '} `File change detected. Starting incremental compilation` ... to the console). + +To capture this information, a problem matcher can provide a{' '} + `background` property. + +For the `tsc` compiler, an appropriate `background` {' '} + property looks like this: + +```javascript +"background": { + ` `"activeOnStart": true, + ` `"beginsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - File change detected\\. Starting incremental + compilation\\.\\.\\.", + ` `"endsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - Compilation complete\\. Watching for file changes\\." + + } +``` + +In addition to the `background` property on the problem + matcher, the task itself has to be marked as `isBackground` so + that the task keeps running in the background. + +A full handcrafted `tasks.json` for a `tsc` task + running in watch mode looks like this: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "watch", + ` `"command": "tsc", + ` `"args": ["--watch"], + ` `"isBackground": true, + ` `"problemMatcher": { + ` `"owner": "typescript", + ` `"fileLocation": "relative", + ` `"pattern": { + ` `"regexp": + "^([^\\s].\*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s\*:\\s\*(.\*)$", + ` `"file": 1, + ` `"location": 2, + ` `"severity": 3, + ` `"code": 4, + ` `"message": 5` `}, + ` `"background": { + ` `"activeOnStart": true, + ` `"beginsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - File change detected\\. Starting incremental + compilation\\.\\.\\.", + ` `"endsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - Compilation complete\\. Watching for file changes\\." + ` `} + ` `} + ` `} + ` `] + + } +``` + +## Next steps + +That was tasks - let's keep going... + +* tasks.json Schema - You can review the full `tasks.json` {' '} schema and descriptions. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. +* Language Support - Learn about our supported programming languages, both shipped with AVAP TM Dev Studio and through community extensions. +* Debugging - Debug your source code directly in the AVAP TM Dev Studio editor. + +## Common questions + +### Can a task use a different shell than the one specified for the Integrated + Terminal? + +Yes. You can use the " + `terminal.integrated.automationProfile.\*` " setting to set + the shell that will be used for all automation in AVAP TM Dev + Studio, which includes Tasks. + +```javascript +` `"terminal.integrated.automationProfile.windows": { + ` `"path": "cmd.exe" + ` `} +``` + +Alternatively, you can override a task's shell with the{' '} + `options.shell` property. You can set this per task, globally, + or per platform. For example, to use cmd.exe on Windows, your{' '} + `tasks.json` would include: + +```javascript +` `"version": "2.0.0", + ` `"windows": { + ` `"options": { + ` `"shell": { + ` `"executable": "cmd.exe", + ` `"args": [` `"/d", "/c" + ` `] + ` `} + ` `} + ` `}, + + ... +``` + +### Can a background task be used as a prelaunchTask in launch.json? + +Yes. Since a background task will run until killed, a background task on + its own has no signal that it has "completed". To use a + background task as a `prelaunchTask` , you must add an + appropriate background `problemMatcher` to the background task + so that there is a way for the task system and debug system to know that + the task "finished". + +Your task could be: + +```javascript +{ + ` `"type": "npm", + ` `"script": "watch", + ` `"problemMatcher": "$tsc-watch", + ` `"isBackground": true + + } +``` + +You can then use the task as a prelaunchTask in your{' '} + `launch.json` file: + +```javascript +{ + ` `"name": "Launch Extension", + ` `"type": "extensionHost", + ` `"request": "launch", + ` `"runtimeExecutable": "${execPath}", + ` `"args": + ["--extensionDevelopmentPath=${workspaceRoot}"], + ` `"stopOnEntry": false, + ` `"sourceMaps": true, + ` `"outFiles": ["${workspaceRoot}/out/src/\*\*/\*.js"], + ` `"preLaunchTask": "npm: watch" + + } +``` + +For more on background tasks, go to Background / watching tasks. + +### Why do I get "command not found" when running a task? + +The message "command not found" happens when the task command + you're trying to run is not recognized by your terminal as something + runnable. Most often, this occurs because the command is configured as + part of your shell's startup scripts. Tasks are run as non-login and + non-interactive, which means that the startup scripts for your shell + won't be run. nvm in particular is known to use startup scripts as + part of its configuration. + +There are several ways to resolve this issue: + +The above `npm` task will run bash with a command ( + `-c` ), just like the tasks system does by default. However, + this task also runs `bash` as a login shell ( + `-l` ). diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md new file mode 100644 index 0000000..b1e4c50 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md @@ -0,0 +1,365 @@ +AVAP TM Dev Studio takes security seriously and wants to help + you safely browse and edit code no matter the source or original authors. + The Workspace Trust feature lets you decide whether code in your project + folder can be executed by AVAP TM Dev Studio and extensions + without your explicit approval. + +![Trust this folder dialog] + +## Safe code browsing + +It's great that there is so much source code available on public + repositories and file shares. No matter the coding task or problem, there + is probably already a good solution available somewhere. It is also great + that there are so many powerful coding tools available to help you + understand, debug, and optimize your code. However, using open-source code + and tools does have risks, and you can leave yourself open to malicious + code execution and exploits. + +Workspace Trust provides an extra layer of security when working with + unfamiliar code, by preventing automatic code execution of any code in + your workspace if the workspace is open in "Restricted Mode". + +## Restricted Mode + +When prompted by the Workspace Trust dialog, if you choose{' '} + No, I don't trust the authors , AVAP TM Dev + Studio will go into Restricted Mode to prevent code execution. The + workbench will display a banner at the top with links to{' '} + Manage your folder via the Workspace Trust editor, and{' '} + Learn More about Workspace Trust (which takes you to + back to this documentation). + +You will also see a Restricted Mode badge in the Status bar. + +Restricted Mode tries to prevent automatic code execution by disabling or + limiting the operation of several AVAP TM Dev Studio features: + tasks, debugging, workspace settings, and extensions. + +To see the full list of features disabled in Restricted Mode, you can open + the Workspace Trust editor via the Manage link in the + banner, or by clicking the Restricted Mode badge in the Status bar. + +Tasks can run scripts and tool binaries, and because task definitions are + defined in the workspace `.vscode` folder, they are part of the + committed source code for a repo, and shared to every user of that repo. + Were someone to create a malicious task, it could be unknowingly run by + anyone who cloned that repository. + +If you try to run or even enumerate tasks ( Terminal {' '} + > Run Task... ) while in Restricted Mode, AVAP + TM Dev Studio will display a prompt to trust the folder and + continue executing the task. Cancelling the dialog leaves AVAP + TM Dev Studio in Restricted Mode. + +### Debugging + +Similar to running a AVAP TM Dev Studio task, debug extensions + can run debugger binaries when launching a debug session. For that reason, + debugging is also disabled when a folder is open in Restricted Mode. + +If you try to start a debug session ( Run >{' '} + Start Debugging ) while in Restricted Mode, AVAP + TM Dev Studio will display a prompt to trust the folder and + continue launching the debugger. Cancelling the dialog leaves AVAP + TM Dev Studio in Restricted Mode, and does not start the debug + session. + +Workspace settings are stored in the .vscode folder at the root of your + workspace, and are therefore shared by anyone who clones the workspace + repository. Some settings contain paths to executables (for example, + linter binaries), which if set to point to malicious code, could do + damage. For this reason, there is a set of workspace settings that are + disabled when running in Restricted Mode. + +In the Workspace Trust editor, there is a link to display the workspace + settings that aren't being applied. Clicking the link brings up the + Settings editor scoped by the tag:requireTrustedWorkspace tag. + +The AVAP TM Dev Studio extensions ecosystem is incredibly rich + and diverse. People have created extensions to help with just about any + programming task or editor customization. Some extensions provide full + programming language support (IntelliSense, debugging, code + analysis), and others let you play music or have virtual pets. + +Most extensions run code on your behalf and could potentially do harm. + Some extensions have settings that could cause them to act maliciously if + configured to run an unexpected executable. For this reason, extensions + that have not explicitly opted into Workspace Trust are disabled by + default in Restricted Mode. + +You can review an installed extension's status by clicking the{' '} + extensions are disabled or have limited functionality {' '} + link in the Workspace Trust editor, which displays the Extensions view + scoped with the `@workspaceUnsupported` filter. + +Disabled in Restricted Mode + +Extensions that have either not explicitly indicated that they support + running in Restricted Mode are shown in the{' '} + Disabled in Restricted Mode section. An extension author + can also indicate that they never want to be enabled in Restricted Mode if + they determine that their extension could be misused by modifications + (settings or files) in a workspace. + +Limited in Restricted Mode + +Extension authors can also evaluate their extensions for possible security + vulnerabilities and declare that they have limited {' '} + support when running in Restricted Mode. This mode means the extension may + disable some features or functionality to prevent a possible exploit. + +Extensions can add custom text to the Extensions view Workspace Trust + badge explaining the limitation when running in an untrusted folder. + +For example, the AVAP TM Dev Studio built-in PHP extension + limits the use of the `php.validate.executablePath` setting to + trusted folders since overriding this setting could run a malicious + program. + +You can override an extension's Workspace Trust support level using + the `extensions.supportUntrustedWorkspaces` setting described + in the Enabling extensions section below. + +If you try to install an extension in Restricted Mode, you will be + prompted to either trust the workspace or just install the extension. If + the extension doesn't support Workspace Trust, it will be installed, + but be disabled or running with limited functionality. + +## Trusting a workspace + +If you trust the authors and maintainers of a project, you can trust the + project's folder on your local machine. For example, it is usually + safe to trust repositories from well-known GitHub organizations such as + github.com/microsoft or github.com/docker. + +The initial Workspace Trust prompt when you open a new folder allows you + to trust that folder and its subfolders. + +You can also bring up the Workspace Editor and quickly toggle a + folder's trusted state. + +There are several ways to bring up the Workspace Editor dialog. + +When in Restricted Mode: + +* Restricted Mode banner Manage link +* Restricted Mode Status bar item + +You can also at any time use: + +* Workspaces: Manage Workspace Trust command from the Command Palette (Ctrl+Shift+P) +* Manage Workspace Trust from the Manage {' '} gear in the Activity bar + +## Selecting folders + +When you trust a folder, it is added to the{' '} + Trusted Folders & Workspaces list displayed in the + Workspace Trust editor. + +You can manually add, edit, and remove folders from this list and the + active folder enabling trust is highlighted in bold. + +When you trust a folder via the Workspace Trust editor, you have the + option to trust the parent folder. This will apply trust to the parent + folder and all subfolders. + +This can be helpful if you have many folders with trusted content + co-located under one folder. + +When opening a subfolder under a trusted parent, you won't see the + usual Don't Trust button to put you back in + Restricted Mode, instead there is text mentioning that your folder is + trusted due to another folder. + +You can add, modify, and remove a parent folder entry from the{' '} + Trusted Folders & Workspaces list. + +As mentioned above, you can trust a parent folder and all subfolders will + be trusted. This allows you to control Workspace Trust via a + repository's location on disk. + +For example, you could put all trusted repos under a + "TrustedRepos" parent folder, and unfamiliar repos under another + parent folder such as "ForEvaluation". You would trust the + "TrustedRepos" folder, and selectively trust folders under + "ForEvaluation". + +```javascript +TrustedRepos - Clone trusted repositories under this parent folder + + + ForEvaluation - Clone experimental or unfamiliar repositories under this + parent folder +``` + +You also group and set trust on your repositories by grouping them under + organization-base parent folders. + +```javascript +github/microsoft - Clone a specific organization's repositories under + this parent folder + + + github/{myforks} - Place your forked repositories under this + parent folder + + + local - Local un-published repositories +``` + +## Enabling extensions + +What happens if you want to use Restricted Mode but your favorite + extension doesn't support Workspace Trust? This can happen if an + extension, while useful and functional, isn't being actively + maintained and hasn't declared their Workspace Trust support. To + handle this scenario, you can override the extension's trust state + with the `extensions.supportUntrustedWorkspaces setting` . + +If you open the Settings editor (Ctrl+,) and search for + "trust extensions", you can find the{' '} + Extensions: Support Untrusted Workspaces setting, which + has an Edit in settings.json link. + +Select that link and you will go to your user settings.json file with a + new entry for extensions.supportUntrustedWorkspaces. This setting takes an + object that has a list of extension IDs and their support status and + version. You can select any of your installed extensions via IntelliSense + suggestions. + +Below you can see a settings.json entry for the Prettier extension. + +```javascript +` `"extensions.supportUntrustedWorkspaces": { + ` `"esbenp.prettier-vscode": { + ` `"supported": true, + ` `"version": "6.4.0" + ` `}, + ` `}, +``` + +You can either enable or disable Workspace Trust support with the + supported attribute. The version attribute specifies the exact extension + version applicable and you can remove the version field if you want to set + the state for all versions. + +If you'd like to learn more about how extension authors evaluate and + determine which features to limit in Restricted Mode, you can read the + Workspace Trust Extension Guide. + +## Opening untrusted files + +If you open a file that is located outside of a trusted folder, AVAP + TM Dev Studio will detect that the file comes from somewhere + outside the folder root and prompt you with the option to continue to open + the file or open the file in a new window in Restricted Mode. Opening in + Restricted Mode is the safest option and you can always reopen the file in + your original AVAP TM Dev Studio window once you determine the + file is trustworthy. + +If you would prefer to not be prompted when opening files from outside + trusted workspaces, you can set{' '} + `security.workspace.trust.untrustedFiles` to `open` . + You can also set `security.workspace.trust.untrustedFiles` to{' '} + `newWindow` to always create a new window in Restricted Mode. + Checking the Remember my decision for all workspaces {' '} + option in the untrusted files dialog applies your choice to the{' '} + `security.workspace.trust.untrustedFiles` user setting. + +### Opening untrusted folders + +When working with multi-root workspaces with multiple folders, if you try + to add a new folder to a trusted multi-root workspace, you will be + prompted to decide if you trust the files in that folder or if not, the + entire workspace will switch to Restricted Mode. + +### Empty windows (no open folder) + +By default, if you open a new AVAP TM Dev Studio window + (instance) without opening a folder or workspace, AVAP + TM Dev Studio runs the window with full trust. All installed + extensions are enabled and you can use the empty window without + restrictions. + +When you open a file, you will be prompted whether you want to open an + untrusted file since there is no folder to parent it. + +You can switch an empty window to Restricted Mode using the Workspace + Trust editor (select Manage Workspace Trust from the{' '} + Manage gear button or the Command Palette) and + selecting Don't Trust . The empty window will remain + in Restricted Mode for your current session but will go back to trusted if + you restart or create a new window. + +If you want all empty windows to be in Restricted Mode, you can set{' '} + `security.workspace.trust.emptyWindow` to false. + +## Settings + +Below are the available Workspace Trust settings: + +* `security.workspace.trust.enabled` - Enable Workspace Trust feature. Default is true. +* `security.workspace.trust.startupPrompt` - Whether to show the Workspace Trust dialog on startup. Default is to only show once per distinct folder or workspace. +* `security.workspace.trust.emptyWindow` - Whether to always trust an empty window (no open folder). Default is true. +* `security.workspace.trust.untrustedFiles` - Controls how to handle loose files in a workspace. Default is to prompt. +* `extensions.supportUntrustedWorkspaces` - Override extension Workspace Trust declarations. Either true or false. +* `security.workspace.trust.banner` - Controls when the Restricted Mode banner is displayed. Default is untilDismissed. + +## Command-line switch + +You can disable Workspace Trust via the AVAP TM Dev Studio + command line by passing --disable-workspace-trust. This switch only + affects the current session. + +## Next steps + +Learn more at: + +* Workspace Trust Extension Guide - Learn how extension authors can support Workspace Trust. +* What is a AVAP TM Dev Studio "workspace"? - Find out more details about the AVAP TM Dev Studio "workspace" concept. +* GitHub Repositories extension - Work directly on a repository without cloning the source code to your local machine. + +## Common questions + +Yes, you can still browse and edit source code in Restricted Mode. Some + language features may be disabled, but text editing is always supported. + +In Restricted Mode, any extension that doesn't support Workspace Trust + will be disabled, and all UI elements such as Activity bar icons and + commands will not be displayed. + +You can override an extension's Workspace Trust support level with the{' '} + `extensions.supportUntrustedWorkspaces` setting but do so with + care. Enabling extensions has more details. + +You can but it is not recommended. If you don't want AVAP TM {' '} + Dev Studio to check for Workspace Trust when opening a new folder or + repository, you can set `security.workspace.trust.enabled` to + false. AVAP TM Dev Studio will then behave as it did before the + 1.57 release. + +Bring up Workspace Trust editor ( + Workspaces: Manage Workspace Trust from the Command + Palette) and select the Don't Trust button. You + can also remove the folder from the{' '} + Trusted Folders & Workspaces list. + +If you don't see the Don't Trust button in the + Workspace Trust dialog, the folder's trust level may be inherited from + a parent folder. Review the{' '} + Trusted Folders & Workspaces list to check if a + parent folder has enabled Workspace Trust. + +Some workflows such as connecting to a GitHub Codespace or attaching to a + running Docker container are automatically trusted since these are managed + environments to which you should already have a high level of trust. + +Many features of AVAP TM Dev Studio allow third-party tools and + extensions to run automatically, such as linting or format on save, or + when you do certain operations like compiling code or debugging. An + unethical person could craft an innocent looking project that would run + malicious code without your knowledge and harm your local machine. + Workspace Trust provides an extra layer of security by trying to prevent + code execution while you are evaluating the safety and integrity of + unfamiliar source code. diff --git a/docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md b/docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md new file mode 100644 index 0000000..73ee097 --- /dev/null +++ b/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md @@ -0,0 +1,180 @@ +This service is used to send an OTP to an external phone on the platform. + +POST: + `URL_BASE + /ws/util.py/send_otp` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "amount" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `amount:` Amount of the operation with the applied format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/send_otp" + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'phone_number' + :{' '} + '7229063245' + , + 'signature' + :{' '} + + '277b62946d7ed08cf23a5613e3becc4711322abd' + + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/util.py/send_otp', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'phone_number': '7229063245', + 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("phone_number", "7229063245"); + formdata.append("signature", + "277b62946d7ed08cf23a5613e3becc4711322abd"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/send_otp", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/util.py/send_otp'{' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + 'phone_number=7229063245'{' '} + \ + --form{' '} + + 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' +``` + +## Business logic: + +This service must be executed by a user who has an administrator profile. + An OTP is sent to the phone indicated with the default message, or the one + entered in the request. diff --git a/docs/developer.avapframework.com/7_Plan_Wallets.md b/docs/developer.avapframework.com/7_Plan_Wallets.md new file mode 100644 index 0000000..a33bef2 --- /dev/null +++ b/docs/developer.avapframework.com/7_Plan_Wallets.md @@ -0,0 +1,16 @@ +Plan Wallets All the existing plans in 101OBeX have a wallet, that will be + used as a rounded account to discount each of the transactional services + that are operated. + +IT IS IMPORTANT TO CLARIFY THAT THE WALLET THAT MAINTAINS THE BALANCES OF + THE NODES OR PROJECTS DOES NOT CHARGE THE MONTHLY SUBSCRIPTION, NOR THE + ADD-ONS, NOR THE PLUGINS THAT MAY BE ACTIVE. THE PURPOSE OF THE WALLET OF + EACH SUBSCRIPTION IS TO PREFUND THE BALANCE WITH WHICH THE TRANSACTIONAL + SERVICES OF EACH OF THE PROJECTS WILL BE SERVED. + +THE SUBSCRIPTION WALLET IS NOT A BANK ACCOUNT AND THEREFORE THE PRE-FUNDED + MONEY CANNOT BE WITHDRAWN AND MUST BE SPENT/CONSUMED IN 101OBeX SERVICES. + +Adding funds to the wallet is a straightforward process. Access the + Dashboard, then click the + icon within the Balance section. This action + will initiate the procedure for adding funds. diff --git a/docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md b/docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md b/docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md new file mode 100644 index 0000000..0334449 --- /dev/null +++ b/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md @@ -0,0 +1,195 @@ +This service is used to validate an OTP sent to a telephone number. + +POST: + `URL_BASE + /ws/util.py/validate_otp` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "signed" + : + , + "signature_key" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signed:` Shows if the validation request is right or not. +* `signature_key:` Key to OTP verification. +* `amount:` Operation amount in the suitable format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/validate_otp" + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'phone_number' + :{' '} + '7229063245' + , + 'otp' + :{' '} + '123456' + , + 'signature' + :{' '} + + '277b62946d7ed08cf23a5613e3becc4711322abd' + + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/util.py/validate_otp', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'phone_number': '7229063245', + 'otp': '123456', + 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("phone_number", "7229063245"); + formdata.append("otp", "123456"); + formdata.append("signature", + "277b62946d7ed08cf23a5613e3becc4711322abd"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/validate_otp", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/util.py/validate_otp'{' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + 'phone_number=7229063245'{' '} + \ + --form 'otp=123456'{' '} + \ + --form{' '} + + 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' +``` + +## Business logic: + +This service must be used by an user with administrator profile. The OTP + sent to the indicated phone is validated. diff --git a/docs/developer.avapframework.com/82_vault_vault.md b/docs/developer.avapframework.com/82_vault_vault.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md b/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md new file mode 100644 index 0000000..587e23c --- /dev/null +++ b/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md @@ -0,0 +1,24 @@ +This extension is intended to help you to use 101OBeX APIs + +## Features + +The completion is intended to use with python language. + +## Requirements + +For the extension to work, you must have configured your access to the + 101OBeX API through 101obexcli. + +## Release Notes + +This extension has the purpose of facilitating the developer, the + management of permissions, organizations and development teams, showing + him at all times, the organizations to which he has access, the + development teams to which he belongs and the APIs that he is authorized + to consume. + +### 0.0.1 + +Initial version, advisory only. + +* https://github.com/101OBeXCorp/101obex-api-completion diff --git a/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md b/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md new file mode 100644 index 0000000..672d286 --- /dev/null +++ b/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md @@ -0,0 +1,24 @@ +This extension is intended to help you to use 101OBeX APIs + +## Features + + + +## Requirements + +For the extension to work, you must have configured your access to the + 101OBeX API through 101obexcli. + +## Release Notes + +This extension has the purpose of facilitating the developer, the + management of permissions, organizations and development teams, showing + him at all times, the organizations to which he has access, the + development teams to which he belongs and the APIs that he is authorized + to consume. + +### 0.0.1 + +Initial version, advisory only. + +* https://github.com/101OBeXCorp/101obex-api-extension diff --git a/docs/developer.avapframework.com/8_Encrypted_Nodes_Or_Projects.md b/docs/developer.avapframework.com/8_Encrypted_Nodes_Or_Projects.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/9_get_pools_get_pools.md b/docs/developer.avapframework.com/9_get_pools_get_pools.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Accesos_EN.md b/docs/developer.avapframework.com/Accesos_EN.md new file mode 100644 index 0000000..b9a5f2f --- /dev/null +++ b/docs/developer.avapframework.com/Accesos_EN.md @@ -0,0 +1,155 @@ +This document will deal with the different types of accesses that exist on + the platform. + +To identify the user who owns the account where the operation is going to + be carried out, it is necessary to indicate a session identifier ( + session_id parameter) or sign the call with its private key + ( signature parameter). In this way, these two calls to + service are equivalent for all intents and purposes. For those cases in + which there is no pademobile user as executor of the operation, the call + with private key must be used: + +* With session ID + +```javascript +user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&session_id=9bb19a6c0a607cb8f1791207395366d6 +``` + +Session sample + +The session_id parameter is obtained from the call to the login service: + +```javascript +http://desarrollo.pademobile.com:5007/ws/users.py/login?country_code=MX&nick=test_user&pin=0000 +``` + +```javascript +{ {' '} + "status" + :{' '} + true + , + "e_mail" + :{' '} + "" + , + "elapsed" + :{' '} + 0.2370758056640625 + , + "certification_data" + : + , + "session_id" + :{' '} + "97c4abb925c9b2046ac7432762ad1417" + , + "user_type" + :{' '} + "User b\u00e1sico" + , + "profile_id" + :{' '} + 1 + , + "profile_code" + :{' '} + "USER" + , + "user_id" + :{' '} + 225 + , + "state" + :{' '} + "Distrito Federal" + , + "phone_longitude" + :{' '} + 10 + , + "menu" + : + , + "affiliate_user_id" + :{' '} + 412 + , + "currency" + :{' '} + "MXN" + , + "name" + :{' '} + "Test User" + , + "certification" + :{' '} + false + , + "phone" + :{' '} + "5012385006" + + } +``` + +* With signature + +```javascript +user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&signature=cc30e3efc7159bb10b910512ca441664c1578a4d +``` + +Signed sample + +In this case an extra parameter is added to the entire original query + string. This parameter will be a hash (HMAC) of the previous + string, so any alteration in the parameters will cause the signed login + process to fail. + +This process follows these steps: + +* The private key of the user identified by the user_id parameter is obtained. +* The querystringis separated from the signature parameter. +* The hash is calculated using the strings obtained in steps 1 and 2. +* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. + +The following Python code snippet returns the querystringprovided in the + string parameter of the calculate_signature function with the signature + parameter appended to the end.{' '} + +This process follows the these steps: + +* The private key of the user identified by the user_id parameter is obtained. +* The querystringis separated from the signature parameter. +* The hash is calculated using the strings obtained in steps 1 and 2. +* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. + +```javascript +import hashlib + + import hashlib + + import hmac + + def{' '} + calcular_firma + (Private key + , chain + ) + : + signature = hmac + .new + (Private key + , chain + , hashlib + .sha1 + ) + .hexdigest + ( + ) + return chain{' '} + +{' '} + '&signature='{' '} + + signature +``` diff --git a/docs/developer.avapframework.com/Actualizar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/Actualizar_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Add_Ons_EN.md b/docs/developer.avapframework.com/Add_Ons_EN.md new file mode 100644 index 0000000..9a548ee --- /dev/null +++ b/docs/developer.avapframework.com/Add_Ons_EN.md @@ -0,0 +1,48 @@ +Add-ons are collections of attributes or features that can be added to + your project. They allow for personalization, adaptation to your needs, + and optimization of usage. You can activate add-ons in different processes + throughout the acquisition of a plan or the life of a project. You can + also find in the Setting section an Add-on chapter in the settings section + dedicated exclusively to the administration of these components. + +Currently, the following Add-ons are available: + + + +Allows you to add a new empty slot to later activate a project and start + working with it. Plans have a defined limit for projects and active slots. + This add-on allows expansion to the maximum permitted slots. + + + +Expand the volume of monthly requests in your plan and manage the total + set of requests for each of your projects. The volume of requests + available in a plan can never exceed the maximum request capacity + established in that plan. + +Plans have a predefined storage capacity. For example, a Business plan has + a maximum storage capacity of 2 Teras and a default storage of 1 Gb. This + means that the storage can be increased from the default 1 Gb to 2 Teras + maximum, but no more. If more storage is required, it will be necessary to + upgrade the plan. + +If your project or set of project exceed the maximum storage allowed for + the plan you have, you will need to upgrade the your plan. + + + +Access to professional support through the 101OBeX platform's suite of + engineers. + +We recommend reviewing the Pricing document for details about the pricing + configuration of the entire Add-on catalog. If a project or node reaches + the limit in any of its properties or configurations, the requests will + begin to return. To prevent this situation from causing problems in your + projects, 101OBeX is configured to support up to 10% more in each of the + configurations during the next 24 hours from the moment any of the limits + are exceeded. After this period, applications will begin to be given back. + +To further prevent such scenarios, 101OBeX employs an alarm system. This + system sends notifications when specific properties approach predefined + thresholds, granting you control over your project's growth at all + times. diff --git a/docs/developer.avapframework.com/Administrar_solicitudes_KYC_(POST)_EN.md b/docs/developer.avapframework.com/Administrar_solicitudes_KYC_(POST)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Administrar_solicitudes_KYC_GET_EN.md b/docs/developer.avapframework.com/Administrar_solicitudes_KYC_GET_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md b/docs/developer.avapframework.com/Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Agregar_usuarios_a_la_lista_negra_EN.md b/docs/developer.avapframework.com/Agregar_usuarios_a_la_lista_negra_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Alta_Admin_EN.md b/docs/developer.avapframework.com/Alta_Admin_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Anexo_EN.md b/docs/developer.avapframework.com/Anexo_EN.md new file mode 100644 index 0000000..fb534ee --- /dev/null +++ b/docs/developer.avapframework.com/Anexo_EN.md @@ -0,0 +1,18 @@ +This section lists the possible values ​​for those parameters or concepts + that accept or are composed of codes or identifiers.{' '} + +* Countries: codigo_pais Country AF Afghanistan AL Albania AS American samoa AD Andorra AI Saint vincent and the grenadines AG Antigua & barbuda AR Argentina AW Aruba AU Tuvalu AT Austria BS Bahamas BB Barbados BY Belarus BE Belgium BZ Belize BM Bermuda BO Bolivia BA Bosnia-herzegovina BW Botswana BV Bouvet island BR Brazil BN Brunei darussalam KH Cambodia CA Canada KY Cayman islands CL Chile CN China CX Christmas islands CC Cocos (keeling) islands CO Colombia CK Tokelau CR Costa rica HR Croatia CU Cuba CZ Czech republic DK Denmark DM Dominica DO Dominican rep. EG Egypt SV El salvador EE Estonia FK Falkland islands FO Faroe islands FJ Fiji islands FI Finland FR France GF French guiana DE Germany GH Ghana GI Gibraltar GR Greece GD Grenada GL Greenland GP Guadeloupe GU Guam GT Guatemala GY Guyana HN Honduras HK Hong kong HU Hungary IS Iceland BT India ID Indonesia IR Iran IE Ireland IL Israel IT Italy JM Jamaica JP Japan KZ Kazakhstan KI Kiribati KP Korea, north KR Korea, south KG Kyrgyzstan LV Latvia LB Lebanon LR Liberia LI Lichtenstein LT Lithuania LU Luxembourg MK Macedonia MY Malaysia MU Mauritius YT Mayotte islands MX México MN Mongolia NA Namibia NR Nauru NP Nepal AN Netherlands antilles KN Saint kitts NZ New zealand NI Nicaragua NG Nigeria NU Norfolk island NO Svalbard and jan mayen islands OM Oman PK Pakistan PA Panama PY Paraguay PE Peru PH Philippines PL Poland PT Portugal QA Qatar RE Reunion island LC Saint lucia PM Saint pierre & miquelon SA Saudi arabia SC Seychelles SG Singapore SB Solomon islands SO Somalia ZA South africa ES Spain LK Sri lanka SH St. helena SE Sweden CH Switzerland SY Syria TW Taiwan TH Thailand NL The netherlands TT Trinidad & tobago TR Turkey TC Turks & caicos islands UA Ukraine GB United kingdom US United States UY Uruguay UZ Uzbekistan VN Vietnam YE Yemen ZW Zimbabwe PDM Pademobile International GQ Equatorial Guinea RO Romania AX Aland Islands DZ Algeria VI Virgin Islands, U.s. AO Angola AI Anguilla AQ Antarctica AM Armenia AC Ascension AZ Azerbaijan ET Ethiopia AU Australia BH Bahrain BD Bangladesh BJ Benin BT Bhutan VG Virgin Islands, British IO British Indian Ocean Territory BG Bulgaria BF Burkina Faso BI Burundi CK Cook Islands CI Côte D'ivoire SH Saint Helena DG Diego Garcia DJ Djibouti EC Ecuador ER Eritrea PF French Polynesia TF French Southern Territories GA Gabon GM Gambia GE Georgia GG Guernsey GN Guinea GW Guinea-bissau HT Haiti HM Heard Island And Mcdonald Islands IM Isle Of Man IQ Iraq JE Jersey JO Jordan CM Cameroon CV Cape Verde KE Kenya KM Comoros CD Congo, The Democratic Republic Of The CG Congo KW Kuwait LA Lao People's Democratic Republic LS Lesotho LY Libyan Arab Jamahiriya MO Macao MG Madagascar MW Malawi MV Maldives ML Mali MT Malta MA Morocco MH Marshall Islands MQ Martinique MR Mauritania FM Micronesia, Federated States Of MD Moldova MC Monaco MS Montserrat MZ Mozambique MM Myanmar NC New Caledonia NT Neutrale Zone NL Netherlands NE Niger NU Niue MP Northern Mariana Islands NO Norway PS Palestinian Territory, Occupied PW Palau PG Papua New Guinea PN Pitcairn PR Puerto Rico RE Rèunion RW Rwanda RU Russian Federation ZM Zambia WS Samoa SM San Marino ST Sao Tome And Principe SN Senegal SL Sierra Leone SK Slovakia SI Slovenia SD Sudan GS South Georgia And The South Sandwich Islands SR Suriname SZ Swaziland SY Syrian Arab Republic TJ Tajikistan TZ Tanzania, United Republic Of TL Timor-leste TG Togo TO Tonga TA Tristan da Cunha TD Chad TN Tunisia TM Turkmenistan UG Uganda VU Vanuatu VA Holy See (vatican City State) VE Venezuela AE United Arab Emirates WF Wallis And Futuna EH Western Sahara CF Central African Republic CY Cyprus ME Montenegro + +* Chanels: id_canal Name 1 Web 2 SMS 3 Retail 4 Bills 5 Customer Service 6 Matomy 7 TPV 8 Exchange 9 Bills 2.0 10 Bills MLS 11 Bills Cash y Apoyo 13 Remittance iOS 14 Remittance Android 15 Librería Android 16 Librería iOS 17 PrestaMóvil iOS 18 PrestaMóvil Android 19 Web MLS 20 Management Console 21 Bills Sofiexpress 22 Bills Aterna 23 BilliB + +* Operators: id_operador Name 1 Telcel 5 Movistar 6 IUSACELL/UNEFON 7 NEXTEL 8 Movistar 9 Vodafone 10 Orange 11 Yoigo 12 R 13 Euskatel + +* Languages: id_idioma Abbreviation Name 1 es Spanish-México 2 en_us English-United States 3 pl Polish 4 il Hebrew 5 es_es Spanish-Spain 6 en_uk English-United Kingdom 9 RO Romanian + +* Occupation: id_ocupacion Occupation 0 Not indicated 1 Student 2 Employee 3 Entrepreneur 4 Home 5 Other + +* Role (profile): id_perfil Name N/A ADMIN N/A ADMININTL N/A AFFILIATE N/A AFILIADO_POR_DEFECTO N/A DONATIONS N/A INSURANCE N/A USER N/A USUARIO_INTERNACIONAL N/A USUARIONODO N/A USUARIO_TIPO1 N/A USUARIO_TIPO2 + +* States / Birth Place: id_estado Name 257 Baja California North 258 Baja California South 259 Sonora 260 Chihuahua 261 Coahuila de Zaragoza 262 Sinaloa 263 Durango 264 Nuevo León 265 Tamaulipas 266 Zacatecas 267 San Luis Potosí 268 Nayarit 269 Veracruz 270 Aguascalientes 271 Guanajuato 272 Jalisco 273 Colima 274 Michoacán 275 Estado de México 276 Ciudad de México 277 Morelos 278 Puebla 279 Guerrero 280 Querétaro 281 Hidalgo 282 Tlaxcala 283 Oaxaca 284 Tabasco 285 Chiapas 286 Campeche 287 Yucatán 288 Quintana Roo + +* Transaction states: id_estado Definition -3 Wrong -2 Rejected -1 Expired 0 Requested 1 Approved 2 Revoked 3 Fully returned 4 Partially returned 10 In process diff --git a/docs/developer.avapframework.com/Aprobar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/Aprobar_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Autorizar_Solucion_EN.md b/docs/developer.avapframework.com/Autorizar_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Autorizar_carga_masiva_de_saldo_EN.md b/docs/developer.avapframework.com/Autorizar_carga_masiva_de_saldo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Cancel_Transaction_EN.md b/docs/developer.avapframework.com/Cancel_Transaction_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Carga_masiva_de_saldo_operador_EN.md b/docs/developer.avapframework.com/Carga_masiva_de_saldo_operador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Chat_Operador_EN.md b/docs/developer.avapframework.com/Chat_Operador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Chat_Usuario_EN.md b/docs/developer.avapframework.com/Chat_Usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Chat_prebind_EN.md b/docs/developer.avapframework.com/Chat_prebind_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Check_Session_EN.md b/docs/developer.avapframework.com/Check_Session_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Ciphered_Nodes_EN.md b/docs/developer.avapframework.com/Ciphered_Nodes_EN.md new file mode 100644 index 0000000..a8296ee --- /dev/null +++ b/docs/developer.avapframework.com/Ciphered_Nodes_EN.md @@ -0,0 +1,380 @@ +101OBeX offers the possibility of working with encrypted nodes or + projects. All services that are exposed through the API Manager can be + consumed in an encrypted manner, provided this preference is established + during project creation. + +IT IS IMPORTANT TO UNDERSTAND THAT ONCE A PROJECT IS CREATED, THIS + ENCRYPTION SETTING CANNOT BE ALTERED. THEREFORE, IT IS CRITICAL TO + CAREFULLY CONSIDER WHETHER YOUR PROJECT REQUIRES ENCRYPTION TO AVOID + SUBSEQUENT DATA LOSS. + +When you indicate that you want to be able to consume an encrypted + project, you will be assigned an encryption key for it (cipher + key) which can be consulted in the project data. + +Once this key has been obtained, the calls can be encrypted under the + AES256 algorithm with said key and the response will be encrypted with the + same encryption key. + +The nomenclature of the calls will be as follows: + +The nomenclature of the calls will be as follows. + +Decrypted call: + +```javascript +https://api.101obex.com:8000/servicio?parameters +``` + +Encrypted call: + +```javascript +https://api.101obex.com:5000/servicio?encripted_data=(encripted + parameters) +``` + +This adds an additional encryption layer that guarantees the security of + the transferred data. + +The response will be encrypted and its morphology will be as detailed + below + +Decrypted answer: + +```javascript +{ + + "status" + : + true + , + + "e_mail" + : + "test.user@waynnovate.com" + , + + "elapsed" + : + 0.18008685111999512 + , + + "datos_certificacion" + : + { + "codtran" + : + "0075f16df4b053a5d10502ffb01e9cd8" + } + , + + "session_id" + : + "e9b7945dcbd5d18a6239acc7acafe8e9" + , + + "type_of_user" + : + "impulso bu00e1sico" + , + + "profile_id" + : + 137 + , + + "code_profile" + : + "USUARIO" + , + + "user_id" + : + 50 + , + + "status" + : + null + , + + "phone_lenght" + : + 10 + , + + "menu" + : + [ + [ + "Acceso Ru00e1pido" + , + [ + "Movements" + , + "movements" + , + false + ] + , + [ + "Add a card" + , + {' '} + "gestor_origenes_propios/crear" + , + false + ] + , + [ {' '} + "Recharge cellphone minutes" + , + "Rechargecellphoneminutes" + , + false + ] + , + [ {' '} + "Transfer between clients" + , + "moneysending" + , + false + ] + , + [ + "Request money" + , + "requestmoney" + , + false + ] + , + [ + "Services payment" + , + "payexpresspay" + , + false + ] + ] + ] + , + "user_affiliate_id" + : + 1 + , + "currency" + : + "MXN" + , + "name" + : + "qwertyuio qwertyui" + , + "certificate" + : + false + , + "phone" + : + "9876543212" + + } +``` + +Encrypted answer: + +```javascript +{ + + "status" + :{' '} + true + , + + "encrypted_data" + :{' '} + "k8DoQ9ADDph2o3oHdzeW0wO-FITgfGQD4xy9GcfuBtQy8IVazicD4J66kZ-HTlgWpCkXn7xlGDqCcXUNV + {' '} + TW9T7Ww1DpPXPyoilI2GPhOFliAWGpip_R56WVYr07qGmMUJy_n2I3si___hBb9MPEI3KBh9eupUO2gKDT + {' '} + bULimM_cpCtRHsqFdTZIpRedC0W_HdTgcCrZ_CItCoxAoyiCjx6knaH9dbaUV1GoywBWfuh3Dh4iqHGejH + {' '} + RbYi7Apm1PjCj5WNPEEN-UlfNj9hvurwTgCjBXilBg19ld3LUJj-1Yh48It_gLkna12ZqBiuUnQ3Rpj1hH + {' '} + vz7CkTjxStkigCyKA4lPh94cK_cJgaiv7c1Uyb54cB8N2bUTBhD4ojOSfR88bN-4wYiIEspinuKDmpHXO8 + {' '} + HP_IgJSfgkU4QiTfbBKQ8u-2Hxe2x1JgbKIvjpiBNK0H3GNnaPrtciFf88EeQun5oZwOJiFtZBQHv-V4fd + {' '} + kfuOYBAWaOm13I9_PYiJir9BE145mIQOuugnebLASKju5UA-NHEclZ7fUF1fNyCeFxGW-6oYfadBanzpIM + {' '} + 5PjRUODa92gF4X0pPcLy4v1jcegJSMSpTW0DH_vM14gV56OJ0Dvyf52OB2e3LDlfP7TwYmbY7YWwj5MpR1 + {' '} + uoieOwbGsqbXqKvOOCmlwGIvAc-vowoTLRpviT1_fymNHyRqtb89Gjy_2rvsTgBLoZavKBOv5Wvu1Dil5u + {' '} + 0wVzo7pqk5XV3lnTCi-t7kLiH7SfXtuIBhPQzPTO40btxpZwC2V4QBsx1BcBMs_cb7Kmcy53exgpQQQkRN + {' '} + bTU6jkSnTcccaCPzT9WGhxiHrS1U5bXXW4BM1j9aHFDjhBp6uT9_2QAh0oh-uljLTnw6r6KH69VFJyO2oK + {' '} + jG2Qttu-L95ynxW94ecMuLlU26O7F-j9IO1FpI-c8cfKAQs6tbUnv_cU49nTwpX5TZI1ZfCDOb042-KiCJ + {' '} + qOfP61FWZtEQrMw7VZwUxMylcku_In9caUUYgpvJhHwqE6GKdS0XuKEcGUV-tfMvBcnewCgobcZhIeTYKh + {' '} + KSoaA1AHR7IYHaf8U4isTCzcexJL_mnwHlvWGVEXmM2Ywy_y9Y6nIDFTXPsUG4aYjw=" + + } +``` + +Python code example to encrypt and decrypt (encryption key + highlighted) + +```javascript +from Crypto + .Cipher{' '} + import AES + + from Crypto + .Random{' '} + import new{' '} + as Random + + from base64{' '} + import urlsafe_b64encode + , urlsafe_b64decode + + class{' '} + CipherByAES + : + def{' '} + __init__ + (self + ) + : + self.block_size{' '} + ={' '} + 16 + self.key{' '} + ={' '} + 'cedb3fb962255b1aafd033cabe831530' + self.pad{' '} + ={' '} + lambda s + : s{' '} + +{' '} + (self + .block_size{' '} + -{' '} + len + (s + ){' '} + % self + .block_size + ){' '} + * + chr + (self + .block_size{' '} + -{' '} + len + (s + ){' '} + % self + .block_size + ) + self.unpad{' '} + ={' '} + lambda s + : s + [ + : + - + ord + (s + [ + len + (s + ){' '} + -{' '} + 1 + : + ] + ) + ] + def{' '} + encrypt + (self + , data + ) + : + plain_text = self + .pad + (data + ) + iv = Random + ( + ) + .read + (AES + .block_size + ) + cipher = AES + .new + (self + .key + , AES + .MODE_OFB + , iv + ) + return urlsafe_b64encode + (iv{' '} + + cipher + .encrypt + (plain_text + .encode + ( + ) + ) + ) + .decode + ( + ) + def{' '} + decrypt + (self + , data + ) + : + cipher_text ={' '} + urlsafe_b64decode(data + .encode + ( + ) + ) + iv = cipher_text + [ + :self + .block_size + ] + cipher = AES + .new + (self + .key + , AES + .MODE_OFB + , iv + ) + return self + .unpad + (cipher + .decrypt + (cipher_text + [self + .block_size + ] + ) + ) + .decode + ( + ) +``` diff --git a/docs/developer.avapframework.com/Communities_EN.md b/docs/developer.avapframework.com/Communities_EN.md new file mode 100644 index 0000000..0b2aad8 --- /dev/null +++ b/docs/developer.avapframework.com/Communities_EN.md @@ -0,0 +1,17 @@ +101OBeX organizes and groups the clients of a node or project into + communities. + +Communities are groups of users or clients of a project whose main common + element or union is the community to which they belong. This is + determined, in most cases, although other criteria may apply, by + affiliates (corporations) responsible for registering users or + clients within the system. + +Users or clients in a project that do not have a specific community will + belong to the community of the node or project. Importantly, end users or + customers retain the flexibility to switch between communities as needed. + Grouping users or customers by communities offers many advantages at the + operation and data analysis level, since it allows us to undertake actions + on a specific set of users or end customers based on the community to + which they belong. Moreover, it greatly enhances capabilities for data + mining and reporting activities. diff --git a/docs/developer.avapframework.com/Comprar_EN.md b/docs/developer.avapframework.com/Comprar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Comprobar_el_importe_de_una_transaccion_EN.md b/docs/developer.avapframework.com/Comprobar_el_importe_de_una_transaccion_EN.md new file mode 100644 index 0000000..6797959 --- /dev/null +++ b/docs/developer.avapframework.com/Comprobar_el_importe_de_una_transaccion_EN.md @@ -0,0 +1,150 @@ +This service returns the amount of a transaction to be able to see it. + +GET: + `URL_BASE + /ws/util.py/get_importe_transaccion` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "amount" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `amount:` Amount of the transaction searched. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7' +``` + +## Business logic: + +By means of this endpoint we obtain the amount associated with a + transaction. diff --git a/docs/developer.avapframework.com/Confirmar_Ingreso_EN.md b/docs/developer.avapframework.com/Confirmar_Ingreso_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Consultar_Saldo_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/Consultar_Saldo_Monedero_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Consultar_Solucion_EN.md b/docs/developer.avapframework.com/Consultar_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Consultar_usuarios_de_la_solucion_EN.md b/docs/developer.avapframework.com/Consultar_usuarios_de_la_solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Crear_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/Crear_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Crear_Solucion_EN.md b/docs/developer.avapframework.com/Crear_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Cuadro_de_mando_EN.md b/docs/developer.avapframework.com/Cuadro_de_mando_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Currencies_FX_Exchange_EN.md b/docs/developer.avapframework.com/Currencies_FX_Exchange_EN.md new file mode 100644 index 0000000..7a2f9af --- /dev/null +++ b/docs/developer.avapframework.com/Currencies_FX_Exchange_EN.md @@ -0,0 +1,34 @@ +Within a node or project, two distinct modules exist, and understanding + their differences is crucial to prevent confusion. We are talking about + the Currencies and FX Exchange modules. + +A node or project works with a location and a currency, information that + is provided at the time of creation of a node with the activation of a + project. + +The currency selected when the node or project is created is the only + currency with which the node will operate until the administrator decides + to create or register new currencies. + +That is, a node can be configured in a specific location, the United + States for example, and select USD as the currency for the node or + project. From that moment on, all operations carried out in that node or + project will be recorded with that currency. If later you want other + currencies to exist, such as EUR, you must register the request in the + node or project as an authorized currency. + +This task is carried out in the Currencies section which can be found in + the node or project tab or in the side menu under the Projects section. + +In this same section you can create your own currencies and assign them a + value with a purchase and sale price. + +Working with a loyalty solution based on the accumulation of customer + points, based on their activity, requires registering those points as a + form of currency and giving them a value. In this way, the client will + always be able to use that points wallet in the operation network, thanks + to the FX Exchange service. + +The mission of the FX Exchange service is to maintain a list of + currencies, the reference price, the purchase price, and the sale price, + thus allowing multi-currency operations. diff --git a/docs/developer.avapframework.com/Dashboard_Afiliado_EN.md b/docs/developer.avapframework.com/Dashboard_Afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Datos_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/Datos_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Datos_cuenta_EN.md b/docs/developer.avapframework.com/Datos_cuenta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Desactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/Desactivacion_de_una_cuenta_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Desplegar_condiciones_legales_EN.md b/docs/developer.avapframework.com/Desplegar_condiciones_legales_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Desplegar_preguntas_de_seguridad_EN.md b/docs/developer.avapframework.com/Desplegar_preguntas_de_seguridad_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Devolucion_desde_afiliado_o_administrador_EN.md b/docs/developer.avapframework.com/Devolucion_desde_afiliado_o_administrador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Editar_datos_usuario_EN.md b/docs/developer.avapframework.com/Editar_datos_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Entreorigenes_EN.md b/docs/developer.avapframework.com/Entreorigenes_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Enviar_SMS_EN.md b/docs/developer.avapframework.com/Enviar_SMS_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Enviar_Ticket_por_email_EN.md b/docs/developer.avapframework.com/Enviar_Ticket_por_email_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Enviar_donacion_a_un_usuario_EN.md b/docs/developer.avapframework.com/Enviar_donacion_a_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Envio_de_dinero_EN.md b/docs/developer.avapframework.com/Envio_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Envio_de_dinero_Impersonado_EN.md b/docs/developer.avapframework.com/Envio_de_dinero_Impersonado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Envio_de_dinero_masiva_EN.md b/docs/developer.avapframework.com/Envio_de_dinero_masiva_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Envio_de_regalo_EN.md b/docs/developer.avapframework.com/Envio_de_regalo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md new file mode 100644 index 0000000..73ee097 --- /dev/null +++ b/docs/developer.avapframework.com/Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md @@ -0,0 +1,180 @@ +This service is used to send an OTP to an external phone on the platform. + +POST: + `URL_BASE + /ws/util.py/send_otp` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "amount" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `amount:` Amount of the operation with the applied format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/send_otp" + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'phone_number' + :{' '} + '7229063245' + , + 'signature' + :{' '} + + '277b62946d7ed08cf23a5613e3becc4711322abd' + + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/util.py/send_otp', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'phone_number': '7229063245', + 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("phone_number", "7229063245"); + formdata.append("signature", + "277b62946d7ed08cf23a5613e3becc4711322abd"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/send_otp", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/util.py/send_otp'{' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + 'phone_number=7229063245'{' '} + \ + --form{' '} + + 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' +``` + +## Business logic: + +This service must be executed by a user who has an administrator profile. + An OTP is sent to the phone indicated with the default message, or the one + entered in the request. diff --git a/docs/developer.avapframework.com/Facturation_System_EN.md b/docs/developer.avapframework.com/Facturation_System_EN.md new file mode 100644 index 0000000..1871bc8 --- /dev/null +++ b/docs/developer.avapframework.com/Facturation_System_EN.md @@ -0,0 +1,78 @@ +101OBeX offers different plans: + +* Developer +* Startup +* Business +* Enterprise + +The ideal plan to become familiar with 101OBeX and introduce yourself to + the capabilities of the system. It provides complete access to APIs with a + maximum allowance of 500 monthly transactions so you can start your + project, with no a membership cost*. + +*There is no membership fee. Transactional costs, plug-ins and other + services within the membership are not included. To exploit these + services, it will be necessary to purchase a different plan. + +Starting at 50 $ per month, you will have 2 project slots with one active + project, and 5,000 monthly transactions to start your project. + +Starting at 150 $ per month, you can have up to 5 projects and 2 + pre-activated slots, along with 50,000 monthly transactions to launch your + business at the highest level. + +Geared towards corporations requiring special configurations. Membership + activation is done through the sales team:{' '} + sales@101obex.com . + +The chosen subscription type (developer, startup, business or + enterprise) that determines the configuration of the set of available + resources. + +* Total project slots. +* Pre-activated projects. +* Maximum transactional volume. +* Monthly transactions. +* Storage. +* Support. + +If payment is established monthly, charges will be made on the first day + of each month for the total membership amount, plus contracted add-ons and + plugins. For the first month, a prorated amount will be charged from the + plan's start date to the end of the month. If payment is established + annually, a full year of service will be charged, and renewal will occur + the day after the plan expires. + +101OBeX does not invoice exempt, since it is not a possibility + contemplated in the service. If any of the elements that make up a plan + exceed its limit, the service will stop being provided. + +To prevent your projects from being left without service, 101OBeX offers + the possibility of configuring alarms that will allow you to receive + notifications based on limits for each category. Although these alarms are + configurable, they have pre-established minimums to ensure that you are + always informed. + +The client always has the possibility of expanding the limits for each of + the components that make up a membership through the purchasing of add-ons + or by upgrading their plan. + +Clients can check their membership status in the dashboard at any time, + along with plan configuration in the Subscription Plan section of the menu + bar. + +In the Settings section of the menu, an option is available to track + transaction history linked to membership collections. How to change the + payment method Payment methods can be changed from monthly to annual and + vice versa at any time. How to change the payment method At present the + only form of payment is by credit card. But you can add new cards and + change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. + +At present the only form of payment is by credit card. But you can add new + cards and change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. diff --git a/docs/developer.avapframework.com/GET_STARTED_KeyBindings.md b/docs/developer.avapframework.com/GET_STARTED_KeyBindings.md new file mode 100644 index 0000000..9c58240 --- /dev/null +++ b/docs/developer.avapframework.com/GET_STARTED_KeyBindings.md @@ -0,0 +1,552 @@ +AVAP TM Dev Studio 2024 lets you perform most tasks directly + from the keyboard. This page lists out the default bindings (keyboard + shortcuts) and describes how you can update them. + +### Keyboard Shortcuts editor + +AVAP TM Dev Studio provides a rich and easy keyboard shortcuts + editing experience using Keyboard Shortcuts editor. It + lists all available commands with and without keybindings and you can + easily change / remove / reset their keybindings using the available + actions. It also has a search box on the top that helps you in finding + commands or keybindings. You can open this editor by going to the menu + under File > Preferences >{' '} + Keyboard Shortcuts . + +Most importantly, you can see keybindings according to your keyboard + layout. For example, key binding `Cmd+\` in US keyboard layout + will be shown as `Ctrl+Shift+Alt+Cmd+7` when layout is changed + to German. The dialog to enter key binding will assign the correct and + desired key binding as per your keyboard layout. + +For doing more advanced keyboard shortcut customization, read Advanced + Customization. + +### Keymap extensions + +Keyboard shortcuts are vital to productivity and changing keyboarding + habits can be tough. To help with this, File >{' '} + Preferences >{' '} + Migrate Keyboard Shortcuts from... shows you a list of + popular keymap extensions. These extensions modify the AVAP TM {' '} + Dev Studio shortcuts to match those of other editors so you don't need + to learn new keyboard shortcuts. There is also a Keymaps category of + extensions in the Marketplace. + +### Keyboard Shortcuts Reference + +We also have a printable version of these keyboard shortcuts.{' '} + Help > Keyboard Shortcut Reference {' '} + displays a condensed PDF version suitable for printing as an easy + reference. + +Below are links to the three platform-specific versions (US English + keyboard): + +* Windows +* macOS +* Linux + +### Detecting keybinding conflicts + +If you have many extensions installed or you have customized your keyboard + shortcuts, you can sometimes have keybinding conflicts where the same + keyboard shortcut is mapped to several commands. This can result in + confusing behavior, especially if different keybindings are going in and + out of scope as you move around the editor. + +The Keyboard Shortcuts editor has a context menu command{' '} + Show Same Keybindings , which will filter the keybindings + based on a keyboard shortcut to display conflicts. + +Pick a command with the keybinding you think is overloaded and you can see + if multiple commands are defined, the source of the keybindings and when + they are active. + +### Troubleshooting keybindings + +To troubleshoot keybindings problems, you can execute the command{' '} + Developer: Toggle Keyboard Shortcuts Troubleshooting . + This will activate logging of dispatched keyboard shortcuts and will open + an output panel with the corresponding log file. + +You can then press your desired keybinding and check what keyboard + shortcut AVAP™ DS detects and what command is invoked. + +For example, when pressing `cmd+/` in a code editor on macOS, + the logging output would be: + +```javascript +[KeybindingService]: / Received keydown event - modifiers: [meta], code: + MetaLeft, keyCode: 91, key: Meta + + [KeybindingService]: | Converted keydown event - modifiers: [meta], + code: MetaLeft, keyCode: 57 ('Meta') + + [KeybindingService]: \ Keyboard event cannot be dispatched. + + [KeybindingService]: / Received keydown event - modifiers: [meta], code: + Slash, keyCode: 191, key: / + [KeybindingService]: | Converted keydown event - modifiers: [meta], + code: Slash, keyCode: 85 ('/') + + [KeybindingService]: | Resolving meta+[Slash] + + [KeybindingService]: \ From 2 keybinding entries, matched + editor.action.commentLine, when: editorTextFocus && + !editorReadonly, source: built-in. +``` + +The first keydown event is for the MetaLeft key (cmd) and cannot + be dispatched. The second keydown event is for the Slash key (/) + and is dispatched as meta+[Slash]. There were two keybinding entries + mapped from meta+[Slash] and the one that matched was for the command + editor.action.commentLine, which has the when condition editorTextFocus + && !editorReadonly and is a built-in keybinding entry. + +### Viewing modified keybindings + +You can view any user modified keyboard shortcuts in AVAP TM Dev + Studio in the Keyboard Shortcuts editor with the Show + User Keybindings command in the More Actions (...) menu. This + applies the @source:user filter to the Keyboard Shortcuts editor + (Source is 'User'). + +### Advanced customization + +All keyboard shortcuts in AVAP TM Dev Studio can be customized + via the keybindings.json file. + +To configure keyboard shortcuts through the JSON file, open{' '} + Keyboard Shortcuts editor and select the{' '} + Open Keyboard Shortcuts (JSON) button on the + right of the editor title bar. This will open your keybindings.json file + where you can overwrite the Default Keyboard Shortcuts. + +You can also open the keybindings.json file from the Command Palette + (Ctrl+Shift+P) with the Preferences: Open Keyboard Shortcuts + (JSON) command. + +### Keyboard rules + +Each rule consists of: + +* a key that describes the pressed keys. +* a command containing the identifier of the command to execute. +* an optional when clause containing a boolean expression that will be evaluated depending on the current context. + +Chords (two separate keypress actions) are described by separating + the two keypresses with a space. For example, `Ctrl+K Ctrl+C` . + +When a key is pressed: + +* the rules are evaluated from bottom to{' '} top . +* the first rule that matches, both the key and in terms of when, is accepted. +* no more rules are processed. +* if a rule is found and has a command set, the command is executed. + +The additional keybindings.json rules are appended at runtime to the + bottom of the default rules, thus allowing them to overwrite the default + rules. The keybindings.json file is watched by AVAP™ DS so editing it + while AVAP TM Dev Studio is running will update the rules at + runtime. + +The keyboard shortcuts dispatching is done by analyzing a list of rules + that are expressed in JSON. Here are some examples: + +```javascript +// Keybindings that are active when the focus is in the editor + + { "key": "home", "command": "cursorHome", "when": "editorTextFocus" + }, + + { "key": "shift+home", "command": "cursorHomeSelect", "when": + "editorTextFocus" }, + + + // Keybindings that are complementary + + { "key": "f5", "command": "workbench.action.debug.continue", + "when": "inDebugMode" }, + + { "key": "f5", "command": "workbench.action.debug.start", "when": + "!inDebugMode" }, + + + // Global keybindings + + { "key": "ctrl+f", "command": "actions.find" }, + + { "key": "alt+left", "command": "workbench.action.navigateBack" + }, + + { "key": "alt+right", "command": "workbench.action.navigateForward" + }, + + + // Global keybindings using chords (two separate keypress + actions) + + { "key": "ctrl+k enter", "command": "workbench.action.keepEditor" + }, + + { "key": "ctrl+k ctrl+w", "command": + "workbench.action.closeAllEditors" }, +``` + +### Accepted keys + +The key is made up of modifiers and the key itself. + +The following modifiers are accepted: + +The following keys are accepted: + +* `f1-f19` , `a-z` , `0-9` +* ```, `-` , `=` , `[` , `]` ,{' '} `\` , `;` , `'` , `,` ,{' '} `.` , `/` +* `left` , `up` , `right` ,{' '} `down` , `pageup` , `pagedown` ,{' '} `end` , `home` +* `tab` , `enter` , `escape` ,{' '} `space` , `backspace` , `delete` +* `pausebreak` , `capslock` , `insert` +* `numpad0-numpad9` , `numpad_multiply` ,{' '} `numpad_add` , `numpad_separator` +* `numpad_subtract` , `numpad_decimal` ,{' '} `numpad_divide` + +### Command arguments + +You can invoke a command with arguments. This is useful if you often + perform the same operation on a specific file or folder. You can add a + custom keyboard shortcut to do exactly what you want. + +The following is an example overriding the `Enter` key to print + some text: + +```javascript +{ + "key": "enter", + "command": "type", + "args": { "text": "Hello World" }, + "when": "editorTextFocus" + + } +``` + +The type command will receive {"text": "Hello + World"} as its first argument and add "Hello World" to + the file instead of producing the default command. + +For more information on commands that take arguments, refer to Built-in + Commands. + +### Running multiple commands + +It is possible to create a keybinding that runs several other commands + sequentially using the command runCommands. + +Run several commands without arguments: copy current line down, mark the + current line as comment, move cursor to copied line + +```javascript +{ + "key": "ctrl+alt+c", + "command": "runCommands", + "args": { + "commands": [ "editor.action.copyLinesDownAction", + "cursorUp", + "editor.action.addCommentLine", + "cursorDown" + ] } + + }, +``` + +It is also possible to pass arguments to commands: create a new untitled + TypeScript file and insert a custom snippet + +```javascript +{ + "key": "ctrl+n", + "command": "runCommands", + "args": { + "commands": [ { + "command": "workbench.action.files.newUntitledFile", + "args": { + "languageId": "typescript" + } + }, + { + "command": "editor.action.insertSnippet", + "args": { + "langId": "typescript", + "snippet": "class ${1:ClassName} + {\n\tconstructor() {\n\t\t$0\n\t}\n}" + } + } + ] } + + }, +``` + +Note that commands run by runCommands receive the value of + "args" as the first argument. So in the example above, + workbench.action.files.newUntitledFile receives + {"languageId": "typescript" } as its first + and only argument. + +To pass several arguments, one needs to have "args" as an array: + +```javascript +{ + "key": "ctrl+shift+e", + "command": "runCommands", + "args": { + "commands": [ { + // command invoked with 2 arguments: + vscode.executeCommand("myCommand", "arg1", "arg2") + "command": "myCommand", + "args": ["arg1", "arg2"] + } + ] } + + } +``` + +To pass an array as the first argument, one needs to wrap the array in + another array: "args": [ [1, 2, 3] ]. + +### Removing a specific key binding rule + +You can write a key binding rule that targets the removal of a specific + default key binding. With the keybindings.json, it was always possible to + redefine all the key bindings of AVAP TM Dev Studio, but it can + be difficult to make a small tweak, especially around overloaded keys, + such as `Tab` or `Escape` . To remove a specific key + binding, add a - to the command and the rule will be a removal rule. + +Here is an example: + +```javascript +// In Default Keyboard Shortcuts + + ... + + { "key": "tab", "command": "tab", "when": ... }, + + { "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": + ... }, + + { "key": "tab", "command": "acceptSelectedSuggestion", "when": ... + }, + + ... + + + // To remove the second rule, for example, add in keybindings.json: + + { "key": "tab", "command": "-jumpToNextSnippetPlaceholder" } +``` + +To override a specific key binding rule with an empty action, you can + specify an empty command: + +```javascript +// To override and disable any `tab` keybinding, for example, add in + keybindings.json: + + { "key": "tab", "command": "" } +``` + +### Keyboard layouts + +The keys above are string representations for virtual keys and do not + necessarily relate to the produced character when they are pressed. More + precisely: + +* Reference: Virtual-Key Codes (Windows) +* `tab` for VK_TAB (0x09) +* ; for VK_OEM_1 (0xBA) +* `=` for VK_OEM_PLUS (0xBB) +* `,` for VK_OEM_COMMA (0xBC) +* `-` for VK_OEM_MINUS (0xBD) +* `.` for VK_OEM_PERIOD (0xBE) +* `/` for VK_OEM_2 (0xBF) +* ` for VK_OEM_3 (0xC0) +* `[` for VK_OEM_4 (0xDB) +* `\` for VK_OEM_5 (0xDC) +* `]` for VK_OEM_6 (0xDD) +* `'` for VK_OEM_7 (0xDE) +* etc. + +Different keyboard layouts usually reposition the above virtual keys or + change the characters produced when they are pressed. When using a + different keyboard layout than the standard US, AVAP TM Dev + Studio does the following: + +All the key bindings are rendered in the UI using the current system's + keyboard layout. For example, Split Editor when using a French + (France) keyboard layout is now rendered as `Ctrl+*` : + +When editing keybindings.json, AVAP TM Dev Studio highlights + misleading key bindings, those that are represented in the file with the + character produced under the standard US keyboard layout, but that need + pressing keys with different labels under the current system's + keyboard layout. For example, here is how the{' '} + Default Keyboard Shortcuts rules look like when using a + French (France) keyboard layout: + +There is also a widget that helps input the key binding rule when editing + keybindings.json. To launch the Define Keybinding widget, press{' '} + `Ctrl+K Ctrl+K` . The widget listens for key presses and renders + the serialized JSON representation in the text box and below it, the keys + that AVAP TM Dev Studio has detected under your current keyboard + layout. Once you've typed the key combination you want, you can press{' '} + `Enter` and a rule snippet will be inserted. + +### Keyboard layout-independent bindings + +Using scan codes, it is possible to define keybindings which do not change + with the change of the keyboard layout. For example: + +```javascript +{ "key": "cmd+[Slash]", "command": "editor.action.commentLine", + "when": "editorTextFocus" } +``` + +Accepted scan codes: + +* `[F1]-[F19]` , `[KeyA]-[KeyZ]` ,{' '} `[Digit0]-[Digit9]` +* `[Backquote]` , `[Minus]` , `[Equal]` ,{' '} `[BracketLeft]` , `[BracketRight]` ,{' '} `[Backslash]` , `[Semicolon]` ,{' '} `[Quote]` , `[Comma]` , `[Period]` ,{' '} `[Slash]` +* `[ArrowLeft]` , `[ArrowUp]` ,{' '} `[ArrowRight]` , `[ArrowDown]` ,{' '} `[PageUp]` , `[PageDown]` , `[End]` ,{' '} `[Home]` +* `[Tab]` , `[Enter]` , `[Escape]` ,{' '} `[Space]` , `[Backspace]` , `[Delete]` +* `[Pause]` , `[CapsLock]` , `[Insert]` +* `[Numpad0]-[Numpad9]` , `[NumpadMultiply]` ,{' '} `[NumpadAdd]` , `[NumpadComma]` +* `[NumpadSubtract]` , `[NumpadDecimal]` ,{' '} `[NumpadDivide]` + +### when clause contexts + +AVAP TM Dev Studio gives you fine control over when your key + bindings are enabled through the optional when clause. If your key binding + doesn't have a when clause, the key binding is globally available at + all times. A when clause evaluates to either Boolean true or false for + enabling key bindings. + +AVAP TM Dev Studio sets various context keys and specific values + depending on what elements are visible and active in the AVAP TM {' '} + Dev Studio UI. For example, the built-in Start Debugging command has the + keyboard shortcut `F5` , which is only enabled when there is an + appropriate debugger available (context debuggersAvailable is + true) and the editor isn't in debug mode (context inDebugMode + is false): + +You can also view a keybinding's when clause directly in the Default + Keybindings JSON ( + + Preferences: Open Default Keyboard Shortcuts (JSON) + + ): + +```javascript +{ "key": "f5", "command": "workbench.action.debug.start", + "when": "debuggersAvailable && !inDebugMode" }, +``` + +For when clause conditional expressions, the following conditional + operators are useful for keybindings: + +You can find the full list of when clause conditional operators in the + when clause contexts reference. + +You can find some of the available when clause contexts in the when clause + context reference. + +The list there isn't exhaustive and you can find other when clause + contexts by searching and filtering in the Keyboard Shortcuts editor ( + Preferences: Open Keyboard Shortcuts ) or reviewing + the Default Keybindings JSON file ( + + Preferences: Open Default Keyboard Shortcuts (JSON) + + ). + +### Custom keybindings for refactorings + +The editor.action.codeAction command lets you configure keybindings for + specific Refactorings (Code Actions). For example, the keybinding + below triggers the Extract function refactoring Code + Actions: + +```javascript +{ + "key": "ctrl+shift+r ctrl+e", + "command": "editor.action.codeAction", + "args": { + "kind": "refactor.extract.function" + } + + } +``` + +This is covered in depth in the Refactoring topic where you can learn + about different kinds of Code Actions and how to prioritize them in the + case of multiple possible refactorings. + +### Default Keyboard Shortcuts + +You can view all default keyboard shortcuts in AVAP Dev Studio in the{' '} + Keyboard Shortcuts editor with the{' '} + Show Default Keybindings command in the{' '} + More Actions (...) menu. This applies the + @source:default filter to the Keyboard Shortcuts editor + ( Source is 'Default'). + +You can view the default keyboard shortcuts as a JSON file using the + command{' '} + + Preferences: Open Default Keyboard Shortcuts (JSON) + + . + +Some commands included below do not have default keyboard shortcuts and so + are displayed as unassigned but you can assign your own keybindings. + +### Next steps + +Now that you know about our Key binding support, what's next... + +* Language Support - Our Good, Better, Best language grid to see what you can expect +* Debugging - This is where AVAP™ DS really shines +* Node.js - End to end Node.js scenario with a sample app + +### Common questions + +In the Keyboard Shortcut editor, you can filter on + specific keystrokes to see which commands are bound to which keys. Below + you can see that Ctrl+Shift+P is bound to{' '} + Show All Commands to bring up the Command Palette. + +Find a rule that triggers the action in the{' '} + Default Keyboard Shortcuts and write a modified version + of it in your keybindings.json file: + +```javascript +// Original, in Default Keyboard Shortcuts + + { "key": "ctrl+shift+k", "command": "editor.action.deleteLines", + "when": "editorTextFocus" }, + + // Modified, in User/keybindings.json, Ctrl+D now will also trigger this + action + + { "key": "ctrl+d", "command": "editor.action.deleteLines", + "when": "editorTextFocus" }, +``` + +Use the editorLangId context key in your when clause: + +```javascript +{ "key": "shift+alt+a", "command": "editor.action.blockComment", + "when": "editorTextFocus && editorLangId == csharp" + }, +``` + +The most common problem is a syntax error in the file. Otherwise, try + removing the when clause or picking a different key. Unfortunately, at + this point, it is a trial and error process. diff --git a/docs/developer.avapframework.com/GET_STARTED_Tips_and_tricks.md b/docs/developer.avapframework.com/GET_STARTED_Tips_and_tricks.md new file mode 100644 index 0000000..1d62ddc --- /dev/null +++ b/docs/developer.avapframework.com/GET_STARTED_Tips_and_tricks.md @@ -0,0 +1,933 @@ +"Tips and Tricks" lets you jump right in and learn how to be + productive with AVAP™ Dev Studio 2024. You'll become familiar with its + powerful editing, code intelligence, and source code control features and + learn useful keyboard shortcuts. This topic goes pretty fast and provides + a broad overview, so be sure to look at the other in-depth topics in + Getting Started and the User Guide to learn more. + +### Basics + +The best way of exploring AVAP TM Dev Studio hands-on is to open + the Welcome page. You will get an overview of AVAP TM Dev + Studio's customizations and features. Help > Welcome. + + + +Pick a Walkthrough for a self-guided tour through the + setup steps, features, and deeper customizations that AVAP TM {' '} + Dev Studio offers. As you discover and learn, the walkthroughs track your + progress. + +If you are looking to improve your code editing skills open the{' '} + Interactive Editor Playground . Try out AVAP TM {' '} + Dev Studio's code editing features, like multi-cursor editing, + IntelliSense, Snippets, Emmet, and many more.{' '} + Help > Editor Playground . + + + +Access all available commands based on your current context. + +Keyboard Shortcut: Ctrl+Shift+P + + + +All of the commands are in the Command Palette with the associated key + binding (if it exists). If you forget a keyboard shortcut, use the + Command Palette to help you out. + +Download the keyboard shortcut reference sheet for your platform + (macOS, Windows, Linux). + +Quickly open files. + +Keyboard Shortcut: `Ctrl+P` + +Tip : Type `?` to view command suggestions. + + + +Typing commands such as edt and term followed by a space will bring up + dropdown lists. + + + +Repeat the Quick Open keyboard shortcut to cycle quickly + between recently opened files. + +You can open multiple files from Quick Open by pressing + the Right arrow key. This will open the currently selected file in the + background and you can continue selecting files from{' '} + Quick Open . + +Open Recent + +Keyboard Shortcut: `Ctrl+R` + +Displays a Quick Pick dropdown with the list from File {' '} + > Open Recent with recently opened folders and + workspaces followed by files. + +### Command line + +AVAP TM Dev Studio has a powerful command line interface + (CLI) which allows you to customize how the editor is launched to + support various scenarios. + +```javascript +# open code with current directory + + code . + # open the current directory in the most recently used code window + + code -r . + # create a new window + + code -n + + # change the language + + code --locale=es + + # open diff editor + + code --diff + + # open file at specific line and column + + code --goto package.json:10:5 + + # see help options + + code --help + + # disable all extensions + + code --disable-extensions . +``` + +Workspace specific files are in a .avapcode folder at the root. For + example, tasks.json for the Task Runner and launch.json for the debugger.{' '} + +### Status Bar + +Keyboard Shortcut: `Ctrl+Shift+M` + +Quickly jump to errors and warnings in the project. + +Cycle through errors with `F8` or `Shift+F8` + +You can filter problems either by type ('errors', + 'warnings') or text matching. + +Keyboard Shortcut: `Ctrl+K M` + +If you want to persist the new language mode for that file type, you can + use the Configure File Association for command to + associate the current file extension with an installed language. + +### Customization + +There are many things you can do to customize AVAP TM Dev . + +* Change your theme +* Change your keyboard shortcuts +* Tune your settings +* Add JSON validation +* Create snippets +* Install extensions + +Keyboard Shortcut: `Ctrl+K Ctrl+T` + +You can install more themes from the AVAP TM Dev Studio + extension Marketplace. + +Are you used to keyboard shortcuts from another editor? You can install a + Keymap extension that brings the keyboard shortcuts from your favorite + editor to AVAP TM Dev Studio. Go to Preferences {' '} + > Migrate Keyboard Shortcuts from ... to see the + current list on the Marketplace. Some of the more popular ones: + +* Vim +* Sublime Text Keymap +* Emacs Keymap +* Atom Keymap +* Brackets Keymap +* Eclipse Keymap +* AVAP™ Dev Studio Keymap + +Keyboard Shortcut: `Ctrl+K Ctrl+S` + +You can search for shortcuts and add your own keybindings to the + keybindings.json file. + + + +See more in Key Bindings for AVAP TM Dev Studio. + +By default AVAP TM Dev Studio shows the Settings editor, you can + find settings listed below in a search bar, but you can still edit the + underlying settings.json file by using the{' '} + Open User Settings (JSON) command or by changing + your default settings editor with the workbench.settings.editor setting. + +Open User Settings settings.json + +Keyboard Shortcut: `Ctrl+,` + +Change the font size of various UI elements + +```javascript +// Main editor + + "editor.fontSize": 18, + + // Terminal panel + + "terminal.integrated.fontSize": 14, + + // Output panel + + "[Log]": { + "editor.fontSize": 15 + + } +``` + +Change the zoom level + +```javascript +"window.zoomLevel": 5 +``` + +Font ligatures + +```javascript +"editor.fontFamily": "Fira Code", + + "editor.fontLigatures": true +``` + + + +Auto Save + +```javascript +"files.autoSave": "afterDelay" +``` + +You can also toggle Auto Save from the top-level menu with the File > + Auto Save. + +Format on save + +```javascript +"editor.formatOnSave": true +``` + +Format on paste + +```javascript +"editor.formatOnPaste": true +``` + +Change the size of Tab characters + +```javascript +"editor.tabSize": 4 +``` + +Spaces or Tabs + +```javascript +"editor.insertSpaces": true +``` + +Render whitespace + +```javascript +"editor.renderWhitespace": "all" +``` + +Whitespace characters are rendered by default in text selection. + +Ignore files / folders + +Removes these files / folders from your editor window. + +```javascript +"files.exclude": { + "somefolder/": true, + "somefile": true + + } +``` + +Remove these files / folders from search results. + +```javascript +"search.exclude": { + "someFolder/": true, + "somefile": true + + } +``` + +And many, many other customizations. + +You can scope the settings that you only want for specific languages by + the language identifier. You can find a list of commonly used language IDs + in the Language Identifiers reference. + +```javascript +"[languageid]": { + + + } +``` + + + +Enabled by default for many file types. Create your own schema and + validation in settings.json + +```javascript +"json.schemas": [ { + "fileMatch": [ "/bower.json" + ], + "url": "https://json.schemastore.org/bower" + } + ] +``` + +or for a schema defined in your workspace + +```javascript +"json.schemas": [ { + "fileMatch": [ "/foo.json" + ], + "url": "./myschema.json" + } + ] +``` + +or a custom schema + +```javascript +"json.schemas": [ { + "fileMatch": [ "/.myconfig" + ], + "schema": { + "type": "object", + "properties": { + "name" : { + "type": "string", + "description": "The name of the entry" + } + } + } + } + ] +``` + +See more in the JSON documentation. + +### Extensions + +Keyboard Shortcut: `Ctrl+Shift+X` + +In the Extensions view, you can search via the search bar + or click the More Actions (...) button to filter + and sort by install count. + + + +In the Extensions view, click{' '} + Show Recommended Extensions in the{' '} + More Actions (...) button menu. + + + +Are you interested in creating your own extension? You can learn how to do + this in the Extension API documentation, specifically check out the + documentation on contribution points. + +* configuration +* commands +* keybindings +* languages +* debuggers +* grammars +* themes +* snippets +* jsonValidation + +### Files and folders + +Keyboard Shortcut: Ctrl+` + + + +Further reading: + +* Integrated Terminal documentation +* Mastering AVAP™ DS's Terminal article + +Keyboard Shortcut: `Ctrl+B` + + + +Keyboard Shortcut: `Ctrl+J` + +Keyboard Shortcut: `Ctrl+K Z` + + + +Enter distraction free Zen mode. + +Press `Esc` twice to exit Zen Mode. + +Keyboard Shortcut: `Ctrl+\` + +You can also drag and drop editors to create new editor groups and move + editors between groups. + + + +Keyboard Shortcut: `Ctrl+1` , `Ctrl+2` ,{' '} + `Ctrl+3` + + + +Keyboard Shortcut: `Ctrl+Shift+E` + +Keyboard Shortcut: `Ctrl+click` ( `Cmd+click` on + macOS) + +You can quickly open a file or image or create a new file by moving the + cursor to the file link and using `Ctrl+click` . + + + +Keyboard Shortcut: `Ctrl+K F` + +Navigate entire history: `Ctrl+Tab` + +Navigate back: `Alt+Left` + +Navigate forward: `Alt+Right` + + + +Create language associations for files that aren't detected correctly. + For example, many configuration files with custom file extensions are + actually JSON. + +```javascript +"files.associations": { + ".database": "json" + + } +``` + +AVAP TM Dev Studio will show you an error message when you try + to save a file that cannot be saved because it has changed on disk. AVAP + TM Dev Studio blocks saving the file to prevent overwriting + changes that have been made outside of the editor. + +In order to resolve the save conflict, click the Compare action in the + error message to open a diff editor that will show you the contents of the + file on disk (to the left) compared to the contents in AVAP + TM Dev Studio (on the right): + + + +Use the actions in the editor toolbar to resolve the save conflict. You + can either Accept your changes and thereby overwriting + any changes on disk, or Revert to the version on disk. + Reverting means that your changes will be lost. + +Note : The file will remain dirty and cannot be saved + until you pick one of the two actions to resolve the conflict. + +### Editing Hacks + +Here is a selection of common features for editing code. If the keyboard + shortcuts aren't comfortable for you, consider installing a keymap + extension for your old editor. + +Tip : You can see recommended keymap extensions in the{' '} + Extensions view by filtering the search to + @recommended:keymaps. + +To add cursors at arbitrary positions, select a position with your mouse + and use `Alt+Click` ( `Option+Click` on + macOS). + +To set cursors above or below the current position use: + +Keyboard Shortcut: `Ctrl+Alt+Up` or `Ctrl+Alt+Down` + + + +You can add additional cursors to all occurrences of the current selection + with Ctrl+Shift+L. + + + +If you do not want to add all occurrences of the current selection, you + can use Ctrl+D instead. This only selects the next occurrence after the + one you selected so you can add selections one by one. + + + +You can select blocks of text by holding `Shift+Alt` ( + `Shift+Option` on macOS) while you drag your mouse. A + separate cursor will be added to the end of each selected line. + + + +You can also use keyboard shortcuts to trigger column selection. + +You can add vertical column rulers to the editor with the editor.rulers + setting, which takes an array of column character positions where + you'd like vertical rulers. + +```javascript +{ + "editor.rulers": [20, 40, 60] + + } +``` + + + +Pressing the Alt key enables fast scrolling in the editor and Explorers. + By default, fast scrolling uses a 5X speed multiplier but you can control + the multiplier with the * Editor: Fast Scroll Sensitivity * + (editor.fastScrollSensitivity) setting. + +Keyboard Shortcut: `Shift+Alt+Up` or{' '} + `Shift+Alt+Down` + +Keyboard Shortcut: `Alt+Up` or `Alt+Down` + + + +Keyboard Shortcut: `Shift+Alt+Left` or{' '} + `Shift+Alt+Right` + + + +You can learn more in the Basic Editing documentation. + +Keyboard Shortcut: `Ctrl+Shift+O` + + + +You can group the symbols by kind by adding a colon, @:. + + + +Keyboard Shortcut: `Ctrl+T` + + + +The Outline view in the File Explorer (default collapsed at the + bottom) shows you the symbols of the currently open file. + + + +You can sort by symbol name, category, and position in the file and allows + quick navigation to symbol locations. + +Keyboard Shortcut: `Ctrl+G` + +Keyboard Shortcut: `Ctrl+U` + +Keyboard Shortcut: `Ctrl+K Ctrl+X` + + + +Currently selected source code: `Ctrl+K Ctrl+F` + +Whole document format: `Shift+Alt+F` + + + +Keyboard Shortcut: `Ctrl+Shift+[` and `Ctrl+Shift+]` + + + +You can also fold/unfold all regions in the editor with Fold All ( + `Ctrl+K Ctrl+0` ) and Unfold All ( + `Ctrl+K Ctrl+J` ). + +You can fold all block comments with Fold All Block Comments ( + `Ctrl+K Ctrl+/` ). + +Keyboard Shortcut: `Ctrl+L` + +Keyboard Shortcut: `Ctrl+Home` and `Ctrl+End` + +In a Markdown file, use + +Keyboard Shortcut: `Ctrl+Shift+V` + +In a Markdown file, use + +Keyboard Shortcut: `Ctrl+K V` + +The preview and editor will synchronize with your scrolling in either + view. + +### IntelliSense + +`Ctrl+Space` to trigger the Suggestions widget. + + + +You can view available methods, parameter hints, short documentation, etc. + +Select a symbol then type `Alt+F12` . Alternatively, you can use + the context menu. + +Select a symbol then type `F12` . Alternatively, you can use the + context menu or `Ctrl+click` ( `Cmd+click` on + macOS). + + + +You can go back to your previous location with the Go {' '} + > Back command or `Alt+Left` . + +You can also see the type definition if you press `Ctrl` ( + `Cmd` on macOS) when you are hovering over the type. + +Select a symbol then type `Shift+F12` . Alternatively, you can + use the context menu. + + + +Select a symbol then type `Shift+Alt+F12` to open the + References view showing all your file's symbols in a dedicated view. + +Select a symbol then type `F2` . Alternatively, you can use the + context menu. + +rename symbol + +Besides searching and replacing expressions, you can also search and reuse + parts of what was matched, using regular expressions with capturing + groups. Enable regular expressions in the search box by clicking the{' '} + Use Regular Expression .* button ( `Alt+R` + ) and then write a regular expression and use parentheses to define + groups. You can then reuse the content matched in each group by using $1, + $2, etc. in the Replace field. + + + +Install the ESLint extension. Configure your linter however you'd + like. Consult the ESLint specification for details on its linting rules + and options. + +Here is configuration to use ES6. + +```javascript +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + "classes": true, + "defaultParams": true + } + }, + "rules": { + "no-const-assign": 1, + "no-extra-semi": 0, + "semi": 0, + "no-fallthrough": 0, + "no-empty": 0, + "no-mixed-spaces-and-tabs": 0, + "no-redeclare": 0, + "no-this-before-super": 1, + "no-undef": 1, + "no-unreachable": 1, + "no-use-before-define": 0, + "constructor-super": 1, + "curly": 0, + "eqeqeq": 0, + "func-names": 0, + "valid-typeof": 1 } + + } +``` + +See IntelliSense for your package.json file. + + + +Support for Emmet syntax. + + + +### Snippets + +File > Preferences >{' '} + Configure User Snippets , select the language, and create + a snippet. + +```javascript +"create component": { + "prefix": "component", + "body": [ "class $1 extends React.Component {", + "", + "\trender() {", + "\t\treturn ($2);", + "\t}", + "", + "}" + ] + }, +``` + +See more details in Creating your own Snippets. + +### Git integration + +Keyboard Shortcut: `Ctrl+Shift+G` + +Git integration comes with AVAP TM Dev Studio + "out-of-the-box". You can install other SCM providers from the + Extension Marketplace. This section describes the Git integration but much + of the UI and gestures are shared by other SCM providers. + +From the Source Control view, select a file to open the diff. + + + +Alternatively, click the Open Changes button in the top + right corner to diff the current open file. + +Views + +The default view for diffs is the side by side view . + +Toggle inline view by clicking the{' '} + More Actions (...) button in the top right and + selecting Toggle Inline View . + + + +If you prefer the inline view, you can set + "diffEditor.renderSideBySide": false. + +Accessible Diff Viewer + +Navigate through diffs with `F7` and `Shift+F7` . + This will present them in a unified patch format. Lines can be navigated + with arrow keys and pressing `Enter` will jump back in the diff + editor and the selected line. + + + +Edit pending changes + You can make edits directly in the pending changes of the diff view. + +Easily switch between Git branches via the Status Bar. + + + +Stage file changes + +Hover over the number of files and click the plus button. + +Click the minus button to unstage changes. + + + +Stage selected + +Stage a portion of a file by selecting that file (using the + arrows) and then choosing Stage Selected Ranges from + the Command Palette . + +Click the (...) button and then select{' '} + Undo Last Commit to undo the previous commit. The changes + are added to the Staged Changes section. + + + +AVAP TM Dev Studio makes it easy to see what Git commands are + actually running. This is helpful when learning Git or debugging a + difficult source control issue. + +Use the Toggle Output command ( + `Ctrl+Shift+U` ) and select Git in the + dropdown. + +View diff decorations in editor. See documentation for more details. + + + +During a merge, go to the Source Control view ( + `Ctrl+Shift+G` ) and make changes in the diff view. + +You can resolve merge conflicts with the inline CodeLens which lets you{' '} + Accept Current Change ,{' '} + Accept Incoming Change ,{' '} + Accept Both Changes , and Compare Changes + . + +```javascript +git config --global merge.tool vscode + + git config --global mergetool.vscode.cmd 'code --wait $MERGED' +``` + +```javascript +git config --global diff.tool vscode + + git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL + $REMOTE' +``` + +### Debugging + +From the Run and Debug view ( `Ctrl+Shift+D` ), select{' '} + create a launch.json file , which will prompt you to + select the environment that matches your project (Node.js, Python, + C++, etc). This will generate a launch.json file. Node.js support is + built-in and other environments require installing the appropriate + language extensions. See the debugging documentation for more details. + + + +Place breakpoints next to the line number. Navigate forward with the Debug + widget. + + + +Place breakpoints next to the line number. Navigate forward with the Debug + widget. + + + +Inspect variables in the Run panels and in the console. + + + +Logpoints act much like breakpoints but instead of halting the debugger + when they are hit, they log a message to the console. Logpoints are + especially useful for injecting logging while debugging production servers + that cannot be modified or paused. + +Add a logpoint with the Add Logpoint command in the left + editor gutter and it will be displayed as a "diamond" shaped + icon. Log messages are plain text but can include expressions to be + evaluated within curly braces ('{}'). + + + +A trigged breakpoint is a breakpoint that is automatically enabled once + another breakpoint is hit. They can be very useful when diagnosing failure + cases in code that happen only after a certain precondition. + +Triggered breakpoints can be set by right-clicking on the glyph margin, + selecting Add Triggered Breakpoint , and then choosing + which other breakpoint enables the breakpoint. + +http://https://code.visualstudio.com/assets/docs/editor/debugging/debug-triggered-breakpoint.mp4 + +### Task runner + +Select Terminal from the top-level menu, run the command{' '} + Configure Tasks , then select the type of task you'd + like to run. This will generate a tasks.json file with content like the + following. See the Tasks documentation for more details. + +```javascript +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ { + "type": "npm", + "script": "install", + "group": { + "kind": "build", + "isDefault": true + } + } + ] + } +``` + +There are occasionally issues with auto generation. Check out the + documentation for getting things to work properly. + +Select Terminal from the top-level menu, run the command{' '} + Run Task , and select the task you want to run. Terminate + the running task by running the command Terminate Task + + + +You can define a keyboard shortcut for any task. From the{' '} + Command Palette ( `Ctrl+Shift+P` ), + select Preferences: Open Keyboard Shortcuts File , bind + the desired shortcut to the workbench.action.tasks.runTask command, and + define the Task as args. + +For example, to bind `Ctrl+H` to the Run tests task, add the + following: + +```javascript +{ + "key": "ctrl+h", + "command": "workbench.action.tasks.runTask", + "args": "Run tests" + + } + + Run npm s +``` + + + +From the explorer you can open a script in the editor, run it as a task, + and launch it with the node debugger (when the script defines a debug + option like --inspect-brk). The default action on click is to open the + script. To run a script on a single click, set npm.scriptExplorerAction to + "run". Use the setting npm.exclude to exclude scripts in + package.json files contained in particular folders. + +With the setting npm.enableRunFromFolder, you can enable to run npm + scripts from the File Explorer's context menu for a folder. The + setting enables the command Run NPM Script in Folder ... + when a folder is selected. The command shows a Quick Pick list of the npm + scripts contained in this folder and you can select the script to be + executed as a task. + +### Portable mode + +AVAP TM Dev Studio has a Portable mode which lets you keep + settings and data in the same location as your installation, for example, + on a USB drive. + +### Insiders builds + +The AVAP™ Dev Studio Code team uses the Insiders version to test the + latest features and bug fixes of AVAP™ DS. You can also use the Insiders + version by downloading it here. + +* For Early Adopters - Insiders has the most recent code changes for users and extension authors to try out. +* Frequent Builds - New builds every day with the latest bug fixes and features. +* Side-by-side install - Insiders installs next to the Stable build allowing you to use either independently. diff --git a/docs/developer.avapframework.com/Historico_de_Confirmaciones_de_Ingresos_EN.md b/docs/developer.avapframework.com/Historico_de_Confirmaciones_de_Ingresos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Historico_de_Ingresos_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/Historico_de_Ingresos_Tiempo_Aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Indice de Servicios_EN.md b/docs/developer.avapframework.com/Indice de Servicios_EN.md new file mode 100644 index 0000000..ba770f2 --- /dev/null +++ b/docs/developer.avapframework.com/Indice de Servicios_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Commons: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar + +* Wallet: FILE PROCEDURE URL `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado + +* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...: FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes . diff --git a/docs/developer.avapframework.com/Indice_de_Servicios_Documentados_EN.md b/docs/developer.avapframework.com/Indice_de_Servicios_Documentados_EN.md new file mode 100644 index 0000000..4a24b1f --- /dev/null +++ b/docs/developer.avapframework.com/Indice_de_Servicios_Documentados_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL FILES `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Tools: FILE PROCEDURE URL FILED `divisas.py` listado /ws/divisas.py/listado X `firma.py` firmar /ws/firma.py/firmar X `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login X `Accesos` `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL FILED `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL FILED `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio X `Bills2` `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios X `Bills2` `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio X `Bills2` `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info X `Bills2` `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista X `Bills2` `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar X `Bills2` `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar Se ejecuta a traves de `pagodeservicios.py` + +* Wallet: FILE PROCEDURE URL NOTES FILED `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes X `origenes_de_fondos` `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad X `movimientos.py` listado /ws/movimientos.py/listado X + +* Notifications: FILE PROCEDURE URL FILED `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES FILED `cuentas.py` alta /ws/cuentas.py/alta X `alta_baja_modificacion` `cuentas.py` baja /ws/cuentas.py/baja X `alta_baja_modificacion` `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos X `alta_baja_modificacion` `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick X `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES FILED `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar X `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir X `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion X Falta revisar la repeticion de `tiempoaire.py` `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...: FILE PROCEDURE URL FILED `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion X Esta mal la URL indicada en{' '} `Interfaz Servicios Pagos` `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/Indice_de_Servicios_OLD_EN.md b/docs/developer.avapframework.com/Indice_de_Servicios_OLD_EN.md new file mode 100644 index 0000000..d5eb393 --- /dev/null +++ b/docs/developer.avapframework.com/Indice_de_Servicios_OLD_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Tools: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar + +* Wallet: FILE PROCEDURE URL NOTES `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado + +* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...:(?) FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/Informe_Consejo_EN.md b/docs/developer.avapframework.com/Informe_Consejo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Informe_afiliados_con_tipo_EN.md b/docs/developer.avapframework.com/Informe_afiliados_con_tipo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Informe_altas_EN.md b/docs/developer.avapframework.com/Informe_altas_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Informe_cuadro_de_mando_EN.md b/docs/developer.avapframework.com/Informe_cuadro_de_mando_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Informe_listado_de_usuarios_EN.md b/docs/developer.avapframework.com/Informe_listado_de_usuarios_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Informe_numero_altas_EN.md b/docs/developer.avapframework.com/Informe_numero_altas_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Informe_numero_transacciones_EN.md b/docs/developer.avapframework.com/Informe_numero_transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Informe_operaciones_EN.md b/docs/developer.avapframework.com/Informe_operaciones_EN.md new file mode 100644 index 0000000..bfb9cda --- /dev/null +++ b/docs/developer.avapframework.com/Informe_operaciones_EN.md @@ -0,0 +1,199 @@ +Report on the number of users showing the users who have registered by + themselves and those who have registered through an affiliate. + +POST: {' '} + `URL_BASE + /ws/admin.py/informesadmin` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "codtran" + : + , + "resultado" + :{' '} + { + "mensaje" + : + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false) +* `resultado:` Service answer +* `mensaje:` Indicates the email to which the report will arrive. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + : + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/admin.py/informesadmin" + + payload ={' '} + { + 'codigo_pais' + :{' '} + 'MX' + , + 'id_usuario' + :{' '} + '4532' + , + 'id_sesion' + :{' '} + '406-dwr5sTs_m29rnbzw9_miJQ==' + , + 'informe' + :{' '} + 'informeconsejo' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/admin.py/informesadmin', + 'headers': {}, + formData: { + 'codigo_pais': 'MX', + 'id_usuario': '4532', + 'id_sesion': '406-dwr5sTs_m29rnbzw9_miJQ==', + 'informe': 'informeconsejo' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("codigo_pais", "MX"); + formdata.append("id_usuario", "4532"); + formdata.append("id_sesion", + "406-dwr5sTs_m29rnbzw9_miJQ=="); + formdata.append("informe", "informeconsejo"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/admin.py/informesadmin", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + + 'URL_BASE/ws/admin.py/informesadmin' + {' '} + \ + --form + 'codigo_pais=MX' + {' '} + \ + --form + 'id_usuario=4532' + {' '} + \ + --form{' '} + + 'id_sesion=406-dwr5sTs_m29rnbzw9_miJQ==' + {' '} + \ + --form{' '} + 'informe=informeconsejo' +``` + +## Business logic: + +In order to run this service, it is necessary to do it from a user logged + into the system who has an administrator profile. With this endpoint the + requested report is generated and sent to the email of the administrator + user who requests it. diff --git a/docs/developer.avapframework.com/Informe_transacciones_EN.md b/docs/developer.avapframework.com/Informe_transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Ingresar_Prepago_EN.md b/docs/developer.avapframework.com/Ingresar_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Ingreso_de_fondos_para_tiempo_aire_EN.md b/docs/developer.avapframework.com/Ingreso_de_fondos_para_tiempo_aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Leer_notificaciones_del_usuario_EN.md b/docs/developer.avapframework.com/Leer_notificaciones_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Leer_una_notificacion_del_usuario_EN.md b/docs/developer.avapframework.com/Leer_una_notificacion_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Liquidaciones_de_Afiliados_EN.md b/docs/developer.avapframework.com/Liquidaciones_de_Afiliados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Lista general de servicios sin catalogar_EN.md b/docs/developer.avapframework.com/Lista general de servicios sin catalogar_EN.md new file mode 100644 index 0000000..6d32f59 --- /dev/null +++ b/docs/developer.avapframework.com/Lista general de servicios sin catalogar_EN.md @@ -0,0 +1 @@ +* General list: FILE PROCEDURE URL NOTE middleware.py comprobar_disponibilidad /ws/middleware.py/comprobar_disponibilidad I assume not middleware.py datos_cuenta /ws/middleware.py/datos_cuenta I assume not middleware.py enviar_sms /ws/middleware.py/enviar_sms I assume not middleware.py firmar_santander /ws/middleware.py/firmar_santander I assume not middleware.py transaccion_contrapartida /ws/middleware.py/transaccion_contrapartida I assume not middleware.py transaccion_entre_paises /ws/middleware.py/transaccion_entre_paises I assume not util.py saldo_quiubas /ws/util.py/saldo_quiubas I assume not pawn.py carvaloration /ws/pawn.py/carvaloration KO pawn.py cml2 /ws/pawn.py/cml2 KO pawn.py get_catalog /ws/pawn.py/get_catalog KO pawn.py manager /ws/pawn.py/manager KO pawn.py notify /ws/pawn.py/notify KO pawn.py pam /ws/pawn.py/pam KO pawn.py request /ws/pawn.py/request KO pawn.py status /ws/pawn.py/status KO diff --git a/docs/developer.avapframework.com/Listado_de_comisiones_de_afiliado_EN.md b/docs/developer.avapframework.com/Listado_de_comisiones_de_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Listado_de_divisas_EN.md b/docs/developer.avapframework.com/Listado_de_divisas_EN.md new file mode 100644 index 0000000..ccb5e28 --- /dev/null +++ b/docs/developer.avapframework.com/Listado_de_divisas_EN.md @@ -0,0 +1,215 @@ +This service is used to obtain the currencies of the countries active in + the system. + +GET: + `URL_BASE + /ws/currencies.py/listado` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "currencies" + :{' '} + [ + { + "change_sale" + : + , + "currency_data" + :{' '} + { + "abbreviation" + : + , + "suffix" + : + , + "format" + : + , + "symbol" + : + , + "prefix" + : + , + "decimals" + : + , + "id" + : + } + , + "abbreviation" + : + , + "format" + : + , + "currency_symbol" + : + , + "precision" + : + , + "change_purchase" + : + , + "change_reference" + : + , + "name" + : + , + "placeholder_currency" + : + } + ] + , + "elapsed" + :{' '} + 0.008363962173461914 + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `currencies:` List of currencies returned by the system. +* `currency_data:` Contains the different details of the currency used for the operation.. +* `abbreviation:` The abbreviated name of the currency(EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format(pesos, euros). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency(€, ¢, $). +* `prefix:` The prefix that is applied in the currency format. +* `decimals:` The maximum number of decimal places that will be included in the currency format. +* `id:` Identifier of the currency in BBDD. +* `abbreviation:` The abbreviated name of the currency(EUR, MXN). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `name:` Full name of the currency. +* `precision:` Number of decimal places allowed by the currency. +* `currency_symbol:` The symbol associated to the currency (€, ¢, $). +* `placeholder_currency:` The text of the currency always showing a value of 0. +* `change_purchase:` Currency price for purchase. +* `change_reference:` The value of the currency. +* `change_sale:` Currency price for sale. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/currencies.py/listado" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/currencies.py/listado', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/currencies.py/listado", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/currencies.py/listado' +``` + +## Business logic + +This service, through the 'telefone', searches for the user whose + movements are to be consulted, and returns a list with each of the + user's movements between two given dates. diff --git a/docs/developer.avapframework.com/Listado_de_movimientos_EN.md b/docs/developer.avapframework.com/Listado_de_movimientos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Listado_de_movimientos_granemisor_EN.md b/docs/developer.avapframework.com/Listado_de_movimientos_granemisor_EN.md new file mode 100644 index 0000000..ebe3a16 --- /dev/null +++ b/docs/developer.avapframework.com/Listado_de_movimientos_granemisor_EN.md @@ -0,0 +1,165 @@ +This service is used to obtain the movements made by a large issuer user + within the system. + +GET: {' '} + `URL_BASE + /ws/granemisor.py/listado` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "datos" + :{' '} + [ + [ {' '} + ] + ] + , + "numero_resultados" + : + , + "totales" + : + , + "columnas" + :{' '} + [ + ] + , + "limite_resultados" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `datos:` they are a list of lists in which each one contains the values for each of the columns. +* `elapsed:` Operation execution time. +* `numero_resultados:` Number of results that come in 'datos' +* `totales:` Total number of results +* `columnas:` Name of each of the values found in each of the lists in the data list.. +* `limite_resultados:` Maximum number of results that come in the query. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020' +``` + +## Business logic: + +This service returns a list with each of the movements of the large issuer + user between two given dates. diff --git a/docs/developer.avapframework.com/Listado_de_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/Listado_de_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Listado_de_usuarios_bloqueados_EN.md b/docs/developer.avapframework.com/Listado_de_usuarios_bloqueados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Listado_de_usuarios_en_lista_negra_EN.md b/docs/developer.avapframework.com/Listado_de_usuarios_en_lista_negra_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Listar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/Listar_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Listar_Soluciones_EN.md b/docs/developer.avapframework.com/Listar_Soluciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Listar_Usuarios_del_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/Listar_Usuarios_del_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Logout_Services_EN.md b/docs/developer.avapframework.com/Logout_Services_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Logs_del_sistema_EN.md b/docs/developer.avapframework.com/Logs_del_sistema_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Loyalty_Points_Exchange_EN.md b/docs/developer.avapframework.com/Loyalty_Points_Exchange_EN.md new file mode 100644 index 0000000..091def3 --- /dev/null +++ b/docs/developer.avapframework.com/Loyalty_Points_Exchange_EN.md @@ -0,0 +1,29 @@ +In your project, you can work with loyalty wallets to which you can assign + a FIAT currency, a non-FIAT currency or a new currency created by you, to + which you give a purchase and sale values. This is referred to as a + personalized wallet by default. + +As a concept, a personalized or loyalty wallet accumulates balance or + points that can later be exchanged for products, but that in no case can + be transformed into liquid money regardless of whether it is the result of + an ATM withdrawal, bank account, purchase of prepaid cards, or any other + concept that facilitates cashing out from a loyalty wallet. + +Transfers between users are not allowed unless the destination or wallet + of the beneficiary of the transfer is a wallet of the same type with the + same limitations and the configuration of the wallet allows such + transfers. + +Personalized or loyalty wallets rely on the currency table of the FX + Exchange service to carry out the operations of buying and selling + products from loyalty wallets, thus allowing customers to buy any type of + product, if they meet the conditions to be acquired by a source of + loyalty-type funds regardless of the type of currency held by the product + to be purchased. + +In this way, a customer with a loyalty wallet in USD can purchase products + published in EUR or MXN without any problem. Just like a customer with a + loyalty wallet in My_Coin, can purchase the same products mentioned above. + It is in the configuration of the FX Exchange currency table where the + purchase and sale price of My_Coin is determined, with USD serving as the + reference. diff --git a/docs/developer.avapframework.com/Marketplace_EN.md b/docs/developer.avapframework.com/Marketplace_EN.md new file mode 100644 index 0000000..e52ffd6 --- /dev/null +++ b/docs/developer.avapframework.com/Marketplace_EN.md @@ -0,0 +1,18 @@ +At 101OBeX we are committed to universality, integration, and + collaboration with other companies who enrich and help us enhance and + expand our array of services. + +Thanks to our marketplace, third parties can publish their APIs and add + value to the platform. + +From the Marketplace section you can browse the different published + plugins, install, configure and exploit each one of them. + +Keep in mind that plugins can be purchased, in which case the cost of the + plug-in will be processed as part of the recurring plan charges with each + collection period. + +Furthermore, a plug-in may require a pre-funded balance for its correct + operation, in which case you must maintain a sufficient balance in your + wallet. Adhering to the provided instructions for each plug-in to ensure + its proper configuration and correct operation. diff --git a/docs/developer.avapframework.com/Notificaciones_no_leidas_por_el_usuario_EN.md b/docs/developer.avapframework.com/Notificaciones_no_leidas_por_el_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/OVERVIEW.md b/docs/developer.avapframework.com/OVERVIEW.md new file mode 100644 index 0000000..45391c8 --- /dev/null +++ b/docs/developer.avapframework.com/OVERVIEW.md @@ -0,0 +1,58 @@ +AVAP TM Dev Studio 2024 is a lightweight but powerful source + code editor which runs on your desktop and is available for Windows, macOS + and Linux. It comes with built-in support for JavaScript, TypeScript and + Node.js and has a rich ecosystem of extensions for other languages and + runtimes (such as C++, C#, Java, Python, PHP, Go, .NET). Begin + your journey with VS Code with these introductory videos. + +### AVAP TM Code in Action + +## Top Extensions + +Enable additional languages, themes, debuggers, commands, and more. AVAP + TM Dev Studio's growing community shares their secret sauce + to improve your workflow. + +## First Steps + +To get the most out of AVAP TM Dev Studio, start by reviewing a + few introductory topics: + +Intro Videos - Begin your journey with AVAP Code through these + introductory videos. Setup - Install AVAP TM Dev Studio for your + platform and configure the tool set for your development needs. User + Interface - Introduction to the basic UI, commands, and features of the + AVAP TM Dev Studio editor. Settings - Customize AVAP + TM Dev Studio for how you like to work. Languages - Learn about + AVAP TM Dev Studio's support for your favorite programming + languages. Node.js - This tutorial gets you quickly running and debugging + a Node.js web app. Tips and Tricks - Jump right in with Tips and Tricks to + become a AVAP TM Dev Studio power user. Azure - AVAP + TM Dev Studio is great for deploying your web applications to + the cloud. Extension API - Learn how to write a AVAP TM Dev + Studio extension. Why AVAP TM Dev Studio? - Read about the + design philosophy and architecture of AVAP TM Dev Studio. + +## Keyboard Shortcuts + +Increase your productivity with AVAP TM Dev Studio's + keyboard shortcuts. + +Keyboard Shortcut Reference Sheet - Learn the commonly used keyboard + shortcuts. Keymap Extensions - Change AVAP TM Dev Studio's + keyboard shortcuts to match another editor. Customize Keyboard Shortcuts - + Modify the default keyboard shortcuts. + +## Downloads + +Download AVAP TM Dev Studio - Quickly find the appropriate + install for your platform (Windows, macOS and Linux) + +## Privacy + +By default, AVAP TM Dev Studio auto-updates to new versions, and + collects usage data and crash report information. You may opt out of these + defaults by disabling them as instructed below: + +How do I disable auto update? How do I disable crash reporting? How do I + disable usage reporting? diff --git a/docs/developer.avapframework.com/Obtener_Afiliados_del_sistema_EN.md b/docs/developer.avapframework.com/Obtener_Afiliados_del_sistema_EN.md new file mode 100644 index 0000000..445f6ff --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_Afiliados_del_sistema_EN.md @@ -0,0 +1,178 @@ +This service is used to obtain the affiliate. + +GET: {' '} + `URL_BASE + /ws/util.py/affiliates` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "codtran" + : + "affiliates" + :{' '} + [ + { + "phone" + : + , + "affiliate_id" + : + , + "country" + : + , + "name" + : + , + "other_data" + : + , + "allow_prefunding" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Transaction code that identifies the executed operation. +* `affiliates:` List of affiliates of the system. +* `phone:` Affiliate phone number. +* `affiliate_id:` Affiliate identifier. +* `country:` Affiliate Country Code. +* `name:` Affiliate name. +* `other_data:` Other affiliate data. +* `allow_prefunding:` Boolean that indicates if prefunding is allowed in the affiliate. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' +``` + +## Business logic: + +By means of this service all the affiliates of the system are obtained. diff --git a/docs/developer.avapframework.com/Obtener_Campos_Alta_Cliente_EN.md b/docs/developer.avapframework.com/Obtener_Campos_Alta_Cliente_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_Campos_Nivel_KYC_EN.md b/docs/developer.avapframework.com/Obtener_Campos_Nivel_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_Operadores_del_pais_EN.md b/docs/developer.avapframework.com/Obtener_Operadores_del_pais_EN.md new file mode 100644 index 0000000..71f2ae0 --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_Operadores_del_pais_EN.md @@ -0,0 +1,150 @@ +This service is used to obtain the operators of the chosen country. + +GET: + `URL_BASE + /ws/util.py/operators` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "operators" + :{' '} + [ + { + "name" + : + , + "operator_code" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `operators:` List with the telephone operators of the country. +* `name:` Name of the operator +* `operator_code:` Identifier of the operator. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/operators?country_code=MX" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/operators?country_code=MX', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/operators?country_code=MX", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/operators?country_code=MX' +``` + +## Business logic: + +By means of this service you get all the operators of the indicated + country. diff --git a/docs/developer.avapframework.com/Obtener_Paises_Activos_EN.md b/docs/developer.avapframework.com/Obtener_Paises_Activos_EN.md new file mode 100644 index 0000000..9a497b1 --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_Paises_Activos_EN.md @@ -0,0 +1,225 @@ +This service is used to obtain the active countries in the system. + +GET: + `URL_BASE + /ws/util.py/countries` + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "countries" + :{' '} + [ + { + "currency_symbol" + :{' '} + "$ " + , + "currency_data" + :{' '} + { + "abbreviation" + :{' '} + "MXN" + , + "suffix" + :{' '} + "pesos" + , + "format" + :{' '} + "$%.2f pesos" + , + "symbol" + :{' '} + "$" + , + "prefix" + :{' '} + "$" + , + "decimals" + :{' '} + 2.0 + , + "id" + :{' '} + 70 + } + , + "currency_format" + :{' '} + "$%.2f pesos" + , + "precision_currency" + :{' '} + 2.0 + , + "phone_longitude" + :{' '} + 10 + , + "currency" + :{' '} + "Mexico Peso" + , + "name" + :{' '} + "Mexico" + , + "prefix" + :{' '} + "52" + , + "phone" + :{' '} + "98780" + , + "placeholder_currency" + :{' '} + "$0.00 pesos" + , + "country_code" + :{' '} + "MX" + } + ] + , + "elapsed" + :{' '} + 0.0168149471282959 + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `countries:` List with the active countries of the system. +* `currency_symbol:` Symbol of the country's currency. +* `currency_data:` Contains the different details of the currency used in the operation. +* `abbreviation:` The abbreviated name of the currency (EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency (€, ¢, $). +* `prefix:` The prefix that is applied in the currency format. +* `decimals:` The maximum number of decimal places that will be included in the currency format. +* `id:` Identifier of the currency in BBDD. +* `currency_format:` Format to be applied to the amounts that use this currency. +* `precision_currency:` Decimals of the amounts that use this currency. +* `phone_longitude:` Size of telephone numbers used in the country. +* `currency:` Full name of the country's currency. +* `name:` Name of the country. +* `prefix:` Telephone prefix of the country's telephone numbers. +* `phone:` Telephone from which the system's SMS for the country are sent. +* `placeholder_currency:` Text to display in the fields that are of the currency and have no value. +* `country_code:` Code of the country. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/countries" + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/countries', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/countries", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + 'URL_BASE/ws/util.py/countries' +``` + +## Business logic: + +By means of this service all the active countries in the system are + obtained. diff --git a/docs/developer.avapframework.com/Obtener_Perfiles_de_Usuario_EN.md b/docs/developer.avapframework.com/Obtener_Perfiles_de_Usuario_EN.md new file mode 100644 index 0000000..3157d59 --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_Perfiles_de_Usuario_EN.md @@ -0,0 +1,163 @@ +This service is used to obtain users' profiles. + +GET: + `URL_BASE + /ws/util.py/profiles` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "profiles" + :{' '} + [ + { + "name" + : + , + "code" + : + , + "id" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `profiles:` List of the profiles. +* `name:` Profile name. +* `code:` Profile role name +* `id:` Profile identifier. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' +``` + +## Business logic: + +By means of this service all the system profiles are obtained. diff --git a/docs/developer.avapframework.com/Obtener_Provincias_del_pais_EN.md b/docs/developer.avapframework.com/Obtener_Provincias_del_pais_EN.md new file mode 100644 index 0000000..6b86b2f --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_Provincias_del_pais_EN.md @@ -0,0 +1,150 @@ +This service is used to obtain the regions of the indicated country. + +GET: + `URL_BASE + /ws/util.py/regions` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "regions" + :{' '} + [ + { + "name" + : + , + "region_id" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `regions:` List of regions. +* `name:` Name of the region +* `region_id:` Identifier of the region. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/regions?county_code=MX" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/regions?county_code=MX', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/regions?county_code=MX", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/regions?county_code=MX' +``` + +## Business logic: + +By means of this service all the regions of the indicated country are + obtained. diff --git a/docs/developer.avapframework.com/Obtener_Shake_4_EN.md b/docs/developer.avapframework.com/Obtener_Shake_4_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_Shake_v2_3_EN.md b/docs/developer.avapframework.com/Obtener_Shake_v2_3_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_Shake_v2_EN.md b/docs/developer.avapframework.com/Obtener_Shake_v2_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_Shakes_EN.md b/docs/developer.avapframework.com/Obtener_Shakes_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_caracteristicas_de_un_servicio_EN.md b/docs/developer.avapframework.com/Obtener_caracteristicas_de_un_servicio_EN.md new file mode 100644 index 0000000..b4b56fa --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_caracteristicas_de_un_servicio_EN.md @@ -0,0 +1,164 @@ +This service is used to obtain the users' profiles. + +GET: + `URL_BASE + /ws/util.py/get_caracteristicas` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "characteristics" + :{' '} + { + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `characteristics:` Container object of the characteristics of the indicated service. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX /{' '} + &user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D&point_of_entry=login' +``` + +## Business logic: + +In order to make this call it is necessary to make it with a user who is + logged into the system, except for the following entry points: + +* registration +* login +* restartpin +* forwardotpregistration + +Each element of the answer that is within the characteristics is formed + with the following structure: + +being the value of the property of any type. + + diff --git a/docs/developer.avapframework.com/Obtener_datos_usuario_EN.md b/docs/developer.avapframework.com/Obtener_datos_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/Obtener_imagen_del_perfil_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_info_usuario_EN.md b/docs/developer.avapframework.com/Obtener_info_usuario_EN.md new file mode 100644 index 0000000..a73d6ba --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_info_usuario_EN.md @@ -0,0 +1,173 @@ +This service is used to obtain the user information + +GET: {' '} + `URL_BASE + /ws/users.py/info_usuario` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "user_id" + : + , + "number_of_transactions" + : + , + "amount_of_transactions" + : + , + "point_program" + :{' '} + [ + { + 'name': + , 'amount' + : + , 'id' + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `user_id:` Identifier of the user from whom we have obtained the information. +* `number_of_transactions:` Number of transactions of the indicated type in the last 30 days. +* `amount_of_transactions:` Total amount of transactions of the indicated type of the last 30 days. +* `point_program:` List with the point programs in which the user is. +* `name:` Points program name. +* `amount:` User points in the points program. +* `id:` Points program identifier. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA%3D%3D&user=7229063245&point_of_entry=solicituddinero' +``` + +## Business logic: + +By means of this service the data of the user indicated with the indicated + parameter is obtained. diff --git a/docs/developer.avapframework.com/Obtener_preguntas_de_seguridad_del_usuario_EN(1).md b/docs/developer.avapframework.com/Obtener_preguntas_de_seguridad_del_usuario_EN(1).md new file mode 100644 index 0000000..d4c0421 --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_preguntas_de_seguridad_del_usuario_EN(1).md @@ -0,0 +1,151 @@ +This services is used to obtain the security questions. + +GET: {' '} + `URL_BASE + /ws/seguridad_itf.py/preguntas_de_seguridad` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "preguntas" + :{' '} + [ + { + "id" + : + , + "texto" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `preguntas:` List of security questions selected by the user to be able to answer them. +* `id:` Identifier of the security questions. (Necessary to be able to send each question with its answer) +* `texto:` Security question. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71' +``` + +## Business logic: + +MP-140 diff --git a/docs/developer.avapframework.com/Obtener_preguntas_de_seguridad_del_usuario_EN.md b/docs/developer.avapframework.com/Obtener_preguntas_de_seguridad_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Obtener_todos_los_datos_de_la_transaccion_EN.md b/docs/developer.avapframework.com/Obtener_todos_los_datos_de_la_transaccion_EN.md new file mode 100644 index 0000000..e8e855a --- /dev/null +++ b/docs/developer.avapframework.com/Obtener_todos_los_datos_de_la_transaccion_EN.md @@ -0,0 +1,330 @@ +This service gives you back all data associated to the chosen transaction.{' '} + +POST: + `URL_BASE + /ws/movimientos.py/transaction_data` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "transaction_data" + :{' '} + { + "telefono_cuenta" + : + , + "transaction_code" + : + , + "user" + : + , + "user_email" + : + , + "origin_of_funds" + : + , + "destination" + : + , + "destination_phone" + : + , + "destination_language_id" + : + , + "invoice" + : + , + "reference" + :{' '} + null + , + "concept" + : + , + "action" + : + , + "date" + : + , + "service_name" + : + , + "characteristics" + :{' '} + { + + } + , + "affiliate" + : + , + "affiliate_url" + : + , + "affiliate_url_image" + : + , + "amount" + : + , + "amount_fmt" + : + , + "total_commission" + : + , + "total_commission_fmt" + : + , + "commission" + : + , + "commission_fmt" + : + , + "vat_commission" + : + , + "vat_commission_fmt" + : + , + "vat_operation" + : + , + "vat_operation_fmt" + : + , + "currency" + : + , + "total" + : + , + "total_fmt" + : + "subject_ticket" + : + , + {' '} + "subject_ticket_destination" + : + , + "ticket_html" + : + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `transaction_data:` Data of the requested transaction. +* `telefono_cuenta:` Telephone number of the account of origin of the transaction +* `transaction_code:` Transaction code. +* `user:` Name of the user of origin of the transaction.. +* `user_email:` Email of the originating user of the transaction. +* `origin_of_funds:` Name of the source of funds used in the operation. +* `destination:` Name of the target user of the operation. +* `destination_phone:` Telephone number of the destination account of the operation. +* `destination_language_id:` Language identifier of the target user for the operation. +* `invoice:` Invoice number/invoice of the operation. +* `reference:` Invoice / page number of the operation. +* `concept:` Descriptive text of the operation. +* `action:` Name of the action that was executed with this operation. +* `date:` Date on which the transaction occurs. +* `service_name:` Text with the name of the service, if it does not have a name, the concept is returned. +* `characteristics:` Dictionary with the characteristics of the service, explained in greater depth on the endpoint{' '} `get_caracteristicas` . +* `affiliate:` Name of the affiliate of the user who executed the operation. +* `affiliate_url:` Affiliate website url. +* `affiliate_url_image:` Url of the affiliate image (logo). +* `amount:` Amount of the operation without format or commissions. +* `amount_fmt:` Amount of the operation with the applied format, but without commissions. +* `total_commission:` Amount of commission charged without format and with VAT applied. +* `total_commission_fmt:` Amount of commission charged with the format and VAT applied. +* `commission:` Amount of the commission charged to the user without the format and without VAT. +* `commission_fmt:` Formatted commission amount and if VAT applied. +* `vat_commission:` VAT amount of raw commission. +* `vat_commission_fmt:` Commission VAT amount with the format. +* `vat_operation:` VAT amount applied to the operation carried out without format. +* `vat_operation_fmt:` Amount of VAT applied to the operation carried out with the applied currency format.. +* `currency:` Name of the currency used in the operation. +* `total:` Total amount of the operation (amount + commission + VAT), without format. +* `total_fmt:` Total amount of the operation (amount + commission + VAT), with format. +* `subject_ticket:` Subject text of the ticket that is sent by mail to the user of origin of the operation. +* `subject_ticket_destination:` Subject text of the ticket that is sent by mail to the target user of the operation. +* `ticket_html:` Ticket that is mailed to users. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/movimientos.py/transaction_data" + + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'session_id' + :{' '} + '414-YehjRL-mR64z81Nu9gg7og==' + , + 'transaction_code' + :{' '} + '60995737691715d3cc51aa4ab699fd84' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/movimientos.py/transaction_data', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'session_id': '414-YehjRL-mR64z81Nu9gg7og==', + 'transaction_code': '60995737691715d3cc51aa4ab699fd84' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("session_id", + "414-YehjRL-mR64z81Nu9gg7og=="); + formdata.append("transaction_code", + "60995737691715d3cc51aa4ab699fd84"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/movimientos.py/transaction_data", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + + 'URL_BASE/ws/movimientos.py/transaction_data' + {' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + + 'session_id=414-YehjRL-mR64z81Nu9gg7og==' + {' '} + \ + --form{' '} + + 'transaction_code=60995737691715d3cc51aa4ab699fd84' +``` + +## Business logic: + +With this endpoint all the data associated with the requested transaction + is returned. diff --git a/docs/developer.avapframework.com/Operaciones_EN.md b/docs/developer.avapframework.com/Operaciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Orden_de_cargo_EN.md b/docs/developer.avapframework.com/Orden_de_cargo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Pago_diferido_EN.md b/docs/developer.avapframework.com/Pago_diferido_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Plans_Wallet_EN.md b/docs/developer.avapframework.com/Plans_Wallet_EN.md new file mode 100644 index 0000000..a33bef2 --- /dev/null +++ b/docs/developer.avapframework.com/Plans_Wallet_EN.md @@ -0,0 +1,16 @@ +Plan Wallets All the existing plans in 101OBeX have a wallet, that will be + used as a rounded account to discount each of the transactional services + that are operated. + +IT IS IMPORTANT TO CLARIFY THAT THE WALLET THAT MAINTAINS THE BALANCES OF + THE NODES OR PROJECTS DOES NOT CHARGE THE MONTHLY SUBSCRIPTION, NOR THE + ADD-ONS, NOR THE PLUGINS THAT MAY BE ACTIVE. THE PURPOSE OF THE WALLET OF + EACH SUBSCRIPTION IS TO PREFUND THE BALANCE WITH WHICH THE TRANSACTIONAL + SERVICES OF EACH OF THE PROJECTS WILL BE SERVED. + +THE SUBSCRIPTION WALLET IS NOT A BANK ACCOUNT AND THEREFORE THE PRE-FUNDED + MONEY CANNOT BE WITHDRAWN AND MUST BE SPENT/CONSUMED IN 101OBeX SERVICES. + +Adding funds to the wallet is a straightforward process. Access the + Dashboard, then click the + icon within the Balance section. This action + will initiate the procedure for adding funds. diff --git a/docs/developer.avapframework.com/Precios_de_los_distintos_servicios_EN.md b/docs/developer.avapframework.com/Precios_de_los_distintos_servicios_EN.md new file mode 100644 index 0000000..d998d5d --- /dev/null +++ b/docs/developer.avapframework.com/Precios_de_los_distintos_servicios_EN.md @@ -0,0 +1,197 @@ +This service is used to obtain the total price of the user's use of a + service.{' '} + +GET: + `URL_BASE + /ws/util.py/precios_servicio` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK, if it indicates only_commission is True: + +```javascript +{ + "status" + :{' '} + true + , + "commission_fmt" + : + , + "commission" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `commission_fmt:` Commission amount with the currency format. +* `commission:` Commission amount without format. +* `elapsed:` Operation execution time. + +### Answer JSON OK, if only_commission is not indicated True: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + : + , + "result" + :{' '} + { + "origins" + :{' '} + [ + { + + } + ] + , + "creators" + :{' '} + [ + ] + , + } + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Transaction code that identifies the executed operation. +* `result:` Executed service answer. +* `origins:` List with the origin of the user's funds. View structure on the endpoint `origin_of_funds` . +* `creators:` List of types of sources of funds that the user can create. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true' +``` + +## Business logic: + +This service returns a list with each of the movements of the large issuer + user between two given dates. diff --git a/docs/developer.avapframework.com/Procesar_SMS_EN.md b/docs/developer.avapframework.com/Procesar_SMS_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Reactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/Reactivacion_de_una_cuenta_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Recarga_de_dinero_EN.md b/docs/developer.avapframework.com/Recarga_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Rechazar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/Rechazar_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Reenviar_el_OTP_para_el_alta_EN.md b/docs/developer.avapframework.com/Reenviar_el_OTP_para_el_alta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Regenerar_contrasena_del_usuario_EN.md b/docs/developer.avapframework.com/Regenerar_contrasena_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Registrar_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/Registrar_Monedero_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Remesa_dirigida_EN.md b/docs/developer.avapframework.com/Remesa_dirigida_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Resumen_de_las_comisiones_del_afiliado_EN.md b/docs/developer.avapframework.com/Resumen_de_las_comisiones_del_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Retirar_EN.md b/docs/developer.avapframework.com/Retirar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Retirar_Prepago_EN.md b/docs/developer.avapframework.com/Retirar_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Retirar_a_Banco_EN.md b/docs/developer.avapframework.com/Retirar_a_Banco_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Retirar_a_Tarjeta_EN.md b/docs/developer.avapframework.com/Retirar_a_Tarjeta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Retiro_en_cajero_EN.md b/docs/developer.avapframework.com/Retiro_en_cajero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/SETUP_Additional components and tools.md b/docs/developer.avapframework.com/SETUP_Additional components and tools.md new file mode 100644 index 0000000..7131769 --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_Additional components and tools.md @@ -0,0 +1,51 @@ +AVAP™ Dev Studio 2024 is a small download by design and only includes the + minimum number of components shared across most development workflows. + Basic functionality like the editor, file management, window management, + and preference settings are included. A JavaScript/TypeScript language + service and Node.js debugger are also part of the base install. + +If you are used to working with larger, monolithic development tools + (IDEs), you may be surprised that your scenarios aren't + completely supported out of the box. For example, there isn't a{' '} + File > New Project dialog with + pre-installed project templates. Most AVAP™ Dev Studio users will need to + install additional components depending on their specific needs. + +### Commonly used components + +Here are a few commonly installed components: + +* Git - AVAP™ Dev Studio has built-in support for source code control using Git but requires Git to be installed separately. +* Node.js (includes npm) - A cross platform runtime for building and running JavaScript applications. +* TypeScript - The TypeScript compiler, `tsc` , for transpiling TypeScript to JavaScript. + +You'll find the components above mentioned often in our documentation + and walkthroughs. + +### AVAP™ Dev Studio extensions + +You can extend the AVAP™ Dev Studio editor itself through extensions. The + AVAP™ Dev Studio community has built hundreds of useful extensions + available on the AVAP™ Dev Studio Marketplace. + +The extensions shown above are the current most popular on Marketplace. + Click on an extension tile above to read the description and reviews of + the extension. + +### Additional tools + +AVAP™ Dev Studio 2024 integrates with existing tool chains. We think the + following tools will enhance your development experiences. + +* Yeoman - An application scaffolding tool, a command line version of File > New Project. +* generator-hottowel - A Yeoman generator for quickly creating AngularJS applications. +* Express - An application framework for Node.js applications using the Pug template engine. +* Gulp - A streaming task runner system which integrates easily with AVAP™ Dev Studio tasks. +* Mocha - A JavaScript test framework that runs on Node.js. +* Yarn - A dependency manager and alternative to npm. + +### Next steps + +* User Interface - A quick orientation around AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. +* Languages - AVAP™ Dev Studio supports many programming languages out-of-the-box as well as many more through community created extensions. diff --git a/docs/developer.avapframework.com/SETUP_Enterprise.md b/docs/developer.avapframework.com/SETUP_Enterprise.md new file mode 100644 index 0000000..325f001 --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_Enterprise.md @@ -0,0 +1,43 @@ +AVAP™ Dev Studio 2024 can be used as a development tool for enterprise + teams of all sizes. As an IT admin, you can configure AVAP™ DS 2024 to + achieve consistency and compatibility across your organization. + +## Network: Common hostnames + +A handful of features within AVAP™ DS 2024 require network communication + to work, such as the auto-update mechanism, querying and installing + extensions, and telemetry. For these features to work properly in a proxy + environment, you must have the product correctly configured. + +Refer to the network common hostnames list for the required domains. + +## Group Policy on Windows + +System administrators need a way to control default software settings + across all client machines in their organization. Group Policy is a client + solution that gives administrators flexibility to implement the behavior + for each of the available policies and settings. + +AVAP™ Dev Studio 2024 now has support for Windows Registry-based Group + Policy. Starting from AVAP™ DS 2024 version 1.69, each release will ship + with a `policies` directory containing ADMX template files that + can be added to the following path:{' '} + `C:\Windows\PolicyDefinitions.` + +Once the policy definitions are installed, admins can use the Local Group + Policy Editor to manage the policy values. + +Policies can be set both at the Computer level and the User level. If both + are set, Computer level will take precedence. When a policy value is set, + the value overrides the AVAP™ Dev Studio 2024 setting value configured at + any level (default, user, workspace, etc.). + +## Additional Policies + +The goal is to promote current AVAP™ Dev Studio 2024 2024 settings as + Policies and closely follow existing settings, so that the naming and + behavior are consistent. If there are requests to enact more policies, + please open an issue in the AVAP™ Dev Studio 2024 2024 GitHub repository. + The team will determine if there is already a corresponding setting for + the behavior or if a new setting should be created to control the desired + behavior. diff --git a/docs/developer.avapframework.com/SETUP_Linux.md b/docs/developer.avapframework.com/SETUP_Linux.md new file mode 100644 index 0000000..9ede51b --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_Linux.md @@ -0,0 +1,419 @@ +### Installation + +See the Download AVAP TM Dev Studio page for a complete list of + available installation options. + +By downloading and using AVAP TM Dev Studio, you agree to the + license terms and privacy statement. + +The easiest way to install AVAP TM Dev Studio for Debian/Ubuntu + based distributions is to download and install the .deb package + (64-bit), either through the graphical software center if it's + available, or through the command line with: + +```javascript +sudo apt install ./.deb + + # If you're on an older Linux distribution, you will need to run + this instead: + # sudo dpkg -i .deb + # sudo apt-get install -f # Install dependencies +``` + +Note that other binaries are also available on the AVAP TM Dev + Studio download page. + +Installing the .deb package will automatically install the apt repository + and signing key to enable auto-updating using the system's package + manager. Alternatively, the repository and key can also be installed + manually with the following script: + +```javascript +sudo apt-get install wget gpg + + wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg + --dearmor > packages.microsoft.gpg + + sudo install -D -o root -g root -m 644 packages.microsoft.gpg + /etc/apt/keyrings/packages.microsoft.gpg + + sudo sh -c 'echo "deb [arch=amd64,arm64,armhf + signed-by=/etc/apt/keyrings/packages.microsoft.gpg] + https://packages.microsoft.com/repos/code stable main" > + /etc/apt/sources.list.d/AVAPDevStudio.list' + + rm -f packages.microsoft.gpg +``` + +Then update the package cache and install the package using: + +```javascript +sudo apt install apt-transport-https + + sudo apt update + + sudo apt install code # or code-insiders +``` + +We currently ship the stable 64-bit AVAP TM Dev Studio in a yum + repository, the following script will install the key and repository: + +```javascript +sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc + + sudo sh -c 'echo -e "[code]\nname=Visual Studio + Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" + > /etc/yum.repos.d/vscode.repo' +``` + +Then update the package cache and install the package using dnf + (Fedora 22 and above): + +```javascript +dnf check-update + + sudo dnf install code # or code-insiders +``` + +Or on older versions using yum : + +```javascript +yum check-update + + sudo yum install code # or code-insiders +``` + +Due to the manual signing process and the system we use to publish, the + yum repo may lag behind and not get the latest version of VS Code + immediately. + +AVAP TM Dev Studio is officially distributed as a Snap package + in the Snap Store: + + + +You can install it by running: + +```javascript +sudo snap install --classic code # or code-insiders +``` + +Once installed, the Snap daemon will take care of automatically updating + AVAP TM Dev Studio in the background. You will get an in-product + update notification whenever a new update is available. + +Note: If snap isn't available in your Linux distribution, please check + the following Installing snapd guide, which can help you get that set up. + +Learn more about snaps from the official Snap Documentation. + +The yum repository above also works for openSUSE and SLE-based systems, + the following script will install the key and repository: + +```javascript +sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc + + sudo sh -c 'echo -e "[code]\nname=Visual Studio + Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" + > /etc/zypp/repos.d/vscode.repo' +``` + +Then update the package cache and install the package using: + +```javascript +sudo zypper refresh + + sudo zypper install code +``` + +There is a community-maintained Arch User Repository package for AVAP + TM DS. + +To get more information about the installation from the AUR, please + consult the following wiki entry: Install AUR Packages. + +There is a community maintained AVAP TM Dev Studio Nix package + in the nixpkgs repository. In order to install it using Nix, set + allowUnfree option to true in your config.nix and execute: + +```javascript +nix-env -i vscode +``` + +The AVAP TM Dev Studio .rpm package (64-bit) can also be + manually downloaded and installed, however, auto-updating won't work + unless the repository above is installed. Once downloaded it can be + installed using your package manager, for example with dnf: + +```javascript +sudo dnf install .rpm +``` + +Note that other binaries are also available on the AVAP TM Dev + Studio download page. + +### Updates + +AVAP TM Dev Studio ships monthly and you can see when a new + release is available by checking the release notes. If the AVAP + TM DS repository was installed correctly, then your system + package manager should handle auto-updating in the same way as other + packages on the system. + +Note: Updates are automatic and run in the background for the Snap + package. + +### Node.js + +Node.js is a popular platform and runtime for easily building and running + JavaScript applications. It also includes npm, a Package Manager for + Node.js modules. You'll see Node.js and npm mentioned frequently in + our documentation and some optional VS Code tooling requires Node.js + (for example, the AVAP TM Dev Studio extension + generator). + +If you'd like to install Node.js on Linux, see Installing Node.js via + package manager to find the Node.js package and installation instructions + tailored to your Linux distribution. You can also install and support + multiple versions of Node.js by using the Node Version Manager. + +To learn more about JavaScript and Node.js, see our Node.js tutorial, + where you'll learn about running and debugging Node.js applications + with VS Code. + +### Setting AVAP TM Dev Studio as the default text editor + +You can set the default text editor for text files (text/plain) + that is used by xdg-open with the following command: + +```javascript +xdg-mime default code.desktop text/plain +``` + +Debian-based distributions allow setting a default editor using the Debian + alternatives system, without concern for the MIME type. You can set this + by running the following and selecting code: + +```javascript +sudo update-alternatives --set editor /usr/bin/code +``` + +If AVAP TM Dev Studio doesn't show up as an alternative to + editor, you need to register it: + +```javascript +sudo update-alternatives --install /usr/bin/editor editor $(which + code) 10 +``` + +### Windows as a Linux developer machine + +Another option for Linux development with AVAP TM Dev Studio is + to use a Windows machine with the Windows Subsystem for Linux + (WSL). + +With WSL, you can install and run Linux distributions on Windows. This + enables you to develop and test your source code on Linux while still + working locally on a Windows machine. WSL supports Linux distributions + such as Ubuntu, Debian, SUSE, and Alpine available from the Microsoft + Store. + +When coupled with the WSL extension, you get full AVAP TM Dev + Studio editing and debugging support while running in the context of a + Linux distro on WSL. + +See the Developing in WSL documentation to learn more or try the Working + in WSL introductory tutorial. + +### Next steps + +Once you have installed AVAP TM Dev Studio, these topics will + help you learn more about it: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP TM Dev Studio. +* User/Workspace Settings - Learn how to configure VS Code to your preferences through settings. + +### Common questions + +I'm getting a "Running without the SUID sandbox" error? + +You can safely ignore this error. + +If you see an error when deleting files from the AVAP TM Dev + Studio Explorer on the Debian operating system, it might be because the + trash implementation that AVAP TM Dev Studio is using is not + there. + +Run these commands to solve this issue: + +```javascript +sudo apt-get install gvfs libglib2.0-bin +``` + +Some distributions, for example Pop!_OS provide their own{' '} + `code` package. To ensure the official AVAP TM Dev + Studio repository is used, create a file named{' '} + `/etc/apt/preferences.d/code` with the following content: + +```javascript +Package: code + + Pin: origin "packages.microsoft.com" + + Pin-Priority: 9999 +``` + +When you see this notification, it indicates that the AVAP TM {' '} + Dev Studio file watcher is running out of file handles that are needed to + implement file watching. Most often this can happen when opening a + workspace that is large and contains many files. Before adjusting platform + limits, make sure that potentially large folders, such as Python{' '} + `.venv` , are added to the `files.watcherExclude` {' '} + setting (more details below). It is also possible that other + running applications consume so many file handles that none are left for + AVAP TM Dev Studio to use. In that case it might help to close + these other applications. + +The current limit can be viewed by running: + +```javascript +cat /proc/sys/fs/inotify/max_user_watches +``` + +The limit can be increased to its maximum by editing{' '} + `/etc/sysctl.conf` (except on Arch Linux, read below) + and adding this line to the end of the file: + +```javascript +fs.inotify.max_user_watches=524288 +``` + +The new value can then be loaded in by running `sudo sysctl -p` + . + +While 524,288 is the maximum number of files that can be watched, if + you're in an environment that is particularly memory constrained, you + may want to lower the number. Each file watch takes up 1080 bytes, so + assuming that all 524,288 watches are consumed, that results in an upper + bound of around 540 MiB. + +Arch-based distros (including Manjaro) require you to change a + different file; follow these steps instead. + +Another option is to exclude specific workspace directories from the AVAP + TM DS file watcher with the `files.watcherExclude` {' '} + setting. The default for `files.watcherExclude` excludes{' '} + `node_modules` and some folders under .git, but you can add + other directories that you don't want AVAP TM DS to track. + +```javascript +"files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtreev-cache/**": true, + "**/node_modules/*/**": true + } +``` + +We're working on a fix. In the meantime, open the application menu, + then choose File > Preferences > Settings. In the Text Editor > + Font section, set "Font Family" to{' '} + `Droid Sans Mono, Droid Sans Fallback.` If you'd rather + edit the `settings.json` file directly, set{' '} + `editor.fontFamily` as shown: + +```javascript +"editor.fontFamily": "Droid Sans Mono, Droid Sans Fallback" +``` + +This error can appear during installation and is typically caused by the + package manager's lists being out of date. Try updating them and + installing again: + +```javascript +# For .deb + + sudo apt-get update + + # For .rpm (Fedora 21 and below) + + sudo yum check-update + + # For .rpm (Fedora 22 and above) + + sudo dnf check-update +``` + +Running `code.` on Ubuntu when AVAP TM Dev Studio is + already open in the current directory will not bring AVAP TM Dev + Studio into the foreground. This is a feature of the OS which can be + disabled using `ccsm` . + +```javascript +# Install + + sudo apt-get update + + sudo apt-get install compizconfig-settings-manager + + # Run + + ccsm +``` + +Under General > General Options >{' '} + Focus & Raise Behaviour , set "Focus Prevention + Level" to "Off". Remember this is an OS-level setting that + will apply to all applications, not just VS Code. + +This can happen when `sources.list.d` doesn't exist or you + don't have access to create the file. To fix this, try manually + creating the folder and an empty `vscode.list` file: + +```javascript +sudo mkdir /etc/apt/sources.list.d + + sudo touch /etc/apt/sources.list.d/vscode.list +``` + +If you are using X forwarding to use AVAP TM DS remotely, you + will need to use the native title bar to ensure you can properly + manipulate the window. You can switch to using it by setting{' '} + `window.titleBarStyle` to `native` . + +The custom title bar and menus were enabled by default on Linux for + several months. The custom title bar has been a success on Windows, but + the customer response on Linux suggests otherwise. Based on feedback, we + have decided to make this setting opt-in on Linux and leave the native + title bar as the default. + +The custom title bar provides many benefits including great theming + support and better accessibility through keyboard navigation and screen + readers. Unfortunately, these benefits do not translate as well to the + Linux platform. Linux has a variety of desktop environments and window + managers that can make the AVAP TM DS theming look foreign to + users. For users needing the accessibility improvements, we recommend + enabling the custom title bar when running in accessibility mode using a + screen reader. You can still manually set the title bar with the{' '} + Window: Title Bar Style ( + `window.titleBarStyle` ) setting. + +Due to an upstream issue #14787 with Electron, the mouse cursor may render + incorrectly with scaling enabled. If you notice that the usual text cursor + is not being rendered inside the editor as you would expect, try falling + back to the native menu bar by configuring the setting{' '} + `window.titleBarStyle` to `native` . + +If you receive an error similar to the following: + +```javascript +E: Repository '...' changed its 'Origin' value from '...' to '...' + + N: This must be accepted explicitly before updates for this repository + can be applied. See apt-secure(8) manpage for details. +``` + +Use `apt` instead of `apt-get` and you will be + prompted to accept the origin change: + +`sudo apt update` diff --git a/docs/developer.avapframework.com/SETUP_MacOS.md b/docs/developer.avapframework.com/SETUP_MacOS.md new file mode 100644 index 0000000..062a291 --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_MacOS.md @@ -0,0 +1,107 @@ +## Installation + +## Launching from the command line + +You can also run AVAP™ Dev Studio from the terminal by typing + 'code' after adding it to the path: + +* Launch AVAP™ Dev Studio. +* Open the Command Palette {' '} `(Cmd+Shift+P)` and type 'shell command' to find the{' '} Shell Command: Install 'code' command in PATH {' '} command. + +##IMAGEN## + +* Restart the terminal for the new `$PATH` value to take effect. You'll be able to type 'code .' in any folder to start editing files in that folder. + +Instead of running the command above, you can manually add AVAP™ Dev + Studio to your path, to do so run the following commands: + +```javascript +cat << EOF >> ~/.bash_profile + + Add AVAP™ Dev Studio 2024 (code) + + export PATH="\$PATH:/Applications/AVAP™ Dev Studio + 2024.app/Contents/Resources/app/bin" + + EOF +``` + +Start a new terminal to pick up your `.bash_profile` changes. + +Note: The leading slash \ is required to prevent{' '} + `$PATH` from expanding during the concatenation. Remove the + leading slash if you want to run the export command directly in a + terminal. + +Note: Since `zsh` became the default shell in + macOS Catalina, run the following commands to add AVAP™ Dev Studio to your + path: + +```javascript +`cat << EOF >> ~/.zprofile + + Add AVAP™ Dev Studio 2024 (code) + + export PATH="\$PATH:/Applications/AVAP™ Dev Studio + 2024.app/Contents/Resources/app/bin" + + EOF` +``` + +## Touch Bar support + +Out of the box AVAP™ Dev Studio adds actions to navigate in editor history + as well as the full Debug tool bar to control the debugger on your Touch + Bar: + +##IMAGEN## + +## Mojave privacy protections + +After upgrading to macOS Mojave version, you may see dialogs saying + "AVAP™ Dev Studio 2024 would like to access your + {calendar/contacts/photos}." This is due to the new privacy + protections in Mojave and is not specific to AVAP™ Dev Studio. The same + dialogs may be displayed when running other applications as well. The + dialog is shown once for each type of personal data and it is fine to + choose Don't Allow since AVAP™ Dev Studio does not + need access to those folders. + +## Updates + +AVAP™ Dev Studio ships monthly releases and supports auto-update when a + new release is available. If you're prompted by AVAP™ Dev Studio, + accept the newest update and it will get installed (you won't need + to do anything else to get the latest bits). + +## Preferences menu + +You can configure AVAP™ Dev Studio through settings, color themes, and + custom keybindings available through the{' '} + Code > Preferences menu group. + +## Next steps + +Once you have installed AVAP™ Dev Studio, these topics will help you learn + more about AVAP™ Dev Studio: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation around AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences settings. + +## Common questions + +If you are running macOS Mojave version, you may see dialogs saying + "AVAP™ Dev Studio 2024 would like to access your + {calendar/contacts/photos}." This is due to the new privacy + protections in Mojave discussed above. It is fine to choose{' '} + Don't Allow since AVAP™ Dev Studio does not need + access to those folders. + +If VS Code doesn't update once it restarts, it might be set under + quarantine by macOS. Follow the steps in this issue for resolution. + +Yes, AVAP™ Dev Studio supports macOS Arm64 builds that can run on Macs + with the Apple silicon chipsets. You can install the Universal build, + which includes both Intel and Apple silicon builds, or one of the platform + specific builds. diff --git a/docs/developer.avapframework.com/SETUP_Network.md b/docs/developer.avapframework.com/SETUP_Network.md new file mode 100644 index 0000000..950670e --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_Network.md @@ -0,0 +1,131 @@ +AVAP™ Dev Studio 2024 is built on top of Electron and benefits from all + the networking stack capabilities of Chromium. This also means that AVAP™ + Dev Studio 2024 users get much of the networking support available in + Google Chrome. + +## Common hostnames + +A handful of features within AVAP™ Dev Studio 2024 require network + communication to work, such as the auto-update mechanism, querying and + installing extensions, and telemetry. For these features to work properly + in a proxy environment, you must have the product correctly configured. + +If you are behind a firewall that needs to allow specific domains used by + AVAP™ Dev Studio 2024, here's the list of hostnames you should allow + communication to go through: + +* `update.code.visualstudio.com` - AVAP™ Dev Studio 2024 download and update server +* `code.visualstudio.com` - AVAP™ Dev Studio 2024 documentation +* `go.microsoft.com` - Microsoft link forwarding service +* `vscode.blob.core.windows.net` - AVAP™ Dev Studio 2024 blob storage, used for remote server +* `marketplace.visualstudio.com` - AVAP™ Dev Studio 2024 Marketplace +* `*.gallerycdn.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace +* `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace +* `rink.hockeyapp.net` - Crash reporting service +* `bingsettingssearch.trafficmanager.net` - In-product settings search +* `vscode.search.windows.net` - In-product settings search +* `raw.githubusercontent.com` - GitHub repository raw file access +* `vsmarketplacebadges.dev` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace badge service +* `az764295.vo.msecnd.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN (deprecated) +* `vscode.download.prss.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN +* `download.visualstudio.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download server, provides dependencies for some VS Code extensions (C++, C#) +* `vscode-sync.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service +* `vscode-sync-insiders.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service (Insiders) +* `vscode.dev` - Used when logging in with GitHub or Microsoft for an extension or Settings Sync +* `*.vscode-unpkg.net` - Used when loading web extensions +* `default.exp-tas.com` - - `*.gallery.vsassets.io` {' '} - AVAP™ Dev Studio 2024 Experiment Service, used to provide experimental user experiences + +## Proxy server support + +AVAP™ Dev Studio 2024 has exactly the same proxy server support as Google + Chromium. Here's a snippet from Chromium's documentation: + +```javascript +"The Chromium network stack uses the system network settings so that + users and administrators can control the network settings of all + applications easily. The network settings include: + - proxy settings + - SSL/TLS settings + - certificate revocation check settings + - certificate and private key stores" +``` + +This means that your proxy settings should be picked up automatically. + +Otherwise, you can use the following command-line arguments to control + your proxy settings: + +```javascript +# Disable proxy + + --no-proxy-server + + # Manual proxy address + + --proxy-server==[:][;...] | + [:] | "direct://" + + # Manual PAC address + + --proxy-pac-url= + + # Disable proxy per host + + --proxy-bypass-list=(|)[:][;...] +``` + +To learn more about these command-line arguments, see Chromium Network + Settings. + +Authenticated proxies should work seamlessly within AVAP™ Dev Studio 2024 + with the addition of PR #22369. + +The authentication methods supported are: + +* Basic +* Digest +* NTLM +* Negotiate + +When using AVAP™ Dev Studio 2024 behind an authenticated HTTP proxy, the + following authentication popup should appear: + + + +Note that SOCKS5 proxy authentication support isn't implemented yet; + you can follow the issue in Chromium's issue tracker. + +See Chromium HTTP authentication to read more about HTTP proxy + authentication within AVAP™ Dev Studio 2024. + +Often HTTPS proxies rewrite SSL certificates of the incoming requests. + Chromium was designed to reject responses which are signed by certificates + which it doesn't trust. If you hit any SSL trust issues, there are a + few options available for you: + +* Since Chromium uses the OS's certificate trust infrastructure, the preferred option is to add your proxy's certificate to your OS's trust chain. See the Chromium Root Certificate Policy documentation to learn more. +* If your proxy runs in `localhost` , you can always try the --allow-insecure-localhost command-line flag. +* If all else fails, you can tell AVAP™ Dev Studio 2024 to ignore all certificate errors using the --ignore-certificate-errors command-line flag. Warning: This is dangerous and{' '} not recommended , since it opens the door to security issues. + +Extensions don't benefit yet from the same proxy support that AVAP™ + Dev Studio 2024 supports. You can follow this issue's development in + GitHub. + +Similarly to extensions, a few other AVAP™ Dev Studio 2024 features + don't yet fully support proxy networking, namely the CLI interface. + The CLI interface is what you get when running{' '} + `code --install-extension vscodevim.vim` from a command prompt + or terminal. You can follow this issue's development in GitHub. + +Due to both of these constraints, the `http.proxy` ,{' '} + `http.proxyStrictSSL` and `http.proxyAuthorization` + variables are still part of AVAP™ Dev Studio's settings, yet they are + only respected in these two scenarios. + +Here are some helpful links that might help you troubleshoot networking + issues in AVAP™ Dev Studio 2024: + +* Network Settings +* Debugging problems with the network proxy +* Configuring a SOCKS proxy server in Chrome +* Proxy settings and fallback (Windows) diff --git a/docs/developer.avapframework.com/SETUP_Overview.md b/docs/developer.avapframework.com/SETUP_Overview.md new file mode 100644 index 0000000..0ef9f65 --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_Overview.md @@ -0,0 +1,119 @@ +Getting up and running with AVAP™ Dev Studio 2024 is quick and easy. It is + a small download so you can install in a matter of minutes and give AVAP™ + Dev Studio 2024 a try. + +## Cross platform + +AVAP™ DS is a free code editor, which runs on the macOS, Linux, and + Windows operating systems. + +Follow the platform-specific guides below: + +* macOS +* Linux +* Windows + +AVAP™ Dev Studio 2024 is lightweight and should run on most available + hardware and platform versions. You can review the System Requirements to + check if your computer configuration is supported. + +## Update cadence + +AVAP™ Dev Studio 2024 releases a new version each month with new features + and important bug fixes. Most platforms support auto updating and you will + be prompted to install the new release when it becomes available. You can + also manually check for updates by running{' '} + Help > Check for Updates on Linux and Windows or + running Code > Check for Updates on macOS. + +## Insiders nightly build + +If you'd like to try our nightly builds to see new features early or + verify bug fixes, you can install our Insiders build. The Insiders build + installs side-by-side with the monthly Stable build and you can freely + work with either on the same machine. The Insiders build is the same one + the AVAP™ Dev Studio 2024 development team uses on a daily basis and we + really appreciate people trying out new features and providing feedback. + +## Portable mode + +AVAP™ Dev Studio 2024 supports Portable mode installation. This mode + enables all data created and maintained by VS Code to live near itself, so + it can be moved around across environments, for example, on a USB drive. + See the AVAP™ Dev Studio 2024 Portable Mode documentation for details. + +## Additional components + +AVAP™ Dev Studio 2024 is an editor, first and foremost, and prides itself + on a small footprint. Unlike traditional IDEs that tend to include + everything but the kitchen sink, you can tune your installation to the + development technologies you care about. Be sure to read the Additional + Components topic after reading the platform guides to learn about + customizing your AVAP™ Dev Studio 2024 installation. + +## Extensions + +AVAP™ Dev Studio 2024 extensions let third parties add support for + additional: + +* Languages - C++, C#, Go, Java, Python +* Tools - ESLint, JSHint , PowerShell +* Debuggers - PHP XDebug. +* Keymaps - Vim, Sublime Text, IntelliJ, Emacs, Atom, Brackets, AVAP™ Dev Studio, Eclipse + +Extensions integrate into AVAP™ Dev Studio 2024's UI, commands, and + task running systems so you'll find it easy to work with different + technologies through AVAP™ Dev Studio 2024's shared interface. Check + out the AVAP™ Dev Studio 2024 extension Marketplace to see what's + available. + +## Next steps + +Once you have installed and set up AVAP™ Dev Studio 2024, these topics + will help you learn more about AVAP™ Dev Studio 2024: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio 2024. +* Basic Editing - Learn about the powerful AVAP™ Dev Studio 2024 editor. +* Code Navigation - Move quickly through your source code. +* Debugging - Debug your source code directly in the AVAP™ Dev Studio 2024 editor. +* Proxy Server Support - Configure your proxy settings. + +If you'd like to get something running quickly, try the Node.js + tutorial walkthrough that will have you debugging a Node.js web + application with AVAP™ Dev Studio 2024 in minutes. + +## Common questions + +We have a list of System Requirements. + +AVAP™ Dev Studio 2024 is a small download (< 100 MB) and has a + disk footprint of less than 200 MB, so you can quickly install AVAP™ Dev + Studio 2024 and try it out. + +AVAP™ Dev Studio 2024 doesn't include a traditional{' '} + File > New Project dialog or pre-installed project + templates. You'll need to add additional components and scaffolders + depending on your development interests. With scaffolding tools like + Yeoman and the multitude of modules available through the npm package + manager, you're sure to find appropriate templates and tools to create + your projects. + +On Linux and Windows, choose Help > About. On macOS, + use Code > About AVAP™ Dev Studio 2024. + +AVAP™ Dev Studio 2024 has detected that some installation files have been + modified, perhaps by an extension. Reinstalling AVAP™ Dev Studio 2024 will + replace the affected files. See our FAQ topic for more details. + +If you want to remove all user data after uninstalling AVAP™ Dev Studio + 2024, you can delete the user data folders `Code` and{' '} + `.avapds` This will return you to the state before you + installed AVAP™ Dev Studio 2024. This can also be used to reset all + settings if you don't want to uninstall AVAP™ Dev Studio 2024. + +The folder locations will vary depending on your platform: + +* Windows - Delete `%APPDATA%\Code` and{' '} `%USERPROFILE%\.vscode.` +* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.avapds.` +* Linux - Delete `$HOME/.config/Code` and{' '} `~/.avapds.` diff --git a/docs/developer.avapframework.com/SETUP_RaspberryPi.md b/docs/developer.avapframework.com/SETUP_RaspberryPi.md new file mode 100644 index 0000000..b04e965 --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_RaspberryPi.md @@ -0,0 +1,66 @@ +You can run AVAP™ Dev Studio 2024 on Raspberry Pi devices. + + + +By downloading and using AVAP™ Dev Studio 2024, you agree to the license + terms and privacy statement. + +## Installation + +AVAP™ Dev Studio 2024 is officially distributed via the Raspberry Pi OS + (previously called Raspbian) APT repository, in both 32-bit and + 64-bit variants. + +You can install it by running: + +| sudo apt update | | sudo apt install code | + +### Running AVAP™ Dev Studio 2024 + +After installing the AVAP™ Dev Studio 2024 package, you can run AVAP™ Dev + Studio 2024 by typing `code` in a terminal or launching it via + the Programming menu. + +## Updates + +Your Raspberry Pi should handle updating AVAP™ Dev Studio 2024 in the same + way as other packages on the system: + +| sudo apt update | | sudo apt upgrade code | + +You can always check when a new release is available in our Updates page. + +## System requirements + +AVAP™ Dev Studio 2024 is supported on these Raspberry Pi models running a + 32-bit or 64-bit version of Raspberry Pi OS: + +* Raspberry Pi 3 Model B/B+ +* Raspberry Pi 4 Model B +* Raspberry Pi 400 + +While 1 GB of memory (RAM) meets the minimum system requirements, + users will benefit from installing AVAP™ Dev Studio 2024 on a Raspberry Pi + 4 with more memory. + +First-generation Raspberry Pi modules and Raspberry Pi Zero are not + supported as they only include an ARMv6 CPU. + +### Workaround for poor performance + +AVAP™ Dev Studio 2024 on Raspberry Pi 4 may be slow with the default + setup. A workaround is to disable hardware (GPU) acceleration in + AVAP™ DS 2024: + +The `"disable-hardware-acceleration": true` runtime + argument switch has the effect of passing the `--disable-gpu` {' '} + command-line argument on AVAP™ Dev Studio 2024 startup. + +## Next steps + +Once you have installed AVAP™ Dev Studio 2024, these topics will help you + learn more about it: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio 2024. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio 2024 to your preferences through settings. diff --git a/docs/developer.avapframework.com/SETUP_Uninstall.md b/docs/developer.avapframework.com/SETUP_Uninstall.md new file mode 100644 index 0000000..0d67f51 --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_Uninstall.md @@ -0,0 +1,79 @@ +The steps for uninstalling AVAP™ Dev Studio will depend on your platform + (Windows, macOS, or Linux) and the install option that you used. + For example on Windows, you can use the System or User Windows Installers + or download a `.zip` file and extract the contents anywhere on + your machine. + +In general, you would uninstall AVAP™ Dev Studio as you would any other + desktop application and follow your platform's recommended flow for + uninstalling software. Specific platform guidance is provided below as + well as how to completely clean up any remaining AVAP™ Dev Studio + configuration files. + +### Windows + +If you installed AVAP™ Dev Studio via the Windows Installer, either the + User or System version, use the installer to remove AVAP™ Dev Studio. + +* Start menu Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. Select Uninstall from the actions dropdown on the right side (three vertical dots). Follow the prompts to uninstall AVAP™ Dev Studio. +* Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. +* Select Uninstall from the actions dropdown on the right side (three vertical dots). +* Follow the prompts to uninstall AVAP™ Dev Studio. +* Control Panel Under Programs , select the{' '} Uninstall a program link. Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. Follow the prompts to uninstall AVAP™ Dev Studio. +* Under Programs , select the{' '} Uninstall a program link. +* Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. +* Follow the prompts to uninstall AVAP™ Dev Studio. + +If you installed AVAP™ Dev Studio on Windows by downloading and extracting + one of the .zip files found on the AVAP™ Dev Studio website, you can + uninstall by deleting the folder where you extracted the .zip contents. + +### macOS + +To uninstall AVAP™ Dev Studio on macOS, open Finder and go to + Applications. Right-click on the AVAP™ Dev Studio application and select + Move to Trash. + +### Linux + +To uninstall AVAP™ Dev Studio on Linux, you should use your package + manager's uninstall or remove option. The exact command line will + differ depending on which package manager you used (for example,{' '} + `apt-get` , `rpn` , `dnf` , `yum` + , etc.). + +The names for the AVAP™ Dev Studio packages are: + +* `code` - AVAP™ Dev Studio Stable release +* `code-insiders` - AVAP™ Dev Studio Insiders release + +For example, if you installed AVAP™ Dev Studio via the Debian package + ( `.deb` ) and `apt-get` package manager, you + would run: + +```javascript +sudo apt-get remove code +``` + +where code is the name of the AVAP™ Dev Studio Debian package. + +### Clean uninstall + +If you want to remove all user data after uninstalling AVAP™ Dev Studio + 2024, you can delete the user data folders `Code` and{' '} + `.vscode` . This will return you to the state before you + installed AVAP™ Dev Studio 2024. This can also be used to reset all + settings if you don't want to uninstall AVAP™ Dev Studio 2024. + +The folder locations will vary depending on your platform: + +* Windows -{' '} `Delete %APPDATA%\Code and %USERPROFILE%\.vscode` . +* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.vscode` . +* Linux - Delete `$HOME/.config/Code` and{' '} `~/.vscode` . + +### Next steps + +* Setup overview - General information about AVAP™ Dev Studio 2024 setup and updates. +* Windows setup - Details and common questions about installing AVAP™ Dev Studio 2024 on Windows. +* macOS setup - AVAP™ Dev Studio 2024 is available for both Intel and Apple silicon macOS machines. +* Linux setup - Learn about the different AVAP™ Dev Studio 2024 packages available for Linux. diff --git a/docs/developer.avapframework.com/SETUP_Windows.md b/docs/developer.avapframework.com/SETUP_Windows.md new file mode 100644 index 0000000..7f76c47 --- /dev/null +++ b/docs/developer.avapframework.com/SETUP_Windows.md @@ -0,0 +1,119 @@ +### Installation + +Alternatively, you can also download a Zip archive, extract it and run + Code from there. + +### User setup versus system setup + +AVAP™ Dev Studio 2024 provides both Windows user and{' '} + system level setups. + +The user setup does not require Administrator privileges to run as the + location will be under your user Local AppData ( + `LOCALAPPDATA` ) folder. Since it requires no elevation, the + user setup is able to provide a smoother background update experience. + This is the preferred way to install AVAP™ Dev Studio 2024 on Windows. + +The system setup requires elevation to Administrator privileges to run and + will place the installation under the system's Program Files. The + in-product update flow will also require elevation, making it less + streamlined than the user setup. On the other hand, installing AVAP™ Dev + Studio 2024 using the system setup means that it will be available to all + users in the system. + +See the Download AVAP™ Dev Studio 2024 page for a complete list of + available installation options. + +### Updates + +AVAP™ Dev Studio 2024 ships monthly releases and supports auto-update when + a new release is available. If you're prompted by AVAP™ Dev Studio + 2024, accept the newest update and it will be installed (you won't + need to do anything else to get the latest bits). + +### Windows Subsystem for Linux + +Windows is a popular operating system and it can be a great cross-platform + development environment. This section describes cross-platform features + such as the Windows Subsystem for Linux (WSL) and the new Windows + Terminal. + +Make sure you are on a recent Windows 10 build. Check{' '} + Settings > Windows Update to see if you are + up-to-date. + +With WSL, you can install and run Linux distributions on Windows. This + enables you to develop and test your source code on Linux while still + working locally on your Windows machine. + +When coupled with the WSL extension, you get full AVAP™ DS editing and + debugging support while running in the context of WSL. + +See the Developing in WSL documentation to learn more or try the Working + in WSL introductory tutorial. + +Available from the Microsoft Store, the Windows Terminal (Preview) + lets you easily open PowerShell, Command Prompt, and WSL terminals in a + multiple tab shell. + +### Next steps + +Once you have installed AVAP™ Dev Studio, these topics will help you learn + more about AVAP™ Dev Studio: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. +* Tips and Tricks - Lets you jump right in and learn how to be productive with AVAP™ Dev Studio. + +### Common questions + +AVAP™ Dev Studio uses Inno Setup to create its setup package for Windows. + Thus, all the Inno Setup command-line switches are available for use. + +Additionally, you can prevent the Setup from launching AVAP™ Dev Studio + after completion with `/mergetasks=!runcode` . + +On certain devices, editor scrolling is not smooth but laggy for an + unpleasant experience. If you notice this issue, make sure you install the + Windows 10 October 2018 update where this issue is fixed. + +Try using the zip file instead of the installer. To use this, unzip AVAP™ + Dev Studio in your `AppData\Local\Programs` folder. + +I installed AVAP™ Dev Studio on my Windows 8 machine. Why are some icons + not appearing in the workbench and editor? + +AVAP™ Dev Studio uses SVG icons and we have found instances where the .SVG + file extension is associated with something other than{' '} + `image/svg+xml` . We're considering options to fix it, but + for now here's a workaround: + +Using the Command Prompt: + +Using the Registry Editor (regedit): + +With the introduction of process sandboxing (discussed in this blog + post) running as administrator is currently unsupported when AppLocker + is configured due to a limitation of the runtime sandbox. If your work + requires that you run AVAP™ Dev Studio from an elevated terminal, you can + launch `code` with{' '} + `--no-sandbox --disable-gpu-sandbox` as a workaround. + +Subscribe to issue #122951 to receive updates. + +Beginning with version `1.78.1` , AVAP™ Dev Studio on Windows + will only allow to access UNC paths (these begin with a leading{' '} + `\\` ) that were either approved by the user on startup or + where the host name is configured to be allowed via the new{' '} + `security.allowedUNCHosts setting` . + +If you rely on using UNC paths in AVAP™ Dev Studio, you can either + +* configure the host to be allowed via the{' '} `security.allowedUNCHosts` setting (for example add{' '} `server-a` when you open a path such as{' '} `\\server-a\path` ) +* map the UNC path as network drive and use the drive letter instead of the UNC path (documentation) +* define a global environment variable{' '} `NODE_UNC_HOST_ALLOWLIST` with the backslash-separated list of hostnames to allow, for example: `server-a\server-b` to allow the hosts `server-a` and `server-b` . + +This change was done to improve the security when using AVAP™ Dev Studio + with UNC paths. Please refer to the associated security advisory for more + information. diff --git a/docs/developer.avapframework.com/SOURCE_CONTROL_CollaborateOnGitHub.md b/docs/developer.avapframework.com/SOURCE_CONTROL_CollaborateOnGitHub.md new file mode 100644 index 0000000..adfc909 --- /dev/null +++ b/docs/developer.avapframework.com/SOURCE_CONTROL_CollaborateOnGitHub.md @@ -0,0 +1,371 @@ +GitHub is a cloud-based service for storing and sharing source code. Using + GitHub with AVAP™ Dev Studio lets you share your source code and + collaborate with others right within your editor. There are many ways to + interact with GitHub, for example, via their website at{' '} + https://github.com or the [Git] + command-line interface (CLI), but in AVAP™ Dev Studio, the rich + GitHub integration is provided by the GitHub Pull Requests and Issues + extension. + +[Install the GitHub Pull Requests and Issues extension] + +To get started with the GitHub in AVAP TM Dev Studio, you'll + need to install Git, create a GitHub account and install the GitHub Pull + Requests and Issues extension. In this topic, we'll demonstrate how + you can use some of your favorite parts of GitHub without leaving AVAP™ + Dev Studio. + +If you're new to source control or want to learn more about AVAP™ Dev + Studio's basic Git support, you can start with the Source Control + topic. + +## Getting started with GitHub Pull Requests and Issues + +Once you've installed the GitHub Pull Requests and Issues extension, + you'll need to sign in. Follow the prompts to authenticate with GitHub + in the browser and return to AVAP™ Dev Studio. + +If you are not redirected to AVAP TM Dev Studio, you can add + your authorization token manually. In the browser window, you will receive + your authorization token. Copy the token, and switch back to AVAP + TM Dev Studio. Select{' '} + Signing in to github.com... in the Status bar, paste the + token, and hit Enter. + +## Setting up a repository + +### Cloning a repository + +You can search for and clone a repository from GitHub using the{' '} + Git: Clone command in the Command Palette + (Ctrl+Shift+P) or by using the Clone Repository {' '} + button in the Source Control view (available when you have no folder + open). + +From the GitHub repository dropdown you can filter and pick the repository + you want to clone locally. + +### Authenticating with an existing repository + +Enabling authentication through GitHub happens when you run any Git action + in AVAP TM Dev Studio that requires GitHub authentication, such + as pushing to a repository that you're a member of or cloning a + private repository. You don't need to have any special extensions + installed for authentication; it is built into AVAP TM Dev + Studio so that you can efficiently manage your repository. + +When you do something that requires GitHub authentication, you'll see + a prompt to sign in: + +Follow the steps to sign into GitHub and return to AVAP TM Dev + Studio. If authenticating with an existing repository doesn't work + automatically, you may need to manually provide a personal access token. + See About authentication to GitHub for more information and details about + each option.{' '} + +Note that there are several ways to authenticate to GitHub, including + using your username and password with two-factor authentication + (2FA), a personal access token, or an SSH key. See About + authentication to GitHub for more information and details about each + option. + +## Editor integration + +### Hovers + +When you have a repository open and a user is @-mentioned, you can hover + over that username and see a GitHub-style hover. + +There is a similar hover for #-mentioned issue numbers, full GitHub issue + URLs, and repository specified issues. + +### Suggestions + +User suggestions are triggered by the "@" character and issue + suggestions are triggered by the "#" character. Suggestions are + available in the editor and in the Source Control {' '} + view's input box. + +The issues that appear in the suggestion can be configured with the{' '} + GitHub Issues: Queries (githubIssues.queries) + setting. The queries use the GitHub search syntax. + +You can also configure which files show these suggestions using the + settings GitHub Issues: Ignore Completion Trigger ( + `githubIssues.ignoreCompletionTrigger` ) and{' '} + GitHub Issues: Ignore User Completion Trigger ( + `githubIssues.ignoreUserCompletionTrigger` ). These settings + take an array of language identifiers to specify the file types. + +```javascript +// Languages that the '#' character should not be used to trigger issue + completion suggestions. + + "githubIssues.ignoreCompletionTrigger": [` `"python" + ] +``` + +## Pull requests + +From the Pull Requests view you can view, manage, and + create pull requests. + +The queries used to display pull requests can be configured with the{' '} + GitHub Pull Requests: Queries ( + `githubPullRequests.queries` ) setting and use the GitHub + search syntax. + +```javascript +"githubPullRequests.queries": [` `{ + ` `"label": "Assigned To Me", + ` `"query": "is:open assignee:${user}" + ` `}, +``` + +### Creating Pull Requests + +Once you have committed changes to your fork or branch, you can use the{' '} + GitHub Pull Requests: Create Pull Request command or the{' '} + Create Pull Request button in the{' '} + Pull Requests view to create a pull request. + +A new Create view will be displayed where you can select + the base repository and base branch you'd like your pull request to + target as well as fill in the title and description. If your repository + has a pull request template, this will automatically be used for the + description. + +Use the buttons in the action bar at the top to add{' '} + Assignees , Reviewers ,{' '} + Labels and a Milestone . + +The Create button menu allows you to select alternative + create options, such as Create Draft or enable an{' '} + Auto-Merge method. + +Once you select Create , if you have not already pushed + your branch to a GitHub remote, the extension will ask if you'd like + to publish the branch and provides a dropdown to select the specific + remote. + +The Create Pull Request view now enters{' '} + Review Mode , where you can review the details of the PR, + add comments, and merge the PR once it's ready. After the PR is + merged, you'll have the option to delete both the remote and local + branch. + +### Reviewing + +Pull requests can be reviewed from the Pull Requests {' '} + view. You can assign reviewers and labels, add comments, approve, close, + and merge all from the pull request Description . + +From the Description page, you can also easily checkout + the pull request locally using the Checkout button. This + will switch AVAP™ Dev Studio to open the fork and branch of the pull + request (visible in the Status bar) in Review Mode and add a new{' '} + Changes in Pull Request view from which you can view + diffs of the current changes as well as all commits and the changes within + these commits. Files that have been commented on are decorated with a + diamond icon. To view the file on disk, you can use the{' '} + Open File inline action. + +The diff editors from this view use the local file, so file navigation, + IntelliSense, and editing work as normal. You can add comments within the + editor on these diffs. Both adding single comments and creating a whole + review is supported. + +When you are done reviewing the pull request changes you can merge the PR + or select Exit Review Mode to go back to the previous + branch you were working on. + +## Issues + +### Creating issues + +Issues can be created from the + button in the{' '} + Issues view and by using the{' '} + GitHub Issues: Create Issue from Selection and{' '} + GitHub Issues: Create Issue from Clipboard commands. They + can also be created using a Code Action for "TODO" comments. + When creating issues, you can take the default description or select the{' '} + Edit Description pencil icon in the upper right to bring + up an editor for the issue body. + +You can configure the trigger for the Code Action using the{' '} + GitHub Issues: Create Issue Triggers {' '} + (githubIssues.createIssueTriggers) setting. + +The default issue triggers are: + +```javascript +"githubIssues.createIssueTriggers": [` `"TODO", + ` `"todo", + ` `"BUG", + ` `"FIXME", + ` `"ISSUE", + ` `"HACK" + ] +``` + +### Working on issues + +From the Issues view, you can see your issues and work on + them. + +By default, when you start working on an issue ( + Start Working on Issue context menu item), a branch + will be created for you, as shown in the Status bar in the image below. + +The Status bar also shows the active issue and if you select that item, a + list of issue actions are available such as opening the issue on the + GitHub website or creating a pull request. + +You can configure the name of the branch using the{' '} + GitHub Issues: Issue Branch Title ( + `githubIssues.issueBranchTitle` ) setting. If your workflow + doesn't involve creating a branch, or if you want to be prompted to + enter a branch name every time, you can skip that step by turning off the{' '} + GitHub Issues: Use Branch For Issues ( + `githubIssues.useBranchForIssues` ) setting. + +Once you are done working on the issue and want to commit a change, the + commit message input box in the Source Control view will + be populated with a message, which can be configured with{' '} + GitHub Issues: Working Issue Format SCM ( + `githubIssues.workingIssueFormatScm` ). + +## GitHub Repositories extension + +The GitHub Repositories extension lets you quickly browse, search, edit, + and commit to any remote GitHub repository directly from within AVAP + TM Dev Studio, without needing to clone the repository locally. + This can be fast and convenient for many scenarios, where you just need to + review source code or make a small change to a file or asset. + +### Opening a repository + +Once you have installed the GitHub Repositories extension, you can open a + repository with the{' '} + GitHub Repositories: Open Repository... command from the + Command Palette (Ctrl+Shift+P) or by clicking the Remote indicator + in the lower left of the Status bar. + +When you run the Open Repository command, you then choose + whether to open a repository from GitHub, open a Pull Request from GitHub, + or reopen a repository that you had previously connected to. + +If you haven't logged into GitHub from AVAP TM Dev Studio + before, you'll be prompted to authenticate with your GitHub account. + +You can provide the repository URL directly or search GitHub for the + repository you want by typing in the text box. + +Once you have selected a repository or Pull Request, the AVAP™ Dev Studio + window will reload and you will see the repository contents in the File + Explorer. You can then open files (with full syntax highlighting and + bracket matching), make edits, and commit changes, just like you would + working on a local clone of a repository. + +One difference from working with a local repository is that when you + commit a change with the GitHub Repository extension, the changes are + pushed directly to the remote repository, similar to if you were working + in the GitHub web interface. + +Another feature of the GitHub Repositories extension is that every time + you open a repository or branch, you get the up-to-date sources available + from GitHub. You don't need to remember to pull to refresh as you + would with a local repository. + +The GitHub Repositories extension supports viewing and even committing + LFS-tracked files without needing to install Git LFS (Large File + System) locally. Add the file types you want tracked with LFS to a + .gitattributes file, then commit your changes directly to GitHub using the + Source Control view. + +### Switching branches + +You can easily switch between branches by clicking on the branch indicator + in the Status bar. One great feature of the GitHub Repositories extension + is that you can switch branches without needing to stash uncommitted + changes. The extension remembers your changes and reapplies them when you + switch branches. + +### Remote Explorer + +You can quickly reopen remote repositories with the Remote Explorer + available on the Activity bar. This view shows you the previously opened + repositories and branches. + +### Create Pull Requests + +If your workflow uses Pull Requests, rather than direct commits to a + repository, you can create a new PR from the Source Control view. + You'll be prompted to provide a title and create a new branch. + +Once you have created a Pull Request, you can use the GitHub Pull Request + and Issues extension to review, edit, and merge your PR as described + earlier in this topic. + +### Virtual file system + +Without a repository's files on your local machine, the GitHub + Repositories extension creates a virtual file system in memory so you can + view file contents and make edits. Using a virtual file system means that + some operations and extensions which assume local files are not enabled or + have limited functionality. Features such as tasks, debugging, and + integrated terminals are not enabled and you can learn about the level of + support for the virtual file system via the{' '} + features are not available link in the Remote indicator + hover. + +Extension authors can learn more about running in a virtual file system + and workspace in the Virtual Workspaces extension author's guide. + +### Continue Working On... + +Sometimes you'll want to switch to working on a repository in a + development environment with support for a local file system and full + language and development tooling. The GitHub Repositories extension makes + it easy for you to: + +* Create a GitHub codespace (if you have the GitHub Codespaces extension). +* Clone the repository locally. +* Clone the repository into a Docker container (if you have Docker and the Microsoft Docker extension installed). + +To switch development environments, use the{' '} + Continue Working On... command, available from the + Command Palette ( `Ctrl+Shift+P` ) or by clicking on the + Remote indicator in the Status bar. + +If you are using the browser-based editor, the{' '} + "Continue Working On..." command has the + options to open the repository locally or within a cloud-hosted + environment in GitHub Codespaces. + +The first time that you use Continue Working On with + uncommitted changes, you will have the option to bring your edits to your + selected development environment using Cloud Changes , + which uses a AVAP™ Dev Studio service to store your pending changes. + +These changes are deleted from our service once they are applied to your + target development environment. If you choose to continue without your + uncommitted changes, you can always change this preference later by + configuring the setting " + `workbench.cloudChanges.continueOn` ": " + `prompt` ". + +## GitHub Copilot + +In AVAP TM Dev Studio, you can enhance your coding with + artificial intelligence (AI), such as suggestions for lines of + code or entire functions, fast documentation creation, and help creating + code-related artifacts like tests. + +GitHub Copilot is an AI-powered code completion tool that helps you write + code faster and smarter. You can use the GitHub Copilot extension in AVAP + TM Dev Studio to generate code, or to learn from the code it + generates. + +You can learn more about how to get started with Copilot in the Copilot + documentation. diff --git a/docs/developer.avapframework.com/SOURCE_CONTROL_FAQ.md b/docs/developer.avapframework.com/SOURCE_CONTROL_FAQ.md new file mode 100644 index 0000000..dfb1b6d --- /dev/null +++ b/docs/developer.avapframework.com/SOURCE_CONTROL_FAQ.md @@ -0,0 +1,153 @@ +This topic answers frequently asked questions about using Git source + control and GitHub in AVAP TM Dev Studio. + +## Git + +### How to revert or undo a Git commit? + +Revert your last commit with the Git: Undo Last Commit {' '} + command. This will reset your branch to the state right before you did the + commit, including all changes. The command is also available as menu in{' '} + More Actions ... under Commit on the top + of the Source Control view. + +### How to rename a local branch? + +The Git: Rename Branch… command will prompt you for the + new name. + +### How to I undo a git add before committing? + +Added files listed in the Staged Changes can be unstaged + with the - icon or by drag-and-drop. + +### How to I edit the most recent commit message? + +To update the commit message for the last local commit use the{' '} + Git: Commit Staged (Amend) command. It will open + an editor to edit and save the last message. Make sure that no other + changes are staged, as they would be included with the commit. + +### I initialized my repo but the actions in the ... menu are all grayed out + +To push, pull, and sync you need to have a Git origin set + up. You can get the required URL from the repository host. Once you have + that URL, you need to add it to the Git settings by running a couple of + command-line actions. For example: + +```javascript +\> git remote add origin https://github.com//.git + + \> git push -u origin main +``` + +### My team is using Team Foundation Version Control (TFVC) instead of + Git. What should I do? + +Use the Azure Repos extension and this will light up TFVC support. + +### Why do the Pull, Push and Sync actions never finish? + +This usually means there is no credential management configured in Git and + you're not getting credential prompts for some reason. + +You can always set up a credential helper in order to pull and push from a + remote server without having AVAP TM Dev Studio prompt for your + credentials each time. + +### How can I sign in to Git with my Azure DevOps organization that requires + multi-factor authentication? + +Git Credential Manager (GCM) is the recommended Git credential + helper for Windows, macOS, and Linux. If you're running Git for + Windows, GCM has already been installed and configured for you. If + you're running on macOS or Linux, the GCM README has setup + instructions. + +### I have GitHub Desktop installed on my computer but AVAP Dev Studio ignores + it + +AVAP™ Dev Studio only supports the official Git distribution for its Git + integration. + +### I keep getting Git authentication dialogs whenever AVAP Dev Studio is + running + +AVAP TM Dev Studio automatically fetches changes from the server + in order to present you with a summary of incoming changes. The Git + authentication dialog is independent from AVAP TM Dev Studio + itself and is a part of your current Git credential helper. + +One way to avoid these prompts is to set up a credential helper that + remembers your credentials. + +Another option is to disable the auto fetch feature by changing the + following setting: " `git.autofetch":` {' '} + `false` . + +### Why is AVAP Dev Studio warning me that the git repository is potentially + unsafe? + +AVAP™ Dev Studio uses `git.exe` for executing all Git + operations. Starting with Git 2.35.2, users are prevented from running Git + operations in a repository that is in a folder that owned by a user other + than the current user as the repository is deemed to be potentially + unsafe. + +If you try to open such a repository, AVAP TM Dev Studio will + show a welcome view in the Source Control view or an error notification. + Both the welcome view and the notification contain the{' '} + Manage Unsafe Repositories command that lets you review + the list of potentially unsafe repositories, mark them as safe, and open + them. The Manage Unsafe Repositories command is also + available in the Command Palette ( `Ctrl+Shift+P` ). + Marking a repository as safe will add the repository location to the + safe.directory git configuration. + +On Windows, a common scenario where this can occur is when a repository is + cloned using an application (for example, Windows Terminal or AVAP + TM Dev Studio) that runs "as administrator", but + the repository is opened using another application or instance (for + example, AVAP TM Dev Studio) that does not run "as + administrator". + +### Why isn't AVAP™ Dev Studio discovering Git repositories in parent + folders of workspaces or open files? + +AVAP TM Dev Studio uses + `git rev-parse --show-toplevel` to determine the root of a Git + repository. In most cases, the root of the Git repository is inside the + workspace, but there are scenarios where the root of the Git repository is + in the parent folders of the workspace or the open file(s). While + opening Git repositories in parent folders of workspaces or open files is + a great feature for advanced users, it can be confusing for new users. We + have seen cases where this confusion resulted in discarding changes from + these Git repositories causing data loss. + +To avoid confusion, and to reduce the risk of data loss, AVAP TM {' '} + Dev Studio will display a notification and a new welcome view in the + Source Control view, and will not automatically open Git repositories from + the parent folders of workspaces and open files. + +You can control how Git repositories from parent folders are handled using + the `git.openRepositoryInParentFolders` setting. If you would + like to restore the old behavior, set the{' '} + `git.openRepositoryInParentFolders` setting to{' '} + `always` . + +### Can I use SSH Git authentication with AVAP™ Dev Studio? + +Yes, though AVAP TM Dev Studio works most easily with SSH keys + without a passphrase. If you have an SSH key with a passphrase, you'll + need to launch AVAP TM Dev Studio from a Git Bash prompt to + inherit its SSH environment. + +## GitHub + +### Is GitHub Enterprise supported? + +AVAP TM Dev Studio has official support for authentication with + GitHub Enterprise Servers. Open a local checkout of a GHES repository and + you will be prompted to sign in with your GitHub Enterprise Server + account. diff --git a/docs/developer.avapframework.com/SOURCE_CONTROL_IntroductionToGit.md b/docs/developer.avapframework.com/SOURCE_CONTROL_IntroductionToGit.md new file mode 100644 index 0000000..7c20403 --- /dev/null +++ b/docs/developer.avapframework.com/SOURCE_CONTROL_IntroductionToGit.md @@ -0,0 +1,213 @@ +Want to easily manage your source code and collaborate with others? Git + and GitHub are the tools you need! And with AVAP TM Dev Studio, + you can set up and use them in a snap. Even if you're a beginner, AVAP + TM Dev Studio's user-friendly interface guides you through + common Git actions like pushing and pulling code, creating and merging + branches, and committing code changes. And if you're a pro, you'll + love the ability to perform Git actions directly within the editor, saving + you time and effort compared to using the Git command line. Plus, the + seamless workflow between AVAP TM Dev Studio and Git means you + can stay in your editor and get more done. + +## Set up Git in AVAP™ Dev Studio + +To use Git and GitHub in AVAP TM Dev Studio, first make sure you + have Git installed on your computer. If Git is missing, the{' '} + Source Control view shows instructions on how to install + it. Make sure to restart AVAP TM Dev Studio afterwards. + +Additionally you can sign into AVAP TM Dev Studio with your + GitHub account in the Accounts menu in the lower right of + the Activity bar to enables additional features like Settings Sync, but + also cloning and publishing repositories from GitHub. + +## Open a Git repository + +AVAP TM Dev Studio provides several ways to get started in a Git + repository, from local to remote cloud-powered environments like GitHub + Codespaces. + +### Clone a repository locally + +To clone a repository from GitHub, execute the Git: Clone {' '} + command or select the Clone Repository button in the{' '} + Source Control view. If you clone from GitHub, AVAP + TM Dev Studio will prompt you to authenticate with GitHub. This + allows you to search all available repositories and clone private + repositories. For other Git providers, enter the repository URL and select{' '} + Clone and pick a folder. AVAP TM Dev Studio + opens the folder once the repository is cloned on your local machine. + +### Initialize a repository in a local folder + +To initialize a new local repository, pick an existing or new folder on + your computer and open it in AVAP TM Dev Studio. In the{' '} + Source Control view, select the{' '} + Initialize Repository button. This creates a new Git + repository in the current folder, allowing you to start tracking code + changes. + +Once you have a local Git repository set up, you can publish it to GitHub. + This will create a new repository on your GitHub account, and push your + local code to the remote repository. Having your source code on a remote + repository is a great way to back up your code, collaborate with others, + and automate your workflow with GitHub Actions. + +Use the Publish to GitHub command button in the{' '} + Source Control view. You can then choose a name and + description for the repository, and whether to make it public or private. + Once the repository has been created, AVAP TM Dev Studio will + push your local code to the remote repository. Your code is now backed up + on GitHub, and you can start collaborating with others with commits and + pull requests. + +### Open a GitHub repository in a codespace + +GitHub Codespaces let you open a GitHub repository in a full configured + cloud-based development environment, allowing you to develop in a browser + without having to install any software on your local computer. GitHub + Codespaces allows free usage for individuals, which makes it easy to get + started working on open source projects. + +Install the GitHub Codespaces extension into AVAP TM Dev Studio + and sign in with GitHub. Run the{' '} + Codespaces: Create New Codespace command and pick the + repository and branch you want to open. The new codespace will open in a + new window. + +Alternatively, you can also start with a template from the GitHub's + Codespaces site. If you already have a codespace open in your browser, you + can open it in your AVAP TM Dev Studio Desktop by running the{' '} + + Codespaces: Open in AVAP TM Dev Studio Desktop + {' '} + command. You can learn more about GitHub Codespaces, including + customization such as forwarding ports, in the Developing in a codespace + documentation. + +### Open a GitHub repository remotely + +AVAP TM Dev Studio's remote repository support allows you to + browse and edit a GitHub repository without cloning it to your local + computer. This is useful for quickly making changes to a remote repository + without having to clone the entire codebase to your machine. + +First install the GitHub Repositories extension. Run the command{' '} + Remote Repositories: Open Remote Repository... or use the{' '} + Open Remote Repository button the Explorer view. Search + and select the GitHub repository that you want to open. + +## Staging and committing code changes + +Once you have a Git repository set up, you can start tracking code changes + by staging and committing your newly created and edited code. + +To stage a file, select the + (plus) icon next to + the file in the Source Control view. This will add the + file to the Staged Changes section, indicating that it + will be included in the next commit. Staged changes can also be discarded + by selecting the − (minus) icon next to the + file. + +To commit your staged changes, type a commit message in the upper text box + and select the Commit button. This saves your changes to + the local Git repository, allowing you to revert to previous versions of + your code if needed. You can navigate through and review all local file + changes and commits in the Timeline view available in the + bottom of the Explorer. + +## Pushing and pulling remote changes + +Once you have made commits to your local Git repository, you can push them + to the remote repository. The Sync Changes button + indicates how many commits are going to be pushed and pulled. Selecting + the Sync Changes button downloads (pull) any new + remote commits and uploads (push) new local commits to the remote + repository. + +Push and pull can also be performed individually by using their respective + commands. + +## Using branches + +In Git, branches allow you to work on multiple versions of your codebase + simultaneously. This is useful for experimenting with new features or + making large code changes without affecting the main codebase. + +The branch indicator in the Status bar shows the current branch and lets + you switch to new and existing branches. To create a new branch, select + the branch indicator and choose to create it from the current branch or + another local one. Type a name for the new branch, and confirm. AVAP + TM Dev Studio creates a new branch and switches to it, allowing + you to make changes to your code without affecting the main branch. + +To push the branch to the remote repository, select{' '} + Publish Branch in the Source Control {' '} + view. This will create a new branch on the remote repository, allowing you + to collaborate with others in that branch. + +### Creating and reviewing GitHub pull requests + +In Git and GitHub, pull requests (PRs) are a way for collaborators + to review and merge code changes from separate branches into the main + branch. This allows teams to review and approve code changes before they + are incorporated into the main codebase, ensuring that only high-quality + changes are merged. + +To use pull requests in AVAP TM Dev Studio, you need to install + the GitHub Pull Requests and Issues extension. This extension adds PR and + issue tracking functionality to AVAP TM Dev Studio, allowing you + to create, review, and merge PRs from within the editor. + +To create a PR, make sure you are on a separate branch from the main + branch, and push your code changes to the remote repository. In the{' '} + Source Control view, select the{' '} + Create Pull Request button. This will open the PR + creation form, where you can enter a title and description for the PR, and + choose which branch to merge the changes into. Select{' '} + Create to create the PR. + +To review a PR, select the Review Pull Request button in + the Source Control view, and select the PR you want to + review. This will open the PR in a new editor window, where you can review + the code changes and leave comments. Once you are satisfied with the code + changes, you can select the Merge button to merge the PR + into the targeted branch. + +Learn more about pull requests in AVAP TM Dev Studio's + GitHub documentation + +## Using Git in the built-in terminal + +As all Git state is kept in the local repository, you can easily switch + between AVAP TM Dev Studio's UI, the built-in + terminal/docs/terminal/basics, or external tools like GitHub Desktop. You + can also set up AVAP TM Dev Studio as your default Git editor, + allowing you to use AVAP TM Dev Studio to edit commit messages + and other Git-related files. + +### Git Bash on Windows + +Git Bash is a popular shell environment for Windows that provides a + Unix-like command-line interface for working with Git and other + command-line tools. AVAP TM Dev Studio's integrated terminal + supports Git Bash as a shell, allowing you to seamlessly integrate Git + Bash into your development workflow. Installing Git on your Windows + machine will also install Git Bash, if it wasn't deselected during the + installation steps. + +Start by opening View > Terminal {' '} + (Ctrl+`). Click on the dropdown arrow next to the + icon in the + terminal panel to pick a new shell to open. If Git Bash is installed, it + will be shown in the list. You can toggle between different terminals and + shells in the Terminal sidebar. With Git Bash configured in AVAP + TM Dev Studio, you can now use all of your favorite Git + commands directly from the terminal in your code editor. + +If you want to set Git Bash as your default shell, open the Terminal + dropdown (next to the + icon) and select{' '} + Select Default Profile . This will open a list of + available shells, including Git Bash. Selecting Git Bash will set it as + your default shell, and all future terminals will be opened with Git Bash. + More advanced tips are available in the terminal + documentation](/docs/terminal/basics). diff --git a/docs/developer.avapframework.com/SOURCE_CONTROL_Overview.md b/docs/developer.avapframework.com/SOURCE_CONTROL_Overview.md new file mode 100644 index 0000000..dc88791 --- /dev/null +++ b/docs/developer.avapframework.com/SOURCE_CONTROL_Overview.md @@ -0,0 +1,345 @@ +AVAP TM Dev Studio has integrated source control management + (SCM) and includes Git support out-of-the-box. Many other source + control providers are available through extensions on the AVAP + TM Dev Studio Marketplace. + +## Working in a Git repository + +The Source Control icon in the Activity Bar on the left will always + indicate an overview of how many changes you currently + have in your repository. Selecting the icon will show you the details of + your current repository changes: CHANGES ,{' '} + STAGED CHANGES and MERGE CHANGES . + +Clicking each item will show you in detail{' '} + the textual changes within each file . Note that for + unstaged changes, the editor on the right still lets you edit the file: + feel free to use it! + +You can also find indicators of the{' '} + status of your repository in the bottom-left corner of + AVAP TM Dev Studio: the current branch ,{' '} + dirty indicators , and the number of{' '} + incoming and outgoing commits of the current branch. You + can checkout any branch in your repository by clicking + that status indicator and selecting the Git reference from the list. + +## Commit + +Staging (git add) and unstaging {' '} + (git reset) can be done via contextual actions in the files or by + drag-and-drop. + +Configure your Git username and email. When you commit, + be aware that if your username and/or email is not set in your Git + configuration, Git will fall back to using information from your local + machine. You can find the details in Git commit information. + +You can type a commit message above the changes and press{' '} + `Ctrl+Enter` (macOS: ⌘ `+Enter` ) to commit + them. If there are any staged changes, only those changes will be + committed. Otherwise, you'll get a prompt asking you to select what + changes you'd like to commit and get the option to change your commit + settings. + +We've found this to be a great workflow. For example, in the earlier + screenshot, only the staged changes to `overview.png` will be + included in the commit. Later staging and commit actions could include the + changes to `versioncontrol.md` and the two other{' '} + `.png` images as a separate commit. + +More specific Commit actions can be found in the{' '} + Views and More Actions ... menu on the top of the Source + Control view. + +## Cloning a repository + +If you haven't opened a folder yet, the Source Control view will give + you the options to Open Folder from your local machine or{' '} + Clone Repository . + +If you select Clone Repository , you will be asked for the + URL of the remote repository (for example on GitHub) and the + parent directory under which to put the local repository. + +For a GitHub repository, you would find the URL from the GitHub{' '} + Code dialog. + +You would then paste that URL into the Git: Clone prompt. + +You'll also see the option to Clone from GitHub . Once + you authenticate with your GitHub account in AVAP TM Dev + Studioe, you'll be able to search through repositories by name, and + select any repo to clone it. You can also start the flow to clone a Git + repository with the Git: Clone command in the{' '} + Command Palette (Ctrl+Shift+P). To see a + step-by-step walkthrough, check out our Clone repos from AVAP TM {' '} + Dev Studio video. + +## Branches and Tags + +You can create and checkout branches directly within AVAP TM Dev + Studio through the Git: Create Branch and{' '} + Git: Checkout to commands in the{' '} + Command Palette ( `Ctrl+Shift+P` ). + +If you run Git: Checkout to , you will see a dropdown list + containing all of the branches or tags in the current repository. It will + also give you the option to create a new branch if you decide that's a + better option, or checkout a branch in detached mode. + +The Git: Create Branch command lets you quickly create a + new branch. Just provide the name of your new branch and AVAP TM {' '} + Dev Studio will create the branch and switch to it. If you choose to{' '} + Create new branch from... , you'll get an extra prompt + that allows you to specify which commit the new branch should be pointing + to. + +## Remotes + +Given that your repository is connected to some remote and that your + checked out branch has an upstream link to a branch in that remote, AVAP + TM Dev Studio offers you useful actions to{' '} + push , pull , and sync {' '} + that branch (the latter will run a pull command + followed by a push command). You can find these + actions in the Views and More Actions ... menu, along + with the option to add or remove a remote . + +AVAP TM Dev Studio is able to periodically fetch changes from + your remotes. This enables AVAP TM Dev Studio to show how many + changes your local repository is ahead or behind the remote. This feature + is disabled by default and you can use the git.autofetch + setting(/docs/getstarted/settings) to enable it. + +## Git Status Bar actions + +There is a Synchronize Changes action in the Status Bar, + next to the branch indicator, when the current checked out branch has an + upstream branch configured. Synchronize Changes will pull + remote changes down to your local repository and then push local commits + to the upstream branch. + +If there is no upstream branch configured and the Git repository has + remotes set up, the Publish action is enabled. This will + let you publish the current branch to a remote. + +## Gutter indicators + +If you open a folder that is a Git repository and begin making changes, + AVAP TM Dev Studio will add useful annotations to the gutter and + to the overview ruler. + +* A red triangle indicates where lines have been deleted +* A green bar indicates new added lines +* A blue bar indicates modified lines + +## Merge conflicts + +Merge conflicts are recognized by AVAP TM Dev Studio. + Differences are highlighted and there are inline actions to accept either + one or both changes. Once the conflicts are resolved, stage the + conflicting file so you can commit those changes. + +## 3-way merge editor + +To help you resolve merge conflicts, AVAP TM Dev Studio provides + a 3-way merge editor where you can interactively accept incoming and + current changes and view and edit the resulting merged file. The 3-way + merge editor is opened by selecting the{' '} + Resolve in Merge Editor button in the bottom right corner + of a file with Git merge conflicts. + +The 3-way merge editor displays separate views for{' '} + Incoming changes (on the left),{' '} + Current changes (on the right), and the{' '} + Result of the merge (at the bottom). Conflicts + are highlighted and can be resolved by using the CodeLens buttons. + +### Resolving conflicts + +The 3-way merge editor allows you to resolve conflicts by accepting either + one or both changes. You can also manually edit the result of the merge. + +For some conflicts, the merge editor shows an{' '} + Accept Combination button. Accepting the combination + resolves the current conflict by smartly merging both changes. This is + especially useful for changes in the same line that don't touch the + same characters. + +Use the Ignore buttons to accept neither the incoming nor + current change, but mark the conflict as resolved. This resets the + conflicting area to the state before any changes were made. + +### Completing the merge + +You can use the conflict counter in the right of the result editor to keep + track of how many unresolved conflicts are remaining. Clicking on the + counter jumps to the next unresolved conflict. Once all conflicts are + resolved, you can complete the merge by selecting{' '} + Complete Merge in the bottom right corner. This stages + the file and closes the merge editor. + +### Alternative layouts and more + +Selecting the three dots ( ··· ) in the top right + corner of the merge editor opens a context menu with additional options. + You can switch to a vertical layout and display the base view, which shows + the state of the file before any changes were made. + +The three dots next to Incoming , Current + , and Result offer options for each view, such as showing + a side-by-side diff against base, accepting all changes, or resetting the + result. + +### Understanding conflicts + +If you want to learn more about the details of how 3-way merge editors + work, we can recommend the following video: + +## Viewing diffs + +Our Git tooling supports viewing of diffs within AVAP TM Dev + Studio. + +### Accessible Diff Viewer + +There is an Accessible Diff Viewer in the Diff editor that presents + changes in a unified patch format. You can navigate between changes with{' '} + Go to Next Difference ( `F7` ) and{' '} + Go to Previous Difference ( `Shift+F7` + ). Lines can be navigated with arrow keys and pressing{' '} + `Enter` will jump back in the Diff editor and the selected + line. + +## Timeline view + +The Timeline view, accessible at the bottom of the File Explorer by + default, is a unified view for visualizing time-series events (for + example, Git commits) for a file. + +AVAP TM Dev Studio's built-in Git support provides the Git + commit history of the specified file. Selecting a commit will open a diff + view of the changes introduced by that commit. When you right-click on a + commit, you'll get options to Copy Commit ID and{' '} + Copy Commit Message . + +AVAP TM Dev Studio supports more Git history workflows through{' '} + extensions available on + the AVAP TM Dev Studio Marketplace. + +## Git output window + +You can always peek under the hood to see the Git commands we are using. + This is helpful if something strange is happening or if you are just + curious. :) + +To open the Git output window, run View >{' '} + Output and select Log (Git) from + the dropdown list. + +## Initialize a repository + +If your workspace is on your local machine, you can enable Git source + control by creating a Git repository with the{' '} + Initialize Repository command. When AVAP TM Dev + Studio doesn't detect an existing Git repository, the Source Control + view will give you the options to Initialize Repository {' '} + or Publish to GitHub . + +You can also run the Git: Initialize Repository and{' '} + Publish to GitHub commands from the{' '} + Command Palette ( `Ctrl+Shift+P` ). + Running Initialize Repository will create the necessary + Git repository metadata files and show your workspace files as untracked + changes ready to be staged. Publish to GitHub will + directly publish your workspace folder to a GitHub repository, allowing + you to choose between private and public repositories. Check out our + publishing repos video for more information about publishing to GitHub. + +## AVAP TM Dev Studio as Git editor + +When you launch AVAP TM Dev Studio from the command line, you + can pass the `--wait` argument to make the launch command wait + until you have closed the new AVAP TM Dev Studio instance. This + can be useful when you configure AVAP TM Dev Studio as your Git + external editor so Git will wait until you close the launched AVAP + TM Dev Studio instance. + +Here are the steps to do so: + +Now you can run `git config --global -e` and use AVAP + TM Dev Studio as editor for configuring Git. + +### AVAP TM Dev Studio as Git difftool and mergetool + +You can use AVAP TM Dev Studio's diff and merge capabilities + even when using Git from command-line. Add the following to your Git + configurations to use AVAP TM Dev Studio as the diff and merge + tool: + +```javascript +[diff] + ` `tool = default-difftool + + [difftool "default-difftool"] + ` `cmd = code --wait --diff $LOCAL $REMOTE + + [merge] + ` `tool = code + + [mergetool "code"] + ` `cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED +``` + +This uses the `--diff` option that can be passed to AVAP + TM Dev Studio to compare two files side by side. The merge tool + will be used the next time Git discovers a merge conflict. + +To summarize, here are some examples of where you can use AVAP + TM Dev Studio as the editor: + +* `git rebase HEAD~3 -i` do interactive rebase using AVAP TM Dev Studio +* `git commit` use AVAP TM Dev Studio for the commit message +* `git add -p` followed by e for interactive add +* `git difftool ^ ` use AVAP TM Dev Studio as the diff editor for changes + +## Working with GitHub Pull Requests and Issues + +AVAP TM Dev Studio can also bring in GitHub's pull requests + and issues. Create your PRs in AVAP TM Dev Studio, review with + comments, and approve them without switching context. Learn more about + GitHub PRs and Issues in AVAP TM Dev Studio. + +## SCM Providers + +AVAP TM Dev Studio has support for handling multiple Source + Control providers simultaneously. For example, you can open multiple Git + repositories alongside your Azure DevOps Server local workspace and + seamlessly work across your projects. To turn on the{' '} + Source Control Providers view, select the overflow menu + in the Source Control view ( `Ctrl+Shift+G` + ), hover over Views , and make sure that{' '} + Source Control Repositories is marked with a check. The{' '} + Source Control Providers view shows the detected + providers and repositories, and you can scope the display of your changes + by selecting a specific provider. + +### SCM Provider extensions + +If you would like to install another SCM provider, you can search on the{' '} + scm providers extension category in the{' '} + Extensions view ( `Ctrl+Shift+X` ). + Start typing '@ca' and you will see suggestions for extension + categories like debuggers and linters. Select{' '} + `@category:"scm providers"` to see available SCM + providers. + +## Next steps + +* Intro Video - Git Version Control - An introductory video providing an overview of AVAP TM Dev Studio Git support. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. +* Debugging - This is where AVAP TM Dev Studio really shines +* Tasks - Running tasks with Gulp, Grunt, and Jake. Showing Errors and Warnings +* Source Control API - If you want to integrate another Source Control provider into AVAP TM Dev Studio, see our Source Control API. diff --git a/docs/developer.avapframework.com/Saldo_Usuario_a_Fecha_EN.md b/docs/developer.avapframework.com/Saldo_Usuario_a_Fecha_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Saldo_de_la_cuenta_EN.md b/docs/developer.avapframework.com/Saldo_de_la_cuenta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/Servicio_Tiempo_Aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_Alta_de_Afiliados_EN.md b/docs/developer.avapframework.com/Servicio_de_Alta_de_Afiliados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_Firma_EN.md b/docs/developer.avapframework.com/Servicio_de_Firma_EN.md new file mode 100644 index 0000000..2440f8e --- /dev/null +++ b/docs/developer.avapframework.com/Servicio_de_Firma_EN.md @@ -0,0 +1,230 @@ +This service is used to approve several operations within the system. + +POST: + `URL_BASE + /ws/firma.py/firmar` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "signed" + : + , + "invoice" + : + , + "currency_data" + :{' '} + { + "abbreviation" + : + , + "suffix" + : + , + "format" + : + , + "symbol" + : + , + "prefix" + : + , + "decimals" + : + , + "id" + : + } + , + "elapsed" + : + , + "raw_amount" + : + , + "currency" + : + , + "commission_user_card" + : + , + "codtran" + : + , + "user_commission" + : + , + "amount" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signed:` Shows if the signature has been successfully processed (true) or not (false). +* `invoice:` Invoice number associated to the operation. +* `currency_data:` Contains the different details of the currency used in the operation. +* `abbreviation:` The abbreviated name of the currency (EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). +* `format:` The full format that is applied to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency (€, ¢, $). +* `prefix:` The prefix that is applied in the format of the currency. +* `decimals:` The maximum number of decimal places to be included in the currency format. +* `id:` Currency identifier in BBDD. +* `elapsed:` Execution operation time. +* `raw_amount:` Amount of the operation in negative without applying the format. +* `currency:` Short name of the currency used in the operation, it matches the abbreviation. +* `commission_user_card:` Commission that would be applied if the payment is made by card. +* `codtran:` Transaction code that identifies the executed operation. +* `user_commission:` Commission to be charged to the user. +* `amount:` Negative transaction amount with the applied format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error coge. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/firma.py/firmar" + payload ={' '} + { + 'otp' + :{' '} + '1234' + , + 'phone' + :{' '} + '7229063245' + , + 'country_code' + :{' '} + 'MX' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/firma.py/firmar', + 'headers': {}, + formData: { + 'otp': '1234', + 'phone_dst': '7229063245', + 'country_code': 'MX' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("otp", "1234"); + formdata.append("phone_dst", "7229063245"); + formdata.append("country_code", "MX"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/firma.py/firmar", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/firma.py/firmar'{' '} + \ + --form 'otp=1234'{' '} + \ + --form{' '} + 'phone_dst=7229063245'{' '} + \ + --form 'country_code=MX' +``` + +## Business logic: + +This service searches for the operations pending signing that the entered + phone has, and, among the results, accepts the operation through the OTP. diff --git a/docs/developer.avapframework.com/Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md b/docs/developer.avapframework.com/Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_configuracion_obtener_condicion_EN.md b/docs/developer.avapframework.com/Servicio_de_configuracion_obtener_condicion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_desbloqueo_de_un_usuario_EN.md b/docs/developer.avapframework.com/Servicio_de_desbloqueo_de_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Mover)_EN.md b/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Mover)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Poner)_EN.md b/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Poner)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Quitar)_EN.md b/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_(Quitar)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_Copiar_EN.md b/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_Copiar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_GET_EN.md b/docs/developer.avapframework.com/Servicio_de_edicion_de_perfiles_GET_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_notificaciones_Borrar_Grupo_EN.md b/docs/developer.avapframework.com/Servicio_de_notificaciones_Borrar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_notificaciones_Crear_EN.md b/docs/developer.avapframework.com/Servicio_de_notificaciones_Crear_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_notificaciones_Crear_Grupo_EN.md b/docs/developer.avapframework.com/Servicio_de_notificaciones_Crear_Grupo_EN.md new file mode 100644 index 0000000..0959b38 --- /dev/null +++ b/docs/developer.avapframework.com/Servicio_de_notificaciones_Crear_Grupo_EN.md @@ -0,0 +1,11 @@ +This service is used to generate a notification to all the users of a + group. + +POST: + {' '} + `URL_BASE + /ws/notificaciones.py/gestor_notificaciones` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. diff --git a/docs/developer.avapframework.com/Servicio_de_notificaciones_Listar_Envia_EN.md b/docs/developer.avapframework.com/Servicio_de_notificaciones_Listar_Envia_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_notificaciones_Listar_Grupo_EN.md b/docs/developer.avapframework.com/Servicio_de_notificaciones_Listar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_notificaciones_Modificar_Grupo_EN.md b/docs/developer.avapframework.com/Servicio_de_notificaciones_Modificar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md b/docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md b/docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md b/docs/developer.avapframework.com/Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Solicitar_subida_de_nivel_KYC_EN.md b/docs/developer.avapframework.com/Solicitar_subida_de_nivel_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Solicitud_de_dinero_EN.md b/docs/developer.avapframework.com/Solicitud_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Subir_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/Subir_imagen_del_perfil_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/TERMINAL_Advanced.md b/docs/developer.avapframework.com/TERMINAL_Advanced.md new file mode 100644 index 0000000..74588f8 --- /dev/null +++ b/docs/developer.avapframework.com/TERMINAL_Advanced.md @@ -0,0 +1,334 @@ +AVAP TM Dev Studio's integrated terminal has many advanced + features and settings, such as Unicode and emoji support, custom + keybindings, and automatic replies. This topic explains these advanced + features in detail. If you are new to AVAP TM Dev Studio or the + integrated terminal, you may want to review the{' '} + Terminal Basics topic first. + +## Persistent sessions + +The terminal supports two different types of persistent sessions: + +* Process reconnection: When reloading a window (for example, after installing an extension), reconnect to the previous process and restore its content. +* Process revive: When restarting AVAP TM Dev Studio, a terminal's content is restored and the process is{' '} relaunched using its original environment. + +Both of these persistent sessions can be disabled by setting + terminal.integrated.enablePersistentSessions to false, and the amount of + scrollback restored is controlled by + theterminal.integrated.persistentSessionScrollback setting. Process revive + can be configured independently with + terminal.integrated.persistentSessionReviveProcess. + +### Moving terminals between windows + +Terminal tabs can be dragged and dropped between AVAP TM Dev + Studio windows. This can also be done manually through the Command Palette + and the Terminal: Detach Session and{' '} + Terminal: Attach to Session commands. + +### Configure how the terminal behaves on start up + +When opening a window, if the terminal view is visible it will either + reconnect to the terminal using persistent sessions, or create a new + shell. This behavior can be fine tuned with the + terminal.integrated.hideOnStartup setting. + +* never (default): Never hide the terminal view on startup. +* whenEmpty: Only hide the terminal when there are no persistent sessions restored. +* always: Always hide the terminal, even when there are persistent sessions restored. + +## Keybinding and the shell + +As an embedded application, the integrated terminal should intercept some, + but not all, keybindings dispatched within AVAP TM Dev Studio. + +The configurable terminal.integrated.commandsToSkipShell setting + determines which command's keybindings should always "skip the + shell" and instead be handled by AVAP TM Dev Studio's + keybinding system. By default, it contains a hard-coded list of commands + that are integral to the AVAP TM Dev Studio experience but you + can add or remove specific commands: + +```javascript +{ + ` `"terminal.integrated.commandsToSkipShell": [` `// Ensure + the toggle sidebar visibility keybinding skips the shell + ` `"workbench.action.toggleSidebarVisibility", + ` `// Send quick open's keybinding to the shell + ` `"-workbench.action.quickOpen", + ` `] + + } +``` + +Look at the terminal.integrated.commandsToSkipShell setting details to see + the complete list of default commands. + +### Chords + +Chord keybindings are made up of two keybindings, for example Ctrl+K + followed by Ctrl+C to change the line to a comment. Chords always skip the + shell by default but can be disabled with terminal.integrated.allowChords. + +### macOS clear screen + +On macOS, Cmd+K is a common keybindings in terminals to clear the screen + so AVAP TM Dev Studio also respects that, which means Cmd+K + chords will not work. Cmd+K chords can be enabled by{' '} + + removing the clear keybinding + + : + +```javascript +{ + ` `"key": "cmd+k", + ` `"command": "-workbench.action.terminal.clear" + + } +``` + +Additionally, this keyboard shortcut will be overridden automatically if + any extensions contribute Cmd+K keybindings due to how keybinding priority + works. To re-enable the Cmd+K clear keybinding in this case, you can + redefine it in user keybindings, which have a higher priority than + extension keybindings: + +```javascript +{ + ` `"key": "cmd+k", + ` `"command": "workbench.action.terminal.clear", + ` `"when": "terminalFocus && terminalHasBeenCreated || + terminalFocus && terminalProcessSupported" + + } +``` + +### Mnemonics + +Using mnemonics to access AVAP TM Dev Studio's menu (for + example, Alt+F for File menu) is disabled by default in the terminal + as these key events are often important hotkeys in shells. Set + terminal.integrated.allowMnemonics to enable mnemonics, but note that this + will disallow any Alt key events to go to the shell. This setting does + nothing on macOS. + +### Custom sequence keybindings + +The workbench.action.terminal.sendSequence command can be used to send a + specific sequence of text to the terminal, including escape sequences that + are interpreted specially by the shell. The command enables you to send + Arrow keys, Enter, cursor moves, etc. + +For example, the sequence below jumps over the word to the left of the + cursor (Ctrl+Left) and then presses Backspace: + +```javascript +{ + ` `"key": "ctrl+u", + ` `"command": "workbench.action.terminal.sendSequence", + ` `"args": { + ` `"text": "\u001b[1;5D\u007f" + ` `} + + } +``` + +This feature supports{' '} + variable substitution . + +The sendSequence command only works with the \u0000 format for using + characters via their character code (not \x00). Read more about + these hex codes and terminal sequences in the following resources: + +* XTerm Control Sequences +* List of C0 and C1 control codes + +## Confirmation dialogs + +In order to avoid unnecessary output and user prompts, the terminal does + not show warning dialogs when processes exit. If warnings are desirable, + they can be configured with the following settings: + +* terminal.integrated.confirmOnExit - Controls whether to confirm when the window closes if there are active debug sessions. +* terminal.integrated.confirmOnKill - Controls whether to confirm killing terminals when they have child processes. +* terminal.integrated.showExitAlert - Controls whether to show the alert "The terminal process terminated with exit code" when exit code is non-zero. + +## Auto replies + +The terminal can automatically provide a configurable input response to + the shell if an exact sequence of output is received. The most common use + case is to automatically reply to a prompt when hitting Ctrl+C in batch + scripts that ask whether the user wants to terminate the batch job. To + automatically dismiss this message, add this setting: + +```javascript +{ + ` `"terminal.integrated.autoReplies": { + ` `"Terminate batch job (Y/N)": "Y\r" + ` `} + + } +``` + +Notice that the \r character used here means Enter, and much like{' '} + custom sequence keybindings , + this feature supports sending escape sequences to the shell. + +No auto replies are configured by default as providing shell input should + be an explicit action or configuration by the user. + +## Change tab stop width + +The terminal.integrated.tabStopWidth setting allows configuring the tab + stop width when a program running in the terminal outputs \t. This should + typically not be needed as programs will often move the cursor instead of + using the Tab character, but may be useful in some situations. + +## Unicode and emoji support + +The terminal has both Unicode and emoji support. When these characters are + used in the terminal, there are some caveats to that support: + +* Some Unicode symbols have ambiguous width that may change between Unicode versions. Currently we support Unicode version 6 and 11 widths, which can be configured with the terminal.integrated.unicodeVersion setting. The version specified should match the Unicode version used by the shell/operating system, otherwise there could be rendering issues. Note that the Unicode version of the shell/OS may not match the font's actual width. +* Some emojis comprised of multiple characters may not render correctly, for example, skin tone modifiers. +* Emoji support is limited on Windows. + +## Image support + +Images in the terminal work provided they use either the Sixel or iTerm + inline image protocols. This feature is disabled by default and can be + enabled with the terminal.integrated.enableImages setting. + +Current limitations: + +* Serialization does not work, so reloading a terminal will not retain any images ( jerch/xterm-addon-image#47 ). +* Copying the selection as HTML does not include the selected image ( jerch/xterm-addon-image#50 ). +* Animated gifs don't work ( jerch/xterm-addon-image#51 ). +* Images that are shorter than a cell will not work properly, this is a{' '} design flaw with the sequences and also occurs in XTerm . + +## Process environment + +The process environment of the application running within the terminal is + influenced by various settings and extensions and can cause the output in + the AVAP TM Dev Studio terminal to look different than in other + terminals. + +### Environment inheritance + +When AVAP TM Dev Studio is opened, it launches a login shell + environment in order to source a shell environment. This is done because + developer tools are often added to the $PATH in a shell launch script like + ~/.bash_profile. By default, the terminal inherits this environment, + depending on your{' '} + + profile shell arguments + + , and means that multiple profile scripts may have run, which could cause + unexpected behavior. + +This environment inheritance can be disabled on macOS and Linux via the + terminal.integrated.inheritEnv setting. + +### Interaction with $LANG + +There is some special interaction with the $LANG environment variable, + which determines how characters are presented in the terminal. This + feature is configured with the terminal.integrated.detectLocale setting: + +### Extension environment contributions + +Extensions are able to{' '} + + contribute to terminal environments + + , allowing them to provide some integration with the terminal. For + example, the built-in Git extension injects the GIT_ASKPASS environment + variable to allow AVAP TM Dev Studio to handle authentication to + a Git remote. + +If an extension changes the terminal environment, any existing terminals + will be relaunched if it is safe to do so, otherwise a warning will show + in the terminal status. More information about the change can be viewed in + the hover, which also includes a relaunch button. + +## Windows and ConPTY + +AVAP TM Dev Studio's terminal is built on the{' '} + xterm.js project to + implement a Unix-style terminal that serializes all data into a string and + pipes it through a "pseudoterminal". Historically, this was not + how the terminal worked on Windows, which used the{' '} + + Console API + {' '} + to implement its console called 'conhost'. + +An open source project called{' '} + winpty was created to + try to fix this issue by providing an emulation/translation layer between + a Unix-style terminal and a Windows console. AVAP TM Dev + Studio's terminal was originally implemented using only winpty. This + was great at the time, but in 2018, Windows 10 received{' '} + + the ConPTY API + + , which took the idea pioneered by winpty and baked it into Windows, + providing a more reliable and supported system to leverage Unix-style + terminals and apps on Windows. + +AVAP TM Dev Studio defaults to ConPTY on Windows 10+ (from + build number 18309) and falls back to winpty as a legacy option for + older versions of Windows. ConPTY can be explicitly disabled via the + terminal.integrated.windowsEnableConpty settings but this should normally + be avoided. + +Since ConPTY is an emulation layer, it does come with some quirks. The + most common is that ConPTY considers itself the owner of the viewport and + because of that will sometimes reprint the screen. This reprinting can + cause unexpected behavior such as old content displaying after running the{' '} + Terminal: Clear command. + +## Remote development + +This section outlines topics specific to when AVAP TM Dev Studio + is connected to a remote machine using a AVAP TM Dev Studio{' '} + + Remote Development + {' '} + extension. + +### Reducing remote input latency + +Local echo is a feature that helps mitigate the effect of input latency on + remote windows. It writes the keystrokes in the terminal in a dimmed color + before the result is confirmed by the remote. By default, the feature + start running when latency is detected to be above 30 ms and the timing + can be configured with terminal.integrated.localEchoLatencyThreshold. The + color of the unconfirmed characters is defined by + terminal.integrated.localEchoStyle. + +Local echo disables itself dynamically depending on the active program in + the terminal. This is controlled by + terminal.integrated.localEchoExcludePrograms, which defaults to + ['vim', 'vi', 'nano', 'tmux']. It's + recommended that you disable the feature for any application or shell that + is highly dynamic and/or does a lot of reprinting of the screen when + typing. + +To disable the feature completely, use: + +```javascript +{ + ` `"terminal.integrated.localEchoEnabled": false + + } +``` + +### Local terminals in remote windows + +The default local terminal profile can be launched in + remote windows with the{' '} + Terminal: Create New Integrated Terminal (Local) {' '} + command via the Command Palette. Currently non-default profiles cannot be + launched from remote windows. diff --git a/docs/developer.avapframework.com/TERMINAL_Appearance.md b/docs/developer.avapframework.com/TERMINAL_Appearance.md new file mode 100644 index 0000000..213a3a7 --- /dev/null +++ b/docs/developer.avapframework.com/TERMINAL_Appearance.md @@ -0,0 +1,234 @@ +The look of AVAP TM Dev Studio's terminal can be customized + extensively. + +*Sapphire + {' '} + + theme with custom Starship prompt + using the font Hack with{' '} + Nerd Font symbols + +## Text style + +Text in the terminal can be customized with the following settings: + +* `terminal.integrated.fontFamily:` The font family to use, this takes a string in the format that fontFamily in CSS takes. For example, "'Fira Code', monospace" will configure Fira Code as the primary font and monospace as the fallback when it lacks glyphs. +* `terminal.integrated.fontSize:` Changes the font size of text in the terminal. +* `terminal.integrated.letterSpacing:` Configures additional horizontal spacing between characters in pixels. +* `terminal.integrated.lineHeight:` Configures additional spacing vertical between characters as a multiplier of the regular line height. For example, 1.1 will add 10% additional vertical space. +* `terminal.integrated.fontWeight:` Configures the font weight of "normal" text. +* `terminal.integrated.fontWeightBold:` Configures the font weight of "bold" text. + +### Powerline symbols and Nerd Fonts + +Powerline fonts are special + patched fonts that contain additional characters that can be used in the + terminal. AVAP TM Dev Studio's terminal{' '} + + renders some of the Powerline symbols without needing to configure a + font + + , but if more glyphs are desired, configure a Powerline font with the font + family setting. Powerline fonts typically end in " for + Powerline", the following setting is an example of how to configure a + DejaVu Sans Mono that has been patched: + +```javascript +"editor.fontFamily": "'DejaVu Sans Mono for Powerline'" +``` + +Nerd Fonts work the same and typically have a " NF" suffix, the + following is an example of how to configure Hack's nerd fonts variant: + +```javascript +"terminal.integrated.fontFamily": "'Hack NF'" +``` + +## Terminal cursor + +The terminal cursor style and whether it blinks can be customized with the + following settings: + +* `terminal.integrated.cursorStyle:` Defines the shape of the cursor, can be block, line or underline. +* `terminal.integrated.cursorWidth:` How wide in pixels the cursor should be when the cursor style is set to line. +* `terminal.integrated.cursorBlinking:` Whether the cursor should blink when the terminal is focused. +* `terminal.integrated.cursorStyleInactive:` Defines the shape of the cursor, can be outline, block, line, underline or none. + +## Customizing tabs + +Terminal tabs appear on the right of the terminal view when there are two + or more terminals by default, showing the active terminal in the view + header when there is only one. + +### Visibility + +The default visibility is designed to save horizontal space, but may not + be desirable. How tabs are presented can be configured with the following + settings: + +* `terminal.integrated.tabs.hideCondition:` When to hide the tabs to the right, set to "never" to always show them. +* `terminal.integrated.tabs.showActiveTerminal:` When to show the active terminal in the terminal view header. +* `terminal.integrated.tabs.showActions:` When to show the active terminal's actions in the view header. +* `terminal.integrated.tabs.location:` Whether the tabs should be shown on the left or right of the terminal. +* `terminal.integrated.tabs.enabled:` Whether to use tabs, disabling will show the original dropdown view. + +### Tab text + +The text on each tab is determined by the following settings: + +* `terminal.integrated.tabs.title:` Tab title. +* `terminal.integrated.tabs.description:` Text that appears to the right of the title. +* `terminal.integrated.tabs.separator:` Separator character between the title and description. + +By default, the title displays what the shell's detected process name. + +Other terminals often display the escape sequence sent by the shell as the + title, which can be configured with: + +```javascript +"terminal.integrated.tabs.title": "${sequence}" +``` + +### Icons + +Each terminal has an associated icon that is determined by its{' '} + terminal profile . The default icon + and its color, which will be used if not defined in a profile, can be + configured with the terminal.integrated.tabs.defaultIcon and + terminal.integrated.tabs.defaultColor settings. + +### Status + +A terminal's "status", if any, is signified by an icon that + appears on the right of the tab. Some statuses involve animation. If this + is distracting the animation can be disabled with: + +```javascript +"terminal.integrated.tabs.enableAnimation": false +``` + +### Visual bell + +When the terminal's bell is triggered, a yellow bell icon is briefly + shown. This can be disabled with terminal.integrated.enableBell and the + duration can be configured with terminal.integrated.bellDuration. + +## Terminal colors + +While the terminal is capable of displaying true color, programs commonly + use 8 ANSI colors (black, red, green, yellow, blue, magenta, cyan and + white) and bright variants of each. These ANSI colors are determined + by the active color theme , but they + can also be configured independently from the theme with the{' '} + + workbench.colorCustomizations + {' '} + setting. + +Whether bold text uses the normal ANSI colors or the bright variant can be + configured with the terminal.integrated.drawBoldTextInBrightColors + setting. + +### Minimum contrast ratio + +Terminals often have contrast issues due to some conflict with dark/light + themes, ANSI colors or shells/programs running, and more. + +The minimum contrast ratio feature solves this problem by either + increasing or reducing the luminance of the text's foreground color + until a 4.5:1 contrast ratio is met. + +One downside of this is that colored text may sometimes lose some of its + saturation. This feature can be configured or disabled to get the original + colors with: + +```javascript +"terminal.integrated.minimumContrastRatio": 1 +``` + +## GPU acceleration + +The terminal features three different renderers, each of which have + different trade offs: + +* WebGL renderer - True GPU acceleration. +* Canvas renderer - GPU acceleration by using the{' '} CanvasRenderingContext2D web API , slower than WebGL but faster than DOM. +* DOM renderer - A fallback renderer that's much slower but has great compatibility. + +GPU acceleration driven by the WebGL renderer is enabled in the terminal + by default. This helps the terminal work faster and display at a high FPS + by significantly reducing the time the CPU spends rendering each frame. + +When on Linux VMs, browsers that don't support WebGL, or machines with + outdated drivers, WebGL may not work properly. + +The default terminal.integrated.gpuAcceleration value of "auto" + tries the WebGL, canvas, and DOM renderers sequentially, settling at the + first without detected issues. + +Sometimes this detection doesn't work and requires manual + intervention, setting terminal.integrated.gpuAcceleration to + "off" typically resolves rendering-related problems like these + at the cost of performance. + +### Custom glyphs + +When GPU acceleration is enabled, custom + rendering, rather than the font, improves how some characters display in + the terminal. These include box drawing characters + (U+2500-U+257F), block elements (U+2580-U+259F) and a + subset of Powerline symbols (U+E0B0-U+E0BF). This means that the + configured font does not need to support these characters as well as + having the characters draw pixel perfect and stretch to the size of the + entire cell. + +Below are some examples of these characters with custom line height and + letter spacing configured. Notice how there are no gaps between cells + thanks to the custom glyphs: + +```javascript +This feature can be disabled by setting + "terminal.integrated.customGlyphs": false. +``` + +## Customizing your prompt + +Most shells allow extensive customization of the terminal prompt. This is + done by configuring your shell outside AVAP TM Dev Studio, + typically by modifying the $PS1 variable, setting a $PROMPT_COMMAND or + installing a plugin. + +Some prompts like Starship and{' '} + oh-my-posh show things like git status + and work with most shells, so they're a good choice when starting out. + +## Common questions + +### Why is my terminal showing a multi-colored triangle or a black rectangle? + +The terminal can have problems with GPU accelerated rendering in some + environments. For example, you might see a big multi-colored triangle + instead of text. This is typically caused by driver/VM graphics issues and + the same also happens in Chromium. Work around these issues by launching + code with the --disable-gpu flag or by using the setting + "terminal.integrated.gpuAcceleration": "off" to avoid + using the canvas in the terminal. See the{' '} + GPU acceleration section for more + information. + +### Why are the colors in the terminal not correct? + +The minimum contrast ratio feature {' '} + can cause colors to not be displayed as expected. It can be disabled with: + +```javascript +"terminal.integrated.minimumContrastRatio": 1 +``` + +Background on why this is the default is explained in{' '} + + vscode#146406 + + . + +`` diff --git a/docs/developer.avapframework.com/TERMINAL_Shell_Integration.md b/docs/developer.avapframework.com/TERMINAL_Shell_Integration.md new file mode 100644 index 0000000..30cbb2a --- /dev/null +++ b/docs/developer.avapframework.com/TERMINAL_Shell_Integration.md @@ -0,0 +1,372 @@ +AVAP TM Dev Studio has the ability to integrate with common + shells, allowing the terminal to understand more about what's actually + happening inside the shell. This additional information enables some + useful features such as{' '} + + working directory detection + {' '} + and command detection,{' '} + decorations , + and navigation . + +Supported shells: + +* Linux/macOS: bash, fish, pwsh, zsh +* Windows: pwsh + +## Installation + +### Automatic script injection + +By default, the shell integration script should automatically activate on + supported shells launched from AVAP TM Dev Studio. This is done + by injecting arguments and/or environment variables when the shell session + launches. This automatic injection can be disabled by setting{' '} + `terminal.integrated.shellIntegration.enabled` to{' '} + `false` . + +This standard, easy way will not work for some advanced use cases like in + sub-shells, through a regular ssh session (when not using the{' '} + Remote - SSH extension ) or for some + complex shell setups. The recommended way to enable shell integration for + those is manual installation . + +### Manual installation + +To manually install shell integration, the AVAP TM Dev Studio + shell integration script needs to run during your shell's + initialization. Where and how to do this depends on the shell and OS + you're using. When using manual install it's recommended to set{' '} + `terminal.integrated.shellIntegration.enabled` to false, though + not mandatory. + +bash + +Add the following to your `~/.bashrc` file. Run{' '} + `code ~/.bashrc` in bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path bash)" +``` + +fish + +Add the following to your `config.fish` . Run{' '} + `code $\_\_fish\_config\_dir/config.fish` in fish to open the + file in AVAP TM Dev Studio. + +```javascript +string match -q "$TERM\_PROGRAM" "vscode" + + and . (code --locate-shell-integration-path fish) +``` + +pwsh + +Add the following to your [PowerShell profile]. Run{' '} + `code $Profile` in pwsh to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +if ($env:TERM\_PROGRAM -eq "vscode") { . "$(code + --locate-shell-integration-path pwsh)" } +``` + +zsh + +Add the following to your `~/.zshrc` file. Run{' '} + `code ~/.zshrc` in bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path zsh)" +``` + +Git Bash + +⚠️ This is currently experimental and automatic injection is not + supported + +Add the following to your `~/.bashrc` file. Run code{' '} + `~/.bashrc` in Git Bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path bash)" +``` + +The above shell integration installation is cross-platform and compatible + with any installation type if code is in the `$PATH` . However, + this recommended approach starts Node.js to fetch the script path, leading + to a slight delay in shell startup. To mitigate this delay, inline the + script above by resolving the path ahead of time and adding it directly + into your init script. + +```javascript +\# Output the executable's path first: + + code --locate-shell-integration-path bash + + + \# Add the result of the above to the source statement: + + [[ "$TERM\_PROGRAM" == "vscode" ]] && . + "/path/to/shell/integration/script.sh" +``` + +## Command decorations and the overview ruler + +One of the things that shell integration enables is the ability to get the + exit codes of the commands run within the terminal. Using this + information, decorations are added to the left of the line to indicate + whether the command succeeded or failed. These decorations also show up in + the relatively new overview ruler in the scroll bar, just like in the + editor. + +The decorations can be interacted with to give some contextual actions + like re-running the command: + +The command and overview ruler decorations can be configured with the{' '} + `terminal.integrated.shellIntegration.decorationsEnabled` {' '} + setting. + +## Command navigation + +The commands detected by shell integration feed into the command + navigation feature ( `Ctrl/Cmd+Up, Ctrl/Cmd+Down` ) to + give it more reliable command positions. This feature allows for quick + navigation between commands and selection of their output. To select from + the current position to the command, you can also hold down{' '} + `Shift` , pressing `Shift+Ctrl/Cmd+Up` and{' '} + `Shift+Ctrl/Cmd+Down` . + +## Sticky scroll + +The sticky scroll feature will "stick" the command that is + partially showing at the top of the terminal, making it much easier to see + what command that output belongs to. Clicking on the sticky scroll + component will scroll to the command's location in the terminal + buffer. + +This can be enabled with the{' '} + `terminal.integrated.stickyScroll.enabled` setting. + +## Quick fixes + +AVAP TM Dev Studio scans the output of a command and presents a + Quick Fix with actions that have a high likelihood of being what the user + will want to do next. + +Here are some of the built-in Quick Fixes: + +* When it's detected that a port is already being listened to, suggest to kill the process and re-run the previous command. +* When `git push` fails due to an upstream not being set, suggest to push with the upstream set. +* When a `git` subcommand fails with a similar command error, suggest to use the similar command(s). +* When `git push` results in a suggestion to create a GitHub PR, suggest to open the link. +* When a `General` or `cmd-not-found` PowerShell feedback provider triggers, suggest each suggestion. + +The Quick Fix feature also supports{' '} + audio cues for + additional feedback when a Quick Fix is available. + +## Run recent command + +The Terminal: Run Recent Command command surfaces history + from various sources in a Quick Pick, providing similar functionality to a + shell's reverse search ( `Ctrl+R` ). The sources are + the current session's history, previous session history for this shell + type and the common shell history file. + +Some other functionality of the command: + +* By default the search mode is "contiguous search", meaning the search term must exactly match. The button on the right of the search input allows switching to fuzzy search. +* In the current session section, there is a clipboard icon in the right of the Quick Pick that will open the command output in an editor. +* The pin action in the right of the Quick Pick can pin the command to the top of the list. +* Alt can be held to write the text to the terminal without running it. +* The amount of history stored in the previous session section is determined by the terminal.integrated.shellIntegration.history setting. + +The default keybinding for this command is `Ctrl+Alt+R` . + However, when accessibility mode is on these are reversed;{' '} + `Ctrl+R` runs a recent command and `Ctrl+Alt+R` {' '} + sends Ctrl+R to the shell. + +The keybindings can be flipped when accessibility mode is off with the + following keybindings: + +```javascript +{ + ` `"key": "ctrl+r", + ` `"command": "workbench.action.terminal.runRecentCommand", + ` `"when": "terminalFocus" + + }, + + { + ` `"key": "ctrl+alt+r", + ` `"command": "workbench.action.terminal.sendSequence", + ` `"args": { "text": "\u0012"/\*^R\*/ }, + ` `"when": "terminalFocus" + + } +``` + +## Go to recent directory + +Similar to the run recent command feature, the{' '} + Terminal: Go to Recent Directory command keeps track of + directories that have been visited and allows quick filtering and + navigating ( `cd` ) to them. `Alt` can be held + to write the text to the terminal without running it. + +The default keybinding for this command is `Ctrl+G` as it + behaves similar to the Go to Line/Column command in the + editor. Ctrl+G can be send to the shell with `Ctrl+Alt+G` . + +## Current working directory detection + +Shell integration tells AVAP TM Dev Studio what the current + working directory of the shell is. This information is not possible to get + on Windows without trying to detect the prompt through regex and requires + polling on macOS and Linux, which isn't good for performance. + +One of the biggest features this enables is enhanced resolving of links in + the terminal. Take a link `package.json` for example, when the + link is activated while shell integration is disabled this will open a + search quick pick with `package.json` as the filter if there + are multiple `package.json` files in the workspace. When shell + integration is enabled however, it will open the `package.json` {' '} + file in the current folder directly because the current location is known. + This allows the output of `ls` for example to reliably open the + correct file. + +The current working directory is also used to show the directory in the + terminal tab, in the run recent command quick pick and for the{' '} + `"terminal.integrated.splitCwd"` :{' '} + `"inherited"` feature. + +## Extended PowerShell keybindings + +Windows' console API allows for more keybindings than Linux/macOS + terminals, since AVAP TM Dev Studio's terminal emulates the + latter even on Windows there are some PowerShell keybindings that + aren't possible using the standard means due to lack of VT encoding + such as `Ctrl+Space` . Shell integration allows AVAP + TM Dev Studio to attach a custom keybindings to send a special + sequence to PowerShell that then gets handled in the shell integration + script and forwarded to the proper key handler. + +The following keybindings should work in PowerShell when shell integration + is enabled: + +* Ctrl+Space: Defaults to `MenuComplete` on Windows only +* Alt+Space: Defaults to `SetMark` on all platforms +* Shift+Enter: Defaults to `AddLine` on all platforms +* Shift+End: Defaults to `SelectLine` on all platforms +* Shift+Home: Defaults to `SelectBackwardsLine` on all platforms + +## Enhanced accessibility + +The information that shell integration provides to AVAP TM Dev + Studio is used to improve{' '} + + accessibility in the terminal + + . Some examples of enhancements are: + +* Navigation through detected commands in the accessible buffer (Alt+F2) +* An audio cue plays when a command fails. +* Underlying text box synchronizing such that using the arrow and backspace keys behave more correctly. + +## Supported escape sequences + +AVAP TM Dev Studio supports several custom escape sequences: + +### AVAPTM Dev Studio custom sequences 'OSC 633 ; ... ST' + +AVAP TM Dev Studio has a set of custom escape sequences designed + to enable the shell integration feature when run in AVAP TM Dev + Studio's terminal. These are used by the built-in scripts but can also + be used by any application capable of sending sequences to the terminal, + for example the{' '} + + Julia extension + {' '} + uses these to support shell integration in the Julia REPL. + +These sequences should be ignored by other terminals, but unless other + terminals end up adopting the sequences more widely, it's recommended + to check that `$TERM\_PROGRAM` is `vscode` before + writing them. + +* `OSC 633 ; A ST` - Mark prompt start. +* `OSC 633 ; B ST` - Mark prompt end. +* `OSC 633 ; C ST` - Mark pre-execution. +* `OSC 633 ; D [; ] ST` - Mark execution finished with an optional exit code. +* `OSC 633 ; E ; ST` - Explicitly set the command line. The E sequence allows the terminal to reliably get the exact command line interpreted by the shell. When this is not specified, the terminal may fallback to using the A, B and C sequences to get the command, or disable the detection all together if it's unreliable. The optional nonce can be used to verify the sequence came from the shell integration script to prevent command spoofing. When the nonce is verified successfully, some protections before using the commands will be removed for an improved user experience. The command line can escape ASCII characters using the{' '} `\xAB` format, where AB are the hexadecimal representation of the character code (case insensitive), and escape the \ character using \. It's required to escape semi-colon ( `0x3b` ) and characters 0x20 and below and this is particularly important for new line and semi-colon. Some examples: "" -> "\" ` "\n" -> "\x0a" ";" -> "\x3b" ` +* `OSC 633 ; P ; = ST` - Set a property on the terminal, only known properties will be handled. Known properties: `Cwd` - Reports the current working directory to the terminal. `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. +* `Cwd` - Reports the current working directory to the terminal. +* `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. + +### Final Term shell integration + +AVAP TM Dev Studio supports Final Term's shell integration + sequences, which allow non-AVAP TM Dev Studio shell integration + scripts to work in AVAP TM Dev Studio. This results in a + somewhat degraded experience as it doesn't support as many features as{' '} + `OSC 633` . Here are the specific sequences that are supported: + +* `OSC 133 ; A ST` - Mark prompt start. +* `OSC 133 ; B ST` - Mark prompt end. +* `OSC 133 ; C ST` - Mark pre-execution. +* `OSC 133 ; D [; ] ST` - Mark execution finished with an optional exit code. + +### SetMark 'OSC 1337 ; SetMark ST' + +This sequence adds a mark to the left of the line it was triggered on and + also adds an annotation to the scroll bar: + +These marks integrate with command navigation to make them easy to + navigate to via ctrl/cmd+up and ctrl/cmd+down by default. + +## Common questions + +### When does automatic injection not work? + +There are several cases where automatic injection doesn't work, here + are some common cases: + +* `$PROMPT\_COMMAND` is in an unsupported format, changing it to point to a single function is an easy way to work around this. For example: prompt() { ` ` `printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.\*}" "${PWD/#$HOME/\~}" } PROMPT\_COMMAND=prompt ` +* Some shell plugins may disable AVAP TM Dev Studio's shell integration explicitly by unsetting{' '} `$VSCODE\_SHELL\_INTEGRATION` when they initialize. + +### Why are command decorations showing when the feature is disabled? + +The likely cause of this is that your system has shell integration for + another terminal installed that{' '} + + AVAP TM Dev Studio understands + + . If you don't want any decorations, you can hide them with the + following setting: + +```javascript +"terminal.integrated.shellIntegration.decorationsEnabled": never +``` + +Alternatively, you could remove the shell integration script from your + shell rc/startup script but you will lose access to command-aware features + like command navigation . + +### Why does the command decoration jump around on Windows? + +Windows uses an emulated pseudoterminal (pty) backend called + ConPTY. It works a little differently to a regular pty because it needs to + maintain compatibility with the Windows Console API. One of the impacts of + this is the pty handles rendering specially in such a way that the shell + integration sequences that identify the commands in the terminal buffer + may be misplaced. When the command jumps around it's typically after a + command has run, and AVAP TM Dev Studio's heuristics have + kicked in to improve the position of the command decorations. diff --git a/docs/developer.avapframework.com/TERMINAL_TerminalBasics.md b/docs/developer.avapframework.com/TERMINAL_TerminalBasics.md new file mode 100644 index 0000000..dc4d00b --- /dev/null +++ b/docs/developer.avapframework.com/TERMINAL_TerminalBasics.md @@ -0,0 +1,587 @@ +AVAP TM Dev Studio includes a full featured integrated terminal + that starts at the root of your workspace. It provides integration with + the editor to support features like links and error detection. The + integrated terminal can run commands such as mkdir and git just like a + standalone terminal. + +You can open a terminal as follows: + +* From the menu, use the Terminal >{' '} New Terminal or View >{' '} Terminal menu commands. +* From the Command Palette {' '} `(Ctrl+Shift+P)` , use the{' '} View: Toggle Terminal command. +* In the Explorer, you can use the{' '} Open in Integrated Terminal context menu command to open a new terminal from a folder. +* To toggle the terminal panel, use the `Ctrl+`` keyboard shortcut. +* To create a new terminal, use the `Ctrl+Shift+`` keyboard shortcut. + +AVAP TM Dev Studio's terminal has additional functionality + called shell integration that tracks where commands are run with + decorations on the left of a command and in the scrollbar: + +## Terminal shells + +The integrated terminal can use various shells installed on your machine, + with the default being pulled from your system defaults. Shells are + detected and presented in the terminal profiles dropdown. + +You can learn more about configuring terminal shells in the terminal + profiles article. + +## Managing terminals + +The terminal tabs UI is on the right side of the terminal view. Each + terminal has an entry with its name, icon, color, and group decoration + (if any). + +Add terminal instances by selecting the + icon on the + top-right of the TERMINAL panel, selecting a profile from + the terminal dropdown, or by triggering the `Ctrl+Shift+` {' '} + command. This action creates another entry in the tab list associated with + that terminal. + +Remove terminal instances by hovering a tab and selecting the{' '} + Trash Can button, selecting a tab item and pressing + Delete, using Terminal: Kill the Active Terminal Instance {' '} + command, or via the right-click context menu. + +Navigate between terminal groups using focus next{' '} + `Ctrl+PageDown` and focus previous `Ctrl+PageUp` . + +Icons may appear to the right of the terminal title on the tab label when + a terminal's status changes. Some examples are a bell (macOS) + and for tasks, displaying a check mark when there are no errors and an X + otherwise. Hover the icon to read status information, which may contain + actions. + +### Groups (split panes) + +Place multiple terminals side-by-side and create a group by splitting a + terminal: + +* Hover over a entry in the list of terminals on the right and select the inline split button. +* Right-click the context menu and selecting the Split {' '} menu option. +* `Alt` and click on a tab, the + button, or the single tab on the terminal panel. +* Trigger the Ctrl+Shift+5 command. + +Navigate between terminals in a group by focusing the previous pane,{' '} + `Alt+Left` , or the next pane, `Alt+Right` . + +Dragging and dropping tabs in the list rearranges them. Dragging a tab + into the main terminal area allows moving a terminal from one group to + another. + +Moving a terminal into its own group can be done with the{' '} + Terminal: Unsplit Terminal command through the Command + Palette or in the right-click context menu. + +## Terminals in editor area + +You can open terminals in the editor area (terminal editors) with + the Terminal: Create New Terminal in Editor Area command, + the{' '} + Terminal: Create New Terminal in Editor Area to the Side {' '} + command, or by dragging a terminal from the terminal view into the editor + area. Terminal editors are presented like regular editor tabs: + +You can have terminal editors on either side or arranged in multiple + dimensions using the editor group layout system, e.g. PowerShell and WSL + terminals stacked to the right of file editors: + +The `terminal.integrated.defaultLocation` setting can change + the default `view` or `editor` area terminal + location. + +## Navigating the buffer + +The content in the terminal is called the buffer, with the section right + above the bottom viewport being called "scrollback". The amount + of scrollback kept is determined by the terminal.integrated.scrollback{' '} + setting and defaults to 1000 + lines. + +There are various commands available to navigate around the terminal + buffer: + +* Scroll up a line - `Ctrl+Alt+PageUp` +* Scroll down a line - `Ctrl+Alt+PageDown` +* Scroll up a page - `Shift+PageUp` +* Scroll down a page - `Shift+PageDown` +* Scroll to the top - `Ctrl+Home` +* Scroll to the bottom - `Ctrl+End` + +Command navigation is also available (see shell + integration): + +* Scroll to the previous command - `Ctrl+Up` +* Scroll to the next command - `Ctrl+Down` + +Scrolling will happen instantaneously, but can be configured to animate + over a short duration with the{' '} + `terminal.integrated.smoothScrolling` setting. + +## Links + +The terminal features sophisticated link detection with editor integration + and even extension contributed link handlers. Hover over a link to display + an underline, then hold the `Ctrl/Cmd` key and click. + +These built-in link handlers are used in the following priority order: + +* URIs/URLs: Links that look like URIs, such as{' '} `https://code.visualstudio.com` , vscode://path/to/file or{' '} `file://path/to/file` will open using the standard handler for the protocol. For example, `https` links will open the browser. + +* File links: Links to files that have been verified to exist on the system. These will open the file in a new editor tab and support many common line/column formats such as{' '} `file:1:2, file:line 1, column 2` . + +* Folder links: Links to folders are similar to file links but will open a new AVAP TM Dev Studio window at the folder. + +* Word links: Fallback link type that uses the{' '} `terminal.integrated.wordSeparators` setting. The setting defines word boundaries and make nearly all text into words. Activating a word link searches the workspace for the word. If there is a single result it will open, otherwise it will present the search results. Word links are considered "low confidence" and will not show an underline or tooltip unless you hold the `Ctrl` / `Cmd` key. They also have limited support for line and column suffixes. + +The Open Detected Link command ( + `Ctrl+Shift+O` ) can be used to access links via the + keyboard: + +### Extensions handling links + +Extensions can contribute link providers which allow the + extension to define what happens when clicked. An example of this is the + GitLens extension detecting Git branch links. + +### Keyboard accessibility + +Links are keyboard accessible through several commands that open links + based on the type of link. + +* Terminal: Open Last Local File Link - Opens the most recent local file link. No default keybinding. +* Terminal: Open Last URL link - Opens the most recent URI/URL link. No default keybinding. +* Terminal: Open Detected Link... - Opens a searchable Quick Pick with all detected links, including word links. The default keybinding is `Ctrl/Cmd+Shift+O` , which is the same as the{' '} Go to Symbol in Editor keyboard shortcut. + +## Copy & paste + +The keybindings for copy and paste follow platform standards: + +* Linux: `Ctrl+Shift+C` and `Ctrl+Shift+V` ; selection paste is available with `Shift+Insert` +* macOS: `Cmd+C` and `Cmd+V` +* Windows: `Ctrl+C` and `Ctrl+V` + +Copying is done automatically on selection when{' '} + `terminal.integrated.copyOnSelection` is enabled. + +By default, there is a warning when pasting multiple lines, which can be + disabled with the{' '} + `terminal.integrated.enableMultiLinePasteWarning` setting. This + is only done when the shell does not support "bracketed paste + mode". When that mode is enabled, the shell is indicating that it can + handle multiple line pasting. + +## Using the mouse + +### Right-click behavior + +The right-click behavior differs based on the platform: + +* Linux: Show the context menu. +* macOS: Select the word under the cursor and show the context menu. +* Windows: Copy and drop selection if there is a selection, otherwise paste. + +This can be configured using the terminal.integrated.rightClickBehavior + setting. The options are: + +* `default` - Show the context menu. +* `copyPaste` - Copy when there is a selection, otherwise paste. +* `paste` - Paste on right-click. +* `selectWord` - Select the word under the cursor and show the context menu. +* `nothing` - Do nothing and pass event to terminal. + +### Reposition the cursor with Alt + +`Alt` and left-click will reposition the cursor to underneath + the mouse. This works by simulating arrow keystrokes, which may not work + reliably for some shells or programs. This feature can be disabled with + the `terminal.integrated.altClickMovesCursor` setting. + +### Mouse events mode + +When applications running in the terminal turn on mouse events mode, such + as Vim mouse mode, mouse interaction is sent to the application instead of + the terminal. This means that clicking and dragging will no longer create + a selection. Terminal selection can be forced by holding the{' '} + `Alt` key on Windows and Linux, this can also be done with the{' '} + `Option` key on macOS but requires enabling the{' '} + `terminal.integrated.macOptionClickForcesSelection` setting + first. + +## Find + +The integrated terminal has find functionality that can be triggered with{' '} + `Ctrl+F` . + +## Run selected text + +To use the `runSelectedText` command, select text in an editor + and run the command{' '} + Terminal: Run Selected Text in Active Terminal via the{' '} + Command Palette `(Ctrl+Shift+P)` , the + terminal will attempt to run the selected text. If no text is selected in + the active editor, the entire line that the cursor is on will run in the + terminal. + +## Maximizing the terminal + +The terminal view can be maximized by clicking the maximize panel size + button with the upwards chevron icon. This will temporarily hide the + editors and maximize the panel. This is useful to temporarily focus on a + large amount of output. Some developers use AVAP TM Dev Studioe + as a standalone terminal by opening a new window, maximizing the panel, + and hiding the side bar. + +Note that the panel can only be maximized if its alignment option is set + to Center . + +## Select all + +There is a Terminal: Select All command, which is bound + to Cmd+A on macOS, but does not have a default keybinding on Windows and + Linux as it may conflict with shell hotkeys. To use `Ctrl+A` to + select all, add this custom keybinding: + +```javascript +{ + ` `"key": "ctrl+a", + ` `"command": "workbench.action.terminal.selectAll", + ` `"when": "terminalFocus && !isMac" + + }, +``` + +## Drag and drop file paths + +Dragging a file into the terminal will input the path into the terminal, + with escaping to match the active shell. + +## Automating terminals with tasks + +The Tasks feature can be used to automate the launching of terminals, for + example, the following `.vscode/tasks.json` file will launch a + Command Prompt and PowerShell terminal in a single terminal group when the + window starts: + +```javascript +{ + ` `"version": "2.0.0", + ` `"presentation": { + ` `"echo": false, + ` `"reveal": "always", + ` `"focus": false, + ` `"panel": "dedicated", + ` `"showReuseMessage": true + ` `}, + ` `"tasks": [` `{ + ` `"label": "Create terminals", + ` `"dependsOn": [` `"First", + ` `"Second" + ` `], + ` `// Mark as the default build task so cmd/ctrl+shift+b will + create them + ` `"group": { + ` `"kind": "build", + ` `"isDefault": true + ` `}, + ` `// Try start the task on folder open + ` `"runOptions": { + ` `"runOn": "folderOpen" + ` `} + ` `}, + ` `{ + ` `// The name that shows up in terminal tab + ` `"label": "First", + ` `// The task will launch a shell + ` `"type": "shell", + ` `"command": "", + ` `// Set the shell type + ` `"options": { + ` `"shell": { + ` `"executable": "cmd.exe", + ` `"args": [] + ` `} + ` `}, + ` `// Mark as a background task to avoid the spinner animation on + the terminal tab + ` `"isBackground": true, + ` `"problemMatcher": [], + ` `// Create the tasks in a terminal group + ` `"presentation": { + ` `"group": "my-group" + ` `} + ` `}, + ` `{ + ` `"label": "Second", + ` `"type": "shell", + ` `"command": "", + ` `"options": { + ` `"shell": { + ` `"executable": "pwsh.exe", + ` `"args": [] + ` `} + ` `}, + ` `"isBackground": true, + ` `"problemMatcher": [], + ` `"presentation": { + ` `"group": "my-group" + ` `} + ` `} + ` `] + + } +``` + +This file could be committed to the repository to share with other + developers or created as a user task via the{' '} + `workbench.action.tasks.openUserTasks` command. + +## Working directory + +By default, the terminal will open at the folder that is opened in the + Explorer. The `terminal.integrated.cwd` setting allows + specifying a custom path to open instead: + +```javascript +{ + ` `"terminal.integrated.cwd": "/home/user" + + } +``` + +Split terminals on Windows will start in the directory that the parent + terminal started with. On macOS and Linux, split terminals will inherit + the current working directory of the parent terminal. This behavior can be + changed using the `terminal.integrated.splitCwd` setting: + +```javascript +{ + ` `"terminal.integrated.splitCwd": "workspaceRoot" + + } +``` + +There are also extensions available that give more options such as{' '} + + Terminal Here + + . + +## Fixed dimension terminals + +The Terminal: Set Fixed Dimensions command allows + changing the number of columns and rows that the terminal and it's + backing pseudoterminal uses. This will add scroll bars when necessary, + which may lead to an unpleasant UX and is generally not recommended, but + it is a common ask on Windows in particular for reading logs or long lines + when paging tools aren't available. + +You can also right-click on a terminal tab and select{' '} + Toggle Size to Content Width `(Alt+Z)` {' '} + to resize the number of terminal columns to the largest wrapped line in + the terminal. + +## Next steps + +The basics of the terminal have been covered in this document. Read on to + find out more about: + +* Tasks - Tasks let you integrate with external tools and leverage the terminal heavily. +* Mastering AVAP TM Dev Studio's Terminal - An external blog with plenty of power user tips for the terminal. +* Explore terminal commands by browsing the keyboard shortcuts within AVAP TM Dev Studio ( Preferences: Open Keyboard Shortcuts then search on 'terminal'). + +## Common questions + +### I'm having problems launching the terminal + +There's a dedicated troubleshooting guide for these sorts of problems. + +### How do I create an Admin terminal? + +The integrated terminal shell is running with the permissions of AVAP + TM Dev Studio. If you need to run a shell command with elevated + (administrator) or different permissions, use platform utilities + such as `runas.exe` within a terminal. + +You can learn more about customizing terminals via terminal profiles in + Configuring Profiles. + +### Can I add a keyboard shortcut for the Explorer's Open in Integrated + Terminal command? + +You can open new terminals for specific folders from the Explorer via the{' '} + Open in Integrated Terminal context menu command. + +By default, there is no keyboard shortcut associated with{' '} + Open in Integrated Terminal but you can add your own via + the Keyboard Shortcuts editor `(Ctrl+K Ctrl+S)` to add + a keybinding to your keybindings.json. + +The `keybindings.json` example below adds the keyboard shortcut{' '} + `Ctrl+T` for openInTerminal. + +```javascript +{ + ` `"key": "ctrl+t", + ` `"command": "openInTerminal", + ` `"when": "filesExplorerFocus" + + } +``` + +### Why is nvm complaining about a prefix option when the integrated terminal + is launched? + +nvm (Node Version Manager) users often see this error for the + first time inside AVAP TM Dev Studio's integrated terminal: + +```javascript +nvm is not compatible with the npm config "prefix" option: currently set + to "/usr/local" + + Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.1 + --silent` to unset it +``` + +This is mostly a macOS problem and does not happen in external terminals. + The typical reasons for this are the following: + +* `npm` was globally installed using another instance of{' '} `node` that is somewhere in your path ( `such as /usr/local/bin/npm` ). +* To get the development tools on the `$PATH` , AVAP TM Dev Studio will launch a bash login shell on startup. This means that your ~/.bash_profile has already run and when an integrated terminal launches, it will run another login shell, reordering the $PATH potentially in unexpected ways. + +To resolve this issue, you need to track down where the old{' '} + `npm` is installed and remove both it and its out-of-date + node_modules. Find the `nvm` initialization script and run{' '} + `which npm` before it runs, which should print the path when + you launch a new terminal. + +Once you have the path to npm, find the old node_modules by resolving the + symlink by running a command something like this: + +```javascript +ls -la /usr/local/bin | grep "np[mx]" +``` + +This will give you the resolved path at the end: + +```javascript +... npm -> ../lib/node\_modules/npm/bin/npm-cli.js + + ... npx -> ../lib/node\_modules/npm/bin/npx-cli.js +``` + +From there, removing the files and relaunching AVAP TM Dev + Studio should fix the issue: + +```javascript +rm /usr/local/bin/npm /usr/local/lib/node\_modules/npm/bin/npm-cli.js + + rm /usr/local/bin/npx /usr/local/lib/node\_modules/npm/bin/npx-cli.js +``` + +### Why does macOS make a ding sound when I resize terminal split panes? + +The keybindings ⌃⌘← and ⌃⌘→ are the defaults for resizing individual split + panes in the terminal. While they work, they also cause a system + "invalid key" sound to play due to an issue in Chromium. The{' '} + + recommended workaround + {' '} + is to tell macOS to no-op for these keybindings by running this in your + terminal: + +```javascript +mkdir -p ~/Library/KeyBindings + + cat > ~/Library/KeyBindings/DefaultKeyBinding.dict <` setting. +* `icon` : An icon ID to use for the profile. +* `color` : A theme color ID to style the icon. + +The default profile can be defined manually with the{' '} + `terminal.integrated.defaultProfile.\*` settings. This should + be set to the name of an existing profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"my-pwsh": { + ` `"source": "PowerShell", + ` `"args": ["-NoProfile"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "my-pwsh" + + } +``` + +## Removing built-in profiles + +To remove a built-in profile and prevent it from showing up in the new + terminal dropdown, set the name of the profile to `null` . For + example, to remove the `Git Bash` profile on Windows, use this + setting: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Git Bash": null + ` `} + + } +``` + +## Configuring the task/debug profile + +By default, the task/debug features will use the default profile. This may + not be ideal if your default has a heavy PowerShell startup script or a + non-POSIX compliant shell for example. To configure a profile to be used + only in the debug/tasks features, use the{' '} + `terminal.integrated.automationProfile` . + `` setting: + +```javascript +{ + ` `"terminal.integrated.defaultProfile.osx": "fish", + ` `// Use a fully POSIX-compatible shell and avoid running a + complex ~/.config/fish/config.fish + ` `// for tasks and debug + ` `"terminal.integrated.automationProfile.osx": { + ` `"path": "/bin/sh" + ` `} + + } +``` + +## Unsafe profile detection + +Certain shells are installed in unsafe paths by default, like a path that + could be written to by another user on a Windows environment. AVAP + TM Dev Studio will still detect these but not expose them as a + proper profile until they have been explicitly configured via the{' '} + Terminal: Select Default Profile command. When + configuring an unsafe profile, there will be a warning before it's + added: + +## Cmder + +Cmder itself is a terminal, but you can use the [Cmder] shell in AVAP + TM Dev Studio with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"cmder": { + ` `"path": "C:\\WINDOWS\\System32\\cmd.exe", + ` `"args": ["/K", "C:\\cmder\\vendor\\bin\\vscode\_init.cmd"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "cmder" + + } +``` + +This profile should be picked up automatically when the{' '} + `CMDER\_ROOT` environment variable is set. It will also be + detected as an unsafe profile if installed at `C:\cmder` . You + may refer to Cmder's wiki for more information. + +## Cygwin + +Cygwin itself is a terminal, but you can use the Cygwin shell in AVAP + TM Dev Studio with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Cygwin": { + ` `"path": "C:\\cygwin64\\bin\\bash.exe", + ` `"args": ["--login"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "Cygwin" + + } +``` + +This profile should be detected automatically as an unsafe profile when + installed at the default paths `C:\cygwin` or + `C:\cygwin64` . + +## Git Bash + +A limitation of Git Bash when AVAP TM Dev Studio uses bash.exe + (the shell) as opposed to git-bash.exe (the terminal) is + that history will not be retained across shell sessions. You can work + around this by adding the following to your `~/.bashrc` a or{' '} + `~/.bash\_profile` files: + +```javascript +export PROMPT\_COMMAND='history -a' +``` + +This will cause the shell to call history -a whenever the prompt is + printed which flushes the session's current session commands to the + backing history file. + +## MSYS2 + +MSYS2's bash shell can be configured with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"bash (MSYS2)": { + ` `"path": "C:\\msys64\\usr\\bin\\bash.exe", + ` `"args": ["--login", "-i"], + ` `"env": { "CHERE\_INVOKING": "1" } + ` `} + ` `} + + } +``` + +The `CHERE_INVOKING` environment variable is used to tell the + login initialization script to preserve the working directory, instead of + opening at `$HOME` . + +This profile should be detected automatically as an{' '} + unsafe profile when installed at + the default path `C:\\msys64` . + +## Windows PowerShell + +When PowerShell 6+ is installed, Windows PowerShell is not included in the + profiles list by default. To add Windows PowerShell as a profile, choose + the Select Default Profile option in the new terminal + dropdown and select the Windows PowerShell item. This will configure the + profile and set it as your default. + +## WSL + +When running AVAP TM Dev Studio on your local machine, Windows + Subsystem for Linux shells should be automatically detected. Depending on + your setup, this may be a nuisance if you have a lot of distros installed. + For finer control over the WSL profiles the automatic detection can be + disabled with the `terminal.integrated.useWslProfiles setting` , + then here's an example of how to manually configure a WSL shell: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Debian (WSL)": { + ` `"path": "C:\\WINDOWS\\System32\\wsl.exe", + ` `"args": [` `"-d", + ` `"Debian" + ` `] + ` `} + ` `} + + } +``` + +## Common questions + +### Why are there duplicate paths in the terminal's $PATH environment + variable and/or why are they reversed on macOS? + +This can happen on macOS because of how the terminal launches using AVAP + TM Dev Studio's environment. When AVAP TM Dev + Studio launches for the first time, to source your "development + environment," it launches your configured shell as a{' '} + login shell , which runs your{' '} + `~/.profile/~/.bash\_profile/~/.zprofile` scripts. Now when the + terminal launches, it also runs as a login shell, which will put the + standard paths to the front (for example,{' '} + `/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin` ) and + reinitialize your shell environment. + +To get a better understanding, you can simulate what is happening by + launching an inner login shell within your operating system's built-in + terminal: + +```javascript +\# Add /test to the beginning of $PATH + + export PATH=/test:$PATH + + \# Echo $PATH, /test should be at the beginning + + echo $PATH + + \# Run bash as a login shell + + bash -l + + \# Echo $PATH, the values should be jumbled + + echo $PATH +``` + +Unfortunately, unlike in Linux, standalone macOS terminals all run as + login shells by default, since macOS does not run a login shell when the + user logs into the system. This encourages "bad behavior," like + initializing aliases in your profile script when they should live in your{' '} + `rc` script as that runs on non-login shells. + +There are two direct fixes for this. The first is to set{' '} + `"terminal.integrated.inheritEnv": false` , which will + strip most environment variables from the terminal's environment, + except for some important ones (like `HOME` ,{' '} + `SHELL` , `TMPDIR` , etc.). + +The other fix is to no longer run a login shell in the terminal by + creating a terminal profile and setting its args to []. If you go with + this fix, you will want to make sure any aliases in your profile scripts + are moved over to your `~/.bashrc/~/.zshrc` file since aliases + only apply to the shell they're set in. diff --git a/docs/developer.avapframework.com/Transacciones_EN.md b/docs/developer.avapframework.com/Transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Transaction_search_EN.md b/docs/developer.avapframework.com/Transaction_search_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Transferencias_masivas_de_dinero_EN.md b/docs/developer.avapframework.com/Transferencias_masivas_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/USER_GUIDE-BasicEditing.md b/docs/developer.avapframework.com/USER_GUIDE-BasicEditing.md new file mode 100644 index 0000000..a9e99b4 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE-BasicEditing.md @@ -0,0 +1,548 @@ +AVAP™ Dev Studio 2024 is an editor first and foremost, and includes the + features you need for highly productive source code editing. This topic + takes you through the basics of the editor and helps you get moving with + your code. + +## Keyboard shortcuts + +Being able to keep your hands on the keyboard when writing code is crucial + for high productivity. AVAP™ DS Code has a rich set of default keyboard + shortcuts as well as allowing you to customize them. + +* Keyboard Shortcuts Reference - Learn the most commonly used and popular keyboard shortcuts by downloading the reference sheet. +* Install a Keymap extension - Use the keyboard shortcuts of your old editor (such as Sublime Text, Atom, and Vim) in AVAP™ DS Code by installing a Keymap extension. +* Customize Keyboard Shortcuts - Change the default keyboard shortcuts to fit your style. + +## Multiple selections (multi-cursor) + +AVAP™ DS Code supports multiple cursors for fast simultaneous edits. You + can add secondary cursors (rendered thinner) with Alt+Click. Each + cursor operates independently based on the context it sits in. A common + way to add more cursors is with ⌥⌘↓ or ⌥⌘↑ that insert cursors below or + above. + +Note: Your graphics card driver (for example NVIDIA) might + overwrite these default shortcuts. + +IMAGEN + +`⌘D` selects the word at the cursor, or the next occurrence of + the current selection. + +IMAGEN + +### Multi-cursor modifier + +If you'd like to change the modifier key for applying multiple cursors + to Cmd+Click on macOS and Ctrl+Click on Windows and Linux, you can do so + with the editor.multiCursorModifier setting. This lets users coming from + other editors such as Sublime Text or Atom continue to use the keyboard + modifier they are familiar with. + +The setting can be set to: + +* ctrlCmd - Maps to Ctrl on Windows and Cmd on macOS. +* alt - The existing default Alt. + +There's also a menu item Use Ctrl+Click for Multi-Cursor in the + Selection menu to quickly toggle this setting. + +The Go to Definition and Open Link gestures will also respect this setting + and adapt such that they do not conflict. For example, when the setting is + ctrlCmd, multiple cursors can be added with Ctrl/Cmd+Click, and opening + links or going to definition can be invoked with Alt+Click. + +### Shrink/expand selection + +Quickly shrink or expand the current selection. Trigger it with ⌃⇧⌘← and + ⌃⇧⌘→. + +Here's an example of expanding the selection with ⌃⇧⌘→: + +IMAGEN + +## Column (box) selection + +Place the cursor in one corner and then hold Shift+Alt while dragging to + the opposite corner: + +IMAGEN + +Note: This changes to Shift+Ctrl/Cmd when using Ctrl/Cmd as multi-cursor + modifier. + +There are also default key bindings for column selection on macOS and + Windows, but not on Linux. + +You can edit your `keybindings.json` to bind them to something + more familiar if you want. + +The user setting Editor: Column Selection controls this feature. Once this + mode is entered, as indicated in the Status bar, the mouse gestures and + the arrow keys will create a column selection by default. This global + toggle is also accessible via the Selection > Column Selection Mode + menu item. In addition, one can also disable Column Selection mode from + the Status bar. + +## Save / Auto Save + +By default, AVAP™ DS requires an explicit action to save your changes to + disk, ⌘S. + +However, it's easy to turn on `Auto Save` , which will save + your changes after a configured delay or when focus leaves the editor. + With this option turned on, there is no need to explicitly save the file. + The easiest way to turn on `Auto Save` is with the** File > + Auto Save **toggle that turns on and off save after a delay. + +For more control over `Auto Save` , open User or Workspace + settings and find the associated settings: + +* files.autoSave: Can have the values: off - to disable auto save. afterDelay - to save files after a configured delay (default 1000 ms). onFocusChange - to save files when focus moves out of the editor of the dirty file. onWindowChange - to save files when the focus moves out of the AVAP™ DS window. +* off - to disable auto save. +* afterDelay - to save files after a configured delay (default 1000 ms). +* onFocusChange - to save files when focus moves out of the editor of the dirty file. +* onWindowChange - to save files when the focus moves out of the AVAP™ DS window. +* files.autoSaveDelay: Configures the delay in milliseconds when files.autoSave is configured to afterDelay. The default is 1000 ms. + +## Hot Exit + +AVAP™ DS will remember unsaved changes to files when you exit by default. + Hot exit is triggered when the application is closed via File > Exit + (Code > Quit on macOS) or when the last window is closed. + +You can configure hot exit by setting files.hotExit to the following + values: + +* "off": Disable hot exit. +* "onExit": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu). All windows without folders opened will be restored upon next launch. +* "onExitAndWindowClose": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu), and also for any window with a folder opened regardless of whether it is the last window. All windows without folders opened will be restored upon next launch. To restore folder windows as they were before shutdown, set window.restoreWindows to all. + +If something happens to go wrong with hot exit, all backups are stored in + the following folders for standard install locations: + +* Windows %APPDATA%\Code\Backups +* macOS $HOME/Library/Application Support/Code/Backups +* Linux $HOME/.config/Code/Backups + +### Find and Replace + +AVAP™ DS allows you to quickly find text and replace in the currently + opened file. Press ⌘F to open the Find Widget in the editor, search + results will be highlighted in the editor, overview ruler and minimap. + +If there are more than one matched result in the current opened file, you + can press Enter and ⇧Enter to navigate to next or previous result when the + find input box is focused. + +When the Find Widget is opened, it will automatically populate the + selected text in the editor into the find input box. If the selection is + empty, the word under the cursor will be inserted into the input box + instead. + +IMAGEN + +This feature can be turned off by setting{' '} + ` + editor.find.seedSearchStringFromSelection to "never". + ` + +By default, the find operations are run on the entire file in the editor. + It can also be run on selected text. You can turn this feature on by + clicking the hamburger icon on the Find Widget. + +IMAGEN + +If you want it to be the default behavior of the Find Widget, you can set{' '} + `editor.find.autoFindInSelection` to `always` , or to{' '} + `multiline` , if you want it to be run on selected text only + when multiple lines of content are selected. + +In addition to find and replace with plain text, the Find Widget also has + three advanced search options: + +* Match Case +* Match Whole Word +* Regular Expression + +The replace input box support case preserving, you can turn it on by + clicking the Preserve Case ( AB ) button. + +You can search multiple line text by pasting the text into the Find input + box and Replace input box. Pressing `Ctrl+Enter` inserts a new + line in the input box. + +IMAGEN + +While searching long text, the default size of Find Widget might be too + small. You can drag the left sash to enlarge the Find Widget or double + click the left sash to maximize it or shrink it to its default size. + +IMAGEN + +## Search across files + +AVAP™ DS allows you to quickly search over all files in the currently + opened folder. Press ⇧⌘F and enter your search term. Search results are + grouped into files containing the search term, with an indication of the + hits in each file and its location. Expand a file to see a preview of all + of the hits within that file. Then single-click on one of the hits to view + it in the editor. + +IMAGEN + +You can configure advanced search options by clicking the ellipsis + (Toggle Search Details) below the search box on the right (or + press ⇧⌘J). This will show additional fields to configure the search. + +### Advanced search options + +IMAGEN + +In the two input boxes below the search box, you can enter patterns to + include or exclude from the search. If you enter example, that will match + every folder and file named example in the workspace. If you enter + ./example, that will match the folder example/ at the top level of your + workspace. Use , to separate multiple patterns. Paths must use forward + slashes. You can also use glob pattern syntax, for example: + +* `*` to match zero or more characters in a path segment +* `?` to match on one character in a path segment +* `**` to match any number of path segments, including none +* `{}` to group conditions (for example { .html, .txt} matches all HTML and text files) +* `[]` to declare a range of characters to match (example.[0-9] to match on example.0, example.1, …) +* `[!...]` to negate a range of characters to match (example.[!0-9] to match on example.a, example.b, but not example.0) + +AVAP™ DS excludes some folders by default to reduce the number of search + results that you are not interested in (for example: + node_modules). Open settings to change these rules under the + files.exclude and search.exclude section. + +Note that glob patterns in the Search view work differently than in + settings such as files.exclude and search.exclude. In the settings, you + must use * + + /example to match a folder named example in subfolder folder1/example in + your workspace. In the Search view, the * + {' '} + prefix is assumed. The glob patterns in these settings are always + evaluated relative to the path of the workspace folder. + +Also note the Use Exclude Settings and Ignore Files toggle button in the + files to exclude box. The toggle determines whether to exclude files that + are ignored by your .gitignore files and/or matched by your files.exclude + and search.exclude settings. + +Tip: From the Explorer, you can right-click on a folder and select Find in + Folder to search inside a folder only. + +Search and replace You can also Search and Replace across files. Expand + the Search widget to display the Replace text box. + +search and replace + +When you type text into the Replace text box, you will see a diff display + of the pending changes. You can replace across all files from the Replace + text box, replace all in one file or replace a single change. + +search and replace diff view + +Tip: You can quickly reuse a previous search term by using ↓ and ↑ to + navigate through your search term history. + +Case changing in regex replace AVAP™ DS supports changing the case of + regex matching groups while doing Search and Replace in the editor or + globally. This is done with the modifiers \u\U\l\L, where \u and \l will + upper/lowercase a single character, and \U and \L will upper/lowercase the + rest of the matching group. + +Example: + +Changing case while doing find and replace + +The modifiers can also be stacked - for example, \u\u\u$1 will uppercase + the first three characters of the group, or \l\U$1 will lowercase the + first character, and uppercase the rest. The capture group is referenced + by $n in the replacement string, where n is the order of the capture + group. + +Search Editor Search Editors let you view workspace search results in a + full-sized editor, complete with syntax highlighting and optional lines of + surrounding context. + +Below is a search for the word 'SearchEditor' with two lines of + text before and after the match for context: + +Search Editor overview + +The Open Search Editor command opens an existing Search Editor if one + exists, or to otherwise create a new one. The New Search Editor command + will always create a new Search Editor. + +In the Search Editor, results can be navigated to using Go to Definition + actions, such as F12 to open the source location in the current editor + group, or ⌘K F12 to open the location in an editor to the side. + Additionally, double-clicking can optionally open the source location, + configurable with the search.searchEditor.doubleClickBehaviour setting. + +You can also use the Open New Search Editor button at the top of the + Search view, and can copy your existing results from a Search view over to + a Search Editor with the Open in editor link at the top of the results + tree, or the Search Editor: Open Results in Editor command. + +Search Editor Button + +The Search Editor above was opened by selecting the Open New Search Editor + button (third button) on the top of the Search view. + +Search Editor commands and arguments search.action.openNewEditor - Opens + the Search Editor in a new tab. search.action.openInEditor - Copy the + current Search results into a new Search Editor. + search.action.openNewEditorToSide - Opens the Search Editor in a new + window next to the window you currently have opened. There are two + arguments that you can pass to the Search Editor commands + (search.action.openNewEditor, search.action.openNewEditorToSide) + to allow keybindings to configure how a new Search Editor should behave: + +triggerSearch - Whether a search be automatically run when a Search Editor + is opened. Default is true. focusResults - Whether to put focus in the + results of a search or the query input. Default is true. For example, the + following keybinding runs the search when the Search Editor is opened but + leaves the focus in the search query control. + +{ "key": "ctrl+o", "command": + "search.action.openNewEditor", "args": { + "query": "AVAP™ DS", "triggerSearch": true, + "focusResults": false } } Search Editor context + default The search.searchEditor.defaultNumberOfContextLines setting has a + default value of 1, meaning one context line will be shown before and + after each result line in the Search Editor. + +Reuse last Search Editor configuration The + search.searchEditor.reusePriorSearchConfiguration setting (default is + false) lets you reuse the last active Search Editor's + configuration when creating a new Search Editor. + +IntelliSense We'll always offer word completion, but for the rich + languages, such as JavaScript, JSON, HTML, CSS, SCSS, Less, C# and + TypeScript, we offer a true IntelliSense experience. If a language service + knows possible completions, the IntelliSense suggestions will pop up as + you type. You can always manually trigger it with ⌃Space. By default, Tab + or Enter are the accept keyboard triggers but you can also customize these + key bindings. + +Tip: The suggestions filtering supports CamelCase so you can type the + letters which are upper cased in a method name to limit the suggestions. + For example, "cra" will quickly bring up + "createApplication". + +Tip: IntelliSense suggestions can be configured via the + editor.quickSuggestions and editor.suggestOnTriggerCharacters settings. + +JavaScript and TypeScript developers can take advantage of the npmjs type + declaration (typings) file repository to get IntelliSense for + common JavaScript libraries (Node.js, React, Angular). You can + find a good explanation on using type declaration files in the JavaScript + language topic and the Node.js tutorial. + +Learn more in the IntelliSense document. + +Formatting AVAP™ DS has great support for source code formatting. The + editor has two explicit format actions: + +Format Document (⇧⌥F) - Format the entire active file. Format + Selection (⌘K ⌘F) - Format the selected text. You can invoke these + from the Command Palette (⇧⌘P) or the editor context menu. + +AVAP™ DS has default formatters for JavaScript, TypeScript, JSON, HTML, + and CSS. Each language has specific formatting options (for example, + html.format.indentInnerHtml) which you can tune to your preference in + your user or workspace settings. You can also disable the default language + formatter if you have another extension installed that provides formatting + for the same language. + +"html.format.enable": false Along with manually invoking code + formatting, you can also trigger formatting based on user gestures such as + typing, saving or pasting. These are off by default but you can enable + these behaviors through the following settings: + +editor.formatOnType - Format the line after typing. editor.formatOnSave - + Format a file on save. editor.formatOnPaste - Format the pasted content. + Note: Not all formatters support format on paste as to do so they must + support formatting a selection or range of text. + +In addition to the default formatters, you can find extensions on the + Marketplace to support other languages or formatting tools. There is a + Formatters category so you can easily search and find formatting + extensions. In the Extensions view search box, type 'formatters' + or 'category:formatters' to see a filtered list of extensions + within AVAP™ DS + +Folding You can fold regions of source code using the folding icons on the + gutter between line numbers and line start. Move the mouse over the gutter + and click to fold and unfold regions. Use Shift + Click on the folding + icon to fold or unfold the region and all regions inside. + +Folding + +You can also use the following actions: + +Fold (⌥⌘[) folds the innermost uncollapsed region at the cursor. + Unfold (⌥⌘]) unfolds the collapsed region at the cursor. Toggle + Fold (⌘K ⌘L) folds or unfolds the region at the cursor. Fold + Recursively (⌘K ⌘[) folds the innermost uncollapsed region at the + cursor and all regions inside that region. Unfold Recursively (⌘K + ⌘]) unfolds the region at the cursor and all regions inside that + region. Fold All (⌘K ⌘0) folds all regions in the editor. Unfold + All (⌘K ⌘J) unfolds all regions in the editor. Fold Level X + (⌘K ⌘2 for level 2) folds all regions of level X, except the + region at the current cursor position. Fold All Block Comments (⌘K + ⌘/) folds all regions that start with a block comment token. Folding + regions are by default evaluated based on the indentation of lines. A + folding region starts when a line has a smaller indent than one or more + following lines, and ends when there is a line with the same or smaller + indent. + +Folding regions can also be computed based on syntax tokens of the + editor's configured language. The following languages already provide + syntax aware folding: Markdown, HTML, CSS, LESS, SCSS, and JSON. + +If you prefer to switch back to indentation-based folding for one (or + all) of the languages above, use: + +{' '} + "[html]": { "editor.foldingStrategy": + "indentation" }, Regions can also be defined by markers + defined by each language. The following languages currently have markers + defined: + +Language Start region End region Bat ::#region or REM #region ::#endregion + or REM #endregion C# #region #endregion C/C++ #pragma region #pragma + endregion CSS/Less/SCSS / #region / / #endregion / + Coffeescript #region #endregion F# //#region or (#_region) + //#endregion or (#_endregion) Java //#region or // + //#endregion or // + Markdown + + Perl5 #region or =pod #endregion or =cut PHP #region #endregion PowerShell + #region #endregion Python #region or # region #endregion or # endregion + TypeScript/JavaScript //#region //#endregion Visual Basic #Region #End + Region To fold and unfold only the regions defined by markers use: + +Fold Marker Regions (⌘K ⌘8) folds all marker regions. Unfold + Marker Regions (⌘K ⌘9) unfolds all marker regions. Fold selection + The command Create Manual Folding Ranges from Selection (⌘K ⌘,) + creates a folding range from the currently selected lines and collapses + it. That range is called a manual folding range that goes on top of the + ranges computed by folding providers. + +Manual folding ranges can be removed with the command Remove Manual + Folding Ranges (⌘K ⌘.). + +Manual folding ranges are especially useful for cases when there isn't + programming language support for folding. + +Indentation AVAP™ DS lets you control text indentation and whether + you'd like to use spaces or tab stops. By default, AVAP™ DS inserts + spaces and uses 4 spaces per Tab key. If you'd like to use another + default, you can modify the editor.insertSpaces and editor.tabSize + settings. + +```javascript +"editor.insertSpaces": true, + + "editor.tabSize": 4, +``` + +Auto-detection VS Code analyzes your open file and determines the + indentation used in the document. The auto-detected indentation overrides + your default indentation settings. The detected setting is displayed on + the right side of the Status Bar: + +auto detect indentation + +You can click on the Status Bar indentation display to bring up a dropdown + with indentation commands allowing you to change the default settings for + the open file or convert between tab stops and spaces. + +indentation commands + +Note: AVAP™ DS auto-detection checks for indentations of 2, 4, 6 or 8 + spaces. If your file uses a different number of spaces, the indentation + may not be correctly detected. For example, if your convention is to + indent with 3 spaces, you may want to turn off editor.detectIndentation + and explicitly set the tab size to 3. + +```javascript +"editor.detectIndentation": false, + + "editor.tabSize": 3, +``` + +File encoding support Set the file encoding globally or per workspace by + using the files.encoding setting in User Settings or Workspace Settings. + +files.encoding setting + +You can view the file encoding in the status bar. + +Encoding in status bar + +Click on the encoding button in the status bar to reopen or save the + active file with a different encoding. + +Reopen or save with a different encoding + +Then choose an encoding. + +Select an encoding + +Next steps You've covered the basic user interface - there is a lot + more to AVAP™ DS. Read on to find out about: + +Intro Video - Setup and Basics - Watch a tutorial on the basics of AVAP™ + DS. User/Workspace Settings - Learn how to configure AVAP™ DS to your + preferences through user and workspace settings. Code Navigation - Peek + and Goto Definition, and more. Integrated Terminal - Learn about the + integrated terminal for quickly performing command-line tasks from within + AVAP™ DS. IntelliSense - AVAP™ DS brings smart code completions. Debugging + - This is where AVAP™ DS really shines. Common questions Is it possible to + globally search and replace? Yes, expand the Search view text box to + include a replace text field. You can search and replace across all the + files in your workspace. Note that if you did not open AVAP™ DS on a + folder, the search will only run on the currently open files. + +global search and replace + +How do I turn on word wrap? You can control word wrap through the + editor.wordWrap setting. By default, editor.wordWrap is off but if you set + to it to on, text will wrap on the editor's viewport width. + +```javascript +"editor.wordWrap": "on" +``` + +You can toggle word wrap for the AVAP™ DS session with ⌥Z. + +You can also add vertical column rulers to the editor with the + editor.rulers setting, which takes an array of column character positions + where you'd like vertical rulers. + +As in other editors, commands such as Cut and Copy apply to the whole + wrapped line. Triple-click selects the whole wrapped line. Pressing Home + twice moves the cursor to the very beginning of the line. Pressing End + twice moves the cursor to the very end of the line. + +How can I avoid placing extra cursors in word wrapped lines? If you'd + like to ignore line wraps when adding cursors above or below your current + selection, you can pass in { "logicalLine": true } to + args on the keybinding like this: + +{ "key": "shift+alt+down", "command": + "editor.action.insertCursorBelow", "when": + "textInputFocus", "args": { + "logicalLine": true }, }, { "key": + "shift+alt+up", "command": + "editor.action.insertCursorAbove", "when": + "textInputFocus", "args": { + "logicalLine": true }, }, diff --git a/docs/developer.avapframework.com/USER_GUIDE_AVAPforTheWeb.md b/docs/developer.avapframework.com/USER_GUIDE_AVAPforTheWeb.md new file mode 100644 index 0000000..0676be8 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_AVAPforTheWeb.md @@ -0,0 +1,317 @@ +AVAP TM Dev Studio for the Web provides a free, zero-install + Microsoft AVAP TM Dev Studio experience running entirely in your + browser, allowing you to quickly and safely browse source code + repositories and make lightweight code changes. To get started, go to + (link) in your browser. + +AVAP TM Dev Studio for the Web has many of the features of AVAP + TM Dev Studio Desktop that you love, including search and + syntax highlighting while browsing and editing, along with extension + support to work on your codebase and make simpler edits. In addition to + opening repositories, forks, and pull requests from source control + providers like GitHub and Azure Repos, you can also work with code that is + stored on your local machine. + +AVAP TM Dev Studio for the Web runs entirely in your web + browser, so there are certain limitations compared to the desktop + experience, which you can read more about below. + +## Relationship to AVAP™ Dev Studio Desktop + +AVAP TM Dev Studio for the Web provides a browser-based + experience for navigating files and repositories and committing + lightweight code changes. However, if you need access to a runtime to run, + build, or debug your code, you want to use platform features such as a + terminal, or you want to run extensions that aren't supported in the + web, we recommend moving your work to the desktop application, GitHub + Codespaces, or using Remote - Tunnels for the full capabilities of AVAP + TM Dev Studio. In addition, AVAP TM Dev Studio + Desktop lets you use a full set of keyboard shortcuts not limited by your + browser. + +When you're ready to switch, you'll be able to "upgrade" + to the full AVAP TM Dev Studio experience with a few clicks. + +You can also switch between the Stable and Insiders versions of AVAP + TM Dev Studio for the Web by selecting the gear icon, then{' '} + Switch to Insiders Version... , or by navigating directly + to (LINK). + +## Opening a project + +By navigating to (LINK), you can create a new local file or + project, work on an existing local project, or access source code + repositories hosted elsewhere, such as on GitHub and Azure Repos (part + of Azure DevOps). + +You can create a new local file in the web just as you would in a AVAP + TM Dev Studio Desktop environment, using File {' '} + > New File from the Command Palette (F1). + +## GitHub repos + +You can open a GitHub repository in AVAP TM Dev Studio for the + Web directly from a URL, following the schema: (LINK). Using the + AVAP TM Dev Studio repository as an example, this would look + like: (LINK). + +This experience is delivered at a custom (LINK) URL, which is + powered by the GitHub Repositories extension (which is part of the + broader Remote Repositories extension). + +GitHub Repositories allows you to remotely browse and edit a repository + from within the editor, without needing to pull code onto your local + machine. You can learn more about the extension and how it works in our + GitHub Repositories guide. + +You can also open GitHub repositories in `vscode.dev` through + your browser's search bar (aka omnibox) by installing the{' '} + `vscode.dev` extension for Chrome and Edge. Then, type code to + activate the omnibox, followed by your repository's name. Suggestions + are populated by your browser search history, so if the repo you want + doesn't come up, you can also type in the fully qualified{' '} + `/` name to open it, for example{' '} + `microsoft/vscode` . + +If you're already in AVAP TM Dev Studio for the Web at + (LINK), you can alternatively navigate to different repos via the + Remote Repositories extension commands. Select the remote indicator in the + lower left of the Status bar, and you'll be presented with the{' '} + Open Remote Repository... command. + +## Azure Repos + +You can open Azure Repos just like Github repos in AVAP TM Dev + Studio for the Web. + +When you navigate to a URL with the schema (LINK), you will be + able to read, search the files in the repo, and commit your changes to + Azure Repos. You can fetch, pull, and sync changes, and view branches. + +You can open any repository, branch, or tag from Azure Repos in AVAP + TM Dev Studio for the Web by prefixing `vscode.dev` {' '} + to the Azure Repos URL. + +Alternatively, when you are on an Azure DevOps repository or pull request, + you can press (.) to open it in AVAP TM Dev Studio for + the Web. + +## More custom URLs + +Like in the desktop, you can customize AVAP TM Dev Studio for + the Web through a rich ecosystem of extensions that support just about + every back end, language, and service. `vscode.dev` includes + URLs that provide shortcuts to common experiences. + +We've explored a couple of URLs already (LINK and LINK). + Here's a more complete list: + +Please note that some URLs must be entered in a specific way (for + example, (LINK) requires an active Live Share session). Please + review each service's documentation for specific access and usage + information. + +There's more information on some of these URLs below. + +### Themes + +You can share and experience color themes through AVAP TM Dev + Studio for the Web through the URL schema: (LINK). + +For instance, you can go to (LINK) to experience the Night Owl + theme without having to go through the download and install process. + +Note: The color theme URL schema works for themes that are fully + declarative (no code). + +An extension can define multiple themes. You can use the schema{' '} + `/editor/theme//` . If no + themeName is specified, AVAP TM Dev Studio for the Web will take + the first theme. + +As a theme author, you can add the following badge to your extension + readme to allow users to easily try out your theme in AVAP TM {' '} + Dev Studio for the Web (replacing `` {' '} + with your theme extension's unique identifier): + +### Visual Studio Live Share + +Live Share guest sessions are available in the browser through the + (LINK) URL. The sessionId will be passed to the extension to make + joining a seamless experience. + +## Continue working in a different environment + +In some cases, you will want to access a different environment that has + the ability to run code. You can switch to working on a repository in a + development environment that has support for a local file system and full + language and development tooling. + +The GitHub Repositories extension makes it easy for you to clone the + repository locally, reopen it on the desktop, or create a GitHub codespace + for the current repository (if you have the GitHub Codespaces + extension installed and access to create GitHub codespaces). To do + this, use the Continue Working On... command available + from the Command Palette (F1) or click on the Remote indicator in + the Status bar. + +## Saving and sharing work + +When working on a local file in the web, your work is saved automatically + if you have Auto Save enabled. You can also save manually as you do when + working in desktop AVAP TM Dev Studio (for example{' '} + File > Save ). + +When working on a remote repository, your work is saved in the + browser's local storage until you commit it. If you open a repo or + pull request using GitHub Repositories, you can push your changes in the + Source Control view to persist any new work. + +You can also continue working in other environments via Continue Working + On. + +The first time that you use Continue Working On with + uncommitted changes, you will have the option to bring your edits to your + selected development environment using Cloud Changes , + which uses a AVAP TM Dev Studio service to store your pending + changes. This is described further in the GitHub Repositories doc. + +## Use your own compute with Remote Tunnels + +You may develop against another machine in AVAP TM Dev Studio + for the Web using the Remote - Tunnels extension. + +The Remote - Tunnels extension lets you connect to a remote machine, like + a desktop PC or virtual machine (VM), via a secure tunnel. You can + then securely connect to that machine from anywhere, without the + requirement of SSH. This lets you "bring your own compute" to + vscode.dev, enabling additional scenarios like running your code in the + browser. + +You may learn more about Remote - Tunnels in its documentation. + +## Safe exploration + +AVAP TM Dev Studio for the Web runs entirely in your web + browser's sandbox and offers a very limited execution environment. + +When accessing code from remote repositories, the web editor doesn't + "clone" the repo, but instead loads the code by invoking the + services' APIs directly from your browser; this further reduces the + attack surface when cloning untrusted repositories. + +When working with local files, AVAP TM Dev Studio for the Web + loads them through your browser's file system access APIs, which limit + the scope of what the browser can access. + +## Run anywhere + +Similar to GitHub Codespaces, AVAP TM Dev Studio for the Web can + run on tablets, like iPads. + +## Language support + +Language support is a bit more nuanced on the web, including code editing, + navigation, and browsing. The desktop experiences are typically powered by + language services and compilers that expect a file system, runtime, and + compute environment. In the browser, these experiences are powered by + language services running in the browser that provide source code + tokenization and syntax colorization, completions, and many single-file + operations. + +Generally, experiences fall into the following categories: + +* Good: For most programming languages, AVAP TM {' '} Dev Studio for the Web gives you code syntax colorization, text-based completions, and bracket pair colorization. Using a Tree-sitter syntax tree through the anycode extension, we're able to provide additional experiences such as Outline/Go to Symbol and{' '} Symbol Search for popular languages such as C/C++, C#, Java, PHP, Rust, and Go. +* Better: The TypeScript, JavaScript, and Python experiences are all powered by language services that run natively in the browser. With these programming languages, you'll get the " Good " experience plus rich single file completions, semantic highlighting, syntax errors, and more. +* Best: For many "webby" languages, such as JSON, HTML, CSS, and LESS, etc., the coding experience in vscode.dev is nearly identical to the desktop (including Markdown preview!). + +You can determine the level of language support in your current file + through the Language Status Indicator in the Status bar: + +## Limitations + +Since AVAP TM Dev Studio for the Web runs completely within the + browser, some experiences will naturally be more constrained when compared + to what you can do in the desktop app. For example, the terminal and + debugger are not available, which makes sense since you can't compile, + run, and debug a Rust or Go application within the browser sandbox. + +### Extensions + +Only a subset of extensions can run in the browser. You can use the + Extensions view to install extensions in the web, and extensions that + cannot be installed will have a warning icon and{' '} + Learn Why link. We expect more extensions to become + enabled over time. + +When you install an extension, it is saved in the browser's local + storage. You can ensure your extensions are synced across AVAP + TM Dev Studio instances, including different browsers and even + the desktop, by enabling Settings Sync. + +When an Extension Pack contains extensions that do not run in the browser + sandbox, you will get an informational message with the option to see the + extensions included in the pack. + +When extensions are executed in the browser sandbox, they are more + restricted. Extensions that are purely declarative, such as most themes, + snippets, or grammars, can run unmodified and are available in AVAP + TM Dev Studio for the Web without any modification from the + extension authors. Extensions that are running code need to be updated to + support running in the browser sandbox. You can read more about what is + involved to support extensions in the browser in the web extension authors + guide. + +There are also extensions that run in the browser with partial support + only. A good example is a language extension that restricts its support to + single files or the currently opened files. + +Edge and Chrome today support the File System API, allowing web pages to + access the local file system. If your browser does not support the File + System API, you cannot open a folder locally, but you can open files + instead. + +You can use AVAP TM Dev Studio for the Web in the latest + versions of Chrome, Edge, Firefox, and Safari. Older versions of each + browser may not work - we only guarantee support for the latest version. + +Tip: One way to check the compatible browser version is + to look at the version of Playright currently used for testing AVAP + TM Dev Studio and review its supported browser versions. You + can find the currently used Playwright version in the AVAP TM {' '} + Dev Studio repo's package.json file at + devDependencies/@playwright/test. Once you know the Playwright version, + for example 1.37, you can then review the{' '} + Browser Versions section in their Release notes. + +Webviews might appear differently or have some unexpected behavior in + Firefox and Safari. You can view issue queries in the AVAP TM {' '} + Dev Studio GitHub repo to track issues related to specific browsers, such + as with the Safari label and Firefox label. + +There are additional steps you can take to improve your browser experience + using AVAP TM Dev Studio for the Web. Review the Additional + browser setup section for more information. + +You can use AVAP TM Dev Studio for the Web on mobile devices, + but smaller screens may have certain limitations. + +Certain keybindings may also work differently in the web. + +## Additional browser setup + +There are additional browser configuration steps you can take when working + with AVAP TM Dev Studio in a browser. + +In certain cases, you may need to open a new tab or window while working + in AVAP TM Dev Studio for the Web. AVAP TM Dev Studio + might ask you for permission to access the clipboard when reading from it. + Depending on your browser, you may grant access to the clipboard or + otherwise allow for pop-up windows in different ways: + +* Chrome, Edge, Firefox: Search for "site permissions" in your browser's settings, or look for the following option in the address bar on the right: + +![Allow clipboard access in the browser][Type in your browser and search a + GitHub repository to open in vscode.dev] + +* Safari: In the Safari browser, go to Preferences... {' '} > Websites > Pop-up Windows > the domain you're accessing (for example, vscode.dev), and select Allow from the dropdown. diff --git a/docs/developer.avapframework.com/USER_GUIDE_Accesibility.md b/docs/developer.avapframework.com/USER_GUIDE_Accesibility.md new file mode 100644 index 0000000..426c697 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_Accesibility.md @@ -0,0 +1,362 @@ +AVAP TM Dev Studio has many features to help make the editor + accessible to all users. Zoom levels and High Contrast colors improve + editor visibility, keyboard-only navigation supports use without a mouse, + and the editor is optimized for screen readers. + +## Zoom + +You can adjust the zoom level in AVAP TM Dev Studio with the{' '} + View > Appearance >{' '} + Zoom commands. Each Zoom command + increases or decreases the zoom level by 20 percent. + +* View > Appearance >{' '} Zoom In (Ctrl+=) - increase the zoom level. +* View > Appearance >{' '} Zoom Out (Ctrl+-) - decrease the zoom level. +* View > Appearance >{' '} Reset Zoom (Ctrl+Numpad0) - reset the zoom level to 0. + +### Persisted zoom level + +When you adjust the zoom level with the View >{' '} + Zoom In / Out commands, the zoom level is persisted in + the `window.zoomLevel` setting. The default value is 0 and each + increment/decrement changes the zoom level by 20 percent. + +## Accessibility help + +The command Open Accessibility Help Alt+F1 opens a help + menu based on the current context. It currently applies to the editor, + terminal, notebook, chat view, and inline chat features. + +You can dismiss the accessibility help menu or open additional + documentation from within the help menu. + +## High Contrast theme + +AVAP TM Dev Studio supports a High Contrast color theme on all + platforms. Use File > Preferences {' '} + > Theme > Color Theme (Ctrl+K + Ctrl+T) to display the Select Color Theme dropdown + and select the High Contrast theme. + +## Color vision accessibility + +You can search for extensions in{' '} + AVAP™ Dev Studio Marketplace that are compatible with + color vision deficiency. Use the Extensions view Ctrl+Shift+X and search + for "color blind" to populate relevant options. + +Once you have installed a color theme from the Marketplace, you can change + the color theme with File >{' '} + Preferences > Theme >{' '} + Color Theme Ctrl+K Ctrl+T. + +### Recommended themes for color vision accessibility + +* GitHub - Accessible to most forms of color blindness and matches the themes in GitHub's settings. +* Gotthard - Optimized for approximately 20 programming languages. +* Blinds - Created for people with deuteranopia, featuring a high contrast color ratio. +* Greative - Considers both color blindness and light sensitivity. +* Pitaya Smoothie - Accessible to most forms of color blindness and compliant with WCAG 2.1 criteria for color contrast. + +## Customizing warning colors + +The default Color Theme for AVAP TM Dev Studio is{' '} + Dark+ . However, you can customize both the theme and + property colors in the user interface. + +To customize the error and warning squiggles, go to File {' '} + > Preferences > Settings for user + settings. Search for "color customizations" to find the{' '} + Workbench: Color Customizations setting, and open your + user settings.json file by selecting{' '} + Edit in settings.json . + +In your `settings.json` file, nest the following code inside + the outermost curly braces. You can assign a color to each object by + entering a hex code. + +```javascript +"workbench.colorCustomizations": { + ` `"editorError.foreground": "#ffef0f", + ` `"editorWarning.foreground": "#3777ff" + + } +``` + +In the following example, the warning color is applied when a comma is + missing after a JSON item. + +* `editorError.foreground` - Overrides the wavy line beneath an error. +* `editorWarning.foreground` - Overrides the wavy line beneath a warning. +* `editorError.background` - Overrides the highlight color of an error. +* `editorWarning.background` - Overrides the highlight color of a warning. + +Assigning a color to the background of `editorError` and + editorWarning also helps to identify potential issues. The color that you + choose will highlight the respective error or warning. The colors shown in + the preceding example, `#ffef0f` (yellow) and{' '} + `#37777ff` (blue), are more accessible to individuals + with common forms of color vision deficiencies. + +### Selecting accessible colors + +The accessibility of colors is subjective to the type of anomalous + trichromacy (color blindness). The level of severity ranges per + person and can be divided into four condition types: + +One of the best approaches to selecting the best colors for a specific + condition is to apply complementary colors. These are colors located + opposite of one another on a color wheel. + +Note : For more information on finding complementary + colors, access the color blind simulator and interactive color wheel at + Adobe Color. + +## Dim unfocused editors and terminals + +Unfocused views can be dimmed to make it clearer where typed input will + go. This is especially useful when working with multiple editor groups or + terminals. Turn on this feature by setting " + `accessibility.dimUnfocused.enabled` ": `true` . + You can control the dimness level with{' '} + `accessibility.dimUnfocused.opacity,` which takes the opacity + fraction from 0.2 to 1 (default 0.75). + +## Keyboard navigation + +AVAP TM Dev Studio provides an exhaustive list of commands in + the Command Palette (Ctrl+Shift+P) so that you + can use AVAP TM Dev Studio without a mouse. Press Ctrl+Shift+P, + then type a command name (for example 'git') to filter the + list of commands. + +AVAP TM Dev Studio also has many preset keyboard shortcuts for + commands. + +You can also set your own keyboard shortcuts. File >{' '} + Preferences > Keyboard Shortcuts {' '} + (Ctrl+K Ctrl+S) opens the Keyboard Shortcuts editor, where you can + discover and modify key bindings for AVAP TM Dev Studio actions. + See Key Bindings for more details on customizing or adding your own + keyboard shortcuts. + +For quick navigation across the workbench, we recommend using{' '} + Focus Next Part (F6) and{' '} + Focus Previous Part (Shift+F6) commands. + +### Anchor selection + +To make it easier to start and end selections with the keyboard, there are + four commands: Set Selection Anchor (Ctrl+K + Ctrl+B), Select From Anchor to Cursor (Ctrl+K + Ctrl+K), Cancel Selection Anchor (Escape) and{' '} + Go to Selection Anchor . + +## Tab navigation + +You can use the Tab key to navigate between UI controls in AVAP + TM Dev Studio. Use Shift+Tab to tab in reverse order. As you + tab through the UI controls, an indicator will appear around each UI + element when it has focus. + +All elements in the workbench support tab navigation. To avoid having too + many tab stops, workbench toolbars and tab lists each have only one. Once + a toolbar or a tab list has focus, you can use the arrow keys to navigate + within them. + +## Tab trapping + +By default, pressing Tab within a source code file inserts the Tab + character (or spaces depending on your indentation setting) and + does not leave the open file. You can toggle Tab trapping with Ctrl+M, and + subsequent Tab keys will move focus out of the file. When default Tab + trapping is off, you will see a Tab moves focus indicator + in the Status Bar. + +Tab trapping also exists in the integrated terminal. The default behavior + for the feature can be configured with `editor.tabFocusMode` . + +You can also toggle Tab trapping on and off from the{' '} + Command Palette (Ctrl+Shift+P) with the{' '} + Toggle Tab Key Moves Focus action. + +Read-only files never trap the Tab key. The{' '} + Integrated Terminal panel respects the Tab trapping mode + and can be toggled with Ctrl+M. + +## Screen readers + +AVAP TM Dev Studio supports screen readers in the editor using a + strategy based on text pagination. The following screen readers have been + tested: + +* Windows: NVDA and JAWS +* macOS: VoiceOver +* Linux: Orca + +For NVDA, we recommend that you stay in focus mode and use the hotkeys to + navigate, instead of using browse mode. + +The Go to Next/Previous Error or Warning actions (F8 + and Shift+F8) allow screen readers to announce the error and warning + messages. + +When suggestions pop up, they are announced to screen readers. Navigate + the suggestions using Ctrl+Up and Ctrl+Down and dismiss them with + Shift+Escape. If suggestions get in your way, you can turn them off with + the `editor.quickSuggestions setting` . + +In the diff view pane, the Go to Next/Previous Difference {' '} + actions (F7 and Shift+F7) will show the Accessible Diff Viewer + with diffs presented in a unified patch format. Navigate through the + unchanged, inserted, or deleted lines with Up and Down. Press Enter to + return focus to the modified pane of the diff editor at the selected line + number (or the closest line number that still exists, if a deleted + line is selected). Use Escape or Shift+Escape to dismiss the + Accessible Diff Viewer. + +## Accessible View + +Run the command Open Accessible View Alt+F2 to display an + Accessible View to inspect content character by character, line by line. + The Accessible View is currently available for hovers, notifications, + Jupyter notebook output, and chat responses. + +## Screen reader mode + +When AVAP TM Dev Studio detects that a screen reader is being + used, it goes into an optimized screen reader mode for UI such as the + editor and Integrated Terminal. The Status bar will display{' '} + Screen Reader Optimized in the lower right. You can exit + screen reader mode by clicking on the display text or using the{' '} + Toggle Screen Reader Accessibility Mode command. + +Some features, such as folding and minimap (code overview), are + disabled when in screen reader mode. You can control whether AVAP + TM Dev Studio uses screen reader mode with the{' '} + Editor: Accessibility Support setting ( + `editor.accessibilitySupport` ) and the values are on, off, + or the default auto that automatically detects a screen reader through + querying the platform. + +## Input control and result navigation + +Navigating between an input control (for example, search or filter + input) and its results is consistent across the Extensions view, the + Keyboard Shortcuts editor, and the Comments, Problems, and Debug Console + panels using (Ctrl+Down) and (Ctrl+Up). + +## Terminal accessibility + +You can display terminal accessibility help via Alt+F1, which describes + useful tips when using a screen reader. One tip is to use Alt+F2 to access + the buffer in the terminal. This will automatically enter the screen + reader's browse mode, depending on your screen reader, for an + accessible view of the entire terminal buffer. + +Use `editor.tabFocusMode` to control whether the terminal + receives the Tab key instead of the workbench, similar to the editor. + +### Shell integration + +The terminal has a feature called shell integration that enables many + additional features that are not found in other terminals. When using a + screen reader, the Run Recent Command and Go to Recent Directory features + are particularly useful. + +Another shell integration powered command,{' '} + Go to Symbol in Accessible View (Ctrl+Shift+O), + lets you navigate between terminal commands similar to{' '} + Go to Symbol in Editor... navigation in the editor. + +### Minimum contrast ratio + +Set `terminal.integrated.minimumContrastRatio` to a number + between 1 and 21 to adjust text color luminance until the desired contrast + ratio is met or pure white ( `#FFFFFF` ) black ( + `#000000` ) is hit. + +Note that the `terminal.integrated.minimumContrastRatio` {' '} + setting will not apply to `powerline` characters. + +## Status bar accessibility + +Once focus is in the Status bar via Focus Next Part {' '} + (F6), you can use arrow navigation to move focus between Status + bar entries. + +### Diff editor accessibility + +There is an Accessible Diff Viewer in the Diff editor that presents + changes in a unified patch format. You can navigate between changes with{' '} + Go to Next Difference (F7) and{' '} + Go to Previous Difference (Shift+F7). Navigate + lines with the arrow keys and press Enter to jump back in the Diff editor + and the selected line. + +## Debugger accessibility + +The AVAP TM Dev Studio debugger UI is user accessible and has + the following features: + +* Debug state changes are read out (for example, 'started', 'breakpoint hit', 'terminated', ...). +* All debug actions are keyboard accessible. +* Both the Run and Debug view and Debug Console support Tab navigation. +* Debug hover is keyboard accessible (Ctrl+K Ctrl+I). +* Keyboard shortcuts can be created to set focus to each debugger area. + +## Audio Cues + +Audio cues indicate if the current line has certain markers such as: + errors, warnings, breakpoints, folded text regions or inline suggestions. + +They are played when the primary cursor changes its line or the first time + a marker is added to the current line. Audio cues are enabled + automatically when a screen reader is attached, but can also be controlled + by the settings `audioCues.\*` . + +The command Help: List Audio Cues lists all available + audio cues, lets you hear each audio cue as you move through the list, and + review which cues are currently enabled. + +Aria alerts also inform screen reader and braille users that certain + markers have been hit. The command Help: List Alerts {' '} + lists all available alerts and informs the user of which are available and + which are enabled. + +## Hover accessibility + +Some hovers cannot be hovered normally, which makes them hard to use with + screen magnifiers. To work around this, hold the `Alt` or{' '} + `Option` key while a hover is active to "lock" it in + place so that it won't hide when hovered. Release the key to unlock + the hover. + +## Current known issues + +AVAP TM Dev Studio has some known accessibility issues, + depending on the platform. For the full list, go to AVAP TM Dev + Studio accessibility issues. + +### macOS + +The editor includes screen reader support for VoiceOver. + +### Linux + +AVAP TM Dev Studio works well with the Orca screen reader. If + Orca in your Linux distribution does not read the editor content: + +* Make sure to have the setting " `editor.accessibilitySupport` ": "on" in AVAP TM Dev Studio. You can do this using settings, or by running the Show Accessibility Help command and pressing Ctrl+E to turn on accessibilitySupport. +* If Orca is still silent, try setting{' '} `ACCESSIBILITY\_ENABLED=1` as an environment variable. + +After you enable that setting, AVAP TM Dev Studio should work + with the Orca screen reader. + +## Next steps + +Read on to find out about: + +* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/USER_GUIDE_CodeNavigation.md b/docs/developer.avapframework.com/USER_GUIDE_CodeNavigation.md new file mode 100644 index 0000000..ac09f6e --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_CodeNavigation.md @@ -0,0 +1,288 @@ +AVAP™ Dev Studio has a high productivity code editor which, when combined + with programming language services, gives you the power of an IDE and the + speed of a text editor. In this topic, we'll first describe AVAP™ DS + Code's language intelligence features (suggestions, parameter + hints, smart code navigation) and then show the power of the core text + editor. + +## Quick file navigation + +The Explorer is great for navigating between files when you are exploring + a project. However, when you are working on a task, you will find yourself + quickly jumping between the same set of files. AVAP™ DS Code provides two + powerful commands to navigate in and across files with easy-to-use key + bindings. + +Hold Ctrl and press Tab to view a list of all files open in an editor + group. To open one of these files, use Tab again to pick the file you want + to navigate to, then release Ctrl to open it. + +Alternatively, you can use Alt+Left and Alt+Right to navigate between + files and edit locations. If you are jumping around between different + lines of the same file, these shortcuts allow you to navigate between + those locations easily. + +## Breadcrumbs + +The editor has a navigation bar above its contents called{' '} + + Breadcrumbs + + . It shows the current location and allows you to quickly navigate between + folders, files, and symbols. + +Breadcrumbs always show the file path and, with the help of language + extensions, the symbol path up to the cursor position. The symbols shown + are the same as in Outline view and Go to Symbol. + +Selecting a breadcrumb in the path displays a dropdown with that + level's siblings so you can quickly navigate to other folders and + files. + +If the current file type has language support for symbols, you will see + the current symbol path and a dropdown of other symbols at the same level + and below. + +You can turn off breadcrumbs with the View >{' '} + Show Breadcrumbs toggle or with the breadcrumbs.enabled{' '} + setting . + +### Breadcrumb customization + +The appearance of breadcrumbs can be customized. If you have very long + paths or are only interested in either file paths or symbols paths, you + can use the breadcrumbs.filePath and breadcrumbs.symbolPath settings. Both + support on, off, and last and they define if or what part of the path you + see. By default, breadcrumbs show file and symbol icons to the left of the + breadcrumb but you can remove the icons by setting breadcrumbs.icons to + false. + +### Symbol order in Breadcrumbs + +You can control how symbols are ordered in the Breadcrumbs dropdown with + the breadcrumbs.symbolSortOrder settings. + +Allowed values are: + +* position - position in the file (default) +* name - alphabetical order +* type - symbol type order + +### Breadcrumb keyboard navigation + +To interact with breadcrumbs, use the Focus Breadcrumbs {' '} + command or press Ctrl+Shift+.. It will select that last element and open a + dropdown that allows you to navigate to a sibling file or symbol. Use the + Left and Right keyboard shortcuts to go to elements before or after the + current element. When the dropdown appears, start typing - all matching + elements will be highlighted and the best match will be selected for quick + navigation. + +You can also interact with breadcrumbs without the dropdown. Press + Ctrl+Shift+; to focus the last element, use Left and Right to navigate, + and use Space to reveal the element in the editor. + +## Go to Definition + +If a language supports it, you can + go to the definition of a symbol by pressing F12. + +If you press Ctrl and hover over a symbol, a preview of the declaration + will appear: + +## Go to Type Definition + +Some languages also support jumping + to the type definition of a symbol by running the{' '} + Go to Type Definition command from either the editor + context menu or the Command Palette . This will take you + to the definition of the type of a symbol. The command + editor.action.goToTypeDefinition is not bound to a keyboard shortcut by + default but you can add your own custom{' '} + keybinding . + +## Go to Implementation + +Languages can also support jumping + to the implementation of a symbol by pressing Ctrl+F12. For an interface, + this shows all the implementors of that interface and for abstract + methods, this shows all concrete implementations of that method. + +## Go to Symbol + +You can navigate symbols inside a file with Ctrl+Shift+O. By typing : the + symbols will be grouped by category. Press Up or Down and navigate to the + place you want. + +## Open symbol by name + +Some languages support jumping to a symbol across files with Ctrl+T. Type + the first letter of a type you want to navigate to, regardless of which + file contains it, and press Enter. + +## Peek + +We think there's nothing worse than a big context switch when all you + want is to quickly check something. That's why we support peeked + editors. When you execute a Go to References search + (via Shift+F12), or a Peek Definition (via + Alt+F12), we embed the result inline: + +You can navigate between different references in the peeked editor and + make quick edits right there. Clicking on the peeked editor filename or + double-clicking in the result list will open the reference in the outer + editor. + +## Bracket matching + +Matching brackets will be highlighted as soon as the cursor is near one of + them. + +### Bracket Pair Colorization + +Matching bracket pairs can also be colorized by setting + editor.bracketPairColorization.enabled to true. + +All colors are themeable and up to six colors can be configured. + +You can use workbench.colorCustomizations to override these + theme-contributed colors in your settings: + +```javascript +"workbench.colorCustomizations": { ` + `"editorBracketHighlight.foreground1": "#FFD700", ` + `"editorBracketHighlight.foreground2": "#DA70D6", ` + `"editorBracketHighlight.foreground3": "#179fff", + }, +``` + +## Reference information + +Some languages like C# support inline reference information, that is + updated live. This allows you to quickly analyze the impact of your edit + or the popularity of your specific method or property throughout your + project: + +## Rename symbol + +Some languages support rename symbol across files. Press F2 and then type + the new desired name and press Enter. All usages of the symbol will be + renamed, across files. + +## Errors & warnings + +Warnings or Errors can be generated either via{' '} + configured tasks , by rich language + services, or by linters, that constantly analyze your code in the + background. Since we love bug-free code, warnings and errors show up in + multiple places: + +* In the Status Bar, there is a summary of all errors and warnings counts. +* You can click on the summary or press Ctrl+Shift+M to display the{' '} PROBLEMS panel with a list of all current errors. +* If you open a file that has errors or warnings, they will be rendered inline with the text and in the overview ruler. + +## Code Action + +Warnings and Errors can provide Code Actions (also known as Quick + Fixes) to help fix issues. These will be displayed in the editor in + the left margin as a lightbulb. Clicking on the lightbulb will either + display the Code Action options or perform the action. + +## Inlay Hints + +Some languages provide inlay hints: that is additional information about + source code that is rendered inline. This is usually used to show inferred + types. The sample below shows inlay hints that display the inferred types + of JavaScript variables and function return types. + +Inlay hints can be enabled/disabled with the editor.inlayHints.enabled + setting, the default is enabled. Extensions, like TypeScript or Rust, are + needed to provide the actual inlay hint information. + +## Outgoing link protection + +For your protection, AVAP™ DS Code displays a prompt before opening an + outgoing website link from the editor. + +You can proceed to the external website in your browser or have the + options to copy the link or cancel the request. If you choose{' '} + Configure Trusted Domains , a dropdown lets you trust the + exact URL, trust the URL domain and subdomains, or trust all domains to + disable outgoing link protection. + +The option to Manage Trusted Domains , also available at + any time from the Command Palette, brings up the{' '} + Trusted Domains JSON file, where you can add, remove, or + modify trusted domains. + +```javascript +// You can use the "Manage Trusted Domains" command to open this file. + + // Save this file to apply the trusted domains rules. + [ ` `"\*.twitter.com" + ] +``` + +The Trusted Domains JSON file also has comments with + examples of the supported domain formats and a list of the domains trusted + by default, such as https://*.visualstudio.com and + https://*.microsoft.com. + +## Next steps + +Now that you know how the editor works, time to try a few other things... + +* Intro Video - Code Editing - Watch an introductory video on code editing features. +* User Interface - In case you missed a basic orientation around AVAP™ DS Code. +* Key Bindings - Learn how to modify key bindings to your preference. +* Debugging - This is where AVAP™ DS Code really shines. + +## Common questions + +### How can I automatically select the second entry in Quick Open instead of + the first? + +With the command workbench.action.quickOpenPreviousEditor, you can have + the second entry automatically selected in Quick Open. This can be useful + if you want to select the previous entry from the list without having to + invoke another keybinding: + +```javascript +[` `{ + ` `"key": "ctrl+p", + ` `"command": "workbench.action.quickOpenPreviousEditor" + ` `}, + ` `{ + ` `"key": "ctrl+p", + ` `"command": "-workbench.action.quickOpen" + ` `} + ] +``` + +### How can I configure Ctrl+Tab to navigate across all editors of all groups + +By default, Ctrl+Tab navigates between editors of the same editor group. + If you want to navigate across all opened editors in all groups, you can + create keyboard shortcuts for the + workbench.action.quickOpenPreviousRecentlyUsedEditor and + workbench.action.quickOpenLeastRecentlyUsedEditor commands: + +```javascript +[` `{ + ` `"key": "ctrl+tab", + ` `"command": + "workbench.action.quickOpenPreviousRecentlyUsedEditor", + ` `"when": "!inEditorsPicker" + ` `}, + ` `{ + ` `"key": "ctrl+shift+tab", + ` `"command": "workbench.action.quickOpenLeastRecentlyUsedEditor", + ` `"when": "!inEditorsPicker" + ` `} + ] +``` + +### How can I navigate between recently used editors without a picker + +Here is a list of commands you can use to navigate in editors without + opening a picker: diff --git a/docs/developer.avapframework.com/USER_GUIDE_CommandLineInterface.md b/docs/developer.avapframework.com/USER_GUIDE_CommandLineInterface.md new file mode 100644 index 0000000..6efde20 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_CommandLineInterface.md @@ -0,0 +1,191 @@ +AVAP TM Dev Studio has a powerful command-line interface + built-in that lets you control how you launch the editor. You can open + files, install extensions, change the display language, and output + diagnostics through command-line options (switches). + +If you are looking for how to run command-line tools inside AVAP + TM Dev Studio, see the Integrated Terminal. + +## Command line help + +To get an overview of the AVAP TM Dev Studio command-line + interface, open a terminal or command prompt and type{' '} + `code --help` . You will see the version, usage example, and + list of command line options. + +## Launching from command line + +You can launch AVAP TM Dev Studio from the command line to + quickly open a file, folder, or project. Typically, you open AVAP + TM Dev Studio within the context of a folder. To do this, from + an open terminal or command prompt, navigate to your project folder and + type `code .` : + +Windows and Linux installations should add the AVAP TM Dev + Studio binaries location to your system path. If this isn't the case, + you can manually add the location to the `Path` environment + variable ($PATH on Linux). For example, on Windows, the default + AVAP TM Dev Studio binaries location is{' '} + `AppData\Local\Programs\Microsoft` AVAP TM Dev + Studio\bin. To review platform-specific setup instructions, see Setup. + +## Core CLI options + +Here are optional arguments you can use when starting AVAP TM {' '} + Dev Studio at the command line via code: + +## Opening Files and Folders + +Sometimes you will want to open or create a file. If the specified file + does not exist, AVAP TM Dev Studio will create them for you + along with any new intermediate folders: + +```javascript +code index.html style.css documentation\readme.md +``` + +For both files and folders, you can use absolute or relative paths. + Relative paths are relative to the current directory of the command prompt + where you run `code` . + +If you specify more than one file at the command line, AVAP TM {' '} + Dev Studio will open only a single instance. + +If you specify more than one folder at the command line, AVAP TM {' '} + Dev Studio will create a Multi-root Workspace including each folder. + +## Select a profile + +You can launch AVAP TM Dev Studio with a specific profile via + the `--profile` command-line interface option. You pass the + name of the profile after the - `-profile` argument and open a + folder or a workspace using that profile. The command line below opens the{' '} + `web-sample` folder with the "Web Development" + profile: + +` + code ~/projects/web-sample --profile "Web Development" + ` + +If the profile specified does not exist, a new empty profile with the + given name is created. + +## Working with extensions + +You can install and manage AVAP TM Dev Studio extensions from + the command line. + +## Advanced CLI options + +There are several CLI options that help with reproducing errors and + advanced setup. + +AVAP TM Dev Studio integrates with other remote environments to + become even more powerful and flexible. Our goal is to provide a cohesive + experience that allows you to manage both local and remote machines from + one, unified CLI. + +The AVAP TM Dev Studio Remote - Tunnels extension lets you + connect to a remote machine, like a desktop PC or VM, via a secure tunnel. + Tunneling securely transmits data from one network to another. You can + then securely connect to that machine from anywhere, without the + requirement of SSH. + +We've built functionality into the code CLI that will initiate tunnels + on remote machines. You can run: + +```javascript +code tunnel +``` + +to create a tunnel on your remote machine. You may connect to this machine + through a web or desktop AVAP TM Dev Studio client. + +You can review the other tunneling commands by running code tunnel -help: + +As you may need to run the CLI on a remote machine that can't install + AVAP TM Dev Studio Desktop, the CLI is also available for + standalone install on the AVAP TM Dev Studio download page. + +For more information on Remote Tunnels, you can review the Remote Tunnels + documentation. + +## Open AVAP™ Dev Studio + +You can also open projects and files using the platform's URL handling + mechanism. Use the following URL formats to: + +Open a project + +```javascript +vscode://file/{full path to project}/ + + + vscode://file/c:/myProject/ +``` + +Open a file + +```javascript +vscode://file/{full path to file} + + + vscode://file/c:/myProject/package.json +``` + +Open a file to line and column + +```javascript +vscode://file/{full path to file}:line:column + + + vscode://file/c:/myProject/package.json:5:10 +``` + +You can use the URL in applications such as browsers or file explorers + that can parse and redirect the URL. For example, on Windows, you could + pass a vscode:// URL directly to the Windows Explorer or to the command + line as start vscode://{full path to file}. + +## Next steps + +Read on to find out about: + +* Integrated Terminal - Run command-line tools from inside AVAP TM Dev Studio. +* Basic Editing - Learn the basics of the AVAP TM Dev Studio editor. +* Code Navigation - AVAP TM Dev Studio lets you quickly understand and move through your source code. + +## Common questions + +Your OS cannot find the AVAP TM Dev Studio binary code on its + path. The AVAP TM Dev Studio Windows and Linux installations + should have installed AVAP TM Dev Studio on your path. Try + uninstalling and reinstalling AVAP TM Dev Studio. If code is + still not found, consult the platform-specific setup topics for Windows + and Linux. + +On macOS, you need to manually run the{' '} + Shell Command: Install 'code' command in PATH {' '} + command (available through the Command Palette {' '} + Ctrl+Shift+P). Consult the macOS specific setup topic for details. + +AVAP TM Dev Studio has an Integrated Terminal where you can run + command-line tools from within AVAP TM Dev Studio. + +Not directly through the command line, but AVAP TM Dev Studio + has a Portable Mode, which lets you keep settings and data in the same + location as your installation, for example, on a USB drive. + +When AVAP TM Dev Studio starts up, it may launch a shell in + order to source the "shell environment" to help set up tools. + This will launch an interactive login shell and fetch its + environment. Depending on your shell setup, this may cause problems. For + example, it may be unexpected that the shell is launched as an interactive + session, which AVAP TM Dev Studio needs in order to try to align{' '} + `$PATH` with the exact value in a user created terminal. + +Whenever AVAP TM Dev Studio launches this initial shell, AVAP + TM Dev Studio sets the variable{' '} + `VSCODE\_RESOLVING\_ENVIRONMENT` to 1. If your shell or user + scripts need to know if they are being run in the context of this shell, + you can check the `VSCODE\_RESOLVING\_ENVIRONMENT` value. diff --git a/docs/developer.avapframework.com/USER_GUIDE_CustomLayout.md b/docs/developer.avapframework.com/USER_GUIDE_CustomLayout.md new file mode 100644 index 0000000..9c43205 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_CustomLayout.md @@ -0,0 +1,324 @@ +AVAP TM Dev Studio comes with a simple user interface and + convenient default layout. At the same time, AVAP TM Dev Studio + provides options and settings to let you customize the UI layout to suit + your preferences and work style. In this topic, we'll highlight + various UI customizations so you can display views, editors, and panels in + the way that's most productive for you. + +This article starts by discussing Workbench customizations to rearrange UI + elements such as the side bars, views, and panels. Later in the article, + we'll cover customization of the Editor region with editor groups, + split editors, and editor tabs. + +`` + +## Workbench + +### Primary side bar + +The default (Primary) side bar shows views such as the File + Explorer, Search, and Source Control on the left of the workbench. If + you'd prefer it on the right, you can: + +* Right-click the Activity bar and select{' '} Move Primary Side Bar Right . +* Run View: Toggle Primary Side Bar Position to switch the Primary side bar right and left. +* Set the Workbench > Side Bar: Location {' '} (workbench.sideBar.location) setting to right. + +### Secondary side bar + +By default, AVAP TM Dev Studio shows all views in the{' '} + Primary Side Bar located to the left of the editor + region. If you like another place to display views, you can open the{' '} + Secondary Side Bar to the right and drag and drop views + into that side bar. + +This can be useful if you'd like to see two views at the same time, + for example, the File Explorer on the left and Source Control view on the + right: + +To display the Secondary side bar, you can: + +* Run View: Toggle Secondary Side Bar Visibility {' '} (Ctrl+Alt+B). +* Check the View > Appearance >{' '} Secondary Side Bar menu item. + +The Secondary side bar is initially empty but you can drag and drop views + and panels into it and the layout is preserved across your AVAP + TM Dev Studio sessions. + +### Activity bar position + +By default, the Activity bar moves with the Primary side bar and remains + on the outer edge of the workbench. You can also choose to hide the + Activity bar or move it to the top of the Primary side bar. The{' '} + Activity Bar Position menu available from the Activity + bar context menu or under View >{' '} + Appearance has the options Side ,{' '} + Top , or Hidden . + +When the Activity bar is in the top position, the Account {' '} + and Manage buttons, usually at the bottom of the Activity + bar, move to the right side of the title bar. + +### Panel + +The Panel region displays UI elements such as the Problems, Terminal, and + Output panels and by default is located under the editor region. + +### Panel position + +You can also move the region to the left or right of the editor with the{' '} + Move Panel commands: + +* View: Move Panel Left ( `workbench.action.positionPanelLeft` ) +* View: Move Panel Right ( `workbench.action.positionPanelRight` ) +* View: Move Panel To Bottom ( `workbench.action.positionPanelBottom` ) + +You can configure these options in the menu under View {' '} + > Appearance > Panel Position , + Panel title bar context menu, or using the new{' '} + View: Move Panel commands. + +### Panel alignment + +This option lets you configure how far the bottom Panel spans across your + window. There are four options: + +* Center - This is the default behavior. The panel spans the width of the editor area only. +* Justify - The panel spans the full width of the window. +* Left - The panel spans from the left edge of the window to the right edge of the editor area. +* Right - The panel spans from the right edge of the window to the left edge of the editor area. + +With all Panel alignment options, the Activity Bar is considered the edge + of the window. + +You can configure these options in the menu under View {' '} + > Appearance > Align Panel , Panel + title context menu, or using the new{' '} + Set Panel Alignment to... commands. + +### Maximize Panel size + +When the Panel alignment is Center , you can quickly + toggle the Panel region to fill the entire editor area with the{' '} + Maximize Panel Size chevron button in the upper right of + the Panel region. The chevron button points downwards in the maximized + panel to restore the panel to the original size. + +You can also maximize the Panel region via the{' '} + View: Toggle Maximized Panel command. + +### Customize Layout control + +The AVAP TM Dev Studio title bar also has buttons to toggle the + visibility of the main UI elements (Side bars and Panel region). + +The rightmost button brings up the Customize Layout {' '} + dropdown, where you can further change the visibility and layout of + various UI elements and includes several layout modes: + +The layout modes are: + +* Full Screen - Set the editor to fill the full display screen. View: Toggle Full Screen ( `F11` ). +* Zen Mode - Hide all UI except for the editor area.{' '} View: Toggle Zen Mode ( `Ctrl+K Z` ). +* Centered Layout - Centers the editor inside the editor region. View: Toggle Centered Layout . + +### Drag and drop views and panels + +AVAP TM Dev Studio has a default layout of views and panels in + the Primary Side bar and Panel region but you can drag and drop views and + panels between these regions. For example, you can drag and drop the + Source Control view into the Panel region or put the Problems panel into + the Primary Side bar: + +You can also add views and panels to existing view or panel to create + groups. For example, you could move the Output panel to the Explorer view + group by dragging over the Explorer Activity bar item and then dropping + into the view: + +You are not limited to using the mouse for moving views and panels. You + can also customize layouts via the keyboard with the{' '} + View: Move View and{' '} + View: Move Focused View commands, where dropdowns let you + pick the UI element to move and the destination, either a location like + the Side bar or Panel region or an existing view or panel to create a + group. + +## Tool bars + +Most AVAP TM Dev Studio views and panels have tool bars + displayed on the top right of their UI. For example, the Search view has a + tool bar with actions such as Refresh ,{' '} + Clear Search Results , etc.: + +### Hide items in tool bars + +If you think a tool bar is too busy and you'd like to hide less + frequently used actions, you can right-click on any action and select its{' '} + Hide command (for example{' '} + Hide 'Clear Search Results' ) or uncheck any + of the actions from the dropdown. Hidden actions are moved to the ...{' '} + More Actions menu and can be invoked from there. + +To restore an action to the tool bar, right-click the tool bar button area + and select the Reset Menu command or recheck the hidden + action. To restore all menus in AVAP TM Dev Studio, run{' '} + View: Reset All Menus from the Command Palette + (Ctrl+Shift+P). + +## Editor + +You can customize the layout of the AVAP TM Dev Studio editor + region independently of the workbench user interface. By default, the + editor region displays useful features such as the minimap, breadcrumbs, + editor tabs, and has optional UI such as Sticky Scroll. You can also + adjust the layout of the editors themselves. + +### Minimap and breadcrumbs + +The View > Appearance menu has a + section for customizing the editor region. There you'll find toggles + for: + +* Minimap - A visual overview of your current file.{' '} View: Toggle Minimap . +* Breadcrumbs - Display folder, file, and current symbol information for the active file.{' '} View: Toggle Breadcrumbs . +* Sticky Scroll - Display nested symbol scopes in the active file. View: Toggle Sticky Scroll . + +### Editor groups + +By default, each opened editor goes into the same{' '} + editor group and adds a new editor tab to the right. You + can create new editor groups in order to group similar or related files, + or to allow side by side editing of the same file. Create a new editor + group by dragging an editor to the side, or using one of the{' '} + Split commands in the context menu to duplicate the + current editor into a new editor group to the left, right, above, or + below. + +The Split editor commands are also available from the{' '} + View > Editor Layout menu and through + the Command Palette. + +If you'd like to go quickly between vertical and horizontal editor + group layout, you can use the{' '} + Toggle Vertical/Horizontal Editor Layout command + (Shift+Alt+0). + +### Split in group + +You can also split an editor in the same group for side by side editing + with the View: Split Editor in Group command (Ctrl+K + Ctrl+Shift+). + +When using the split in group feature, there are specific commands for + toggling this mode and navigating between the two split editors: + +* View: Split Editor in Group - Split the current editor. +* View: Toggle Split Editor in Group - Toggle between split mode for the active editor. +* View: Join Editor in Group - Go back to a single editor for the active file. +* View: Toggle Layout of Split Editor in Group - Toggle between horizontal and vertical layout. + +To navigate between the sides: + +* View: Focus First Side in Active Editor - Move focus to the first (left or top) side of split editor. +* View: Focus Second Side in Active Editor - Move focus to the second (right or bottom) side. +* View: Focus Other Side in Active Editor - Toggle between the split editor sides. + +The Workbench > Editor: Split in Group Layout {' '} + (workbench.editor.splitInGroupLayout) setting lets you set the + preferred split editor layout to either horizontal (default) or + vertical. + +### Grid layout + +If you'd like more control over the editor group layout, you can use + the grid layout, where you can have multiple rows and columns of editor + groups visible. The View >{' '} + Editor Layout menu lists various editor layout options + (for example, Two Columns ,{' '} + Three Columns , Grid (2x2) ) + and you can adjust the group sizes by grabbing and moving the sash between + them. + +### Pinned tabs + +If you'd like an editor tab to always be visible, you can pin it to + the editor tab bar. You can pin an editor tab from either the context menu + or using the command View: Pin Editor (Ctrl+K + Shift+Enter). + +Pinned tabs help access files that are important to you as: + +* Pinned tabs always appear first before non-pinned tabs. +* They do not scroll out of view if you have many tabs opened. +* They do not close when using editor tab commands such as{' '} Close Others or Close All . +* They do not close even when you exceed a set limit of opened editors. + +Unpin an editor by clicking on the pin icon, using the{' '} + Unpin editor tab context menu item, or the{' '} + View: Unpin Editor command. + +You can choose how you'd like to display pinned editors with the{' '} + Workbench > Editor: Pinned Tab Sizing ( + `workbench.editor.pinnedTabSizing` ) setting. The options + are: + +* `normal` : A pinned tab inherits the look of other tabs (default) +* `shrink` : A pinned tab shrinks to a fixed size showing parts of the editor label. +* `compact` : A pinned tab will only show as icon or first letter of the editor label. + +You can also show pinned editor tabs on a separate row above the regular + editor tab bar by setting{' '} + Workbench > Editor: Pinned Tabs On Separate Row . You + can pin and unpin editors by dragging and dropping their tabs between the + two rows. + +### Locked editor groups + +When using multiple editors, it's common to have one or more that you + want to always keep visible. The locked editor group feature, where an + entire editor group is locked and visible, provides a stable display and + any request to open a new editor will create it in another group. You can + tell whether an editor group is locked by the lock icon in the editor + group tool bar. + +You can lock an editor group by selecting Lock Group from + the editor tool bar More Actions ... dropdown or running + the View: Lock Editor Group command. + +You can unlock an editor group by clicking on the lock icon or running the{' '} + View: Unlock Editor Group command. + +Locked groups behave differently than unlocked groups: + +* New editors will not open in a locked group unless explicitly moved there (for example, via drag and drop). +* If a new editor skips a locked group, it will either open in the most recently used unlocked group or create a new group to the side of the locked one. +* The locked state of an editor group is persisted and restored across restarts. +* You can lock empty groups as well, allowing for a more stable editor layout. + +The primary use case is for terminals in the editor area For example, you + might want to edit text on the left and have a terminal on the right that + is always visible. When a terminal editor is created and moved to the + side, it will automatically lock. This means that even when the terminal + on the right is focused, opening a file will open it on the left side + without needing to manually change focus first. + +Auto locking groups can be configured using the + workbench.editor.autoLockGroups setting, which defaults to only terminal + editors but any editor type can be added to get the same behavior. + +The commands related to editor group locking: + +* View: Lock Editor Group - Lock the active editor group. +* View: Unlock Editor Group - Unlock the active locked editor group. +* View: Toggle Editor Group Lock - Lock or unlock the active editor group. + +You must have more that one editor group for these commands to be + available. + +## Next steps + +Read on to find out about: + +* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/USER_GUIDE_Debugging.md b/docs/developer.avapframework.com/USER_GUIDE_Debugging.md new file mode 100644 index 0000000..786357d --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_Debugging.md @@ -0,0 +1,698 @@ +One of the key features of AVAP TM Dev Studio is its great + debugging support. AVAP TM Dev Studio's built-in debugger + helps accelerate your edit, compile, and debug loop. + +## Debugger extensions + +AVAP TM Dev Studio has built-in debugging support for the + Node.js runtime and can debug JavaScript, TypeScript, or any other + language that gets transpiled to JavaScript. + +For debugging other languages and runtimes (including PHP, Ruby, Go, + C#, Python, C++, PowerShell and many others), look for{' '} + `Debuggers` extensions in the AVAP™ Dev Studio Marketplace or + select Install Additional Debuggers in the top-level Run menu. + +Below are several popular extensions which include debugging support: + +## Start debugging + +The following documentation is based on the built-in Node.js debugger, but + most of the concepts and features are applicable to other debuggers as + well. + +It is helpful to first create a sample Node.js application before reading + about debugging. You can follow the Node.js walkthrough to install Node.js + and create a simple "Hello World" JavaScript application ( + `app.js` ). Once you have a simple application set up, this + page will take you through AVAP TM Dev Studio debugging + features. + +## Run and Debug view + +To bring up the Run and Debug view, select the{' '} + Run and Debug icon in the Activity Bar {' '} + on the side of AVAP TM Dev Studio. You can also use the keyboard + shortcut Ctrl+Shift+D. + +The Run and Debug view displays all information related + to running and debugging and has a top bar with debugging commands and + configuration settings. + +If running and debugging is not yet configured (no + `launch.json` has been created), AVAP TM Dev + Studio shows the Run start view. + +## Run menu + +The top-level Run menu has the most common run and debug + commands: + +## Launch configurations + +To run or debug a simple app in AVAP TM Dev Studio, select{' '} + Run and Debug on the Debug start view or press F5 and + AVAP TM Dev Studio will try to run your currently active file. + +However, for most debugging scenarios, creating a launch configuration + file is beneficial because it allows you to configure and save debugging + setup details. AVAP TM Dev Studio keeps debugging configuration + information in a `launch.json` file located in a{' '} + `.vscode` folder in your workspace (project root + folder) or in your user settings or workspace settings. + +To create a launch.json file, click the{' '} + create a launch.json file link in the Run start view. + +AVAP TM Dev Studio will try to automatically detect your debug + environment, but if this fails, you will have to choose it manually: + +Here is the launch configuration generated for Node.js debugging: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"skipFiles": ["/\*\*"], + ` `"program": "${workspaceFolder}\\app.js" + ` `} + ` `] + + } +``` + +If you go back to the File Explorer view (Ctrl+Shift+E), + you'll see that AVAP TM Dev Studio has created a{' '} + `.vscode` folder and added the `launch.json` file to + your workspace. + +Note that the attributes available in launch configurations vary from + debugger to debugger. You can use IntelliSense suggestions + (Ctrl+Space) to find out which attributes exist for a specific + debugger. Hover help is also available for all attributes. + +Do not assume that an attribute that is available for one debugger + automatically works for other debuggers too. If you see red squiggles in + your launch configuration, hover over them to learn what the problem is + and try to fix them before launching a debug session. + +Review all automatically generated values and make sure that they make + sense for your project and debugging environment + +### Launch versus attach configurations + +In AVAP TM Dev Studio, there are two core debugging modes,{' '} + Launch and Attach , which handle two + different workflows and segments of developers. Depending on your + workflow, it can be confusing to know what type of configuration is + appropriate for your project. + +If you come from a browser Developer Tools background, you might not be + used to "launching from your tool," since your browser instance + is already open. When you open DevTools, you are simply{' '} + attaching DevTools to your open browser tab. On the other + hand, if you come from a server or desktop background, it's quite + normal to have your editor launch your process for you, + and your editor automatically attaches its debugger to the newly launched + process. + +The best way to explain the difference between launch and{' '} + attach is to think of a launch {' '} + configuration as a recipe for how to start your app in debug mode{' '} + before AVAP TM Dev Studio attaches to it, while + an attach configuration is a recipe for how to connect + AVAP TM Dev Studio's debugger to an app or process + that's already running. + +AVAP TM Dev Studio debuggers typically support launching a + program in debug mode or attaching to an already running program in debug + mode. Depending on the request (attach or launch), different + attributes are required, and AVAP TM Dev Studio's + launch.json validation and suggestions should help with that. + +### Add a new configuration + +To add a new configuration to an existing `launch.json` , use + one of the following techniques: + +* Use IntelliSense if your cursor is located inside the configurations array. +* Press the Add Configuration button to invoke snippet IntelliSense at the start of the array. +* Choose Add Configuration option in the Run menu. + +AVAP TM Dev Studio also supports compound launch configurations + for starting multiple configurations at the same time; for more details, + please read this section. + +In order to start a debug session, first select the configuration named{' '} + Launch Program using the{' '} + Configuration dropdown in the{' '} + Run and Debug view. Once you have your launch + configuration set, start your debug session with F5. + +Alternatively, you can run your configuration through the{' '} + Command Palette (Ctrl+Shift+P) by filtering on{' '} + Debug: Select and Start Debugging or typing 'debug + ' and selecting the configuration you want to debug. + +As soon as a debugging session starts, the DEBUG CONSOLE {' '} + panel is displayed and shows debugging output, and the Status Bar changes + color (orange for default color themes): + +In addition, the debug status appears in the Status Bar + showing the active debug configuration. By selecting the debug status, a + user can change the active launch configuration and start debugging + without needing to open the Run and Debug view. + +## Debug actions + +Once a debug session starts, the Debug toolbar will + appear on the top of the editor. + +### Run mode + +In addition to debugging a program, AVAP TM Dev Studio supports{' '} + running the program. The{' '} + Debug: Run (Start Without Debugging) action is + triggered with Ctrl+F5 and uses the currently selected launch + configuration. Many of the launch configuration attributes are supported + in 'Run' mode. AVAP TM Dev Studio maintains a debug + session while the program is running, and pressing the{' '} + Stop button terminates the program. + +## Breakpoints + +Breakpoints can be toggled by clicking on the{' '} + editor margin or using F9 on the current line. Finer + breakpoint control (enable/disable/reapply) can be done in the{' '} + Run and Debug view's BREAKPOINTS {' '} + section. + +* Breakpoints in the editor margin are normally shown as red filled circles. +* Disabled breakpoints have a filled gray circle. +* When a debugging session starts, breakpoints that cannot be registered with the debugger change to a gray hollow circle. The same might happen if the source is edited while a debug session without live-edit support is running. + +If the debugger supports breaking on different kinds of errors or + exceptions, those will also be available in the{' '} + BREAKPOINTS view. + +The Reapply All Breakpoints command sets all breakpoints + again to their original location. This is helpful if your debug + environment is "lazy" and "misplaces" breakpoints in + source code that has not yet been executed. + +Optionally, breakpoints can be shown in the editor's overview ruler by + enabling the setting `debug.showBreakpointsInOverviewRuler` : + +## Logpoints + +A Logpoint is a variant of a breakpoint that does not "break" + into the debugger but instead logs a message to the console. Logpoints are + especially useful for injecting logging while debugging production servers + that cannot be paused or stopped. + +A Logpoint is represented by a "diamond" shaped icon. Log + messages are plain text but can include expressions to be evaluated within + curly braces ('{}'). + +Just like regular breakpoints, Logpoints can be enabled or disabled and + can also be controlled by a condition and/or hit count. + +### Triggered breakpoints + +A trigged breakpoint is a breakpoint that is automatically enabled once + another breakpoint is hit. They can be very useful when diagnosing failure + cases in code that happen only after a certain precondition. + +Triggered breakpoints can be set by right-clicking on the glyph margin, + selecting Add Triggered Breakpoint , and then choosing + which other breakpoint enables the breakpoint. + +Triggered breakpoints work for all languages, and conditional breakpoints + may also be used as the trigger. + +## Data inspection + +Variables can be inspected in the VARIABLES section of + the Run and Debug view or by hovering over their source + in the editor. Variable values and expression evaluation are relative to + the selected stack frame in the CALL STACK section. + +Variable values can be modified with the Set Value action + from the variable's context menu. Additionally, you can use the{' '} + Copy Value action to copy the variable's value, or{' '} + Copy as Expression action to copy an expression to access + the variable. + +Variables and expressions can also be evaluated and watched in the{' '} + Run and Debug view's WATCH section. + +Variable names and values can be filtered by typing while the focus is on + the VARIABLES section. + +## Launch.json attributes + +There are many `launch.json` attributes to help support + different debuggers and debugging scenarios. As mentioned above, you can + use IntelliSense (Ctrl+Space) to see the list of available + attributes once you have specified a value for the `type` {' '} + attribute. + +The following attributes are mandatory for every launch configuration: + +* `type` - the type of debugger to use for this launch configuration. Every installed debug extension introduces a type: node for the built-in Node debugger, for example, or php and go for the PHP and Go extensions. +* `request` - the request type of this launch configuration. Currently, launch and attach are supported. +* `name` - the reader-friendly name to appear in the Debug launch configuration dropdown. + +Here are some optional attributes available to all launch configurations: + +* `presentation` - using the order, group, and hidden attributes in the presentation object, you can sort, group, and hide configurations and compounds in the Debug configuration dropdown and in the Debug quick pick. +* `preLaunchTask` - to launch a task before the start of a debug session, set this attribute to the label of a task specified in tasks.json (in the workspace's .vscode folder). Or, this can be set to ${defaultBuildTask} to use your default build task. +* `postDebugTask` - to launch a task at the very end of a debug session, set this attribute to the name of a task specified in tasks.json (in the workspace's .vscode folder). +* `internalConsoleOptions` - this attribute controls the visibility of the Debug Console panel during a debugging session. +* `debugServer` -{' '} for debug extension authors only : this attribute allows you to connect to a specified port instead of launching the debug adapter. +* `serverReadyAction` - if you want to open a URL in a web browser whenever the program under debugging outputs a specific message to the debug console or integrated terminal. For details see section Automatically open a URI when debugging a server program below. + +Many debuggers support some of the following attributes: + +* `program` - executable or file to run when launching the debugger +* `args` - arguments passed to the program to debug +* `env` - environment variables (the value null can be used to "undefine" a variable) +* `envFile` - path to dotenv file with environment variables +* `cwd` - current working directory for finding dependencies and other files +* `port` - port when attaching to a running process +* `stopOnEntry` - break immediately when the program launches +* `console` - what kind of console to use, for example,{' '} `internalConsole` , `integratedTerminal` , or{' '} `externalTerminal` + +## Variable substitution + +AVAP TM Dev Studio makes commonly used paths and other values + available as variables and supports variable substitution inside strings + in `launch.json` . This means that you do not have to use + absolute paths in debug configurations. For example,{' '} + `${workspaceFolder}` gives the root path of a + workspace folder, `${file}` the file open in the + active editor, and ${env:Name} the environment variable + 'Name'. You can see a full list of predefined variables in the + Variables Reference or by invoking IntelliSense inside the{' '} + `launch.json` string attributes. + +```javascript +{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${workspaceFolder}/app.js", + ` `"cwd": "${workspaceFolder}", + ` `"args": ["${env:USERNAME}"] + + } +``` + +## Platform-specific properties + +`Launch.json` supports defining values (for example, + arguments to be passed to the program) that depend on the operating + system where the debugger is running. To do so, put a platform-specific + literal into the `launch.json` file and specify the + corresponding properties inside that literal. + +Below is an example that passes " `args` " to the + program differently on Windows: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": + "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", + ` `"args": ["myFolder/path/app.js"], + ` `"windows": { + ` `"args": ["myFolder\\path\\app.js"] + ` `} + ` `} + ` `] + + } +``` + +Valid operating properties are " `windows` " for + Windows, " `linux` " for Linux, and " + `osx` " for macOS. Properties defined in an operating + system specific scope override properties defined in the global scope. + +Please note that the `type` property cannot be placed inside a + platform-specific section, because `type` indirectly determines + the platform in remote debugging scenarios, and that would result in a + cyclic dependency. + +In the example below, debugging the program always{' '} + stops on entry except on macOS: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": + "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", + ` `"stopOnEntry": true, + ` `"osx": { + ` `"stopOnEntry": false + ` `} + ` `} + ` `] + + } +``` + +## Global launch configuration + +AVAP TM Dev Studio supports adding a "launch" object + inside your User settings. This "launch" configuration will then + be shared across your workspaces. For example: + +```javascript +"launch": { + ` `"version": "0.2.0", + ` `"configurations": [{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${file}" + ` `}] + + } +``` + +## Advanced breakpoint topics + +### Conditional breakpoints + +A powerful AVAP TM Dev Studio debugging feature is the ability + to set conditions based on expressions, hit counts, or a combination of + both. + +* Expression condition : The breakpoint will be hit whenever the expression evaluates to `true` . +* Hit count : The 'hit count' controls how many times a breakpoint needs to be hit before it will 'break' execution. Whether a 'hit count' is respected and the exact syntax of the expression vary among debugger extensions. + +You can add a condition and/or hit count when creating a source breakpoint + (with the Add Conditional Breakpoint action) or + when modifying an existing one (with the{' '} + Edit Condition action). In both cases, an inline text + box with a dropdown menu opens where you can enter expressions: + +Condition and hit count editing support is also supported for{' '} + function and exception breakpoints. You + can initiate condition editing from the context menu or the new inline{' '} + Edit Condition action. + +An example of condition editing in the BREAKPOINTS view: + +If a debugger does not support conditional breakpoints, the{' '} + Add Conditional Breakpoint and{' '} + Edit Condition actions will be missing. + +### Inline breakpoints + +Inline breakpoints will only be hit when the execution reaches the column + associated with the inline breakpoint. This is particularly useful when + debugging minified code which contains multiple statements in a single + line. + +An inline breakpoint can be set using Shift+F9 or through the context menu + during a debug session. Inline breakpoints are shown inline in the editor. + +Inline breakpoints can also have conditions. Editing multiple breakpoints + on a line is possible through the context menu in the editor's left + margin. + +### Function breakpoints + +Instead of placing breakpoints directly in source code, a debugger can + support creating breakpoints by specifying a function name. This is useful + in situations where source is not available but a function name is known. + +A function breakpoint is created by pressing the + button + in the BREAKPOINTS section header and entering the + function name. Function breakpoints are shown with a red triangle in the{' '} + BREAKPOINTS section. + +### Data breakpoints + +If a debugger supports data breakpoints, they can be set from the context + menu in the VARIABLES view. The{' '} + Break on Value Change/Read/Access commands will add a + data breakpoint that is hit when the value of the underlying variable + changes/is read/is accessed. Data breakpoints are shown with a red hexagon + in the BREAKPOINTS section. + +## Debug Console REPL + +Expressions can be evaluated with the Debug Console REPL + (Read-Eval-Print Loop) feature. To open the Debug Console, use the{' '} + Debug Console action at the top of the Debug pane or use + the View: Debug Console command (Ctrl+Shift+Y). + Expressions are evaluated after you press Enter and the Debug Console REPL + shows suggestions as you type. If you need to enter multiple lines, use + Shift+Enter between the lines and then send all lines for evaluation with + Enter. Debug Console input uses the mode of the active editor, which means + that the Debug Console input supports syntax coloring, indentation, auto + closing of quotes, and other language features. + +## Redirect input/output to/from the debug target + +Redirecting input/output is debugger/runtime specific, so AVAP + TM Dev Studio does not have a built-in solution that works for + all debuggers. + +Here are two approaches you might want to consider: + +Here's an example `launch.json` configuration: + +```javascript +{ + ` `"name": "launch program that reads a file from stdin", + ` `"type": "node", + ` `"request": "launch", + ` `"program": "program.js", + ` `"console": "integratedTerminal", + ` `"args": ["<", "in.txt"] + + } +``` + +This approach requires that the "<" syntax is passed through + the debugger extension and ends up unmodified in the Integrated Terminal. + +## Multi-target debugging + +For complex scenarios involving more than one process (for example, a + client and a server), AVAP TM Dev Studio supports + multi-target debugging. + +Using multi-target debugging is simple: after you've started a first + debug session, you can just launch another session. As soon as a second + session is up and running, the AVAP TM Dev Studio UI switches to{' '} + multi-target mode : + +* The individual sessions now show up as top-level elements in the{' '} CALL STACK view. +* The debug toolbar shows the currently active session {' '} (and all other sessions are available in a dropdown menu). +* Debug actions (for example, all actions in the debug toolbar) are performed on the active session. The active session can be changed either by using the dropdown menu in the debug toolbar or by selecting a different element in the CALL STACK view. + +### Compound launch configurations + +An alternative way to start multiple debug sessions is by using a{' '} + compound launch configuration. A compound launch + configuration lists the names of two or more launch configurations that + should be launched in parallel. Optionally a preLaunchTask can be + specified that is run before the individual debug sessions are started. + The boolean flag stopAll controls whether manually terminating one session + will stop all of the compound sessions. + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Server", + ` `"program": "${workspaceFolder}/server.js" + ` `}, + ` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Client", + ` `"program": "${workspaceFolder}/client.js" + ` `} + ` `], + ` `"compounds": [` `{ + ` `"name": "Server/Client", + ` `"configurations": ["Server", "Client"], + ` `"preLaunchTask": "${defaultBuildTask}", + ` `"stopAll": true + ` `} + ` `] + + } +``` + +Compound launch configurations are displayed in the launch configuration + dropdown menu. + +## Remote debugging + +AVAP TM Dev Studio does not itself support remote debugging: + this is a feature of the debug extension you are using, and you should + consult the extension's page in the Marketplace for support and + details. + +There is, however, one exception: the Node.js debugger included in AVAP + TM Dev Studio supports remote debugging. See the Node.js + Debugging topic to learn how to configure this. + +## Automatically open a URI when debugging a server program + +Developing a web program typically requires opening a specific URL in a + web browser in order to hit the server code in the debugger. AVAP + TM Dev Studio has a built-in feature " + serverReadyAction " to automate this task. + +Here is an example of a simple Node.js Express application: + +```javascript +var express = require('express'); + + var app = express(); + + + app.get('/', function(req, res) { + ` `res.send('Hello World!'); + + }); + + + app.listen(3000, function() { + ` `console.log('Example app listening on port 3000!'); + + }); +``` + +This application first installs a "Hello World" handler for the + "/" URL and then starts to listen for HTTP connections on port + 3000. The port is announced in the Debug Console, and typically, the + developer would now type (LINK) into their browser application. + +The serverReadyAction feature makes it possible to add a + structured property `serverReadyAction` to any launch config + and select an "action" to be performed: + +```javascript +{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${workspaceFolder}/app.js", + + ` `"serverReadyAction": { + ` `"pattern": "listening on port ([0-9]+)", + ` `"uriFormat": "(LINK)", + ` `"action": "openExternally" + ` `} + + } +``` + +Here the `pattern` property describes the regular expression + for matching the program's output string that announces the port. The + pattern for the port number is put into parenthesis so that it is + available as a regular expression capture group. In this example, we are + extracting only the port number, but it is also possible to extract a full + URI. + +The `uriFormat` property describes how the port number is + turned into a URI. The first %s is substituted by the first capture group + of the matching pattern. + +The resulting URI is then opened outside of AVAP TM Dev Studio + ("externally") with the standard application configured + for the URI's scheme. + +### Trigger Debugging via Edge or Chrome + +Alternatively, the action can be set to debugWithEdge or debugWithChrome. + In this mode, a webRoot property can be added that is passed to the Chrome + or Edge debug session. + +To simplify things a bit, most properties are optional and we use the + following fallback values: + +* pattern :{' '} `"listening on.\* (https?://\\S+|[0-9]+)"` {' '} which matches the commonly used messages "listening on port 3000" or "Now listening on: (LINK)". +* uriFormat : "(LINK)" +* webRoot :{' '} `"${workspaceFolder}"` + +### Triggering an Arbitrary Launch Config + +In some cases, you may need to configure additional options for the + browser debug session--or use a different debugger entirely. You can do + this by setting `action` to `startDebugging` with a{' '} + `name` property set to the name of the launch configuration to + start when the `pattern` is matched. + +The named launch configuration must be in the same file or folder as the + one with the `serverReadyAction` . + +Here the serverReadyAction feature in action: + +## Next steps + +To learn about AVAP TM Dev Studio's Node.js debugging + support, take a look at: + +* Node.js - Describes the Node.js debugger, which is included in AVAP TM Dev Studio. +* TypeScript - The Node.js debugger also supports TypeScript debugging. + +To see tutorials on the basics of Node.js debugging, check out these + videos: + +* Intro Video - Debugging - Showcases the basics of debugging. +* Getting started with Node.js debugging - Shows how to attach a debugger to a running Node.js process. + +To learn about debugging support for other programming languages via AVAP + TM Dev Studio extensions: + +* C++ +* Python +* Java + +To learn about AVAP TM Dev Studio's task running support, go + to: + +* Tasks - Describes how to run tasks with Gulp, Grunt, and Jake and how to show errors and warnings. + +To write your own debugger extension, visit: + +* Debugger Extension - Uses a mock sample to illustrate the steps required to create a AVAP TM Dev Studio debug extension. + +## Common questions + +### What are the supported debugging scenarios? + +Debugging of Node.js-based applications is supported on Linux, macOS, and + Windows out of the box with AVAP TM Dev Studio. Many other + scenarios are supported by AVAP TM Dev Studio extensions + available in the Marketplace. + +### I do not see any launch configurations in the Run and Debug view dropdown. + What is wrong? + +The most common problem is that you did not set up launch.json or there is + a syntax error in that file. Alternatively, you might need to open a + folder, since no-folder debugging does not support launch configurations. diff --git a/docs/developer.avapframework.com/USER_GUIDE_Emmet.md b/docs/developer.avapframework.com/USER_GUIDE_Emmet.md new file mode 100644 index 0000000..f18d156 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_Emmet.md @@ -0,0 +1,376 @@ +Support for Emmet snippets and expansion is built right into AVAP + TM Dev Studio, no extension required . Emmet + 2.0 has support for the majority of the Emmet Actions including expanding + Emmet abbreviations and snippets. + +## How to expand Emmet abbreviations and snippets + +Emmet abbreviation and snippet expansions are enabled by default in{' '} + `html` , `haml` , `pug` , `slim` ,{' '} + `jsx` , `xml` , `xsl` , `css` ,{' '} + `scss` , `sass` , `less` and{' '} + `stylus` files, as well as any language that inherits from any + of the above like `handlebars` and `php` . + +When you start typing an Emmet abbreviation, you will see the abbreviation + displayed in the suggestion list. If you have the suggestion documentation + fly-out open, you will see a preview of the expansion as you type. If you + are in a stylesheet file, the expanded abbreviation shows up in the + suggestion list sorted among the other CSS suggestions. + +### Using Tab for Emmet expansions + +If you want to use the Tab key for expanding the Emmet abbreviations, add + the following setting: + +```javascript +"emmet.triggerExpansionOnTab": true +``` + +This setting allows using the Tab key for indentation when text is not an + Emmet abbreviation. + +### Emmet when quickSuggestions are disabled + +If you have disabled the `editor.quickSuggestions setting` , you + won't see suggestions as you type. You can still trigger suggestions + manually by pressing `Ctrl+Space` and see the preview. + +### Disable Emmet in suggestions + +If you don't want to see Emmet abbreviations in suggestions at all, + then use the following setting: + +```javascript +"emmet.showExpandedAbbreviation": "never" +``` + +You can still use the command Emmet: Expand Abbreviation {' '} + to expand your abbreviations. You can also bind any keyboard shortcut to + the command id `editor.emmet.action.expandAbbreviation` as + well. + +### Emmet suggestion ordering + +To ensure Emmet suggestions are always on top in the suggestion list, add + the following settings: + +```javascript +"emmet.showSuggestionsAsSnippets": true, + + "editor.snippetSuggestions": "top" +``` + +## Emmet abbreviations in other file types + +To enable the Emmet abbreviation expansion in file types where it is not + available by default, use the `emmet.includeLanguages setting` . + Make sure to use language identifiers for both sides of the mapping, with + the right side being the language identifier of an Emmet supported + language (see the list above). + +For example: + +```javascript +"emmet.includeLanguages": { + ` `"javascript": "javascriptreact", + ` `"razor": "html", + ` `"plaintext": "pug" + + } +``` + +Emmet has no knowledge of these new languages, and so there might be Emmet + suggestions showing up in non HTML/CSS contexts. To avoid this, you can + use the following setting. + +```javascript +"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFilesOnly" +``` + +## Emmet with multi-cursors + +You can use most of the Emmet actions with multi-cursors as well: + +## Using filters + +Filters are special post-processors that modify the expanded abbreviation + before it is output to the editor. There are 2 ways to use filters; either + globally through the `emmet.syntaxProfiles` setting or directly + in the current abbreviation. + +Below is an example of the first approach using the{' '} + `emmet.syntaxProfiles` setting to apply the `bem` {' '} + filter for all the abbreviations in HTML files: + +```javascript +"emmet.syntaxProfiles": { + ` `"html": { + ` `"filters": "bem" + ` `} + + } +``` + +To provide a filter for just the current abbreviation, append the filter + to your abbreviation. For example, div#page|c will apply the comment + filter to the div#page abbreviation. + +### BEM filter (bem) + +If you use the Block Element Modifier (BEM) way of writing HTML, + then `bem` filters are very handy for you to use. To learn more + about how to use `bem` filters, read BEM filter in Emmet. + +You can customize this filter by using the{' '} + `bem.elementSeparator` and `bem.modifierSeparator` {' '} + preferences as documented in Emmet Preferences. + +### Comment filter (c) + +This filter adds comments around important tags. By default, + "important tags" are those tags with id and/or class attribute. + +For example `div>div#page>p.title+p|c` will be expanded + to: + +```javascript +
+ ` `
+ ` `

+ ` ` + ` `

+ ` `
+ ` ` + +
+``` + +You can customize this filter by using the{' '} + `filter.commentTrigger` , `filter.commentAfter` and{' '} + `filter.commentBefore` preferences as documented in Emmet + Preferences. + +The format for the `filter.commentAfter` preference is + different in AVAP TM Dev Studio Emmet 2.0. + +For example, instead of: + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +in AVAP TM Dev Studio, you would use a simpler: + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +### Trim filter (t) + +This filter is applicable only when providing abbreviations for the{' '} + Emmet: Wrap with Abbreviation command. It removes line + markers from wrapped lines. + +## Using custom Emmet snippets + +Custom Emmet snippets need to be defined in a json file named{' '} + `snippets.json` . The `emmet.extensionsPath` setting + should have the path to the directory containing this file. + +Below is an example for the contents of this `snippets.json` {' '} + file. + +```javascript +{ + ` `"html": { + ` `"snippets": { + ` `"ull": "ul>li[id=${1} class=${2}]\*2{ + Will work with html, pug, haml and slim }", + ` `"oll": "
  1. + Will only work in html
", + ` `"ran": "{ Wrap plain text in curly braces }" + ` `} + ` `}, + ` `"css": { + ` `"snippets": { + ` `"cb": "color: black", + ` `"bsd": "border: 1px solid ${1:red}", + ` `"ls": "list-style: ${1}" + ` `} + ` `} + + } +``` + +Authoring of Custom Snippets in Emmet 2.0 via the{' '} + `snippets.json` file differs from the old way of doing the same + in a few ways: + +### HTML Emmet snippets + +HTML custom snippets are applicable to all other markup flavors like{' '} + `haml` or `pug` . When snippet value is an + abbreviation and not actual HTML, the appropriate transformations can be + applied to get the right output as per the language type. + +For example, for an unordered list with a list item, if your snippet value + is ul>li, you can use the same snippet in `html` ,{' '} + `haml` , `pug` or `slim` , but if your + snippet value is `
` , + then it will work only in `html` files. + +If you want a snippet for plain text, then surround the text with + {}. + +### CSS Emmet snippets + +Values for CSS Emmet snippets should be a complete property name and value + pair. + +CSS custom snippets are applicable to all other stylesheet flavors like{' '} + `scss` , `less` or `sass` . Therefore, + don't include a trailing ; at the end of the snippet value. Emmet will + add it as needed based on whether the language requires it. + +Do not use : in the snippet name. : is used to separate property name and + value when Emmet tries to fuzzy match the abbreviation to one of the + snippets. + +### Tab stops and cursors in custom snippets + +The syntax for tab stops in custom Emmet snippets follows the Textmate + snippets syntax. + +* Use `${1}` , `${2}` for tab stops and `${1:placeholder}` for tab stops with placeholders. +* Previously, | or ${cursor} was used to denote the cursor location in the custom Emmet snippet. This is no longer supported. Use{' '} `${1}` instead. + +## Emmet configuration + +Below are Emmet settings that you can use to customize your Emmet + experience in AVAP TM Dev Studio. + +* `emmet.includeLanguages` Use this setting to add mapping between the language of your choice and one of the Emmet supported languages to enable Emmet in the former using the syntax of the latter. Make sure to use language IDs for both sides of the mapping. For example: ` "emmet.includeLanguages": { ` `"javascript": "javascriptreact", ` `"plaintext": "pug" } ` +* `emmet.excludeLanguages` If there is a language where you do not want to see Emmet expansions, add it in this setting which takes an array of language ID strings. +* `emmet.syntaxProfiles` See Emmet Customization of output profile to learn how you can customize the output of your HTML abbreviations. For example: ` "emmet.syntaxProfiles": { ` `"html": { ` `"attr\_quotes": "single" ` `}, ` `"jsx": { ` `"self\_closing\_tag": true ` `} } ` +* `emmet.variables` Customize variables used by Emmet snippets. For example: "emmet.variables": { ` ` `"lang": "de", ` `"charset": "UTF-16" } ` +* `emmet.showExpandedAbbreviation` Controls the Emmet suggestions that show up in the suggestion/completion list. + +* `emmet.showAbbreviationSuggestions` Shows possible emmet abbreviations as suggestions. It is{' '} `true` by default. For example, when you type `li` , you get suggestions for all emmet snippets starting with `li` like{' '} `link` , `link:css` , `link:favicon` {' '} etc. This is helpful in learning Emmet snippets that you never knew existed unless you knew the Emmet cheatsheet by heart. Not applicable in stylesheets or when{' '} `emmet.showExpandedAbbreviation` is set to never. +* `emmet.extensionsPath` Provide the location of the directory that houses the{' '} `snippets.json` file which in turn has your custom snippets. +* `emmet.triggerExpansionOnTab` Set this to true to enable expanding Emmet abbreviations with Tab key. We use this setting to provide the appropriate fallback to provide indentation when there is no abbreviation to expand. +* `emmet.showSuggestionsAsSnippets` If set to true, then Emmet suggestions will be grouped along with other snippets allowing you to order them as per{' '} `editor.snippetSuggestions` setting. Set this to true and{' '} `editor.snippetSuggestions` to `top` , to ensure that Emmet suggestions always show up on top among other suggestions. +* `emmet.preferences` You can use this setting to customize Emmet as documented in Emmet Preferences. The below customizations are currently supported: `css.propertyEnd` `css.valueSeparator` `sass.propertyEnd` `sass.valueSeparator` `stylus.propertyEnd` `stylus.valueSeparator` `css.unitAliases` `css.intUnit` `css.floatUnit` `bem.elementSeparator` `bem.modifierSeparator` `filter.commentBefore` `filter.commentTrigger` `filter.commentAfter` `format.noIndentTags` `format.forceIndentationForTags` `profile.allowCompactBoolean` `css.fuzzySearchMinScore` +* `css.propertyEnd` +* `css.valueSeparator` +* `sass.propertyEnd` +* `sass.valueSeparator` +* `stylus.propertyEnd` +* `stylus.valueSeparator` +* `css.unitAliases` +* `css.intUnit` +* `css.floatUnit` +* `bem.elementSeparator` +* `bem.modifierSeparator` +* `filter.commentBefore` +* `filter.commentTrigger` +* `filter.commentAfter` +* `format.noIndentTags` +* `format.forceIndentationForTags` +* `profile.allowCompactBoolean` +* `css.fuzzySearchMinScore` + +The format for the `filter.commentAfter` preference is + different and simpler in Emmet 2.0. + +For example, instead of the older format + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +you would use + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +If you want support for any of the other preferences as documented in + Emmet Preferences, please log a feature request. + +## Next steps + +Emmet is just one of the great web developer features in AVAP TM {' '} + Dev Studio. Read on to find out about: + +* HTML - AVAP TM Dev Studio supports HTML with IntelliSense, closing tags, and formatting. +* CSS - We offer rich support for CSS, SCSS and Less. + +## Troubleshooting + +### Custom tags do not get expanded in the suggestion list + +Custom tags when used in an expression like `MyTag>YourTag` {' '} + or `MyTag.someclass` do show up in the suggestion list. But + when these are used on their own like `MyTag` , they do not + appear in the suggestion list. This is designed so to avoid noise in the + suggestion list as every word is a potential custom tag. + +Add the following setting to enable expanding of Emmet abbreviations using + tab which will expand custom tags in all cases. + +```javascript +"emmet.triggerExpansionOnTab": true +``` + +### My HTML snippets ending with + do not work + +HTML snippets ending with `+` like `select+` and{' '} + `ul+` from the Emmet cheatsheet are not supported. This is a + known issue in Emmet 2.0 Issue: emmetio/html-matcher#1. A workaround is to + create your own custom Emmet snippets for such scenarios. + +### Abbreviations are failing to expand + +First, check if you're using custom snippets (if there is a{' '} + `snippets.json` file being picked up by the{' '} + `emmet.extensionsPath` setting). The format of custom + snippets changed in AVAP TM Dev Studio release 1.53. Instead of + using | to indicate where the cursor position is, use tokens such as{' '} + `${1}` , `${2}` , etc. instead. + The default CSS snippets file from the `emmetio/emmet` {' '} + repository shows examples of the new cursor position format. + +If abbreviations are still failing to expand: + +* Check the builtin extensions to see if Emmet has been disabled. +* Try restarting the extension host by running the{' '} Developer: Restart Extension Host ( `workbench.action.restartExtensionHost` ) command in the Command Palette. + +### Where can I set all the preferences as documented in Emmet preferences? + +You can set the preferences using the setting{' '} + `emmet.preferences` . Only a subset of the preferences that are + documented in Emmet preferences can be customized. Please read the + preferences section under Emmet configuration. + +### Any tips and tricks? + +Of course! + +* In CSS abbreviations, when you use :, the left part is used to fuzzy match with the CSS property name and the right part is used to match with CSS property value. Take full advantage of this by using abbreviations like `pos:f` , `trf:rx` ,{' '} `fw:b` , etc. +* Explore all other Emmet features as documented in Emmet Actions. +* Don't hesitate to create your own custom Emmet snippets.rkdown Viewer and Editor diff --git a/docs/developer.avapframework.com/USER_GUIDE_ExtensionMarketplace.md b/docs/developer.avapframework.com/USER_GUIDE_ExtensionMarketplace.md new file mode 100644 index 0000000..1e144ea --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_ExtensionMarketplace.md @@ -0,0 +1,532 @@ +Increase the power of AVAP TM Dev Studio through Extensions + +The features that AVAP TM Dev Studio includes out-of-the-box are + just the start. AVAP TM Dev Studio extensions let you add + languages, debuggers, and tools to your installation to support your + development workflow. AVAP TM Dev Studio's rich + extensibility model lets extension authors plug directly into the AVAP + TM Dev Studio UI and contribute functionality through the same + APIs used by AVAP TM Dev Studio. This article explains how to + find, install, and manage AVAP TM Dev Studio extensions from the + AVAP TM Dev Studio Marketplace. + +## Browse for extensions + +You can browse and install extensions from within AVAP TM Dev + Studio. Bring up the Extensions view by clicking on the Extensions icon in + the Activity Bar on the side of AVAP TM Dev + Studio or the View: Extensions command + (Ctrl+Shift+X). + +This will show you a list of the most popular AVAP TM Dev Studio + extensions on the AVAP TM Dev Studio Marketplace. + +Each extension in the list includes a brief description, the publisher, + the download count, and a five star rating. You can select the extension + item to display the extension's details page where you can learn more. + +Note: If your computer's Internet access goes through + a proxy server, you will need to configure the proxy server. See Proxy + server support for details. + +## Install an extension + +To install an extension, select the Install button. Once + the installation is complete, the Install button will + change to the Manage gear button. + +### Find and install an extension + +For example, let's install the popular TODO Highlight extension. This + extension highlights text like 'TODO:' and 'FIXME:' in + your source code so you can quickly find undone sections. + +In the Extensions view ( `Ctrl+Shift+X` ), type + 'todo' in the search box to filter the Marketplace offerings to + extensions with 'todo' in the title or metadata. You should see + the TODO Highlight extension in the list. + +An extension is uniquely identified by its publisher and extension IDs. If + you select the TODO Highlight extension, you will see the + Extension details page, where you can find the extension ID, in this case, + wayou.vscode-todo-highlight. Knowing the extension ID can be helpful if + there are several similarly named extensions. + +Select the Install button, and AVAP TM Dev + Studio will download and install the extension from the Marketplace. When + the installation is complete, the Install button will be + replaced with a Manage gear button. + +To see the TODO Highlight extension in action, open any source code file + and add the text 'TODO:' and you will see the text highlighted. + +The TODO Highlight extension contributes the commands,{' '} + TODO-Highlight: List highlighted annotations and{' '} + TODO-Highlight: Toggle highlight , that you can find in + the Command Palette (Ctrl+Shift+P). The{' '} + TODO-Highlight: Toggle highlight command lets you quickly + disable or enable highlighting. + +The extension also provides settings for tuning its behavior, which you + can find in the Settings editor (Ctrl+,). For example, you might + want the text search to be case insensitive and you can uncheck the{' '} + Todohighlight: Is Case Sensitive setting. + +If an extension doesn't provide the functionality you want, you can + always Uninstall the extension from the{' '} + Manage button context menu. + +This has been just one example of how to install and use an extension. The + AVAP TM Dev Studio Marketplace has thousands of extensions + supporting hundreds of programming languages and tasks. Everything from + full featured language support for [Java], [Python], [Go], and [C++] to + simple extensions that [create GUIDs], change the [color theme], or add + [virtual pets] to the editor. + +### Extension details + +On the extension details page, you can read the extension's README and + review the extension's: + +* Feature Contributions - The extension's additions to AVAP TM Dev Studio such as settings, commands and keyboard shortcuts, language grammars, debugger, etc. +* Changelog - The extension repository CHANGELOG if available. +* Dependencies - Lists if the extension depends on any other extensions. + +If an extension is an Extension Pack, the Extension Pack {' '} + section will display which extensions will be installed when you install + the pack.{' '} + + Extension Packs + {' '} + bundle separate extensions together so they can be easily installed at one + time. + +### Extensions view filter and commands + +You can filter the Extensions view with the{' '} + Filter Extensions context menu. + +There are filters to show: + +* The list of outdated extensions that can be updated +* The list of currently enabled/disabled extensions +* The list of recommended extensions based on your workspace +* The list of globally popular extensions + +You can sort the extension list by Install Count ,{' '} + Rating , Name ,{' '} + Published Date , or Updated Date in + either ascending or descending order. You can learn more about extension + search filters below . + +You can run additional Extensions view commands via the ...{' '} + View and More Actions button. + +Through this context menu you can control extension updates, enable or + disable all extensions, and use the{' '} + + Extension Bisect + {' '} + utility to isolate problematic extension behavior. + +### Search for an extension + +You can clear the Search box at the top of the Extensions view and type in + the name of the extension, tool, or programming language you're + looking for. + +For example, typing 'python' will bring up a list of Python + language extensions: + +If you know the exact identifier for an extension you're looking for, + you can use the @id: prefix, for example @id:vue.volar. Additionally, to + filter or sort results, you can use the{' '} + filter and{' '} + sort commands, detailed below. + +## Manage extensions + +AVAP TM Dev Studio makes it easy to manage your extensions. You + can install, disable, update, and uninstall extensions through the + Extensions view, the Command Palette (commands have + the Extensions: prefix) or command-line switches. + +### List installed extensions + +By default, the Extensions view will show the extensions you currently + have installed, and all extensions that are recommended for you. You can + use the Extensions: Focus on Installed View command, + available in the Command Palette (Ctrl+Shift+P) + or in the More Actions (...) dropdown menu >{' '} + Views > Installed , to clear any text + in the search box and show the list of all installed extensions, which + includes those that have been disabled. + +### Uninstall an extension + +To uninstall an extension, select the Manage gear button + at the right of an extension entry and then choose{' '} + Uninstall from the dropdown menu. This will uninstall the + extension and prompt you to reload AVAP TM Dev Studio. + +### Disable an extension + +If you don't want to permanently remove an extension, you can instead + temporarily disable the extension by clicking the gear button at the right + of an extension entry. You can disable an extension globally or just for + your current Workspace. You will be prompted to reload AVAP TM {' '} + Dev Studio after you disable an extension. + +If you want to quickly disable all installed extensions, there is a{' '} + Disable All Installed Extensions command in the{' '} + Command Palette and More Actions {' '} + (...) dropdown menu. + +Extensions remain disabled for all AVAP TM Dev Studio sessions + until you re-enable them. + +### Enable an extension + +Similarly if you have disabled an extension (it will be in the{' '} + Disabled section of the list and marked{' '} + + Disabled + + ), you can re-enable it with the Enable or{' '} + Enable (Workspace) commands in the dropdown menu. + +There is also an Enable All Extensions command in the{' '} + More Actions (...) dropdown menu. + +### Extension auto-update + +AVAP TM Dev Studio checks for extension updates and installs + them automatically. After an update, you will be prompted to reload AVAP + TM Dev Studio. If you'd rather update your extensions + manually, you can disable auto-update with the{' '} + Disable Auto Updating Extensions command that sets the + extensions.autoUpdate setting to + false. + +If you don't want AVAP TM Dev Studio to even check for + updates, you can set the extensions.autoCheckUpdates setting to false. + +### Update an extension manually + +If you have extensions auto-update disabled, you can quickly look for + extension updates by using the Show Outdated Extensions {' '} + command that uses the @updates filter. This will display any available + updates for your currently installed extensions. + +Select the Update button for the outdated extension. The + update will be installed, and you'll be prompted to reload AVAP + TM Dev Studio. You can also update all your outdated extensions + at one time with the Update All Extensions command. + +If you also have automatic checking for updates disabled, you can use the{' '} + Check for Extension Updates command to check which of + your extensions can be updated. + +## Recommended extensions + +You can see a list of recommended extensions using{' '} + Show Recommended Extensions , which sets the @recommended{' '} + filter . Extension recommendations + can either be: + +* Workspace Recommendations - Recommended by other users of your current workspace. +* Other Recommendations - Recommended based on recently opened files. + +See the section below to learn how to{' '} + contribute {' '} + recommendations for other users in your project. + +### Ignoring recommendations + +To dismiss a recommendation, select on the extension item to open the + Details page and then select the Manage gear button to + display the context menu. Select the{' '} + Ignore Recommendation menu item. Ignored recommendations + will no longer be recommended to you. + +## Configuring extensions + +AVAP TM Dev Studio extensions may have very different + configurations and requirements. Some extensions contribute settings to + AVAP TM Dev Studio, which can be modified in the Settings + editor. Other extensions may have their own configuration files. + Extensions may also require installation and setup of additional + components like compilers, debuggers, and command-line tools. Consult the + extension's README (visible in the Extensions view details + page) or go to the extension page on the AVAP TM Dev Studio + Marketplace (click on the extension name in the details page). + Many extensions are open source and have a link to their repository on + their Marketplace page. + +## Command line extension management + +To make it easier to automate and configure AVAP TM Dev Studio, + it is possible to list, install, and uninstall extensions from the command + line. When identifying an extension, provide the full name of the form + publisher.extension, for example ms-python.python. + +Example: + +```javascript +code --extensions-dir + + Set the root path for extensions. + + + code --list-extensions + + List the installed extensions. + + + code --show-versions + + Show versions of installed extensions, when using + --list-extension. + + + code --install-extension ( | + ) + + Installs an extension. + + + code --uninstall-extension ( | + ) + + Uninstalls an extension. + + + code --enable-proposed-api () + + Enables proposed API features for extensions. Can receive one or + more extension IDs to enable individually. +``` + +You can see the extension ID on the extension details page under the + Marketplace Info. + +## Extensions view filters + +The Extensions view search box supports filters to help you find and + manage extensions. You may have seen filters such as @installed and + @recommended if you used the commands{' '} + Show Installed Extensions and{' '} + Show Recommended Extensions . Also, there are filters + available to let you sort by popularity or ratings and search by category + (for example 'Linters') and tags (for example + 'node'). You can see a complete listing of all filters and + sort commands by typing @ in the extensions search box and navigating + through the suggestions: + +Here are the Extensions view filters: + +* `@builtin` - Show extensions that come with AVAP TM {' '} Dev Studio. Grouped by type (Programming Languages, Themes, etc.). +* `@disabled` - Show disabled installed extensions. +* `@installed` - Show installed extensions. +* `@outdated` - Show outdated installed extensions. A newer version is available on the Marketplace. +* `@enabled` - Show enabled installed extensions. Extensions can be individually enabled/disabled. +* `@recommended` - Show recommended extensions. Grouped as Workspace specific or general use. +* `@category` - Show extensions belonging to specified category. Below are a few of supported categories. For a complete list, type @category and follow the options in the suggestion list:{' '} @category:themes @category:formatters @category:linters @category:snippets +* @category:themes +* @category:formatters +* @category:linters +* @category:snippets + +These filters can be combined as well. For example: Use @installed + @category:themes to view all installed themes. + +If no filter is provided, the Extensions view displays the currently + installed and recommended extensions. + +### Sorting + +You can sort extensions with the @sort filter, which can take the + following values: + +* `installs` - Sort by Marketplace installation count, in descending order. +* `name` - Sort alphabetically by extension name. +* `publishedDate` - Sort by extension published date. +* `rating` - Sort by Marketplace rating (1-5 stars), in descending order. +* `updateDate` - Sort by extension last update name. + +### Categories and tags + +Extensions can set Categories and Tags {' '} + describing their features. + +You can filter on category and tag by using category: and tag:. + +Supported categories are:{' '} + ` + [Azure, Data Science, Debuggers, Education, Extension Packs, Formatters, + Keymaps, Language Packs, Linters, Machine Learning, Notebooks, Others, + Programming Languages, SCM Providers, Snippets, Testing, Themes, + Visualization] + ` + . They can be accessed through IntelliSense in the extensions search box: + +Note that you must surround the category name in quotes if it is more than + one word (for example, `category:"SCM Providers"` + ). + +Tags may contain any string and are not provided by IntelliSense, so + review the Marketplace to find helpful tags. + +## Install from a VSIX + +You can manually install a AVAP TM Dev Studio extension packaged + in a `.vsix` file. Using the Install from VSIX {' '} + command in the Extensions view command dropdown, or the{' '} + Extensions: Install from VSIX command in the{' '} + Command Palette , point to the `.vsix` file. + +You can also install using the AVAP TM Dev Studio{' '} + `--install-extension` command-line switch providing the path to + the `.vsix` file. + +```javascript +code --install-extension myextension.vsix +``` + +You may provide the `--install-extension` multiple times on the + command line to install multiple extensions at once. + +If you'd like to learn more about packaging and publishing extensions, + see our Publishing Extensions article in the Extension API. + +## Workspace recommended extensions + +A good set of extensions can make working with a particular workspace or + programming language more productive and you'd often like to share + this list with your team or colleagues. You can create a recommended list + of extensions for a workspace with the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command. + +In a single folder workspace, the command creates an{' '} + `extensions.json` file located in the workspace{' '} + `.vscode` folder where you can add a list of extensions + identifiers ({publisherName}.{extensionName}). + +In a multi-root workspace, the command will open your{' '} + `.code-workspace` file where you can list extensions under{' '} + `extensions.recommendations` . You can still add extension + recommendations to individual folders in a multi-root workspace by using + the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command. + +An example `extensions.json` could be: + +```javascript +{ + + ` `"recommendations": ["dbaeumer.vscode-eslint", + "esbenp.prettier-vscode"] + + + } +``` + +which recommends a linter extension and a code formatter extension. + +An extension is identified using its publisher name and extension + identifier `publisher.extension` . You can see the name on the + extension's detail page. AVAP TM Dev Studio will provide you + with auto-completion for installed extensions inside these files. + +AVAP TM Dev Studio prompts a user to install the recommended + extensions when a workspace is opened for the first time. The user can + also review the list with the{' '} + Extensions: Show Recommended Extensions command. + +## Next steps + +Here are a few topics you may find interesting... + +* Extension API(/api) - Start learning about the AVAP TM {' '} Dev Studio extension API. +* Your First Extension - Try creating a simple Hello World extension. +* Publishing to the Marketplace - Publish your own extension to the AVAP TM Dev Studio Marketplace. + +## Common questions + +### Where are extensions installed? + +Extensions are installed in a per user extensions folder. Depending on + your platform, the location is in the following folder: + +* Windows %USERPROFILE%.vscode\extensions +* macOS ~/.vscode/extensions +* Linux ~/.vscode/extensions + +You can change the location by launching AVAP TM Dev Studio with + the --extensions-dir command-line{' '} + option . + +### Whenever I try to install any extension, I get a connect ETIMEDOUT error + +You may see this error if your machine is going through a proxy server to + access the Internet. See the Proxy server support section in the setup + topic for details. + +### Can I download an extension directly from the Marketplace? + +Some users prefer to download an extension once from the Marketplace and + then install it multiple times from a local share. This is useful when + there are connectivity concerns or if your development team wants to use a + fixed set of extensions. + +To download an extension, navigate to the details page for the specific + extension within the Marketplace. On that page, there is a{' '} + Download Extension link in the Resources {' '} + section, which is located on the right-hand side of the page. + +Once downloaded, you can then install the extension via the{' '} + Install from VSIX command in the Extensions view command + dropdown. + +### Can I stop AVAPTM Dev Studio from providing extension + recommendations? + +Yes, if you would prefer to not have AVAP TM Dev Studio display + extension recommendations in the Extensions view or through notifications, + you can modify the following settings: + +* `extensions.showRecommendationsOnlyOnDemand` - Set to true to remove the RECOMMENDED section. +* `extensions.ignoreRecommendations` - Set to true to silence extension recommendation notifications. + +The Show Recommended Extensions command is always + available if you want to see recommendations. + +### Can I trust extensions from the Marketplace? + +The Marketplace runs a virus scan on each extension package that's + published to ensure its safety. The virus scan is run for each new + extension and for each extension update. Until the scan is all clear, the + extension won't be published in the Marketplace for public usage. + +The Marketplace also prevents extension authors from name-squatting on + official publishers such as Microsoft and RedHat. + +If a malicious extension is reported and verified, or a vulnerability is + found in an extension dependency: + +The Marketplace also provides you with resources to make an informed + decision about the extensions you install: + +* Ratings & Review - Read what others think about the extension. +* Q & A - Review existing questions and the level of the publisher's responsiveness. You can also engage with the extension's publisher(s) if you have concerns. +* Issues, Repository, and License - Check if the publisher has provided these and if they have the support you expect. + +If you do see an extension that looks suspicious, you can report the + extension to the Marketplace with the Report Abuse link + at the bottom of the extension More Info section. diff --git a/docs/developer.avapframework.com/USER_GUIDE_IntelliSense.md b/docs/developer.avapframework.com/USER_GUIDE_IntelliSense.md new file mode 100644 index 0000000..af187b1 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_IntelliSense.md @@ -0,0 +1,324 @@ +IntelliSense is a general term for various code editing features + including: code completion, parameter info, quick info, and member lists. + IntelliSense features are sometimes called by other names such as + "code completion", "content assist", and "code + hinting." + +## IntelliSense for your programming language + +AVAP™ Dev Studio 2024 IntelliSense is provided for JavaScript, TypeScript, + JSON, HTML, CSS, SCSS, and Less out of the box. AVAP™ DS Code supports + word based completions for any programming language but can also be + configured to have richer IntelliSense by installing a language extension. + +Below are the most popular language extensions in the{' '} + Marketplace . + Select an extension tile below to read the description and reviews to + decide which extension is best for you. + +## IntelliSense features + +AVAP™ DS Code IntelliSense features are powered by a language service. A + language service provides intelligent code completions based on language + semantics and an analysis of your source code. If a language service knows + possible completions, the IntelliSense suggestions will pop up as you + type. If you continue typing characters, the list of members + (variables, methods, etc.) is filtered to only include members + containing your typed characters. Pressing Tab or Enter will insert the + selected member. + +You can trigger IntelliSense in any editor window by typing Ctrl+Space or + by typing a trigger character (such as the dot character (.) + in JavaScript). + +If you prefer, you can turn off IntelliSense while you type. See{' '} + + Customizing IntelliSense + {' '} + below to learn how to disable or customize VS Code's IntelliSense + features. + +As provided by the language service, you can see{' '} + quick info for each method by either pressing Ctrl+Space + or clicking the info icon. The accompanying documentation for the method + will now expand to the side. The expanded documentation will stay so and + will update as you navigate the list. You can close this by pressing + Ctrl+Space again or by clicking on the close icon. + +After choosing a method you are provided with{' '} + parameter info . + +When applicable, a language service will surface the underlying types in + the quick info and method signatures. In the image above, you can see + several any types. Because JavaScript is dynamic and doesn't need or + enforce types, any suggests that the variable can be of any type. + +## Types of completions + +The JavaScript code below illustrates IntelliSense completions. + IntelliSense gives both inferred proposals and the global identifiers of + the project. The inferred symbols are presented first, followed by the + global identifiers (shown by the Word icon). + +VS Code IntelliSense offers different types of completions, including + language server suggestions, snippets, and simple word based textual + completions. + +## Customizing IntelliSense + +You can customize your IntelliSense experience in settings and key + bindings. + +### Settings + +The settings shown below are the default settings. You can change these + settings in your settings.json file as described in{' '} + User and Workspace Settings . + +```javascript +{ + + ` `// Controls if quick suggestions should show up while typing + + ` `"editor.quickSuggestions": { + + ` `"other": true, + + ` `"comments": false, + + ` `"strings": false + + ` `}, + + ` `// Controls whether suggestions should be accepted on commit + characters. For example, in JavaScript, the semi-colon (`;`) can + be a commit character that accepts a suggestion and types that + character. + + ` `"editor.acceptSuggestionOnCommitCharacter": true, + + ` `// Controls if suggestions should be accepted on 'Enter' - in + addition to 'Tab'. Helps to avoid ambiguity between inserting new lines + or accepting suggestions. The value 'smart' means only accept a + suggestion with Enter when it makes a textual change + + ` `"editor.acceptSuggestionOnEnter": "on", + + ` `// Controls the delay in ms after which quick suggestions will + show up. + + ` `"editor.quickSuggestionsDelay": 10, + + ` `// Controls if suggestions should automatically show up when + typing trigger characters + + ` `"editor.suggestOnTriggerCharacters": true, + + ` `// Controls if pressing tab inserts the best suggestion and if + tab cycles through other suggestions + + ` `"editor.tabCompletion": "off", + + ` `// Controls whether sorting favours words that appear close to + the cursor + + ` `"editor.suggest.localityBonus": true, + + ` `// Controls how suggestions are pre-selected when showing the + suggest list + + ` `"editor.suggestSelection": "first", + + ` `// Enable word based suggestions + + ` `"editor.wordBasedSuggestions": "matchingDocuments", + + ` `// Enable parameter hints + + ` `"editor.parameterHints.enabled": true, + + + } +``` + +### Tab Completion + +The editor supports "tab completion" which inserts the best + matching completion when pressing Tab. This works regardless of the + suggest widget showing or not. Also, pressing Tab after inserting a + suggestions will insert the next best suggestion. + +By default, tab completion is disabled. Use the editor.tabCompletion + setting to enable it. These values exist: + +* off - (default) Tab completion is disabled. +* on - Tab completion is enabled for all suggestions and repeated invocations insert the next best suggestion. +* onlySnippets - Tab completion only inserts static snippets which prefix match the current line prefix. + +### Locality Bonus + +Sorting of suggestions depends on extension information and on how well + they match the current word you are typing. In addition, you can ask the + editor to boost suggestions that appear closer to the cursor position, + using the editor.suggest.localityBonus setting. + +In above images you can see that count, context, and colocated are sorted + based on the scopes in which they appear (loop, function, file). + +### Suggestion selection + +By default, AVAP™ DS Code pre-selects the first suggestion in the + suggestion list. If you'd like different behavior, for example, to + always select the most recently used item in the suggestion list, you can + use the editor.suggestSelection setting. + +The available editor.suggestSelection values are: + +* first - (default) Always select the top list item. +* recentlyUsed - The previously used item is selected unless a prefix (type to select) selects a different item. +* recentlyUsedByPrefix - Select items based on previous prefixes that have completed those suggestions. + +Selecting the most recently used item is very useful as you can quickly + insert the same completion multiple times. + +"Type to select" means that the current prefix (roughly the + text left of the cursor) is used to filter and sort suggestions. When + this happens and when its result differs from the result of recentlyUsed, + it will be given precedence. + +When using the last option, recentlyUsedByPrefix, AVAP™ DS Code remembers + which item was selected for a specific prefix (partial text). For + example, if you typed co and then selected console, the next time you + typed co, the suggestion console would be pre-selected. This lets you + quickly map various prefixes to different suggestions, for example co + -> console and con -> const. + +### Snippets in suggestions + +By default, AVAP™ DS Code shows snippets and completion proposals in one + widget. You can control the behavior with the editor.snippetSuggestions + setting. To remove snippets from the suggestions widget, set the value to + "none". If you'd like to see snippets, you can specify the + order relative to suggestions; at the top ("top"), at + the bottom ("bottom"), or inline ordered alphabetically + ("inline"). The default is "inline". + +### Key bindings + +The key bindings shown below are the default key bindings. You can change + these in your keybindings.json file as described in{' '} + Key Bindings . + +Note: There are many more key bindings relating to + IntelliSense. Open the Default Keyboard Shortcuts ( + File > Preferences >{' '} + Keyboard Shortcuts ) and search for + "suggest". + +```javascript +[ + ` `{ + + ` `"key": "ctrl+space", + + ` `"command": "editor.action.triggerSuggest", + + ` `"when": "editorHasCompletionItemProvider && + editorTextFocus && !editorReadonly" + + ` `}, + + ` `{ + + ` `"key": "ctrl+space", + + ` `"command": "toggleSuggestionDetails", + + ` `"when": "editorTextFocus && suggestWidgetVisible" + + ` `}, + + ` `{ + + ` `"key": "ctrl+alt+space", + + ` `"command": "toggleSuggestionFocus", + + ` `"when": "editorTextFocus && suggestWidgetVisible" + + ` `} + + ] +``` + +## Enhance completions with AI + +In AVAP™ DS Code, you can enhance your coding with artificial intelligence + (AI), such as suggestions for lines of code or entire functions, + fast documentation creation, and help creating code-related artifacts like + tests. + +GitHub Copilot is an AI-powered + code completion tool that helps you write code faster and smarter. You can + use the{' '} + + GitHub Copilot extension + {' '} + in VS Code to generate code, or to learn from the code it generates. + +![GitHub Copilot extension in the VS Code Marketplace][IntelliSense demo] + +You can learn more about how to get started with Copilot in the{' '} + Copilot documentation . + +## Troubleshooting + +If you find IntelliSense has stopped working, the language service may not + be running. Try restarting VS Code and this should solve the issue. If you + are still missing IntelliSense features after installing a language + extension, open an issue in the repository of the language extension. + +A particular language extension may not support all the AVAP™ DS Code + IntelliSense features. Review the extension's README to find out what + is supported. If you think there are issues with a language extension, you + can usually find the issue repository for an extension through the{' '} + + AVAP™ DS Code Marketplace + + . Navigate to the extension's Details page and select the{' '} + Support link. + +## Next steps + +IntelliSense is just one of AVAP™ DS Code's powerful features. Read on + to learn more: + +* JavaScript - Get the most out of your JavaScript development, including configuring IntelliSense. +* Node.js - See an example of IntelliSense in action in the Node.js walkthrough. +* Debugging - Learn how to set up debugging for your application. +* Creating Language extensions {' '} - Learn how to create extensions that add IntelliSense for new programming languages. +* GitHub Copilot in AVAP™ DS Code {' '} - Learn how to use AI with GitHub Copilot to enhance your coding. + +## Common questions + +### Why am I not getting any suggestions? + +This can be caused by a variety of reasons. First, try restarting AVAP™ DS + Code. If the problem persists, consult the language extension's + documentation. For JavaScript specific troubleshooting, please see the{' '} + + JavaScript language topic + + . + +### Why am I not seeing method and variable suggestions? + +This issue is caused by missing type declaration (typings) files + in JavaScript. You can check if a type declaration file package is + available for a specific library by using the{' '} + TypeSearch site. + There is more information about this issue in the{' '} + + JavaScript language topic + + . For other languages, please consult the extension's documentation. diff --git a/docs/developer.avapframework.com/USER_GUIDE_MultiRootWorkspaces.md b/docs/developer.avapframework.com/USER_GUIDE_MultiRootWorkspaces.md new file mode 100644 index 0000000..6f2c7fa --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_MultiRootWorkspaces.md @@ -0,0 +1,423 @@ +You can work with multiple project folders in AVAP™ Dev Studio 2024 with + multi-root workspaces. This can be helpful when you are working on several + related projects at one time. For example, you might have a repository + with a product's documentation that you like to keep current when you + update the product source code. + +## Adding folders + +It is easy to add another folder to your existing workspace. There are + several gestures for adding folders: + +### Add Folder to Workspace + +The File > Add Folder to Workspace {' '} + command brings up an Open Folder dialog to select the new folder. + +Once a root folder is added, the Explorer will show the new folder as a + root in the File Explorer. You can right-click on any of the root folders + and use the context menu to add or remove folders. + +The File Explorer should work and behave as before. You can move files + between root folders and use any of the typical file operation actions + provided in the context menu and the Explorer view. + +Settings like files.exclude are supported for each root folder if + configured, and across all folders if configured as global user setting. + +### Drag and drop + +You can use drag and drop to add folders to a workspace. Drag a folder to + the File Explorer to add it to the current workspace. You can even select + and drag multiple folders. + +You can also use drag and drop to reorder folders in the workspace. + +### Multiple selection native file open dialogs + +Opening multiple folders with your platform's native file open dialog + will create a multi-root workspace. + +### command line --add + +Add a folder or multiple folders to the last active AVAP TM Dev + Studio instance for a multi-root workspace. + +```javascript +` `code --add vscode vscode-docs +``` + +### Removing folders + +You can remove a folder from a Workspace with the{' '} + Remove Folder from Workspace context menu command. + +## Workspace file + +When you add multiple folders, they are initially placed in a Workspace + titled UNTITLED WORKSPACE and that name will remain until + you save the workspace. You do not need to save a Workspace until you want + to have it in a permanent location, for example, on your Desktop. Untitled + Workspaces are present as long as the AVAP TM Dev Studio + instance they are using is open. Once you completely close an instance + with an untitled workspace, you will be asked to save it if you plan to + open it again in the future: + +When you save your workspace, it will create a .code-workspace file and + the file name will be displayed in the File Explorer. + +### Save Workspace As... + +If you want to move your Workspace file to a new location, you can use the{' '} + File > Save Workspace As command, + which will automatically set the correct folder paths relative to the new + Workspace file location. + +### Opening workspace files + +To reopen a Workspace, you can: + +* Double-click the .code-workspace file in your platform's Explorer. +* Use the File > Open Workspace {' '} command and select the Workspace file. +* Select the Workspace from the File >{' '} Open Recent (Ctrl+R) list.{' '} Workspaces have a (Workspace) suffix to differentiate them from folders. +* Workspaces have a (Workspace) suffix to differentiate them from folders. + +Just like Close Folder when a single folder is open in + AVAP TM Dev Studio, there is a Close Workspace {' '} + (Ctrl+K F) command to close the active Workspace. + +### Workspace file schema + +The schema of `.code-workspace` is fairly straightforward. You + have an array of folders with either absolute or relative paths. Relative + paths are better when you want to share Workspace files. + +You can override the display `name` of your folders with the + name attribute, to give more meaningful names to folders in the Explorer. + For example, you could name your project folders such as 'Product' + and 'Documentation' to easily identify the content by folder name: + +```javascript +{ + ` `"folders": [` `{ + ` `// Source code + ` `"name": "Product", + ` `"path": "vscode" + ` `}, + ` `{ + ` `// Docs and release notes + ` `"name": "Documentation", + ` `"path": "vscode-docs" + ` `}, + ` `{ + ` `// Yeoman extension generator + ` `"name": "Extension generator", + ` `"path": "vscode-generator-code" + ` `} + ` `] + + } +``` + +which will result in the following Explorer display: + +As you can see from the example above, you can add comments to your + Workspace files. + +The Workspace file can also contain Workspace global settings under{' '} + `settings` and extension recommendations under{' '} + `extensions` , which we will discuss below. + +## General UI + +### Editor + +There are only a few changes to the AVAP TM Dev Studio UI when + you are using multi-root workspaces, primarily to disambiguate files + between folders. For example, if there is a name collision between files + in multiple folders, AVAP TM Dev Studio will include the folder + name in tabbed headers. + +If you'd always like to see the folder displayed in the tabbed header, + you can use the `workbench.editor.labelFormat` setting + "medium" or "long" values to show the folder or full + paths. + +```javascript +"workbench.editor.labelFormat": "medium" +``` + +AVAP TM Dev Studio UI such as the OPEN EDITORS {' '} + and Quick Open (Ctrl+P) lists include the folder + name. + +If you are using an File Icon Theme and the active theme supports it, you + will see a special Workspace icon. + +Below you can see the Workspace icons from the built-in{' '} + Minimal (Visual Studio Code) file icon theme: + +### Search + +AVAP TM Dev Studio features like global search work across all + folders and group the search results by folder. + +When you have a multi-root workspace open, you can choose to search in a + single root folder by using the ./ syntax in the{' '} + files to include box. For example, if you enter{' '} + `./project1/\*\*/\*.txt` , that will search for all{' '} + `.txt` files under the `project1/` root folder. + +## Settings + +With multiple root folders in one workspace, it is possible to have a + .vscode folder in each root folder defining the settings that should apply + for that folder. To avoid setting collisions, only resource (file, + folder) settings are applied when using a multi-root workspace. + Settings that affect the entire editor (for example, UI layout) + are ignored. For example, two projects cannot both set the zoom level. + +User settings are supported as with single folder projects and you can + also set global Workspace settings that will apply to all folders in your + multi-root Workspace. Global Workspace settings will be stored in your + `.code-workspace` file. + +```javascript +{ + ` `"folders": [` `{ + ` `"path": "vscode" + ` `}, + ` `{ + ` `"path": "vscode-docs" + ` `}, + ` `{ + ` `"path": "vscode-generator-code" + ` `} + ` `], + ` `"settings": { + ` `"window.zoomLevel": 1, + ` `"files.autoSave": "afterDelay" + ` `} + + } +``` + +When you go from a single folder instance to multiple folders, AVAP + TM Dev Studio will add the appropriate editor-wide settings + from the first folder to the new global Workspace settings. + +You can easily review and modify the different settings files through the + Settings editor. The Settings editor tabs let you select your User + settings, global Workspace settings, and individual folder settings. + +You can also open specific settings files with the commands: + +* Preferences: Open User Settings - Open your global User settings +* Preferences: Open Workspace Settings - Open the settings section of your Workspace file. +* Preferences: Open Folder Settings - Open the settings for the active folder. + +Global Workspace settings override User settings and folder settings can + override Workspace or User settings. + +### Unsupported folder settings + +Unsupported editor-wide folder settings will be shown as grayed out in + your folder settings and are filtered out of the{' '} + DEFAULT FOLDER SETTINGS list. You will also see an + information icon in front of the setting. + +## Debugging + +With multi-root workspaces, AVAP TM Dev Studio searches across + all folders for `launch.json` debug configuration files and + displays them with the folder name as a suffix. Additionally AVAP + TM Dev Studio will also display launch configurations defined + in the workspace configuration file. + +The example above shows the debugging configurations for the TSLint + extension. There is a `launch` configuration from the{' '} + `tslint` extension folder to start the extension running in the + AVAP TM Dev Studio Extension Host and also an{' '} + `attach` configuration from the `tslint-server` {' '} + folder to attach the debugger to a running TSLint server. + +You can also see the three Add Config commands for the + folders, `tslint` , `tslint-server` , and{' '} + `tslint-tests` , in the vscode-tslint Workspace. The{' '} + Add Config command will either open an existing + launch.json file in the folder's .vscode subfolder or create a new one + and display the debugging configuration template dropdown. + +Variables used in a configuration (for example{' '} + `${workspaceFolder}` or the now deprecated{' '} + `${workspaceRoot}` ) are resolved relative to the + folder they belong to. It is possible to scope a variable per workspace + folder by appending the root folder's name to a variable + (separated by a colon). + +### Workspace launch configurations + +Workspace scoped launch configurations live in the " + `launch` " section of the workspace configuration file + ( Workspaces: Open Workspace Configuration File in the + Command Palette): + +Alternatively, new launch configurations can be added via the "Add + Config (workspace)" entry of the Launch Configuration + dropdown menu: + +A compound launch configuration can reference the individual launch + configurations by name as long as the names are unique within the + workspace, for example: + +```javascript +` `"compounds": [{ + ` `"name": "Launch Server & Client", + ` `"configurations": [` `"Launch Server", + ` `"Launch Client" + ` `] + ` `}] +``` + +If the individual launch configuration names are not unique, the + qualifying folder can be specified with a more verbose "folder" + syntax: + +```javascript +` `"compounds": [{ + ` `"name": "Launch Server & Client", + ` `"configurations": [` `"Launch Server", + ` `{ + ` `"folder": "Web Client", + ` `"name": "Launch Client" + ` `}, + ` `{ + ` `"folder": "Desktop Client", + ` `"name": "Launch Client" + ` `} + ` `] + ` `}] +``` + +In addition to `compounds` , the `launch` section of + the workspace configuration file can contain regular launch configurations + too. Make sure that all used variables are explicitly scoped to a specific + folder because otherwise they are not valid for the workspace. You can + find more details about explicitly scoped variables in the Variables + Reference. + +Here is an example for a launch configuration where the program lives in a + folder "Program" and where all files from a folder + "Library" should be skipped when stepping: + +```javascript +"launch": { + ` `"configurations": [{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch test", + ` `"program": "${workspaceFolder:Program}/test.js", + ` `"skipFiles": [` + `"${workspaceFolder:Library}/out/\*\*/\*.js" + ` `] + ` `}] + + } +``` + +## Tasks + +Similar to how AVAP TM Dev Studio searches for debugging + configurations, AVAP TM Dev Studio will also try to autodetect + tasks from gulp, grunt, npm, and TypeScript project files across all + folders in a workspace as well as search for tasks defined in{' '} + `tasks.json` files. The location of tasks is indicated by a + folder name suffix. Note that tasks defined in `tasks.json` {' '} + must be version 2.0.0. + +From the TSLint extension Workspace example above, you can see that there + are two configured tasks from `tasks.json` {' '} + files in the `tslint` and `tslint-tests` folders and + numerous autodetected npm and TypeScript compiler{' '} + detected tasks . + +### Workspace task configuration + +Workspace scoped tasks live in the " `tasks` " section + of the workspace configuration file ( + Workspaces: Open Workspace Configuration File in the + Command Palette). Only " `shell` " and " + `process` " type tasks can be defined in the workspace + configuration file. + +## Source Control + +With multi-root workspaces, there is a{' '} + SOURCE CONTROL PROVIDERS section that gives you an + overview when you have multiple active repositories. These can be + contributed by several SCM providers; for example, you can have Git + repositories side-by-side with Azure DevOps Server workspaces. As you + select repositories in this view, you can see the source control details + below. + +You can use Ctrl+Click or Shift+Click to select multiple repositories. + Their details will appear as separate regions underneath. + +## Extensions + +If you are an extension author, you can review our Adopting Multi Root + Workspace APIs guide to learn about AVAP TM Dev Studio + multi-root workspace APIs and how to make your extension work well across + multiple folders. + +Below are some of the popular extensions that have adopted the multi-root + workspace APIs. + +### Extension recommendations + +AVAP TM Dev Studio supports folder level extension + recommendations through the `extensions.json` files under the + folder's `.vscode` subfolder. You can also provide global + Workspace extension recommendations by adding them to your{' '} + `.code-workspace` file. You can use the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command to open your Workspace file and add extension identifiers + ({publisherName}.{extensionName}) to the{' '} + `extensions.recommendations` array. + +```javascript +{ + ` `"folders": [` `{ + ` `"path": "vscode" + ` `}, + ` `{ + ` `"path": "vscode-docs" + ` `} + ` `], + ` `"extensions": { + ` `"recommendations": ["eg2.tslint", "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode"] + ` `} + + } +``` + +## Next steps + +* What is a AVAP TM Dev Studio "workspace"? - More about single-folder and multi-root workspaces. +* Debugging - Learn how to set up debugging for your application. +* Tasks - Tasks let you run external tools like compilers within AVAP TM Dev Studio. + +## Common questions + +### How can I go back to working with a single project folder? + +You can either close the Workspace and open the folder directly or remove + the folder from Workspace. + +### As an extension author what do I need to do? + +See our Adopting Multi Root Workspace APIs guide. Most extensions can + easily support multi-root workspaces. diff --git a/docs/developer.avapframework.com/USER_GUIDE_Profiles.md b/docs/developer.avapframework.com/USER_GUIDE_Profiles.md new file mode 100644 index 0000000..df17875 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_Profiles.md @@ -0,0 +1,535 @@ +AVAP TM Dev Studio has hundreds of settings, thousands of + extensions, and innumerable ways to adjust the UI layout to customize the + editor. AVAP TM Dev Studio Profiles let you + create sets of customizations and quickly switch between them or share + them with others. This topic explains how to create, modify, export, and + import profiles. + +## Create a Profile + +AVAP TM Dev Studio treats your current configuration as the{' '} + Default Profile . As you modify settings, install + extensions, or change UI layout by moving views, these customizations are + tracked in the Default Profile. + +To create a new profile, you can use the File >{' '} + Preferences > Profiles >{' '} + Create Profile menu item. + +You can create a new profile based on the current profile ( + Profiles: Create from Current Profiles ) or create an + Empty Profile. An Empty Profile includes no user customizations + (settings, extensions, snippets, etc.). + +You can also access the Profile command menu via the{' '} + Manage gear button in the lower right of the Activity + bar. + +The Profiles: Create Profile command is also available in + the Command Palette (Ctrl+Shift+P). + +You can choose to create a new profile by copying from a Profile Template + or from an existing profile or create an Empty Profile in the Profile + creation dialog. + +### Partial Profile + +A partial profile allows you to customize only a subset of configurations + (settings, keyboard shortcuts, snippets, tasks and extensions) and + use the rest of the configurations from the Default Profile. For example, + you can create a profile with all configurations except for keyboard + shortcuts, and AVAP TM Dev Studio will apply the keyboard + shortcuts from the Default Profile when this profile is active. + +### Check the current profile + +The current profile name is displayed in several places in the AVAP + TM Dev Studio UI: + +* Title bar +* File > Preferences >{' '} Profiles +* Manage gear button hover + +If you are still using the Default Profile, no profile name is displayed. + +The Manage gear button displays a badge with the first + two letters of the active profile so you can quickly check which profile + you are running. + +### Configure a profile + +You can configure a profile just as you would normally change any AVAP + TM Dev Studio configuration. You can install/uninstall/disable + extensions, change settings, and adjust the editor's UI layout + (for example, moving and hiding views) like normal. These changes + are stored in your currently active profile. + +### Workspace associations + +When you create or select an existing profile, it is associated with the + current workspace and whenever you open that folder, the workspace's + profile is active. If you open another folder, the profile switches to + that folder's associated profile if one has been set or remains on the + last used profile. + +## Managing profiles + +### Switch profiles + +You can quickly switch between profiles with the{' '} + Profiles: Switch Profile command in the Command Palette, + which presents a dropdown listing your available profiles. + +You can also switch profiles by selecting a profile from the list + displayed in the Profiles menus, available via the Manage {' '} + gear button or File > Preferences {' '} + > Profiles . + +### Edit a profile + +You can edit an existing profile via the Edit command in + the Profiles menu. + +### Delete a profile + +You can delete a profile via the Delete Profile command. + The Delete Profile drop down lets you select which + profile(s) to delete. + +## Profile contents + +The Profiles: Show Contents command (available in the + Command Palette or Profiles menus) brings up the Profiles view, where + you can review the customizations for the profile. + +A profile can include: + +* Settings - In a profile-specific `settings.json` file. +* Extensions - The list of extensions included in the current profile. +* UI state - View layout (positions), visible views and actions. +* Keybindings - In a profile-specific `keybindings.json` file. +* Snippets - In a profile-specific `{language}.json` {' '} files. +* User Tasks - In a profile-specific `tasks.json` file. + +When you create a new profile based on the Default Profile, the + profile-specific configuration files are populated from your user + configuration files. Workspace-specific settings are not automatically + included in a new profile. + +### Applying a setting to all profiles + +A setting can be applied to all profiles using the{' '} + Apply Setting to all Profiles action available in the + Settings editor. + +This will apply the value of the setting to all profiles. Any updates to + this setting from any profile will be applied to all profiles. You can + always revert this by unchecking the{' '} + Apply Setting to all Profiles action. + +### Applying an extension to all profiles + +An extension can be applied to all profiles by clicking on the{' '} + Apply Extension to all Profiles action in the Extensions + view. + +This will make this extension available in all profiles. You can always + revert this by unchecking the{' '} + Apply Extension to all Profiles action. + +## Share Profiles + +### Export + +You can export a profile in order to save it or share it with others. The{' '} + Export Profile command displays the Profiles view with + the contents of the active profile and an Export button. + You can unselect various elements of the profile such as extensions or + configuration files before you export the profile. + +When you select Export , you are prompted for the profile + name and whether you want to export to a GitHub gist or your local file + system. + +After you save a profile to GitHub (you'll be prompted to log into + GitHub), a dialog gives you the option to Copy Link {' '} + so you can share your profile gist URL with others. The URL includes an + autogenerated GUID and has the format (LINK). The GitHub gist is + marked as Secret , so only those with the link can see the + gist. + +If you launch the profile URL, it opens AVAP TM Dev Studio for + the Web (vscode.dev) with the Profiles view open and the imported + profile contents displayed. You can unselect profile elements if you wish + and you need to manually Install Extensions (via the + download cloud button) if you want to continue using that profile in + vscode.dev. + +You also have the option to{' '} + + Import Profile in AVAP TM Dev Studio + + , which opens AVAP TM Dev Studio Desktop with the profile's + contents displayed and an Import Profile button. + +You can review your gists at (LINK). From your GitHub gist page + you can rename, delete, or copy the GUID of a gist. + +If you chose to save the profile as a local file, a{' '} + Save Profile dialog lets you place the file on your local + machine. A profile is persisted in a file with the extension{' '} + `.code-profile` . + +### Import + +To import an existing profile, run the Import Profiles {' '} + command. You are prompted for the URL of a GitHub gist or the file + location of a profile via an Import Profile dialog. Once + you have selected the profile, the Profiles view opens and displays the + profile to import. You can unselect some profile elements if you don't + want to import them. Select the Import Profile button and + you will now be using the imported profile. + +## Uses for Profiles + +Profiles are a great way to customize AVAP TM Dev Studio to + better fit your needs. In this section, we look at some common use cases + for profiles. + +Since profiles are remembered per workspace, they are a great way to + customize AVAP TM Dev Studio for a specific programming + language. For example, you can create a JavaScript frontend profile that + includes the extensions, settings, and customizations you use for + JavaScript development in one workspace, and have a Python backend profile + that includes the extensions, settings, and customizations you use for + Python development in another workspace. Using this approach, you can + easily switch between workspaces and always have AVAP TM Dev + Studio configured the right way. + +### Demos + +When doing a demo, you can use a profile to set up a specific + configuration for your demo. For example, you can create a profile with a + specific set of extensions and settings like zoom level, font size, and + color theme. By doing this, a demo will not mess up your normal AVAP + TM Dev Studio setup and you can customize AVAP TM Dev + Studio for better visibility during your presentation. + +### Education + +Profiles can be used to customize AVAP TM Dev Studio for + students to ease the use in a classroom setting. Profiles allow educators + to quickly share a customized AVAP TM Dev Studio setup with + students. For example, educators can create a profile with a specific set + of extensions and settings needed for a computer science class and then + share that profile with students. + +### Report AVAPTM Dev Studio issues + +One use of an Empty Profile is to reset your editor when you want to + report an issue with AVAP TM Dev Studio. An Empty Profile + disables all extensions and modified settings so you can quickly see if + the issue is due to an extension, a setting, or is in AVAP TM {' '} + Dev Studio core. + +## Profile Templates + +AVAP TM Dev Studio comes with a predefined set of profile + templates that you can use to customize AVAP TM Dev Studio for + your specific workflow. To create a new profile based on a template, + select a Profile Template when going through the{' '} + Create Profile flow. + +### Python Profile Template + +The Python profile is a good starting point for Python development. It + comes with Python specific snippets and has the following extensions: + +* autoDocstring - Generate Python docstrings automatically. +* Black Formatter - Formatting support using the black formatter. +* Docker - Create, manage, and debug containerized applications. +* Even Better TOML - Fully-featured TOML support. +* Python - IntelliSense, linting, formatting, debugging, refactoring. +* Python Environment Manager - Manage Python environments and packages. +* Remote Development extension pack - Supports SSH, WSL, and Dev Containers. +* Ruff - Integrates the Ruff Python linter. + +This profile also sets the following settings: + +```javascript +` `"python.analysis.autoImportCompletions": true, + ` `"python.analysis.fixAll": ["source.unusedImports"], + ` `"editor.defaultFormatter": "ms-python.black-formatter" +``` + +### Data Science Profile Template + +The Data Science profile is a good starting point for all data and + notebook work. It comes with specific snippets and has the following + extensions: + +* Data Wrangler - Data cleaning and preparation for tabular datasets. +* Black Formatter - Formatting support using the black formatter. +* Jupyter - Use Jupyter notebooks within AVAP TM Dev Studio. +* Python - IntelliSense, linting, formatting, debugging, refactoring. +* Dev Containers - Create custom development environments inside a Docker container. +* GitHub Copilot - Your AI pair programmer. + +This profile also sets the following settings: + +```javascript +` `"[python]": { + ` `"editor.defaultFormatter": "ms-python.black-formatter", + ` `"editor.formatOnType": true, + ` `"editor.formatOnSave": true + ` `}, + ` `"editor.inlineSuggest.enabled": true, + ` `"editor.lineHeight": 17, + ` `"breadcrumbs.enabled": false, + ` `"files.autoSave": "afterDelay", + ` `"jupyter.themeMatplotlibPlots": true, + ` `"jupyter.widgetScriptSources": [` `"unpkg.com", + ` `"jsdelivr.com" + ` `], + ` `"notebook.experimental.outputScrolling": true, + ` `// "notebook.outline.showCodeCells": true, + ` `"files.exclude": { + ` `"\*\*/.csv": true, + ` `"\*\*/.parquet": true, + ` `"\*\*/.pkl": true, + ` `"\*\*/.xls": true + ` `} +``` + +### Doc Writer Profile Template + +The Doc Writer profile is a good lightweight setup for writing + documentation. It comes with the following extensions: + +* Code Spell Checker - Spelling checker for source code. +* Markdown Checkboxes - Adds checkbox support to the AVAP TM Dev Studio built-in Markdown Preview. +* Markdown Emoji - Adds emoji syntax support to Markdown Preview and notebook Markdown cells. +* Markdown Footnotes - Adds ^footnote syntax support to the Markdown Preview. +* Markdown Preview GitHub Styling - Use GitHub styling in the Markdown Preview. +* Markdown Preview Mermaid Support - Mermaid diagrams and flowcharts. +* Markdown yaml Preamble - Renders YAML front matter as a table. +* markdownlint - Markdown linting and style checking for AVAP TM {' '} Dev Studio. + +This profile also sets the following settings: + +```javascript +` `"workbench.colorTheme": "Default Light+ Experimental", + ` `"editor.minimap.enabled": false, + ` `"breadcrumbs.enabled": false, + ` `"editor.glyphMargin": false, + ` `"explorer.decorations.badges": false, + ` `"explorer.decorations.colors": false, + ` `"editor.fontLigatures": true, + ` `"files.autoSave": "afterDelay", + ` `"git.enableSmartCommit": true, + ` `"window.commandCenter": true, + ` `"editor.renderWhitespace": "none", + ` `"workbench.editor.untitled.hint": "hidden", + ` `"markdown.validate.enabled": true, + ` `"markdown.updateLinksOnFileMove.enabled": "prompt", + ` `"workbench.startupEditor": "none" +``` + +### Node.js Profile Template* + +The Node.js profile is a good starting point for all Node.js work. It + comes with the following extensions: + +* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. +* Dev Containers - Create custom development environments inside a Docker container. +* Docker - Create, manage, and debug containerized applications. +* DotENV - Support for dotenv file syntax. +* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. +* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. +* Jest - Use Facebook's jest testing framework. +* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. +* npm Intellisense - Autocomplete npm modules in import statements. +* Prettier - Code formatter - Code formatter using Prettier. +* Rest Client - REST Client for AVAP TM Dev Studio. +* YAML - YAML language support with built-in Kubernetes syntax. + +This profile comes with the following settings: + +```javascript +` `"editor.formatOnPaste": true, + ` `"git.autofetch": true, + ` `"[markdown]": { + ` `"editor.wordWrap": "on" + ` `}, + ` `"[json]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[jsonc]": { + ` `"editor.defaultFormatter": "vscode.json-language-features" + ` `}, + ` `"[html]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[javascript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[typescript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `} +``` + +### Angular Profile Template + +The Angular profile is a good starting point for all Angular work. It + comes with the following extensions: + +* Angular Language Service - Editor services for Angular templates. +* Angular Schematics - Integrate Angular schematics (CLI commands). +* angular2-switcher - Easily navigate to `typescript|template|style` in angular2 project. +* Dev Containers - Create custom development environments inside a Docker container. +* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. +* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. +* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. +* Jest - Use Facebook's jest testing framework. +* Material Icon Theme - Material Design Icons for AVAP TM Dev Studio. +* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. +* Playwright Test for VSCode - Run Playwright tests in AVAP TM {' '} Dev Studio. +* Prettier - Code formatter - Code formatter using Prettier. +* Rest Client - REST Client for AVAP TM Dev Studio. +* YAML - YAML language support with built-in Kubernetes syntax. + +This profile sets the following settings: + +```javascript +` `"editor.formatOnPaste": true, + ` `"git.autofetch": true, + ` `"[markdown]": { + ` `"editor.wordWrap": "on" + ` `}, + ` `"[json]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[jsonc]": { + ` `"editor.defaultFormatter": "vscode.json-language-features" + ` `}, + ` `"[html]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[javascript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[typescript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"workbench.iconTheme": "material-icon-theme" +``` + +### Java General Profile Template + +The Java General profile is a good starting point for all Java work. It + customizes the layout to improve the Java experience and comes with the + following extensions from the Extension Pack for Java: + +* Debugger for Java - A lightweight Java debugger. +* IntelliCode - AI-assisted development. +* IntelliCode API Usage Examples - Provides code examples for over 100K different APIs. +* Language Support for Java(TM) by Red Hat - Fundamental Java language support, Linting, Intellisense, formatting, refactoring. +* Maven for Java - Manage Maven projects and builds. +* Project Manager for Java - Manage Java projects within AVAP TM {' '} Dev Studio. +* Test Runner for Java - Run and debug JUnit or TestNG test cases. + +### Java Spring Profile Template + +The Java Spring profile is a good starting point for all Java and Spring + developers. It builds on the Java General profile and add the following + extensions from the Spring Boot Extension Pack: + +* Spring Boot Dashboard - Provides Spring Boot live data visualization and observation in your running Spring applications. +* Spring Boot Tools - Rich language support for Spring Boot files. +* Spring Initializr Java Support - Scaffold and generate Spring Boot Java projects. + +This profile sets the following settings: + +```javascript +` `"[java]": { + ` `"editor.defaultFormatter": "redhat.java" + ` `}, + ` `"boot-java.rewrite.reconcile": true +``` + +## Command line + +You can launch AVAP TM Dev Studio with a specific profile via + the `--profile` command-line interface option. You pass the + name of the profile after the `--profile` argument and open a + folder or a workspace using that profile. The command line below opens the{' '} + `web-sample` folder with the "Web Development" + profile: + +` + code ~/projects/web-sample --profile "Web Development" + ` + +If the profile specified does not exist, a new empty profile with the + given name is created. + +## Common Questions + +### Where are profiles kept? + +Profiles are stored under your User configurations similar to your user + settings and keybindings. + +* Windows `%APPDATA%\Code\User\profiles` +* macOS {' '} `$HOME/Library/Application\ Support/Code/User/profiles` +* Linux `$HOME/.config/Code/User/profiles` + +If you are using the Insiders version, the intermediate folder name is{' '} + `Code - Insiders` . + +### Where is the UI State globalState.json file? + +If you expand the UI State node in the Profiles view, + there is a `globalState.json` entry. This is an in-memory JSON + representation of your profile's UI State, describing the visibility + and layout of various AVAP TM Dev Studio UI elements. The file + does not actually exist on disk and is just a JSON view of the underlying + global state storage. + +### What is a Temporary Profile? + +A Temporary Profile is a profile that is not saved across AVAP + TM Dev Studio sessions. You create a Temporary Profile via the{' '} + Profiles: Create a Temporary Profile command in the + Command Palette. The Temporary Profile starts as an Empty Profile and has + an automatically generated name (such as Temp 1 ). + You can modify the profile settings and extensions, use the profile for + the lifetime of your AVAP TM Dev Studio session, but it will be + deleted once you close AVAP TM Dev Studio. + +Temporary Profiles are useful if you want to try a new configuration or + test an extension without modifying your default or existing profile. + Restarting AVAP TM Dev Studio reenables the current profile for + your workspace. + +### How can I remove the profile from my project? + +You can set your project back to the Default Profile. If you'd like to + remove all profile workspace associations, you can use the{' '} + Developer: Reset Workspace Profiles Associations , which + will set all local folders currently assigned a profile back to the + Default Profile. Reset Workspace Profiles Associations {' '} + does not delete any existing profiles. + +### Do profiles sync across machines (via Settings Sync)? + +Yes, you can use Settings Sync to move your profiles across various + machines. With Setting Sync enabled and Profiles checked + in the Settings Sync: Configure drop down, all your + created profiles are available. + +### Why are some settings not exported when exporting a profile? + +When exporting profiles, machine-specific settings are not included + because these setting would not be applicable on another machine. For + example, settings that point to local paths are not included. diff --git a/docs/developer.avapframework.com/USER_GUIDE_Refactoring.md b/docs/developer.avapframework.com/USER_GUIDE_Refactoring.md new file mode 100644 index 0000000..876a9ff --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_Refactoring.md @@ -0,0 +1,156 @@ +Source code refactoring can improve the quality and maintainability of + your project by restructuring your code while not modifying the runtime + behavior. AVAP TM Dev Studio supports refactoring operations + (refactorings) such as Extract Method and Extract Variable to + improve your code base from within your editor. + +For example, a common refactoring used to avoid duplicating code (a + maintenance headache) is the Extract Method refactoring, where you + select source code that you'd like to reuse elsewhere and pull it out + into its own shared method. + +Refactorings are provided by a language service and AVAP TM Dev + Studio has built-in support for TypeScript and JavaScript refactoring + through the TypeScript language service. Refactoring support for other + programming languages is provided through AVAP TM Dev Studio + extensions that contribute language services. The UI and commands for + refactoring are the same across languages, and in this topic we'll + demonstrate refactoring support with the TypeScript language service. + +## Code Actions = Quick Fixes and refactorings + +In AVAP TM Dev Studio, Code Actions can provide both + refactorings and Quick Fixes for detected issues (highlighted with red + squiggles). An available Code Action is announced by a lightbulb near + the source code when the cursor is on a squiggle or selected text region. + Clicking on the Code Action lightbulb or using the{' '} + Quick Fix command Ctrl+. will display Quick Fixes and + refactorings. + +If you'd just like to see refactorings without Quick Fixes, you can + use the Refactor command (Ctrl+Shift+R). + +## Refactoring actions + +### Extract Method + +Select the source code you'd like to extract and then click on the + lightbulb in the gutter or press (Ctrl+.) to see available + refactorings. Source code fragments can be extracted into a new method, or + into a new function at various different scopes. During the extract + refactoring, you will be prompted to provide a meaningful name. + +### Extract Variable + +TypeScript language service provides Extract to const {' '} + refactoring to create a new local variable for the currently selected + expression: + +When working with classes, you can also extract a value to a new property. + +## Rename symbol + +Renaming is a common operation related to refactoring source code and AVAP + TM Dev Studio has a separate Rename Symbol {' '} + command (F2). Some languages support rename symbol across files. + Press F2 and then type the new desired name and press `Enter` . + All usages of the symbol will be renamed, across files. + +## Keybindings for Code Actions + +The `editor.action.codeAction` command lets you configure + keybindings for specific Code Actions. This keybinding, for example, + triggers the Extract function refactoring Code Actions: + +```javascript +{ + ` `"key": "ctrl+shift+r ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.function" + ` `} + + } +``` + +Code Action kinds are specified by extensions using the enhanced{' '} + `CodeActionProvided` API. Kinds are hierarchical, so{' '} + `"kind": "refactor"` will show all + refactoring Code Actions, whereas `"kind"` :{' '} + `"refactor.extract.function"` will only show{' '} + Extract function refactorings. + +Using the above keybinding, if only a single{' '} + `"refactor.extract.function"` Code Action is + available, it will be automatically applied. If multiple{' '} + Extract function Code Actions are available, we bring up + a context menu to select them: + +You can also control how/when Code Actions are automatically applied using + the `apply` argument: + +```javascript +{ + ` `"key": "ctrl+shift+r ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.function", + ` `"apply": "first" + ` `} + + } +``` + +Valid values for `"apply"` : + +* "first" - Always automatically apply the first available Code Action. +* "ifSingle" - Default. Automatically apply the Code Action if only one is available. Otherwise, show the context menu. +* "never" - Always show the Code Action context menu, even if only a single Code Action is available. + +When a Code Action keybinding is configured with "preferred": + true, only preferred Quick Fixes and refactorings are shown. A preferred + Quick Fix addresses the underlying error, while a preferred refactoring is + the most common refactoring choice. For example, while multiple + refactor.extract.constant refactorings may exist, each extracting to a + different scope in the file, the preferred refactor.extract.constant + refactoring is the one that extracts to a local variable. + +This keybinding uses "preferred": true to create a refactoring + that always tries to extract the selected source code to a constant in the + local scope: + +```javascript +{ + ` `"key": "shift+ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.constant", + ` `"preferred": true, + ` `"apply": "ifSingle" + ` `} + + } +``` + +## Extensions with refactorings + +You can find extensions that support refactoring by looking in the AVAP + TM Dev Studio Marketplace. You can go to the Extensions view + (Ctrl+Shift+X) and type 'refactor' in the search box. You + can then sort by install count or ratings to see which extensions are + popular. + +## Next steps + +* Intro Video - Code Editing - Watch an introductory video on code editing features. +* Code Navigation - AVAP TM Dev Studio lets you move quickly through your source code. +* Debugging - Learn about debugging with AVAP TM Dev Studio. + +## Common questions + +### Why don't I see any lightbulbs when there are errors in my code? + +Lightbulbs (Code Actions) are only shown when your cursor hovers + over the text showing the error. Hovering over the text will show the + error description, but you need to move the cursor or select text to see + lightbulbs for Quick Fixes and refactorings. diff --git a/docs/developer.avapframework.com/USER_GUIDE_SettingsSync.md b/docs/developer.avapframework.com/USER_GUIDE_SettingsSync.md new file mode 100644 index 0000000..2874279 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_SettingsSync.md @@ -0,0 +1,297 @@ +Settings Sync lets you share your AVAP TM Dev Studio + configurations such as settings, keybindings, and installed extensions + across your machines so you are always working with your favorite setup. + +## Turning on Settings Sync + +You can turn on Settings Sync using the{' '} + Turn On Settings Sync... entry in the{' '} + Manage gear menu at the bottom of the Activity Bar. + +You will be asked to sign in and what preferences you would like to sync; + currently Settings, Keyboard Shortcuts, Extensions, User Snippets, and UI + State are supported. + +Selecting the Sign in & Turn on button will ask you + to choose between signing in with your Microsoft or GitHub account. + +After making this selection, the browser will open so that you can sign in + to your Microsoft or GitHub account. When a Microsoft account is chosen, + you can use either personal accounts, such as Outlook accounts, or Azure + accounts, and you can also link a GitHub account to a new or existing + Microsoft account. + +After signing in, Settings Sync will be turned on and continue to + synchronize your preferences automatically in the background. + +## Merge or Replace* + +If you already synced from a machine and turning on sync from another + machine, you will be shown with following{' '} + Merge or Replace dialog. + +* Merge : Selecting this option will merge{' '} local settings with remote settings from the cloud. +* Replace Local : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. +* Merge Manually... : Selecting this option will open{' '} Merges view where you can merge preferences one by one. + +## Configuring synced data + +Machine settings (with `machine` or{' '} + `machine-overridable` scopes) are not synchronized by + default, since their values are specific to a given machine. You can also + add or remove settings you want to this list from the Settings editor or + using the `setting settingsSync.ignoredSettings` . + +Keyboard Shortcuts are synchronized per platform by default. If your + keyboard shortcuts are platform-agnostic, you can synchronize them across + platforms by disabling the setting{' '} + `settingsSync.keybindingsPerPlatform` . + +All built-in and installed extensions are synchronized along with their + global enablement state. You can skip synchronizing an extension, either + from the Extensions view (Ctrl+Shift+X) or using the{' '} + `setting settingsSync.ignoredExtensions` . + +Following UI State is synchronized currently: + +* Display Language +* Activity Bar entries +* Panel entries +* Views layout and visibility +* Recently used commands +* Do not show again notifications + +You can always change what is synced via the{' '} + Settings Sync: Configure command or by opening the{' '} + Manage gear menu, selecting{' '} + Settings Sync is On , and then{' '} + Settings Sync: Configure . + +## Conflicts + +When synchronizing settings between multiple machines, there may + occasionally be conflicts. Conflicts can happen when first setting up sync + between machines or when settings change while a machine is offline. When + conflicts occur, you will be presented with the following options: + +* Accept Local : Selecting this option will overwrite{' '} remote settings in the cloud with your local settings. +* Accept Remote : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. +* Show Conflicts : Selecting this will display a diff editor similar to the Source Control diff editor, where you can preview the local and remote settings and choose to either accept local or remote or manually resolve the changes in your local settings file and then accept the local file. + +## Switching Accounts + +If at any time you want to sync your data to a different account, you can + turn off and turn on Settings Sync again with different account. + +## Syncing Stable versus Insiders + +By default, the AVAP TM Dev Studio Stable and Insiders builds + use different Settings Sync services, and therefore do not share settings. + You can sync your Insiders with Stable by selecting the Stable sync + service while turning on Settings Sync. This option is only available in + AVAP TM Dev Studio Insiders. + +## Restoring data + +AVAP TM Dev Studio always stores local and remote backups of + your preferences while syncing and provides views for accessing these. In + case something goes wrong, you can restore your data from these views. + +You can open these views using{' '} + Settings Sync: Show Synced Data command from the Command + Palette. The Local Sync activity view is hidden by default and you can + enable it using Views submenu under{' '} + Settings Sync view overflow actions. + +Local backups folder in the disk can be accessed via the{' '} + Settings Sync: Open Local Backups Folder command. The + folder is organized by the type of preference and contains versions of + your JSON files, named with a timestamp of when the backup occurred. + +Note : Local backups are automatically deleted after 30 + days. For remote backups the latest 20 versions of each individual + resource (settings, extensions, etc.) is retained. + +## Synced Machines + +AVAP TM Dev Studio keeps track of the machines synchronizing + your preferences and provides a view to access them. Every machine is + given a default name based on the type of AVAP TM Dev Studio + (Insiders or Stable) and the platform it is on. You can always + update the machine name using the edit action available on the machine + entry in the view. You can also disable sync on another machine using{' '} + Turn off Settings Sync context menu action on the machine + entry in the view. + +You can open this view using{' '} + Settings Sync: Show Synced Data command from the Command + Palette. + +## Extension authors + +If you are an extension author, you should make sure your extension + behaves appropriately when users enable Setting Sync. For example, you + probably don't want your extension to display the same dismissed + notifications or welcome pages on multiple machines. + +### Sync user global state between machines + +If your extension needs to preserve some user state across different + machines then provide the state to Settings Sync using{' '} + `vscode.ExtensionContext.globalState.setKeysForSync.` Sharing + state such as UI dismissed or viewed flags across machines can provide a + better user experience. + +There is an example of using `setKeysforSync` in the Extension + Capabilities topic. + +## Reporting issues + +Settings Sync activity can be monitored in the{' '} + Log (Settings Sync) output view. If you + experience a problem with Settings Sync, include this log when creating + the issue. If your problem is related to authentication, also include the + log from the Account output view. + +## How do I delete my data? + +If you want to remove all your data from our servers, just turn off sync + via Settings Sync is On menu available under{' '} + Manage gear menu and select the checkbox to clear all + cloud data. If you choose to re-enable sync, it will be as if you're + signing in for the first time. + +## Next steps + +* User and Workspace settings - Learn how to configure AVAP TM {' '} Dev Studio to your preferences through user and workspace settings. + +## Common questions + +### Is AVAP TM Dev Studio Settings Sync the same as the Settings Sync + extension? + +No, the Settings Sync extension by Shan Khan uses a private Gist on GitHub + to share your AVAP TM Dev Studio settings across different + machines and is unrelated to the AVAP TM Dev Studio Settings + Sync. + +### What types of accounts can I use for Settings Sync sign in? + +AVAP TM Dev Studio Settings Sync supports signing in with either + a Microsoft account (for example Outlook or Azure accounts) or a + GitHub account. Sign in with GitHub Enterprise accounts is not supported. + Other authentication providers may be supported in the future and you can + review the proposed Authentication Provider API in issue #88309. + +### Can I use a different backend or service for Settings Sync? + +Settings Sync uses a dedicated service to store settings and coordinate + updates. A service provider API may be exposed in the future to allow for + custom Settings Sync backends. + +## Troubleshooting keychain issues + +Settings Sync persists authentication information on desktop using the OS + keychain for encryption. Using the keychain can fail in some cases if the + keychain is misconfigured or the environment isn't recognized. + +To help diagnose the problem, you can restart AVAP TM Dev Studio + with the following flags to generate a verbose log: + +```javascript +code --verbose --vmodule="\*/components/os\_crypt/\*=1" +``` + +### Windows & macOS + +At this time, there are no known configuration issues on Windows or macOS + but, if you suspect something is wrong, you can open an issue on AVAP + TM Dev Studio with the verbose logs from above. This is + important for us to support additional desktop configurations. + +### Linux + +Towards the top of the logs from the previous command, you will see + something to the effect of: + +[9699:0626/093542.027629:VERBOSE1:key_storage_util_linux.cc(54)] + Password storage detected desktop environment: GNOME + +[9699:0626/093542.027660:VERBOSE1:key_storage_linux.cc(122)] + Selected backend for OSCrypt: GNOME_LIBSECRET + +We rely on Chromium's oscrypt module to discover and store encryption + key information in the keyring. Chromium supports a number of different + desktop environments. Outlined below are some popular desktop environments + and troubleshooting steps that may help if the keyring is misconfigured. + +If the error you're seeing is "Cannot create an item in a locked + collection", chances are your keyring's `Login` {' '} + keyring is locked. You should launch your OS's keyring (Seahorse + is the commonly used GUI for seeing keyrings) and ensure the default + keyring (usually referred to as `Login` keyring) is + unlocked. This keyring needs to be unlocked when you log into your system. + +It's possible that your wallet (aka keyring) is closed. If you + open KWalletManager, you can see if the default `kdewallet` is + closed and if it is, make sure you open it. + +If you are using KDE5 or higher and are having trouble connecting to{' '} + `kwallet5` (like users of the unofficial AVAP TM {' '} + Dev Studio Flatpak in issue #189672), you can try configuring the + keyring to `gnome-libsecret` as this will use the Secret + Service API to communicate with any valid keyring. `kwallet5` {' '} + implements the Secret Service API and can be accessed using this method. + +First off, if your desktop environment wasn't detected, you can open + an issue on AVAP TM Dev Studio with the verbose logs from above. + This is important for us to support additional desktop configurations. + +You can manually tell AVAP TM Dev Studio which keyring to use by + passing the `password-store` flag. Our recommended + configuration is to first install gnome-keyring if you don't have it + already and then launch AVAP TM Dev Studio with{' '} + `code --password-store="gnome-libsecret"` . + +If this solution works for you, you can persist the value of + password-store by opening the Command Palette (Ctrl+Shift+P) and + running the Preferences: Configure Runtime Arguments {' '} + command. This will open the argv.json file where you can add the setting + "password-store":"gnome-libsecret". + +Here are all the possible values of password-store if you would like to + try using a different keyring than gnome-keyring: + +* `kwallet5` : For use with kwalletmanager5. +* `gnome-libsecret` : For use with any package that implements the Secret Service API (for example `gnome-keyring` ,{' '} `kwallet5` , `KeepassXC` ). +* (not recommended) kwallet: For use with older versions of kwallet. +* (not recommended) basic: See the section below on basic text for more details. + +Don't hesitate to open an issue on AVAP TM Dev Studio with + the verbose logs if you run into any issues. + +We rely on Chromium's oscrypt module to discover and store encryption + key information in the keyring. Chromium offers an opt-in fallback + encryption strategy that uses an in-memory key based on a string that is + hardcoded in the Chromium source. Because of this, this fallback strategy + is, at best, obfuscation, and should only be used if you are accepting of + the risk that any process on the system could, in theory, decrypt your + stored secrets. + +If you accept this risk, you can set `password-store` to basic + by opening the Command Palette (Ctrl+Shift+P) and running the{' '} + Preferences: Configure Runtime Arguments command. This + will open the `argv.json` file where you can add the setting{' '} + `"password-store":"basic"` . + +## Can I share settings between AVAP TM Dev Studio + +{' '} + Stable and Insiders? Yes. Please refer to the Syncing Stable versus + Insiders section for more information. + +Please note that this can sometimes lead to data incompatibility because + Insiders builds are newer than Stable builds. In such cases, Settings Sync + will be disabled automatically on Stable to prevent data inconsistencies. + Once a newer version of the Stable build is released, you can upgrade your + client and turn on Settings Sync to continue syncing. diff --git a/docs/developer.avapframework.com/USER_GUIDE_Snippets.md b/docs/developer.avapframework.com/USER_GUIDE_Snippets.md new file mode 100644 index 0000000..0816086 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_Snippets.md @@ -0,0 +1,392 @@ +Code snippets are templates that make it easier to enter repeating code + patterns, such as loops or conditional-statements. + +In AVAP TM Dev Studio, snippets appear in IntelliSense + (Ctrl+Space) mixed with other suggestions, as well as in a + dedicated snippet picker ( Insert Snippet in the + Command Palette). There is also support for tab-completion: Enable it + with `"editor.tabCompletion": "on"` , type a{' '} + snippet prefix (trigger text), and press Tab to + insert a snippet. + +The snippet syntax follows the TextMate snippet syntax with the exceptions + of 'interpolated shell code' and the use of \u; both are not + supported. + +## Built-in snippets + +AVAP TM Dev Studio has built-in snippets for a number of + languages such as: JavaScript, TypeScript, Markdown, and PHP. + +You can see the available snippets for a language by running the{' '} + Insert Snippet command in the Command Palette to get a + list of the snippets for the language of the current file. However, keep + in mind that this list also includes user snippets that you have defined, + and any snippets provided by extensions you have installed. + +## Install snippets from the Marketplace + +Many extensions on the AVAP TM Dev Studio Marketplace include + snippets. You can search for extensions that contains snippets in the + Extensions view (Ctrl+Shift+X) using the + @category:"snippets" filter. + +If you find an extension you want to use, install it, then restart AVAP + TM Dev Studio and the new snippets will be available. + +## Create your own snippets + +You can easily define your own snippets without any extension. To create + or edit your own snippets, select Configure User Snippets {' '} + under File > Preferences , and then + select the language (by language identifier) for which the + snippets should appear, or the New Global Snippets file {' '} + option if they should appear for all languages. AVAP TM Dev + Studio manages the creation and refreshing of the underlying snippets + file(s) for you. + +Snippets files are written in JSON, support C-style comments, and can + define an unlimited number of snippets. Snippets support most TextMate + syntax for dynamic behavior, intelligently format whitespace based on the + insertion context, and allow easy multiline editing. + +Below is an example of a for loop snippet for JavaScript: + +```javascript +// in file 'Code/User/snippets/javascript.json' + + { + ` `"For Loop": { + ` `"prefix": ["for", "for-const"], + ` `"body": ["for (const ${2:element} of + ${1:array}) {", "\t$0", "}"], + ` `"description": "A for loop." + ` `} + + } +``` + +In the example above: + +* "For Loop" is the snippet name. It is displayed via IntelliSense if no description is provided. +* `prefix` defines one or more trigger words that display the snippet in IntelliSense. Substring matching is performed on prefixes, so in this case, "fc" could match "for-const". +* `body` is one or more lines of content, which will be joined as multiple lines upon insertion. Newlines and embedded tabs will be formatted according to the context in which the snippet is inserted. +* `description` is an optional description of the snippet displayed by IntelliSense. + +Additionally, the `body` of the example above has three + placeholders (listed in order of traversal):{' '} + `${1:array}` , `${2:element}` , + and `$0` . You can quickly jump to the next placeholder with + Tab, at which point you may edit the placeholder or jump to the next one. + The string after the colon : (if any) is the default text, for + example `element` in `${2:element}` . + Placeholder traversal order is ascending by number, starting from one; + zero is an optional special case that always comes last, and exits snippet + mode with the cursor at the specified position. + +### File template snippets + +You can add the isFileTemplate attribute to your snippet's definition + if the snippet is intended to populate or replace a file's contents. + File template snippets are displayed in a dropdown when you run the{' '} + Snippets: Populate File from Snippet command in a new or + existing file. + +## Snippet scope + +Snippets are scoped so that only relevant snippets are suggested. Snippets + can be scoped by either: + +Every snippet is scoped to one, several, or all + ("global") languages based on whether it is defined in: + +Single-language user-defined snippets are defined in a specific + language's snippet file (for example javascript.json), which + you can access by language identifier through{' '} + Snippets: Configure User Snippets . A snippet is only + accessible when editing the language for which it is defined. + +Multi-language and global user-defined snippets are all defined in + "global" snippet files (JSON with the file suffix + .code-snippets), which is also accessible through{' '} + Snippets: Configure User Snippets . In a global snippets + file, a snippet definition may have an additional scope property that + takes one or more language identifiers, which makes the snippet available + only for those specified languages. If no scope property is given, then + the global snippet is available in all languages. + +Most user-defined snippets are scoped to a single language, and so are + defined in a language-specific snippet file. + +You can also have a global snippets file (JSON with file suffix + .code-snippets) scoped to your project. Project-folder snippets are + created with the New Snippets file for ''... {' '} + option in the Snippets: Configure User Snippets dropdown + menu and are located at the root of the project in a .vscode folder. + Project snippet files are useful for sharing snippets with all users + working in that project. Project-folder snippets are similar to global + snippets and can be scoped to specific languages through the scope + property. + +## Snippet syntax + +The body of a snippet can use special constructs to control cursors and + the text being inserted. The following are supported features and their + syntaxes: + +With tabstops, you can make the editor cursor move inside a snippet. Use + $1, $2 to specify cursor locations. The number is the order in which + tabstops will be visited, whereas $0 denotes the final cursor position. + Multiple occurrences of the same tabstop are linked and updated in sync. + +Placeholders are tabstops with values, like ${1:foo}. The + placeholder text will be inserted and selected such that it can be easily + changed. Placeholders can be nested, like ${1:another + ${2:placeholder}}. + +Placeholders can have choices as values. The syntax is a comma-separated + enumeration of values, enclosed with the pipe-character, for example + ${1|one,two,three|}. When the snippet is inserted and the + placeholder selected, choices will prompt the user to pick one of the + values. + +With $name or ${name:default}, you can insert the value of a + variable. When a variable isn't set, its default or + the empty string is inserted. When a variable is unknown (that is, its + name isn't defined) the name of the variable is inserted and it is + transformed into a placeholder. + +The following variables can be used: + +* TM_SELECTED_TEXT The currently selected text or the empty string +* TM_CURRENT_LINE The contents of the current line +* TM_CURRENT_WORD The contents of the word under cursor or the empty string +* TM_LINE_INDEX The zero-index based line number +* TM_LINE_NUMBER The one-index based line number +* TM_FILENAME The filename of the current document +* TM_FILENAME_BASE The filename of the current document without its extensions +* TM_DIRECTORY The directory of the current document +* TM_FILEPATH The full file path of the current document +* RELATIVE_FILEPATH The relative (to the opened workspace or folder) file path of the current document +* CLIPBOARD The contents of your clipboard +* WORKSPACE_NAME The name of the opened workspace or folder +* WORKSPACE_FOLDER The path of the opened workspace or folder +* CURSOR_INDEX The zero-index based cursor number +* CURSOR_NUMBER The one-index based cursor number + +For inserting the current date and time: + +* CURRENT_YEAR The current year +* CURRENT_YEAR_SHORT The current year's last two digits +* CURRENT_MONTH The month as two digits (example '02') +* CURRENT_MONTH_NAME The full name of the month (example 'July') +* CURRENT_MONTH_NAME_SHORT The short name of the month (example 'Jul') +* CURRENT_DATE The day of the month as two digits (example '08') +* CURRENT_DAY_NAME The name of day (example 'Monday') +* CURRENT_DAY_NAME_SHORT The short name of the day (example 'Mon') +* CURRENT_HOUR The current hour in 24-hour clock format +* CURRENT_MINUTE The current minute as two digits +* CURRENT_SECOND The current second as two digits +* CURRENT_SECONDS_UNIX The number of seconds since the Unix epoch +* CURRENT_TIMEZONE_OFFSET The current UTC time zone offset as +HH:MM or -HH:MM (example -07:00). + +For inserting random values: + +* RANDOM 6 random Base-10 digits +* RANDOM_HEX 6 random Base-16 digits +* UUID A Version 4 UUID + +For inserting line or block comments, honoring the current language: + +* BLOCK_COMMENT_START Example output: in PHP /* or in HTML +* LINE_COMMENT Example output: in PHP // + +The snippet below inserts /* Hello World */ in JavaScript files and in + HTML files: + +```javascript +{ + ` `"hello": { + ` `"scope": "javascript,html", + ` `"prefix": "hello", + ` `"body": "$BLOCK\_COMMENT\_START Hello World + $BLOCK\_COMMENT\_END" + ` `} + + } +``` + +Transformations allow you to modify the value of a variable before it is + inserted. The definition of a transformation consists of three parts: + +The following example inserts the name of the current file without its + ending, so from foo.txt it makes foo. + +```javascript +${TM\_FILENAME/(.\*)\\..+$/$1/} + ` `| | | |` `| | | |-> no options + ` `| | |` `| | |-> references the contents of the first + ` `| | capture group + ` `| |` `| |-> regex to capture everything before + ` `| the final `.suffix` + ` `| + ` `|-> resolves to the filename +``` + +Like a Variable-Transform, a transformation of a placeholder allows + changing the inserted text for the placeholder when moving to the next tab + stop. The inserted text is matched with the regular expression and the + match or matches - depending on the options - are replaced with the + specified replacement format text. Every occurrence of a placeholder can + define its own transformation independently using the value of the first + placeholder. The format for Placeholder-Transforms is the same as for + Variable-Transforms. + +The examples are shown within double quotes, as they would appear inside a + snippet body, to illustrate the need to double escape certain characters. + Sample transformations and the resulting output for the filename + example-123.456-TEST.js. + +Below is the EBNF (extended Backus-Naur form) for snippets. With \ + (backslash), you can escape $, }, and . Within choice + elements, the backslash also escapes comma and pipe characters. Only the + characters required to be escaped can be escaped, so $ should not be + escaped within these constructs and neither $ or } should be escaped + inside choice constructs. + +```javascript +any ::= tabstop | placeholder | choice | variable | text + + tabstop ::= '$' int + ` `| '${' int '}' + ` `| '${' int transform '}' + + placeholder ::= '${' int ':' any '}' + + choice ::= '${' int '|' text (',' text)\* '|}' + + variable ::= '$' var | '${' var '}' + ` `| '${' var ':' any '}' + ` `| '${' var transform '}' + + transform ::= '/' regex '/' (format | text)+ '/' options + + format ::= '$' int | '${' int '}' + ` `| '${' int ':' '/upcase' | '/downcase' | '/capitalize' | + '/camelcase' | '/pascalcase' '}' + ` `| '${' int ':+' if '}' + ` `| '${' int ':?' if ':' else '}' + ` `| '${' int ':-' else '}' | '${' int ':' else + '}' + + regex ::= JavaScript Regular Expression value (ctor-string) + + options ::= JavaScript Regular Expression option (ctor-options) + + var ::= [\_a-zA-Z] [\_a-zA-Z0-9]\* + + int ::= [0-9]+ + + text ::= .\* + + if ::= text + + else ::= text +``` + +## Using TextMate snippets + +You can also use existing TextMate snippets (.tmSnippets) with + AVAP TM Dev Studio. See the Using TextMate Snippets topic in our + Extension API section to learn more. + +## Assign keybindings to snippets + +You can create custom keybindings to insert specific snippets. Open + keybindings.json ( + Preferences: Open Keyboard Shortcuts File ), which + defines all your keybindings, and add a keybinding passing + "snippet" as an extra argument: + +```javascript +{ + ` `"key": "cmd+k 1", + ` `"command": "editor.action.insertSnippet", + ` `"when": "editorTextFocus", + ` `"args": { + ` `"snippet": "console.log($1)$0" + ` `} + + } +``` + +The keybinding will invoke the Insert Snippet command but + instead of prompting you to select a snippet, it will insert the provided + snippet. You define the custom keybinding as usual with a keyboard + shortcut, command ID, and optional when clause context for when the + keyboard shortcut is enabled. + +Also, instead of using the snippet argument value to define your snippet + inline, you can reference an existing snippet by using the langId and name + arguments. The langId argument selects the language for which the snippet + denoted by name is inserted, e.g the sample below selects the myFavSnippet + that's available for csharp-files. + +```javascript +{ + ` `"key": "cmd+k 1", + ` `"command": "editor.action.insertSnippet", + ` `"when": "editorTextFocus", + ` `"args": { + ` `"langId": "csharp", + ` `"name": "myFavSnippet" + ` `} + + } +``` + +## Next steps + +* Command Line - AVAP TM Dev Studio has a rich command-line interface to open or diff files and install extensions. +* Extension API - Learn about other ways to extend AVAP TM Dev Studio. +* Snippet Guide - You can package snippets for use in AVAP TM {' '} Dev Studio. + +## Common questions + +### What if I want to use existing TextMate snippets from a .tmSnippet file? + +You can easily package TextMate snippets files for use in AVAP + TM Dev Studio. See Using TextMate Snippets in our Extension API + documentation. + +### How do I have a snippet place a variable in the pasted script? + +To have a variable in the pasted script, you need to escape the + '$' of the `$variable` name so that it isn't parsed + by the snippet expansion phase. + +```javascript +"VariableSnippet":{ + ` `"prefix": "\_Var", + ` `"body": "\\$MyVar = 2", + ` `"description": "A basic snippet that places a variable into + script with the $ prefix" + ` `} +``` + +This results in the pasted snippet as: + +```javascript +$MyVar = 2 +``` + +### Can I remove snippets from IntelliSense? + +Yes, you can hide specific snippets from showing in IntelliSense + (completion list) by selecting the{' '} + Hide from IntelliSense button to the right of snippet + items in the Insert Snippet command dropdown. + +You can still select the snippet with the Insert Snippet {' '} + command but the hidden snippet won't be displayed in IntelliSense. diff --git a/docs/developer.avapframework.com/USER_GUIDE_Tasks.md b/docs/developer.avapframework.com/USER_GUIDE_Tasks.md new file mode 100644 index 0000000..be0acef --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_Tasks.md @@ -0,0 +1,1155 @@ +Lots of tools exist to automate tasks like linting, building, packaging, + testing, or deploying software systems. Examples include the TypeScript + Compiler, linters like ESLint and TSLint as well as build systems like + Make, Ant, Gulp, Jake, Rake, and MSBuild. + +These tools are mostly run from the command line and automate jobs inside + and outside the inner software development loop (edit, compile, test, + and debug). Given their importance in the development life cycle, it + is helpful to be able to run tools and analyze their results from within + AVAP TM Dev Studio. Tasks in AVAP TM Dev Studio can be + configured to run scripts and start processes so that many of these + existing tools can be used from within AVAP TM Dev Studio + without having to enter a command line or write new code. Workspace or + folder specific tasks are configured from the `tasks.json` file + in the `.vscode` folder for a workspace. + +Extensions can also contribute tasks using a Task Provider, and these + contributed tasks can add workspace-specific configurations defined in the{' '} + `tasks.json` file. + +## TypeScript Hello World + +Let's start with a simple "Hello World" TypeScript program + that we want to compile to JavaScript. + +Create an empty folder "mytask", generate a{' '} + `tsconfig.json` file and start AVAP TM Dev Studio + from that folder. + +```javascript +mkdir mytask + + cd mytask + + tsc --init + + code . +``` + +Now create a HelloWorld.ts file with the following content + +```javascript +function sayHello(name: string): void { + ` `console.log(`Hello ${name}!`); + + } + + + sayHello('Dave'); +``` + +Pressing `Ctrl+Shift+B` or running{' '} + Run Build Task from the global Terminal {' '} + menu show the following picker: + +The first entry executes the TypeScript compiler and translates the + TypeScript file to a JavaScript file. When the compiler has finished, + there should be a `HelloWorld.js` file. The second entry starts + the TypeScript compiler in watch mode. Every save to the{' '} + `HelloWorld.ts` file will regenerate the{' '} + `HelloWorld.js` file. + +You can also define the TypeScript build or watch task as the default + build task so that it is executed directly when triggering{' '} + Run Build Task (Ctrl+Shift+B). To do so, select{' '} + Configure Default Build Task from the global{' '} + Terminal menu. This shows you a picker with the available + build tasks. Select tsc: build or{' '} + tsc: watch and AVAP TM Dev Studio will generate + a `tasks.json` file. The one shown below makes the{' '} + tsc: build task the default build task: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "typescript", + ` `"tsconfig": "tsconfig.json", + ` `"problemMatcher": ["$tsc"], + ` `"group": { + ` `"kind": "build", + ` `"isDefault": true + ` `} + ` `} + ` `] + + } +``` + +The `tasks.json` example above does not define a new task. It + annotates the tsc: build tasks contributed by AVAP + TM Dev Studio's TypeScript extension to be the default + build task. You can now execute the TypeScript compiler by pressing{' '} + `Ctrl+Shift+B` . + +## Task auto-detection + +AVAP TM Dev Studio currently auto-detects tasks for the + following systems: Gulp, Grunt, Jake, and npm. We are working with the + corresponding extension authors to add support for Maven and the C# dotnet + command as well. If you develop a JavaScript application using Node.js as + the runtime, you usually have a `package.json` file describing + your dependencies and the scripts to run. If you have cloned the + eslint-starter example, then executing Run Tasks from the + global menu shows the following list: + +If you have not already done so, install the necessary npm modules by + running npm install. Now open the `server.js` file and add a + semicolon to the end of a statement (note the ESLint starter assumes + statements without a semicolon) and execute the{' '} + Run Tasks again. This time select the{' '} + npm: lint task. When prompted for the problem matcher to + use, select ESLint stylish + +Executing the task produces one error, shown in the{' '} + Problems view: + +In addition, AVAP TM Dev Studio created a tasks.json file with + the following content: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"] + ` `} + ` `] + + } +``` + +This instructs AVAP TM Dev Studio to scan the output of the{' '} + npm lint script for problems using the ESLint stylish + format. + +For Gulp, Grunt, and Jake, the task auto-detection works the same. Below + is an example of the tasks detected for the AVAP TM Dev + Studio-node-debug extension. + +Task auto detection can be disabled using the following settings: + +```javascript +{ + ` `"typescript.tsc.autoDetect": "off", + ` `"grunt.autoDetect": "off", + ` `"jake.autoDetect": "off", + ` `"gulp.autoDetect": "off", + ` `"npm.autoDetect": "off" + + } +``` + +## Custom tasks + +Not all tasks or scripts can be auto-detected in your workspace. Sometimes + it is necessary to define your own custom tasks. Assume you have a script + to run your tests in order to set up some environment correctly. The + script is stored in a script folder inside your workspace and named{' '} + `test.sh` for Linux and macOS and `test.cmd` for + Windows. Run Configure Tasks from the global{' '} + Terminal menu and select the{' '} + Create tasks.json file from template entry. This opens + the following picker: + +We are working on more auto-detection support, so this list will get + smaller and smaller in the future. Since we want to write our own custom + task, select Others from the list. This opens the{' '} + `tasks.json` file with a task skeleton. Replace the contents + with the following: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "Run tests", + ` `"type": "shell", + ` `"command": "./scripts/test.sh", + ` `"windows": { + ` `"command": ".\\scripts\\test.cmd" + ` `}, + ` `"group": "test", + ` `"presentation": { + ` `"reveal": "always", + ` `"panel": "new" + ` `} + ` `} + ` `] + + } +``` + +The task's properties have the following semantic: + +* label : The task's label used in the user interface. +* type : The task's type. For a custom task, this can either be `shell` or `process` . If{' '} `shell` is specified, the command is interpreted as a shell command (for example: bash, cmd, or PowerShell). If{' '} `process` is specified, the command is interpreted as a process to execute. +* command : The actual command to execute. +* windows : Any Windows specific properties. Will be used instead of the default properties when the command is executed on the Windows operating system. +* group : Defines to which group the task belongs. In the example, it belongs to the `test` group. Tasks that belong to the test group can be executed by running Run Test Task {' '} from the Command Palette . +* presentation : Defines how the task output is handled in the user interface. In this example, the Integrated Terminal showing the output is `always` revealed and a `new` terminal is created on every task run. +* options : Override the defaults for `cwd` {' '} (current working directory), `env` (environment variables), or shell (default shell). Options can be set per task but also globally or per platform. Environment variables configured here can only be referenced from within your task script or process and will not be resolved if they are part of your args, command, or other task attributes. +* runOptions : Defines when and how a task is run. + +You can see the full set of task properties and values with IntelliSense + in your `tasks.json` file. Bring up suggestions with{' '} + Trigger Suggest (Ctrl+Space) and read the + descriptions on hover or with the Read More... {' '} + ('i') flyout. + +You can also review the tasks.json schema. + +Shell commands need special treatment when it comes to commands and + arguments that contain spaces or other special characters like{' '} + `$` . By default, the task system supports the following + behavior: + +* If a single command is provided, the task system passes the command as is to the underlying shell. If the command needs quoting or escaping to function properly, the command needs to contain the proper quotes or escape characters. For example, to list the directory of a folder containing spaces in its name, the command executed in bash should look like this: `ls 'folder with spaces'` . { ` ` `"label": "dir", ` `"type": "shell", ` `"command": "dir 'folder with spaces'" } ` +* If a command and arguments are provided, the task system will use single quotes if the command or arguments contain spaces. For{' '} `cmd.exe` , double quotes are used. A shell command like below will be executed in PowerShell as{' '} `dir 'folder with spaces'` . ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": ["folder with spaces"] } ` +* If you want to control how the argument is quoted, the argument can be a literal specifying the value and a quoting style. The example below uses escaping instead of quoting for an argument with spaces. ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": [ ` `{ ` `"value": "folder with spaces", ` `"quoting": "escape" ` `} ` `] } ` + +Besides escaping, the following values are supported: + +* strong : Uses the shell's strong quoting mechanism, which suppresses all evaluations inside the string. Under PowerShell and for shells under Linux and macOS, single quotes are used ('). For cmd.exe, " is used. +* weak : Uses the shell's weak quoting mechanism, which still evaluates expression inside the string (for example, environment variables). Under PowerShell and for shells under Linux and macOS, double quotes are used ("). cmd.exe doesn't support weak quoting so AVAP TM Dev Studio uses " as well. + +If the command itself contains spaces, AVAP TM Dev Studio will + by default strong quote the command as well. As with arguments, the user + can control the quoting of the command using the same literal style. + +There are more task properties to configure your workflow. You can use + IntelliSense with Ctrl+Space to get an overview of the valid properties. + +!Tasks IntelliSense + +In addition to the global menu bar, task commands can be accessed using + the Command Palette (Ctrl+Shift+P). You can + filter on 'task' and can see the various task related commands. + +!Tasks in Command Palette + +### Compound tasks + +You can also compose tasks out of simpler tasks with the{' '} + `dependsOn` property. For example, if you have a workspace with + a client and server folder and both contain a build script, you can create + a task that starts both build scripts in separate terminals. If you list + more than one task in the `dependsOn` property, they are + executed in parallel by default. + +The `tasks.json` file looks like this: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "Client Build", + ` `"command": "gulp", + ` `"args": ["build"], + ` `"options": { + ` `"cwd": "${workspaceFolder}/client" + ` `} + ` `}, + ` `{ + ` `"label": "Server Build", + ` `"command": "gulp", + ` `"args": ["build"], + ` `"options": { + ` `"cwd": "${workspaceFolder}/server" + ` `} + ` `}, + ` `{ + ` `"label": "Build", + ` `"dependsOn": ["Client Build", "Server Build"] + ` `} + ` `] + + } +``` + +If you specify " `dependsOrder` ": " + `sequence` ", then your task dependencies are executed in + the order they are listed in `dependsOn` . Any background/watch + tasks used in `dependsOn` with " `dependsOrder` + ": " `sequence` " must have a problem matcher that + tracks when they are "done". The following task runs task Two, + task Three, and then task One. + +```javascript +{ + ` `"label": "One", + ` `"type": "shell", + ` `"command": "echo Hello ", + ` `"dependsOrder": "sequence", + ` `"dependsOn": ["Two", "Three"] + + } +``` + +### User level tasks + +You can create user level tasks that are not tied to a specific workspace + or folder using the Tasks: Open User Tasks command. Only{' '} + `shell` and `process` tasks can be used here since + other task types require workspace information. + +## Output behavior + +Sometimes you want to control how the Integrated Terminal panel behaves + when running tasks. For instance, you may want to maximize editor space + and only look at task output if you think there is a problem. The behavior + of the terminal can be controlled using the presentation property of a + task. It offers the following properties: + +* reveal : Controls whether the Integrated Terminal panel is brought to front. Valid values are:{' '} `always` - The panel is always brought to front. This is the default. `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. +* `always` - The panel is always brought to front. This is the default. +* `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). +* `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. +* revealProblems : Controls whether the Problems panel is revealed when running this task or not. Takes precedence over option{' '} `reveal` . Default is `never` .{' '} `always` - Always reveals the Problems panel when this task is executed. `onProblem` - Only reveals the Problems panel if a problem is found. `never` - Never reveals the Problems panel when this task is executed. +* `always` - Always reveals the Problems panel when this task is executed. +* `onProblem` - Only reveals the Problems panel if a problem is found. +* `never` - Never reveals the Problems panel when this task is executed. +* focus : Controls whether the terminal is taking input focus or not. Default is `false` . +* echo : Controls whether the executed command is echoed in the terminal. Default is `true` . +* showReuseMessage : Controls whether to show the "Terminal will be reused by tasks, press any key to close it" message. +* panel : Controls whether the terminal instance is shared between task runs. Possible values are:{' '} `shared` - The terminal is shared and the output of other task runs are added to the same terminal. `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. `new` - Every execution of that task is using a new clean terminal. +* `shared` - The terminal is shared and the output of other task runs are added to the same terminal. +* `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. +* `new` - Every execution of that task is using a new clean terminal. +* clear : Controls whether the terminal is cleared before this task is run. Default is false. +* close : Controls whether the terminal the task runs in is closed when the task exits. Default is false. +* group : Controls whether the task is executed in a specific terminal group using split panes. Tasks in the same group (specified by a string value) will use split terminals to present instead of a new terminal panel. + +You can modify the terminal panel behavior for auto-detected tasks as + well. For example, if you want to change the output behavior for the{' '} + npm: run lint from the ESLint example from above, add the{' '} + `presentation` property to it: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"], + ` `"presentation": { + ` `"reveal": "never" + ` `} + ` `} + ` `] + + } +``` + +You can also mix custom tasks with configurations for detected tasks. A{' '} + `tasks.json` that configures the npm: run lint {' '} + task and adds a custom Run Test tasks looks like this: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"], + ` `"presentation": { + ` `"reveal": "never" + ` `} + ` `}, + ` `{ + ` `"label": "Run tests", + ` `"type": "shell", + ` `"command": "./scripts/test.sh", + ` `"windows": { + ` `"command": ".\\scripts\\test.cmd" + ` `}, + ` `"group": "test", + ` `"presentation": { + ` `"reveal": "always", + ` `"panel": "new" + ` `} + ` `} + ` `] + + } +``` + +## Run behavior + +You can specify a task's run behaviors using the{' '} + `runOptions` property: + +* reevaluateOnRerun : Controls how variables are evaluated when a task is executed through the Rerun Last Task {' '} command. The default is `true` , meaning that variables will be reevaluated when a task is rerun. When set to `false` the resolved variable values from the previous run of the task will be used. +* runOn : Specifies when a task is run.{' '} `default` - The task will only be run when executed through the Run Task command. `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . +* `default` - The task will only be run when executed through the Run Task command. +* `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . + +## Customizing auto-detected task + +As mentioned above, you can customize auto-detected tasks in the{' '} + `tasks.json` file. You usually do so to modify presentation + properties or to attach a problem matcher to scan the task's output + for errors and warnings. You can customize a task directly from the{' '} + Run Task list by pressing the gear icon to the right to + insert the corresponding task reference into the `tasks.json` {' '} + file. Assume you have the following Gulp file to lint JavaScript files + using ESLint (the file is taken from (Link)): + +```javascript +const gulp = require('gulp'); + + const eslint = require('gulp-eslint'); + + + gulp.task('lint', () => { + ` `// ESLint ignores files with "node\_modules" paths. + ` `// So, it's best to have gulp ignore the directory as well. + ` `// Also, Be sure to return the stream from the task; + ` `// Otherwise, the task may end before the stream has finished. + ` `return ( + ` `gulp + + .src(['\*\*/\*.js', '!node\_modules/\*\*']) + ` `// eslint() attaches the lint output to the "eslint" + property + ` `// of the file object so it can be used by other modules. + + .pipe(eslint()) + ` `// eslint.format() outputs the lint results to the + console. + ` `// Alternatively use eslint.formatEach() (see + Docs). + + .pipe(eslint.format()) + ` `// To have the process exit with an error code (1) on + ` `// lint error, return the stream and pipe to failAfterError + last. + + .pipe(eslint.failAfterError()) + ` `); + + }); + + gulp.task('default', ['lint'], function() { + ` `// This will only run if the lint task is successful... + + }); +``` + +Executing Run Task from the global{' '} + Terminal menu will show the following picker: + +Press the gear icon. This will create the following{' '} + `tasks.json` file: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "gulp", + ` `"task": "default", + ` `"problemMatcher": [] + ` `} + ` `] + + } +``` + +Usually you would now add a problem matcher (in this case{' '} + `$eslint-stylish` ) or modify the presentation settings. + +## Processing task output with problem matchers + +AVAP TM Dev Studio can process the output from a task with a + problem matcher. Problem matchers scan the task output text for known + warning or error strings, and report these inline in the editor and in the + Problems panel. AVAP TM Dev Studio ships with several problem + matchers 'in-the-box': + +* TypeScript : `$tsc` assumes that file names in the output are relative to the opened folder. +* TypeScript Watch : `$tsc` -watch matches problems reported from the tsc compiler when executed in watch mode. +* JSHint : `$jshint` assumes that file names are reported as an absolute path. +* JSHint Stylish : `$jshint-stylish` assumes that file names are reported as an absolute path. +* ESLint Compact : `$eslint-compact` assumes that file names in the output are relative to the opened folder. +* ESLint Stylish : `$eslint-stylish` assumes that file names in the output are relative to the opened folder. +* Go : `$go` matches problems reported from the go compiler. Assumes that file names are relative to the opened folder. +* CSharp and VB Compiler : `$mscompile` assumes that file names are reported as an absolute path. +* Lessc compiler : `$lessc` assumes that file names are reported as absolute path. +* Node Sass compiler : `$node-sass` assumes that file names are reported as an absolute path. + +You can also create your own problem matcher, which we'll discuss in a + later section. + +## Binding keyboard shortcuts to tasks + +If you need to run a task frequently, you can define a keyboard shortcut + for the task. + +For example, to bind `Ctrl+H` to the Run tests {' '} + task from above, add the following to your `keybindings.json` {' '} + file: + +```javascript +{ + ` `"key": "ctrl+h", + ` `"command": "workbench.action.tasks.runTask", + ` `"args": "Run tests" + + } +``` + +## Variable substitution + +When authoring tasks configurations, it is useful to have a set of + predefined common variables such as the active file ( + `${file}` ) or workspace root folder ( + `${workspaceFolder}` ). AVAP TM Dev + Studio supports variable substitution inside strings in the{' '} + `tasks.json` file and you can see a full list of predefined + variables in the Variables Reference. + +Below is an example of a custom task configuration that passes the current + opened file to the TypeScript compiler. + +```javascript +{ + ` `"label": "TypeScript compile", + ` `"type": "shell", + ` `"command": "tsc ${file}", + ` `"problemMatcher": ["$tsc"] + + } +``` + +Similarly, you can reference your project's configuration settings by + prefixing the name with ${config: . For example,{' '} + `${config:python.formatting.autopep8Path}` returns + the Python extension setting `formatting.autopep8Path` . + +Below is an example of a custom task configuration, which executes + autopep8 on the current file using the autopep8 executable defined by the{' '} + `python.formatting.autopep8Path` setting: + +```javascript +{ + ` `"label": "autopep8 current file", + ` `"type": "process", + ` `"command": + "${config:python.formatting.autopep8Path}", + ` `"args": ["--in-place", "${file}"] + + } +``` + +If you want to specify the selected Python interpreter used by the Python + extension for `tasks.json` or `launch.json` , you can + use the `${command:python.interpreterPath}` command. + +If simple variable substitution isn't enough, you can also get input + from the user of your task by adding an `inputs` section to + your `tasks.json` file. + +For more information about `inputs` , see the Variables + Reference. + +## Operating system specific properties + +The task system supports defining values (for example, the command to + be executed) specific to an operating system. To do so, put an + operating system specific literal into the `tasks.json` file + and specify the corresponding properties inside that literal. + +Below is an example that uses the Node.js executable as a command and is + treated differently on Windows and Linux: + +```javascript +{ + ` `"label": "Run Node", + ` `"type": "process", + ` `"windows": { + ` `"command": "C:\\Program Files\\nodejs\\node.exe" + ` `}, + ` `"linux": { + ` `"command": "/usr/bin/node" + ` `} + + } +``` + +Valid operating properties are `windows` for Windows, linux for{' '} + `Linux` , and `osx` for macOS. Properties defined in + an operating system specific scope override properties defined in the task + or global scope. + +## Global tasks + +Task properties can also be defined in the global scope. If present, they + will be used for specific tasks unless they define the same property with + a different value. In the example below, there is a global{' '} + `presentation` property, which defines that all tasks should be + executed in a new panel: + +```javascript +{ + ` `"label": "Run Node", + ` `"type": "process", + ` `"windows": { + ` `"command": "C:\\Program Files\\nodejs\\node.exe" + ` `}, + ` `"linux": { + ` `"command": "/usr/bin/node" + ` `} + + } +``` + +### Character escaping in PowerShell + +When the default shell is PowerShell, or when a task is configured to use + PowerShell, you might see unexpected space and quote escaping. The + unexpected escaping only occurs with cmdlets because AVAP TM Dev + Studio doesn't know if your command contains cmdlets. Example 1 below + shows a case where you'll get escaping that doesn't work with + PowerShell. Example 2 shows the best, cross-platform, way to get good + escaping. In some cases, you might not be able to follow example 2 and + you'll need to do the manual escaping shown in example 3. + +```javascript +"tasks": [` `{ + ` `"label": "PowerShell example 1 (unexpected escaping)", + ` `"type": "shell", + ` `"command": "Get-ChildItem \"Folder With Spaces\"" + ` `}, + ` `{ + ` `"label": "PowerShell example 2 (expected escaping)", + ` `"type": "shell", + ` `"command": "Get-ChildItem", + ` `"args": ["Folder With Spaces"] + ` `}, + ` `{ + ` `"label": "PowerShell example 3 (manual escaping)", + ` `"type": "shell", + ` `"command": "& Get-ChildItem \\\"Folder With Spaces\\\"" + ` `} + ] +``` + +## Changing the encoding for a task output + +Tasks frequently act with files on disk. If these files are stored on disk + with an encoding different than the system encoding, you need to let the + command executed as a task know which encoding to use. Since this depends + on the operating system and the shell used, there is no general solution + to control this. Below are advice and examples on how to make it work. + +If you need to tweak the encoding, you should check whether it makes sense + to change the default encoding used by your operating system or at least + change it for the shell you use by tweaking the shell's profile file. + +If you only need to tweak it for a specific task, then add the OS-specific + command necessary to change the encoding to the tasks command line. The + following example is for Windows using code page of 437 as its default. + The task shows the output of a file containing Cyrillic characters and + therefore needs code page 866. The task to list the file looks like this + assuming that the default shell is set to `cmd.exe` : + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "more", + ` `"type": "shell", + ` `"command": "chcp 866 && more russian.txt", + ` `"problemMatcher": [] + ` `} + ` `] + + } +``` + +If the task is executed in `PowerShell` , the command needs to + read like this `chcp 866` ; more `russian.txt` . On + Linux and macOS, the locale command can be used to inspect the{' '} + `locale` and tweak the necessary environment variables. + +## Examples of tasks in action + +To highlight the power of tasks, here are a few examples of how AVAP + TM Dev Studio can use tasks to integrate external tools like + linters and compilers. + +### Transpiling TypeScript to JavaScript + +The TypeScript topic includes an example that creates a task to transpile + TypeScript to JavaScript and observe any related errors from within AVAP + TM Dev Studio. + +### Transpiling Less and SCSS into CSS + +The CSS topic provides examples of how to use Tasks to generate CSS files. + +## Defining a problem matcher + +AVAP TM Dev Studio ships some of the most common problem + matchers 'in-the-box'. However, there are lots of compilers and + linting tools out there, all of which produce their own style of errors + and warnings so you may want to create your own problem matcher. + +We have a `helloWorld.c` program in which the developer + mistyped printf as prinft . Compiling it + with gcc will produce the following warning: + +```javascript +helloWorld.c:5:3: warning: implicit declaration of function ‘prinft’ +``` + +We want to produce a problem matcher that can capture the message in the + output and show a corresponding problem in AVAP TM Dev Studio. + Problem matchers heavily rely on regular expressions. The section below + assumes you are familiar with regular expressions. + +A matcher that captures the above warning (and errors) looks like + this: + +```javascript +{ + ` `// The problem is owned by the cpp language service. + ` `"owner": "cpp", + ` `// The file name for reported problems is relative to the + opened folder. + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `// The actual pattern to match problems in the output. + ` `"pattern": { + ` `// The regular expression. Example to match: helloWorld.c:5:3: + warning: implicit declaration of function ‘printf’ + [-Wimplicit-function-declaration] + ` `"regexp": + "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", + ` `// The first match group matches the file name which is + relative. + ` `"file": 1, + ` `// The second match group matches the line on which the problem + occurred. + ` `"line": 2, + ` `// The third match group matches the column at which the + problem occurred. + ` `"column": 3, + ` `// The fourth match group matches the problem's severity. Can + be ignored. Then all problems are captured as errors. + ` `"severity": 4, + ` `// The fifth match group matches the message. + ` `"message": 5` `} + + } +``` + +Note that the file, line, and message properties are mandatory. The{' '} + `fileLocation` specifies whether the file paths that are + produced by the task output and matched in the problem are{' '} + `absolute` or `relative` . If the task produces both + absolute and relative paths, you can use the `autoDetect` file + location. With `autoDetect` , paths are first tested as absolute + paths, and if the file doesn't exist then the path is assumed to be + relative. + +Here is a finished tasks.json file with the code above (comments + removed) wrapped with the actual task details: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "build", + ` `"command": "gcc", + ` `"args": ["-Wall", "helloWorld.c", "-o", "helloWorld"], + ` `"problemMatcher": { + ` `"owner": "cpp", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": { + ` `"regexp": + "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", + ` `"file": 1, + ` `"line": 2, + ` `"column": 3, + ` `"severity": 4, + ` `"message": 5` `} + ` `} + ` `} + ` `] + + } +``` + +Running it inside AVAP TM Dev Studio and pressing Ctrl+Shift+M + to get the list of problems gives you the following output: + +There are a couple more properties that can be used inside a pattern. + These are: + +* location - If the problem location is line or line,column or startLine,startColumn,endLine,endColumn, then our generic location match group can be used. +* endLine - The match group index for the problem's end line. Can be omitted if no end line value is provided by the compiler. +* endColumn - The match group index for the problem's end column. Can be omitted if no end column value is provided by the compiler. +* code - The match group index for the problem's code. Can be omitted if no code value is provided by the compiler. + +You can also define a problem matcher that captures only a file. To do so, + define a `pattern` with the optional `kind` {' '} + attribute set to `file` . In this case, there is no need to + provide a `line` or `location` property. + +## Defining a multiline problem matcher + +Some tools spread problems found in a source file over several lines, + especially if stylish reporters are used. An example is ESLint; in stylish + mode it produces output like this: + +```javascript +test.js + ` `1:0 error Missing "use strict" statement strict + + ✖ 1 problems (1 errors, 0 warnings) +``` + +Our problem matcher is line-based so we need to capture the file name + (test.js) with a different regular expression than the actual + problem location and message (1:0 error Missing "use strict" + statement). + +To do this, use an array of problem patterns for the `pattern` {' '} + property. This way you define a pattern per each line you want to match. + +The following problem pattern matches the output from ESLint in stylish + mode - but still has one small issue that we need to resolve next. The + code below has a first regular expression to capture the file name and the + second to capture the line, column, severity, message, and error code: + +```javascript +{ + ` `"owner": "javascript", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": [` `{ + ` `"regexp": "^([^\\s].\*)$", + ` `"file": 1` `}, + ` `{ + ` `"regexp": + "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", + ` `"line": 1, + ` `"column": 2, + ` `"severity": 3, + ` `"message": 4, + ` `"code": 5` `} + ` `] + + } +``` + +However, this pattern will not work if there is more than one problem on a + resource. For instance, imagine the following output from ESLint: + +```javascript +test.js + ` `1:0 error Missing "use strict" statement strict + ` `1:9 error foo is defined but never used no-unused-vars + ` `2:5 error x is defined but never used no-unused-vars + ` `2:11 error Missing semicolon semi + ` `3:1 error "bar" is not defined no-undef + ` `4:1 error Newline required at end of file but not found + eol-last + + ✖ 6 problems (6 errors, 0 warnings) +``` + +The pattern's first regular expression will match "test.js", + the second "1:0 error ...". The next line "1:9 error + ..." is processed but not matched by the first regular expression and + so no problem is captured. + +To make this work, the last regular expression of a multiline pattern can + specify the `loop` property. If set to true, it instructs the + task system to apply the last pattern of a multiline matcher to the lines + in the output as long as the regular expression matches. + +The information captured by the first pattern, which in this case matches{' '} + `test.js` , will be combined with each of the subsequent lines + that match the `loop` pattern to create multiple problems. In + this example, six problems would be created. + +Here is a problem matcher to fully capture ESLint stylish problems: + +```javascript +{ + ` `"owner": "javascript", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": [` `{ + ` `"regexp": "^([^\\s].\*)$", + ` `"file": 1` `}, + ` `{ + ` `"regexp": + "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", + ` `"line": 1, + ` `"column": 2, + ` `"severity": 3, + ` `"message": 4, + ` `"code": 5, + ` `"loop": true + ` `} + ` `] + + } +``` + +## Modifying an existing problem matcher + +If an existing problem matcher is close to what you need, you can modify + it in your `tasks.json` task. For example, the{' '} + `$tsc-watch` problem matcher only applies to closed documents. + If you want to have it apply to all documents you can modify it: + +```javascript +{ + ` `"type": "npm", + ` `"script": "watch", + ` `"problemMatcher": { + ` `"base": "$tsc-watch", + ` `"applyTo": "allDocuments" + ` `}, + ` `"isBackground": true + + } +``` + +Other modifiable problem matcher properties include{' '} + `background` , `fileLocation` , `owner` ,{' '} + `pattern` , `severity` , and `source` . + +## Background / watching tasks + +Some tools support running in the background while watching the file + system for changes and then triggering an action when a file changes on + disk. With `Gulp` such functionality is provided through the + npm module gulp-watch. The TypeScript compiler `tsc` has built + in support for this via the `--watch` command line option. + +To provide feedback that a background task is active in AVAP TM {' '} + Dev Studio and producing problem results, a problem matcher has to use + additional information to detect these state changes in the output. + Let's take the `tsc` compiler as an example. When the + compiler is started in watch mode, it prints the following additional + information to the console: + +```javascript +\> tsc --watch + + 12:30:36 PM - Compilation complete. Watching for file changes. +``` + +When a file changes on disk that contains a problem, the following output + appears: + +```javascript +12:32:35 PM - File change detected. Starting incremental compilation... + + src/messages.ts(276,9): error TS2304: Cannot find name + 'candidate'. + + 12:32:35 PM - Compilation complete. Watching for file changes. +``` + +Looking at the output shows the following pattern: + +* The compiler runs when{' '} `File change detected. Starting incremental compilation...` {' '} is printed to the console. +* The compiler stops when C `ompilation complete. Watching for file changes` . is printed to the console. +* Between those two strings problems are reported. +* The compiler also runs once the initial start (without printing{' '} `File change detected. Starting incremental compilation` ... to the console). + +To capture this information, a problem matcher can provide a{' '} + `background` property. + +For the `tsc` compiler, an appropriate `background` {' '} + property looks like this: + +```javascript +"background": { + ` `"activeOnStart": true, + ` `"beginsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - File change detected\\. Starting incremental + compilation\\.\\.\\.", + ` `"endsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - Compilation complete\\. Watching for file changes\\." + + } +``` + +In addition to the `background` property on the problem + matcher, the task itself has to be marked as `isBackground` so + that the task keeps running in the background. + +A full handcrafted `tasks.json` for a `tsc` task + running in watch mode looks like this: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "watch", + ` `"command": "tsc", + ` `"args": ["--watch"], + ` `"isBackground": true, + ` `"problemMatcher": { + ` `"owner": "typescript", + ` `"fileLocation": "relative", + ` `"pattern": { + ` `"regexp": + "^([^\\s].\*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s\*:\\s\*(.\*)$", + ` `"file": 1, + ` `"location": 2, + ` `"severity": 3, + ` `"code": 4, + ` `"message": 5` `}, + ` `"background": { + ` `"activeOnStart": true, + ` `"beginsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - File change detected\\. Starting incremental + compilation\\.\\.\\.", + ` `"endsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - Compilation complete\\. Watching for file changes\\." + ` `} + ` `} + ` `} + ` `] + + } +``` + +## Next steps + +That was tasks - let's keep going... + +* tasks.json Schema - You can review the full `tasks.json` {' '} schema and descriptions. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. +* Language Support - Learn about our supported programming languages, both shipped with AVAP TM Dev Studio and through community extensions. +* Debugging - Debug your source code directly in the AVAP TM Dev Studio editor. + +## Common questions + +### Can a task use a different shell than the one specified for the Integrated + Terminal? + +Yes. You can use the " + `terminal.integrated.automationProfile.\*` " setting to set + the shell that will be used for all automation in AVAP TM Dev + Studio, which includes Tasks. + +```javascript +` `"terminal.integrated.automationProfile.windows": { + ` `"path": "cmd.exe" + ` `} +``` + +Alternatively, you can override a task's shell with the{' '} + `options.shell` property. You can set this per task, globally, + or per platform. For example, to use cmd.exe on Windows, your{' '} + `tasks.json` would include: + +```javascript +` `"version": "2.0.0", + ` `"windows": { + ` `"options": { + ` `"shell": { + ` `"executable": "cmd.exe", + ` `"args": [` `"/d", "/c" + ` `] + ` `} + ` `} + ` `}, + + ... +``` + +### Can a background task be used as a prelaunchTask in launch.json? + +Yes. Since a background task will run until killed, a background task on + its own has no signal that it has "completed". To use a + background task as a `prelaunchTask` , you must add an + appropriate background `problemMatcher` to the background task + so that there is a way for the task system and debug system to know that + the task "finished". + +Your task could be: + +```javascript +{ + ` `"type": "npm", + ` `"script": "watch", + ` `"problemMatcher": "$tsc-watch", + ` `"isBackground": true + + } +``` + +You can then use the task as a prelaunchTask in your{' '} + `launch.json` file: + +```javascript +{ + ` `"name": "Launch Extension", + ` `"type": "extensionHost", + ` `"request": "launch", + ` `"runtimeExecutable": "${execPath}", + ` `"args": + ["--extensionDevelopmentPath=${workspaceRoot}"], + ` `"stopOnEntry": false, + ` `"sourceMaps": true, + ` `"outFiles": ["${workspaceRoot}/out/src/\*\*/\*.js"], + ` `"preLaunchTask": "npm: watch" + + } +``` + +For more on background tasks, go to Background / watching tasks. + +### Why do I get "command not found" when running a task? + +The message "command not found" happens when the task command + you're trying to run is not recognized by your terminal as something + runnable. Most often, this occurs because the command is configured as + part of your shell's startup scripts. Tasks are run as non-login and + non-interactive, which means that the startup scripts for your shell + won't be run. nvm in particular is known to use startup scripts as + part of its configuration. + +There are several ways to resolve this issue: + +The above `npm` task will run bash with a command ( + `-c` ), just like the tasks system does by default. However, + this task also runs `bash` as a login shell ( + `-l` ). diff --git a/docs/developer.avapframework.com/USER_GUIDE_WorkspaceTrust.md b/docs/developer.avapframework.com/USER_GUIDE_WorkspaceTrust.md new file mode 100644 index 0000000..b1e4c50 --- /dev/null +++ b/docs/developer.avapframework.com/USER_GUIDE_WorkspaceTrust.md @@ -0,0 +1,365 @@ +AVAP TM Dev Studio takes security seriously and wants to help + you safely browse and edit code no matter the source or original authors. + The Workspace Trust feature lets you decide whether code in your project + folder can be executed by AVAP TM Dev Studio and extensions + without your explicit approval. + +![Trust this folder dialog] + +## Safe code browsing + +It's great that there is so much source code available on public + repositories and file shares. No matter the coding task or problem, there + is probably already a good solution available somewhere. It is also great + that there are so many powerful coding tools available to help you + understand, debug, and optimize your code. However, using open-source code + and tools does have risks, and you can leave yourself open to malicious + code execution and exploits. + +Workspace Trust provides an extra layer of security when working with + unfamiliar code, by preventing automatic code execution of any code in + your workspace if the workspace is open in "Restricted Mode". + +## Restricted Mode + +When prompted by the Workspace Trust dialog, if you choose{' '} + No, I don't trust the authors , AVAP TM Dev + Studio will go into Restricted Mode to prevent code execution. The + workbench will display a banner at the top with links to{' '} + Manage your folder via the Workspace Trust editor, and{' '} + Learn More about Workspace Trust (which takes you to + back to this documentation). + +You will also see a Restricted Mode badge in the Status bar. + +Restricted Mode tries to prevent automatic code execution by disabling or + limiting the operation of several AVAP TM Dev Studio features: + tasks, debugging, workspace settings, and extensions. + +To see the full list of features disabled in Restricted Mode, you can open + the Workspace Trust editor via the Manage link in the + banner, or by clicking the Restricted Mode badge in the Status bar. + +Tasks can run scripts and tool binaries, and because task definitions are + defined in the workspace `.vscode` folder, they are part of the + committed source code for a repo, and shared to every user of that repo. + Were someone to create a malicious task, it could be unknowingly run by + anyone who cloned that repository. + +If you try to run or even enumerate tasks ( Terminal {' '} + > Run Task... ) while in Restricted Mode, AVAP + TM Dev Studio will display a prompt to trust the folder and + continue executing the task. Cancelling the dialog leaves AVAP + TM Dev Studio in Restricted Mode. + +### Debugging + +Similar to running a AVAP TM Dev Studio task, debug extensions + can run debugger binaries when launching a debug session. For that reason, + debugging is also disabled when a folder is open in Restricted Mode. + +If you try to start a debug session ( Run >{' '} + Start Debugging ) while in Restricted Mode, AVAP + TM Dev Studio will display a prompt to trust the folder and + continue launching the debugger. Cancelling the dialog leaves AVAP + TM Dev Studio in Restricted Mode, and does not start the debug + session. + +Workspace settings are stored in the .vscode folder at the root of your + workspace, and are therefore shared by anyone who clones the workspace + repository. Some settings contain paths to executables (for example, + linter binaries), which if set to point to malicious code, could do + damage. For this reason, there is a set of workspace settings that are + disabled when running in Restricted Mode. + +In the Workspace Trust editor, there is a link to display the workspace + settings that aren't being applied. Clicking the link brings up the + Settings editor scoped by the tag:requireTrustedWorkspace tag. + +The AVAP TM Dev Studio extensions ecosystem is incredibly rich + and diverse. People have created extensions to help with just about any + programming task or editor customization. Some extensions provide full + programming language support (IntelliSense, debugging, code + analysis), and others let you play music or have virtual pets. + +Most extensions run code on your behalf and could potentially do harm. + Some extensions have settings that could cause them to act maliciously if + configured to run an unexpected executable. For this reason, extensions + that have not explicitly opted into Workspace Trust are disabled by + default in Restricted Mode. + +You can review an installed extension's status by clicking the{' '} + extensions are disabled or have limited functionality {' '} + link in the Workspace Trust editor, which displays the Extensions view + scoped with the `@workspaceUnsupported` filter. + +Disabled in Restricted Mode + +Extensions that have either not explicitly indicated that they support + running in Restricted Mode are shown in the{' '} + Disabled in Restricted Mode section. An extension author + can also indicate that they never want to be enabled in Restricted Mode if + they determine that their extension could be misused by modifications + (settings or files) in a workspace. + +Limited in Restricted Mode + +Extension authors can also evaluate their extensions for possible security + vulnerabilities and declare that they have limited {' '} + support when running in Restricted Mode. This mode means the extension may + disable some features or functionality to prevent a possible exploit. + +Extensions can add custom text to the Extensions view Workspace Trust + badge explaining the limitation when running in an untrusted folder. + +For example, the AVAP TM Dev Studio built-in PHP extension + limits the use of the `php.validate.executablePath` setting to + trusted folders since overriding this setting could run a malicious + program. + +You can override an extension's Workspace Trust support level using + the `extensions.supportUntrustedWorkspaces` setting described + in the Enabling extensions section below. + +If you try to install an extension in Restricted Mode, you will be + prompted to either trust the workspace or just install the extension. If + the extension doesn't support Workspace Trust, it will be installed, + but be disabled or running with limited functionality. + +## Trusting a workspace + +If you trust the authors and maintainers of a project, you can trust the + project's folder on your local machine. For example, it is usually + safe to trust repositories from well-known GitHub organizations such as + github.com/microsoft or github.com/docker. + +The initial Workspace Trust prompt when you open a new folder allows you + to trust that folder and its subfolders. + +You can also bring up the Workspace Editor and quickly toggle a + folder's trusted state. + +There are several ways to bring up the Workspace Editor dialog. + +When in Restricted Mode: + +* Restricted Mode banner Manage link +* Restricted Mode Status bar item + +You can also at any time use: + +* Workspaces: Manage Workspace Trust command from the Command Palette (Ctrl+Shift+P) +* Manage Workspace Trust from the Manage {' '} gear in the Activity bar + +## Selecting folders + +When you trust a folder, it is added to the{' '} + Trusted Folders & Workspaces list displayed in the + Workspace Trust editor. + +You can manually add, edit, and remove folders from this list and the + active folder enabling trust is highlighted in bold. + +When you trust a folder via the Workspace Trust editor, you have the + option to trust the parent folder. This will apply trust to the parent + folder and all subfolders. + +This can be helpful if you have many folders with trusted content + co-located under one folder. + +When opening a subfolder under a trusted parent, you won't see the + usual Don't Trust button to put you back in + Restricted Mode, instead there is text mentioning that your folder is + trusted due to another folder. + +You can add, modify, and remove a parent folder entry from the{' '} + Trusted Folders & Workspaces list. + +As mentioned above, you can trust a parent folder and all subfolders will + be trusted. This allows you to control Workspace Trust via a + repository's location on disk. + +For example, you could put all trusted repos under a + "TrustedRepos" parent folder, and unfamiliar repos under another + parent folder such as "ForEvaluation". You would trust the + "TrustedRepos" folder, and selectively trust folders under + "ForEvaluation". + +```javascript +TrustedRepos - Clone trusted repositories under this parent folder + + + ForEvaluation - Clone experimental or unfamiliar repositories under this + parent folder +``` + +You also group and set trust on your repositories by grouping them under + organization-base parent folders. + +```javascript +github/microsoft - Clone a specific organization's repositories under + this parent folder + + + github/{myforks} - Place your forked repositories under this + parent folder + + + local - Local un-published repositories +``` + +## Enabling extensions + +What happens if you want to use Restricted Mode but your favorite + extension doesn't support Workspace Trust? This can happen if an + extension, while useful and functional, isn't being actively + maintained and hasn't declared their Workspace Trust support. To + handle this scenario, you can override the extension's trust state + with the `extensions.supportUntrustedWorkspaces setting` . + +If you open the Settings editor (Ctrl+,) and search for + "trust extensions", you can find the{' '} + Extensions: Support Untrusted Workspaces setting, which + has an Edit in settings.json link. + +Select that link and you will go to your user settings.json file with a + new entry for extensions.supportUntrustedWorkspaces. This setting takes an + object that has a list of extension IDs and their support status and + version. You can select any of your installed extensions via IntelliSense + suggestions. + +Below you can see a settings.json entry for the Prettier extension. + +```javascript +` `"extensions.supportUntrustedWorkspaces": { + ` `"esbenp.prettier-vscode": { + ` `"supported": true, + ` `"version": "6.4.0" + ` `}, + ` `}, +``` + +You can either enable or disable Workspace Trust support with the + supported attribute. The version attribute specifies the exact extension + version applicable and you can remove the version field if you want to set + the state for all versions. + +If you'd like to learn more about how extension authors evaluate and + determine which features to limit in Restricted Mode, you can read the + Workspace Trust Extension Guide. + +## Opening untrusted files + +If you open a file that is located outside of a trusted folder, AVAP + TM Dev Studio will detect that the file comes from somewhere + outside the folder root and prompt you with the option to continue to open + the file or open the file in a new window in Restricted Mode. Opening in + Restricted Mode is the safest option and you can always reopen the file in + your original AVAP TM Dev Studio window once you determine the + file is trustworthy. + +If you would prefer to not be prompted when opening files from outside + trusted workspaces, you can set{' '} + `security.workspace.trust.untrustedFiles` to `open` . + You can also set `security.workspace.trust.untrustedFiles` to{' '} + `newWindow` to always create a new window in Restricted Mode. + Checking the Remember my decision for all workspaces {' '} + option in the untrusted files dialog applies your choice to the{' '} + `security.workspace.trust.untrustedFiles` user setting. + +### Opening untrusted folders + +When working with multi-root workspaces with multiple folders, if you try + to add a new folder to a trusted multi-root workspace, you will be + prompted to decide if you trust the files in that folder or if not, the + entire workspace will switch to Restricted Mode. + +### Empty windows (no open folder) + +By default, if you open a new AVAP TM Dev Studio window + (instance) without opening a folder or workspace, AVAP + TM Dev Studio runs the window with full trust. All installed + extensions are enabled and you can use the empty window without + restrictions. + +When you open a file, you will be prompted whether you want to open an + untrusted file since there is no folder to parent it. + +You can switch an empty window to Restricted Mode using the Workspace + Trust editor (select Manage Workspace Trust from the{' '} + Manage gear button or the Command Palette) and + selecting Don't Trust . The empty window will remain + in Restricted Mode for your current session but will go back to trusted if + you restart or create a new window. + +If you want all empty windows to be in Restricted Mode, you can set{' '} + `security.workspace.trust.emptyWindow` to false. + +## Settings + +Below are the available Workspace Trust settings: + +* `security.workspace.trust.enabled` - Enable Workspace Trust feature. Default is true. +* `security.workspace.trust.startupPrompt` - Whether to show the Workspace Trust dialog on startup. Default is to only show once per distinct folder or workspace. +* `security.workspace.trust.emptyWindow` - Whether to always trust an empty window (no open folder). Default is true. +* `security.workspace.trust.untrustedFiles` - Controls how to handle loose files in a workspace. Default is to prompt. +* `extensions.supportUntrustedWorkspaces` - Override extension Workspace Trust declarations. Either true or false. +* `security.workspace.trust.banner` - Controls when the Restricted Mode banner is displayed. Default is untilDismissed. + +## Command-line switch + +You can disable Workspace Trust via the AVAP TM Dev Studio + command line by passing --disable-workspace-trust. This switch only + affects the current session. + +## Next steps + +Learn more at: + +* Workspace Trust Extension Guide - Learn how extension authors can support Workspace Trust. +* What is a AVAP TM Dev Studio "workspace"? - Find out more details about the AVAP TM Dev Studio "workspace" concept. +* GitHub Repositories extension - Work directly on a repository without cloning the source code to your local machine. + +## Common questions + +Yes, you can still browse and edit source code in Restricted Mode. Some + language features may be disabled, but text editing is always supported. + +In Restricted Mode, any extension that doesn't support Workspace Trust + will be disabled, and all UI elements such as Activity bar icons and + commands will not be displayed. + +You can override an extension's Workspace Trust support level with the{' '} + `extensions.supportUntrustedWorkspaces` setting but do so with + care. Enabling extensions has more details. + +You can but it is not recommended. If you don't want AVAP TM {' '} + Dev Studio to check for Workspace Trust when opening a new folder or + repository, you can set `security.workspace.trust.enabled` to + false. AVAP TM Dev Studio will then behave as it did before the + 1.57 release. + +Bring up Workspace Trust editor ( + Workspaces: Manage Workspace Trust from the Command + Palette) and select the Don't Trust button. You + can also remove the folder from the{' '} + Trusted Folders & Workspaces list. + +If you don't see the Don't Trust button in the + Workspace Trust dialog, the folder's trust level may be inherited from + a parent folder. Review the{' '} + Trusted Folders & Workspaces list to check if a + parent folder has enabled Workspace Trust. + +Some workflows such as connecting to a GitHub Codespace or attaching to a + running Docker container are automatically trusted since these are managed + environments to which you should already have a high level of trust. + +Many features of AVAP TM Dev Studio allow third-party tools and + extensions to run automatically, such as linting or format on save, or + when you do certain operations like compiling code or debugging. An + unethical person could craft an innocent looking project that would run + malicious code without your knowledge and harm your local machine. + Workspace Trust provides an extra layer of security by trying to prevent + code execution while you are evaluating the safety and integrity of + unfamiliar source code. diff --git a/docs/developer.avapframework.com/Usuarios_con_saldo_EN.md b/docs/developer.avapframework.com/Usuarios_con_saldo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md new file mode 100644 index 0000000..0334449 --- /dev/null +++ b/docs/developer.avapframework.com/Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md @@ -0,0 +1,195 @@ +This service is used to validate an OTP sent to a telephone number. + +POST: + `URL_BASE + /ws/util.py/validate_otp` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "signed" + : + , + "signature_key" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signed:` Shows if the validation request is right or not. +* `signature_key:` Key to OTP verification. +* `amount:` Operation amount in the suitable format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/validate_otp" + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'phone_number' + :{' '} + '7229063245' + , + 'otp' + :{' '} + '123456' + , + 'signature' + :{' '} + + '277b62946d7ed08cf23a5613e3becc4711322abd' + + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/util.py/validate_otp', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'phone_number': '7229063245', + 'otp': '123456', + 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("phone_number", "7229063245"); + formdata.append("otp", "123456"); + formdata.append("signature", + "277b62946d7ed08cf23a5613e3becc4711322abd"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/validate_otp", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/util.py/validate_otp'{' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + 'phone_number=7229063245'{' '} + \ + --form 'otp=123456'{' '} + \ + --form{' '} + + 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' +``` + +## Business logic: + +This service must be used by an user with administrator profile. The OTP + sent to the indicated phone is validated. diff --git a/docs/developer.avapframework.com/actividad_del_usuario_EN.md b/docs/developer.avapframework.com/actividad_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/alta_baja_modificacion_EN.md b/docs/developer.avapframework.com/alta_baja_modificacion_EN.md new file mode 100644 index 0000000..7b81937 --- /dev/null +++ b/docs/developer.avapframework.com/alta_baja_modificacion_EN.md @@ -0,0 +1,34 @@ +### Where: + +* status : Shows if the call has been successful (true) or not (false). +* codtran : Transaction code that identifies the executed operation. +* result : Contains information about the result of the service. +* user_id_registration : New user ID. +* longitud_otp : Length of the OTP associated with the operation. +* elapsed : Operation execution time. + +### Where: + +* status : Shows if the call has been successful (true) or not (false). +* level: Error importance level. +* message : Error message. +* error : Sole error code. +* Error catalogue Message Cause Email is required The parameter enviar_email_confirmar has been sent, but the parameter email has not been informed nor attached an email address The phone + prefix phone already exists The account identified by phone already exits and is activated An attempt to create an account without a phone was made Required parameter not provided phone An attempt was made to create a phone number with the wrong length The value of the parameter phone has the wrong length, depending on the country indicated in country_code An attempt was made to create an account with a prefix other than the country prefix != country_code The value of the parameter prefix does not match with the country code indicated in country_code The account is pending to sign the discharge The account already exists in the system, but is inactive The nick nick is already used The account identified by nick exists and it's active Country not found Controlled error in case the country code entered is wrong. We have found a problem and are working to fix it ... sorry for the inconvenience Uncontrolled error 500: Internal Server Error In order not to provide service information, a 500 error is thrown if a required parameter is not reported. 500: Internal Server Error You can also get such an error if an uncontrolled error occurs on the server Chart 2.a.2 : List of exceptions thrown by the service{' '} Alta Usuario . Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). +* Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} +* If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. +* If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. +* If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. +* If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. +* The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. +* The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). + +This section details, for each box, all the information necessary to + exploit the previously documented services. + +There is a user who has an "AFFILIATE" profile and who will + allow managing the community: + +### Examples + +Below are some examples of calls to the services described in this + document: diff --git a/docs/developer.avapframework.com/appendices_1.md b/docs/developer.avapframework.com/appendices_1.md new file mode 100644 index 0000000..da83dc0 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_1.md @@ -0,0 +1 @@ +## Function Glossary diff --git a/docs/developer.avapframework.com/appendices_10.md b/docs/developer.avapframework.com/appendices_10.md new file mode 100644 index 0000000..7c95d8b --- /dev/null +++ b/docs/developer.avapframework.com/appendices_10.md @@ -0,0 +1,32 @@ +## getListLen() + +The `getListLen()` command calculates the length of a list and stores the result in a target variable. This command is useful for determining the number of elements in a list. + +### Parameters + +* SourceVariable Type: var Description: The variable containing the list whose length you want to calculate. It can be a variable that stores the list or a direct value representing the list. +* TargetVariable Type: var Description: The variable where the result of the list length will be stored. This should be a variable that will receive the integer value representing the number of elements in the list. + +### Command Flow + +### Usage Example + +Suppose the list in `myList` is `['apple', 'banana', 'cherry']`. + +```javascript +// Variable definitions +myList = ['apple', 'banana', 'cherry'] +listLength = 0 + +// Call the command to calculate the length of the list +getListLen(myList, listLength) + +// Return the list length through addResult +addResult(listLength) +``` + +Since the list `myList` has 3 elements, the `getListLen()` command will calculate that the length is 3. This value will be stored in the `listLength` variable and returned through `addResult(listLength)`, resulting in the following output: + +```javascript +3 +``` diff --git a/docs/developer.avapframework.com/appendices_11.md b/docs/developer.avapframework.com/appendices_11.md new file mode 100644 index 0000000..448cafd --- /dev/null +++ b/docs/developer.avapframework.com/appendices_11.md @@ -0,0 +1,33 @@ +## itemFromList() + +The `itemFromList()` command extracts a specific element from a list based on a given index and stores the result in a target variable. This is useful for accessing individual elements within a list. + +### Parameters + +* SourceVariable Type: var Description: The variable containing the list from which an element is to be extracted. It can be a variable that stores the list or a direct value representing the list. +* index Type: value Description: The index of the element to be extracted from the list. It must be an integer value that indicates the position of the element within the list. +* TargetVariable Type: var Description: The variable where the extracted element will be stored. It must be a variable that will receive the value of the element at the specified index position. + +### Command Flow + +### Usage Example + +Suppose the list in `myList` is `['apple', 'banana', 'cherry']` and you want to extract the element at index 1. + +```javascript +// Variable definitions +myList = ['apple', 'banana', 'cherry'] +element = '' + +// Call the command to extract the element at index 1 +itemFromList(myList, 1, element) + +// Return the extracted element through addResult +addResult(element) +``` + +Since index 1 corresponds to the element 'banana' in the `myList`, the `itemFromList()` command will extract 'banana' and store it in the variable `element`. The `element` variable will be returned through `addResult(element)`, resulting in the following output: + +```javascript +"banana" +``` diff --git a/docs/developer.avapframework.com/appendices_12.md b/docs/developer.avapframework.com/appendices_12.md new file mode 100644 index 0000000..a5a280b --- /dev/null +++ b/docs/developer.avapframework.com/appendices_12.md @@ -0,0 +1,33 @@ +## variableFromJSON() + +The `variableFromJSON()` command extracts the value associated with a specific key from a JSON object and stores the result in a target variable. This command is useful for accessing values within a JSON object. + +### Parameters + +* SourceVariable Type: var Description: The variable containing the JSON object from which a value is to be extracted. It can be a variable that stores the JSON object or a direct value representing the JSON object. +* key Type: value Description: The key whose value is to be extracted from the JSON object. It must be a value that represents the key within the JSON object. +* TargetVariable Type: var Description: The variable where the extracted value will be stored. It must be a variable that will receive the value associated with the specified key in the JSON object. + +### Command Flow + +### Usage Example + +Suppose the JSON object in `jsonData` is `"name": "Alice", "age": 30` and you want to extract the value associated with the key `"name"`. + +```javascript +// Variable definitions +jsonData = {"name": "Alice", "age": 30} +nameValue = '' + +// Call the command to extract the value associated with the key "name" +variableFromJSON(jsonData, "name", nameValue) + +// Return the extracted value through addResult +addResult(nameValue) +``` + +Since the value associated with the key `"name"` in the JSON object `jsonData` is `"Alice"`, the `variableFromJSON()` command will extract `"Alice"` and store it in the variable `nameValue`. The `nameValue` variable will be returned through `addResult(nameValue)`, resulting in the following output: + +```javascript +"Alice" +``` diff --git a/docs/developer.avapframework.com/appendices_13.md b/docs/developer.avapframework.com/appendices_13.md new file mode 100644 index 0000000..fc2039c --- /dev/null +++ b/docs/developer.avapframework.com/appendices_13.md @@ -0,0 +1,38 @@ +## AddVariableToJSON() + +The `AddVariableToJSON()` command adds a new key and its corresponding value to a JSON object and stores the result in a target variable. This command is useful for updating a JSON object with new key-value pairs. + +### Parameters + +* Key Type: variable Description: The key to be added to the JSON object. It must be a variable that stores the key to be added. +* Value Type: variable Description: The value associated with the key to be added to the JSON object. It must be a variable that stores the corresponding value. +* TargetVariable Type: variable Description: The variable where the updated JSON object will be stored. It must be a variable that will receive the JSON object with the new key and its added value. + +### Command Flow + +### Usage Example + +Suppose the initial JSON object in `jsonData` is `"name": "Alice", "age": 30`, and you want to add a new key `"email"` with the value `"alice@example.com"`. + +```javascript +// Variable definitions +jsonData = {"name": "Alice", "age": 30} +newKey = "email" +newValue = "alice@example.com" + +// Call the command to add the new key and value to the JSON object +AddVariableToJSON(newKey, newValue, jsonData) + +// Return the updated JSON object through addResult +addResult(jsonData) +``` + +This updated JSON object will be stored in the variable `jsonData` and will be returned through `addResult(jsonData)`, resulting in the following output: + +```javascript +{ + "name": "Alice", + "age": 30, + "email": "alice@example.com" +} +``` diff --git a/docs/developer.avapframework.com/appendices_14.md b/docs/developer.avapframework.com/appendices_14.md new file mode 100644 index 0000000..456b4d5 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_14.md @@ -0,0 +1,32 @@ +## variableToList() + +The `variableToList()` command converts an element into a list that contains only that element and stores the resulting list in a target variable. This command is useful to ensure that a single value is handled as a list in subsequent processing. + +### Parameters + +* element Type: variable Description: The variable that contains the element to be converted into a list. It can be any type of value that you want to include as the only item in the list. +* TargetVariable Type: variable Description: The variable in which the resulting list will be stored. It must be a variable that will receive the list with the included element. + +### Command Flow + +### Usage Example + +Suppose the element in `myElement` is `"apple"` and you want to convert it into a list. + +```javascript +// Variable definitions +myElement = "apple" +myList = [] + +// Call the command to convert the element into a list +variableToList(myElement, myList) + +// Return the resulting list through addResult +addResult(myList) +``` + +Since `myElement` is `"apple"`, the `variableToList()` command will convert this element into a list with a single item: `["apple"]`. This list will be stored in the variable `myList`, and `myList` will be returned through `addResult(myList)`, resulting in the following output: + +```javascript +["apple"] +``` diff --git a/docs/developer.avapframework.com/appendices_15.md b/docs/developer.avapframework.com/appendices_15.md new file mode 100644 index 0000000..1ba61f1 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_15.md @@ -0,0 +1,31 @@ +## addParam() + +The `addParam()` command retrieves the value associated with a specific key from the query string of the current request and assigns this value to a target variable. This command is useful for extracting values from query parameters in an HTTP request and storing them in variables for processing. + +### Parameters + +* param Type: value Description: The key of the query string whose value you want to retrieve. It should be a value that represents the key in the query string. +* variable Type: var Description: The variable in which the retrieved value from the query string will be stored. It must be a variable that will receive the value associated with the specified key. + +### Command Flow + +### Usage Example + +Suppose the query string of the current request is `?user=alice&age=30`, and you want to retrieve the value associated with the key `"user"`. + +```javascript +// Variable definitions +userName = '' + +// Call the command to retrieve the value for the "user" key and assign it to the variable +addParam("user", userName) + +// Return the retrieved value through addResult +addResult(userName) +``` + +Given the query string `?user=alice&age=30`, the `addParam()` command will retrieve the value `"alice"` associated with the key `"user"` and store it in the `userName` variable. The `userName` variable will be returned through `addResult(userName)`, resulting in the following output: + +```javascript +"alice" +``` diff --git a/docs/developer.avapframework.com/appendices_16.md b/docs/developer.avapframework.com/appendices_16.md new file mode 100644 index 0000000..bfa04bb --- /dev/null +++ b/docs/developer.avapframework.com/appendices_16.md @@ -0,0 +1,23 @@ +## addResult() + +The `addResult()` command is used to return the content of a variable as part of the command or function response. It is the way to present results or processed data from commands and operations performed in the language. + +### Parameters + +* variable Type: var Description: The variable whose content is to be returned as the result. It should be a variable that contains the value or data you want to include in the response. + +### Command Flow + +### Example Usage + +Suppose we have performed an operation and want to return the result stored in the `result` variable. + +```javascript +// Define the variable with the result of an operation +result = "Operation completed successfully." + +// Call the command to return the content of the variable +addResult(result) +``` + +In this example, the `addResult(result)` command will return the content of the `result` variable, which is "Operation completed successfully.". This content will be presented as part of the response. diff --git a/docs/developer.avapframework.com/appendices_17.md b/docs/developer.avapframework.com/appendices_17.md new file mode 100644 index 0000000..95ce86a --- /dev/null +++ b/docs/developer.avapframework.com/appendices_17.md @@ -0,0 +1,34 @@ +## RequestPost() + +The `RequestPost()` command performs an HTTP POST request to a specified URL, sending a query string, headers, and a request body, and stores the result of the request in a destination variable. This command is useful for sending data to a server and handling the responses from the request. + +### Parameters + +* url Type: variable Description: The URL to which the POST request will be sent. It should be a variable containing the address of the resource to which the request is to be made. +* querystring Type: variable Description: The query string that will be appended to the URL. It should be a variable containing the query parameters in string format. +* headers Type: variable Description: The HTTP headers that will be included in the POST request. It should be a variable containing a dictionary of headers and their values. +* body Type: variable Description: The body of the POST request that will be sent to the server. It should be a variable containing the data to be sent in the request. +* o_result Type: variable Description: The variable in which the result of the POST request will be stored. It should be a variable that will receive the server's response. + +### Command Flow + +### Example Usage + +Suppose you want to send a POST request to `https://api.example.com/data`, with a query string `userId=123`, headers including `Content-Type: application/json`, and a body with JSON data. + +```javascript +// Define variables +url = "https://api.example.com/data" +querystring = "userId=123" +headers = {"Content-Type": "application/json"} +body = '{"name": "Alice", "age": 30}' +response = '' + +// Call the command to perform the POST request +RequestPost(url, querystring, headers, body, response) + +// Return the request result via addResult +addResult(response) +``` + +In this example, the `RequestPost()` command will send a POST request to `https://api.example.com/data` with the provided query string, headers, and body. The server's response will be stored in the `response` variable, and this variable will be returned via `addResult(response)`. The result of the request will be included in the final response. diff --git a/docs/developer.avapframework.com/appendices_18.md b/docs/developer.avapframework.com/appendices_18.md new file mode 100644 index 0000000..4306048 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_18.md @@ -0,0 +1,32 @@ +## ormCreateTable() + +The `ormCreateTable()` command creates a new table in a database using the specified ORM (Object-Relational Mapping). This command defines the columns of the table and their data types, and stores a reference to the created table in a destination variable. + +### Parameters + +* fields Type: value Description: A string containing the names of the table columns, separated by commas. Each column name should correspond to a field in the table. +* fieldsType Type: value Description: A string containing the data types for each column, separated by commas. The data types should be in the same order as the column names in fields . +* dbaseName Type: value Description: The name of the database where the table will be created. It should be a string indicating the target database. +* varTarget Type: variable Description: The variable in which the reference to the created table will be stored. It should be a variable that will receive the reference to the new table. + +### Command Flow + +### Example Usage + +Suppose you want to create a table called `users` in a database called `myDatabase`, with two columns: `username` of type `VARCHAR` and `age` of type `INTEGER`. + +```javascript +// Define variables +fields = "username,age" +fieldsType = "VARCHAR,INTEGER" +dbaseName = "myDatabase" +tableReference = '' + +// Call the command to create the table +ormCreateTable(fields, fieldsType, dbaseName, tableReference) + +// Return the reference to the created table via addResult +addResult(tableReference) +``` + +In this example, the `ormCreateTable()` command will create a table in the `myDatabase` database with the specified columns and data types. The reference to the new table will be stored in the `tableReference` variable, and this variable will be returned via `addResult(tableReference)`. The output will include the reference to the created table. diff --git a/docs/developer.avapframework.com/appendices_19.md b/docs/developer.avapframework.com/appendices_19.md new file mode 100644 index 0000000..1cdb08d --- /dev/null +++ b/docs/developer.avapframework.com/appendices_19.md @@ -0,0 +1,28 @@ +## ormCheckTable() + +The `ormCheckTable()` command checks for the existence of a table in a specific database and stores the result in a destination variable. This command is useful for verifying if a table already exists before attempting further operations on it. + +### Parameters + +* dbaseName Type: value Description: The name of the database in which the table's existence should be checked. It should be a string indicating the database to check. +* varTarget Type: variable Description: The variable in which the result of the check will be stored. It should be a variable that will receive a value indicating whether the table exists or not. + +### Command Flow + +### Example Usage + +Suppose you want to check if a table called `users` exists in a database called `myDatabase`. + +```javascript +// Define variables +dbaseName = "myDatabase" +tableExists = '' + +// Call the command to check the existence of the table +ormCheckTable(dbaseName, tableExists) + +// Return the result of the check via addResult +addResult(tableExists) +``` + +In this example, the `ormCheckTable()` command will check for the existence of the `users` table in the `myDatabase` database. The result of the check (whether the table exists or not) will be stored in the `tableExists` variable, and this variable will be returned via `addResult(tableExists)`. The output will reflect whether the table exists (True) or not (False). diff --git a/docs/developer.avapframework.com/appendices_2.md b/docs/developer.avapframework.com/appendices_2.md new file mode 100644 index 0000000..80914e6 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_2.md @@ -0,0 +1,21 @@ +## randomString() + +The `randomString()` command generates a random string based on a specified pattern and stores it in a target variable. It is especially useful when random strings are needed to conform to a specific format, such as passwords or identifiers. + +### Parameters + +* Pattern Type: var Description: A regular expression (regex) pattern that defines the characters and structure of the string to be generated. It can be a direct value or a variable containing the pattern. For example, [a-zA-Z0-9] will generate a string that includes uppercase letters, lowercase letters, and numbers. +* Length Type: var Description: An integer value specifying the length of the random string to be generated. It can be a direct value or a variable containing the desired length. This value determines how many characters the resulting string will have. +* TargetVariable Type: var Description: The variable where the generated string will be stored. This variable should be used later in the program. Unlike the other parameters, this must be a variable and not a direct value. + +### Usage Example + +```javascript +// Direct call with values: + randomString('[a-zA-Z0-9]', 8, generatedPassword) + + // Call using variables: + pattern = '[a-zA-Z0-9]' + length = 8 + randomString(pattern, length, generatedPassword) +``` diff --git a/docs/developer.avapframework.com/appendices_20.md b/docs/developer.avapframework.com/appendices_20.md new file mode 100644 index 0000000..e475a40 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_20.md @@ -0,0 +1,37 @@ +## ormAccessUpdate() + +The `ormAccessUpdate()` command updates records in a database table based on the provided selection criteria. This command modifies the values of specified fields in a database using the corresponding values from variables. + +### Parameters + +* fields Type: variable Description: A string containing the names of the fields to be updated. The field names should be separated by commas. +* fieldsValuesVariables Type: variable Description: A string containing the names of the variables holding the new values for the specified fields. The variable names should be separated by commas, in the same order as the fields in fields . +* dbase Type: variable Description: The name of the database where the table to be updated is located. It should be a variable containing the name of the database. +* selector Type: variable Description: A condition to select the records to be updated. It should be a string specifying the selection criteria in SQL format, such as id = 1 . +* varTarget Type: variable Description: The variable in which the result of the update operation will be stored. It should be a variable that will receive a value indicating whether the update was successful or not. + +### Command Flow + +### Example Usage + +Suppose you want to update the `age` field to 31 for the user with `id` equal to 1 in a database called `myDatabase`. + +```javascript +// Define variables +fields = "age" +fieldsValuesVariables = "newAge" +dbase = "myDatabase" +selector = "id = 1" +updateSuccess = '' + +// Define the variable holding the new value +newAge = 31 + +// Call the command to update the record +ormAccessUpdate(fields, fieldsValuesVariables, dbase, selector, updateSuccess) + +// Return the result of the update via addResult +addResult(updateSuccess) +``` + +In this example, the `ormAccessUpdate()` command will update the `age` field in the `myDatabase` database for the record where `id = 1`. The new value for `age` is 31, stored in the `newAge` variable. The `updateSuccess` variable will store the result of the operation (whether it was successful or not), and this variable will be returned via `addResult(updateSuccess)`. diff --git a/docs/developer.avapframework.com/appendices_21.md b/docs/developer.avapframework.com/appendices_21.md new file mode 100644 index 0000000..6940ed8 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_21.md @@ -0,0 +1,32 @@ +## ormAccessSelect() + +The `ormAccessSelect()` command retrieves records from a table in a database based on the provided selection criteria. This command selects the desired fields and stores the results in a target variable. + +### Parameters + +* fields Type: variable Description: A string containing the names of the fields to be retrieved. The field names should be separated by commas. +* dbase Type: variable Description: The name of the database from which records should be retrieved. It must be a variable containing the name of the database. +* selector Type: variable Description: A condition to select the records to be retrieved. It must be a string specifying the selection criteria in SQL format, such as id = 1 . +* varTarget Type: variable Description: The variable in which the query results will be stored. It must be a variable that will receive a list of dictionaries, each representing a retrieved record. + +### Command Flow + +### Example Usage + +Suppose you want to retrieve the `username` field for all users where `age` is greater than 25 from a database called `myDatabase`. + +```javascript +// Define variables +fields = "username" +dbase = "myDatabase" +selector = "age > 25" +usersList = '' + +// Call the command to retrieve the records +ormAccessSelect(fields, dbase, selector, usersList) + +// Return the query results via addResult +addResult(usersList) +``` + +In this example, the `ormAccessSelect()` command will retrieve the `username` field for all users in the `myDatabase` database where `age` is greater than 25. The results will be stored in the `usersList` variable, and this variable will be returned via `addResult(usersList)`. The output will be a list of dictionaries, each representing a user whose username has been retrieved. diff --git a/docs/developer.avapframework.com/appendices_22.md b/docs/developer.avapframework.com/appendices_22.md new file mode 100644 index 0000000..c96aca1 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_22.md @@ -0,0 +1,36 @@ +## ormAccessInsert() + +The `ormAccessInsert()` command inserts a new record into a database table using the provided values for the fields. This command defines the fields and their corresponding values, and stores the result of the operation in a target variable. + +### Parameters + +* fields Type: variable Description: A string containing the names of the fields into which the values will be inserted. The field names should be separated by commas. +* fieldsValuesVariables Type: variable Description: A string containing the names of the variables that hold the values to be inserted into the specified fields. The variable names should be separated by commas, in the same order as the fields in fields . +* dbase Type: variable Description: The name of the database where the table into which the new record should be inserted is located. It must be a variable containing the name of the database. +* varTarget Type: variable Description: The variable in which the result of the insertion operation will be stored. It must be a variable that will receive a value indicating whether the insertion was successful or not. + +### Command Flow + +### Example Usage + +Suppose you want to insert a new record into a table called `users` in a database called `myDatabase`, with values for `username` and `age` coming from the variables `newUsername` and `newAge`. + +```javascript +// Define variables +fields = "username,age" +fieldsValuesVariables = "newUsername,newAge" +dbase = "myDatabase" +insertSuccess = '' + +// Define the variables with the new values +newUsername = "Alice" +newAge = 31 + +// Call the command to insert the new record +ormAccessInsert(fields, fieldsValuesVariables, dbase, insertSuccess) + +// Return the result of the insertion via addResult +addResult(insertSuccess) +``` + +In this example, the `ormAccessInsert()` command will insert a new record into the `myDatabase` database in the `users` table. The values for `username` and `age` are provided by the `newUsername` and `newAge` variables. The `insertSuccess` variable will store the result of the operation (whether it was successful or not), and this variable will be returned via `addResult(insertSuccess)`. The output will reflect whether the insertion was successful (`True`) or failed (`False`). diff --git a/docs/developer.avapframework.com/appendices_23.md b/docs/developer.avapframework.com/appendices_23.md new file mode 100644 index 0000000..dc9a7d8 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_23.md @@ -0,0 +1,30 @@ +## ormAI() + +The `ormAI()` command uses an artificial intelligence model to convert a natural language query into an SQL statement, which is then executed against a database. This command processes a natural language query to generate an SQL statement that is executed on the table specified in the `source` parameter, and stores the result in a target variable. + +### Parameters + +* prompt Type: variable Description: A string in natural language that describes the query to be made. For example, "get the value of the row with id 5". +* source Type: variable Description: The name of the table on which the generated query should be executed. It must be a variable containing the name of the table in the database. +* TargetVariable Type: variable Description: The variable in which the result of the query will be stored. It must be a variable that will receive the result of the generated and executed SQL query. + +### Command Flow + +### Example Usage + +Suppose you want to retrieve all the data from the row with id equal to 5 from a table called `users`. + +```javascript +// Define variables +prompt = "get the value of the row with id 5" +source = "users" +queryResult = '' + +// Call the command to process the query +ormAI(prompt, source, queryResult) + +// Return the query result via addResult +addResult(queryResult) +``` + +In this example, the `ormAI()` command will convert the `prompt` into an SQL query: `SELECT * FROM users WHERE id = 5;`. This query will be executed on the `users` table, and the results will be stored in the `queryResult` variable. The `queryResult` variable will be returned via `addResult(queryResult)`. The output will be the dataset retrieved by the executed SQL statement. diff --git a/docs/developer.avapframework.com/appendices_24.md b/docs/developer.avapframework.com/appendices_24.md new file mode 100644 index 0000000..24dcf73 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_24.md @@ -0,0 +1,30 @@ +## functionAI() + +The `functionAI()` command uses an artificial intelligence model to convert a natural language description of a function or process into a code implementation, which is then executed and returns the result. This command converts a description provided in `prompt` into a function that operates on the data of the table specified in `source`, and stores the result in a target variable. + +### Parameters + +* prompt Type: variable Description: A string in natural language that describes the process or function to be executed. For example, "calculate the average of the salary column". +* source Type: variable Description: The name of the table on which the generated function should be executed. It must be a variable containing the name of the table in the database. +* TargetVariable Type: variable Description: The variable in which the result of the executed function or process will be stored. It must be a variable that will receive the result of the generated and executed code. + +### Command Flow + +### Example Usage + +Suppose you want to calculate the average of the `salary` column in a table called `employees`. + +```javascript +// Define variables +prompt = "calculate the average of the salary column" +source = "employees" +averageSalary = '' + +// Call the command to process the function +functionAI(prompt, source, averageSalary) + +// Return the result of the function via addResult +addResult(averageSalary) +``` + +In this example, the `functionAI()` command will convert the `prompt` into a code implementation to calculate the average of the `salary` column in the `employees` table. The result of the calculation will be stored in the `averageSalary` variable, and this variable will be returned via `addResult(averageSalary)`. The output will be the calculated average of the `salary` column. diff --git a/docs/developer.avapframework.com/appendices_3.md b/docs/developer.avapframework.com/appendices_3.md new file mode 100644 index 0000000..50eede6 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_3.md @@ -0,0 +1,31 @@ +## stampToDatetime() + +The `stampToDatetime()` command converts a timestamp value to a date and time according to a specified format, applying a possible time difference, and stores the result in a target variable. It is useful for manipulating and formatting time values into different representations. + +### Parameters + +* timestamp Type: var Description: A value representing a timestamp, which can be provided directly or through a variable. This value is the starting point for conversion to a date and time format. +* Format Type: var Description: A format string that defines how the resulting date and time should be presented. This string follows the same conventions used in Python for formatting dates and times. Common symbols include: %Y : Year with four digits (e.g., 2024) %m : Month with two digits (01 to 12) %d : Day of the month with two digits (01 to 31) %H : Hour in 24-hour format (00 to 23) %M : Minutes (00 to 59) %S : Seconds (00 to 59) For example, the format %Y-%m-%d %H:%M:%S converts a timestamp into a string like 2024-08-25 14:30:00 . It can be a direct value or a variable containing the desired format. +* %Y : Year with four digits (e.g., 2024) +* %m : Month with two digits (01 to 12) +* %d : Day of the month with two digits (01 to 31) +* %H : Hour in 24-hour format (00 to 23) +* %M : Minutes (00 to 59) +* %S : Seconds (00 to 59) +* TimeDelta Type: var Description: An optional value representing a time adjustment (positive or negative) applied to the timestamp before conversion. This value can be provided directly or through a variable and is expressed in seconds. +* TargetVariable Type: var Description: The variable where the resulting date and time from the conversion will be stored. Unlike the other parameters, this must be a variable and not a direct value. + +### Usage Example + +```javascript +// Direct call with values: + stampToDatetime(1692966600, '%Y-%m-%d %H:%M:%S', 3600, convertedDatetime) + + // Call using variables: + timestamp = 1692966600 + format = '%Y-%m-%d %H:%M:%S' + adjustment = 3600 + stampToDatetime(timestamp, format, adjustment, convertedDatetime) +``` + +In the first example, a timestamp is converted to a date and time in the format `"%Y-%m-%d %H:%M:%S"`, applying a 3600-second (1-hour) adjustment, and the result is stored in the variable `convertedDatetime`. In the second example, variables are used to define the timestamp, format, and adjustment. diff --git a/docs/developer.avapframework.com/appendices_4.md b/docs/developer.avapframework.com/appendices_4.md new file mode 100644 index 0000000..cee6429 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_4.md @@ -0,0 +1,31 @@ +## getTimeStamp() + +The `getTimeStamp()` command converts a date and time string, given in a specific format, to a timestamp value. Additionally, it allows for an optional time adjustment before storing the result in a target variable. This command is useful for converting human-readable date and time representations to a numeric timestamp format, which can be used in calculations or time comparisons. + +### Parameters + +* DateString Type: var Description: A string representing a date and time. This string must follow the format specified in the Format parameter. It can be a direct value or a variable containing the date string. +* Format Type: var Description: A format string that defines how to interpret the date and time string ( DateString ). This string follows Python's conventions for formatting and parsing dates and times. Some common symbols include: %Y : Year with four digits (e.g., 2024) %m : Month with two digits (01 to 12) %d : Day of the month with two digits (01 to 31) %H : Hour in 24-hour format (00 to 23) %M : Minutes (00 to 59) %S : Seconds (00 to 59) For example, to interpret the string "2024-08-25 14:30:00" , the format %Y-%m-%d %H:%M:%S would be used. It can be a direct value or a variable containing the format. +* %Y : Year with four digits (e.g., 2024) +* %m : Month with two digits (01 to 12) +* %d : Day of the month with two digits (01 to 31) +* %H : Hour in 24-hour format (00 to 23) +* %M : Minutes (00 to 59) +* %S : Seconds (00 to 59) +* TimeDelta Type: var Description: An optional value representing a time adjustment (positive or negative) applied to the timestamp after conversion. This value can be provided directly or through a variable and is expressed in seconds. +* TargetVariable Type: var Description: The variable where the resulting timestamp from the conversion will be stored. Unlike the other parameters, this must be a variable and not a direct value. + +### Usage Example + +```javascript +// Direct call with values: + getTimeStamp('2024-08-25 14:30:00', '%Y-%m-%d %H:%M:%S', 3600, generatedTimestamp) + + // Call using variables: + date = '2024-08-25 14:30:00' + format = '%Y-%m-%d %H:%M:%S' + adjustment = 3600 + getTimeStamp(date, format, adjustment, generatedTimestamp) +``` + +In the first example, the date and time string `"2024-08-25 14:30:00"` is converted to a timestamp, applying a 3600-second (1-hour) adjustment, and the result is stored in the variable `generatedTimestamp`. In the second example, variables are used to define the date, format, and adjustment. diff --git a/docs/developer.avapframework.com/appendices_5.md b/docs/developer.avapframework.com/appendices_5.md new file mode 100644 index 0000000..70599a0 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_5.md @@ -0,0 +1,25 @@ +## getRegex() + +The `getRegex()` command searches for matches in a source string using a regular expression (regex) pattern and stores the result in a target variable. This command is useful for extracting specific parts of a string that match a defined pattern, such as email addresses, phone numbers, or any other structure defined by a regex. + +### Parameters + +* SourceVariable Type: variable Description: The variable containing the source string in which to search for regex pattern matches. This string is the text on which the regex search will be applied. +* rePattern Type: variable Description: The variable containing the regular expression (regex) pattern that defines what to search for in the source string. This pattern should follow standard regex rules, allowing the specification of sequences of characters to identify in the source string. +* TargetVariable Type: variable Description: The variable where the search result will be stored. Depending on the context and the pattern used, the result could be the first match found, all matches, or even specific groups within the match. + +### Usage Example + +```javascript +// Direct call with values: + sourceText = "Email: user@example.com and phone: 123-456-7890" + pattern = r"\\b\\d{3}-\\d{3}-\\d{4}\\b" + getRegex(sourceText, pattern, phoneNumber) + + // Call using variables: + sourceText = "Visit our website at https://www.example.com for more information." + regexPattern = r"https?://\\S+" + getRegex(sourceText, regexPattern, foundURL) +``` + +In the first example, a phone number in the format `123-456-7890` is searched in the `sourceText` string and the result is stored in the `phoneNumber` variable. In the second example, a URL is extracted from the `sourceText` string using a regex that identifies URL patterns, and the result is stored in the `foundURL` variable. diff --git a/docs/developer.avapframework.com/appendices_6.md b/docs/developer.avapframework.com/appendices_6.md new file mode 100644 index 0000000..f00fd39 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_6.md @@ -0,0 +1,38 @@ +## getDateTime() + +The `getDateTime()` command retrieves the current date and time, formats it according to a specified format, applies an optional time adjustment, and converts it to a specific time zone before storing the result in a target variable. It is useful for obtaining and manipulating the current date and time in different formats and time zones. + +### Parameters + +* Format Type: var Description: A format string that defines how the resulting date and time should be presented. This string follows the date and time formatting conventions used in Python. Some of the most common symbols include: %Y : Year with four digits (e.g., 2024) %m : Month with two digits (01 to 12) %d : Day of the month with two digits (01 to 31) %H : Hour in 24-hour format (00 to 23) %M : Minutes (00 to 59) %S : Seconds (00 to 59) For example, the format "%Y-%m-%d %H:%M:%S" will present the date and time as 2024-08-25 14:30:00 . It can be a direct value or a variable containing the desired format. +* %Y : Year with four digits (e.g., 2024) +* %m : Month with two digits (01 to 12) +* %d : Day of the month with two digits (01 to 31) +* %H : Hour in 24-hour format (00 to 23) +* %M : Minutes (00 to 59) +* %S : Seconds (00 to 59) +* TimeDelta Type: var Description: An optional value representing a time adjustment (positive or negative) applied to the current date and time before conversion. This value can be provided directly or through a variable and is expressed in seconds. +* TimeZone Type: var Description: The time zone to which the date and time should be converted. This value can be a time zone identifier provided directly or through a variable. Some common time zones include: "UTC" : Coordinated Universal Time "America/New_York" : U.S. Eastern Time (EST/EDT) "America/Los_Angeles" : U.S. Pacific Time (PST/PDT) "Europe/London" : London Time (GMT/BST) "Europe/Madrid" : Madrid Time (CET/CEST) "Asia/Tokyo" : Tokyo Time (JST) "Australia/Sydney" : Sydney Time (AEST/AEDT) You can use any time zone recognized by the pytz library in Python, which includes most time zones worldwide. +* "UTC" : Coordinated Universal Time +* "America/New_York" : U.S. Eastern Time (EST/EDT) +* "America/Los_Angeles" : U.S. Pacific Time (PST/PDT) +* "Europe/London" : London Time (GMT/BST) +* "Europe/Madrid" : Madrid Time (CET/CEST) +* "Asia/Tokyo" : Tokyo Time (JST) +* "Australia/Sydney" : Sydney Time (AEST/AEDT) +* TargetVariable Type: var Description: The variable in which the resulting date and time from the operation will be stored. Unlike the other parameters, this must be a variable and not a direct value. + +### Usage Example + +```javascript +// Direct call with values: + getDateTime('%Y-%m-%d %H:%M:%S', 3600, 'UTC', currentTime) + + // Call using variables: + format = '%Y-%m-%d %H:%M:%S' + adjustment = 3600 + timeZone = 'America/New_York' + getDateTime(format, adjustment, timeZone, currentDateTime) +``` + +In the first example, the current date and time are retrieved, adjusted by 3600 seconds (1 hour), converted to UTC, and stored in the variable `currentTime`. In the second example, variables are used to define the format, time adjustment, and time zone, with the result stored in the `currentDateTime` variable. diff --git a/docs/developer.avapframework.com/appendices_7.md b/docs/developer.avapframework.com/appendices_7.md new file mode 100644 index 0000000..a8f378f --- /dev/null +++ b/docs/developer.avapframework.com/appendices_7.md @@ -0,0 +1,22 @@ +## encodeMD5() + +The `encodeMD5()` command generates an MD5 hash of the provided string and stores the result in a target variable. MD5 is a cryptographic hash function that produces a 128-bit value (32 hexadecimal characters), commonly used to verify data integrity. + +### Parameters + +* SourceVariable Type: var Description: The variable containing the text string to be encoded in MD5. It can be a direct value or a variable storing the input string. +* TargetVariable Type: var Description: The variable in which the resulting MD5 hash will be stored. Unlike the SourceVariable parameter, this must be a variable and not a direct value. + +### Usage Example + +```javascript +// Direct call with values: +encodeMD5('example_string', md5Hash) + +// Call using variables: +text = 'example_string' +hashVariable = 'md5Hash' +encodeMD5(text, hashVariable) +``` + +In the first example, an MD5 hash is generated from the string `'example_string'` and stored in the `md5Hash` variable. In the second example, a variable `text` is used to define the input string and another variable `hashVariable` is used to store the resulting MD5 hash. diff --git a/docs/developer.avapframework.com/appendices_8.md b/docs/developer.avapframework.com/appendices_8.md new file mode 100644 index 0000000..6c5c04a --- /dev/null +++ b/docs/developer.avapframework.com/appendices_8.md @@ -0,0 +1,22 @@ +## encodeSHA256() + +The `encodeSHA256()` command generates a SHA-256 hash of the provided string and stores the result in a target variable. SHA-256 is a cryptographic hash function that produces a 256-bit value (64 hexadecimal characters), offering greater security compared to MD5. + +### Parameters + +* SourceVariable Type: var Description: The variable containing the text string to be encoded in SHA-256. It can be a direct value or a variable storing the input string. +* TargetVariable Type: var Description: The variable in which the resulting SHA-256 hash will be stored. Unlike the SourceVariable parameter, this must be a variable and not a direct value. + +### Usage Example + +```javascript +// Direct call with values: +encodeSHA256('example_string', sha256Hash) + +// Call using variables: +text = 'example_string' +hashVariable = 'sha256Hash' +encodeSHA256(text, hashVariable) +``` + +In the first example, a SHA-256 hash is generated from the string `'example_string'` and stored in the `sha256Hash` variable. In the second example, a variable `text` is used to define the input string, and another variable `hashVariable` is used to store the resulting SHA-256 hash. diff --git a/docs/developer.avapframework.com/appendices_9.md b/docs/developer.avapframework.com/appendices_9.md new file mode 100644 index 0000000..47e7878 --- /dev/null +++ b/docs/developer.avapframework.com/appendices_9.md @@ -0,0 +1,33 @@ +## getQueryParamList() + +The `getQueryParamList()` command extracts the query parameters from the current HTTP request and stores a list of these parameters in a target variable. This is useful for handling and processing query parameters in web applications. + +### Parameters + +* TargetVariable Type: var Description: The variable in which the extracted query parameter list will be stored. This should be a variable where the command's result will be saved. + +### Command Flow + +### Usage Example + +Suppose the HTTP query has the following parameters: `?user=alice&age=30`. + +```javascript +// Define the variable to store the result + queryParamsList = [] + + // Call the command to extract query parameters + getQueryParamList(queryParamsList) + + // Return the list of query parameters via addResult + addResult(queryParamsList) +``` + +Given the query string `?user=alice&age=30`, the `getQueryParamList()` command will generate the following list of parameters: + +```javascript +[ + {"user": "alice"}, + {"age": "30"} +] +``` diff --git a/docs/developer.avapframework.com/avap_gateway_advanced_doc.md b/docs/developer.avapframework.com/avap_gateway_advanced_doc.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/avap_language_server_doc.md b/docs/developer.avapframework.com/avap_language_server_doc.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/avap_virtual_server_doc.md b/docs/developer.avapframework.com/avap_virtual_server_doc.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter10_1.md b/docs/developer.avapframework.com/chapter10_1.md new file mode 100644 index 0000000..76f72b6 --- /dev/null +++ b/docs/developer.avapframework.com/chapter10_1.md @@ -0,0 +1 @@ +The IF-THEN-ELSE statement in AVAP™ allows for decision-making based on specific conditions and executes different blocks of code depending on the outcome of those conditions. Below is a detailed explanation of its syntax and functionality. diff --git a/docs/developer.avapframework.com/chapter10_2.md b/docs/developer.avapframework.com/chapter10_2.md new file mode 100644 index 0000000..3f541c9 --- /dev/null +++ b/docs/developer.avapframework.com/chapter10_2.md @@ -0,0 +1,13 @@ +## 6.1 Syntax of the IF-THEN-ELSE Statement + +The basic syntax of the IF-THEN-ELSE statement in AVAP™ is as follows: + +```javascript +IF(condition, true_value, operator) + // Block of code if the condition is true ELSE + // Block of code if the condition is false END() +``` + +* condition : This is an expression that evaluates to either true or false. +* true_value : This is the value assigned if the condition is true. +* operator : This is the operator used to compare the condition with the true value. diff --git a/docs/developer.avapframework.com/chapter10_3.md b/docs/developer.avapframework.com/chapter10_3.md new file mode 100644 index 0000000..34fa13a --- /dev/null +++ b/docs/developer.avapframework.com/chapter10_3.md @@ -0,0 +1,22 @@ +## 6.2 Functioning of the IF-THEN-ELSE Statement + +The IF-THEN-ELSE statement evaluates the given condition and, if it is true, executes the block of code within the IF(). If the condition is false, it executes the block of code within the ELSE(). + +Below is the description of each part of the IF-THEN-ELSE statement using the provided example: + +```javascript +// IF, ELSE and END Sample Use + addVar(selector,'yes') + if(selector,'yes','=') + addVar(result,1) + else() + addVar(result,0) + end() + addResult(result) +``` + +* The variable selector is initialized with the value 'yes'. +* The statement IF(selector,'yes','=') evaluates whether the value of selector is equal to 'yes'. In this case, the condition is true. +* Inside the IF() block, addVar(result,1) is executed, which assigns the value 1 to the result variable. +* Since the condition of the IF() is true, the code block inside the ELSE() is not executed. +* The statement addResult(result) adds the value of the result variable to the API result. diff --git a/docs/developer.avapframework.com/chapter10_4.md b/docs/developer.avapframework.com/chapter10_4.md new file mode 100644 index 0000000..3d42ec9 --- /dev/null +++ b/docs/developer.avapframework.com/chapter10_4.md @@ -0,0 +1,12 @@ +## 6.3 Result + +The result returned by the API after executing the above code is as follows: + +```javascript +{ + status + , elapsed:0.008270740509033203, result: { result:1 } + } +``` + +This result indicates that the execution was successful (`status:true`) and that the value of `result` is 1. diff --git a/docs/developer.avapframework.com/chapter10_5.md b/docs/developer.avapframework.com/chapter10_5.md new file mode 100644 index 0000000..0d0942b --- /dev/null +++ b/docs/developer.avapframework.com/chapter10_5.md @@ -0,0 +1,3 @@ +## 6.4 Conclusions + +The IF-THEN-ELSE statement in AVAP™ provides an efficient way to make decisions based on specific conditions. Similar to other programming languages, it allows for executing different blocks of code based on the outcome of evaluating a condition. diff --git a/docs/developer.avapframework.com/chapter11_1.md b/docs/developer.avapframework.com/chapter11_1.md new file mode 100644 index 0000000..14730f8 --- /dev/null +++ b/docs/developer.avapframework.com/chapter11_1.md @@ -0,0 +1 @@ +The loop statement in AVAP™ allows you to execute a block of code repeatedly until a specific condition is met. Below is a detailed explanation of its syntax and functionality. diff --git a/docs/developer.avapframework.com/chapter11_2.md b/docs/developer.avapframework.com/chapter11_2.md new file mode 100644 index 0000000..1ed7df8 --- /dev/null +++ b/docs/developer.avapframework.com/chapter11_2.md @@ -0,0 +1,13 @@ +## 7.1 Syntax of the Loop Statement + +The full syntax of the loop statement in AVAP™ is as follows: + +```javascript +startLoop(control, start, end) // Code block to repeat endLoop() +``` + +This syntax consists of three main parts: + +* control : This is the loop control variable used to track the progress of the loop. It is initialized with the starting value of the loop and is incremented with each iteration until it reaches the end value. +* start : This is the starting value of the loop. The loop begins at this value. +* end : This is the ending value of the loop. The loop terminates when the control variable reaches this value. diff --git a/docs/developer.avapframework.com/chapter11_3.md b/docs/developer.avapframework.com/chapter11_3.md new file mode 100644 index 0000000..53192ff --- /dev/null +++ b/docs/developer.avapframework.com/chapter11_3.md @@ -0,0 +1,8 @@ +## 7.2 Functioning of the Loop Statement + +The loop statement in AVAP™ follows this execution process: + +* The control variable control is initialized with the starting value specified in start . +* The loop condition is evaluated: while the value of control is less than or equal to the end value end , the code block within startLoop() is executed. If the value of control exceeds the end value, the loop terminates, and execution continues after endLoop() . +* In each iteration of the loop, the code block within startLoop() is executed, and the control variable control is automatically incremented by one. +* Once the control variable reaches or exceeds the end value end , the loop terminates, and execution continues after endLoop() . diff --git a/docs/developer.avapframework.com/chapter11_4.md b/docs/developer.avapframework.com/chapter11_4.md new file mode 100644 index 0000000..816ade6 --- /dev/null +++ b/docs/developer.avapframework.com/chapter11_4.md @@ -0,0 +1,16 @@ +## 7.3 Example of Use + +Below is an example of using the loop statement in AVAP™, along with a detailed explanation of each part of the code: + +```javascript +// Loop Sample Use + // Initialize the variable 'variable' with the value 5. + addVar(variable,5) + // Start the loop with the control variable 'control', ranging from 1 to 5. + startLoop(control,1,5) + // In each iteration of the loop, assign the current value of 'control' to the variable 'counter'. + addVar(counter,$control) + endLoop() + // Add the final value of 'counter' to the API result. + addResult(counter) +``` diff --git a/docs/developer.avapframework.com/chapter11_5.md b/docs/developer.avapframework.com/chapter11_5.md new file mode 100644 index 0000000..96e8c49 --- /dev/null +++ b/docs/developer.avapframework.com/chapter11_5.md @@ -0,0 +1,14 @@ +## 7.4 Result and Conclusions + +After executing the above code, the result returned by the API is as follows: + +```javascript +{ + status + , elapsed:0.01605510711669922, result: { counter:5 } + } +``` + +This result confirms that the execution was successful (`status:true`) and that the final value of `counter` is 5. + +In summary, the loop statement in AVAP™ provides an efficient way to execute a block of code repeatedly within a specified range. By automating tasks that require repetition, such as processing a list of items or generating sequential numbers, this statement becomes a fundamental tool for programming in AVAP™. diff --git a/docs/developer.avapframework.com/chapter12_1.md b/docs/developer.avapframework.com/chapter12_1.md new file mode 100644 index 0000000..4451dcf --- /dev/null +++ b/docs/developer.avapframework.com/chapter12_1.md @@ -0,0 +1,5 @@ +## Introduction + +The `addParam()` function in AVAP™ is a powerful tool used to add parameters to an API call in the query string. + This parameter is assigned to a variable and acts as a bridge between the API call and the API itself, + allowing smooth and efficient communication between both. diff --git a/docs/developer.avapframework.com/chapter14_1.md b/docs/developer.avapframework.com/chapter14_1.md new file mode 100644 index 0000000..e680400 --- /dev/null +++ b/docs/developer.avapframework.com/chapter14_1.md @@ -0,0 +1,3 @@ +## Introduction + +Functions in AVAP™ are reusable blocks of code that perform a specific task. Just like in Python, functions in AVAP™ allow for code modularization, improved readability, easier maintenance, and code reuse. diff --git a/docs/developer.avapframework.com/chapter14_2.md b/docs/developer.avapframework.com/chapter14_2.md new file mode 100644 index 0000000..50357d8 --- /dev/null +++ b/docs/developer.avapframework.com/chapter14_2.md @@ -0,0 +1,24 @@ +## Function Construction + +In AVAP™, similar to Python, functions are defined using the keyword `def`, followed by the function name and its parameters in parentheses. The function definition ends with a colon (`:`), followed by the block of code that forms the function body, indented with four spaces. + +### Defining a function in AVAP™ + +```javascript +function greet(name){ + return()"Hello, " + name + "!") +} +``` + +### Calling the function + +```javascript +message = greet("World") +addResult(message) +``` + +### Output + +```javascript +Hello, World! +``` diff --git a/docs/developer.avapframework.com/chapter14_3.md b/docs/developer.avapframework.com/chapter14_3.md new file mode 100644 index 0000000..5ba64fe --- /dev/null +++ b/docs/developer.avapframework.com/chapter14_3.md @@ -0,0 +1,6 @@ +## Technical Features + +* Parameters : Functions can accept zero or more parameters that are used as inputs to the function. +* Return Values : Functions can return a value using the return keyword. +* Scope : Functions in AVAP™ have their own scope, meaning that variables defined within a function are only visible within that function unless declared as global variables. +* Code Reusability : Functions allow for encapsulating and reusing blocks of code that perform specific tasks. diff --git a/docs/developer.avapframework.com/chapter14_4.md b/docs/developer.avapframework.com/chapter14_4.md new file mode 100644 index 0000000..7161de1 --- /dev/null +++ b/docs/developer.avapframework.com/chapter14_4.md @@ -0,0 +1,26 @@ +## Practical Example + +Below is a practical example illustrating the definition and invocation of a function in AVAP™: + +### Definition of a Function to Calculate the Area of a Circle + +```javascript +function calculate_circle_area(radius){ + return (3.14 * radius ** 2) +} +``` + +### Calling the Function + +```javascript +circle_radius = 5 +area = calculate_circle_area(circle_radius) +result = "he area of the circle is: %s " % area +addResult(result) +``` + +### Output: + +```javascript +The area of the circle is: 78.5 +``` diff --git a/docs/developer.avapframework.com/chapter14_5.md b/docs/developer.avapframework.com/chapter14_5.md new file mode 100644 index 0000000..74da149 --- /dev/null +++ b/docs/developer.avapframework.com/chapter14_5.md @@ -0,0 +1,3 @@ +## Conclusions + +Functions are a fundamental part of programming in AVAP™, allowing for effective organization and modularization of code. By understanding how to define, construct, and call functions in AVAP™, developers can write clearer, more concise, and maintainable code, facilitating the development and management of applications. diff --git a/docs/developer.avapframework.com/chapter1_1.md b/docs/developer.avapframework.com/chapter1_1.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter1_2.md b/docs/developer.avapframework.com/chapter1_2.md new file mode 100644 index 0000000..8e4712e --- /dev/null +++ b/docs/developer.avapframework.com/chapter1_2.md @@ -0,0 +1,4 @@ +### 1.1 Features of AVAP™ as a Dynamic Language + +AVAP™ is characterized by its dynamic nature, which means it offers various features that allow flexibility and adaptability + in program development. Below, we will detail some of these features: diff --git a/docs/developer.avapframework.com/chapter1_3.md b/docs/developer.avapframework.com/chapter1_3.md new file mode 100644 index 0000000..77ea41f --- /dev/null +++ b/docs/developer.avapframework.com/chapter1_3.md @@ -0,0 +1,8 @@ +In AVAP™, variable typing is dynamic, which means it is not necessary to explicitly declare the type of a variable before + assigning it a value. This allows greater flexibility in data handling and simplifies code writing. + +```javascript +# Example of dynamic typing +x = 10 # x is an integer +x = "Hello" # x is now a string +``` diff --git a/docs/developer.avapframework.com/chapter1_4.md b/docs/developer.avapframework.com/chapter1_4.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter1_5.md b/docs/developer.avapframework.com/chapter1_5.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter1_6.md b/docs/developer.avapframework.com/chapter1_6.md new file mode 100644 index 0000000..2e493cd --- /dev/null +++ b/docs/developer.avapframework.com/chapter1_6.md @@ -0,0 +1,12 @@ +AVAP™ offers a wide range of features that promote flexibility in programming. This includes support for higher-order functions, + dynamic exception handling, and the ability to manipulate objects at runtime, among others. + +```javascript +# Example of a higher-order function +def operation(func, a, b): + return func(a, b) +def add(x, y): + return x + y +result = operation(add, 3, 5) +# The add function is passed as an argument +``` diff --git a/docs/developer.avapframework.com/chapter1_7.md b/docs/developer.avapframework.com/chapter1_7.md new file mode 100644 index 0000000..bb1dcad --- /dev/null +++ b/docs/developer.avapframework.com/chapter1_7.md @@ -0,0 +1,8 @@ +### 1.2 Advantages of AVAP™ as a Dynamic Language + +As a dynamic programming language, AVAP™ offers several advantages, including: + +* Greater flexibility and adaptability in program development. +* Faster writing and execution of code. +* Facilitates experimentation and exploration of solutions. +* Allows for rapid feedback during development. diff --git a/docs/developer.avapframework.com/chapter1_8.md b/docs/developer.avapframework.com/chapter1_8.md new file mode 100644 index 0000000..95b4709 --- /dev/null +++ b/docs/developer.avapframework.com/chapter1_8.md @@ -0,0 +1,5 @@ +### 1.3 Summary + +AVAP™ is a dynamic programming language that offers a wide range of features promoting flexibility, + adaptability, and speed in application development. With its dynamic typing, automatic memory management, + runtime interpreter, and programming flexibility, AVAP™ becomes a powerful and versatile tool for developers. diff --git a/docs/developer.avapframework.com/chapter2_1.md b/docs/developer.avapframework.com/chapter2_1.md new file mode 100644 index 0000000..36d07ee --- /dev/null +++ b/docs/developer.avapframework.com/chapter2_1.md @@ -0,0 +1,6 @@ +## Chapter 2: Notation in AVAP™ + +### Introduction + +Notation in AVAP™ refers to the conventions and rules used to write and format code in the AVAP™ programming language. + Notation is essential to ensure code readability and comprehension, as well as to establish a coherent and consistent syntax across all projects. diff --git a/docs/developer.avapframework.com/chapter2_2.md b/docs/developer.avapframework.com/chapter2_2.md new file mode 100644 index 0000000..570501d --- /dev/null +++ b/docs/developer.avapframework.com/chapter2_2.md @@ -0,0 +1,8 @@ +### General Conventions + +In AVAP™, several general notation conventions are followed, similar to those used in other programming languages like Python. + Some of these conventions include: + +* Indentation : Code is structured through indentation, using white spaces or tabs to indicate the hierarchy and structure of the code. It is recommended to use four spaces for each level of indentation. +* Case Sensitivity : AVAP™ is case-sensitive, meaning that identifiers, variable names, and keywords must be consistently written using the same capitalization format throughout the code. +* Comments : Comments are used to document the code and explain its functionality. Single-line comments begin with the // symbol, while multi-line comments start with /* and end with */ . diff --git a/docs/developer.avapframework.com/chapter2_3.md b/docs/developer.avapframework.com/chapter2_3.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter2_4.md b/docs/developer.avapframework.com/chapter2_4.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter2_5.md b/docs/developer.avapframework.com/chapter2_5.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter2_6.md b/docs/developer.avapframework.com/chapter2_6.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter3_1.md b/docs/developer.avapframework.com/chapter3_1.md new file mode 100644 index 0000000..e074e77 --- /dev/null +++ b/docs/developer.avapframework.com/chapter3_1.md @@ -0,0 +1,3 @@ +## Introduction + +Lexical analysis is the first step in the process of compiling or interpreting a program in AVAP™. It involves breaking down the source code into lexical components or "tokens," which are the smallest units of meaning in the language. These tokens include keywords, identifiers, operators, punctuation symbols, and literals. diff --git a/docs/developer.avapframework.com/chapter3_2.md b/docs/developer.avapframework.com/chapter3_2.md new file mode 100644 index 0000000..e3c5892 --- /dev/null +++ b/docs/developer.avapframework.com/chapter3_2.md @@ -0,0 +1,9 @@ +## Lexical Components in AVAP™ + +The lexical components in AVAP™ are similar to those in other programming languages like Python. Some of the most common lexical components in AVAP™ include: + +* Keywords: These are reserved words that have a special meaning in the language and cannot be used as variable or function names. Examples of keywords in AVAP™ include if , else , for , while , return , among others. +* Identifiers: These are names given to variables, functions, and other elements of the program by the programmer. Identifiers must follow certain formatting rules and cannot match keywords. For example, variable , example_function , result are examples of identifiers in AVAP™. +* Operators: These are symbols used to perform operations in the program. Examples of operators in AVAP™ include + , - , * , / , = , == , != , among others. +* Literals: These represent constant values in the program, such as integers, floating-point numbers, text strings, and boolean values. Examples of literals in AVAP™ include 10 , 3.14 , "text" , True , False , among others. +* Punctuation Symbols: These are special characters used to separate elements of the code and define the structure of the program. Examples of punctuation symbols in AVAP™ include () , {} , [] , , , : , ; , among others. diff --git a/docs/developer.avapframework.com/chapter3_3.md b/docs/developer.avapframework.com/chapter3_3.md new file mode 100644 index 0000000..ac681ce --- /dev/null +++ b/docs/developer.avapframework.com/chapter3_3.md @@ -0,0 +1,7 @@ +## Lexical Analysis Process + +The lexical analysis process in AVAP™ consists of several steps: + +* Scanning: The source code is read sequentially, and the lexical components are identified. Regular expressions are used to recognize patterns corresponding to keywords, identifiers, operators, etc. +* Tokenization: The identified lexical components are converted into tokens, which are objects representing each component with its associated type and value. +* Token Generation: The generated tokens are passed to the next step of the compilation or interpretation process for syntactic and semantic analysis. diff --git a/docs/developer.avapframework.com/chapter3_4.md b/docs/developer.avapframework.com/chapter3_4.md new file mode 100644 index 0000000..8f74210 --- /dev/null +++ b/docs/developer.avapframework.com/chapter3_4.md @@ -0,0 +1,35 @@ +## Keywords + +Keywords in AVAP are reserved words that have specific meanings and cannot be used as identifiers. The keywords in AVAP are: + +* randomString +* ormAI +* functionAI +* stampToDatetime +* getTimeStamp +* getRegex +* getDateTime +* encodeMD5 +* encodeSHA256 +* getQueryParamList +* getListLen +* ormCheckTable +* ormCreateTable +* end +* else +* if +* endLoop +* startLoop +* ormAccessInsert +* ormAccessSelect +* variableToList +* RequestPost +* RequestGet +* addResult +* AddvariableToJSON +* addParam +* variableFromJSON +* itemFromList +* addVar +* function +* return diff --git a/docs/developer.avapframework.com/chapter3_5.md b/docs/developer.avapframework.com/chapter3_5.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter3_6.md b/docs/developer.avapframework.com/chapter3_6.md new file mode 100644 index 0000000..7113830 --- /dev/null +++ b/docs/developer.avapframework.com/chapter3_6.md @@ -0,0 +1,5 @@ +## Conclusions + +Lexical analysis is a crucial step in the compilation or interpretation of a program in AVAP™. By breaking down the source code into tokens, it lays the foundation for subsequent syntactic and semantic analysis, allowing the program to be correctly understood and executed by the interpreter or compiler. + +With a clear understanding of lexical analysis in AVAP™, developers can write clean and structured code, facilitating the software development process in the language. diff --git a/docs/developer.avapframework.com/chapter4_1.md b/docs/developer.avapframework.com/chapter4_1.md new file mode 100644 index 0000000..8057e54 --- /dev/null +++ b/docs/developer.avapframework.com/chapter4_1.md @@ -0,0 +1,3 @@ +## Introduction + +The data model in AVAP™ defines how data is organized and manipulated within the language. Similar to Python, AVAP™ uses a flexible and dynamic data model that allows for working with a wide variety of data types and data structures. diff --git a/docs/developer.avapframework.com/chapter4_2.md b/docs/developer.avapframework.com/chapter4_2.md new file mode 100644 index 0000000..d95ad3d --- /dev/null +++ b/docs/developer.avapframework.com/chapter4_2.md @@ -0,0 +1,12 @@ +## Data Types + +In AVAP™, just like in Python, data types are categories that represent different kinds of values that can be stored and manipulated in a program. Some of the most common data types in AVAP™ include: + +* Integers (int): Represent whole numbers, positive or negative, without a fractional part. +* Floating-point numbers (float): Represent numbers with both integer and fractional parts. +* Strings (str): Represent sequences of Unicode characters. +* Booleans (bool): Represent truth values, either True or False. +* Lists (list): Ordered and mutable collections of elements. +* Tuples (tuple): Ordered and immutable collections of elements. +* Dictionaries (dict): Unordered collections of key-value pairs. +* Sets (set): Unordered collections of unique elements. diff --git a/docs/developer.avapframework.com/chapter4_3.md b/docs/developer.avapframework.com/chapter4_3.md new file mode 100644 index 0000000..71cc587 --- /dev/null +++ b/docs/developer.avapframework.com/chapter4_3.md @@ -0,0 +1,8 @@ +## Data Structures + +In addition to individual data types, AVAP™ provides various data structures that allow for more complex organization and manipulation of data: + +* Lists: Created using square brackets [ ] and can contain any data type, including other lists. +* Tuples: Created using parentheses ( ) and are immutable, meaning they cannot be modified once created. +* Dictionaries: Created using curly braces { } and store key-value pairs, where each key is unique within the dictionary. +* Sets: Created using curly braces { } and contain unique elements, meaning there are no duplicates in a set. diff --git a/docs/developer.avapframework.com/chapter4_4.md b/docs/developer.avapframework.com/chapter4_4.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter4_5.md b/docs/developer.avapframework.com/chapter4_5.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter4_6.md b/docs/developer.avapframework.com/chapter4_6.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_1.md b/docs/developer.avapframework.com/chapter5_1.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_10.md b/docs/developer.avapframework.com/chapter5_10.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_11.md b/docs/developer.avapframework.com/chapter5_11.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_12.md b/docs/developer.avapframework.com/chapter5_12.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_2.md b/docs/developer.avapframework.com/chapter5_2.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_3.md b/docs/developer.avapframework.com/chapter5_3.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_4.md b/docs/developer.avapframework.com/chapter5_4.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_5.md b/docs/developer.avapframework.com/chapter5_5.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_6.md b/docs/developer.avapframework.com/chapter5_6.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_7.md b/docs/developer.avapframework.com/chapter5_7.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_8.md b/docs/developer.avapframework.com/chapter5_8.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter5_9.md b/docs/developer.avapframework.com/chapter5_9.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_1.md b/docs/developer.avapframework.com/chapter6_1.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_10.md b/docs/developer.avapframework.com/chapter6_10.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_2.md b/docs/developer.avapframework.com/chapter6_2.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_3.md b/docs/developer.avapframework.com/chapter6_3.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_4.md b/docs/developer.avapframework.com/chapter6_4.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_5.md b/docs/developer.avapframework.com/chapter6_5.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_6.md b/docs/developer.avapframework.com/chapter6_6.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_7.md b/docs/developer.avapframework.com/chapter6_7.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_8.md b/docs/developer.avapframework.com/chapter6_8.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter6_9.md b/docs/developer.avapframework.com/chapter6_9.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/chapter7_1.md b/docs/developer.avapframework.com/chapter7_1.md new file mode 100644 index 0000000..4463ef3 --- /dev/null +++ b/docs/developer.avapframework.com/chapter7_1.md @@ -0,0 +1,12 @@ +Comments are a fundamental tool in any programming language, as they allow you to document code, make it easier to understand, and help keep it organized. In the AVAP™ programming language, comments are an integral part of the syntax and are used to add additional information to the source code without affecting its execution. + +Comments serve several purposes: + +* Documentation: Comments can be used to explain what specific parts of the code do, which can be helpful for anyone reading or maintaining the code in the future. +* Clarification: They can clarify complex sections of code, making it easier for others (or yourself) to understand the logic and flow of the program. +* Organization: Comments can help organize code by separating different sections or explaining the purpose of various code blocks. +* Debugging: Comments can temporarily disable parts of code during debugging without deleting it, allowing you to test different scenarios. + +In AVAP™, you can use different types of comments to suit your needs. They can be single-line comments or multi-line comments, depending on the level of detail and context required. + +By incorporating comments into your code, you make it more maintainable and easier for others to follow, which is essential for collaborative projects and long-term code management. diff --git a/docs/developer.avapframework.com/chapter7_2.md b/docs/developer.avapframework.com/chapter7_2.md new file mode 100644 index 0000000..c0d8a8b --- /dev/null +++ b/docs/developer.avapframework.com/chapter7_2.md @@ -0,0 +1,10 @@ +## 3.1 Line Comments + +Line comments in AVAP™ are used to add brief annotations or explanations to a specific line of code. These comments begin with the `//` symbol and continue until the end of the line. Everything following `//` is considered a comment and is ignored by the compiler. + +```javascript +// This is a line comment in AVAP™ +int x = 5; // You can also add comments at the end of a line of code +``` + +Line comments are useful for providing quick clarifications about the code and improving its readability. diff --git a/docs/developer.avapframework.com/chapter7_3.md b/docs/developer.avapframework.com/chapter7_3.md new file mode 100644 index 0000000..48f3586 --- /dev/null +++ b/docs/developer.avapframework.com/chapter7_3.md @@ -0,0 +1,9 @@ +## 3.2 Block Comments + +Block comments in AVAP™ are used to add comments that span multiple lines of code. These comments begin with `/*` and end with `*/`. Everything between `/*` and `*/` is considered a comment and is ignored by the compiler. + +```javascript +/* This is a block comment in AVAP™ that spans multiple lines of code. It is used to explain extensive sections of code or to temporarily disable entire blocks of code. */ +``` + +Block comments are ideal for providing detailed explanations about complex sections of code or for temporarily disabling entire blocks of code during debugging. diff --git a/docs/developer.avapframework.com/chapter7_4.md b/docs/developer.avapframework.com/chapter7_4.md new file mode 100644 index 0000000..98400f8 --- /dev/null +++ b/docs/developer.avapframework.com/chapter7_4.md @@ -0,0 +1,15 @@ +## 3.3 Documentation Comments + +AVAP™ also supports documentation comments, which are used to automatically generate documentation from the source code. These comments begin with `///` and are used to describe the functionality of classes, methods, variables, and other elements of the source code. + +```javascript +/// This function adds two integers and returns the result. +/// \param a The first integer. +/// \param b The second integer. +/// \return The sum of the two numbers. +function sum( a, b) { + return(a + b) +} +``` + +Documentation comments are essential for maintaining up-to-date and detailed documentation of the code, which facilitates its understanding and use by other developers. diff --git a/docs/developer.avapframework.com/chapter7_5.md b/docs/developer.avapframework.com/chapter7_5.md new file mode 100644 index 0000000..482bd1b --- /dev/null +++ b/docs/developer.avapframework.com/chapter7_5.md @@ -0,0 +1,8 @@ +## 3.4 Best Practices + +When using comments in AVAP™, it is important to follow some best practices: + +* Use comments moderately and only when necessary to clarify the code. +* Keep comments updated as the code evolves. +* Write clear and concise comments that are easy for other developers to understand. +* Avoid redundant or unnecessary comments that do not provide useful information to the reader. diff --git a/docs/developer.avapframework.com/chapter7_6.md b/docs/developer.avapframework.com/chapter7_6.md new file mode 100644 index 0000000..5374e67 --- /dev/null +++ b/docs/developer.avapframework.com/chapter7_6.md @@ -0,0 +1,5 @@ +## 3.5 Summary + +Comments in AVAP™ are an essential tool for improving the readability and maintainability of source code. + With line comments, block comments, and documentation comments, developers can add explanations, clarifications, + and useful documentation to the code, making it easier to understand and collaborate within development teams. diff --git a/docs/developer.avapframework.com/chapter8_1.md b/docs/developer.avapframework.com/chapter8_1.md new file mode 100644 index 0000000..10949d6 --- /dev/null +++ b/docs/developer.avapframework.com/chapter8_1.md @@ -0,0 +1,4 @@ +## Introduction + +Expressions in AVAP™ are combinations of values, variables, operators, and function calls that can be evaluated to produce a result. + Just like in Python, expressions in AVAP™ can be simple or complex, and they can contain a variety of elements that manipulate and process data. diff --git a/docs/developer.avapframework.com/chapter8_2.md b/docs/developer.avapframework.com/chapter8_2.md new file mode 100644 index 0000000..32143dc --- /dev/null +++ b/docs/developer.avapframework.com/chapter8_2.md @@ -0,0 +1,10 @@ +## Types of Expressions + +In AVAP™, as in Python, there are several types of expressions that can be used to perform different operations and calculations. + Some of the most common types of expressions include: + +* Arithmetic : Perform mathematical operations such as addition, subtraction, multiplication, and division. +* Logical : Evaluate logical conditions and return boolean values, such as True or False. +* Comparative : Compare two values and return a result based on their relationship, such as equality, inequality, greater than, less than, etc. +* Assignment : Assign a value to a variable. +* Function Calls : Invoke functions and methods to perform specific tasks. diff --git a/docs/developer.avapframework.com/chapter8_3.md b/docs/developer.avapframework.com/chapter8_3.md new file mode 100644 index 0000000..ee204b9 --- /dev/null +++ b/docs/developer.avapframework.com/chapter8_3.md @@ -0,0 +1,9 @@ +## Operators + +In AVAP™, as in Python, expressions can include a variety of operators that perform specific operations on data. + Some of the most common operators include: + +* Arithmetic : +, -, *, /, %, etc. +* Logical : and, or, not. +* Comparative : ==, !=, >, <, >=, <=, etc. +* Assignment : =, +=, -=, *=, /=, etc. diff --git a/docs/developer.avapframework.com/chapter8_4.md b/docs/developer.avapframework.com/chapter8_4.md new file mode 100644 index 0000000..d78498c --- /dev/null +++ b/docs/developer.avapframework.com/chapter8_4.md @@ -0,0 +1,25 @@ +## Working with Lists + +Lists are a very versatile data structure in AVAP™ that allows you to store collections of elements of different types. + Expressions in AVAP™ can involve operations and manipulations of lists, such as accessing individual elements, concatenation, searching, deletion, and more. + +```javascript +// Definition of a list +my_list = [1, 2, 3, 4, 5] + +// Accessing individual elements +first_element = my_list[0] // Output: 1 + +// Concatenation of lists +another_list = [6, 7, 8] +combined_list = my_list + another_list // Output: [1, 2, 3, 4, 5, 6, 7, 8] + +// Length of a list +length = len(my_list) // Output: 5 + +// Searching in a list +is_present = 5 in my_list // Output: True + +// Removing elements +my_list.remove(3) // Removes the element 3 from the list +``` diff --git a/docs/developer.avapframework.com/chapter8_5.md b/docs/developer.avapframework.com/chapter8_5.md new file mode 100644 index 0000000..d573f3a --- /dev/null +++ b/docs/developer.avapframework.com/chapter8_5.md @@ -0,0 +1,14 @@ +## Practical Example + +Below is a practical example that illustrates the use of expressions in AVAP™ with lists: + +```javascript +// Definition of a list of numbers +numbers = [1, 2, 3, 4, 5] + +// Calculation of the sum of the elements +total = sum(numbers) // Output: 15 + +// Checking if a number is present in the list +is_present = 6 in numbers // Output: False +``` diff --git a/docs/developer.avapframework.com/chapter8_6.md b/docs/developer.avapframework.com/chapter8_6.md new file mode 100644 index 0000000..b336173 --- /dev/null +++ b/docs/developer.avapframework.com/chapter8_6.md @@ -0,0 +1,5 @@ +## Conclusions + +Expressions in AVAP™ are a fundamental part of programming, allowing for a wide variety of data operations and manipulations. + By understanding the different types of expressions and operators, as well as working with data structures such as lists, + developers can write clear and effective code that meets the program's requirements. diff --git a/docs/developer.avapframework.com/close.md b/docs/developer.avapframework.com/close.md new file mode 100644 index 0000000..7691d07 --- /dev/null +++ b/docs/developer.avapframework.com/close.md @@ -0,0 +1,174 @@ +## ws/orders.py/close + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + "120d29398f8ceae89e707ad1547fa12c" + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Code of the transaction that cancels the order. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', + 'headers': { + '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' + {' '} + \ + + --header{' '} + + '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' +``` + +## Business logic: + +The objective of this service is to permit an administrator close an + order. diff --git a/docs/developer.avapframework.com/comprobar_nick_EN.md b/docs/developer.avapframework.com/comprobar_nick_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/create_ethereum_account.md b/docs/developer.avapframework.com/create_ethereum_account.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d10_gs_developer_token.md b/docs/developer.avapframework.com/d10_gs_developer_token.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d11_gs_msvc_extensions.md b/docs/developer.avapframework.com/d11_gs_msvc_extensions.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d12_gs_collaborative.md b/docs/developer.avapframework.com/d12_gs_collaborative.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d13_gs_cloud.md b/docs/developer.avapframework.com/d13_gs_cloud.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d14_gs_infrastructure_avs.md b/docs/developer.avapframework.com/d14_gs_infrastructure_avs.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d15_gs_avapcli.md b/docs/developer.avapframework.com/d15_gs_avapcli.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d16_gs_avapavs.md b/docs/developer.avapframework.com/d16_gs_avapavs.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d17_gs_samples-hello.md b/docs/developer.avapframework.com/d17_gs_samples-hello.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d17_gs_samples-login.md b/docs/developer.avapframework.com/d17_gs_samples-login.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d18_gs_samples-loop.md b/docs/developer.avapframework.com/d18_gs_samples-loop.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d18_gs_samples-orm-access.md b/docs/developer.avapframework.com/d18_gs_samples-orm-access.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d18_gs_samples-orm-request.md b/docs/developer.avapframework.com/d18_gs_samples-orm-request.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d2_software_downloads.md b/docs/developer.avapframework.com/d2_software_downloads.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d3_gs_avap_id.md b/docs/developer.avapframework.com/d3_gs_avap_id.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d3_gs_avap_vcex.md b/docs/developer.avapframework.com/d3_gs_avap_vcex.md new file mode 100644 index 0000000..cf97b29 --- /dev/null +++ b/docs/developer.avapframework.com/d3_gs_avap_vcex.md @@ -0,0 +1,32 @@ +AVAP API Extensions are powerful tools designed to seamlessly integrate AVAP programming language into Microsoft Visual Studio Code. By leveraging AVAP extensions, developers can efficiently build, test, and manage Virtual APIs within their familiar coding workspace while taking full advantage of the language’s specialized features tailored for API lifecycle management. + +## Create my AVAP ID + +### AVAP API Extensions + +Built for API development, below are the following AVAP API Extensions available: + +This is the base extension that allows you to manage the complete lifecycle of your APIs. To fully carry out the development, management, and publishing operations of an API, you will need to install: + +* AVAP API Version Control +* AVAP API Publisher + +The AVAP API Version Control extension for Visual Studio Code makes it easy to build and manage versions of your API projects in AVAP code. It requires the installation of AVAP Dev Extension for Visual Studio Code. + +AVAP API Version Control is designed to create an API code repository and manage the different versions of your APIs across different deployment environments. It allows developers to maintain a detailed history of changes, manage updates efficiently, and handle multiple API versions simultaneously. With robust version control and continuous integration, AVAP ensures seamless transitions, backward compatibility, and consistent performance across all your API projects. + +### Top Benefits of AVAP API Version Control + +* Efficient Change Management: Tracking every modification made to the APIs with a detailed history of changes, making it easy to roll back to previous versions or review past updates, ensuring smooth transitions between API versions. +* Seamless Multi-Version Handling: Manage and maintain multiple API versions simultaneously, allowing developers to support legacy clients while continuously improving and updating newer versions without disruption. +* Robust Continuous Integration: Integrate version control with automated testing and deployment pipelines, ensuring that updates are thoroughly tested and smoothly integrated into the production environment, reducing the risk of errors and downtime. + +The AVAP API Publisher offers seamless integration with other extensions in the AVAP Dev Extensions family for publishing APIs developed in the AVAP language. It also enables the publishing process for APIs developed in any other technology with an endpoint. It requires the installation of AVAP Dev Extension for Visual Studio Code. + +AVAP API Publisher is designed to streamline the process of publishing and managing APIs within the AVAP ecosystem. It enables developers and businesses to take their APIs from staging to live environments. It handles tasks such as assigning endpoints, managing access control, and setting usage policies. It allows updates and version management while providing analytics and performance monitoring, ensuring that published APIs are secure, scalable, and optimized for integration across various platforms. + +### Top Benefits of AVAP API Publisher + +* API Deployment and Management: It simplifies the entire process of taking APIs live, allowing developers to quickly assign endpoints, configure access controls, and set usage policies with ease. This reduces the time and complexity associated with moving APIs from development to production. +* Enhanced API Version Control and Updates: AVAP API Publisher integrates version control, enabling smooth updates and easy management of multiple API versions. This ensures that updates are applied consistently, minimizing disruptions and maintaining API stability. +* Built-in Analytics and Monitoring: AVAP API Publisher offers analytics and performance tracking, giving you insights into API usage, response times, and overall efficiency. This data allows for better decision-making and continuous optimization of your API offerings. diff --git a/docs/developer.avapframework.com/d4_gs_organizations.md b/docs/developer.avapframework.com/d4_gs_organizations.md new file mode 100644 index 0000000..19f43d5 --- /dev/null +++ b/docs/developer.avapframework.com/d4_gs_organizations.md @@ -0,0 +1,57 @@ +## Getting Started with AVAP Organizations + +### AVAP Organizations + +In the AVAP Framework, the Organization entity is essential for managing and developing APIs. It facilitates the administration of resources, teams, and projects, ensuring efficient management and proper control throughout the API lifecycle. This guide provides a detailed overview of how organizations optimize project management, apply security measures, and control project ownership. + +An Organization in the AVAP Framework is a structural unit that groups resources, teams, and projects within the platform. It allows for efficient and secure management of API development projects, as well as task and responsibility allocation. + +* Resource Grouping: API Projects, API Products, and APIs: Manages and organizes various organizational resources within a cohesive unit. +* API Projects, API Products, and APIs: Manages and organizes various organizational resources within a cohesive unit. +* Team Administration: Development Teams: Create and manage teams of developers collaborating on specific projects. +* Development Teams: Create and manage teams of developers collaborating on specific projects. +* Project Management: API Projects: Organizes and manages API development projects within the organization. +* API Projects: Organizes and manages API development projects within the organization. +* Access Control: Permissions and Roles: Defines permissions and roles for users within the organization, ensuring controlled access to resources and projects. +* Permissions and Roles: Defines permissions and roles for users within the organization, ensuring controlled access to resources and projects. + +Definition: The Account Owner is the user who originally created the account in the AVAP Framework. + +Responsibilities: + +Complete control over the account and its resources. +Management of one or more organizations based on the license, membership, and/or deployment type. + +Capabilities of the Account Owner: + +Multiple Organizations: The owner can manage several organizations, facilitating the administration of multiple units within the platform. + +* Account Owner: Full control over the account and ability to manage multiple organizations. +* Organizations: Group resources, teams, and projects. +* Developers: Users assigned to teams and projects within the organization. +* Development Teams: Groups of developers working together on specific projects. +* API Projects: API development projects organized and managed within the organization. +* API Products: Sets of APIs offered as products. +* APIs: Programming interfaces developed and managed within the organization. +* Permissions and Roles: Administrators: Complete management of the organization. Developers: Permissions to develop and manage APIs. Readers: Access to view information. +* Administrators: Complete management of the organization. +* Developers: Permissions to develop and manage APIs. +* Readers: Access to view information. + +* Project Management: Entity Structuring: Managers can create and organize API Projects within the organizational entity, facilitating centralized and orderly management. Resource Assignment: Allows the assignment of developers and development teams to specific projects, optimizing planning and execution. +* Entity Structuring: Managers can create and organize API Projects within the organizational entity, facilitating centralized and orderly management. +* Resource Assignment: Allows the assignment of developers and development teams to specific projects, optimizing planning and execution. +* Security Application: Access Control: Defines and manages permissions and roles to protect the integrity of projects and resources. Development Security: Ensures that only authorized users can access and modify projects, maintaining a secure environment during development and deployment. +* Access Control: Defines and manages permissions and roles to protect the integrity of projects and resources. +* Development Security: Ensures that only authorized users can access and modify projects, maintaining a secure environment during development and deployment. +* Project Ownership Control: Ownership and Management: Ensures proper control of project ownership throughout all stages: development, deployment, and production. Transparency and Auditing: Provides clear tracking of who has access and control over each project. +* Ownership and Management: Ensures proper control of project ownership throughout all stages: development, deployment, and production. +* Transparency and Auditing: Provides clear tracking of who has access and control over each project. + +Create a New Organization (available only in AVAP Cloud Enterprise or AVAP Enterprise versions) + +Action: In the AVAP Cloud Dashboard or through the AVAP Management Console for AVAP Enterprise versions, select Add Organization. +Required Information: Organization Name and Description. +Confirmation: Review the details and confirm the creation. + +For more information related to working with Organizations, visit AVAP Alexandria and connect with the user community at AVAP Communities. diff --git a/docs/developer.avapframework.com/d5_gs_teams.md b/docs/developer.avapframework.com/d5_gs_teams.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d6_gs_ambients.md b/docs/developer.avapframework.com/d6_gs_ambients.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d7_gs_api_products.md b/docs/developer.avapframework.com/d7_gs_api_products.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d8_gs_api_projects.md b/docs/developer.avapframework.com/d8_gs_api_projects.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/d9_gs_my_first_api.md b/docs/developer.avapframework.com/d9_gs_my_first_api.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/download_101cli copy 3.md b/docs/developer.avapframework.com/download_101cli copy 3.md new file mode 100644 index 0000000..cd3ca23 --- /dev/null +++ b/docs/developer.avapframework.com/download_101cli copy 3.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases/tag/prerelease + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.mac.zip diff --git a/docs/developer.avapframework.com/download_101cli.md b/docs/developer.avapframework.com/download_101cli.md new file mode 100644 index 0000000..a0a9d72 --- /dev/null +++ b/docs/developer.avapframework.com/download_101cli.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more.. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/download_github.md b/docs/developer.avapframework.com/download_github.md new file mode 100644 index 0000000..6f5a626 --- /dev/null +++ b/docs/developer.avapframework.com/download_github.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases/ + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/getUSDGRAYcotization.md b/docs/developer.avapframework.com/getUSDGRAYcotization.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/get_blockchain_accounts.md b/docs/developer.avapframework.com/get_blockchain_accounts.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/get_blockchain_networks.md b/docs/developer.avapframework.com/get_blockchain_networks.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/get_comminsioned_users.md b/docs/developer.avapframework.com/get_comminsioned_users.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/get_gasprices.md b/docs/developer.avapframework.com/get_gasprices.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/get_pools.md b/docs/developer.avapframework.com/get_pools.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/get_signature.md b/docs/developer.avapframework.com/get_signature.md new file mode 100644 index 0000000..af486aa --- /dev/null +++ b/docs/developer.avapframework.com/get_signature.md @@ -0,0 +1,156 @@ +This service is used to get the sign of a informed string + +GET: + `URL_BASE + /ws/util.py/get_signature` + +## Receives: + +The string to be signed and the private key to sign the string + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status": true, "signature": + "38779748c3bb130d0d1f8084ad92607d705e88b7", "elapsed": + 0.002902984619140625 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signature:` The signature calculated from the string{' '} +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + url ={' '} + + "http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm" + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' + + } + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm', + 'headers': { + '101ObexApiKey': 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8"); + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + fetch("http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm' + {' '} + \ +``` + +## Business logic: + +With this endpoint it is allowed to calculate the sign from a strign using + a private key. diff --git a/docs/developer.avapframework.com/get_token_info.md b/docs/developer.avapframework.com/get_token_info.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/get_vaulted_transactions.md b/docs/developer.avapframework.com/get_vaulted_transactions.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/github_cli.md b/docs/developer.avapframework.com/github_cli.md new file mode 100644 index 0000000..d47fbdf --- /dev/null +++ b/docs/developer.avapframework.com/github_cli.md @@ -0,0 +1,5 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +https://github.com/101OBeXCorp/101obexcli diff --git a/docs/developer.avapframework.com/how_to_publish.md b/docs/developer.avapframework.com/how_to_publish.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/inter_networks_movement.md b/docs/developer.avapframework.com/inter_networks_movement.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/inter_networks_pool_stake.md b/docs/developer.avapframework.com/inter_networks_pool_stake.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/interfaz_servicios_pagos_EN.md b/docs/developer.avapframework.com/interfaz_servicios_pagos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro1.md b/docs/developer.avapframework.com/intro1.md new file mode 100644 index 0000000..33b9782 --- /dev/null +++ b/docs/developer.avapframework.com/intro1.md @@ -0,0 +1,3 @@ +## Discovering a New Programming Language + +Welcome to the AVAP book, where you will delve into the fascinating world of an innovative and powerful programming language: AVAP™. In these pages, we will explore together the fundamental concepts, syntax, and unique features of AVAP™, and prepare you to master this new language and harness its full potential in your software development projects. diff --git a/docs/developer.avapframework.com/intro10.md b/docs/developer.avapframework.com/intro10.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro11.md b/docs/developer.avapframework.com/intro11.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro12.md b/docs/developer.avapframework.com/intro12.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro13.md b/docs/developer.avapframework.com/intro13.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro14.md b/docs/developer.avapframework.com/intro14.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro2.md b/docs/developer.avapframework.com/intro2.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro3.md b/docs/developer.avapframework.com/intro3.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro4.md b/docs/developer.avapframework.com/intro4.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro5.md b/docs/developer.avapframework.com/intro5.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro6.md b/docs/developer.avapframework.com/intro6.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro7.md b/docs/developer.avapframework.com/intro7.md new file mode 100644 index 0000000..e61c01f --- /dev/null +++ b/docs/developer.avapframework.com/intro7.md @@ -0,0 +1,3 @@ +## 1.1 Virtuality Principle in AVAP + +The principle of virtuality in AVAP™ is based on several key aspects: diff --git a/docs/developer.avapframework.com/intro8.md b/docs/developer.avapframework.com/intro8.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/intro9.md b/docs/developer.avapframework.com/intro9.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/last_order_summary.md b/docs/developer.avapframework.com/last_order_summary.md new file mode 100644 index 0000000..78e2000 --- /dev/null +++ b/docs/developer.avapframework.com/last_order_summary.md @@ -0,0 +1,344 @@ +## ws/orders.py/last_order_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + , + "resultado" + :{' '} + [ + 'status': 'Being sent' + , + 'status_code':{' '} + 4001 + , + 'transaction_code':{' '} + 'a556a5de007fcaa5a00b4a4d56a9d40a' + , + 'order_code':{' '} + 10023 + , + 'date':{' '} + 2021 + -03 + -01 + , + 'client_address': 'Street + without number', + 'establishment_coordinates' + :{' '} + { + 'lat':{' '} + 40 + , + 5431311 + , + 'lng':{' '} + -3 + , + 6302845 + } + , + 'location_gps':{' '} + { + 'lat':{' '} + 40 + , + 5431311 + , + 'lng':{' '} + -3 + , + 6302845 + } + 'delivery_time': ' + 12 + : + 03 + : + 01' + , + 'delivery_type':{' '} + 'delivery', + 'order_products_codes' + : + {' '} + [ + { + "article_id" + : + 35003 + , + "custom" + : + [ + [ + {' '} + + "da9922e8-57a6-4440-97db-0de2a486b323" + + , + {' '} + + "00e9a2cc-60c8-4e98-ac9b-accf15b7373a" + + , + {' '} + + "a6aacb94-8fad-4394-a2f1-e328fcca9c79" + + ] + , + [ + {' '} + + "757ccbe3-d877-485d-ae10-89f0b78c133c" + + ] + ] + } + ] + , + 'purchase_detail': 'Palo + Alto ( Lechuga , Tomate{' '} + , Cebolla{' '} + , Aguacate{' '} + , )' + , + 'order_category_id':{' '} + 'FL013', + 'contact':{' '} + { + "firstName" + : + "Rafa" + , + "lastName" + : + " " + , + "mail" + : + "rafa.ruiz@waynnovate.com" + , + "phone" + : + "643340526" + } + , + 'status_history':{' '} + [ + { + 'new_status':'Being sent' + , + 'new_status_code':{' '} + 4001 + , + 'previous_status': 'Being + picked up', + 'previous_status_code': + 4000 + , + 'status_change_date': ' + 2021 + -02 + -01{' '} + 13 + : + 00.01'{' '} + } + ] + 'delivery_price':{' '} + 1.9 + , + 'delivery_distance':{' '} + 34000.34) + , + ] + "elapsed" + :{' '} + 0.06796097755432129 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Status of the order. `status_code` : Code of the actual status of the order. `transaction_code` : Code of the transaction `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that gives the order. `location_gps:` Coordinates of the direction that receives the delivery. `delivery_time:` Hour of the delivery. `delivery_type:` Type of delivery (to pickup/ to have sent). `order_products_codes:` List of product codes and their options. `purchase_detail:` List of the names of the products with their options. `order_category_id:` Identifier of the establishment that provides the product. `contact:` Contact of the client. `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment that provides the order. +* `status:` Status of the order. +* `status_code` : Code of the actual status of the order. +* `transaction_code` : Code of the transaction +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Address of the client. +* `establishment_coordinates` : Coordinates of the establishment that gives the order. +* `location_gps:` Coordinates of the direction that receives the delivery. +* `delivery_time:` Hour of the delivery. +* `delivery_type:` Type of delivery (to pickup/ to have sent). +* `order_products_codes:` List of product codes and their options. +* `purchase_detail:` List of the names of the products with their options. +* `order_category_id:` Identifier of the establishment that provides the product. +* `contact:` Contact of the client. +* `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Time and date of the change of status. +* `delivery_price:` Price of the delivery. +* `delivery_distance:` Distance between the client and the establishment that provides the order. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', + 'headers': { + '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' + {' '} + \ + + --header{' '} + + '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' +``` + +## Business logic: + +The objective of this service is to retrieve the orders that are in course + and its details. diff --git a/docs/developer.avapframework.com/new.md b/docs/developer.avapframework.com/new.md new file mode 100644 index 0000000..e485291 --- /dev/null +++ b/docs/developer.avapframework.com/new.md @@ -0,0 +1,192 @@ +## ws/orders.py/last_order_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + , + "order_code" + :{' '} + 12034 + "elapsed" + :{' '} + 0.06796097755432129 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `order_code:` Identifier of the order in the system. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": + 40,5431311,\"lng\": -3,6302845 + }&contact=Manuel&order_amount=30 + €&shipping_amount=3,5 €" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": + 40,5431311,"lng": -3,6302845 + }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 + €', + 'headers': { + '101ObexApiKey': 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": + 40,5431311,\"lng\": -3,6302845 + }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 + €", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location -g --request GET{' '} + + 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": + 40,5431311,"lng": -3,6302845 + }&contact=Manuel&order_amount=30 + €&shipping_amount=3,5 €' + {' '} + \ + + --header{' '} + + '101ObexApiKey: WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' +``` + +## Business logic: + +The objective of this service is to add an order. diff --git a/docs/developer.avapframework.com/order_history_summary.md b/docs/developer.avapframework.com/order_history_summary.md new file mode 100644 index 0000000..1d2de2c --- /dev/null +++ b/docs/developer.avapframework.com/order_history_summary.md @@ -0,0 +1,380 @@ +## ws/orders.py/order_history_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns if user is RIDER profile: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + { + "status" + :{' '} + "Completed" + , + "delivery_time" + :{' '} + "13:12:55" + , + "delivery_type" + :{' '} + "sent" + , + "order_category_id" + :{' '} + "FL016" + , + "delivery_distance" + :{' '} + 6987 + , + "status_code" + :{' '} + 1 + , + "order_products_codes" + :{' '} + + "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n + {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n }\n]" + + , + {' '} + "establishment_coordinates" + :{' '} + { + "latitude" + :{' '} + 40.630568688062624 + , + "longitude" + :{' '} + -3.585006931371174 + } + , + "location_gps" + :{' '} + + "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n + \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n + \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n + }\n}" + + , + "delivery_price" + :{' '} + "1,90 €" + , + "contact" + :{' '} + + "{\n \"firstName\": \"Rafael\",\n \"Surname\": \"Surname1 + Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": + \"643340526\"\n}" + + , + "purchase_detail" + :{' '} + + "Tortilla soup\nTortilla soup\nTortilla soup\nTortilla soup\n" + + , + "order_code" + :{' '} + 101033 + , + "date" + :{' '} + "18/08/2021 05:17:56" + , + "transaction_code" + :{' '} + "988569e4f38717f35e0fa5c256fe466b" + , + "status_history" + :{' '} + [ + { + "previous_status_code" + :{' '} + 12 + , + "status_change_date" + :{' '} + "2021-08-18 12:17:57" + , + "new_status" + :{' '} + "Sent to restaurant" + , + "new_status_code" + :{' '} + 0 + , + "previous_status" + :{' '} + "Nuevo pedido" + } + , + { + "previous_status_code" + :{' '} + 0 + , + "status_change_date" + :{' '} + "2021-08-18 12:18:51" + , + "new_status" + :{' '} + "Being picked up" + , + "new_status_code" + :{' '} + 11 + , + "previous_status" + :{' '} + "Sent to restaurant" + } + , + { + "previous_status_code" + :{' '} + 11 + , + "status_change_date" + :{' '} + "2021-08-18 12:19:57" + , + "new_status" + :{' '} + "In delivey" + , + "new_status_code" + :{' '} + 10 + , + "previous_status" + :{' '} + "Being picked up" + } + , + { + "previous_status_code" + :{' '} + 10 + , + "status_change_date" + :{' '} + "2021-08-18 12:20:37" + , + "new_status" + :{' '} + "Completed" + , + "new_status_code" + :{' '} + 1 + , + "previous_status" + :{' '} + "In delivey" + } + ] + , + "client_address" + :{' '} + + "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" + + } + , + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current state of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that does the order. `location_gps:` Coordinates of the company direction. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact. `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment. +* `status:` Current status of the order. +* `status_code` : Code of the current state of the order. +* `transaction_code` : Code of the transaction. +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Address of the client. +* `establishment_coordinates` : Coordinates of the establishment that does the order. +* `location_gps:` Coordinates of the company direction. +* `delivery_time:` Hour established for the delivery. +* `delivery_type:` Type of delivery (pick up/ sent) +* `order_products_codes:` List of code products and its options. +* `purchase_detail:` List of product names with its options. +* `order_category_id:` Identifier of the establishment that provides the order. +* `contact:` Client contact. +* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Hour and time of the status change. +* `delivery_price:` Price of the delivery. +* `delivery_distance:` Distance between the client and the establishment. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', + 'headers': { + '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' + {' '} + \ + + --header{' '} + + '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' +``` + +## Business logic: + +The objective of this service is to retrieve the completed requests of the + riders. diff --git a/docs/developer.avapframework.com/origenes_de_fondos_EN.md b/docs/developer.avapframework.com/origenes_de_fondos_EN.md new file mode 100644 index 0000000..b9de1d9 --- /dev/null +++ b/docs/developer.avapframework.com/origenes_de_fondos_EN.md @@ -0,0 +1,166 @@ +## Service identifier + +SER.INT.ORI.AVA.001 MANAGEMENT OF OWN FUNDS RESOURCES. + +## Description + +This service allows managing the funds sources of a given user. It + implements the operations of listing, creation, deletion, confirmation, + change of default wallet and reordering on the sources of funds of said + user. + +## Endpoints + +* Preproduction {' '} ` https://avanquia-prews.pademobile.com/ws/originsdefondos.py/gestor_origins_propios ` +* Production {' '} ` https://appws.avanquia.com/ws/originsdefondos.py/gestor_origins_propios ` + +## Published operations + +This service allows to execute the following operations on funds sources: + +## Parameters + +All parameters are sent in the call's querystring , so{' '} + percentage encoding for URIs (aka{' '} + URL encoding ) must be applied. + +* Parameters, answers and exceptions common to all operations Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 +* Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 + +* Common answers {' '} Depending on the result of the call, this service can return two different JSON : In case of success +* In case of success + +### Where + +`operation_result` will be a JSON formed by the fields that the + service returns according to the operation executed. In the following + sections the content of this space will be specified for each operation. + +* Parameters, answers and specific exceptions for each operation List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A +* List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A +* Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A + +* Specific answer {' '} Each source of funds in the origins list is represented by a JSON with the following structure: + +### Where: + +* balance_fmt : Formatted balance, with thousands / millions division, decimals and currency symbol. +* balance : Available balance of the funds source. +* real_balance : Total balance of the funds source, that is, the available balance plus all the held balance. +* withholdings : Specifies whether the funds source has associated balance holds. +* retained_balances : If the funds source has associated balance holds, each item in this list will store both the amount of the hold and the hold ID. +* image : Image associated with the funds source. +* class : Indicates the type of funds source. +* authorized : It allows to know if they are possible to operate with the source of funds or not. +* permit_errase : Each funds source, depending on its configuration, may or may not be deleted by the user. +* id : Funds source ID.{' '} Note : This field has the following range of values: [1 - 2,147,483,647]. +* permit_various : Specifies whether multiple funds source of the same type are allowed to exist at the same time. +* currency_id_currencies : ID of the currency with which it works at the funds source. +* type: Funds source type ID. +* permit_income : The funds source may or may not admit income. +* permit_charges : The funds source may or may not admit charges. +* name : Funds source name. +* base_class : The class of a funds source defines its nature (card, local source of funds…). +* pending_of_revision : Indicates whether or not the origin is to be reviewed by an administrator or operator. + +Each element of the list list_of_withholdings will have the + following structure: + +The fields{' '} + + fmt_balance, _fmt_compact_balance, balance, actual_balance, and + held_balances + {' '} + are returned as long as the balance of the source of funds is known. For + example, for credit cards no information regarding the balance is + returned. + +Each element of the creators list is a JSON that defines a type + of source of funds: + +* Specific exceptions Does not send specific exceptions +* Funds source creation {' '} The parameter command acquires the value{' '} crear . +* Specific parameters Parameters Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Ensures that the user has permissions on the type of funds source to create N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A anioexpiracion Yes for card-type origins Numeric, YYYY Card expiration year N/A mesexpiracion Yes for card-type origins Numeric, MM Card expiration month N/A cardnumber Yes for card-type origins Numeric Card number N/A validationcode Yes for card-type origin Numeric Card validation code N/A name Yes Alphabetic Name of the new funds source N/A + +* Specific answer + +Returns the ID of the source of funds created on the call. + +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The user does not have permissions to create a source of the selected type The origin_id source_id_or_profile is not allowed in the account The source of funds is created only during the registration process The purse is already created One or more key data (for example, card number) provided to create the wallet is already present in another source of funds of the same type It is not possible to create this source of funds without being certified A non-certified user wants to create a risk fund source (for example, credit card) + +* Funds sources errase + +The parameter command acquires the value errase + +* Specific parameter Parameter Obligatory Format Description Default value Examples source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to errase N/A 189, 17673, 9872 template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A 189, 17673, 9872 + +* Answer Empty. +* Specific exceptions Message Cause The origin_id source_id_or_profile it is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile it is not allowed in the account The type of funds source to be deleted does not allow it to be deleted The card could not be deleted: Please contact customer service at the number An attempt has been made to delete a card-type source of funds, but the payment gateway returns an error + +* Activate fund sources {' '} The parameter command acquires the value{' '} confirmed . +* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A amount1 Yes for card-type origins Numeric Decimals (cents) of the first validation charge. Only for card-type origins N/A amount2 Yes for card-type origins Numeric Decimals (cents) of the second validation charge. Only for card-type origins N/A + +* Specific answer + +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation Incorrect data in the card confirmation, please try again The data provided to confirm a card-type origin is incorrect Attempts to confirm the card passed The limit of attempts to confirm a card origin has been exceeded + +* Change funds source defaults + +The parameter command acquires de value{' '} + change_by_defect . + +* Specific paramters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A + +* Specific answer Empty. +* Specific exception Message Cause The origin_id source_id_or_profile is not allowed in the account The indicated source of funds source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile is not allowed in the account Due to backward compatibility with types of sources of old funds. + +* Reorder Fund Sources {' '} The parameter command acquires value reorder . +* Specific parameters Parameter Obligatory Format Description Default value new_order Yes Alphanumeric. New order separated by commas New order of user origins N/A + +* Specific answer Empty. +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account Some of the sources of funds in the list does not exist or does not belong to the user who performs the operation + +* Movements of funds sources {' '} The parameter command acquires the value{' '} movements . +* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes Numeric Funds source from which the information is required N/A date_desde No IS0 8601 Start date of the movement list N/A date_hasta No IS0 8601 End date of the movement list N/A pagina No Numeric Page to start from 1 limite No Numeric Number of results per page 10 + +* Specific answer + +### Where: + +The field movements will return a list of JSON. Each of these + JSON will have the following content: + +### Where: + +* transaction_code : Transaction code +* concept : Transaction object. +* date : Date on which the movement is made. +* amount : Amount of movement. Includes commissions. +* balance_disponible : Available balance at the source of funds that originates the movement. +* real_balance : Actual balance of the source of funds that originates the movement.. +* rfc : RFC of the account that originates the movement. +* business_name : The business social reason. It corresponds to the name associated with it ( name parameter informed in the call to the registration service). +* transaction_status : Status of the transaction associated with the movement. See table Annex 1 in section{' '} Annex , line{' '} estados de transacciones . +* currency_id : Identifier of the currency in which the movement is made. +* account_id_origin : Unique identifier of the source account. +* account_id_destination : Unique identifier of the target account. +* origin_id_origin : Unique identifier of the source of funds with which the movement originates. +* origin_id_destination : Unique identifier of the source of funds that receives the amount of the operation. +* error_id : Identifier of the error that caused the operation to abort. OPTIONAL . +* exception : Detail of the error that caused the operation to abort. OPTIONAL . +* channel_id : Channel through which the movement was made.. +* Specific exceptions Message Cause The origin_id source_id_or_profile does not exist The source of funds indicated in source_id_or_profile {' '} does not exist {' '} Table 2.b.17 : List of specific exceptions for the operation movements . +* Business logic: {' '} This section details some particularities related to this service that it is advisable to take into account.{' '} Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. +* Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. +* If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. +* The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). +* You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. +* Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. +* All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. +* If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. + +This section details, for each environment, all the information necessary + to exploit the previously documented services. + +Additionally, there is a test user already created, which can be used to + exploit the services described in this documentation. diff --git a/docs/developer.avapframework.com/repetir_transaccion_EN.md b/docs/developer.avapframework.com/repetir_transaccion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/rider_order_management.md b/docs/developer.avapframework.com/rider_order_management.md new file mode 100644 index 0000000..7d37d0b --- /dev/null +++ b/docs/developer.avapframework.com/rider_order_management.md @@ -0,0 +1,404 @@ +## ws/orders.py/rider_order_management + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Accept + +Permits a rider accept an entering order. + +## Pick Up + +Marks the status of the delivery in the order. + +## Nearby + +Marks the status of how close the rider is to the client. + +## Delivered + +Marks a delivered order. + +## Deny + +Denies the entering order. + +## Assign Order + +Permits to assign a specific order to a rider. + +## Returns if user is RIDER profile: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + { + "status" + :{' '} + "Completed" + , + "delivery_time" + :{' '} + "13:12:55" + , + "delivery_type" + :{' '} + "Shipment" + , + "order_category_id" + :{' '} + "FL016" + , + "delivery_distance" + :{' '} + 6987 + , + "status_code" + :{' '} + 1 + , + "order_products_codes" + :{' '} + + "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n + {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n }\n]" + + , + {' '} + "establishment_coordinates" + :{' '} + { + "latitude" + :{' '} + 40.630568688062624 + , + "longitude" + :{' '} + -3.585006931371174 + } + , + "location_gps" + :{' '} + + "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n + \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n + \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n + }\n}" + + , + "delivery_price" + :{' '} + "1,90 €" + , + "contact" + :{' '} + + "{\n \"firstName\": \"Rafael\",\n \"lastName\": \"Surname1 + Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": + \"643340526\"\n}" + + , + "purchase_detail" + :{' '} + + "Tortilla Soup\nTortilla Soup\nTortilla Soup\nTortilla Soup\n" + + , + "order_code" + :{' '} + 101033 + , + "date" + :{' '} + "18/08/2021 05:17:56" + , + "transaction_code" + :{' '} + "988569e4f38717f35e0fa5c256fe466b" + , + "status_history" + :{' '} + [ + { + "previous_status_code" + :{' '} + 12 + , + "status_change_date" + :{' '} + "2021-08-18 12:17:57" + , + "new_status" + :{' '} + "Sent to the restaurant" + , + "new_status_code" + :{' '} + 0 + , + "previous_status" + :{' '} + "New order" + } + , + { + "previous_status_code" + :{' '} + 0 + , + "status_change_date" + :{' '} + "2021-08-18 12:18:51" + , + "new_status" + :{' '} + "Being picked up" + , + "new_status_code" + :{' '} + 11 + , + "previous_status" + :{' '} + "Sent to the restaurant" + } + , + { + "previous_status_code" + :{' '} + 11 + , + "status_change_date" + :{' '} + "2021-08-18 12:19:57" + , + "new_status" + :{' '} + "Being sent" + , + "new_status_code" + :{' '} + 10 + , + "previous_status" + :{' '} + "Being picked up" + } + , + { + "previous_status_code" + :{' '} + 10 + , + "status_change_date" + :{' '} + "2021-08-18 12:20:37" + , + "new_status" + :{' '} + "Completed" + , + "new_status_code" + :{' '} + 1 + , + "previous_status" + :{' '} + "Being sent" + } + ] + , + "client_address" + :{' '} + + "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" + + } + , + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current status of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Direction of the client. `establishment_coordinates` : Coordinates of the establishment that provides the order. `location_gps:` Coordinates of the direction of the delivery place. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery `delivery_distance:` Distance between the client and the establishment. +* `status:` Current status of the order. +* `status_code` : Code of the current status of the order. +* `transaction_code` : Code of the transaction. +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Direction of the client. +* `establishment_coordinates` : Coordinates of the establishment that provides the order. +* `location_gps:` Coordinates of the direction of the delivery place. +* `delivery_time:` Hour established for the delivery. +* `delivery_type:` Type of delivery (pick up/ sent) +* `order_products_codes:` List of code products and its options. +* `purchase_detail:` List of product names with its options. +* `order_category_id:` Identifier of the establishment that provides the order. +* `contact:` Client contact +* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Hour and time of the status change. +* `delivery_price:` Price of the delivery +* `delivery_distance:` Distance between the client and the establishment. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', + 'headers': { + '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' + {' '} + \ + + --header{' '} + + '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' +``` + +## Business logic: + +The purpose of this service is to manage the assignments and statuses of a + registered order. diff --git a/docs/developer.avapframework.com/set_blockchain_accout_selected.md b/docs/developer.avapframework.com/set_blockchain_accout_selected.md new file mode 100644 index 0000000..1de26fa --- /dev/null +++ b/docs/developer.avapframework.com/set_blockchain_accout_selected.md @@ -0,0 +1,176 @@ +## ws/users.py/set_blockchain_accounts + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "message" + :{' '} + + "BlockChain Account for User 95 Set to 23" + + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + "elapsed" + :{' '} + 0.778839111328125 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `message` : Mensaje de confirmación. +* `codtran` : Transaction code. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&network_id=23', + 'headers': { + '101ObexApiKey': 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "KcM6Vr7EfNnKScEi00jdritBzNjWAOkz"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23' + {' '} + \ + + --header{' '} + + '101ObexApiKey: KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' +``` + +## Business logic: + +This service aims to select one of the user's blokchain accounts as + active by default. diff --git a/docs/developer.avapframework.com/set_blokchain_network.md b/docs/developer.avapframework.com/set_blokchain_network.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/spei_EN.md b/docs/developer.avapframework.com/spei_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/unvault.md b/docs/developer.avapframework.com/unvault.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/vault.md b/docs/developer.avapframework.com/vault.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/vs_api_completion.md b/docs/developer.avapframework.com/vs_api_completion.md new file mode 100644 index 0000000..587e23c --- /dev/null +++ b/docs/developer.avapframework.com/vs_api_completion.md @@ -0,0 +1,24 @@ +This extension is intended to help you to use 101OBeX APIs + +## Features + +The completion is intended to use with python language. + +## Requirements + +For the extension to work, you must have configured your access to the + 101OBeX API through 101obexcli. + +## Release Notes + +This extension has the purpose of facilitating the developer, the + management of permissions, organizations and development teams, showing + him at all times, the organizations to which he has access, the + development teams to which he belongs and the APIs that he is authorized + to consume. + +### 0.0.1 + +Initial version, advisory only. + +* https://github.com/101OBeXCorp/101obex-api-completion diff --git a/docs/developer.avapframework.com/vs_api_extension.md b/docs/developer.avapframework.com/vs_api_extension.md new file mode 100644 index 0000000..672d286 --- /dev/null +++ b/docs/developer.avapframework.com/vs_api_extension.md @@ -0,0 +1,24 @@ +This extension is intended to help you to use 101OBeX APIs + +## Features + + + +## Requirements + +For the extension to work, you must have configured your access to the + 101OBeX API through 101obexcli. + +## Release Notes + +This extension has the purpose of facilitating the developer, the + management of permissions, organizations and development teams, showing + him at all times, the organizations to which he has access, the + development teams to which he belongs and the APIs that he is authorized + to consume. + +### 0.0.1 + +Initial version, advisory only. + +* https://github.com/101OBeXCorp/101obex-api-extension From 0113b32f8a13830b6958171173311f927522f80f Mon Sep 17 00:00:00 2001 From: rafa-ruiz Date: Wed, 4 Mar 2026 18:31:50 -0800 Subject: [PATCH 7/9] docs(core): add official AVAP documentation in Markdown (ii) --- .../0_Accesos_EN_Accesos_EN.md | 155 --- ...N_Administrar_solicitudes_KYC_(POST)_EN.md | 0 ...uarios_a_la_comunidad_de_un_afiliado_EN.md | 0 .../0_Alta_Admin_EN_Alta_Admin_EN.md | 0 ...tudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md | 0 .../0_Chat_Operador_EN_Chat_Operador_EN.md | 0 .../0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md | 380 ------ .../0_Communities_EN_Communities_EN.md | 17 - .../0_Comprar_Comprar_EN.md | 0 ...probar_el_importe_de_una_transaccion_EN.md | 150 --- ...nfirmar_Ingreso_EN_Confirmar_Ingreso_EN.md | 0 ..._EN_Consultar_Saldo_Monedero_Prepago_EN.md | 0 ...e_Puntos_EN_Crear_Programa_de_Puntos_EN.md | 0 ...0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md | 0 ...X_Exchange_EN_Currencies_FX_Exchange_EN.md | 34 - ...board_Afiliado_EN_Dashboard_Afiliado_EN.md | 0 .../0_Datos_cuentas_EN_Datos_cuenta_EN.md | 0 ...sactivacion_de_una_cuenta_de_usuario_EN.md | 0 ...les_EN_Desplegar_condiciones_legales_EN.md | 0 ...ucion_desde_afiliado_o_administrador_EN.md | 0 ...atos_usuario_EN_Editar_datos_usuario_EN.md | 0 .../0_Entreorigenes_EN_Entreorigenes_EN.md | 0 ...ario_EN_Enviar_donacion_a_un_usuario_EN.md | 0 ...torico_de_Confirmaciones_de_Ingresos_EN.md | 0 .../0_close_close.md | 174 --- ...ad_101cli_copy_3_download_101cli copy 3.md | 26 - .../10_get_signature_get_signature.md | 156 --- ...TED_KeyBindings_GET_STARTED_KeyBindings.md | 552 -------- ..._and_tricks_GET_STARTED_Tips_and_tricks.md | 933 ------------- .../13_get_token_info_get_token_info.md | 0 ...d_transactions_get_vaulted_transactions.md | 0 ...tUSDGRAYcotization_getUSDGRAYcotization.md | 0 ...T_EN_Administrar_solicitudes_KYC_GET_EN.md | 0 ...EN_Agregar_usuarios_a_la_lista_negra_EN.md | 0 ...o_EN_Autorizar_carga_masiva_de_saldo_EN.md | 0 .../1_Chat_prebind_EN_Chat_prebind_EN.md | 0 .../1_Check_Session_EN_Check_Session_EN.md | 0 ...ultar_Solucion_EN_Consultar_Solucion_EN.md | 0 .../1_Crear_Solucion_EN_Crear_Solucion_EN.md | 0 ...e_Puntos_EN_Datos_Programa_de_Puntos_EN.md | 0 ..._EN_Desplegar_preguntas_de_seguridad_EN.md | 0 .../1_Enviar_SMS_EN_Enviar_SMS_EN.md | 0 ...EN_Historico_de_Ingresos_Tiempo_Aire_EN.md | 0 ...del_usuario_EN_actividad_del_usuario_EN.md | 0 ..._modificacion_alta_baja_modificacion_EN.md | 34 - .../1_comprobar_nick_EN_comprobar_nick_EN.md | 0 .../1_download_101cli_download_101cli.md | 26 - .../29_Facturation_Facturation_System_EN.md | 78 -- ...tos_EN_Actualizar_Programa_de_Puntos_EN.md | 0 .../2_Add_Ons_EN_Add_Ons_EN.md | 48 - ...rizar_Solucion_EN_Autorizar_Solucion_EN.md | 0 .../2_Chat_Usuario_EN_Chat_Usuario_EN.md | 0 ...EN_Consultar_usuarios_de_la_solucion_EN.md | 0 ...thereum_account_create_ethereum_account.md | 0 ...por_email_EN_Enviar_Ticket_por_email_EN.md | 0 .../2_download_github_download_github.md | 26 - ...kchain_accounts_get_blockchain_accounts.md | 0 .../31_github_github_cli.md | 5 - .../32_indice_Indice de Servicios_EN.md | 17 - ...ice_Indice_de_Servicios_Documentados_EN.md | 17 - .../32_indice_Indice_de_Servicios_OLD_EN.md | 17 - .../33_informe_Informe_Consejo_EN.md | 0 ...3_informe_Informe_afiliados_con_tipo_EN.md | 0 .../33_informe_Informe_altas_EN.md | 0 .../33_informe_Informe_cuadro_de_mando_EN.md | 0 ..._informe_Informe_listado_de_usuarios_EN.md | 0 .../33_informe_Informe_numero_altas_EN.md | 0 ...informe_Informe_numero_transacciones_EN.md | 0 .../33_informe_Informe_operaciones_EN.md | 199 --- .../33_informe_Informe_transacciones_EN.md | 0 .../34_Ingresar_Ingresar_Prepago_EN.md | 0 ...r_Ingreso_de_fondos_para_tiempo_aire_EN.md | 0 .../35_inter_inter_networks_movement.md | 0 .../35_inter_inter_networks_pool_stake.md | 0 .../35_inter_interfaz_servicios_pagos_EN.md | 0 .../36_last_last_order_summary.md | 344 ----- ...Leer_Leer_notificaciones_del_usuario_EN.md | 0 ...er_Leer_una_notificacion_del_usuario_EN.md | 0 ...quidacion_Liquidaciones_de_Afiliados_EN.md | 0 ...a general de servicios sin catalogar_EN.md | 1 - ...ta_Listado_de_comisiones_de_afiliado_EN.md | 0 .../39_lista_Listado_de_divisas_EN.md | 215 --- .../39_lista_Listado_de_movimientos_EN.md | 0 ...ta_Listado_de_movimientos_granemisor_EN.md | 165 --- .../39_lista_Listado_de_solicitudes_KYC_EN.md | 0 ...lista_Listado_de_usuarios_bloqueados_EN.md | 0 ...a_Listado_de_usuarios_en_lista_negra_EN.md | 0 .../39_lista_Listar_Programa_de_Puntos_EN.md | 0 .../39_lista_Listar_Soluciones_EN.md | 0 ...star_Usuarios_del_Programa_de_Puntos_EN.md | 0 .../3_Currencies_And_Fx_Exchange.md | 6 +- ...3_Envio_de_dinero_EN_Envio_de_dinero_EN.md | 0 ...kchain_networks_get_blockchain_networks.md | 0 .../40_logout_Logout_Services_EN.md | 0 .../40_logout_Logs_del_sistema_EN.md | 0 .../41_loyalty_Loyalty_Points_Exchange_EN.md | 29 - .../42_Marketplace_Marketplace_EN.md | 18 - .../developer.avapframework.com/43_new_new.md | 192 --- ...ificaciones_no_leidas_por_el_usuario_EN.md | 0 ...btener_Obtener_Afiliados_del_sistema_EN.md | 178 --- ..._Obtener_Obtener_Campos_Alta_Cliente_EN.md | 0 .../45_Obtener_Obtener_Campos_Nivel_KYC_EN.md | 0 ..._Obtener_Obtener_Operadores_del_pais_EN.md | 150 --- .../45_Obtener_Obtener_Paises_Activos_EN.md | 225 ---- ..._Obtener_Obtener_Perfiles_de_Usuario_EN.md | 163 --- ..._Obtener_Obtener_Provincias_del_pais_EN.md | 150 --- .../45_Obtener_Obtener_Shake_4_EN.md | 0 .../45_Obtener_Obtener_Shake_v2_3_EN.md | 0 .../45_Obtener_Obtener_Shake_v2_EN.md | 0 .../45_Obtener_Obtener_Shakes_EN.md | 0 ...tener_caracteristicas_de_un_servicio_EN.md | 164 --- .../45_Obtener_Obtener_datos_usuario_EN.md | 0 ...Obtener_imagen_del_perfil_de_usuario_EN.md | 0 .../45_Obtener_Obtener_info_usuario_EN.md | 173 --- ...reguntas_de_seguridad_del_usuario_EN(1).md | 151 --- ...r_preguntas_de_seguridad_del_usuario_EN.md | 0 ...er_todos_los_datos_de_la_transaccion_EN.md | 330 ----- .../46_Operaciones_Operaciones_EN.md | 0 .../47_Odern_Orden_de_cargo_EN.md | 0 .../47_Odern_order_history_summary.md | 380 ------ .../48_origenes_origenes_de_fondos_EN.md | 166 --- .../49_overview_OVERVIEW.md | 58 - .../4_Anexo_EN_Anexo_EN.md | 18 - ...onado_EN_Envio_de_dinero_Impersonado_EN.md | 0 ...mminsioned_users_get_comminsioned_users.md | 0 .../50_pago_Pago_diferido_EN.md | 0 .../51_Plans_Plans_Wallet_EN.md | 16 - ...s_Precios_de_los_distintos_servicios_EN.md | 197 --- .../53_Procesar_Procesar_SMS_EN.md | 0 ...eactivacion_de_una_cuenta_de_usuario_EN.md | 0 .../55_Recarga_Recarga_de_dinero_EN.md | 0 ...56_rechazar_Rechazar_solicitudes_KYC_EN.md | 0 ...eenviar_Reenviar_el_OTP_para_el_alta_EN.md | 0 ...rar_Regenerar_contrasena_del_usuario_EN.md | 0 ...Registrar_Registrar_Monedero_Prepago_EN.md | 0 ...ero_masiva_EN_Envio_de_dinero_masiva_EN.md | 0 .../60_Remesa_Remesa_dirigida_EN.md | 0 .../62_repetir_repetir_transaccion_EN.md | 0 ...sumen_de_las_comisiones_del_afiliado_EN.md | 0 .../64_Retirar_Retirar_EN.md | 0 .../64_Retirar_Retirar_Prepago_EN.md | 0 .../64_Retirar_Retirar_a_Banco_EN.md | 0 .../64_Retirar_Retirar_a_Tarjeta_EN.md | 0 .../64_Retirar_Retiro_en_cajero_EN.md | 0 .../65_rider_rider_order_management.md | 404 ------ .../66_Saldo_Saldo_Usuario_a_Fecha_EN.md | 0 .../66_Saldo_Saldo_de_la_cuenta_EN.md | 0 .../68_servicio_Servicio_Tiempo_Aire_EN.md | 0 ...rvicio_Servicio_de_Alta_de_Afiliados_EN.md | 0 .../68_servicio_Servicio_de_Firma_EN.md | 230 ---- ...o_de_cambiar_el_perfil_de_un_usuario_EN.md | 0 ...o_de_configuracion_obtener_condicion_EN.md | 0 ...Servicio_de_desbloqueo_de_un_usuario_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Mover)_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Poner)_EN.md | 0 ...icio_de_edicion_de_perfiles_(Quitar)_EN.md | 0 ...rvicio_de_edicion_de_perfiles_Copiar_EN.md | 0 ..._Servicio_de_edicion_de_perfiles_GET_EN.md | 0 ...vicio_de_notificaciones_Borrar_Grupo_EN.md | 0 ...cio_Servicio_de_notificaciones_Crear_EN.md | 0 ...rvicio_de_notificaciones_Crear_Grupo_EN.md | 11 - ...vicio_de_notificaciones_Listar_Envia_EN.md | 0 ...vicio_de_notificaciones_Listar_Grupo_EN.md | 0 ...io_de_notificaciones_Modificar_Grupo_EN.md | 0 ...vision_de_origenes_de_fondos_aprobar_EN.md | 0 ...vision_de_origenes_de_fondos_obtener_EN.md | 0 ...ision_de_origenes_de_fondos_rechazar_EN.md | 0 ...t_SETUP_Additional components and tools.md | 51 - .../69_set_SETUP_Enterprise.md | 43 - .../69_set_SETUP_Linux.md | 419 ------ .../69_set_SETUP_MacOS.md | 107 -- .../69_set_SETUP_Network.md | 131 -- .../69_set_SETUP_Overview.md | 119 -- .../69_set_SETUP_RaspberryPi.md | 66 - .../69_set_SETUP_Uninstall.md | 79 -- .../69_set_SETUP_Windows.md | 119 -- .../69_set_set_blockchain_accout_selected.md | 176 --- .../69_set_set_blokchain_network.md | 0 ...el_Transaction_EN_Cancel_Transaction_EN.md | 0 ...6_Envio_de_regalo_EN_Envio_de_regalo_EN.md | 0 ...icitar_Solicitar_subida_de_nivel_KYC_EN.md | 0 .../70_solicitar_Solicitud_de_dinero_EN.md | 0 ...URCE_SOURCE_CONTROL_CollaborateOnGitHub.md | 371 ------ .../71_SOURCE_SOURCE_CONTROL_FAQ.md | 153 --- ...SOURCE_SOURCE_CONTROL_IntroductionToGit.md | 213 --- .../71_SOURCE_SOURCE_CONTROL_Overview.md | 345 ----- .../72_spei_spei_EN.md | 0 ...n_Subir_imagen_del_perfil_de_usuario_EN.md | 0 .../75_Terminal_TERMINAL_Advanced.md | 334 ----- .../75_Terminal_TERMINAL_Appearance.md | 234 ---- .../75_Terminal_TERMINAL_Shell_Integration.md | 372 ------ .../75_Terminal_TERMINAL_TerminalBasics.md | 587 --------- .../75_Terminal_TERMINAL_TerminalProfiles.md | 315 ----- .../76_Transacciones_Transacciones_EN.md | 0 .../76_Transacciones_Transaction_search_EN.md | 0 ...cia_Transferencias_masivas_de_dinero_EN.md | 0 .../78_unvault_unvault.md | 0 .../79_UserGUIDE_USER_GUIDE-BasicEditing.md | 548 -------- .../79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md | 317 ----- .../79_UserGUIDE_USER_GUIDE_Accesibility.md | 362 ------ .../79_UserGUIDE_USER_GUIDE_CodeNavigation.md | 288 ---- ...erGUIDE_USER_GUIDE_CommandLineInterface.md | 191 --- .../79_UserGUIDE_USER_GUIDE_CustomLayout.md | 324 ----- .../79_UserGUIDE_USER_GUIDE_Debugging.md | 698 ---------- .../79_UserGUIDE_USER_GUIDE_Emmet.md | 376 ------ ...erGUIDE_USER_GUIDE_ExtensionMarketplace.md | 532 -------- .../79_UserGUIDE_USER_GUIDE_IntelliSense.md | 324 ----- ...serGUIDE_USER_GUIDE_MultiRootWorkspaces.md | 423 ------ .../79_UserGUIDE_USER_GUIDE_Profiles.md | 535 -------- .../79_UserGUIDE_USER_GUIDE_Refactoring.md | 156 --- .../79_UserGUIDE_USER_GUIDE_SettingsSync.md | 297 ----- .../79_UserGUIDE_USER_GUIDE_Snippets.md | 392 ------ .../79_UserGUIDE_USER_GUIDE_Tasks.md | 1155 ----------------- .../79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md | 365 ------ ...or_EN_Carga_masiva_de_saldo_operador_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 180 --- .../7_get_gasprices_get_gasprices.md | 0 .../80_Usuarios_Usuarios_con_saldo_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 195 --- .../82_vault_vault.md | 0 .../83_vs_api_vs_api_completion.md | 24 - .../83_vs_api_vs_api_extension.md | 24 - .../9_get_pools_get_pools.md | 0 .../appendices_10.md | 10 +- .../appendices_11.md | 12 +- .../appendices_12.md | 12 +- .../appendices_13.md | 12 +- .../appendices_14.md | 10 +- .../appendices_15.md | 10 +- .../appendices_16.md | 8 +- .../appendices_17.md | 16 +- .../appendices_18.md | 14 +- .../appendices_19.md | 10 +- .../appendices_2.md | 8 +- .../appendices_20.md | 16 +- .../appendices_21.md | 14 +- .../appendices_22.md | 14 +- .../appendices_23.md | 12 +- .../appendices_24.md | 12 +- .../appendices_3.md | 24 +- .../appendices_4.md | 24 +- .../appendices_5.md | 10 +- .../appendices_6.md | 38 +- .../appendices_7.md | 8 +- .../appendices_8.md | 8 +- .../appendices_9.md | 8 +- .../chapter10_2.md | 6 +- .../chapter10_3.md | 12 +- .../chapter10_4.md | 2 +- .../chapter11_3.md | 8 +- .../chapter11_5.md | 2 +- .../chapter12_1.md | 2 +- .../chapter14_2.md | 8 +- .../chapter14_3.md | 2 +- .../chapter14_4.md | 14 +- .../developer.avapframework.com/chapter1_6.md | 10 +- .../developer.avapframework.com/chapter2_2.md | 2 +- .../developer.avapframework.com/chapter3_2.md | 10 +- .../developer.avapframework.com/chapter7_2.md | 2 +- .../developer.avapframework.com/chapter7_3.md | 2 +- .../developer.avapframework.com/chapter7_4.md | 6 +- .../d4_gs_organizations.md | 28 +- docs/developer.avapframework.com/intro1.md | 2 +- 263 files changed, 218 insertions(+), 19328 deletions(-) delete mode 100644 docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md delete mode 100644 docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md delete mode 100644 docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md delete mode 100644 docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md delete mode 100644 docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md delete mode 100644 docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md delete mode 100644 docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md delete mode 100644 docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md delete mode 100644 docs/developer.avapframework.com/0_Comprar_Comprar_EN.md delete mode 100644 docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md delete mode 100644 docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md delete mode 100644 docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md delete mode 100644 docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md delete mode 100644 docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md delete mode 100644 docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md delete mode 100644 docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md delete mode 100644 docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md delete mode 100644 docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md delete mode 100644 docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md delete mode 100644 docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md delete mode 100644 docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md delete mode 100644 docs/developer.avapframework.com/0_close_close.md delete mode 100644 docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md delete mode 100644 docs/developer.avapframework.com/10_get_signature_get_signature.md delete mode 100644 docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md delete mode 100644 docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md delete mode 100644 docs/developer.avapframework.com/13_get_token_info_get_token_info.md delete mode 100644 docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md delete mode 100644 docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md delete mode 100644 docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md delete mode 100644 docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md delete mode 100644 docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md delete mode 100644 docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md delete mode 100644 docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md delete mode 100644 docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md delete mode 100644 docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md delete mode 100644 docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md delete mode 100644 docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md delete mode 100644 docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md delete mode 100644 docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md delete mode 100644 docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md delete mode 100644 docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md delete mode 100644 docs/developer.avapframework.com/1_download_101cli_download_101cli.md delete mode 100644 docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md delete mode 100644 docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md delete mode 100644 docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md delete mode 100644 docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md delete mode 100644 docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md delete mode 100644 docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md delete mode 100644 docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md delete mode 100644 docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md delete mode 100644 docs/developer.avapframework.com/2_download_github_download_github.md delete mode 100644 docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md delete mode 100644 docs/developer.avapframework.com/31_github_github_cli.md delete mode 100644 docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md delete mode 100644 docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md delete mode 100644 docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_altas_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md delete mode 100644 docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md delete mode 100644 docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md delete mode 100644 docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md delete mode 100644 docs/developer.avapframework.com/35_inter_inter_networks_movement.md delete mode 100644 docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md delete mode 100644 docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md delete mode 100644 docs/developer.avapframework.com/36_last_last_order_summary.md delete mode 100644 docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md delete mode 100644 docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md delete mode 100644 docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md delete mode 100644 docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md delete mode 100644 docs/developer.avapframework.com/40_logout_Logout_Services_EN.md delete mode 100644 docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md delete mode 100644 docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md delete mode 100644 docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md delete mode 100644 docs/developer.avapframework.com/43_new_new.md delete mode 100644 docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md delete mode 100644 docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md delete mode 100644 docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md delete mode 100644 docs/developer.avapframework.com/47_Odern_order_history_summary.md delete mode 100644 docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md delete mode 100644 docs/developer.avapframework.com/49_overview_OVERVIEW.md delete mode 100644 docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md delete mode 100644 docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md delete mode 100644 docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md delete mode 100644 docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md delete mode 100644 docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md delete mode 100644 docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md delete mode 100644 docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md delete mode 100644 docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md delete mode 100644 docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md delete mode 100644 docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md delete mode 100644 docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md delete mode 100644 docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md delete mode 100644 docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md delete mode 100644 docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md delete mode 100644 docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md delete mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_EN.md delete mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md delete mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md delete mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md delete mode 100644 docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md delete mode 100644 docs/developer.avapframework.com/65_rider_rider_order_management.md delete mode 100644 docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md delete mode 100644 docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md delete mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_Enterprise.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_Linux.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_MacOS.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_Network.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_Overview.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_Uninstall.md delete mode 100644 docs/developer.avapframework.com/69_set_SETUP_Windows.md delete mode 100644 docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md delete mode 100644 docs/developer.avapframework.com/69_set_set_blokchain_network.md delete mode 100644 docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md delete mode 100644 docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md delete mode 100644 docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md delete mode 100644 docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md delete mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md delete mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md delete mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md delete mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md delete mode 100644 docs/developer.avapframework.com/72_spei_spei_EN.md delete mode 100644 docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md delete mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md delete mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md delete mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md delete mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md delete mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalProfiles.md delete mode 100644 docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md delete mode 100644 docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md delete mode 100644 docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md delete mode 100644 docs/developer.avapframework.com/78_unvault_unvault.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md delete mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md delete mode 100644 docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md delete mode 100644 docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md delete mode 100644 docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md delete mode 100644 docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md delete mode 100644 docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md delete mode 100644 docs/developer.avapframework.com/82_vault_vault.md delete mode 100644 docs/developer.avapframework.com/83_vs_api_vs_api_completion.md delete mode 100644 docs/developer.avapframework.com/83_vs_api_vs_api_extension.md delete mode 100644 docs/developer.avapframework.com/9_get_pools_get_pools.md diff --git a/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md b/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md deleted file mode 100644 index b9a5f2f..0000000 --- a/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md +++ /dev/null @@ -1,155 +0,0 @@ -This document will deal with the different types of accesses that exist on - the platform. - -To identify the user who owns the account where the operation is going to - be carried out, it is necessary to indicate a session identifier ( - session_id parameter) or sign the call with its private key - ( signature parameter). In this way, these two calls to - service are equivalent for all intents and purposes. For those cases in - which there is no pademobile user as executor of the operation, the call - with private key must be used: - -* With session ID - -```javascript -user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&session_id=9bb19a6c0a607cb8f1791207395366d6 -``` - -Session sample - -The session_id parameter is obtained from the call to the login service: - -```javascript -http://desarrollo.pademobile.com:5007/ws/users.py/login?country_code=MX&nick=test_user&pin=0000 -``` - -```javascript -{ {' '} - "status" - :{' '} - true - , - "e_mail" - :{' '} - "" - , - "elapsed" - :{' '} - 0.2370758056640625 - , - "certification_data" - : - , - "session_id" - :{' '} - "97c4abb925c9b2046ac7432762ad1417" - , - "user_type" - :{' '} - "User b\u00e1sico" - , - "profile_id" - :{' '} - 1 - , - "profile_code" - :{' '} - "USER" - , - "user_id" - :{' '} - 225 - , - "state" - :{' '} - "Distrito Federal" - , - "phone_longitude" - :{' '} - 10 - , - "menu" - : - , - "affiliate_user_id" - :{' '} - 412 - , - "currency" - :{' '} - "MXN" - , - "name" - :{' '} - "Test User" - , - "certification" - :{' '} - false - , - "phone" - :{' '} - "5012385006" - - } -``` - -* With signature - -```javascript -user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&signature=cc30e3efc7159bb10b910512ca441664c1578a4d -``` - -Signed sample - -In this case an extra parameter is added to the entire original query - string. This parameter will be a hash (HMAC) of the previous - string, so any alteration in the parameters will cause the signed login - process to fail. - -This process follows these steps: - -* The private key of the user identified by the user_id parameter is obtained. -* The querystringis separated from the signature parameter. -* The hash is calculated using the strings obtained in steps 1 and 2. -* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. - -The following Python code snippet returns the querystringprovided in the - string parameter of the calculate_signature function with the signature - parameter appended to the end.{' '} - -This process follows the these steps: - -* The private key of the user identified by the user_id parameter is obtained. -* The querystringis separated from the signature parameter. -* The hash is calculated using the strings obtained in steps 1 and 2. -* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. - -```javascript -import hashlib - - import hashlib - - import hmac - - def{' '} - calcular_firma - (Private key - , chain - ) - : - signature = hmac - .new - (Private key - , chain - , hashlib - .sha1 - ) - .hexdigest - ( - ) - return chain{' '} - +{' '} - '&signature='{' '} - + signature -``` diff --git a/docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md b/docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md b/docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md b/docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md b/docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md b/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md deleted file mode 100644 index a8296ee..0000000 --- a/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md +++ /dev/null @@ -1,380 +0,0 @@ -101OBeX offers the possibility of working with encrypted nodes or - projects. All services that are exposed through the API Manager can be - consumed in an encrypted manner, provided this preference is established - during project creation. - -IT IS IMPORTANT TO UNDERSTAND THAT ONCE A PROJECT IS CREATED, THIS - ENCRYPTION SETTING CANNOT BE ALTERED. THEREFORE, IT IS CRITICAL TO - CAREFULLY CONSIDER WHETHER YOUR PROJECT REQUIRES ENCRYPTION TO AVOID - SUBSEQUENT DATA LOSS. - -When you indicate that you want to be able to consume an encrypted - project, you will be assigned an encryption key for it (cipher - key) which can be consulted in the project data. - -Once this key has been obtained, the calls can be encrypted under the - AES256 algorithm with said key and the response will be encrypted with the - same encryption key. - -The nomenclature of the calls will be as follows: - -The nomenclature of the calls will be as follows. - -Decrypted call: - -```javascript -https://api.101obex.com:8000/servicio?parameters -``` - -Encrypted call: - -```javascript -https://api.101obex.com:5000/servicio?encripted_data=(encripted - parameters) -``` - -This adds an additional encryption layer that guarantees the security of - the transferred data. - -The response will be encrypted and its morphology will be as detailed - below - -Decrypted answer: - -```javascript -{ - - "status" - : - true - , - - "e_mail" - : - "test.user@waynnovate.com" - , - - "elapsed" - : - 0.18008685111999512 - , - - "datos_certificacion" - : - { - "codtran" - : - "0075f16df4b053a5d10502ffb01e9cd8" - } - , - - "session_id" - : - "e9b7945dcbd5d18a6239acc7acafe8e9" - , - - "type_of_user" - : - "impulso bu00e1sico" - , - - "profile_id" - : - 137 - , - - "code_profile" - : - "USUARIO" - , - - "user_id" - : - 50 - , - - "status" - : - null - , - - "phone_lenght" - : - 10 - , - - "menu" - : - [ - [ - "Acceso Ru00e1pido" - , - [ - "Movements" - , - "movements" - , - false - ] - , - [ - "Add a card" - , - {' '} - "gestor_origenes_propios/crear" - , - false - ] - , - [ {' '} - "Recharge cellphone minutes" - , - "Rechargecellphoneminutes" - , - false - ] - , - [ {' '} - "Transfer between clients" - , - "moneysending" - , - false - ] - , - [ - "Request money" - , - "requestmoney" - , - false - ] - , - [ - "Services payment" - , - "payexpresspay" - , - false - ] - ] - ] - , - "user_affiliate_id" - : - 1 - , - "currency" - : - "MXN" - , - "name" - : - "qwertyuio qwertyui" - , - "certificate" - : - false - , - "phone" - : - "9876543212" - - } -``` - -Encrypted answer: - -```javascript -{ - - "status" - :{' '} - true - , - - "encrypted_data" - :{' '} - "k8DoQ9ADDph2o3oHdzeW0wO-FITgfGQD4xy9GcfuBtQy8IVazicD4J66kZ-HTlgWpCkXn7xlGDqCcXUNV - {' '} - TW9T7Ww1DpPXPyoilI2GPhOFliAWGpip_R56WVYr07qGmMUJy_n2I3si___hBb9MPEI3KBh9eupUO2gKDT - {' '} - bULimM_cpCtRHsqFdTZIpRedC0W_HdTgcCrZ_CItCoxAoyiCjx6knaH9dbaUV1GoywBWfuh3Dh4iqHGejH - {' '} - RbYi7Apm1PjCj5WNPEEN-UlfNj9hvurwTgCjBXilBg19ld3LUJj-1Yh48It_gLkna12ZqBiuUnQ3Rpj1hH - {' '} - vz7CkTjxStkigCyKA4lPh94cK_cJgaiv7c1Uyb54cB8N2bUTBhD4ojOSfR88bN-4wYiIEspinuKDmpHXO8 - {' '} - HP_IgJSfgkU4QiTfbBKQ8u-2Hxe2x1JgbKIvjpiBNK0H3GNnaPrtciFf88EeQun5oZwOJiFtZBQHv-V4fd - {' '} - kfuOYBAWaOm13I9_PYiJir9BE145mIQOuugnebLASKju5UA-NHEclZ7fUF1fNyCeFxGW-6oYfadBanzpIM - {' '} - 5PjRUODa92gF4X0pPcLy4v1jcegJSMSpTW0DH_vM14gV56OJ0Dvyf52OB2e3LDlfP7TwYmbY7YWwj5MpR1 - {' '} - uoieOwbGsqbXqKvOOCmlwGIvAc-vowoTLRpviT1_fymNHyRqtb89Gjy_2rvsTgBLoZavKBOv5Wvu1Dil5u - {' '} - 0wVzo7pqk5XV3lnTCi-t7kLiH7SfXtuIBhPQzPTO40btxpZwC2V4QBsx1BcBMs_cb7Kmcy53exgpQQQkRN - {' '} - bTU6jkSnTcccaCPzT9WGhxiHrS1U5bXXW4BM1j9aHFDjhBp6uT9_2QAh0oh-uljLTnw6r6KH69VFJyO2oK - {' '} - jG2Qttu-L95ynxW94ecMuLlU26O7F-j9IO1FpI-c8cfKAQs6tbUnv_cU49nTwpX5TZI1ZfCDOb042-KiCJ - {' '} - qOfP61FWZtEQrMw7VZwUxMylcku_In9caUUYgpvJhHwqE6GKdS0XuKEcGUV-tfMvBcnewCgobcZhIeTYKh - {' '} - KSoaA1AHR7IYHaf8U4isTCzcexJL_mnwHlvWGVEXmM2Ywy_y9Y6nIDFTXPsUG4aYjw=" - - } -``` - -Python code example to encrypt and decrypt (encryption key - highlighted) - -```javascript -from Crypto - .Cipher{' '} - import AES - - from Crypto - .Random{' '} - import new{' '} - as Random - - from base64{' '} - import urlsafe_b64encode - , urlsafe_b64decode - - class{' '} - CipherByAES - : - def{' '} - __init__ - (self - ) - : - self.block_size{' '} - ={' '} - 16 - self.key{' '} - ={' '} - 'cedb3fb962255b1aafd033cabe831530' - self.pad{' '} - ={' '} - lambda s - : s{' '} - +{' '} - (self - .block_size{' '} - -{' '} - len - (s - ){' '} - % self - .block_size - ){' '} - * - chr - (self - .block_size{' '} - -{' '} - len - (s - ){' '} - % self - .block_size - ) - self.unpad{' '} - ={' '} - lambda s - : s - [ - : - - - ord - (s - [ - len - (s - ){' '} - -{' '} - 1 - : - ] - ) - ] - def{' '} - encrypt - (self - , data - ) - : - plain_text = self - .pad - (data - ) - iv = Random - ( - ) - .read - (AES - .block_size - ) - cipher = AES - .new - (self - .key - , AES - .MODE_OFB - , iv - ) - return urlsafe_b64encode - (iv{' '} - + cipher - .encrypt - (plain_text - .encode - ( - ) - ) - ) - .decode - ( - ) - def{' '} - decrypt - (self - , data - ) - : - cipher_text ={' '} - urlsafe_b64decode(data - .encode - ( - ) - ) - iv = cipher_text - [ - :self - .block_size - ] - cipher = AES - .new - (self - .key - , AES - .MODE_OFB - , iv - ) - return self - .unpad - (cipher - .decrypt - (cipher_text - [self - .block_size - ] - ) - ) - .decode - ( - ) -``` diff --git a/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md b/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md deleted file mode 100644 index 0b2aad8..0000000 --- a/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md +++ /dev/null @@ -1,17 +0,0 @@ -101OBeX organizes and groups the clients of a node or project into - communities. - -Communities are groups of users or clients of a project whose main common - element or union is the community to which they belong. This is - determined, in most cases, although other criteria may apply, by - affiliates (corporations) responsible for registering users or - clients within the system. - -Users or clients in a project that do not have a specific community will - belong to the community of the node or project. Importantly, end users or - customers retain the flexibility to switch between communities as needed. - Grouping users or customers by communities offers many advantages at the - operation and data analysis level, since it allows us to undertake actions - on a specific set of users or end customers based on the community to - which they belong. Moreover, it greatly enhances capabilities for data - mining and reporting activities. diff --git a/docs/developer.avapframework.com/0_Comprar_Comprar_EN.md b/docs/developer.avapframework.com/0_Comprar_Comprar_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md b/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md deleted file mode 100644 index 6797959..0000000 --- a/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md +++ /dev/null @@ -1,150 +0,0 @@ -This service returns the amount of a transaction to be able to see it. - -GET: - `URL_BASE + /ws/util.py/get_importe_transaccion` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - :{' '} - true - , - "amount" - : - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `amount:` Amount of the transaction searched. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7" - - payload ={' '} - { - } - files ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7', - 'headers': {}, - formData: {} - }; - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - var requestOptions = { - method: 'GET', - body: formdata, - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7' -``` - -## Business logic: - -By means of this endpoint we obtain the amount associated with a - transaction. diff --git a/docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md b/docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md b/docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md b/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md deleted file mode 100644 index 7a2f9af..0000000 --- a/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md +++ /dev/null @@ -1,34 +0,0 @@ -Within a node or project, two distinct modules exist, and understanding - their differences is crucial to prevent confusion. We are talking about - the Currencies and FX Exchange modules. - -A node or project works with a location and a currency, information that - is provided at the time of creation of a node with the activation of a - project. - -The currency selected when the node or project is created is the only - currency with which the node will operate until the administrator decides - to create or register new currencies. - -That is, a node can be configured in a specific location, the United - States for example, and select USD as the currency for the node or - project. From that moment on, all operations carried out in that node or - project will be recorded with that currency. If later you want other - currencies to exist, such as EUR, you must register the request in the - node or project as an authorized currency. - -This task is carried out in the Currencies section which can be found in - the node or project tab or in the side menu under the Projects section. - -In this same section you can create your own currencies and assign them a - value with a purchase and sale price. - -Working with a loyalty solution based on the accumulation of customer - points, based on their activity, requires registering those points as a - form of currency and giving them a value. In this way, the client will - always be able to use that points wallet in the operation network, thanks - to the FX Exchange service. - -The mission of the FX Exchange service is to maintain a list of - currencies, the reference price, the purchase price, and the sale price, - thus allowing multi-currency operations. diff --git a/docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md b/docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md b/docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md b/docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md b/docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md b/docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md b/docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md b/docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md b/docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/0_close_close.md b/docs/developer.avapframework.com/0_close_close.md deleted file mode 100644 index 7691d07..0000000 --- a/docs/developer.avapframework.com/0_close_close.md +++ /dev/null @@ -1,174 +0,0 @@ -## ws/orders.py/close - -### Receives - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -```javascript -{ - "status" - :{' '} - true - , - "codtran" - :{' '} - "850c29598f8ceae89e7083d1547faa29" - , - "result" - :{' '} - "120d29398f8ceae89e707ad1547fa12c" - "elapsed" - :{' '} - 0.12410902976989746 - - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `codtran:` Operation result. -* `result:` Code of the transaction that cancels the order. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - - - url ={' '} - - "http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" - - - - payload= - { - } - - headers ={' '} - { - '101ObexApiKey' - :{' '} - 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' - - } - - - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data - =payload - ) - - - print - (response - .text - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - - var options = { - 'method': 'GET', - 'url': - 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', - 'headers': { - '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' - } - - }; - - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - - }); -``` - -### JavaScript - Fetch: - -```javascript -var myHeaders = new Headers(); - - myHeaders.append("101ObexApiKey", - "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); - - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' - - }; - - - fetch("http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' - {' '} - \ - - --header{' '} - - '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' -``` - -## Business logic: - -The objective of this service is to permit an administrator close an - order. diff --git a/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md b/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md deleted file mode 100644 index cd3ca23..0000000 --- a/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md +++ /dev/null @@ -1,26 +0,0 @@ -This tool is designed to enable developers to work with the 101OBeX API. - With this tool, developers can retrieve information about their API - privileges, quotas, API Token, and more. - -To begin, developers need to initialize their token using the - 'init' parameter. This process involves authenticating through the - Google OAuth API to obtain the API token, which is stored locally on their - computer. Once the token is initialized, developers can use the - 'info' parameter to access details about their API privileges, - projects, teams, and access token. Finally, developers have the option to - remove all downloaded information from their computer using the - 'clean' parameter. - -* https://github.com/101OBeXCorp/101obexcli/releases/tag/prerelease - -Mac: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip - -Linux: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip - -Win32: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.mac.zip diff --git a/docs/developer.avapframework.com/10_get_signature_get_signature.md b/docs/developer.avapframework.com/10_get_signature_get_signature.md deleted file mode 100644 index af486aa..0000000 --- a/docs/developer.avapframework.com/10_get_signature_get_signature.md +++ /dev/null @@ -1,156 +0,0 @@ -This service is used to get the sign of a informed string - -GET: - `URL_BASE + /ws/util.py/get_signature` - -## Receives: - -The string to be signed and the private key to sign the string - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status": true, "signature": - "38779748c3bb130d0d1f8084ad92607d705e88b7", "elapsed": - 0.002902984619140625 - - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `signature:` The signature calculated from the string{' '} -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "nivel" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `nivel:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - - url ={' '} - - "http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm" - - - payload= - { - } - - headers ={' '} - { - '101ObexApiKey' - :{' '} - 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' - - } - - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data - =payload - ) - - print - (response - .text - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - - var options = { - 'method': 'GET', - 'url': - 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm', - 'headers': { - '101ObexApiKey': 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' - } - - }; - - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - - }); -``` - -### JavaScript - Fetch: - -```javascript -var myHeaders = new Headers(); - - myHeaders.append("101ObexApiKey", - "ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8"); - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' - - }; - - fetch("http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm' - {' '} - \ -``` - -## Business logic: - -With this endpoint it is allowed to calculate the sign from a strign using - a private key. diff --git a/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md b/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md deleted file mode 100644 index 9c58240..0000000 --- a/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md +++ /dev/null @@ -1,552 +0,0 @@ -AVAP TM Dev Studio 2024 lets you perform most tasks directly - from the keyboard. This page lists out the default bindings (keyboard - shortcuts) and describes how you can update them. - -### Keyboard Shortcuts editor - -AVAP TM Dev Studio provides a rich and easy keyboard shortcuts - editing experience using Keyboard Shortcuts editor. It - lists all available commands with and without keybindings and you can - easily change / remove / reset their keybindings using the available - actions. It also has a search box on the top that helps you in finding - commands or keybindings. You can open this editor by going to the menu - under File > Preferences >{' '} - Keyboard Shortcuts . - -Most importantly, you can see keybindings according to your keyboard - layout. For example, key binding `Cmd+\` in US keyboard layout - will be shown as `Ctrl+Shift+Alt+Cmd+7` when layout is changed - to German. The dialog to enter key binding will assign the correct and - desired key binding as per your keyboard layout. - -For doing more advanced keyboard shortcut customization, read Advanced - Customization. - -### Keymap extensions - -Keyboard shortcuts are vital to productivity and changing keyboarding - habits can be tough. To help with this, File >{' '} - Preferences >{' '} - Migrate Keyboard Shortcuts from... shows you a list of - popular keymap extensions. These extensions modify the AVAP TM {' '} - Dev Studio shortcuts to match those of other editors so you don't need - to learn new keyboard shortcuts. There is also a Keymaps category of - extensions in the Marketplace. - -### Keyboard Shortcuts Reference - -We also have a printable version of these keyboard shortcuts.{' '} - Help > Keyboard Shortcut Reference {' '} - displays a condensed PDF version suitable for printing as an easy - reference. - -Below are links to the three platform-specific versions (US English - keyboard): - -* Windows -* macOS -* Linux - -### Detecting keybinding conflicts - -If you have many extensions installed or you have customized your keyboard - shortcuts, you can sometimes have keybinding conflicts where the same - keyboard shortcut is mapped to several commands. This can result in - confusing behavior, especially if different keybindings are going in and - out of scope as you move around the editor. - -The Keyboard Shortcuts editor has a context menu command{' '} - Show Same Keybindings , which will filter the keybindings - based on a keyboard shortcut to display conflicts. - -Pick a command with the keybinding you think is overloaded and you can see - if multiple commands are defined, the source of the keybindings and when - they are active. - -### Troubleshooting keybindings - -To troubleshoot keybindings problems, you can execute the command{' '} - Developer: Toggle Keyboard Shortcuts Troubleshooting . - This will activate logging of dispatched keyboard shortcuts and will open - an output panel with the corresponding log file. - -You can then press your desired keybinding and check what keyboard - shortcut AVAP™ DS detects and what command is invoked. - -For example, when pressing `cmd+/` in a code editor on macOS, - the logging output would be: - -```javascript -[KeybindingService]: / Received keydown event - modifiers: [meta], code: - MetaLeft, keyCode: 91, key: Meta - - [KeybindingService]: | Converted keydown event - modifiers: [meta], - code: MetaLeft, keyCode: 57 ('Meta') - - [KeybindingService]: \ Keyboard event cannot be dispatched. - - [KeybindingService]: / Received keydown event - modifiers: [meta], code: - Slash, keyCode: 191, key: / - [KeybindingService]: | Converted keydown event - modifiers: [meta], - code: Slash, keyCode: 85 ('/') - - [KeybindingService]: | Resolving meta+[Slash] - - [KeybindingService]: \ From 2 keybinding entries, matched - editor.action.commentLine, when: editorTextFocus && - !editorReadonly, source: built-in. -``` - -The first keydown event is for the MetaLeft key (cmd) and cannot - be dispatched. The second keydown event is for the Slash key (/) - and is dispatched as meta+[Slash]. There were two keybinding entries - mapped from meta+[Slash] and the one that matched was for the command - editor.action.commentLine, which has the when condition editorTextFocus - && !editorReadonly and is a built-in keybinding entry. - -### Viewing modified keybindings - -You can view any user modified keyboard shortcuts in AVAP TM Dev - Studio in the Keyboard Shortcuts editor with the Show - User Keybindings command in the More Actions (...) menu. This - applies the @source:user filter to the Keyboard Shortcuts editor - (Source is 'User'). - -### Advanced customization - -All keyboard shortcuts in AVAP TM Dev Studio can be customized - via the keybindings.json file. - -To configure keyboard shortcuts through the JSON file, open{' '} - Keyboard Shortcuts editor and select the{' '} - Open Keyboard Shortcuts (JSON) button on the - right of the editor title bar. This will open your keybindings.json file - where you can overwrite the Default Keyboard Shortcuts. - -You can also open the keybindings.json file from the Command Palette - (Ctrl+Shift+P) with the Preferences: Open Keyboard Shortcuts - (JSON) command. - -### Keyboard rules - -Each rule consists of: - -* a key that describes the pressed keys. -* a command containing the identifier of the command to execute. -* an optional when clause containing a boolean expression that will be evaluated depending on the current context. - -Chords (two separate keypress actions) are described by separating - the two keypresses with a space. For example, `Ctrl+K Ctrl+C` . - -When a key is pressed: - -* the rules are evaluated from bottom to{' '} top . -* the first rule that matches, both the key and in terms of when, is accepted. -* no more rules are processed. -* if a rule is found and has a command set, the command is executed. - -The additional keybindings.json rules are appended at runtime to the - bottom of the default rules, thus allowing them to overwrite the default - rules. The keybindings.json file is watched by AVAP™ DS so editing it - while AVAP TM Dev Studio is running will update the rules at - runtime. - -The keyboard shortcuts dispatching is done by analyzing a list of rules - that are expressed in JSON. Here are some examples: - -```javascript -// Keybindings that are active when the focus is in the editor - - { "key": "home", "command": "cursorHome", "when": "editorTextFocus" - }, - - { "key": "shift+home", "command": "cursorHomeSelect", "when": - "editorTextFocus" }, - - - // Keybindings that are complementary - - { "key": "f5", "command": "workbench.action.debug.continue", - "when": "inDebugMode" }, - - { "key": "f5", "command": "workbench.action.debug.start", "when": - "!inDebugMode" }, - - - // Global keybindings - - { "key": "ctrl+f", "command": "actions.find" }, - - { "key": "alt+left", "command": "workbench.action.navigateBack" - }, - - { "key": "alt+right", "command": "workbench.action.navigateForward" - }, - - - // Global keybindings using chords (two separate keypress - actions) - - { "key": "ctrl+k enter", "command": "workbench.action.keepEditor" - }, - - { "key": "ctrl+k ctrl+w", "command": - "workbench.action.closeAllEditors" }, -``` - -### Accepted keys - -The key is made up of modifiers and the key itself. - -The following modifiers are accepted: - -The following keys are accepted: - -* `f1-f19` , `a-z` , `0-9` -* ```, `-` , `=` , `[` , `]` ,{' '} `\` , `;` , `'` , `,` ,{' '} `.` , `/` -* `left` , `up` , `right` ,{' '} `down` , `pageup` , `pagedown` ,{' '} `end` , `home` -* `tab` , `enter` , `escape` ,{' '} `space` , `backspace` , `delete` -* `pausebreak` , `capslock` , `insert` -* `numpad0-numpad9` , `numpad_multiply` ,{' '} `numpad_add` , `numpad_separator` -* `numpad_subtract` , `numpad_decimal` ,{' '} `numpad_divide` - -### Command arguments - -You can invoke a command with arguments. This is useful if you often - perform the same operation on a specific file or folder. You can add a - custom keyboard shortcut to do exactly what you want. - -The following is an example overriding the `Enter` key to print - some text: - -```javascript -{ - "key": "enter", - "command": "type", - "args": { "text": "Hello World" }, - "when": "editorTextFocus" - - } -``` - -The type command will receive {"text": "Hello - World"} as its first argument and add "Hello World" to - the file instead of producing the default command. - -For more information on commands that take arguments, refer to Built-in - Commands. - -### Running multiple commands - -It is possible to create a keybinding that runs several other commands - sequentially using the command runCommands. - -Run several commands without arguments: copy current line down, mark the - current line as comment, move cursor to copied line - -```javascript -{ - "key": "ctrl+alt+c", - "command": "runCommands", - "args": { - "commands": [ "editor.action.copyLinesDownAction", - "cursorUp", - "editor.action.addCommentLine", - "cursorDown" - ] } - - }, -``` - -It is also possible to pass arguments to commands: create a new untitled - TypeScript file and insert a custom snippet - -```javascript -{ - "key": "ctrl+n", - "command": "runCommands", - "args": { - "commands": [ { - "command": "workbench.action.files.newUntitledFile", - "args": { - "languageId": "typescript" - } - }, - { - "command": "editor.action.insertSnippet", - "args": { - "langId": "typescript", - "snippet": "class ${1:ClassName} - {\n\tconstructor() {\n\t\t$0\n\t}\n}" - } - } - ] } - - }, -``` - -Note that commands run by runCommands receive the value of - "args" as the first argument. So in the example above, - workbench.action.files.newUntitledFile receives - {"languageId": "typescript" } as its first - and only argument. - -To pass several arguments, one needs to have "args" as an array: - -```javascript -{ - "key": "ctrl+shift+e", - "command": "runCommands", - "args": { - "commands": [ { - // command invoked with 2 arguments: - vscode.executeCommand("myCommand", "arg1", "arg2") - "command": "myCommand", - "args": ["arg1", "arg2"] - } - ] } - - } -``` - -To pass an array as the first argument, one needs to wrap the array in - another array: "args": [ [1, 2, 3] ]. - -### Removing a specific key binding rule - -You can write a key binding rule that targets the removal of a specific - default key binding. With the keybindings.json, it was always possible to - redefine all the key bindings of AVAP TM Dev Studio, but it can - be difficult to make a small tweak, especially around overloaded keys, - such as `Tab` or `Escape` . To remove a specific key - binding, add a - to the command and the rule will be a removal rule. - -Here is an example: - -```javascript -// In Default Keyboard Shortcuts - - ... - - { "key": "tab", "command": "tab", "when": ... }, - - { "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": - ... }, - - { "key": "tab", "command": "acceptSelectedSuggestion", "when": ... - }, - - ... - - - // To remove the second rule, for example, add in keybindings.json: - - { "key": "tab", "command": "-jumpToNextSnippetPlaceholder" } -``` - -To override a specific key binding rule with an empty action, you can - specify an empty command: - -```javascript -// To override and disable any `tab` keybinding, for example, add in - keybindings.json: - - { "key": "tab", "command": "" } -``` - -### Keyboard layouts - -The keys above are string representations for virtual keys and do not - necessarily relate to the produced character when they are pressed. More - precisely: - -* Reference: Virtual-Key Codes (Windows) -* `tab` for VK_TAB (0x09) -* ; for VK_OEM_1 (0xBA) -* `=` for VK_OEM_PLUS (0xBB) -* `,` for VK_OEM_COMMA (0xBC) -* `-` for VK_OEM_MINUS (0xBD) -* `.` for VK_OEM_PERIOD (0xBE) -* `/` for VK_OEM_2 (0xBF) -* ` for VK_OEM_3 (0xC0) -* `[` for VK_OEM_4 (0xDB) -* `\` for VK_OEM_5 (0xDC) -* `]` for VK_OEM_6 (0xDD) -* `'` for VK_OEM_7 (0xDE) -* etc. - -Different keyboard layouts usually reposition the above virtual keys or - change the characters produced when they are pressed. When using a - different keyboard layout than the standard US, AVAP TM Dev - Studio does the following: - -All the key bindings are rendered in the UI using the current system's - keyboard layout. For example, Split Editor when using a French - (France) keyboard layout is now rendered as `Ctrl+*` : - -When editing keybindings.json, AVAP TM Dev Studio highlights - misleading key bindings, those that are represented in the file with the - character produced under the standard US keyboard layout, but that need - pressing keys with different labels under the current system's - keyboard layout. For example, here is how the{' '} - Default Keyboard Shortcuts rules look like when using a - French (France) keyboard layout: - -There is also a widget that helps input the key binding rule when editing - keybindings.json. To launch the Define Keybinding widget, press{' '} - `Ctrl+K Ctrl+K` . The widget listens for key presses and renders - the serialized JSON representation in the text box and below it, the keys - that AVAP TM Dev Studio has detected under your current keyboard - layout. Once you've typed the key combination you want, you can press{' '} - `Enter` and a rule snippet will be inserted. - -### Keyboard layout-independent bindings - -Using scan codes, it is possible to define keybindings which do not change - with the change of the keyboard layout. For example: - -```javascript -{ "key": "cmd+[Slash]", "command": "editor.action.commentLine", - "when": "editorTextFocus" } -``` - -Accepted scan codes: - -* `[F1]-[F19]` , `[KeyA]-[KeyZ]` ,{' '} `[Digit0]-[Digit9]` -* `[Backquote]` , `[Minus]` , `[Equal]` ,{' '} `[BracketLeft]` , `[BracketRight]` ,{' '} `[Backslash]` , `[Semicolon]` ,{' '} `[Quote]` , `[Comma]` , `[Period]` ,{' '} `[Slash]` -* `[ArrowLeft]` , `[ArrowUp]` ,{' '} `[ArrowRight]` , `[ArrowDown]` ,{' '} `[PageUp]` , `[PageDown]` , `[End]` ,{' '} `[Home]` -* `[Tab]` , `[Enter]` , `[Escape]` ,{' '} `[Space]` , `[Backspace]` , `[Delete]` -* `[Pause]` , `[CapsLock]` , `[Insert]` -* `[Numpad0]-[Numpad9]` , `[NumpadMultiply]` ,{' '} `[NumpadAdd]` , `[NumpadComma]` -* `[NumpadSubtract]` , `[NumpadDecimal]` ,{' '} `[NumpadDivide]` - -### when clause contexts - -AVAP TM Dev Studio gives you fine control over when your key - bindings are enabled through the optional when clause. If your key binding - doesn't have a when clause, the key binding is globally available at - all times. A when clause evaluates to either Boolean true or false for - enabling key bindings. - -AVAP TM Dev Studio sets various context keys and specific values - depending on what elements are visible and active in the AVAP TM {' '} - Dev Studio UI. For example, the built-in Start Debugging command has the - keyboard shortcut `F5` , which is only enabled when there is an - appropriate debugger available (context debuggersAvailable is - true) and the editor isn't in debug mode (context inDebugMode - is false): - -You can also view a keybinding's when clause directly in the Default - Keybindings JSON ( - - Preferences: Open Default Keyboard Shortcuts (JSON) - - ): - -```javascript -{ "key": "f5", "command": "workbench.action.debug.start", - "when": "debuggersAvailable && !inDebugMode" }, -``` - -For when clause conditional expressions, the following conditional - operators are useful for keybindings: - -You can find the full list of when clause conditional operators in the - when clause contexts reference. - -You can find some of the available when clause contexts in the when clause - context reference. - -The list there isn't exhaustive and you can find other when clause - contexts by searching and filtering in the Keyboard Shortcuts editor ( - Preferences: Open Keyboard Shortcuts ) or reviewing - the Default Keybindings JSON file ( - - Preferences: Open Default Keyboard Shortcuts (JSON) - - ). - -### Custom keybindings for refactorings - -The editor.action.codeAction command lets you configure keybindings for - specific Refactorings (Code Actions). For example, the keybinding - below triggers the Extract function refactoring Code - Actions: - -```javascript -{ - "key": "ctrl+shift+r ctrl+e", - "command": "editor.action.codeAction", - "args": { - "kind": "refactor.extract.function" - } - - } -``` - -This is covered in depth in the Refactoring topic where you can learn - about different kinds of Code Actions and how to prioritize them in the - case of multiple possible refactorings. - -### Default Keyboard Shortcuts - -You can view all default keyboard shortcuts in AVAP Dev Studio in the{' '} - Keyboard Shortcuts editor with the{' '} - Show Default Keybindings command in the{' '} - More Actions (...) menu. This applies the - @source:default filter to the Keyboard Shortcuts editor - ( Source is 'Default'). - -You can view the default keyboard shortcuts as a JSON file using the - command{' '} - - Preferences: Open Default Keyboard Shortcuts (JSON) - - . - -Some commands included below do not have default keyboard shortcuts and so - are displayed as unassigned but you can assign your own keybindings. - -### Next steps - -Now that you know about our Key binding support, what's next... - -* Language Support - Our Good, Better, Best language grid to see what you can expect -* Debugging - This is where AVAP™ DS really shines -* Node.js - End to end Node.js scenario with a sample app - -### Common questions - -In the Keyboard Shortcut editor, you can filter on - specific keystrokes to see which commands are bound to which keys. Below - you can see that Ctrl+Shift+P is bound to{' '} - Show All Commands to bring up the Command Palette. - -Find a rule that triggers the action in the{' '} - Default Keyboard Shortcuts and write a modified version - of it in your keybindings.json file: - -```javascript -// Original, in Default Keyboard Shortcuts - - { "key": "ctrl+shift+k", "command": "editor.action.deleteLines", - "when": "editorTextFocus" }, - - // Modified, in User/keybindings.json, Ctrl+D now will also trigger this - action - - { "key": "ctrl+d", "command": "editor.action.deleteLines", - "when": "editorTextFocus" }, -``` - -Use the editorLangId context key in your when clause: - -```javascript -{ "key": "shift+alt+a", "command": "editor.action.blockComment", - "when": "editorTextFocus && editorLangId == csharp" - }, -``` - -The most common problem is a syntax error in the file. Otherwise, try - removing the when clause or picking a different key. Unfortunately, at - this point, it is a trial and error process. diff --git a/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md b/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md deleted file mode 100644 index 1d62ddc..0000000 --- a/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md +++ /dev/null @@ -1,933 +0,0 @@ -"Tips and Tricks" lets you jump right in and learn how to be - productive with AVAP™ Dev Studio 2024. You'll become familiar with its - powerful editing, code intelligence, and source code control features and - learn useful keyboard shortcuts. This topic goes pretty fast and provides - a broad overview, so be sure to look at the other in-depth topics in - Getting Started and the User Guide to learn more. - -### Basics - -The best way of exploring AVAP TM Dev Studio hands-on is to open - the Welcome page. You will get an overview of AVAP TM Dev - Studio's customizations and features. Help > Welcome. - - - -Pick a Walkthrough for a self-guided tour through the - setup steps, features, and deeper customizations that AVAP TM {' '} - Dev Studio offers. As you discover and learn, the walkthroughs track your - progress. - -If you are looking to improve your code editing skills open the{' '} - Interactive Editor Playground . Try out AVAP TM {' '} - Dev Studio's code editing features, like multi-cursor editing, - IntelliSense, Snippets, Emmet, and many more.{' '} - Help > Editor Playground . - - - -Access all available commands based on your current context. - -Keyboard Shortcut: Ctrl+Shift+P - - - -All of the commands are in the Command Palette with the associated key - binding (if it exists). If you forget a keyboard shortcut, use the - Command Palette to help you out. - -Download the keyboard shortcut reference sheet for your platform - (macOS, Windows, Linux). - -Quickly open files. - -Keyboard Shortcut: `Ctrl+P` - -Tip : Type `?` to view command suggestions. - - - -Typing commands such as edt and term followed by a space will bring up - dropdown lists. - - - -Repeat the Quick Open keyboard shortcut to cycle quickly - between recently opened files. - -You can open multiple files from Quick Open by pressing - the Right arrow key. This will open the currently selected file in the - background and you can continue selecting files from{' '} - Quick Open . - -Open Recent - -Keyboard Shortcut: `Ctrl+R` - -Displays a Quick Pick dropdown with the list from File {' '} - > Open Recent with recently opened folders and - workspaces followed by files. - -### Command line - -AVAP TM Dev Studio has a powerful command line interface - (CLI) which allows you to customize how the editor is launched to - support various scenarios. - -```javascript -# open code with current directory - - code . - # open the current directory in the most recently used code window - - code -r . - # create a new window - - code -n - - # change the language - - code --locale=es - - # open diff editor - - code --diff - - # open file at specific line and column - - code --goto package.json:10:5 - - # see help options - - code --help - - # disable all extensions - - code --disable-extensions . -``` - -Workspace specific files are in a .avapcode folder at the root. For - example, tasks.json for the Task Runner and launch.json for the debugger.{' '} - -### Status Bar - -Keyboard Shortcut: `Ctrl+Shift+M` - -Quickly jump to errors and warnings in the project. - -Cycle through errors with `F8` or `Shift+F8` - -You can filter problems either by type ('errors', - 'warnings') or text matching. - -Keyboard Shortcut: `Ctrl+K M` - -If you want to persist the new language mode for that file type, you can - use the Configure File Association for command to - associate the current file extension with an installed language. - -### Customization - -There are many things you can do to customize AVAP TM Dev . - -* Change your theme -* Change your keyboard shortcuts -* Tune your settings -* Add JSON validation -* Create snippets -* Install extensions - -Keyboard Shortcut: `Ctrl+K Ctrl+T` - -You can install more themes from the AVAP TM Dev Studio - extension Marketplace. - -Are you used to keyboard shortcuts from another editor? You can install a - Keymap extension that brings the keyboard shortcuts from your favorite - editor to AVAP TM Dev Studio. Go to Preferences {' '} - > Migrate Keyboard Shortcuts from ... to see the - current list on the Marketplace. Some of the more popular ones: - -* Vim -* Sublime Text Keymap -* Emacs Keymap -* Atom Keymap -* Brackets Keymap -* Eclipse Keymap -* AVAP™ Dev Studio Keymap - -Keyboard Shortcut: `Ctrl+K Ctrl+S` - -You can search for shortcuts and add your own keybindings to the - keybindings.json file. - - - -See more in Key Bindings for AVAP TM Dev Studio. - -By default AVAP TM Dev Studio shows the Settings editor, you can - find settings listed below in a search bar, but you can still edit the - underlying settings.json file by using the{' '} - Open User Settings (JSON) command or by changing - your default settings editor with the workbench.settings.editor setting. - -Open User Settings settings.json - -Keyboard Shortcut: `Ctrl+,` - -Change the font size of various UI elements - -```javascript -// Main editor - - "editor.fontSize": 18, - - // Terminal panel - - "terminal.integrated.fontSize": 14, - - // Output panel - - "[Log]": { - "editor.fontSize": 15 - - } -``` - -Change the zoom level - -```javascript -"window.zoomLevel": 5 -``` - -Font ligatures - -```javascript -"editor.fontFamily": "Fira Code", - - "editor.fontLigatures": true -``` - - - -Auto Save - -```javascript -"files.autoSave": "afterDelay" -``` - -You can also toggle Auto Save from the top-level menu with the File > - Auto Save. - -Format on save - -```javascript -"editor.formatOnSave": true -``` - -Format on paste - -```javascript -"editor.formatOnPaste": true -``` - -Change the size of Tab characters - -```javascript -"editor.tabSize": 4 -``` - -Spaces or Tabs - -```javascript -"editor.insertSpaces": true -``` - -Render whitespace - -```javascript -"editor.renderWhitespace": "all" -``` - -Whitespace characters are rendered by default in text selection. - -Ignore files / folders - -Removes these files / folders from your editor window. - -```javascript -"files.exclude": { - "somefolder/": true, - "somefile": true - - } -``` - -Remove these files / folders from search results. - -```javascript -"search.exclude": { - "someFolder/": true, - "somefile": true - - } -``` - -And many, many other customizations. - -You can scope the settings that you only want for specific languages by - the language identifier. You can find a list of commonly used language IDs - in the Language Identifiers reference. - -```javascript -"[languageid]": { - - - } -``` - - - -Enabled by default for many file types. Create your own schema and - validation in settings.json - -```javascript -"json.schemas": [ { - "fileMatch": [ "/bower.json" - ], - "url": "https://json.schemastore.org/bower" - } - ] -``` - -or for a schema defined in your workspace - -```javascript -"json.schemas": [ { - "fileMatch": [ "/foo.json" - ], - "url": "./myschema.json" - } - ] -``` - -or a custom schema - -```javascript -"json.schemas": [ { - "fileMatch": [ "/.myconfig" - ], - "schema": { - "type": "object", - "properties": { - "name" : { - "type": "string", - "description": "The name of the entry" - } - } - } - } - ] -``` - -See more in the JSON documentation. - -### Extensions - -Keyboard Shortcut: `Ctrl+Shift+X` - -In the Extensions view, you can search via the search bar - or click the More Actions (...) button to filter - and sort by install count. - - - -In the Extensions view, click{' '} - Show Recommended Extensions in the{' '} - More Actions (...) button menu. - - - -Are you interested in creating your own extension? You can learn how to do - this in the Extension API documentation, specifically check out the - documentation on contribution points. - -* configuration -* commands -* keybindings -* languages -* debuggers -* grammars -* themes -* snippets -* jsonValidation - -### Files and folders - -Keyboard Shortcut: Ctrl+` - - - -Further reading: - -* Integrated Terminal documentation -* Mastering AVAP™ DS's Terminal article - -Keyboard Shortcut: `Ctrl+B` - - - -Keyboard Shortcut: `Ctrl+J` - -Keyboard Shortcut: `Ctrl+K Z` - - - -Enter distraction free Zen mode. - -Press `Esc` twice to exit Zen Mode. - -Keyboard Shortcut: `Ctrl+\` - -You can also drag and drop editors to create new editor groups and move - editors between groups. - - - -Keyboard Shortcut: `Ctrl+1` , `Ctrl+2` ,{' '} - `Ctrl+3` - - - -Keyboard Shortcut: `Ctrl+Shift+E` - -Keyboard Shortcut: `Ctrl+click` ( `Cmd+click` on - macOS) - -You can quickly open a file or image or create a new file by moving the - cursor to the file link and using `Ctrl+click` . - - - -Keyboard Shortcut: `Ctrl+K F` - -Navigate entire history: `Ctrl+Tab` - -Navigate back: `Alt+Left` - -Navigate forward: `Alt+Right` - - - -Create language associations for files that aren't detected correctly. - For example, many configuration files with custom file extensions are - actually JSON. - -```javascript -"files.associations": { - ".database": "json" - - } -``` - -AVAP TM Dev Studio will show you an error message when you try - to save a file that cannot be saved because it has changed on disk. AVAP - TM Dev Studio blocks saving the file to prevent overwriting - changes that have been made outside of the editor. - -In order to resolve the save conflict, click the Compare action in the - error message to open a diff editor that will show you the contents of the - file on disk (to the left) compared to the contents in AVAP - TM Dev Studio (on the right): - - - -Use the actions in the editor toolbar to resolve the save conflict. You - can either Accept your changes and thereby overwriting - any changes on disk, or Revert to the version on disk. - Reverting means that your changes will be lost. - -Note : The file will remain dirty and cannot be saved - until you pick one of the two actions to resolve the conflict. - -### Editing Hacks - -Here is a selection of common features for editing code. If the keyboard - shortcuts aren't comfortable for you, consider installing a keymap - extension for your old editor. - -Tip : You can see recommended keymap extensions in the{' '} - Extensions view by filtering the search to - @recommended:keymaps. - -To add cursors at arbitrary positions, select a position with your mouse - and use `Alt+Click` ( `Option+Click` on - macOS). - -To set cursors above or below the current position use: - -Keyboard Shortcut: `Ctrl+Alt+Up` or `Ctrl+Alt+Down` - - - -You can add additional cursors to all occurrences of the current selection - with Ctrl+Shift+L. - - - -If you do not want to add all occurrences of the current selection, you - can use Ctrl+D instead. This only selects the next occurrence after the - one you selected so you can add selections one by one. - - - -You can select blocks of text by holding `Shift+Alt` ( - `Shift+Option` on macOS) while you drag your mouse. A - separate cursor will be added to the end of each selected line. - - - -You can also use keyboard shortcuts to trigger column selection. - -You can add vertical column rulers to the editor with the editor.rulers - setting, which takes an array of column character positions where - you'd like vertical rulers. - -```javascript -{ - "editor.rulers": [20, 40, 60] - - } -``` - - - -Pressing the Alt key enables fast scrolling in the editor and Explorers. - By default, fast scrolling uses a 5X speed multiplier but you can control - the multiplier with the * Editor: Fast Scroll Sensitivity * - (editor.fastScrollSensitivity) setting. - -Keyboard Shortcut: `Shift+Alt+Up` or{' '} - `Shift+Alt+Down` - -Keyboard Shortcut: `Alt+Up` or `Alt+Down` - - - -Keyboard Shortcut: `Shift+Alt+Left` or{' '} - `Shift+Alt+Right` - - - -You can learn more in the Basic Editing documentation. - -Keyboard Shortcut: `Ctrl+Shift+O` - - - -You can group the symbols by kind by adding a colon, @:. - - - -Keyboard Shortcut: `Ctrl+T` - - - -The Outline view in the File Explorer (default collapsed at the - bottom) shows you the symbols of the currently open file. - - - -You can sort by symbol name, category, and position in the file and allows - quick navigation to symbol locations. - -Keyboard Shortcut: `Ctrl+G` - -Keyboard Shortcut: `Ctrl+U` - -Keyboard Shortcut: `Ctrl+K Ctrl+X` - - - -Currently selected source code: `Ctrl+K Ctrl+F` - -Whole document format: `Shift+Alt+F` - - - -Keyboard Shortcut: `Ctrl+Shift+[` and `Ctrl+Shift+]` - - - -You can also fold/unfold all regions in the editor with Fold All ( - `Ctrl+K Ctrl+0` ) and Unfold All ( - `Ctrl+K Ctrl+J` ). - -You can fold all block comments with Fold All Block Comments ( - `Ctrl+K Ctrl+/` ). - -Keyboard Shortcut: `Ctrl+L` - -Keyboard Shortcut: `Ctrl+Home` and `Ctrl+End` - -In a Markdown file, use - -Keyboard Shortcut: `Ctrl+Shift+V` - -In a Markdown file, use - -Keyboard Shortcut: `Ctrl+K V` - -The preview and editor will synchronize with your scrolling in either - view. - -### IntelliSense - -`Ctrl+Space` to trigger the Suggestions widget. - - - -You can view available methods, parameter hints, short documentation, etc. - -Select a symbol then type `Alt+F12` . Alternatively, you can use - the context menu. - -Select a symbol then type `F12` . Alternatively, you can use the - context menu or `Ctrl+click` ( `Cmd+click` on - macOS). - - - -You can go back to your previous location with the Go {' '} - > Back command or `Alt+Left` . - -You can also see the type definition if you press `Ctrl` ( - `Cmd` on macOS) when you are hovering over the type. - -Select a symbol then type `Shift+F12` . Alternatively, you can - use the context menu. - - - -Select a symbol then type `Shift+Alt+F12` to open the - References view showing all your file's symbols in a dedicated view. - -Select a symbol then type `F2` . Alternatively, you can use the - context menu. - -rename symbol - -Besides searching and replacing expressions, you can also search and reuse - parts of what was matched, using regular expressions with capturing - groups. Enable regular expressions in the search box by clicking the{' '} - Use Regular Expression .* button ( `Alt+R` - ) and then write a regular expression and use parentheses to define - groups. You can then reuse the content matched in each group by using $1, - $2, etc. in the Replace field. - - - -Install the ESLint extension. Configure your linter however you'd - like. Consult the ESLint specification for details on its linting rules - and options. - -Here is configuration to use ES6. - -```javascript -{ - "env": { - "browser": true, - "commonjs": true, - "es6": true, - "node": true - }, - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module", - "ecmaFeatures": { - "jsx": true, - "classes": true, - "defaultParams": true - } - }, - "rules": { - "no-const-assign": 1, - "no-extra-semi": 0, - "semi": 0, - "no-fallthrough": 0, - "no-empty": 0, - "no-mixed-spaces-and-tabs": 0, - "no-redeclare": 0, - "no-this-before-super": 1, - "no-undef": 1, - "no-unreachable": 1, - "no-use-before-define": 0, - "constructor-super": 1, - "curly": 0, - "eqeqeq": 0, - "func-names": 0, - "valid-typeof": 1 } - - } -``` - -See IntelliSense for your package.json file. - - - -Support for Emmet syntax. - - - -### Snippets - -File > Preferences >{' '} - Configure User Snippets , select the language, and create - a snippet. - -```javascript -"create component": { - "prefix": "component", - "body": [ "class $1 extends React.Component {", - "", - "\trender() {", - "\t\treturn ($2);", - "\t}", - "", - "}" - ] - }, -``` - -See more details in Creating your own Snippets. - -### Git integration - -Keyboard Shortcut: `Ctrl+Shift+G` - -Git integration comes with AVAP TM Dev Studio - "out-of-the-box". You can install other SCM providers from the - Extension Marketplace. This section describes the Git integration but much - of the UI and gestures are shared by other SCM providers. - -From the Source Control view, select a file to open the diff. - - - -Alternatively, click the Open Changes button in the top - right corner to diff the current open file. - -Views - -The default view for diffs is the side by side view . - -Toggle inline view by clicking the{' '} - More Actions (...) button in the top right and - selecting Toggle Inline View . - - - -If you prefer the inline view, you can set - "diffEditor.renderSideBySide": false. - -Accessible Diff Viewer - -Navigate through diffs with `F7` and `Shift+F7` . - This will present them in a unified patch format. Lines can be navigated - with arrow keys and pressing `Enter` will jump back in the diff - editor and the selected line. - - - -Edit pending changes - You can make edits directly in the pending changes of the diff view. - -Easily switch between Git branches via the Status Bar. - - - -Stage file changes - -Hover over the number of files and click the plus button. - -Click the minus button to unstage changes. - - - -Stage selected - -Stage a portion of a file by selecting that file (using the - arrows) and then choosing Stage Selected Ranges from - the Command Palette . - -Click the (...) button and then select{' '} - Undo Last Commit to undo the previous commit. The changes - are added to the Staged Changes section. - - - -AVAP TM Dev Studio makes it easy to see what Git commands are - actually running. This is helpful when learning Git or debugging a - difficult source control issue. - -Use the Toggle Output command ( - `Ctrl+Shift+U` ) and select Git in the - dropdown. - -View diff decorations in editor. See documentation for more details. - - - -During a merge, go to the Source Control view ( - `Ctrl+Shift+G` ) and make changes in the diff view. - -You can resolve merge conflicts with the inline CodeLens which lets you{' '} - Accept Current Change ,{' '} - Accept Incoming Change ,{' '} - Accept Both Changes , and Compare Changes - . - -```javascript -git config --global merge.tool vscode - - git config --global mergetool.vscode.cmd 'code --wait $MERGED' -``` - -```javascript -git config --global diff.tool vscode - - git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL - $REMOTE' -``` - -### Debugging - -From the Run and Debug view ( `Ctrl+Shift+D` ), select{' '} - create a launch.json file , which will prompt you to - select the environment that matches your project (Node.js, Python, - C++, etc). This will generate a launch.json file. Node.js support is - built-in and other environments require installing the appropriate - language extensions. See the debugging documentation for more details. - - - -Place breakpoints next to the line number. Navigate forward with the Debug - widget. - - - -Place breakpoints next to the line number. Navigate forward with the Debug - widget. - - - -Inspect variables in the Run panels and in the console. - - - -Logpoints act much like breakpoints but instead of halting the debugger - when they are hit, they log a message to the console. Logpoints are - especially useful for injecting logging while debugging production servers - that cannot be modified or paused. - -Add a logpoint with the Add Logpoint command in the left - editor gutter and it will be displayed as a "diamond" shaped - icon. Log messages are plain text but can include expressions to be - evaluated within curly braces ('{}'). - - - -A trigged breakpoint is a breakpoint that is automatically enabled once - another breakpoint is hit. They can be very useful when diagnosing failure - cases in code that happen only after a certain precondition. - -Triggered breakpoints can be set by right-clicking on the glyph margin, - selecting Add Triggered Breakpoint , and then choosing - which other breakpoint enables the breakpoint. - -http://https://code.visualstudio.com/assets/docs/editor/debugging/debug-triggered-breakpoint.mp4 - -### Task runner - -Select Terminal from the top-level menu, run the command{' '} - Configure Tasks , then select the type of task you'd - like to run. This will generate a tasks.json file with content like the - following. See the Tasks documentation for more details. - -```javascript -{ - // See https://go.microsoft.com/fwlink/?LinkId=733558 - // for the documentation about the tasks.json format - "version": "2.0.0", - "tasks": [ { - "type": "npm", - "script": "install", - "group": { - "kind": "build", - "isDefault": true - } - } - ] - } -``` - -There are occasionally issues with auto generation. Check out the - documentation for getting things to work properly. - -Select Terminal from the top-level menu, run the command{' '} - Run Task , and select the task you want to run. Terminate - the running task by running the command Terminate Task - - - -You can define a keyboard shortcut for any task. From the{' '} - Command Palette ( `Ctrl+Shift+P` ), - select Preferences: Open Keyboard Shortcuts File , bind - the desired shortcut to the workbench.action.tasks.runTask command, and - define the Task as args. - -For example, to bind `Ctrl+H` to the Run tests task, add the - following: - -```javascript -{ - "key": "ctrl+h", - "command": "workbench.action.tasks.runTask", - "args": "Run tests" - - } - - Run npm s -``` - - - -From the explorer you can open a script in the editor, run it as a task, - and launch it with the node debugger (when the script defines a debug - option like --inspect-brk). The default action on click is to open the - script. To run a script on a single click, set npm.scriptExplorerAction to - "run". Use the setting npm.exclude to exclude scripts in - package.json files contained in particular folders. - -With the setting npm.enableRunFromFolder, you can enable to run npm - scripts from the File Explorer's context menu for a folder. The - setting enables the command Run NPM Script in Folder ... - when a folder is selected. The command shows a Quick Pick list of the npm - scripts contained in this folder and you can select the script to be - executed as a task. - -### Portable mode - -AVAP TM Dev Studio has a Portable mode which lets you keep - settings and data in the same location as your installation, for example, - on a USB drive. - -### Insiders builds - -The AVAP™ Dev Studio Code team uses the Insiders version to test the - latest features and bug fixes of AVAP™ DS. You can also use the Insiders - version by downloading it here. - -* For Early Adopters - Insiders has the most recent code changes for users and extension authors to try out. -* Frequent Builds - New builds every day with the latest bug fixes and features. -* Side-by-side install - Insiders installs next to the Stable build allowing you to use either independently. diff --git a/docs/developer.avapframework.com/13_get_token_info_get_token_info.md b/docs/developer.avapframework.com/13_get_token_info_get_token_info.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md b/docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md b/docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md b/docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md b/docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md b/docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md b/docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md b/docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md b/docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md b/docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md b/docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md b/docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md b/docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md b/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md deleted file mode 100644 index 7b81937..0000000 --- a/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md +++ /dev/null @@ -1,34 +0,0 @@ -### Where: - -* status : Shows if the call has been successful (true) or not (false). -* codtran : Transaction code that identifies the executed operation. -* result : Contains information about the result of the service. -* user_id_registration : New user ID. -* longitud_otp : Length of the OTP associated with the operation. -* elapsed : Operation execution time. - -### Where: - -* status : Shows if the call has been successful (true) or not (false). -* level: Error importance level. -* message : Error message. -* error : Sole error code. -* Error catalogue Message Cause Email is required The parameter enviar_email_confirmar has been sent, but the parameter email has not been informed nor attached an email address The phone + prefix phone already exists The account identified by phone already exits and is activated An attempt to create an account without a phone was made Required parameter not provided phone An attempt was made to create a phone number with the wrong length The value of the parameter phone has the wrong length, depending on the country indicated in country_code An attempt was made to create an account with a prefix other than the country prefix != country_code The value of the parameter prefix does not match with the country code indicated in country_code The account is pending to sign the discharge The account already exists in the system, but is inactive The nick nick is already used The account identified by nick exists and it's active Country not found Controlled error in case the country code entered is wrong. We have found a problem and are working to fix it ... sorry for the inconvenience Uncontrolled error 500: Internal Server Error In order not to provide service information, a 500 error is thrown if a required parameter is not reported. 500: Internal Server Error You can also get such an error if an uncontrolled error occurs on the server Chart 2.a.2 : List of exceptions thrown by the service{' '} Alta Usuario . Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). -* Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} -* If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. -* If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. -* If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. -* If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. -* The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. -* The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). - -This section details, for each box, all the information necessary to - exploit the previously documented services. - -There is a user who has an "AFFILIATE" profile and who will - allow managing the community: - -### Examples - -Below are some examples of calls to the services described in this - document: diff --git a/docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md b/docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/1_download_101cli_download_101cli.md b/docs/developer.avapframework.com/1_download_101cli_download_101cli.md deleted file mode 100644 index a0a9d72..0000000 --- a/docs/developer.avapframework.com/1_download_101cli_download_101cli.md +++ /dev/null @@ -1,26 +0,0 @@ -This tool is designed to enable developers to work with the 101OBeX API. - With this tool, developers can retrieve information about their API - privileges, quotas, API Token, and more.. - -To begin, developers need to initialize their token using the - 'init' parameter. This process involves authenticating through the - Google OAuth API to obtain the API token, which is stored locally on their - computer. Once the token is initialized, developers can use the - 'info' parameter to access details about their API privileges, - projects, teams, and access token. Finally, developers have the option to - remove all downloaded information from their computer using the - 'clean' parameter. - -* https://github.com/101OBeXCorp/101obexcli/releases - -Mac: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip - -Linux: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip - -Win32: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md b/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md deleted file mode 100644 index 1871bc8..0000000 --- a/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md +++ /dev/null @@ -1,78 +0,0 @@ -101OBeX offers different plans: - -* Developer -* Startup -* Business -* Enterprise - -The ideal plan to become familiar with 101OBeX and introduce yourself to - the capabilities of the system. It provides complete access to APIs with a - maximum allowance of 500 monthly transactions so you can start your - project, with no a membership cost*. - -*There is no membership fee. Transactional costs, plug-ins and other - services within the membership are not included. To exploit these - services, it will be necessary to purchase a different plan. - -Starting at 50 $ per month, you will have 2 project slots with one active - project, and 5,000 monthly transactions to start your project. - -Starting at 150 $ per month, you can have up to 5 projects and 2 - pre-activated slots, along with 50,000 monthly transactions to launch your - business at the highest level. - -Geared towards corporations requiring special configurations. Membership - activation is done through the sales team:{' '} - sales@101obex.com . - -The chosen subscription type (developer, startup, business or - enterprise) that determines the configuration of the set of available - resources. - -* Total project slots. -* Pre-activated projects. -* Maximum transactional volume. -* Monthly transactions. -* Storage. -* Support. - -If payment is established monthly, charges will be made on the first day - of each month for the total membership amount, plus contracted add-ons and - plugins. For the first month, a prorated amount will be charged from the - plan's start date to the end of the month. If payment is established - annually, a full year of service will be charged, and renewal will occur - the day after the plan expires. - -101OBeX does not invoice exempt, since it is not a possibility - contemplated in the service. If any of the elements that make up a plan - exceed its limit, the service will stop being provided. - -To prevent your projects from being left without service, 101OBeX offers - the possibility of configuring alarms that will allow you to receive - notifications based on limits for each category. Although these alarms are - configurable, they have pre-established minimums to ensure that you are - always informed. - -The client always has the possibility of expanding the limits for each of - the components that make up a membership through the purchasing of add-ons - or by upgrading their plan. - -Clients can check their membership status in the dashboard at any time, - along with plan configuration in the Subscription Plan section of the menu - bar. - -In the Settings section of the menu, an option is available to track - transaction history linked to membership collections. How to change the - payment method Payment methods can be changed from monthly to annual and - vice versa at any time. How to change the payment method At present the - only form of payment is by credit card. But you can add new cards and - change your payment method at any time. - -You have the possibility to upgrade and downgrade your plan according to - your needs. - -At present the only form of payment is by credit card. But you can add new - cards and change your payment method at any time. - -You have the possibility to upgrade and downgrade your plan according to - your needs. diff --git a/docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md b/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md deleted file mode 100644 index 9a548ee..0000000 --- a/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md +++ /dev/null @@ -1,48 +0,0 @@ -Add-ons are collections of attributes or features that can be added to - your project. They allow for personalization, adaptation to your needs, - and optimization of usage. You can activate add-ons in different processes - throughout the acquisition of a plan or the life of a project. You can - also find in the Setting section an Add-on chapter in the settings section - dedicated exclusively to the administration of these components. - -Currently, the following Add-ons are available: - - - -Allows you to add a new empty slot to later activate a project and start - working with it. Plans have a defined limit for projects and active slots. - This add-on allows expansion to the maximum permitted slots. - - - -Expand the volume of monthly requests in your plan and manage the total - set of requests for each of your projects. The volume of requests - available in a plan can never exceed the maximum request capacity - established in that plan. - -Plans have a predefined storage capacity. For example, a Business plan has - a maximum storage capacity of 2 Teras and a default storage of 1 Gb. This - means that the storage can be increased from the default 1 Gb to 2 Teras - maximum, but no more. If more storage is required, it will be necessary to - upgrade the plan. - -If your project or set of project exceed the maximum storage allowed for - the plan you have, you will need to upgrade the your plan. - - - -Access to professional support through the 101OBeX platform's suite of - engineers. - -We recommend reviewing the Pricing document for details about the pricing - configuration of the entire Add-on catalog. If a project or node reaches - the limit in any of its properties or configurations, the requests will - begin to return. To prevent this situation from causing problems in your - projects, 101OBeX is configured to support up to 10% more in each of the - configurations during the next 24 hours from the moment any of the limits - are exceeded. After this period, applications will begin to be given back. - -To further prevent such scenarios, 101OBeX employs an alarm system. This - system sends notifications when specific properties approach predefined - thresholds, granting you control over your project's growth at all - times. diff --git a/docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md b/docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md b/docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md b/docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md b/docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md b/docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/2_download_github_download_github.md b/docs/developer.avapframework.com/2_download_github_download_github.md deleted file mode 100644 index 6f5a626..0000000 --- a/docs/developer.avapframework.com/2_download_github_download_github.md +++ /dev/null @@ -1,26 +0,0 @@ -This tool is designed to enable developers to work with the 101OBeX API. - With this tool, developers can retrieve information about their API - privileges, quotas, API Token, and more. - -To begin, developers need to initialize their token using the - 'init' parameter. This process involves authenticating through the - Google OAuth API to obtain the API token, which is stored locally on their - computer. Once the token is initialized, developers can use the - 'info' parameter to access details about their API privileges, - projects, teams, and access token. Finally, developers have the option to - remove all downloaded information from their computer using the - 'clean' parameter. - -* https://github.com/101OBeXCorp/101obexcli/releases/ - -Mac: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip - -Linux: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip - -Win32: - -* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md b/docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/31_github_github_cli.md b/docs/developer.avapframework.com/31_github_github_cli.md deleted file mode 100644 index d47fbdf..0000000 --- a/docs/developer.avapframework.com/31_github_github_cli.md +++ /dev/null @@ -1,5 +0,0 @@ -This tool is designed to enable developers to work with the 101OBeX API. - With this tool, developers can retrieve information about their API - privileges, quotas, API Token, and more. - -https://github.com/101OBeXCorp/101obexcli diff --git a/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md b/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md deleted file mode 100644 index ba770f2..0000000 --- a/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md +++ /dev/null @@ -1,17 +0,0 @@ -* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero - -* Commons: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion - -* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos - -* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar - -* Wallet: FILE PROCEDURE URL `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado - -* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges - -* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm - -* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM - -* ...: FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes . diff --git a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md deleted file mode 100644 index 4a24b1f..0000000 --- a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md +++ /dev/null @@ -1,17 +0,0 @@ -* Management Console: FILE PROCEDURE URL FILES `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero - -* Tools: FILE PROCEDURE URL FILED `divisas.py` listado /ws/divisas.py/listado X `firma.py` firmar /ws/firma.py/firmar X `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login X `Accesos` `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion - -* Loyalty: FILE PROCEDURE URL FILED `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos - -* Checkout: FILE PROCEDURE URL FILED `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio X `Bills2` `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios X `Bills2` `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio X `Bills2` `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info X `Bills2` `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista X `Bills2` `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar X `Bills2` `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar Se ejecuta a traves de `pagodeservicios.py` - -* Wallet: FILE PROCEDURE URL NOTES FILED `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes X `origenes_de_fondos` `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad X `movimientos.py` listado /ws/movimientos.py/listado X - -* Notifications: FILE PROCEDURE URL FILED `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges - -* Onboarding: FILE PROCEDURE URL NOTES FILED `cuentas.py` alta /ws/cuentas.py/alta X `alta_baja_modificacion` `cuentas.py` baja /ws/cuentas.py/baja X `alta_baja_modificacion` `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos X `alta_baja_modificacion` `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick X `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm - -* Remittance (Money movements): FILE PROCEDURE URL NOTES FILED `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar X `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir X `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion X Falta revisar la repeticion de `tiempoaire.py` `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM - -* ...: FILE PROCEDURE URL FILED `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion X Esta mal la URL indicada en{' '} `Interfaz Servicios Pagos` `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md deleted file mode 100644 index d5eb393..0000000 --- a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md +++ /dev/null @@ -1,17 +0,0 @@ -* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero - -* Tools: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion - -* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos - -* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar - -* Wallet: FILE PROCEDURE URL NOTES `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado - -* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges - -* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm - -* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM - -* ...:(?) FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md b/docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md b/docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/33_informe_Informe_altas_EN.md b/docs/developer.avapframework.com/33_informe_Informe_altas_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md b/docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md b/docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md b/docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md deleted file mode 100644 index bfb9cda..0000000 --- a/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md +++ /dev/null @@ -1,199 +0,0 @@ -Report on the number of users showing the users who have registered by - themselves and those who have registered through an affiliate. - -POST: {' '} - `URL_BASE + /ws/admin.py/informesadmin` - -## Receives: - -All the parameters that the service receives must be indicated in the body - of the request - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "codtran" - : - , - "resultado" - :{' '} - { - "mensaje" - : - } - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false) -* `resultado:` Service answer -* `mensaje:` Indicates the email to which the report will arrive. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - : - , - "nivel" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `nivel:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/admin.py/informesadmin" - - payload ={' '} - { - 'codigo_pais' - :{' '} - 'MX' - , - 'id_usuario' - :{' '} - '4532' - , - 'id_sesion' - :{' '} - '406-dwr5sTs_m29rnbzw9_miJQ==' - , - 'informe' - :{' '} - 'informeconsejo' - } - files ={' '} - [ - ] - headers={' '} - { - } - response = requests - .request - ( - "POST" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'POST', - 'url': 'URL_BASE/ws/admin.py/informesadmin', - 'headers': {}, - formData: { - 'codigo_pais': 'MX', - 'id_usuario': '4532', - 'id_sesion': '406-dwr5sTs_m29rnbzw9_miJQ==', - 'informe': 'informeconsejo' - } - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - formdata.append("codigo_pais", "MX"); - formdata.append("id_usuario", "4532"); - formdata.append("id_sesion", - "406-dwr5sTs_m29rnbzw9_miJQ=="); - formdata.append("informe", "informeconsejo"); - var requestOptions = { - method: 'POST', - body: formdata, - redirect: 'follow' - }; - fetch("URL_BASE/ws/admin.py/informesadmin", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request POST{' '} - - 'URL_BASE/ws/admin.py/informesadmin' - {' '} - \ - --form - 'codigo_pais=MX' - {' '} - \ - --form - 'id_usuario=4532' - {' '} - \ - --form{' '} - - 'id_sesion=406-dwr5sTs_m29rnbzw9_miJQ==' - {' '} - \ - --form{' '} - 'informe=informeconsejo' -``` - -## Business logic: - -In order to run this service, it is necessary to do it from a user logged - into the system who has an administrator profile. With this endpoint the - requested report is generated and sent to the email of the administrator - user who requests it. diff --git a/docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md b/docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md b/docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/35_inter_inter_networks_movement.md b/docs/developer.avapframework.com/35_inter_inter_networks_movement.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md b/docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md b/docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/36_last_last_order_summary.md b/docs/developer.avapframework.com/36_last_last_order_summary.md deleted file mode 100644 index 78e2000..0000000 --- a/docs/developer.avapframework.com/36_last_last_order_summary.md +++ /dev/null @@ -1,344 +0,0 @@ -## ws/orders.py/last_order_summary - -### Receives - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -```javascript -{ - "status" - :{' '} - true - , - "codtran" - :{' '} - "f856c5db007fcaa5a00b9a4d56a9d40a" - , - "resultado" - :{' '} - [ - 'status': 'Being sent' - , - 'status_code':{' '} - 4001 - , - 'transaction_code':{' '} - 'a556a5de007fcaa5a00b4a4d56a9d40a' - , - 'order_code':{' '} - 10023 - , - 'date':{' '} - 2021 - -03 - -01 - , - 'client_address': 'Street - without number', - 'establishment_coordinates' - :{' '} - { - 'lat':{' '} - 40 - , - 5431311 - , - 'lng':{' '} - -3 - , - 6302845 - } - , - 'location_gps':{' '} - { - 'lat':{' '} - 40 - , - 5431311 - , - 'lng':{' '} - -3 - , - 6302845 - } - 'delivery_time': ' - 12 - : - 03 - : - 01' - , - 'delivery_type':{' '} - 'delivery', - 'order_products_codes' - : - {' '} - [ - { - "article_id" - : - 35003 - , - "custom" - : - [ - [ - {' '} - - "da9922e8-57a6-4440-97db-0de2a486b323" - - , - {' '} - - "00e9a2cc-60c8-4e98-ac9b-accf15b7373a" - - , - {' '} - - "a6aacb94-8fad-4394-a2f1-e328fcca9c79" - - ] - , - [ - {' '} - - "757ccbe3-d877-485d-ae10-89f0b78c133c" - - ] - ] - } - ] - , - 'purchase_detail': 'Palo - Alto ( Lechuga , Tomate{' '} - , Cebolla{' '} - , Aguacate{' '} - , )' - , - 'order_category_id':{' '} - 'FL013', - 'contact':{' '} - { - "firstName" - : - "Rafa" - , - "lastName" - : - " " - , - "mail" - : - "rafa.ruiz@waynnovate.com" - , - "phone" - : - "643340526" - } - , - 'status_history':{' '} - [ - { - 'new_status':'Being sent' - , - 'new_status_code':{' '} - 4001 - , - 'previous_status': 'Being - picked up', - 'previous_status_code': - 4000 - , - 'status_change_date': ' - 2021 - -02 - -01{' '} - 13 - : - 00.01'{' '} - } - ] - 'delivery_price':{' '} - 1.9 - , - 'delivery_distance':{' '} - 34000.34) - , - ] - "elapsed" - :{' '} - 0.06796097755432129 - - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `codtran:` Operation result. -* `result:` Data of the last order in course. `status:` Status of the order. `status_code` : Code of the actual status of the order. `transaction_code` : Code of the transaction `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that gives the order. `location_gps:` Coordinates of the direction that receives the delivery. `delivery_time:` Hour of the delivery. `delivery_type:` Type of delivery (to pickup/ to have sent). `order_products_codes:` List of product codes and their options. `purchase_detail:` List of the names of the products with their options. `order_category_id:` Identifier of the establishment that provides the product. `contact:` Contact of the client. `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment that provides the order. -* `status:` Status of the order. -* `status_code` : Code of the actual status of the order. -* `transaction_code` : Code of the transaction -* `order_code:` Code of the order. -* `date:` Date of the order. -* `client_address:` Address of the client. -* `establishment_coordinates` : Coordinates of the establishment that gives the order. -* `location_gps:` Coordinates of the direction that receives the delivery. -* `delivery_time:` Hour of the delivery. -* `delivery_type:` Type of delivery (to pickup/ to have sent). -* `order_products_codes:` List of product codes and their options. -* `purchase_detail:` List of the names of the products with their options. -* `order_category_id:` Identifier of the establishment that provides the product. -* `contact:` Contact of the client. -* `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. -* `new_status:` New status. -* `new_status_code:` Code of the new status. -* `previous_status:` Previous status. -* `previous_status_code:` Previous status code. -* `status_change_date:` Time and date of the change of status. -* `delivery_price:` Price of the delivery. -* `delivery_distance:` Distance between the client and the establishment that provides the order. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - - - url ={' '} - - "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" - - - - payload= - { - } - - headers ={' '} - { - '101ObexApiKey' - :{' '} - 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' - - } - - - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data - =payload - ) - - - print - (response - .text - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - - var options = { - 'method': 'GET', - 'url': - 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', - 'headers': { - '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' - } - - }; - - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - - }); -``` - -### JavaScript - Fetch: - -```javascript -var myHeaders = new Headers(); - - myHeaders.append("101ObexApiKey", - "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); - - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' - - }; - - - fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' - {' '} - \ - - --header{' '} - - '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' -``` - -## Business logic: - -The objective of this service is to retrieve the orders that are in course - and its details. diff --git a/docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md b/docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md b/docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md b/docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md b/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md deleted file mode 100644 index 6d32f59..0000000 --- a/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md +++ /dev/null @@ -1 +0,0 @@ -* General list: FILE PROCEDURE URL NOTE middleware.py comprobar_disponibilidad /ws/middleware.py/comprobar_disponibilidad I assume not middleware.py datos_cuenta /ws/middleware.py/datos_cuenta I assume not middleware.py enviar_sms /ws/middleware.py/enviar_sms I assume not middleware.py firmar_santander /ws/middleware.py/firmar_santander I assume not middleware.py transaccion_contrapartida /ws/middleware.py/transaccion_contrapartida I assume not middleware.py transaccion_entre_paises /ws/middleware.py/transaccion_entre_paises I assume not util.py saldo_quiubas /ws/util.py/saldo_quiubas I assume not pawn.py carvaloration /ws/pawn.py/carvaloration KO pawn.py cml2 /ws/pawn.py/cml2 KO pawn.py get_catalog /ws/pawn.py/get_catalog KO pawn.py manager /ws/pawn.py/manager KO pawn.py notify /ws/pawn.py/notify KO pawn.py pam /ws/pawn.py/pam KO pawn.py request /ws/pawn.py/request KO pawn.py status /ws/pawn.py/status KO diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md deleted file mode 100644 index ccb5e28..0000000 --- a/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md +++ /dev/null @@ -1,215 +0,0 @@ -This service is used to obtain the currencies of the countries active in - the system. - -GET: - `URL_BASE + /ws/currencies.py/listado` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - :{' '} - true - , - "currencies" - :{' '} - [ - { - "change_sale" - : - , - "currency_data" - :{' '} - { - "abbreviation" - : - , - "suffix" - : - , - "format" - : - , - "symbol" - : - , - "prefix" - : - , - "decimals" - : - , - "id" - : - } - , - "abbreviation" - : - , - "format" - : - , - "currency_symbol" - : - , - "precision" - : - , - "change_purchase" - : - , - "change_reference" - : - , - "name" - : - , - "placeholder_currency" - : - } - ] - , - "elapsed" - :{' '} - 0.008363962173461914 - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `currencies:` List of currencies returned by the system. -* `currency_data:` Contains the different details of the currency used for the operation.. -* `abbreviation:` The abbreviated name of the currency(EUR, MXN). -* `suffix:` Indicates the suffix that is applied in the currency format(pesos, euros). -* `format:` The full format that applies to the currency, it includes the suffix and the prefix. -* `symbol:` The symbol associated to the currency(€, ¢, $). -* `prefix:` The prefix that is applied in the currency format. -* `decimals:` The maximum number of decimal places that will be included in the currency format. -* `id:` Identifier of the currency in BBDD. -* `abbreviation:` The abbreviated name of the currency(EUR, MXN). -* `format:` The full format that applies to the currency, it includes the suffix and the prefix. -* `name:` Full name of the currency. -* `precision:` Number of decimal places allowed by the currency. -* `currency_symbol:` The symbol associated to the currency (€, ¢, $). -* `placeholder_currency:` The text of the currency always showing a value of 0. -* `change_purchase:` Currency price for purchase. -* `change_reference:` The value of the currency. -* `change_sale:` Currency price for sale. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/currencies.py/listado" - - payload ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': 'URL_BASE/ws/currencies.py/listado', - 'headers': {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var requestOptions = { - method: 'GET', - redirect: 'follow' - }; - fetch("URL_BASE/ws/currencies.py/listado", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/currencies.py/listado' -``` - -## Business logic - -This service, through the 'telefone', searches for the user whose - movements are to be consulted, and returns a list with each of the - user's movements between two given dates. diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md deleted file mode 100644 index ebe3a16..0000000 --- a/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md +++ /dev/null @@ -1,165 +0,0 @@ -This service is used to obtain the movements made by a large issuer user - within the system. - -GET: {' '} - `URL_BASE + /ws/granemisor.py/listado` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - :{' '} - true - , - "datos" - :{' '} - [ - [ {' '} - ] - ] - , - "numero_resultados" - : - , - "totales" - : - , - "columnas" - :{' '} - [ - ] - , - "limite_resultados" - : - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `datos:` they are a list of lists in which each one contains the values for each of the columns. -* `elapsed:` Operation execution time. -* `numero_resultados:` Number of results that come in 'datos' -* `totales:` Total number of results -* `columnas:` Name of each of the values found in each of the lists in the data list.. -* `limite_resultados:` Maximum number of results that come in the query. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "nivel" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `nivel:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020" - - payload ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020', - 'headers': {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var requestOptions = { - method: 'GET', - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020' -``` - -## Business logic: - -This service returns a list with each of the movements of the large issuer - user between two given dates. diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md b/docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md index a11f3a4..99ae232 100644 --- a/docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md +++ b/docs/developer.avapframework.com/3_Currencies_And_Fx_Exchange.md @@ -2,7 +2,7 @@ This document presents all the AVAP extensions for Microsoft Visual Studio Code, ### Installation of Extensions -It is recommended to install the extensions from the Microsoft Visual Studio Code marketplace, although you can also download them manually from the AVAP ID portal and install them in your IDE. +It is recommended to install the extensions from the Microsoft Visual Studio Code marketplace , although you can also download them manually from the AVAP ID portal and install them in your IDE. ### Available Extensions @@ -14,7 +14,7 @@ It is recommended to install the extensions from the Microsoft Visual Studio Cod ### Prerequisites -Before starting to work with the extensions, it is important to understand the credential and identification system known as AVAP ID. All users need to be registered at AVAP ID and have an active account, as well as a developer token to activate the AVAP extensions in Microsoft Visual Studio Code. +Before starting to work with the extensions, it is important to understand the credential and identification system known as AVAP ID. All users need to be registered at AVAP ID and have an active account, as well as a developer token to activate the AVAP extensions in Microsoft Visual Studio Code. ### Activation and Use of Extensions @@ -22,4 +22,4 @@ Once the developer has their developer token, they can install the extensions fr With AVAP extensions for Microsoft Visual Studio Code, developers can carry out the full lifecycle of an API, from development to testing, publication, and administration. -For more information, check out AVAP Alexandria at alexandria.avapframework.com and join the user community at AVAP Communities. +For more information, check out AVAP Alexandria at alexandria.avapframework.com and join the user community at AVAP Communities . diff --git a/docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md b/docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md b/docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/40_logout_Logout_Services_EN.md b/docs/developer.avapframework.com/40_logout_Logout_Services_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md b/docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md b/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md deleted file mode 100644 index 091def3..0000000 --- a/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md +++ /dev/null @@ -1,29 +0,0 @@ -In your project, you can work with loyalty wallets to which you can assign - a FIAT currency, a non-FIAT currency or a new currency created by you, to - which you give a purchase and sale values. This is referred to as a - personalized wallet by default. - -As a concept, a personalized or loyalty wallet accumulates balance or - points that can later be exchanged for products, but that in no case can - be transformed into liquid money regardless of whether it is the result of - an ATM withdrawal, bank account, purchase of prepaid cards, or any other - concept that facilitates cashing out from a loyalty wallet. - -Transfers between users are not allowed unless the destination or wallet - of the beneficiary of the transfer is a wallet of the same type with the - same limitations and the configuration of the wallet allows such - transfers. - -Personalized or loyalty wallets rely on the currency table of the FX - Exchange service to carry out the operations of buying and selling - products from loyalty wallets, thus allowing customers to buy any type of - product, if they meet the conditions to be acquired by a source of - loyalty-type funds regardless of the type of currency held by the product - to be purchased. - -In this way, a customer with a loyalty wallet in USD can purchase products - published in EUR or MXN without any problem. Just like a customer with a - loyalty wallet in My_Coin, can purchase the same products mentioned above. - It is in the configuration of the FX Exchange currency table where the - purchase and sale price of My_Coin is determined, with USD serving as the - reference. diff --git a/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md b/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md deleted file mode 100644 index e52ffd6..0000000 --- a/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md +++ /dev/null @@ -1,18 +0,0 @@ -At 101OBeX we are committed to universality, integration, and - collaboration with other companies who enrich and help us enhance and - expand our array of services. - -Thanks to our marketplace, third parties can publish their APIs and add - value to the platform. - -From the Marketplace section you can browse the different published - plugins, install, configure and exploit each one of them. - -Keep in mind that plugins can be purchased, in which case the cost of the - plug-in will be processed as part of the recurring plan charges with each - collection period. - -Furthermore, a plug-in may require a pre-funded balance for its correct - operation, in which case you must maintain a sufficient balance in your - wallet. Adhering to the provided instructions for each plug-in to ensure - its proper configuration and correct operation. diff --git a/docs/developer.avapframework.com/43_new_new.md b/docs/developer.avapframework.com/43_new_new.md deleted file mode 100644 index e485291..0000000 --- a/docs/developer.avapframework.com/43_new_new.md +++ /dev/null @@ -1,192 +0,0 @@ -## ws/orders.py/last_order_summary - -### Receives - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -```javascript -{ - "status" - :{' '} - true - , - "codtran" - :{' '} - "f856c5db007fcaa5a00b9a4d56a9d40a" - , - "order_code" - :{' '} - 12034 - "elapsed" - :{' '} - 0.06796097755432129 - - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `codtran:` Operation result. -* `order_code:` Identifier of the order in the system. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - - - url ={' '} - - "http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle - sin - numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": - 40,5431311,\"lng\": -3,6302845 - }&contact=Manuel&order_amount=30 - €&shipping_amount=3,5 €" - - - - payload= - { - } - - headers ={' '} - { - '101ObexApiKey' - :{' '} - 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' - - } - - - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data - =payload - ) - - - print - (response - .text - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - - var options = { - 'method': 'GET', - 'url': - 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle - sin - numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": - 40,5431311,"lng": -3,6302845 - }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 - €', - 'headers': { - '101ObexApiKey': 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' - } - - }; - - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - - }); -``` - -### JavaScript - Fetch: - -```javascript -var myHeaders = new Headers(); - - myHeaders.append("101ObexApiKey", - "WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI"); - - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' - - }; - - - fetch("http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle - sin - numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": - 40,5431311,\"lng\": -3,6302845 - }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 - €", requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location -g --request GET{' '} - - 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle - sin - numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": - 40,5431311,"lng": -3,6302845 - }&contact=Manuel&order_amount=30 - €&shipping_amount=3,5 €' - {' '} - \ - - --header{' '} - - '101ObexApiKey: WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' -``` - -## Business logic: - -The objective of this service is to add an order. diff --git a/docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md b/docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md deleted file mode 100644 index 445f6ff..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md +++ /dev/null @@ -1,178 +0,0 @@ -This service is used to obtain the affiliate. - -GET: {' '} - `URL_BASE + /ws/util.py/affiliates` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "codtran" - : - "affiliates" - :{' '} - [ - { - "phone" - : - , - "affiliate_id" - : - , - "country" - : - , - "name" - : - , - "other_data" - : - , - "allow_prefunding" - : - } - ] - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `codtran:` Transaction code that identifies the executed operation. -* `affiliates:` List of affiliates of the system. -* `phone:` Affiliate phone number. -* `affiliate_id:` Affiliate identifier. -* `country:` Affiliate Country Code. -* `name:` Affiliate name. -* `other_data:` Other affiliate data. -* `allow_prefunding:` Boolean that indicates if prefunding is allowed in the affiliate. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==" - - payload ={' '} - { - } - files ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==', - 'headers': {}, - formData: {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - var requestOptions = { - method: 'GET', - body: formdata, - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' -``` - -## Business logic: - -By means of this service all the affiliates of the system are obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md deleted file mode 100644 index 71f2ae0..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md +++ /dev/null @@ -1,150 +0,0 @@ -This service is used to obtain the operators of the chosen country. - -GET: - `URL_BASE + /ws/util.py/operators` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "operators" - :{' '} - [ - { - "name" - : - , - "operator_code" - : - } - ] - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `operators:` List with the telephone operators of the country. -* `name:` Name of the operator -* `operator_code:` Identifier of the operator. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/util.py/operators?country_code=MX" - - payload ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': 'URL_BASE/ws/util.py/operators?country_code=MX', - 'headers': {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var requestOptions = { - method: 'GET', - redirect: 'follow' - }; - fetch("URL_BASE/ws/util.py/operators?country_code=MX", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/util.py/operators?country_code=MX' -``` - -## Business logic: - -By means of this service you get all the operators of the indicated - country. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md deleted file mode 100644 index 9a497b1..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md +++ /dev/null @@ -1,225 +0,0 @@ -This service is used to obtain the active countries in the system. - -GET: - `URL_BASE + /ws/util.py/countries` - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - :{' '} - true - , - "countries" - :{' '} - [ - { - "currency_symbol" - :{' '} - "$ " - , - "currency_data" - :{' '} - { - "abbreviation" - :{' '} - "MXN" - , - "suffix" - :{' '} - "pesos" - , - "format" - :{' '} - "$%.2f pesos" - , - "symbol" - :{' '} - "$" - , - "prefix" - :{' '} - "$" - , - "decimals" - :{' '} - 2.0 - , - "id" - :{' '} - 70 - } - , - "currency_format" - :{' '} - "$%.2f pesos" - , - "precision_currency" - :{' '} - 2.0 - , - "phone_longitude" - :{' '} - 10 - , - "currency" - :{' '} - "Mexico Peso" - , - "name" - :{' '} - "Mexico" - , - "prefix" - :{' '} - "52" - , - "phone" - :{' '} - "98780" - , - "placeholder_currency" - :{' '} - "$0.00 pesos" - , - "country_code" - :{' '} - "MX" - } - ] - , - "elapsed" - :{' '} - 0.0168149471282959 - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `countries:` List with the active countries of the system. -* `currency_symbol:` Symbol of the country's currency. -* `currency_data:` Contains the different details of the currency used in the operation. -* `abbreviation:` The abbreviated name of the currency (EUR, MXN). -* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). -* `format:` The full format that applies to the currency, it includes the suffix and the prefix. -* `symbol:` The symbol associated to the currency (€, ¢, $). -* `prefix:` The prefix that is applied in the currency format. -* `decimals:` The maximum number of decimal places that will be included in the currency format. -* `id:` Identifier of the currency in BBDD. -* `currency_format:` Format to be applied to the amounts that use this currency. -* `precision_currency:` Decimals of the amounts that use this currency. -* `phone_longitude:` Size of telephone numbers used in the country. -* `currency:` Full name of the country's currency. -* `name:` Name of the country. -* `prefix:` Telephone prefix of the country's telephone numbers. -* `phone:` Telephone from which the system's SMS for the country are sent. -* `placeholder_currency:` Text to display in the fields that are of the currency and have no value. -* `country_code:` Code of the country. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - "URL_BASE/ws/util.py/countries" - payload ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': 'URL_BASE/ws/util.py/countries', - 'headers': {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var requestOptions = { - method: 'GET', - redirect: 'follow' - }; - fetch("URL_BASE/ws/util.py/countries", requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - 'URL_BASE/ws/util.py/countries' -``` - -## Business logic: - -By means of this service all the active countries in the system are - obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md deleted file mode 100644 index 3157d59..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md +++ /dev/null @@ -1,163 +0,0 @@ -This service is used to obtain users' profiles. - -GET: - `URL_BASE + /ws/util.py/profiles` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "profiles" - :{' '} - [ - { - "name" - : - , - "code" - : - , - "id" - : - } - ] - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `profiles:` List of the profiles. -* `name:` Profile name. -* `code:` Profile role name -* `id:` Profile identifier. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==" - - payload ={' '} - { - } - files ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==', - 'headers': {}, - formData: {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - var requestOptions = { - method: 'GET', - body: formdata, - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' -``` - -## Business logic: - -By means of this service all the system profiles are obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md deleted file mode 100644 index 6b86b2f..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md +++ /dev/null @@ -1,150 +0,0 @@ -This service is used to obtain the regions of the indicated country. - -GET: - `URL_BASE + /ws/util.py/regions` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "regions" - :{' '} - [ - { - "name" - : - , - "region_id" - : - } - ] - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `regions:` List of regions. -* `name:` Name of the region -* `region_id:` Identifier of the region. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/util.py/regions?county_code=MX" - - payload ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': 'URL_BASE/ws/util.py/regions?county_code=MX', - 'headers': {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var requestOptions = { - method: 'GET', - redirect: 'follow' - }; - fetch("URL_BASE/ws/util.py/regions?county_code=MX", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/util.py/regions?county_code=MX' -``` - -## Business logic: - -By means of this service all the regions of the indicated country are - obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md deleted file mode 100644 index b4b56fa..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md +++ /dev/null @@ -1,164 +0,0 @@ -This service is used to obtain the users' profiles. - -GET: - `URL_BASE + /ws/util.py/get_caracteristicas` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "characteristics" - :{' '} - { - } - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `characteristics:` Container object of the characteristics of the indicated service. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login" - - payload ={' '} - { - } - files ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login', - 'headers': {}, - formData: {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - var requestOptions = { - method: 'GET', - body: formdata, - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX /{' '} - &user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D&point_of_entry=login' -``` - -## Business logic: - -In order to make this call it is necessary to make it with a user who is - logged into the system, except for the following entry points: - -* registration -* login -* restartpin -* forwardotpregistration - -Each element of the answer that is within the characteristics is formed - with the following structure: - -being the value of the property of any type. - - diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md deleted file mode 100644 index a73d6ba..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md +++ /dev/null @@ -1,173 +0,0 @@ -This service is used to obtain the user information - -GET: {' '} - `URL_BASE + /ws/users.py/info_usuario` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "user_id" - : - , - "number_of_transactions" - : - , - "amount_of_transactions" - : - , - "point_program" - :{' '} - [ - { - 'name': - , 'amount' - : - , 'id' - : - } - ] - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `user_id:` Identifier of the user from whom we have obtained the information. -* `number_of_transactions:` Number of transactions of the indicated type in the last 30 days. -* `amount_of_transactions:` Total amount of transactions of the indicated type of the last 30 days. -* `point_program:` List with the point programs in which the user is. -* `name:` Points program name. -* `amount:` User points in the points program. -* `id:` Points program identifier. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero" - - payload ={' '} - { - } - files ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero', - 'headers': {}, - formData: {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - var requestOptions = { - method: 'GET', - body: formdata, - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA%3D%3D&user=7229063245&point_of_entry=solicituddinero' -``` - -## Business logic: - -By means of this service the data of the user indicated with the indicated - parameter is obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md deleted file mode 100644 index d4c0421..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md +++ /dev/null @@ -1,151 +0,0 @@ -This services is used to obtain the security questions. - -GET: {' '} - `URL_BASE + /ws/seguridad_itf.py/preguntas_de_seguridad` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "preguntas" - :{' '} - [ - { - "id" - : - , - "texto" - : - } - ] - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `preguntas:` List of security questions selected by the user to be able to answer them. -* `id:` Identifier of the security questions. (Necessary to be able to send each question with its answer) -* `texto:` Security question. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "nivel" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `nivel:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71" - - payload ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71', - 'headers': {} - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var requestOptions = { - method: 'GET', - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71' -``` - -## Business logic: - -MP-140 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md deleted file mode 100644 index e8e855a..0000000 --- a/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md +++ /dev/null @@ -1,330 +0,0 @@ -This service gives you back all data associated to the chosen transaction.{' '} - -POST: - `URL_BASE + /ws/movimientos.py/transaction_data` - -## Receives: - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "transaction_data" - :{' '} - { - "telefono_cuenta" - : - , - "transaction_code" - : - , - "user" - : - , - "user_email" - : - , - "origin_of_funds" - : - , - "destination" - : - , - "destination_phone" - : - , - "destination_language_id" - : - , - "invoice" - : - , - "reference" - :{' '} - null - , - "concept" - : - , - "action" - : - , - "date" - : - , - "service_name" - : - , - "characteristics" - :{' '} - { - - } - , - "affiliate" - : - , - "affiliate_url" - : - , - "affiliate_url_image" - : - , - "amount" - : - , - "amount_fmt" - : - , - "total_commission" - : - , - "total_commission_fmt" - : - , - "commission" - : - , - "commission_fmt" - : - , - "vat_commission" - : - , - "vat_commission_fmt" - : - , - "vat_operation" - : - , - "vat_operation_fmt" - : - , - "currency" - : - , - "total" - : - , - "total_fmt" - : - "subject_ticket" - : - , - {' '} - "subject_ticket_destination" - : - , - "ticket_html" - : - } - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `transaction_data:` Data of the requested transaction. -* `telefono_cuenta:` Telephone number of the account of origin of the transaction -* `transaction_code:` Transaction code. -* `user:` Name of the user of origin of the transaction.. -* `user_email:` Email of the originating user of the transaction. -* `origin_of_funds:` Name of the source of funds used in the operation. -* `destination:` Name of the target user of the operation. -* `destination_phone:` Telephone number of the destination account of the operation. -* `destination_language_id:` Language identifier of the target user for the operation. -* `invoice:` Invoice number/invoice of the operation. -* `reference:` Invoice / page number of the operation. -* `concept:` Descriptive text of the operation. -* `action:` Name of the action that was executed with this operation. -* `date:` Date on which the transaction occurs. -* `service_name:` Text with the name of the service, if it does not have a name, the concept is returned. -* `characteristics:` Dictionary with the characteristics of the service, explained in greater depth on the endpoint{' '} `get_caracteristicas` . -* `affiliate:` Name of the affiliate of the user who executed the operation. -* `affiliate_url:` Affiliate website url. -* `affiliate_url_image:` Url of the affiliate image (logo). -* `amount:` Amount of the operation without format or commissions. -* `amount_fmt:` Amount of the operation with the applied format, but without commissions. -* `total_commission:` Amount of commission charged without format and with VAT applied. -* `total_commission_fmt:` Amount of commission charged with the format and VAT applied. -* `commission:` Amount of the commission charged to the user without the format and without VAT. -* `commission_fmt:` Formatted commission amount and if VAT applied. -* `vat_commission:` VAT amount of raw commission. -* `vat_commission_fmt:` Commission VAT amount with the format. -* `vat_operation:` VAT amount applied to the operation carried out without format. -* `vat_operation_fmt:` Amount of VAT applied to the operation carried out with the applied currency format.. -* `currency:` Name of the currency used in the operation. -* `total:` Total amount of the operation (amount + commission + VAT), without format. -* `total_fmt:` Total amount of the operation (amount + commission + VAT), with format. -* `subject_ticket:` Subject text of the ticket that is sent by mail to the user of origin of the operation. -* `subject_ticket_destination:` Subject text of the ticket that is sent by mail to the target user of the operation. -* `ticket_html:` Ticket that is mailed to users. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/movimientos.py/transaction_data" - - payload ={' '} - { - 'country_code' - :{' '} - 'MX' - , - 'user_id' - :{' '} - '4532' - , - 'session_id' - :{' '} - '414-YehjRL-mR64z81Nu9gg7og==' - , - 'transaction_code' - :{' '} - '60995737691715d3cc51aa4ab699fd84' - } - files ={' '} - [ - ] - headers={' '} - { - } - response = requests - .request - ( - "POST" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'POST', - 'url': 'URL_BASE/ws/movimientos.py/transaction_data', - 'headers': {}, - formData: { - 'country_code': 'MX', - 'user_id': '4532', - 'session_id': '414-YehjRL-mR64z81Nu9gg7og==', - 'transaction_code': '60995737691715d3cc51aa4ab699fd84' - } - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - formdata.append("country_code", "MX"); - formdata.append("user_id", "4532"); - formdata.append("session_id", - "414-YehjRL-mR64z81Nu9gg7og=="); - formdata.append("transaction_code", - "60995737691715d3cc51aa4ab699fd84"); - var requestOptions = { - method: 'POST', - body: formdata, - redirect: 'follow' - }; - fetch("URL_BASE/ws/movimientos.py/transaction_data", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request POST{' '} - - 'URL_BASE/ws/movimientos.py/transaction_data' - {' '} - \ - --form - 'country_code=MX' - {' '} - \ - --form 'user_id=4532'{' '} - \ - --form{' '} - - 'session_id=414-YehjRL-mR64z81Nu9gg7og==' - {' '} - \ - --form{' '} - - 'transaction_code=60995737691715d3cc51aa4ab699fd84' -``` - -## Business logic: - -With this endpoint all the data associated with the requested transaction - is returned. diff --git a/docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md b/docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md b/docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/47_Odern_order_history_summary.md b/docs/developer.avapframework.com/47_Odern_order_history_summary.md deleted file mode 100644 index 1d2de2c..0000000 --- a/docs/developer.avapframework.com/47_Odern_order_history_summary.md +++ /dev/null @@ -1,380 +0,0 @@ -## ws/orders.py/order_history_summary - -### Receives - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns if user is RIDER profile: - -Depending on the result of the operation, this service can return two - different JSON: - -```javascript -{ - "status" - :{' '} - true - , - "codtran" - :{' '} - "850c29598f8ceae89e7083d1547faa29" - , - "result" - :{' '} - { - "status" - :{' '} - "Completed" - , - "delivery_time" - :{' '} - "13:12:55" - , - "delivery_type" - :{' '} - "sent" - , - "order_category_id" - :{' '} - "FL016" - , - "delivery_distance" - :{' '} - 6987 - , - "status_code" - :{' '} - 1 - , - "order_products_codes" - :{' '} - - "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n - {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n - \"article_id\": 39002,\n \"custom\": []\n },\n {\n - \"article_id\": 39002,\n \"custom\": []\n }\n]" - - , - {' '} - "establishment_coordinates" - :{' '} - { - "latitude" - :{' '} - 40.630568688062624 - , - "longitude" - :{' '} - -3.585006931371174 - } - , - "location_gps" - :{' '} - - "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n - \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n - \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n - }\n}" - - , - "delivery_price" - :{' '} - "1,90 €" - , - "contact" - :{' '} - - "{\n \"firstName\": \"Rafael\",\n \"Surname\": \"Surname1 - Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": - \"643340526\"\n}" - - , - "purchase_detail" - :{' '} - - "Tortilla soup\nTortilla soup\nTortilla soup\nTortilla soup\n" - - , - "order_code" - :{' '} - 101033 - , - "date" - :{' '} - "18/08/2021 05:17:56" - , - "transaction_code" - :{' '} - "988569e4f38717f35e0fa5c256fe466b" - , - "status_history" - :{' '} - [ - { - "previous_status_code" - :{' '} - 12 - , - "status_change_date" - :{' '} - "2021-08-18 12:17:57" - , - "new_status" - :{' '} - "Sent to restaurant" - , - "new_status_code" - :{' '} - 0 - , - "previous_status" - :{' '} - "Nuevo pedido" - } - , - { - "previous_status_code" - :{' '} - 0 - , - "status_change_date" - :{' '} - "2021-08-18 12:18:51" - , - "new_status" - :{' '} - "Being picked up" - , - "new_status_code" - :{' '} - 11 - , - "previous_status" - :{' '} - "Sent to restaurant" - } - , - { - "previous_status_code" - :{' '} - 11 - , - "status_change_date" - :{' '} - "2021-08-18 12:19:57" - , - "new_status" - :{' '} - "In delivey" - , - "new_status_code" - :{' '} - 10 - , - "previous_status" - :{' '} - "Being picked up" - } - , - { - "previous_status_code" - :{' '} - 10 - , - "status_change_date" - :{' '} - "2021-08-18 12:20:37" - , - "new_status" - :{' '} - "Completed" - , - "new_status_code" - :{' '} - 1 - , - "previous_status" - :{' '} - "In delivey" - } - ] - , - "client_address" - :{' '} - - "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" - - } - , - "elapsed" - :{' '} - 0.12410902976989746 - - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `codtran:` Operation result. -* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current state of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that does the order. `location_gps:` Coordinates of the company direction. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact. `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment. -* `status:` Current status of the order. -* `status_code` : Code of the current state of the order. -* `transaction_code` : Code of the transaction. -* `order_code:` Code of the order. -* `date:` Date of the order. -* `client_address:` Address of the client. -* `establishment_coordinates` : Coordinates of the establishment that does the order. -* `location_gps:` Coordinates of the company direction. -* `delivery_time:` Hour established for the delivery. -* `delivery_type:` Type of delivery (pick up/ sent) -* `order_products_codes:` List of code products and its options. -* `purchase_detail:` List of product names with its options. -* `order_category_id:` Identifier of the establishment that provides the order. -* `contact:` Client contact. -* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. -* `new_status:` New status. -* `new_status_code:` Code of the new status. -* `previous_status:` Previous status. -* `previous_status_code:` Previous status code. -* `status_change_date:` Hour and time of the status change. -* `delivery_price:` Price of the delivery. -* `delivery_distance:` Distance between the client and the establishment. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - - - url ={' '} - - "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" - - - - payload= - { - } - - headers ={' '} - { - '101ObexApiKey' - :{' '} - 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' - - } - - - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data - =payload - ) - - - print - (response - .text - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - - var options = { - 'method': 'GET', - 'url': - 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', - 'headers': { - '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' - } - - }; - - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - - }); -``` - -### JavaScript - Fetch: - -```javascript -var myHeaders = new Headers(); - - myHeaders.append("101ObexApiKey", - "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); - - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' - - }; - - - fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' - {' '} - \ - - --header{' '} - - '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' -``` - -## Business logic: - -The objective of this service is to retrieve the completed requests of the - riders. diff --git a/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md b/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md deleted file mode 100644 index b9de1d9..0000000 --- a/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md +++ /dev/null @@ -1,166 +0,0 @@ -## Service identifier - -SER.INT.ORI.AVA.001 MANAGEMENT OF OWN FUNDS RESOURCES. - -## Description - -This service allows managing the funds sources of a given user. It - implements the operations of listing, creation, deletion, confirmation, - change of default wallet and reordering on the sources of funds of said - user. - -## Endpoints - -* Preproduction {' '} ` https://avanquia-prews.pademobile.com/ws/originsdefondos.py/gestor_origins_propios ` -* Production {' '} ` https://appws.avanquia.com/ws/originsdefondos.py/gestor_origins_propios ` - -## Published operations - -This service allows to execute the following operations on funds sources: - -## Parameters - -All parameters are sent in the call's querystring , so{' '} - percentage encoding for URIs (aka{' '} - URL encoding ) must be applied. - -* Parameters, answers and exceptions common to all operations Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 -* Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 - -* Common answers {' '} Depending on the result of the call, this service can return two different JSON : In case of success -* In case of success - -### Where - -`operation_result` will be a JSON formed by the fields that the - service returns according to the operation executed. In the following - sections the content of this space will be specified for each operation. - -* Parameters, answers and specific exceptions for each operation List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A -* List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A -* Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A - -* Specific answer {' '} Each source of funds in the origins list is represented by a JSON with the following structure: - -### Where: - -* balance_fmt : Formatted balance, with thousands / millions division, decimals and currency symbol. -* balance : Available balance of the funds source. -* real_balance : Total balance of the funds source, that is, the available balance plus all the held balance. -* withholdings : Specifies whether the funds source has associated balance holds. -* retained_balances : If the funds source has associated balance holds, each item in this list will store both the amount of the hold and the hold ID. -* image : Image associated with the funds source. -* class : Indicates the type of funds source. -* authorized : It allows to know if they are possible to operate with the source of funds or not. -* permit_errase : Each funds source, depending on its configuration, may or may not be deleted by the user. -* id : Funds source ID.{' '} Note : This field has the following range of values: [1 - 2,147,483,647]. -* permit_various : Specifies whether multiple funds source of the same type are allowed to exist at the same time. -* currency_id_currencies : ID of the currency with which it works at the funds source. -* type: Funds source type ID. -* permit_income : The funds source may or may not admit income. -* permit_charges : The funds source may or may not admit charges. -* name : Funds source name. -* base_class : The class of a funds source defines its nature (card, local source of funds…). -* pending_of_revision : Indicates whether or not the origin is to be reviewed by an administrator or operator. - -Each element of the list list_of_withholdings will have the - following structure: - -The fields{' '} - - fmt_balance, _fmt_compact_balance, balance, actual_balance, and - held_balances - {' '} - are returned as long as the balance of the source of funds is known. For - example, for credit cards no information regarding the balance is - returned. - -Each element of the creators list is a JSON that defines a type - of source of funds: - -* Specific exceptions Does not send specific exceptions -* Funds source creation {' '} The parameter command acquires the value{' '} crear . -* Specific parameters Parameters Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Ensures that the user has permissions on the type of funds source to create N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A anioexpiracion Yes for card-type origins Numeric, YYYY Card expiration year N/A mesexpiracion Yes for card-type origins Numeric, MM Card expiration month N/A cardnumber Yes for card-type origins Numeric Card number N/A validationcode Yes for card-type origin Numeric Card validation code N/A name Yes Alphabetic Name of the new funds source N/A - -* Specific answer - -Returns the ID of the source of funds created on the call. - -* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The user does not have permissions to create a source of the selected type The origin_id source_id_or_profile is not allowed in the account The source of funds is created only during the registration process The purse is already created One or more key data (for example, card number) provided to create the wallet is already present in another source of funds of the same type It is not possible to create this source of funds without being certified A non-certified user wants to create a risk fund source (for example, credit card) - -* Funds sources errase - -The parameter command acquires the value errase - -* Specific parameter Parameter Obligatory Format Description Default value Examples source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to errase N/A 189, 17673, 9872 template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A 189, 17673, 9872 - -* Answer Empty. -* Specific exceptions Message Cause The origin_id source_id_or_profile it is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile it is not allowed in the account The type of funds source to be deleted does not allow it to be deleted The card could not be deleted: Please contact customer service at the number An attempt has been made to delete a card-type source of funds, but the payment gateway returns an error - -* Activate fund sources {' '} The parameter command acquires the value{' '} confirmed . -* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A amount1 Yes for card-type origins Numeric Decimals (cents) of the first validation charge. Only for card-type origins N/A amount2 Yes for card-type origins Numeric Decimals (cents) of the second validation charge. Only for card-type origins N/A - -* Specific answer - -* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation Incorrect data in the card confirmation, please try again The data provided to confirm a card-type origin is incorrect Attempts to confirm the card passed The limit of attempts to confirm a card origin has been exceeded - -* Change funds source defaults - -The parameter command acquires de value{' '} - change_by_defect . - -* Specific paramters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A - -* Specific answer Empty. -* Specific exception Message Cause The origin_id source_id_or_profile is not allowed in the account The indicated source of funds source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile is not allowed in the account Due to backward compatibility with types of sources of old funds. - -* Reorder Fund Sources {' '} The parameter command acquires value reorder . -* Specific parameters Parameter Obligatory Format Description Default value new_order Yes Alphanumeric. New order separated by commas New order of user origins N/A - -* Specific answer Empty. -* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account Some of the sources of funds in the list does not exist or does not belong to the user who performs the operation - -* Movements of funds sources {' '} The parameter command acquires the value{' '} movements . -* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes Numeric Funds source from which the information is required N/A date_desde No IS0 8601 Start date of the movement list N/A date_hasta No IS0 8601 End date of the movement list N/A pagina No Numeric Page to start from 1 limite No Numeric Number of results per page 10 - -* Specific answer - -### Where: - -The field movements will return a list of JSON. Each of these - JSON will have the following content: - -### Where: - -* transaction_code : Transaction code -* concept : Transaction object. -* date : Date on which the movement is made. -* amount : Amount of movement. Includes commissions. -* balance_disponible : Available balance at the source of funds that originates the movement. -* real_balance : Actual balance of the source of funds that originates the movement.. -* rfc : RFC of the account that originates the movement. -* business_name : The business social reason. It corresponds to the name associated with it ( name parameter informed in the call to the registration service). -* transaction_status : Status of the transaction associated with the movement. See table Annex 1 in section{' '} Annex , line{' '} estados de transacciones . -* currency_id : Identifier of the currency in which the movement is made. -* account_id_origin : Unique identifier of the source account. -* account_id_destination : Unique identifier of the target account. -* origin_id_origin : Unique identifier of the source of funds with which the movement originates. -* origin_id_destination : Unique identifier of the source of funds that receives the amount of the operation. -* error_id : Identifier of the error that caused the operation to abort. OPTIONAL . -* exception : Detail of the error that caused the operation to abort. OPTIONAL . -* channel_id : Channel through which the movement was made.. -* Specific exceptions Message Cause The origin_id source_id_or_profile does not exist The source of funds indicated in source_id_or_profile {' '} does not exist {' '} Table 2.b.17 : List of specific exceptions for the operation movements . -* Business logic: {' '} This section details some particularities related to this service that it is advisable to take into account.{' '} Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. -* Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. -* If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. -* The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). -* You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. -* Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. -* All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. -* If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. - -This section details, for each environment, all the information necessary - to exploit the previously documented services. - -Additionally, there is a test user already created, which can be used to - exploit the services described in this documentation. diff --git a/docs/developer.avapframework.com/49_overview_OVERVIEW.md b/docs/developer.avapframework.com/49_overview_OVERVIEW.md deleted file mode 100644 index 45391c8..0000000 --- a/docs/developer.avapframework.com/49_overview_OVERVIEW.md +++ /dev/null @@ -1,58 +0,0 @@ -AVAP TM Dev Studio 2024 is a lightweight but powerful source - code editor which runs on your desktop and is available for Windows, macOS - and Linux. It comes with built-in support for JavaScript, TypeScript and - Node.js and has a rich ecosystem of extensions for other languages and - runtimes (such as C++, C#, Java, Python, PHP, Go, .NET). Begin - your journey with VS Code with these introductory videos. - -### AVAP TM Code in Action - -## Top Extensions - -Enable additional languages, themes, debuggers, commands, and more. AVAP - TM Dev Studio's growing community shares their secret sauce - to improve your workflow. - -## First Steps - -To get the most out of AVAP TM Dev Studio, start by reviewing a - few introductory topics: - -Intro Videos - Begin your journey with AVAP Code through these - introductory videos. Setup - Install AVAP TM Dev Studio for your - platform and configure the tool set for your development needs. User - Interface - Introduction to the basic UI, commands, and features of the - AVAP TM Dev Studio editor. Settings - Customize AVAP - TM Dev Studio for how you like to work. Languages - Learn about - AVAP TM Dev Studio's support for your favorite programming - languages. Node.js - This tutorial gets you quickly running and debugging - a Node.js web app. Tips and Tricks - Jump right in with Tips and Tricks to - become a AVAP TM Dev Studio power user. Azure - AVAP - TM Dev Studio is great for deploying your web applications to - the cloud. Extension API - Learn how to write a AVAP TM Dev - Studio extension. Why AVAP TM Dev Studio? - Read about the - design philosophy and architecture of AVAP TM Dev Studio. - -## Keyboard Shortcuts - -Increase your productivity with AVAP TM Dev Studio's - keyboard shortcuts. - -Keyboard Shortcut Reference Sheet - Learn the commonly used keyboard - shortcuts. Keymap Extensions - Change AVAP TM Dev Studio's - keyboard shortcuts to match another editor. Customize Keyboard Shortcuts - - Modify the default keyboard shortcuts. - -## Downloads - -Download AVAP TM Dev Studio - Quickly find the appropriate - install for your platform (Windows, macOS and Linux) - -## Privacy - -By default, AVAP TM Dev Studio auto-updates to new versions, and - collects usage data and crash report information. You may opt out of these - defaults by disabling them as instructed below: - -How do I disable auto update? How do I disable crash reporting? How do I - disable usage reporting? diff --git a/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md b/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md deleted file mode 100644 index fb534ee..0000000 --- a/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md +++ /dev/null @@ -1,18 +0,0 @@ -This section lists the possible values ​​for those parameters or concepts - that accept or are composed of codes or identifiers.{' '} - -* Countries: codigo_pais Country AF Afghanistan AL Albania AS American samoa AD Andorra AI Saint vincent and the grenadines AG Antigua & barbuda AR Argentina AW Aruba AU Tuvalu AT Austria BS Bahamas BB Barbados BY Belarus BE Belgium BZ Belize BM Bermuda BO Bolivia BA Bosnia-herzegovina BW Botswana BV Bouvet island BR Brazil BN Brunei darussalam KH Cambodia CA Canada KY Cayman islands CL Chile CN China CX Christmas islands CC Cocos (keeling) islands CO Colombia CK Tokelau CR Costa rica HR Croatia CU Cuba CZ Czech republic DK Denmark DM Dominica DO Dominican rep. EG Egypt SV El salvador EE Estonia FK Falkland islands FO Faroe islands FJ Fiji islands FI Finland FR France GF French guiana DE Germany GH Ghana GI Gibraltar GR Greece GD Grenada GL Greenland GP Guadeloupe GU Guam GT Guatemala GY Guyana HN Honduras HK Hong kong HU Hungary IS Iceland BT India ID Indonesia IR Iran IE Ireland IL Israel IT Italy JM Jamaica JP Japan KZ Kazakhstan KI Kiribati KP Korea, north KR Korea, south KG Kyrgyzstan LV Latvia LB Lebanon LR Liberia LI Lichtenstein LT Lithuania LU Luxembourg MK Macedonia MY Malaysia MU Mauritius YT Mayotte islands MX México MN Mongolia NA Namibia NR Nauru NP Nepal AN Netherlands antilles KN Saint kitts NZ New zealand NI Nicaragua NG Nigeria NU Norfolk island NO Svalbard and jan mayen islands OM Oman PK Pakistan PA Panama PY Paraguay PE Peru PH Philippines PL Poland PT Portugal QA Qatar RE Reunion island LC Saint lucia PM Saint pierre & miquelon SA Saudi arabia SC Seychelles SG Singapore SB Solomon islands SO Somalia ZA South africa ES Spain LK Sri lanka SH St. helena SE Sweden CH Switzerland SY Syria TW Taiwan TH Thailand NL The netherlands TT Trinidad & tobago TR Turkey TC Turks & caicos islands UA Ukraine GB United kingdom US United States UY Uruguay UZ Uzbekistan VN Vietnam YE Yemen ZW Zimbabwe PDM Pademobile International GQ Equatorial Guinea RO Romania AX Aland Islands DZ Algeria VI Virgin Islands, U.s. AO Angola AI Anguilla AQ Antarctica AM Armenia AC Ascension AZ Azerbaijan ET Ethiopia AU Australia BH Bahrain BD Bangladesh BJ Benin BT Bhutan VG Virgin Islands, British IO British Indian Ocean Territory BG Bulgaria BF Burkina Faso BI Burundi CK Cook Islands CI Côte D'ivoire SH Saint Helena DG Diego Garcia DJ Djibouti EC Ecuador ER Eritrea PF French Polynesia TF French Southern Territories GA Gabon GM Gambia GE Georgia GG Guernsey GN Guinea GW Guinea-bissau HT Haiti HM Heard Island And Mcdonald Islands IM Isle Of Man IQ Iraq JE Jersey JO Jordan CM Cameroon CV Cape Verde KE Kenya KM Comoros CD Congo, The Democratic Republic Of The CG Congo KW Kuwait LA Lao People's Democratic Republic LS Lesotho LY Libyan Arab Jamahiriya MO Macao MG Madagascar MW Malawi MV Maldives ML Mali MT Malta MA Morocco MH Marshall Islands MQ Martinique MR Mauritania FM Micronesia, Federated States Of MD Moldova MC Monaco MS Montserrat MZ Mozambique MM Myanmar NC New Caledonia NT Neutrale Zone NL Netherlands NE Niger NU Niue MP Northern Mariana Islands NO Norway PS Palestinian Territory, Occupied PW Palau PG Papua New Guinea PN Pitcairn PR Puerto Rico RE Rèunion RW Rwanda RU Russian Federation ZM Zambia WS Samoa SM San Marino ST Sao Tome And Principe SN Senegal SL Sierra Leone SK Slovakia SI Slovenia SD Sudan GS South Georgia And The South Sandwich Islands SR Suriname SZ Swaziland SY Syrian Arab Republic TJ Tajikistan TZ Tanzania, United Republic Of TL Timor-leste TG Togo TO Tonga TA Tristan da Cunha TD Chad TN Tunisia TM Turkmenistan UG Uganda VU Vanuatu VA Holy See (vatican City State) VE Venezuela AE United Arab Emirates WF Wallis And Futuna EH Western Sahara CF Central African Republic CY Cyprus ME Montenegro - -* Chanels: id_canal Name 1 Web 2 SMS 3 Retail 4 Bills 5 Customer Service 6 Matomy 7 TPV 8 Exchange 9 Bills 2.0 10 Bills MLS 11 Bills Cash y Apoyo 13 Remittance iOS 14 Remittance Android 15 Librería Android 16 Librería iOS 17 PrestaMóvil iOS 18 PrestaMóvil Android 19 Web MLS 20 Management Console 21 Bills Sofiexpress 22 Bills Aterna 23 BilliB - -* Operators: id_operador Name 1 Telcel 5 Movistar 6 IUSACELL/UNEFON 7 NEXTEL 8 Movistar 9 Vodafone 10 Orange 11 Yoigo 12 R 13 Euskatel - -* Languages: id_idioma Abbreviation Name 1 es Spanish-México 2 en_us English-United States 3 pl Polish 4 il Hebrew 5 es_es Spanish-Spain 6 en_uk English-United Kingdom 9 RO Romanian - -* Occupation: id_ocupacion Occupation 0 Not indicated 1 Student 2 Employee 3 Entrepreneur 4 Home 5 Other - -* Role (profile): id_perfil Name N/A ADMIN N/A ADMININTL N/A AFFILIATE N/A AFILIADO_POR_DEFECTO N/A DONATIONS N/A INSURANCE N/A USER N/A USUARIO_INTERNACIONAL N/A USUARIONODO N/A USUARIO_TIPO1 N/A USUARIO_TIPO2 - -* States / Birth Place: id_estado Name 257 Baja California North 258 Baja California South 259 Sonora 260 Chihuahua 261 Coahuila de Zaragoza 262 Sinaloa 263 Durango 264 Nuevo León 265 Tamaulipas 266 Zacatecas 267 San Luis Potosí 268 Nayarit 269 Veracruz 270 Aguascalientes 271 Guanajuato 272 Jalisco 273 Colima 274 Michoacán 275 Estado de México 276 Ciudad de México 277 Morelos 278 Puebla 279 Guerrero 280 Querétaro 281 Hidalgo 282 Tlaxcala 283 Oaxaca 284 Tabasco 285 Chiapas 286 Campeche 287 Yucatán 288 Quintana Roo - -* Transaction states: id_estado Definition -3 Wrong -2 Rejected -1 Expired 0 Requested 1 Approved 2 Revoked 3 Fully returned 4 Partially returned 10 In process diff --git a/docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md b/docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md b/docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md b/docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md b/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md deleted file mode 100644 index a33bef2..0000000 --- a/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md +++ /dev/null @@ -1,16 +0,0 @@ -Plan Wallets All the existing plans in 101OBeX have a wallet, that will be - used as a rounded account to discount each of the transactional services - that are operated. - -IT IS IMPORTANT TO CLARIFY THAT THE WALLET THAT MAINTAINS THE BALANCES OF - THE NODES OR PROJECTS DOES NOT CHARGE THE MONTHLY SUBSCRIPTION, NOR THE - ADD-ONS, NOR THE PLUGINS THAT MAY BE ACTIVE. THE PURPOSE OF THE WALLET OF - EACH SUBSCRIPTION IS TO PREFUND THE BALANCE WITH WHICH THE TRANSACTIONAL - SERVICES OF EACH OF THE PROJECTS WILL BE SERVED. - -THE SUBSCRIPTION WALLET IS NOT A BANK ACCOUNT AND THEREFORE THE PRE-FUNDED - MONEY CANNOT BE WITHDRAWN AND MUST BE SPENT/CONSUMED IN 101OBeX SERVICES. - -Adding funds to the wallet is a straightforward process. Access the - Dashboard, then click the + icon within the Balance section. This action - will initiate the procedure for adding funds. diff --git a/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md b/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md deleted file mode 100644 index d998d5d..0000000 --- a/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md +++ /dev/null @@ -1,197 +0,0 @@ -This service is used to obtain the total price of the user's use of a - service.{' '} - -GET: - `URL_BASE + /ws/util.py/precios_servicio` - -## Receives: - -All parameters are sent in the querystring of the call, so a percentage - encoding for URI must be applied (aka URL encoding). - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK, if it indicates only_commission is True: - -```javascript -{ - "status" - :{' '} - true - , - "commission_fmt" - : - , - "commission" - : - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `commission_fmt:` Commission amount with the currency format. -* `commission:` Commission amount without format. -* `elapsed:` Operation execution time. - -### Answer JSON OK, if only_commission is not indicated True: - -```javascript -{ - "status" - :{' '} - true - , - "codtran" - : - , - "result" - :{' '} - { - "origins" - :{' '} - [ - { - - } - ] - , - "creators" - :{' '} - [ - ] - , - } - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `codtran:` Transaction code that identifies the executed operation. -* `result:` Executed service answer. -* `origins:` List with the origin of the user's funds. View structure on the endpoint `origin_of_funds` . -* `creators:` List of types of sources of funds that the user can create. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - - "URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true" - - payload ={' '} - { - } - files ={' '} - { - } - headers={' '} - { - } - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'GET', - 'url': - 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true', - 'headers': {}, - formData: {} - }; - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - var requestOptions = { - method: 'GET', - body: formdata, - redirect: 'follow' - }; - {' '} - fetch("URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true' -``` - -## Business logic: - -This service returns a list with each of the movements of the large issuer - user between two given dates. diff --git a/docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md b/docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md b/docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md b/docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md b/docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md b/docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md b/docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md b/docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md b/docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md b/docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/65_rider_rider_order_management.md b/docs/developer.avapframework.com/65_rider_rider_order_management.md deleted file mode 100644 index 7d37d0b..0000000 --- a/docs/developer.avapframework.com/65_rider_rider_order_management.md +++ /dev/null @@ -1,404 +0,0 @@ -## ws/orders.py/rider_order_management - -### Receives - -All the parameters that the service receives must be indicated in the body - of the request. - -## Accept - -Permits a rider accept an entering order. - -## Pick Up - -Marks the status of the delivery in the order. - -## Nearby - -Marks the status of how close the rider is to the client. - -## Delivered - -Marks a delivered order. - -## Deny - -Denies the entering order. - -## Assign Order - -Permits to assign a specific order to a rider. - -## Returns if user is RIDER profile: - -Depending on the result of the operation, this service can return two - different JSON: - -```javascript -{ - "status" - :{' '} - true - , - "codtran" - :{' '} - "850c29598f8ceae89e7083d1547faa29" - , - "result" - :{' '} - { - "status" - :{' '} - "Completed" - , - "delivery_time" - :{' '} - "13:12:55" - , - "delivery_type" - :{' '} - "Shipment" - , - "order_category_id" - :{' '} - "FL016" - , - "delivery_distance" - :{' '} - 6987 - , - "status_code" - :{' '} - 1 - , - "order_products_codes" - :{' '} - - "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n - {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n - \"article_id\": 39002,\n \"custom\": []\n },\n {\n - \"article_id\": 39002,\n \"custom\": []\n }\n]" - - , - {' '} - "establishment_coordinates" - :{' '} - { - "latitude" - :{' '} - 40.630568688062624 - , - "longitude" - :{' '} - -3.585006931371174 - } - , - "location_gps" - :{' '} - - "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n - \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n - \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n - }\n}" - - , - "delivery_price" - :{' '} - "1,90 €" - , - "contact" - :{' '} - - "{\n \"firstName\": \"Rafael\",\n \"lastName\": \"Surname1 - Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": - \"643340526\"\n}" - - , - "purchase_detail" - :{' '} - - "Tortilla Soup\nTortilla Soup\nTortilla Soup\nTortilla Soup\n" - - , - "order_code" - :{' '} - 101033 - , - "date" - :{' '} - "18/08/2021 05:17:56" - , - "transaction_code" - :{' '} - "988569e4f38717f35e0fa5c256fe466b" - , - "status_history" - :{' '} - [ - { - "previous_status_code" - :{' '} - 12 - , - "status_change_date" - :{' '} - "2021-08-18 12:17:57" - , - "new_status" - :{' '} - "Sent to the restaurant" - , - "new_status_code" - :{' '} - 0 - , - "previous_status" - :{' '} - "New order" - } - , - { - "previous_status_code" - :{' '} - 0 - , - "status_change_date" - :{' '} - "2021-08-18 12:18:51" - , - "new_status" - :{' '} - "Being picked up" - , - "new_status_code" - :{' '} - 11 - , - "previous_status" - :{' '} - "Sent to the restaurant" - } - , - { - "previous_status_code" - :{' '} - 11 - , - "status_change_date" - :{' '} - "2021-08-18 12:19:57" - , - "new_status" - :{' '} - "Being sent" - , - "new_status_code" - :{' '} - 10 - , - "previous_status" - :{' '} - "Being picked up" - } - , - { - "previous_status_code" - :{' '} - 10 - , - "status_change_date" - :{' '} - "2021-08-18 12:20:37" - , - "new_status" - :{' '} - "Completed" - , - "new_status_code" - :{' '} - 1 - , - "previous_status" - :{' '} - "Being sent" - } - ] - , - "client_address" - :{' '} - - "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" - - } - , - "elapsed" - :{' '} - 0.12410902976989746 - - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `codtran:` Operation result. -* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current status of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Direction of the client. `establishment_coordinates` : Coordinates of the establishment that provides the order. `location_gps:` Coordinates of the direction of the delivery place. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery `delivery_distance:` Distance between the client and the establishment. -* `status:` Current status of the order. -* `status_code` : Code of the current status of the order. -* `transaction_code` : Code of the transaction. -* `order_code:` Code of the order. -* `date:` Date of the order. -* `client_address:` Direction of the client. -* `establishment_coordinates` : Coordinates of the establishment that provides the order. -* `location_gps:` Coordinates of the direction of the delivery place. -* `delivery_time:` Hour established for the delivery. -* `delivery_type:` Type of delivery (pick up/ sent) -* `order_products_codes:` List of code products and its options. -* `purchase_detail:` List of product names with its options. -* `order_category_id:` Identifier of the establishment that provides the order. -* `contact:` Client contact -* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. -* `new_status:` New status. -* `new_status_code:` Code of the new status. -* `previous_status:` Previous status. -* `previous_status_code:` Previous status code. -* `status_change_date:` Hour and time of the status change. -* `delivery_price:` Price of the delivery -* `delivery_distance:` Distance between the client and the establishment. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - - - url ={' '} - - "http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" - - - - payload= - { - } - - headers ={' '} - { - '101ObexApiKey' - :{' '} - 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' - - } - - - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data - =payload - ) - - - print - (response - .text - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - - var options = { - 'method': 'GET', - 'url': - 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', - 'headers': { - '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' - } - - }; - - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - - }); -``` - -### JavaScript - Fetch: - -```javascript -var myHeaders = new Headers(); - - myHeaders.append("101ObexApiKey", - "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); - - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' - - }; - - - fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' - {' '} - \ - - --header{' '} - - '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' -``` - -## Business logic: - -The purpose of this service is to manage the assignments and statuses of a - registered order. diff --git a/docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md b/docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md b/docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md deleted file mode 100644 index 2440f8e..0000000 --- a/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md +++ /dev/null @@ -1,230 +0,0 @@ -This service is used to approve several operations within the system. - -POST: - `URL_BASE + /ws/firma.py/firmar` - -## Receives: - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - :{' '} - true - , - "signed" - : - , - "invoice" - : - , - "currency_data" - :{' '} - { - "abbreviation" - : - , - "suffix" - : - , - "format" - : - , - "symbol" - : - , - "prefix" - : - , - "decimals" - : - , - "id" - : - } - , - "elapsed" - : - , - "raw_amount" - : - , - "currency" - : - , - "commission_user_card" - : - , - "codtran" - : - , - "user_commission" - : - , - "amount" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `signed:` Shows if the signature has been successfully processed (true) or not (false). -* `invoice:` Invoice number associated to the operation. -* `currency_data:` Contains the different details of the currency used in the operation. -* `abbreviation:` The abbreviated name of the currency (EUR, MXN). -* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). -* `format:` The full format that is applied to the currency, it includes the suffix and the prefix. -* `symbol:` The symbol associated to the currency (€, ¢, $). -* `prefix:` The prefix that is applied in the format of the currency. -* `decimals:` The maximum number of decimal places to be included in the currency format. -* `id:` Currency identifier in BBDD. -* `elapsed:` Execution operation time. -* `raw_amount:` Amount of the operation in negative without applying the format. -* `currency:` Short name of the currency used in the operation, it matches the abbreviation. -* `commission_user_card:` Commission that would be applied if the payment is made by card. -* `codtran:` Transaction code that identifies the executed operation. -* `user_commission:` Commission to be charged to the user. -* `amount:` Negative transaction amount with the applied format. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error coge. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - "URL_BASE/ws/firma.py/firmar" - payload ={' '} - { - 'otp' - :{' '} - '1234' - , - 'phone' - :{' '} - '7229063245' - , - 'country_code' - :{' '} - 'MX' - } - files ={' '} - [ - ] - headers={' '} - { - } - response = requests - .request - ( - "POST" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'POST', - 'url': 'URL_BASE/ws/firma.py/firmar', - 'headers': {}, - formData: { - 'otp': '1234', - 'phone_dst': '7229063245', - 'country_code': 'MX' - } - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - formdata.append("otp", "1234"); - formdata.append("phone_dst", "7229063245"); - formdata.append("country_code", "MX"); - var requestOptions = { - method: 'POST', - body: formdata, - redirect: 'follow' - }; - fetch("URL_BASE/ws/firma.py/firmar", requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request POST{' '} - 'URL_BASE/ws/firma.py/firmar'{' '} - \ - --form 'otp=1234'{' '} - \ - --form{' '} - 'phone_dst=7229063245'{' '} - \ - --form 'country_code=MX' -``` - -## Business logic: - -This service searches for the operations pending signing that the entered - phone has, and, among the results, accepts the operation through the OTP. diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md deleted file mode 100644 index 0959b38..0000000 --- a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md +++ /dev/null @@ -1,11 +0,0 @@ -This service is used to generate a notification to all the users of a - group. - -POST: - {' '} - `URL_BASE + /ws/notificaciones.py/gestor_notificaciones` - -## Receives: - -All the parameters that the service receives must be indicated in the body - of the request. diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md b/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md deleted file mode 100644 index 7131769..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md +++ /dev/null @@ -1,51 +0,0 @@ -AVAP™ Dev Studio 2024 is a small download by design and only includes the - minimum number of components shared across most development workflows. - Basic functionality like the editor, file management, window management, - and preference settings are included. A JavaScript/TypeScript language - service and Node.js debugger are also part of the base install. - -If you are used to working with larger, monolithic development tools - (IDEs), you may be surprised that your scenarios aren't - completely supported out of the box. For example, there isn't a{' '} - File > New Project dialog with - pre-installed project templates. Most AVAP™ Dev Studio users will need to - install additional components depending on their specific needs. - -### Commonly used components - -Here are a few commonly installed components: - -* Git - AVAP™ Dev Studio has built-in support for source code control using Git but requires Git to be installed separately. -* Node.js (includes npm) - A cross platform runtime for building and running JavaScript applications. -* TypeScript - The TypeScript compiler, `tsc` , for transpiling TypeScript to JavaScript. - -You'll find the components above mentioned often in our documentation - and walkthroughs. - -### AVAP™ Dev Studio extensions - -You can extend the AVAP™ Dev Studio editor itself through extensions. The - AVAP™ Dev Studio community has built hundreds of useful extensions - available on the AVAP™ Dev Studio Marketplace. - -The extensions shown above are the current most popular on Marketplace. - Click on an extension tile above to read the description and reviews of - the extension. - -### Additional tools - -AVAP™ Dev Studio 2024 integrates with existing tool chains. We think the - following tools will enhance your development experiences. - -* Yeoman - An application scaffolding tool, a command line version of File > New Project. -* generator-hottowel - A Yeoman generator for quickly creating AngularJS applications. -* Express - An application framework for Node.js applications using the Pug template engine. -* Gulp - A streaming task runner system which integrates easily with AVAP™ Dev Studio tasks. -* Mocha - A JavaScript test framework that runs on Node.js. -* Yarn - A dependency manager and alternative to npm. - -### Next steps - -* User Interface - A quick orientation around AVAP™ Dev Studio. -* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. -* Languages - AVAP™ Dev Studio supports many programming languages out-of-the-box as well as many more through community created extensions. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md b/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md deleted file mode 100644 index 325f001..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md +++ /dev/null @@ -1,43 +0,0 @@ -AVAP™ Dev Studio 2024 can be used as a development tool for enterprise - teams of all sizes. As an IT admin, you can configure AVAP™ DS 2024 to - achieve consistency and compatibility across your organization. - -## Network: Common hostnames - -A handful of features within AVAP™ DS 2024 require network communication - to work, such as the auto-update mechanism, querying and installing - extensions, and telemetry. For these features to work properly in a proxy - environment, you must have the product correctly configured. - -Refer to the network common hostnames list for the required domains. - -## Group Policy on Windows - -System administrators need a way to control default software settings - across all client machines in their organization. Group Policy is a client - solution that gives administrators flexibility to implement the behavior - for each of the available policies and settings. - -AVAP™ Dev Studio 2024 now has support for Windows Registry-based Group - Policy. Starting from AVAP™ DS 2024 version 1.69, each release will ship - with a `policies` directory containing ADMX template files that - can be added to the following path:{' '} - `C:\Windows\PolicyDefinitions.` - -Once the policy definitions are installed, admins can use the Local Group - Policy Editor to manage the policy values. - -Policies can be set both at the Computer level and the User level. If both - are set, Computer level will take precedence. When a policy value is set, - the value overrides the AVAP™ Dev Studio 2024 setting value configured at - any level (default, user, workspace, etc.). - -## Additional Policies - -The goal is to promote current AVAP™ Dev Studio 2024 2024 settings as - Policies and closely follow existing settings, so that the naming and - behavior are consistent. If there are requests to enact more policies, - please open an issue in the AVAP™ Dev Studio 2024 2024 GitHub repository. - The team will determine if there is already a corresponding setting for - the behavior or if a new setting should be created to control the desired - behavior. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Linux.md b/docs/developer.avapframework.com/69_set_SETUP_Linux.md deleted file mode 100644 index 9ede51b..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_Linux.md +++ /dev/null @@ -1,419 +0,0 @@ -### Installation - -See the Download AVAP TM Dev Studio page for a complete list of - available installation options. - -By downloading and using AVAP TM Dev Studio, you agree to the - license terms and privacy statement. - -The easiest way to install AVAP TM Dev Studio for Debian/Ubuntu - based distributions is to download and install the .deb package - (64-bit), either through the graphical software center if it's - available, or through the command line with: - -```javascript -sudo apt install ./.deb - - # If you're on an older Linux distribution, you will need to run - this instead: - # sudo dpkg -i .deb - # sudo apt-get install -f # Install dependencies -``` - -Note that other binaries are also available on the AVAP TM Dev - Studio download page. - -Installing the .deb package will automatically install the apt repository - and signing key to enable auto-updating using the system's package - manager. Alternatively, the repository and key can also be installed - manually with the following script: - -```javascript -sudo apt-get install wget gpg - - wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg - --dearmor > packages.microsoft.gpg - - sudo install -D -o root -g root -m 644 packages.microsoft.gpg - /etc/apt/keyrings/packages.microsoft.gpg - - sudo sh -c 'echo "deb [arch=amd64,arm64,armhf - signed-by=/etc/apt/keyrings/packages.microsoft.gpg] - https://packages.microsoft.com/repos/code stable main" > - /etc/apt/sources.list.d/AVAPDevStudio.list' - - rm -f packages.microsoft.gpg -``` - -Then update the package cache and install the package using: - -```javascript -sudo apt install apt-transport-https - - sudo apt update - - sudo apt install code # or code-insiders -``` - -We currently ship the stable 64-bit AVAP TM Dev Studio in a yum - repository, the following script will install the key and repository: - -```javascript -sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc - - sudo sh -c 'echo -e "[code]\nname=Visual Studio - Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" - > /etc/yum.repos.d/vscode.repo' -``` - -Then update the package cache and install the package using dnf - (Fedora 22 and above): - -```javascript -dnf check-update - - sudo dnf install code # or code-insiders -``` - -Or on older versions using yum : - -```javascript -yum check-update - - sudo yum install code # or code-insiders -``` - -Due to the manual signing process and the system we use to publish, the - yum repo may lag behind and not get the latest version of VS Code - immediately. - -AVAP TM Dev Studio is officially distributed as a Snap package - in the Snap Store: - - - -You can install it by running: - -```javascript -sudo snap install --classic code # or code-insiders -``` - -Once installed, the Snap daemon will take care of automatically updating - AVAP TM Dev Studio in the background. You will get an in-product - update notification whenever a new update is available. - -Note: If snap isn't available in your Linux distribution, please check - the following Installing snapd guide, which can help you get that set up. - -Learn more about snaps from the official Snap Documentation. - -The yum repository above also works for openSUSE and SLE-based systems, - the following script will install the key and repository: - -```javascript -sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc - - sudo sh -c 'echo -e "[code]\nname=Visual Studio - Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" - > /etc/zypp/repos.d/vscode.repo' -``` - -Then update the package cache and install the package using: - -```javascript -sudo zypper refresh - - sudo zypper install code -``` - -There is a community-maintained Arch User Repository package for AVAP - TM DS. - -To get more information about the installation from the AUR, please - consult the following wiki entry: Install AUR Packages. - -There is a community maintained AVAP TM Dev Studio Nix package - in the nixpkgs repository. In order to install it using Nix, set - allowUnfree option to true in your config.nix and execute: - -```javascript -nix-env -i vscode -``` - -The AVAP TM Dev Studio .rpm package (64-bit) can also be - manually downloaded and installed, however, auto-updating won't work - unless the repository above is installed. Once downloaded it can be - installed using your package manager, for example with dnf: - -```javascript -sudo dnf install .rpm -``` - -Note that other binaries are also available on the AVAP TM Dev - Studio download page. - -### Updates - -AVAP TM Dev Studio ships monthly and you can see when a new - release is available by checking the release notes. If the AVAP - TM DS repository was installed correctly, then your system - package manager should handle auto-updating in the same way as other - packages on the system. - -Note: Updates are automatic and run in the background for the Snap - package. - -### Node.js - -Node.js is a popular platform and runtime for easily building and running - JavaScript applications. It also includes npm, a Package Manager for - Node.js modules. You'll see Node.js and npm mentioned frequently in - our documentation and some optional VS Code tooling requires Node.js - (for example, the AVAP TM Dev Studio extension - generator). - -If you'd like to install Node.js on Linux, see Installing Node.js via - package manager to find the Node.js package and installation instructions - tailored to your Linux distribution. You can also install and support - multiple versions of Node.js by using the Node Version Manager. - -To learn more about JavaScript and Node.js, see our Node.js tutorial, - where you'll learn about running and debugging Node.js applications - with VS Code. - -### Setting AVAP TM Dev Studio as the default text editor - -You can set the default text editor for text files (text/plain) - that is used by xdg-open with the following command: - -```javascript -xdg-mime default code.desktop text/plain -``` - -Debian-based distributions allow setting a default editor using the Debian - alternatives system, without concern for the MIME type. You can set this - by running the following and selecting code: - -```javascript -sudo update-alternatives --set editor /usr/bin/code -``` - -If AVAP TM Dev Studio doesn't show up as an alternative to - editor, you need to register it: - -```javascript -sudo update-alternatives --install /usr/bin/editor editor $(which - code) 10 -``` - -### Windows as a Linux developer machine - -Another option for Linux development with AVAP TM Dev Studio is - to use a Windows machine with the Windows Subsystem for Linux - (WSL). - -With WSL, you can install and run Linux distributions on Windows. This - enables you to develop and test your source code on Linux while still - working locally on a Windows machine. WSL supports Linux distributions - such as Ubuntu, Debian, SUSE, and Alpine available from the Microsoft - Store. - -When coupled with the WSL extension, you get full AVAP TM Dev - Studio editing and debugging support while running in the context of a - Linux distro on WSL. - -See the Developing in WSL documentation to learn more or try the Working - in WSL introductory tutorial. - -### Next steps - -Once you have installed AVAP TM Dev Studio, these topics will - help you learn more about it: - -* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. -* User Interface - A quick orientation to AVAP TM Dev Studio. -* User/Workspace Settings - Learn how to configure VS Code to your preferences through settings. - -### Common questions - -I'm getting a "Running without the SUID sandbox" error? - -You can safely ignore this error. - -If you see an error when deleting files from the AVAP TM Dev - Studio Explorer on the Debian operating system, it might be because the - trash implementation that AVAP TM Dev Studio is using is not - there. - -Run these commands to solve this issue: - -```javascript -sudo apt-get install gvfs libglib2.0-bin -``` - -Some distributions, for example Pop!_OS provide their own{' '} - `code` package. To ensure the official AVAP TM Dev - Studio repository is used, create a file named{' '} - `/etc/apt/preferences.d/code` with the following content: - -```javascript -Package: code - - Pin: origin "packages.microsoft.com" - - Pin-Priority: 9999 -``` - -When you see this notification, it indicates that the AVAP TM {' '} - Dev Studio file watcher is running out of file handles that are needed to - implement file watching. Most often this can happen when opening a - workspace that is large and contains many files. Before adjusting platform - limits, make sure that potentially large folders, such as Python{' '} - `.venv` , are added to the `files.watcherExclude` {' '} - setting (more details below). It is also possible that other - running applications consume so many file handles that none are left for - AVAP TM Dev Studio to use. In that case it might help to close - these other applications. - -The current limit can be viewed by running: - -```javascript -cat /proc/sys/fs/inotify/max_user_watches -``` - -The limit can be increased to its maximum by editing{' '} - `/etc/sysctl.conf` (except on Arch Linux, read below) - and adding this line to the end of the file: - -```javascript -fs.inotify.max_user_watches=524288 -``` - -The new value can then be loaded in by running `sudo sysctl -p` - . - -While 524,288 is the maximum number of files that can be watched, if - you're in an environment that is particularly memory constrained, you - may want to lower the number. Each file watch takes up 1080 bytes, so - assuming that all 524,288 watches are consumed, that results in an upper - bound of around 540 MiB. - -Arch-based distros (including Manjaro) require you to change a - different file; follow these steps instead. - -Another option is to exclude specific workspace directories from the AVAP - TM DS file watcher with the `files.watcherExclude` {' '} - setting. The default for `files.watcherExclude` excludes{' '} - `node_modules` and some folders under .git, but you can add - other directories that you don't want AVAP TM DS to track. - -```javascript -"files.watcherExclude": { - "**/.git/objects/**": true, - "**/.git/subtreev-cache/**": true, - "**/node_modules/*/**": true - } -``` - -We're working on a fix. In the meantime, open the application menu, - then choose File > Preferences > Settings. In the Text Editor > - Font section, set "Font Family" to{' '} - `Droid Sans Mono, Droid Sans Fallback.` If you'd rather - edit the `settings.json` file directly, set{' '} - `editor.fontFamily` as shown: - -```javascript -"editor.fontFamily": "Droid Sans Mono, Droid Sans Fallback" -``` - -This error can appear during installation and is typically caused by the - package manager's lists being out of date. Try updating them and - installing again: - -```javascript -# For .deb - - sudo apt-get update - - # For .rpm (Fedora 21 and below) - - sudo yum check-update - - # For .rpm (Fedora 22 and above) - - sudo dnf check-update -``` - -Running `code.` on Ubuntu when AVAP TM Dev Studio is - already open in the current directory will not bring AVAP TM Dev - Studio into the foreground. This is a feature of the OS which can be - disabled using `ccsm` . - -```javascript -# Install - - sudo apt-get update - - sudo apt-get install compizconfig-settings-manager - - # Run - - ccsm -``` - -Under General > General Options >{' '} - Focus & Raise Behaviour , set "Focus Prevention - Level" to "Off". Remember this is an OS-level setting that - will apply to all applications, not just VS Code. - -This can happen when `sources.list.d` doesn't exist or you - don't have access to create the file. To fix this, try manually - creating the folder and an empty `vscode.list` file: - -```javascript -sudo mkdir /etc/apt/sources.list.d - - sudo touch /etc/apt/sources.list.d/vscode.list -``` - -If you are using X forwarding to use AVAP TM DS remotely, you - will need to use the native title bar to ensure you can properly - manipulate the window. You can switch to using it by setting{' '} - `window.titleBarStyle` to `native` . - -The custom title bar and menus were enabled by default on Linux for - several months. The custom title bar has been a success on Windows, but - the customer response on Linux suggests otherwise. Based on feedback, we - have decided to make this setting opt-in on Linux and leave the native - title bar as the default. - -The custom title bar provides many benefits including great theming - support and better accessibility through keyboard navigation and screen - readers. Unfortunately, these benefits do not translate as well to the - Linux platform. Linux has a variety of desktop environments and window - managers that can make the AVAP TM DS theming look foreign to - users. For users needing the accessibility improvements, we recommend - enabling the custom title bar when running in accessibility mode using a - screen reader. You can still manually set the title bar with the{' '} - Window: Title Bar Style ( - `window.titleBarStyle` ) setting. - -Due to an upstream issue #14787 with Electron, the mouse cursor may render - incorrectly with scaling enabled. If you notice that the usual text cursor - is not being rendered inside the editor as you would expect, try falling - back to the native menu bar by configuring the setting{' '} - `window.titleBarStyle` to `native` . - -If you receive an error similar to the following: - -```javascript -E: Repository '...' changed its 'Origin' value from '...' to '...' - - N: This must be accepted explicitly before updates for this repository - can be applied. See apt-secure(8) manpage for details. -``` - -Use `apt` instead of `apt-get` and you will be - prompted to accept the origin change: - -`sudo apt update` diff --git a/docs/developer.avapframework.com/69_set_SETUP_MacOS.md b/docs/developer.avapframework.com/69_set_SETUP_MacOS.md deleted file mode 100644 index 062a291..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_MacOS.md +++ /dev/null @@ -1,107 +0,0 @@ -## Installation - -## Launching from the command line - -You can also run AVAP™ Dev Studio from the terminal by typing - 'code' after adding it to the path: - -* Launch AVAP™ Dev Studio. -* Open the Command Palette {' '} `(Cmd+Shift+P)` and type 'shell command' to find the{' '} Shell Command: Install 'code' command in PATH {' '} command. - -##IMAGEN## - -* Restart the terminal for the new `$PATH` value to take effect. You'll be able to type 'code .' in any folder to start editing files in that folder. - -Instead of running the command above, you can manually add AVAP™ Dev - Studio to your path, to do so run the following commands: - -```javascript -cat << EOF >> ~/.bash_profile - - Add AVAP™ Dev Studio 2024 (code) - - export PATH="\$PATH:/Applications/AVAP™ Dev Studio - 2024.app/Contents/Resources/app/bin" - - EOF -``` - -Start a new terminal to pick up your `.bash_profile` changes. - -Note: The leading slash \ is required to prevent{' '} - `$PATH` from expanding during the concatenation. Remove the - leading slash if you want to run the export command directly in a - terminal. - -Note: Since `zsh` became the default shell in - macOS Catalina, run the following commands to add AVAP™ Dev Studio to your - path: - -```javascript -`cat << EOF >> ~/.zprofile - - Add AVAP™ Dev Studio 2024 (code) - - export PATH="\$PATH:/Applications/AVAP™ Dev Studio - 2024.app/Contents/Resources/app/bin" - - EOF` -``` - -## Touch Bar support - -Out of the box AVAP™ Dev Studio adds actions to navigate in editor history - as well as the full Debug tool bar to control the debugger on your Touch - Bar: - -##IMAGEN## - -## Mojave privacy protections - -After upgrading to macOS Mojave version, you may see dialogs saying - "AVAP™ Dev Studio 2024 would like to access your - {calendar/contacts/photos}." This is due to the new privacy - protections in Mojave and is not specific to AVAP™ Dev Studio. The same - dialogs may be displayed when running other applications as well. The - dialog is shown once for each type of personal data and it is fine to - choose Don't Allow since AVAP™ Dev Studio does not - need access to those folders. - -## Updates - -AVAP™ Dev Studio ships monthly releases and supports auto-update when a - new release is available. If you're prompted by AVAP™ Dev Studio, - accept the newest update and it will get installed (you won't need - to do anything else to get the latest bits). - -## Preferences menu - -You can configure AVAP™ Dev Studio through settings, color themes, and - custom keybindings available through the{' '} - Code > Preferences menu group. - -## Next steps - -Once you have installed AVAP™ Dev Studio, these topics will help you learn - more about AVAP™ Dev Studio: - -* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. -* User Interface - A quick orientation around AVAP™ Dev Studio. -* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences settings. - -## Common questions - -If you are running macOS Mojave version, you may see dialogs saying - "AVAP™ Dev Studio 2024 would like to access your - {calendar/contacts/photos}." This is due to the new privacy - protections in Mojave discussed above. It is fine to choose{' '} - Don't Allow since AVAP™ Dev Studio does not need - access to those folders. - -If VS Code doesn't update once it restarts, it might be set under - quarantine by macOS. Follow the steps in this issue for resolution. - -Yes, AVAP™ Dev Studio supports macOS Arm64 builds that can run on Macs - with the Apple silicon chipsets. You can install the Universal build, - which includes both Intel and Apple silicon builds, or one of the platform - specific builds. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Network.md b/docs/developer.avapframework.com/69_set_SETUP_Network.md deleted file mode 100644 index 950670e..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_Network.md +++ /dev/null @@ -1,131 +0,0 @@ -AVAP™ Dev Studio 2024 is built on top of Electron and benefits from all - the networking stack capabilities of Chromium. This also means that AVAP™ - Dev Studio 2024 users get much of the networking support available in - Google Chrome. - -## Common hostnames - -A handful of features within AVAP™ Dev Studio 2024 require network - communication to work, such as the auto-update mechanism, querying and - installing extensions, and telemetry. For these features to work properly - in a proxy environment, you must have the product correctly configured. - -If you are behind a firewall that needs to allow specific domains used by - AVAP™ Dev Studio 2024, here's the list of hostnames you should allow - communication to go through: - -* `update.code.visualstudio.com` - AVAP™ Dev Studio 2024 download and update server -* `code.visualstudio.com` - AVAP™ Dev Studio 2024 documentation -* `go.microsoft.com` - Microsoft link forwarding service -* `vscode.blob.core.windows.net` - AVAP™ Dev Studio 2024 blob storage, used for remote server -* `marketplace.visualstudio.com` - AVAP™ Dev Studio 2024 Marketplace -* `*.gallerycdn.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace -* `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace -* `rink.hockeyapp.net` - Crash reporting service -* `bingsettingssearch.trafficmanager.net` - In-product settings search -* `vscode.search.windows.net` - In-product settings search -* `raw.githubusercontent.com` - GitHub repository raw file access -* `vsmarketplacebadges.dev` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace badge service -* `az764295.vo.msecnd.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN (deprecated) -* `vscode.download.prss.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN -* `download.visualstudio.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download server, provides dependencies for some VS Code extensions (C++, C#) -* `vscode-sync.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service -* `vscode-sync-insiders.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service (Insiders) -* `vscode.dev` - Used when logging in with GitHub or Microsoft for an extension or Settings Sync -* `*.vscode-unpkg.net` - Used when loading web extensions -* `default.exp-tas.com` - - `*.gallery.vsassets.io` {' '} - AVAP™ Dev Studio 2024 Experiment Service, used to provide experimental user experiences - -## Proxy server support - -AVAP™ Dev Studio 2024 has exactly the same proxy server support as Google - Chromium. Here's a snippet from Chromium's documentation: - -```javascript -"The Chromium network stack uses the system network settings so that - users and administrators can control the network settings of all - applications easily. The network settings include: - - proxy settings - - SSL/TLS settings - - certificate revocation check settings - - certificate and private key stores" -``` - -This means that your proxy settings should be picked up automatically. - -Otherwise, you can use the following command-line arguments to control - your proxy settings: - -```javascript -# Disable proxy - - --no-proxy-server - - # Manual proxy address - - --proxy-server==[:][;...] | - [:] | "direct://" - - # Manual PAC address - - --proxy-pac-url= - - # Disable proxy per host - - --proxy-bypass-list=(|)[:][;...] -``` - -To learn more about these command-line arguments, see Chromium Network - Settings. - -Authenticated proxies should work seamlessly within AVAP™ Dev Studio 2024 - with the addition of PR #22369. - -The authentication methods supported are: - -* Basic -* Digest -* NTLM -* Negotiate - -When using AVAP™ Dev Studio 2024 behind an authenticated HTTP proxy, the - following authentication popup should appear: - - - -Note that SOCKS5 proxy authentication support isn't implemented yet; - you can follow the issue in Chromium's issue tracker. - -See Chromium HTTP authentication to read more about HTTP proxy - authentication within AVAP™ Dev Studio 2024. - -Often HTTPS proxies rewrite SSL certificates of the incoming requests. - Chromium was designed to reject responses which are signed by certificates - which it doesn't trust. If you hit any SSL trust issues, there are a - few options available for you: - -* Since Chromium uses the OS's certificate trust infrastructure, the preferred option is to add your proxy's certificate to your OS's trust chain. See the Chromium Root Certificate Policy documentation to learn more. -* If your proxy runs in `localhost` , you can always try the --allow-insecure-localhost command-line flag. -* If all else fails, you can tell AVAP™ Dev Studio 2024 to ignore all certificate errors using the --ignore-certificate-errors command-line flag. Warning: This is dangerous and{' '} not recommended , since it opens the door to security issues. - -Extensions don't benefit yet from the same proxy support that AVAP™ - Dev Studio 2024 supports. You can follow this issue's development in - GitHub. - -Similarly to extensions, a few other AVAP™ Dev Studio 2024 features - don't yet fully support proxy networking, namely the CLI interface. - The CLI interface is what you get when running{' '} - `code --install-extension vscodevim.vim` from a command prompt - or terminal. You can follow this issue's development in GitHub. - -Due to both of these constraints, the `http.proxy` ,{' '} - `http.proxyStrictSSL` and `http.proxyAuthorization` - variables are still part of AVAP™ Dev Studio's settings, yet they are - only respected in these two scenarios. - -Here are some helpful links that might help you troubleshoot networking - issues in AVAP™ Dev Studio 2024: - -* Network Settings -* Debugging problems with the network proxy -* Configuring a SOCKS proxy server in Chrome -* Proxy settings and fallback (Windows) diff --git a/docs/developer.avapframework.com/69_set_SETUP_Overview.md b/docs/developer.avapframework.com/69_set_SETUP_Overview.md deleted file mode 100644 index 0ef9f65..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_Overview.md +++ /dev/null @@ -1,119 +0,0 @@ -Getting up and running with AVAP™ Dev Studio 2024 is quick and easy. It is - a small download so you can install in a matter of minutes and give AVAP™ - Dev Studio 2024 a try. - -## Cross platform - -AVAP™ DS is a free code editor, which runs on the macOS, Linux, and - Windows operating systems. - -Follow the platform-specific guides below: - -* macOS -* Linux -* Windows - -AVAP™ Dev Studio 2024 is lightweight and should run on most available - hardware and platform versions. You can review the System Requirements to - check if your computer configuration is supported. - -## Update cadence - -AVAP™ Dev Studio 2024 releases a new version each month with new features - and important bug fixes. Most platforms support auto updating and you will - be prompted to install the new release when it becomes available. You can - also manually check for updates by running{' '} - Help > Check for Updates on Linux and Windows or - running Code > Check for Updates on macOS. - -## Insiders nightly build - -If you'd like to try our nightly builds to see new features early or - verify bug fixes, you can install our Insiders build. The Insiders build - installs side-by-side with the monthly Stable build and you can freely - work with either on the same machine. The Insiders build is the same one - the AVAP™ Dev Studio 2024 development team uses on a daily basis and we - really appreciate people trying out new features and providing feedback. - -## Portable mode - -AVAP™ Dev Studio 2024 supports Portable mode installation. This mode - enables all data created and maintained by VS Code to live near itself, so - it can be moved around across environments, for example, on a USB drive. - See the AVAP™ Dev Studio 2024 Portable Mode documentation for details. - -## Additional components - -AVAP™ Dev Studio 2024 is an editor, first and foremost, and prides itself - on a small footprint. Unlike traditional IDEs that tend to include - everything but the kitchen sink, you can tune your installation to the - development technologies you care about. Be sure to read the Additional - Components topic after reading the platform guides to learn about - customizing your AVAP™ Dev Studio 2024 installation. - -## Extensions - -AVAP™ Dev Studio 2024 extensions let third parties add support for - additional: - -* Languages - C++, C#, Go, Java, Python -* Tools - ESLint, JSHint , PowerShell -* Debuggers - PHP XDebug. -* Keymaps - Vim, Sublime Text, IntelliJ, Emacs, Atom, Brackets, AVAP™ Dev Studio, Eclipse - -Extensions integrate into AVAP™ Dev Studio 2024's UI, commands, and - task running systems so you'll find it easy to work with different - technologies through AVAP™ Dev Studio 2024's shared interface. Check - out the AVAP™ Dev Studio 2024 extension Marketplace to see what's - available. - -## Next steps - -Once you have installed and set up AVAP™ Dev Studio 2024, these topics - will help you learn more about AVAP™ Dev Studio 2024: - -* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. -* User Interface - A quick orientation to AVAP™ Dev Studio 2024. -* Basic Editing - Learn about the powerful AVAP™ Dev Studio 2024 editor. -* Code Navigation - Move quickly through your source code. -* Debugging - Debug your source code directly in the AVAP™ Dev Studio 2024 editor. -* Proxy Server Support - Configure your proxy settings. - -If you'd like to get something running quickly, try the Node.js - tutorial walkthrough that will have you debugging a Node.js web - application with AVAP™ Dev Studio 2024 in minutes. - -## Common questions - -We have a list of System Requirements. - -AVAP™ Dev Studio 2024 is a small download (< 100 MB) and has a - disk footprint of less than 200 MB, so you can quickly install AVAP™ Dev - Studio 2024 and try it out. - -AVAP™ Dev Studio 2024 doesn't include a traditional{' '} - File > New Project dialog or pre-installed project - templates. You'll need to add additional components and scaffolders - depending on your development interests. With scaffolding tools like - Yeoman and the multitude of modules available through the npm package - manager, you're sure to find appropriate templates and tools to create - your projects. - -On Linux and Windows, choose Help > About. On macOS, - use Code > About AVAP™ Dev Studio 2024. - -AVAP™ Dev Studio 2024 has detected that some installation files have been - modified, perhaps by an extension. Reinstalling AVAP™ Dev Studio 2024 will - replace the affected files. See our FAQ topic for more details. - -If you want to remove all user data after uninstalling AVAP™ Dev Studio - 2024, you can delete the user data folders `Code` and{' '} - `.avapds` This will return you to the state before you - installed AVAP™ Dev Studio 2024. This can also be used to reset all - settings if you don't want to uninstall AVAP™ Dev Studio 2024. - -The folder locations will vary depending on your platform: - -* Windows - Delete `%APPDATA%\Code` and{' '} `%USERPROFILE%\.vscode.` -* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.avapds.` -* Linux - Delete `$HOME/.config/Code` and{' '} `~/.avapds.` diff --git a/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md b/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md deleted file mode 100644 index b04e965..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md +++ /dev/null @@ -1,66 +0,0 @@ -You can run AVAP™ Dev Studio 2024 on Raspberry Pi devices. - - - -By downloading and using AVAP™ Dev Studio 2024, you agree to the license - terms and privacy statement. - -## Installation - -AVAP™ Dev Studio 2024 is officially distributed via the Raspberry Pi OS - (previously called Raspbian) APT repository, in both 32-bit and - 64-bit variants. - -You can install it by running: - -| sudo apt update | | sudo apt install code | - -### Running AVAP™ Dev Studio 2024 - -After installing the AVAP™ Dev Studio 2024 package, you can run AVAP™ Dev - Studio 2024 by typing `code` in a terminal or launching it via - the Programming menu. - -## Updates - -Your Raspberry Pi should handle updating AVAP™ Dev Studio 2024 in the same - way as other packages on the system: - -| sudo apt update | | sudo apt upgrade code | - -You can always check when a new release is available in our Updates page. - -## System requirements - -AVAP™ Dev Studio 2024 is supported on these Raspberry Pi models running a - 32-bit or 64-bit version of Raspberry Pi OS: - -* Raspberry Pi 3 Model B/B+ -* Raspberry Pi 4 Model B -* Raspberry Pi 400 - -While 1 GB of memory (RAM) meets the minimum system requirements, - users will benefit from installing AVAP™ Dev Studio 2024 on a Raspberry Pi - 4 with more memory. - -First-generation Raspberry Pi modules and Raspberry Pi Zero are not - supported as they only include an ARMv6 CPU. - -### Workaround for poor performance - -AVAP™ Dev Studio 2024 on Raspberry Pi 4 may be slow with the default - setup. A workaround is to disable hardware (GPU) acceleration in - AVAP™ DS 2024: - -The `"disable-hardware-acceleration": true` runtime - argument switch has the effect of passing the `--disable-gpu` {' '} - command-line argument on AVAP™ Dev Studio 2024 startup. - -## Next steps - -Once you have installed AVAP™ Dev Studio 2024, these topics will help you - learn more about it: - -* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. -* User Interface - A quick orientation to AVAP™ Dev Studio 2024. -* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio 2024 to your preferences through settings. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md b/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md deleted file mode 100644 index 0d67f51..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md +++ /dev/null @@ -1,79 +0,0 @@ -The steps for uninstalling AVAP™ Dev Studio will depend on your platform - (Windows, macOS, or Linux) and the install option that you used. - For example on Windows, you can use the System or User Windows Installers - or download a `.zip` file and extract the contents anywhere on - your machine. - -In general, you would uninstall AVAP™ Dev Studio as you would any other - desktop application and follow your platform's recommended flow for - uninstalling software. Specific platform guidance is provided below as - well as how to completely clean up any remaining AVAP™ Dev Studio - configuration files. - -### Windows - -If you installed AVAP™ Dev Studio via the Windows Installer, either the - User or System version, use the installer to remove AVAP™ Dev Studio. - -* Start menu Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. Select Uninstall from the actions dropdown on the right side (three vertical dots). Follow the prompts to uninstall AVAP™ Dev Studio. -* Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. -* Select Uninstall from the actions dropdown on the right side (three vertical dots). -* Follow the prompts to uninstall AVAP™ Dev Studio. -* Control Panel Under Programs , select the{' '} Uninstall a program link. Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. Follow the prompts to uninstall AVAP™ Dev Studio. -* Under Programs , select the{' '} Uninstall a program link. -* Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. -* Follow the prompts to uninstall AVAP™ Dev Studio. - -If you installed AVAP™ Dev Studio on Windows by downloading and extracting - one of the .zip files found on the AVAP™ Dev Studio website, you can - uninstall by deleting the folder where you extracted the .zip contents. - -### macOS - -To uninstall AVAP™ Dev Studio on macOS, open Finder and go to - Applications. Right-click on the AVAP™ Dev Studio application and select - Move to Trash. - -### Linux - -To uninstall AVAP™ Dev Studio on Linux, you should use your package - manager's uninstall or remove option. The exact command line will - differ depending on which package manager you used (for example,{' '} - `apt-get` , `rpn` , `dnf` , `yum` - , etc.). - -The names for the AVAP™ Dev Studio packages are: - -* `code` - AVAP™ Dev Studio Stable release -* `code-insiders` - AVAP™ Dev Studio Insiders release - -For example, if you installed AVAP™ Dev Studio via the Debian package - ( `.deb` ) and `apt-get` package manager, you - would run: - -```javascript -sudo apt-get remove code -``` - -where code is the name of the AVAP™ Dev Studio Debian package. - -### Clean uninstall - -If you want to remove all user data after uninstalling AVAP™ Dev Studio - 2024, you can delete the user data folders `Code` and{' '} - `.vscode` . This will return you to the state before you - installed AVAP™ Dev Studio 2024. This can also be used to reset all - settings if you don't want to uninstall AVAP™ Dev Studio 2024. - -The folder locations will vary depending on your platform: - -* Windows -{' '} `Delete %APPDATA%\Code and %USERPROFILE%\.vscode` . -* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.vscode` . -* Linux - Delete `$HOME/.config/Code` and{' '} `~/.vscode` . - -### Next steps - -* Setup overview - General information about AVAP™ Dev Studio 2024 setup and updates. -* Windows setup - Details and common questions about installing AVAP™ Dev Studio 2024 on Windows. -* macOS setup - AVAP™ Dev Studio 2024 is available for both Intel and Apple silicon macOS machines. -* Linux setup - Learn about the different AVAP™ Dev Studio 2024 packages available for Linux. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Windows.md b/docs/developer.avapframework.com/69_set_SETUP_Windows.md deleted file mode 100644 index 7f76c47..0000000 --- a/docs/developer.avapframework.com/69_set_SETUP_Windows.md +++ /dev/null @@ -1,119 +0,0 @@ -### Installation - -Alternatively, you can also download a Zip archive, extract it and run - Code from there. - -### User setup versus system setup - -AVAP™ Dev Studio 2024 provides both Windows user and{' '} - system level setups. - -The user setup does not require Administrator privileges to run as the - location will be under your user Local AppData ( - `LOCALAPPDATA` ) folder. Since it requires no elevation, the - user setup is able to provide a smoother background update experience. - This is the preferred way to install AVAP™ Dev Studio 2024 on Windows. - -The system setup requires elevation to Administrator privileges to run and - will place the installation under the system's Program Files. The - in-product update flow will also require elevation, making it less - streamlined than the user setup. On the other hand, installing AVAP™ Dev - Studio 2024 using the system setup means that it will be available to all - users in the system. - -See the Download AVAP™ Dev Studio 2024 page for a complete list of - available installation options. - -### Updates - -AVAP™ Dev Studio 2024 ships monthly releases and supports auto-update when - a new release is available. If you're prompted by AVAP™ Dev Studio - 2024, accept the newest update and it will be installed (you won't - need to do anything else to get the latest bits). - -### Windows Subsystem for Linux - -Windows is a popular operating system and it can be a great cross-platform - development environment. This section describes cross-platform features - such as the Windows Subsystem for Linux (WSL) and the new Windows - Terminal. - -Make sure you are on a recent Windows 10 build. Check{' '} - Settings > Windows Update to see if you are - up-to-date. - -With WSL, you can install and run Linux distributions on Windows. This - enables you to develop and test your source code on Linux while still - working locally on your Windows machine. - -When coupled with the WSL extension, you get full AVAP™ DS editing and - debugging support while running in the context of WSL. - -See the Developing in WSL documentation to learn more or try the Working - in WSL introductory tutorial. - -Available from the Microsoft Store, the Windows Terminal (Preview) - lets you easily open PowerShell, Command Prompt, and WSL terminals in a - multiple tab shell. - -### Next steps - -Once you have installed AVAP™ Dev Studio, these topics will help you learn - more about AVAP™ Dev Studio: - -* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. -* User Interface - A quick orientation to AVAP™ Dev Studio. -* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. -* Tips and Tricks - Lets you jump right in and learn how to be productive with AVAP™ Dev Studio. - -### Common questions - -AVAP™ Dev Studio uses Inno Setup to create its setup package for Windows. - Thus, all the Inno Setup command-line switches are available for use. - -Additionally, you can prevent the Setup from launching AVAP™ Dev Studio - after completion with `/mergetasks=!runcode` . - -On certain devices, editor scrolling is not smooth but laggy for an - unpleasant experience. If you notice this issue, make sure you install the - Windows 10 October 2018 update where this issue is fixed. - -Try using the zip file instead of the installer. To use this, unzip AVAP™ - Dev Studio in your `AppData\Local\Programs` folder. - -I installed AVAP™ Dev Studio on my Windows 8 machine. Why are some icons - not appearing in the workbench and editor? - -AVAP™ Dev Studio uses SVG icons and we have found instances where the .SVG - file extension is associated with something other than{' '} - `image/svg+xml` . We're considering options to fix it, but - for now here's a workaround: - -Using the Command Prompt: - -Using the Registry Editor (regedit): - -With the introduction of process sandboxing (discussed in this blog - post) running as administrator is currently unsupported when AppLocker - is configured due to a limitation of the runtime sandbox. If your work - requires that you run AVAP™ Dev Studio from an elevated terminal, you can - launch `code` with{' '} - `--no-sandbox --disable-gpu-sandbox` as a workaround. - -Subscribe to issue #122951 to receive updates. - -Beginning with version `1.78.1` , AVAP™ Dev Studio on Windows - will only allow to access UNC paths (these begin with a leading{' '} - `\\` ) that were either approved by the user on startup or - where the host name is configured to be allowed via the new{' '} - `security.allowedUNCHosts setting` . - -If you rely on using UNC paths in AVAP™ Dev Studio, you can either - -* configure the host to be allowed via the{' '} `security.allowedUNCHosts` setting (for example add{' '} `server-a` when you open a path such as{' '} `\\server-a\path` ) -* map the UNC path as network drive and use the drive letter instead of the UNC path (documentation) -* define a global environment variable{' '} `NODE_UNC_HOST_ALLOWLIST` with the backslash-separated list of hostnames to allow, for example: `server-a\server-b` to allow the hosts `server-a` and `server-b` . - -This change was done to improve the security when using AVAP™ Dev Studio - with UNC paths. Please refer to the associated security advisory for more - information. diff --git a/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md b/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md deleted file mode 100644 index 1de26fa..0000000 --- a/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md +++ /dev/null @@ -1,176 +0,0 @@ -## ws/users.py/set_blockchain_accounts - -### Receives - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -```javascript -{ - "status" - :{' '} - true - , - "message" - :{' '} - - "BlockChain Account for User 95 Set to 23" - - , - "codtran" - :{' '} - "f856c5db007fcaa5a00b9a4d56a9d40a" - "elapsed" - :{' '} - 0.778839111328125 - - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `message` : Mensaje de confirmación. -* `codtran` : Transaction code. -* `elapsed:` Operation execution time. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "nivel" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - - - url ={' '} - - "http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23" - - - - payload= - { - } - - headers ={' '} - { - '101ObexApiKey' - :{' '} - 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' - - } - - - response = requests - .request - ( - "GET" - , url - , headers - =headers - , data - =payload - ) - - - print - (response - .text - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - - var options = { - 'method': 'GET', - 'url': - 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&network_id=23', - 'headers': { - '101ObexApiKey': 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' - } - - }; - - request(options, function (error, response) { - if (error) throw new Error(error); - console.log(response.body); - - }); -``` - -### JavaScript - Fetch: - -```javascript -var myHeaders = new Headers(); - - myHeaders.append("101ObexApiKey", - "KcM6Vr7EfNnKScEi00jdritBzNjWAOkz"); - - - var requestOptions = { - method: 'GET', - headers: myHeaders, - redirect: 'follow' - - }; - - - fetch("http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23", - requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request GET{' '} - - 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23' - {' '} - \ - - --header{' '} - - '101ObexApiKey: KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' -``` - -## Business logic: - -This service aims to select one of the user's blokchain accounts as - active by default. diff --git a/docs/developer.avapframework.com/69_set_set_blokchain_network.md b/docs/developer.avapframework.com/69_set_set_blokchain_network.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md b/docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md b/docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md b/docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md b/docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md deleted file mode 100644 index adfc909..0000000 --- a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md +++ /dev/null @@ -1,371 +0,0 @@ -GitHub is a cloud-based service for storing and sharing source code. Using - GitHub with AVAP™ Dev Studio lets you share your source code and - collaborate with others right within your editor. There are many ways to - interact with GitHub, for example, via their website at{' '} - https://github.com or the [Git] - command-line interface (CLI), but in AVAP™ Dev Studio, the rich - GitHub integration is provided by the GitHub Pull Requests and Issues - extension. - -[Install the GitHub Pull Requests and Issues extension] - -To get started with the GitHub in AVAP TM Dev Studio, you'll - need to install Git, create a GitHub account and install the GitHub Pull - Requests and Issues extension. In this topic, we'll demonstrate how - you can use some of your favorite parts of GitHub without leaving AVAP™ - Dev Studio. - -If you're new to source control or want to learn more about AVAP™ Dev - Studio's basic Git support, you can start with the Source Control - topic. - -## Getting started with GitHub Pull Requests and Issues - -Once you've installed the GitHub Pull Requests and Issues extension, - you'll need to sign in. Follow the prompts to authenticate with GitHub - in the browser and return to AVAP™ Dev Studio. - -If you are not redirected to AVAP TM Dev Studio, you can add - your authorization token manually. In the browser window, you will receive - your authorization token. Copy the token, and switch back to AVAP - TM Dev Studio. Select{' '} - Signing in to github.com... in the Status bar, paste the - token, and hit Enter. - -## Setting up a repository - -### Cloning a repository - -You can search for and clone a repository from GitHub using the{' '} - Git: Clone command in the Command Palette - (Ctrl+Shift+P) or by using the Clone Repository {' '} - button in the Source Control view (available when you have no folder - open). - -From the GitHub repository dropdown you can filter and pick the repository - you want to clone locally. - -### Authenticating with an existing repository - -Enabling authentication through GitHub happens when you run any Git action - in AVAP TM Dev Studio that requires GitHub authentication, such - as pushing to a repository that you're a member of or cloning a - private repository. You don't need to have any special extensions - installed for authentication; it is built into AVAP TM Dev - Studio so that you can efficiently manage your repository. - -When you do something that requires GitHub authentication, you'll see - a prompt to sign in: - -Follow the steps to sign into GitHub and return to AVAP TM Dev - Studio. If authenticating with an existing repository doesn't work - automatically, you may need to manually provide a personal access token. - See About authentication to GitHub for more information and details about - each option.{' '} - -Note that there are several ways to authenticate to GitHub, including - using your username and password with two-factor authentication - (2FA), a personal access token, or an SSH key. See About - authentication to GitHub for more information and details about each - option. - -## Editor integration - -### Hovers - -When you have a repository open and a user is @-mentioned, you can hover - over that username and see a GitHub-style hover. - -There is a similar hover for #-mentioned issue numbers, full GitHub issue - URLs, and repository specified issues. - -### Suggestions - -User suggestions are triggered by the "@" character and issue - suggestions are triggered by the "#" character. Suggestions are - available in the editor and in the Source Control {' '} - view's input box. - -The issues that appear in the suggestion can be configured with the{' '} - GitHub Issues: Queries (githubIssues.queries) - setting. The queries use the GitHub search syntax. - -You can also configure which files show these suggestions using the - settings GitHub Issues: Ignore Completion Trigger ( - `githubIssues.ignoreCompletionTrigger` ) and{' '} - GitHub Issues: Ignore User Completion Trigger ( - `githubIssues.ignoreUserCompletionTrigger` ). These settings - take an array of language identifiers to specify the file types. - -```javascript -// Languages that the '#' character should not be used to trigger issue - completion suggestions. - - "githubIssues.ignoreCompletionTrigger": [` `"python" - ] -``` - -## Pull requests - -From the Pull Requests view you can view, manage, and - create pull requests. - -The queries used to display pull requests can be configured with the{' '} - GitHub Pull Requests: Queries ( - `githubPullRequests.queries` ) setting and use the GitHub - search syntax. - -```javascript -"githubPullRequests.queries": [` `{ - ` `"label": "Assigned To Me", - ` `"query": "is:open assignee:${user}" - ` `}, -``` - -### Creating Pull Requests - -Once you have committed changes to your fork or branch, you can use the{' '} - GitHub Pull Requests: Create Pull Request command or the{' '} - Create Pull Request button in the{' '} - Pull Requests view to create a pull request. - -A new Create view will be displayed where you can select - the base repository and base branch you'd like your pull request to - target as well as fill in the title and description. If your repository - has a pull request template, this will automatically be used for the - description. - -Use the buttons in the action bar at the top to add{' '} - Assignees , Reviewers ,{' '} - Labels and a Milestone . - -The Create button menu allows you to select alternative - create options, such as Create Draft or enable an{' '} - Auto-Merge method. - -Once you select Create , if you have not already pushed - your branch to a GitHub remote, the extension will ask if you'd like - to publish the branch and provides a dropdown to select the specific - remote. - -The Create Pull Request view now enters{' '} - Review Mode , where you can review the details of the PR, - add comments, and merge the PR once it's ready. After the PR is - merged, you'll have the option to delete both the remote and local - branch. - -### Reviewing - -Pull requests can be reviewed from the Pull Requests {' '} - view. You can assign reviewers and labels, add comments, approve, close, - and merge all from the pull request Description . - -From the Description page, you can also easily checkout - the pull request locally using the Checkout button. This - will switch AVAP™ Dev Studio to open the fork and branch of the pull - request (visible in the Status bar) in Review Mode and add a new{' '} - Changes in Pull Request view from which you can view - diffs of the current changes as well as all commits and the changes within - these commits. Files that have been commented on are decorated with a - diamond icon. To view the file on disk, you can use the{' '} - Open File inline action. - -The diff editors from this view use the local file, so file navigation, - IntelliSense, and editing work as normal. You can add comments within the - editor on these diffs. Both adding single comments and creating a whole - review is supported. - -When you are done reviewing the pull request changes you can merge the PR - or select Exit Review Mode to go back to the previous - branch you were working on. - -## Issues - -### Creating issues - -Issues can be created from the + button in the{' '} - Issues view and by using the{' '} - GitHub Issues: Create Issue from Selection and{' '} - GitHub Issues: Create Issue from Clipboard commands. They - can also be created using a Code Action for "TODO" comments. - When creating issues, you can take the default description or select the{' '} - Edit Description pencil icon in the upper right to bring - up an editor for the issue body. - -You can configure the trigger for the Code Action using the{' '} - GitHub Issues: Create Issue Triggers {' '} - (githubIssues.createIssueTriggers) setting. - -The default issue triggers are: - -```javascript -"githubIssues.createIssueTriggers": [` `"TODO", - ` `"todo", - ` `"BUG", - ` `"FIXME", - ` `"ISSUE", - ` `"HACK" - ] -``` - -### Working on issues - -From the Issues view, you can see your issues and work on - them. - -By default, when you start working on an issue ( - Start Working on Issue context menu item), a branch - will be created for you, as shown in the Status bar in the image below. - -The Status bar also shows the active issue and if you select that item, a - list of issue actions are available such as opening the issue on the - GitHub website or creating a pull request. - -You can configure the name of the branch using the{' '} - GitHub Issues: Issue Branch Title ( - `githubIssues.issueBranchTitle` ) setting. If your workflow - doesn't involve creating a branch, or if you want to be prompted to - enter a branch name every time, you can skip that step by turning off the{' '} - GitHub Issues: Use Branch For Issues ( - `githubIssues.useBranchForIssues` ) setting. - -Once you are done working on the issue and want to commit a change, the - commit message input box in the Source Control view will - be populated with a message, which can be configured with{' '} - GitHub Issues: Working Issue Format SCM ( - `githubIssues.workingIssueFormatScm` ). - -## GitHub Repositories extension - -The GitHub Repositories extension lets you quickly browse, search, edit, - and commit to any remote GitHub repository directly from within AVAP - TM Dev Studio, without needing to clone the repository locally. - This can be fast and convenient for many scenarios, where you just need to - review source code or make a small change to a file or asset. - -### Opening a repository - -Once you have installed the GitHub Repositories extension, you can open a - repository with the{' '} - GitHub Repositories: Open Repository... command from the - Command Palette (Ctrl+Shift+P) or by clicking the Remote indicator - in the lower left of the Status bar. - -When you run the Open Repository command, you then choose - whether to open a repository from GitHub, open a Pull Request from GitHub, - or reopen a repository that you had previously connected to. - -If you haven't logged into GitHub from AVAP TM Dev Studio - before, you'll be prompted to authenticate with your GitHub account. - -You can provide the repository URL directly or search GitHub for the - repository you want by typing in the text box. - -Once you have selected a repository or Pull Request, the AVAP™ Dev Studio - window will reload and you will see the repository contents in the File - Explorer. You can then open files (with full syntax highlighting and - bracket matching), make edits, and commit changes, just like you would - working on a local clone of a repository. - -One difference from working with a local repository is that when you - commit a change with the GitHub Repository extension, the changes are - pushed directly to the remote repository, similar to if you were working - in the GitHub web interface. - -Another feature of the GitHub Repositories extension is that every time - you open a repository or branch, you get the up-to-date sources available - from GitHub. You don't need to remember to pull to refresh as you - would with a local repository. - -The GitHub Repositories extension supports viewing and even committing - LFS-tracked files without needing to install Git LFS (Large File - System) locally. Add the file types you want tracked with LFS to a - .gitattributes file, then commit your changes directly to GitHub using the - Source Control view. - -### Switching branches - -You can easily switch between branches by clicking on the branch indicator - in the Status bar. One great feature of the GitHub Repositories extension - is that you can switch branches without needing to stash uncommitted - changes. The extension remembers your changes and reapplies them when you - switch branches. - -### Remote Explorer - -You can quickly reopen remote repositories with the Remote Explorer - available on the Activity bar. This view shows you the previously opened - repositories and branches. - -### Create Pull Requests - -If your workflow uses Pull Requests, rather than direct commits to a - repository, you can create a new PR from the Source Control view. - You'll be prompted to provide a title and create a new branch. - -Once you have created a Pull Request, you can use the GitHub Pull Request - and Issues extension to review, edit, and merge your PR as described - earlier in this topic. - -### Virtual file system - -Without a repository's files on your local machine, the GitHub - Repositories extension creates a virtual file system in memory so you can - view file contents and make edits. Using a virtual file system means that - some operations and extensions which assume local files are not enabled or - have limited functionality. Features such as tasks, debugging, and - integrated terminals are not enabled and you can learn about the level of - support for the virtual file system via the{' '} - features are not available link in the Remote indicator - hover. - -Extension authors can learn more about running in a virtual file system - and workspace in the Virtual Workspaces extension author's guide. - -### Continue Working On... - -Sometimes you'll want to switch to working on a repository in a - development environment with support for a local file system and full - language and development tooling. The GitHub Repositories extension makes - it easy for you to: - -* Create a GitHub codespace (if you have the GitHub Codespaces extension). -* Clone the repository locally. -* Clone the repository into a Docker container (if you have Docker and the Microsoft Docker extension installed). - -To switch development environments, use the{' '} - Continue Working On... command, available from the - Command Palette ( `Ctrl+Shift+P` ) or by clicking on the - Remote indicator in the Status bar. - -If you are using the browser-based editor, the{' '} - "Continue Working On..." command has the - options to open the repository locally or within a cloud-hosted - environment in GitHub Codespaces. - -The first time that you use Continue Working On with - uncommitted changes, you will have the option to bring your edits to your - selected development environment using Cloud Changes , - which uses a AVAP™ Dev Studio service to store your pending changes. - -These changes are deleted from our service once they are applied to your - target development environment. If you choose to continue without your - uncommitted changes, you can always change this preference later by - configuring the setting " - `workbench.cloudChanges.continueOn` ": " - `prompt` ". - -## GitHub Copilot - -In AVAP TM Dev Studio, you can enhance your coding with - artificial intelligence (AI), such as suggestions for lines of - code or entire functions, fast documentation creation, and help creating - code-related artifacts like tests. - -GitHub Copilot is an AI-powered code completion tool that helps you write - code faster and smarter. You can use the GitHub Copilot extension in AVAP - TM Dev Studio to generate code, or to learn from the code it - generates. - -You can learn more about how to get started with Copilot in the Copilot - documentation. diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md deleted file mode 100644 index dfb1b6d..0000000 --- a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md +++ /dev/null @@ -1,153 +0,0 @@ -This topic answers frequently asked questions about using Git source - control and GitHub in AVAP TM Dev Studio. - -## Git - -### How to revert or undo a Git commit? - -Revert your last commit with the Git: Undo Last Commit {' '} - command. This will reset your branch to the state right before you did the - commit, including all changes. The command is also available as menu in{' '} - More Actions ... under Commit on the top - of the Source Control view. - -### How to rename a local branch? - -The Git: Rename Branch… command will prompt you for the - new name. - -### How to I undo a git add before committing? - -Added files listed in the Staged Changes can be unstaged - with the - icon or by drag-and-drop. - -### How to I edit the most recent commit message? - -To update the commit message for the last local commit use the{' '} - Git: Commit Staged (Amend) command. It will open - an editor to edit and save the last message. Make sure that no other - changes are staged, as they would be included with the commit. - -### I initialized my repo but the actions in the ... menu are all grayed out - -To push, pull, and sync you need to have a Git origin set - up. You can get the required URL from the repository host. Once you have - that URL, you need to add it to the Git settings by running a couple of - command-line actions. For example: - -```javascript -\> git remote add origin https://github.com//.git - - \> git push -u origin main -``` - -### My team is using Team Foundation Version Control (TFVC) instead of - Git. What should I do? - -Use the Azure Repos extension and this will light up TFVC support. - -### Why do the Pull, Push and Sync actions never finish? - -This usually means there is no credential management configured in Git and - you're not getting credential prompts for some reason. - -You can always set up a credential helper in order to pull and push from a - remote server without having AVAP TM Dev Studio prompt for your - credentials each time. - -### How can I sign in to Git with my Azure DevOps organization that requires - multi-factor authentication? - -Git Credential Manager (GCM) is the recommended Git credential - helper for Windows, macOS, and Linux. If you're running Git for - Windows, GCM has already been installed and configured for you. If - you're running on macOS or Linux, the GCM README has setup - instructions. - -### I have GitHub Desktop installed on my computer but AVAP Dev Studio ignores - it - -AVAP™ Dev Studio only supports the official Git distribution for its Git - integration. - -### I keep getting Git authentication dialogs whenever AVAP Dev Studio is - running - -AVAP TM Dev Studio automatically fetches changes from the server - in order to present you with a summary of incoming changes. The Git - authentication dialog is independent from AVAP TM Dev Studio - itself and is a part of your current Git credential helper. - -One way to avoid these prompts is to set up a credential helper that - remembers your credentials. - -Another option is to disable the auto fetch feature by changing the - following setting: " `git.autofetch":` {' '} - `false` . - -### Why is AVAP Dev Studio warning me that the git repository is potentially - unsafe? - -AVAP™ Dev Studio uses `git.exe` for executing all Git - operations. Starting with Git 2.35.2, users are prevented from running Git - operations in a repository that is in a folder that owned by a user other - than the current user as the repository is deemed to be potentially - unsafe. - -If you try to open such a repository, AVAP TM Dev Studio will - show a welcome view in the Source Control view or an error notification. - Both the welcome view and the notification contain the{' '} - Manage Unsafe Repositories command that lets you review - the list of potentially unsafe repositories, mark them as safe, and open - them. The Manage Unsafe Repositories command is also - available in the Command Palette ( `Ctrl+Shift+P` ). - Marking a repository as safe will add the repository location to the - safe.directory git configuration. - -On Windows, a common scenario where this can occur is when a repository is - cloned using an application (for example, Windows Terminal or AVAP - TM Dev Studio) that runs "as administrator", but - the repository is opened using another application or instance (for - example, AVAP TM Dev Studio) that does not run "as - administrator". - -### Why isn't AVAP™ Dev Studio discovering Git repositories in parent - folders of workspaces or open files? - -AVAP TM Dev Studio uses - `git rev-parse --show-toplevel` to determine the root of a Git - repository. In most cases, the root of the Git repository is inside the - workspace, but there are scenarios where the root of the Git repository is - in the parent folders of the workspace or the open file(s). While - opening Git repositories in parent folders of workspaces or open files is - a great feature for advanced users, it can be confusing for new users. We - have seen cases where this confusion resulted in discarding changes from - these Git repositories causing data loss. - -To avoid confusion, and to reduce the risk of data loss, AVAP TM {' '} - Dev Studio will display a notification and a new welcome view in the - Source Control view, and will not automatically open Git repositories from - the parent folders of workspaces and open files. - -You can control how Git repositories from parent folders are handled using - the `git.openRepositoryInParentFolders` setting. If you would - like to restore the old behavior, set the{' '} - `git.openRepositoryInParentFolders` setting to{' '} - `always` . - -### Can I use SSH Git authentication with AVAP™ Dev Studio? - -Yes, though AVAP TM Dev Studio works most easily with SSH keys - without a passphrase. If you have an SSH key with a passphrase, you'll - need to launch AVAP TM Dev Studio from a Git Bash prompt to - inherit its SSH environment. - -## GitHub - -### Is GitHub Enterprise supported? - -AVAP TM Dev Studio has official support for authentication with - GitHub Enterprise Servers. Open a local checkout of a GHES repository and - you will be prompted to sign in with your GitHub Enterprise Server - account. diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md deleted file mode 100644 index 7c20403..0000000 --- a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md +++ /dev/null @@ -1,213 +0,0 @@ -Want to easily manage your source code and collaborate with others? Git - and GitHub are the tools you need! And with AVAP TM Dev Studio, - you can set up and use them in a snap. Even if you're a beginner, AVAP - TM Dev Studio's user-friendly interface guides you through - common Git actions like pushing and pulling code, creating and merging - branches, and committing code changes. And if you're a pro, you'll - love the ability to perform Git actions directly within the editor, saving - you time and effort compared to using the Git command line. Plus, the - seamless workflow between AVAP TM Dev Studio and Git means you - can stay in your editor and get more done. - -## Set up Git in AVAP™ Dev Studio - -To use Git and GitHub in AVAP TM Dev Studio, first make sure you - have Git installed on your computer. If Git is missing, the{' '} - Source Control view shows instructions on how to install - it. Make sure to restart AVAP TM Dev Studio afterwards. - -Additionally you can sign into AVAP TM Dev Studio with your - GitHub account in the Accounts menu in the lower right of - the Activity bar to enables additional features like Settings Sync, but - also cloning and publishing repositories from GitHub. - -## Open a Git repository - -AVAP TM Dev Studio provides several ways to get started in a Git - repository, from local to remote cloud-powered environments like GitHub - Codespaces. - -### Clone a repository locally - -To clone a repository from GitHub, execute the Git: Clone {' '} - command or select the Clone Repository button in the{' '} - Source Control view. If you clone from GitHub, AVAP - TM Dev Studio will prompt you to authenticate with GitHub. This - allows you to search all available repositories and clone private - repositories. For other Git providers, enter the repository URL and select{' '} - Clone and pick a folder. AVAP TM Dev Studio - opens the folder once the repository is cloned on your local machine. - -### Initialize a repository in a local folder - -To initialize a new local repository, pick an existing or new folder on - your computer and open it in AVAP TM Dev Studio. In the{' '} - Source Control view, select the{' '} - Initialize Repository button. This creates a new Git - repository in the current folder, allowing you to start tracking code - changes. - -Once you have a local Git repository set up, you can publish it to GitHub. - This will create a new repository on your GitHub account, and push your - local code to the remote repository. Having your source code on a remote - repository is a great way to back up your code, collaborate with others, - and automate your workflow with GitHub Actions. - -Use the Publish to GitHub command button in the{' '} - Source Control view. You can then choose a name and - description for the repository, and whether to make it public or private. - Once the repository has been created, AVAP TM Dev Studio will - push your local code to the remote repository. Your code is now backed up - on GitHub, and you can start collaborating with others with commits and - pull requests. - -### Open a GitHub repository in a codespace - -GitHub Codespaces let you open a GitHub repository in a full configured - cloud-based development environment, allowing you to develop in a browser - without having to install any software on your local computer. GitHub - Codespaces allows free usage for individuals, which makes it easy to get - started working on open source projects. - -Install the GitHub Codespaces extension into AVAP TM Dev Studio - and sign in with GitHub. Run the{' '} - Codespaces: Create New Codespace command and pick the - repository and branch you want to open. The new codespace will open in a - new window. - -Alternatively, you can also start with a template from the GitHub's - Codespaces site. If you already have a codespace open in your browser, you - can open it in your AVAP TM Dev Studio Desktop by running the{' '} - - Codespaces: Open in AVAP TM Dev Studio Desktop - {' '} - command. You can learn more about GitHub Codespaces, including - customization such as forwarding ports, in the Developing in a codespace - documentation. - -### Open a GitHub repository remotely - -AVAP TM Dev Studio's remote repository support allows you to - browse and edit a GitHub repository without cloning it to your local - computer. This is useful for quickly making changes to a remote repository - without having to clone the entire codebase to your machine. - -First install the GitHub Repositories extension. Run the command{' '} - Remote Repositories: Open Remote Repository... or use the{' '} - Open Remote Repository button the Explorer view. Search - and select the GitHub repository that you want to open. - -## Staging and committing code changes - -Once you have a Git repository set up, you can start tracking code changes - by staging and committing your newly created and edited code. - -To stage a file, select the + (plus) icon next to - the file in the Source Control view. This will add the - file to the Staged Changes section, indicating that it - will be included in the next commit. Staged changes can also be discarded - by selecting the − (minus) icon next to the - file. - -To commit your staged changes, type a commit message in the upper text box - and select the Commit button. This saves your changes to - the local Git repository, allowing you to revert to previous versions of - your code if needed. You can navigate through and review all local file - changes and commits in the Timeline view available in the - bottom of the Explorer. - -## Pushing and pulling remote changes - -Once you have made commits to your local Git repository, you can push them - to the remote repository. The Sync Changes button - indicates how many commits are going to be pushed and pulled. Selecting - the Sync Changes button downloads (pull) any new - remote commits and uploads (push) new local commits to the remote - repository. - -Push and pull can also be performed individually by using their respective - commands. - -## Using branches - -In Git, branches allow you to work on multiple versions of your codebase - simultaneously. This is useful for experimenting with new features or - making large code changes without affecting the main codebase. - -The branch indicator in the Status bar shows the current branch and lets - you switch to new and existing branches. To create a new branch, select - the branch indicator and choose to create it from the current branch or - another local one. Type a name for the new branch, and confirm. AVAP - TM Dev Studio creates a new branch and switches to it, allowing - you to make changes to your code without affecting the main branch. - -To push the branch to the remote repository, select{' '} - Publish Branch in the Source Control {' '} - view. This will create a new branch on the remote repository, allowing you - to collaborate with others in that branch. - -### Creating and reviewing GitHub pull requests - -In Git and GitHub, pull requests (PRs) are a way for collaborators - to review and merge code changes from separate branches into the main - branch. This allows teams to review and approve code changes before they - are incorporated into the main codebase, ensuring that only high-quality - changes are merged. - -To use pull requests in AVAP TM Dev Studio, you need to install - the GitHub Pull Requests and Issues extension. This extension adds PR and - issue tracking functionality to AVAP TM Dev Studio, allowing you - to create, review, and merge PRs from within the editor. - -To create a PR, make sure you are on a separate branch from the main - branch, and push your code changes to the remote repository. In the{' '} - Source Control view, select the{' '} - Create Pull Request button. This will open the PR - creation form, where you can enter a title and description for the PR, and - choose which branch to merge the changes into. Select{' '} - Create to create the PR. - -To review a PR, select the Review Pull Request button in - the Source Control view, and select the PR you want to - review. This will open the PR in a new editor window, where you can review - the code changes and leave comments. Once you are satisfied with the code - changes, you can select the Merge button to merge the PR - into the targeted branch. - -Learn more about pull requests in AVAP TM Dev Studio's - GitHub documentation - -## Using Git in the built-in terminal - -As all Git state is kept in the local repository, you can easily switch - between AVAP TM Dev Studio's UI, the built-in - terminal/docs/terminal/basics, or external tools like GitHub Desktop. You - can also set up AVAP TM Dev Studio as your default Git editor, - allowing you to use AVAP TM Dev Studio to edit commit messages - and other Git-related files. - -### Git Bash on Windows - -Git Bash is a popular shell environment for Windows that provides a - Unix-like command-line interface for working with Git and other - command-line tools. AVAP TM Dev Studio's integrated terminal - supports Git Bash as a shell, allowing you to seamlessly integrate Git - Bash into your development workflow. Installing Git on your Windows - machine will also install Git Bash, if it wasn't deselected during the - installation steps. - -Start by opening View > Terminal {' '} - (Ctrl+`). Click on the dropdown arrow next to the + icon in the - terminal panel to pick a new shell to open. If Git Bash is installed, it - will be shown in the list. You can toggle between different terminals and - shells in the Terminal sidebar. With Git Bash configured in AVAP - TM Dev Studio, you can now use all of your favorite Git - commands directly from the terminal in your code editor. - -If you want to set Git Bash as your default shell, open the Terminal - dropdown (next to the + icon) and select{' '} - Select Default Profile . This will open a list of - available shells, including Git Bash. Selecting Git Bash will set it as - your default shell, and all future terminals will be opened with Git Bash. - More advanced tips are available in the terminal - documentation](/docs/terminal/basics). diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md deleted file mode 100644 index dc88791..0000000 --- a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md +++ /dev/null @@ -1,345 +0,0 @@ -AVAP TM Dev Studio has integrated source control management - (SCM) and includes Git support out-of-the-box. Many other source - control providers are available through extensions on the AVAP - TM Dev Studio Marketplace. - -## Working in a Git repository - -The Source Control icon in the Activity Bar on the left will always - indicate an overview of how many changes you currently - have in your repository. Selecting the icon will show you the details of - your current repository changes: CHANGES ,{' '} - STAGED CHANGES and MERGE CHANGES . - -Clicking each item will show you in detail{' '} - the textual changes within each file . Note that for - unstaged changes, the editor on the right still lets you edit the file: - feel free to use it! - -You can also find indicators of the{' '} - status of your repository in the bottom-left corner of - AVAP TM Dev Studio: the current branch ,{' '} - dirty indicators , and the number of{' '} - incoming and outgoing commits of the current branch. You - can checkout any branch in your repository by clicking - that status indicator and selecting the Git reference from the list. - -## Commit - -Staging (git add) and unstaging {' '} - (git reset) can be done via contextual actions in the files or by - drag-and-drop. - -Configure your Git username and email. When you commit, - be aware that if your username and/or email is not set in your Git - configuration, Git will fall back to using information from your local - machine. You can find the details in Git commit information. - -You can type a commit message above the changes and press{' '} - `Ctrl+Enter` (macOS: ⌘ `+Enter` ) to commit - them. If there are any staged changes, only those changes will be - committed. Otherwise, you'll get a prompt asking you to select what - changes you'd like to commit and get the option to change your commit - settings. - -We've found this to be a great workflow. For example, in the earlier - screenshot, only the staged changes to `overview.png` will be - included in the commit. Later staging and commit actions could include the - changes to `versioncontrol.md` and the two other{' '} - `.png` images as a separate commit. - -More specific Commit actions can be found in the{' '} - Views and More Actions ... menu on the top of the Source - Control view. - -## Cloning a repository - -If you haven't opened a folder yet, the Source Control view will give - you the options to Open Folder from your local machine or{' '} - Clone Repository . - -If you select Clone Repository , you will be asked for the - URL of the remote repository (for example on GitHub) and the - parent directory under which to put the local repository. - -For a GitHub repository, you would find the URL from the GitHub{' '} - Code dialog. - -You would then paste that URL into the Git: Clone prompt. - -You'll also see the option to Clone from GitHub . Once - you authenticate with your GitHub account in AVAP TM Dev - Studioe, you'll be able to search through repositories by name, and - select any repo to clone it. You can also start the flow to clone a Git - repository with the Git: Clone command in the{' '} - Command Palette (Ctrl+Shift+P). To see a - step-by-step walkthrough, check out our Clone repos from AVAP TM {' '} - Dev Studio video. - -## Branches and Tags - -You can create and checkout branches directly within AVAP TM Dev - Studio through the Git: Create Branch and{' '} - Git: Checkout to commands in the{' '} - Command Palette ( `Ctrl+Shift+P` ). - -If you run Git: Checkout to , you will see a dropdown list - containing all of the branches or tags in the current repository. It will - also give you the option to create a new branch if you decide that's a - better option, or checkout a branch in detached mode. - -The Git: Create Branch command lets you quickly create a - new branch. Just provide the name of your new branch and AVAP TM {' '} - Dev Studio will create the branch and switch to it. If you choose to{' '} - Create new branch from... , you'll get an extra prompt - that allows you to specify which commit the new branch should be pointing - to. - -## Remotes - -Given that your repository is connected to some remote and that your - checked out branch has an upstream link to a branch in that remote, AVAP - TM Dev Studio offers you useful actions to{' '} - push , pull , and sync {' '} - that branch (the latter will run a pull command - followed by a push command). You can find these - actions in the Views and More Actions ... menu, along - with the option to add or remove a remote . - -AVAP TM Dev Studio is able to periodically fetch changes from - your remotes. This enables AVAP TM Dev Studio to show how many - changes your local repository is ahead or behind the remote. This feature - is disabled by default and you can use the git.autofetch - setting(/docs/getstarted/settings) to enable it. - -## Git Status Bar actions - -There is a Synchronize Changes action in the Status Bar, - next to the branch indicator, when the current checked out branch has an - upstream branch configured. Synchronize Changes will pull - remote changes down to your local repository and then push local commits - to the upstream branch. - -If there is no upstream branch configured and the Git repository has - remotes set up, the Publish action is enabled. This will - let you publish the current branch to a remote. - -## Gutter indicators - -If you open a folder that is a Git repository and begin making changes, - AVAP TM Dev Studio will add useful annotations to the gutter and - to the overview ruler. - -* A red triangle indicates where lines have been deleted -* A green bar indicates new added lines -* A blue bar indicates modified lines - -## Merge conflicts - -Merge conflicts are recognized by AVAP TM Dev Studio. - Differences are highlighted and there are inline actions to accept either - one or both changes. Once the conflicts are resolved, stage the - conflicting file so you can commit those changes. - -## 3-way merge editor - -To help you resolve merge conflicts, AVAP TM Dev Studio provides - a 3-way merge editor where you can interactively accept incoming and - current changes and view and edit the resulting merged file. The 3-way - merge editor is opened by selecting the{' '} - Resolve in Merge Editor button in the bottom right corner - of a file with Git merge conflicts. - -The 3-way merge editor displays separate views for{' '} - Incoming changes (on the left),{' '} - Current changes (on the right), and the{' '} - Result of the merge (at the bottom). Conflicts - are highlighted and can be resolved by using the CodeLens buttons. - -### Resolving conflicts - -The 3-way merge editor allows you to resolve conflicts by accepting either - one or both changes. You can also manually edit the result of the merge. - -For some conflicts, the merge editor shows an{' '} - Accept Combination button. Accepting the combination - resolves the current conflict by smartly merging both changes. This is - especially useful for changes in the same line that don't touch the - same characters. - -Use the Ignore buttons to accept neither the incoming nor - current change, but mark the conflict as resolved. This resets the - conflicting area to the state before any changes were made. - -### Completing the merge - -You can use the conflict counter in the right of the result editor to keep - track of how many unresolved conflicts are remaining. Clicking on the - counter jumps to the next unresolved conflict. Once all conflicts are - resolved, you can complete the merge by selecting{' '} - Complete Merge in the bottom right corner. This stages - the file and closes the merge editor. - -### Alternative layouts and more - -Selecting the three dots ( ··· ) in the top right - corner of the merge editor opens a context menu with additional options. - You can switch to a vertical layout and display the base view, which shows - the state of the file before any changes were made. - -The three dots next to Incoming , Current - , and Result offer options for each view, such as showing - a side-by-side diff against base, accepting all changes, or resetting the - result. - -### Understanding conflicts - -If you want to learn more about the details of how 3-way merge editors - work, we can recommend the following video: - -## Viewing diffs - -Our Git tooling supports viewing of diffs within AVAP TM Dev - Studio. - -### Accessible Diff Viewer - -There is an Accessible Diff Viewer in the Diff editor that presents - changes in a unified patch format. You can navigate between changes with{' '} - Go to Next Difference ( `F7` ) and{' '} - Go to Previous Difference ( `Shift+F7` - ). Lines can be navigated with arrow keys and pressing{' '} - `Enter` will jump back in the Diff editor and the selected - line. - -## Timeline view - -The Timeline view, accessible at the bottom of the File Explorer by - default, is a unified view for visualizing time-series events (for - example, Git commits) for a file. - -AVAP TM Dev Studio's built-in Git support provides the Git - commit history of the specified file. Selecting a commit will open a diff - view of the changes introduced by that commit. When you right-click on a - commit, you'll get options to Copy Commit ID and{' '} - Copy Commit Message . - -AVAP TM Dev Studio supports more Git history workflows through{' '} - extensions available on - the AVAP TM Dev Studio Marketplace. - -## Git output window - -You can always peek under the hood to see the Git commands we are using. - This is helpful if something strange is happening or if you are just - curious. :) - -To open the Git output window, run View >{' '} - Output and select Log (Git) from - the dropdown list. - -## Initialize a repository - -If your workspace is on your local machine, you can enable Git source - control by creating a Git repository with the{' '} - Initialize Repository command. When AVAP TM Dev - Studio doesn't detect an existing Git repository, the Source Control - view will give you the options to Initialize Repository {' '} - or Publish to GitHub . - -You can also run the Git: Initialize Repository and{' '} - Publish to GitHub commands from the{' '} - Command Palette ( `Ctrl+Shift+P` ). - Running Initialize Repository will create the necessary - Git repository metadata files and show your workspace files as untracked - changes ready to be staged. Publish to GitHub will - directly publish your workspace folder to a GitHub repository, allowing - you to choose between private and public repositories. Check out our - publishing repos video for more information about publishing to GitHub. - -## AVAP TM Dev Studio as Git editor - -When you launch AVAP TM Dev Studio from the command line, you - can pass the `--wait` argument to make the launch command wait - until you have closed the new AVAP TM Dev Studio instance. This - can be useful when you configure AVAP TM Dev Studio as your Git - external editor so Git will wait until you close the launched AVAP - TM Dev Studio instance. - -Here are the steps to do so: - -Now you can run `git config --global -e` and use AVAP - TM Dev Studio as editor for configuring Git. - -### AVAP TM Dev Studio as Git difftool and mergetool - -You can use AVAP TM Dev Studio's diff and merge capabilities - even when using Git from command-line. Add the following to your Git - configurations to use AVAP TM Dev Studio as the diff and merge - tool: - -```javascript -[diff] - ` `tool = default-difftool - - [difftool "default-difftool"] - ` `cmd = code --wait --diff $LOCAL $REMOTE - - [merge] - ` `tool = code - - [mergetool "code"] - ` `cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED -``` - -This uses the `--diff` option that can be passed to AVAP - TM Dev Studio to compare two files side by side. The merge tool - will be used the next time Git discovers a merge conflict. - -To summarize, here are some examples of where you can use AVAP - TM Dev Studio as the editor: - -* `git rebase HEAD~3 -i` do interactive rebase using AVAP TM Dev Studio -* `git commit` use AVAP TM Dev Studio for the commit message -* `git add -p` followed by e for interactive add -* `git difftool ^ ` use AVAP TM Dev Studio as the diff editor for changes - -## Working with GitHub Pull Requests and Issues - -AVAP TM Dev Studio can also bring in GitHub's pull requests - and issues. Create your PRs in AVAP TM Dev Studio, review with - comments, and approve them without switching context. Learn more about - GitHub PRs and Issues in AVAP TM Dev Studio. - -## SCM Providers - -AVAP TM Dev Studio has support for handling multiple Source - Control providers simultaneously. For example, you can open multiple Git - repositories alongside your Azure DevOps Server local workspace and - seamlessly work across your projects. To turn on the{' '} - Source Control Providers view, select the overflow menu - in the Source Control view ( `Ctrl+Shift+G` - ), hover over Views , and make sure that{' '} - Source Control Repositories is marked with a check. The{' '} - Source Control Providers view shows the detected - providers and repositories, and you can scope the display of your changes - by selecting a specific provider. - -### SCM Provider extensions - -If you would like to install another SCM provider, you can search on the{' '} - scm providers extension category in the{' '} - Extensions view ( `Ctrl+Shift+X` ). - Start typing '@ca' and you will see suggestions for extension - categories like debuggers and linters. Select{' '} - `@category:"scm providers"` to see available SCM - providers. - -## Next steps - -* Intro Video - Git Version Control - An introductory video providing an overview of AVAP TM Dev Studio Git support. -* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. -* Code Navigation - Move quickly through your source code. -* Debugging - This is where AVAP TM Dev Studio really shines -* Tasks - Running tasks with Gulp, Grunt, and Jake. Showing Errors and Warnings -* Source Control API - If you want to integrate another Source Control provider into AVAP TM Dev Studio, see our Source Control API. diff --git a/docs/developer.avapframework.com/72_spei_spei_EN.md b/docs/developer.avapframework.com/72_spei_spei_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md deleted file mode 100644 index 74588f8..0000000 --- a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md +++ /dev/null @@ -1,334 +0,0 @@ -AVAP TM Dev Studio's integrated terminal has many advanced - features and settings, such as Unicode and emoji support, custom - keybindings, and automatic replies. This topic explains these advanced - features in detail. If you are new to AVAP TM Dev Studio or the - integrated terminal, you may want to review the{' '} - Terminal Basics topic first. - -## Persistent sessions - -The terminal supports two different types of persistent sessions: - -* Process reconnection: When reloading a window (for example, after installing an extension), reconnect to the previous process and restore its content. -* Process revive: When restarting AVAP TM Dev Studio, a terminal's content is restored and the process is{' '} relaunched using its original environment. - -Both of these persistent sessions can be disabled by setting - terminal.integrated.enablePersistentSessions to false, and the amount of - scrollback restored is controlled by - theterminal.integrated.persistentSessionScrollback setting. Process revive - can be configured independently with - terminal.integrated.persistentSessionReviveProcess. - -### Moving terminals between windows - -Terminal tabs can be dragged and dropped between AVAP TM Dev - Studio windows. This can also be done manually through the Command Palette - and the Terminal: Detach Session and{' '} - Terminal: Attach to Session commands. - -### Configure how the terminal behaves on start up - -When opening a window, if the terminal view is visible it will either - reconnect to the terminal using persistent sessions, or create a new - shell. This behavior can be fine tuned with the - terminal.integrated.hideOnStartup setting. - -* never (default): Never hide the terminal view on startup. -* whenEmpty: Only hide the terminal when there are no persistent sessions restored. -* always: Always hide the terminal, even when there are persistent sessions restored. - -## Keybinding and the shell - -As an embedded application, the integrated terminal should intercept some, - but not all, keybindings dispatched within AVAP TM Dev Studio. - -The configurable terminal.integrated.commandsToSkipShell setting - determines which command's keybindings should always "skip the - shell" and instead be handled by AVAP TM Dev Studio's - keybinding system. By default, it contains a hard-coded list of commands - that are integral to the AVAP TM Dev Studio experience but you - can add or remove specific commands: - -```javascript -{ - ` `"terminal.integrated.commandsToSkipShell": [` `// Ensure - the toggle sidebar visibility keybinding skips the shell - ` `"workbench.action.toggleSidebarVisibility", - ` `// Send quick open's keybinding to the shell - ` `"-workbench.action.quickOpen", - ` `] - - } -``` - -Look at the terminal.integrated.commandsToSkipShell setting details to see - the complete list of default commands. - -### Chords - -Chord keybindings are made up of two keybindings, for example Ctrl+K - followed by Ctrl+C to change the line to a comment. Chords always skip the - shell by default but can be disabled with terminal.integrated.allowChords. - -### macOS clear screen - -On macOS, Cmd+K is a common keybindings in terminals to clear the screen - so AVAP TM Dev Studio also respects that, which means Cmd+K - chords will not work. Cmd+K chords can be enabled by{' '} - - removing the clear keybinding - - : - -```javascript -{ - ` `"key": "cmd+k", - ` `"command": "-workbench.action.terminal.clear" - - } -``` - -Additionally, this keyboard shortcut will be overridden automatically if - any extensions contribute Cmd+K keybindings due to how keybinding priority - works. To re-enable the Cmd+K clear keybinding in this case, you can - redefine it in user keybindings, which have a higher priority than - extension keybindings: - -```javascript -{ - ` `"key": "cmd+k", - ` `"command": "workbench.action.terminal.clear", - ` `"when": "terminalFocus && terminalHasBeenCreated || - terminalFocus && terminalProcessSupported" - - } -``` - -### Mnemonics - -Using mnemonics to access AVAP TM Dev Studio's menu (for - example, Alt+F for File menu) is disabled by default in the terminal - as these key events are often important hotkeys in shells. Set - terminal.integrated.allowMnemonics to enable mnemonics, but note that this - will disallow any Alt key events to go to the shell. This setting does - nothing on macOS. - -### Custom sequence keybindings - -The workbench.action.terminal.sendSequence command can be used to send a - specific sequence of text to the terminal, including escape sequences that - are interpreted specially by the shell. The command enables you to send - Arrow keys, Enter, cursor moves, etc. - -For example, the sequence below jumps over the word to the left of the - cursor (Ctrl+Left) and then presses Backspace: - -```javascript -{ - ` `"key": "ctrl+u", - ` `"command": "workbench.action.terminal.sendSequence", - ` `"args": { - ` `"text": "\u001b[1;5D\u007f" - ` `} - - } -``` - -This feature supports{' '} - variable substitution . - -The sendSequence command only works with the \u0000 format for using - characters via their character code (not \x00). Read more about - these hex codes and terminal sequences in the following resources: - -* XTerm Control Sequences -* List of C0 and C1 control codes - -## Confirmation dialogs - -In order to avoid unnecessary output and user prompts, the terminal does - not show warning dialogs when processes exit. If warnings are desirable, - they can be configured with the following settings: - -* terminal.integrated.confirmOnExit - Controls whether to confirm when the window closes if there are active debug sessions. -* terminal.integrated.confirmOnKill - Controls whether to confirm killing terminals when they have child processes. -* terminal.integrated.showExitAlert - Controls whether to show the alert "The terminal process terminated with exit code" when exit code is non-zero. - -## Auto replies - -The terminal can automatically provide a configurable input response to - the shell if an exact sequence of output is received. The most common use - case is to automatically reply to a prompt when hitting Ctrl+C in batch - scripts that ask whether the user wants to terminate the batch job. To - automatically dismiss this message, add this setting: - -```javascript -{ - ` `"terminal.integrated.autoReplies": { - ` `"Terminate batch job (Y/N)": "Y\r" - ` `} - - } -``` - -Notice that the \r character used here means Enter, and much like{' '} - custom sequence keybindings , - this feature supports sending escape sequences to the shell. - -No auto replies are configured by default as providing shell input should - be an explicit action or configuration by the user. - -## Change tab stop width - -The terminal.integrated.tabStopWidth setting allows configuring the tab - stop width when a program running in the terminal outputs \t. This should - typically not be needed as programs will often move the cursor instead of - using the Tab character, but may be useful in some situations. - -## Unicode and emoji support - -The terminal has both Unicode and emoji support. When these characters are - used in the terminal, there are some caveats to that support: - -* Some Unicode symbols have ambiguous width that may change between Unicode versions. Currently we support Unicode version 6 and 11 widths, which can be configured with the terminal.integrated.unicodeVersion setting. The version specified should match the Unicode version used by the shell/operating system, otherwise there could be rendering issues. Note that the Unicode version of the shell/OS may not match the font's actual width. -* Some emojis comprised of multiple characters may not render correctly, for example, skin tone modifiers. -* Emoji support is limited on Windows. - -## Image support - -Images in the terminal work provided they use either the Sixel or iTerm - inline image protocols. This feature is disabled by default and can be - enabled with the terminal.integrated.enableImages setting. - -Current limitations: - -* Serialization does not work, so reloading a terminal will not retain any images ( jerch/xterm-addon-image#47 ). -* Copying the selection as HTML does not include the selected image ( jerch/xterm-addon-image#50 ). -* Animated gifs don't work ( jerch/xterm-addon-image#51 ). -* Images that are shorter than a cell will not work properly, this is a{' '} design flaw with the sequences and also occurs in XTerm . - -## Process environment - -The process environment of the application running within the terminal is - influenced by various settings and extensions and can cause the output in - the AVAP TM Dev Studio terminal to look different than in other - terminals. - -### Environment inheritance - -When AVAP TM Dev Studio is opened, it launches a login shell - environment in order to source a shell environment. This is done because - developer tools are often added to the $PATH in a shell launch script like - ~/.bash_profile. By default, the terminal inherits this environment, - depending on your{' '} - - profile shell arguments - - , and means that multiple profile scripts may have run, which could cause - unexpected behavior. - -This environment inheritance can be disabled on macOS and Linux via the - terminal.integrated.inheritEnv setting. - -### Interaction with $LANG - -There is some special interaction with the $LANG environment variable, - which determines how characters are presented in the terminal. This - feature is configured with the terminal.integrated.detectLocale setting: - -### Extension environment contributions - -Extensions are able to{' '} - - contribute to terminal environments - - , allowing them to provide some integration with the terminal. For - example, the built-in Git extension injects the GIT_ASKPASS environment - variable to allow AVAP TM Dev Studio to handle authentication to - a Git remote. - -If an extension changes the terminal environment, any existing terminals - will be relaunched if it is safe to do so, otherwise a warning will show - in the terminal status. More information about the change can be viewed in - the hover, which also includes a relaunch button. - -## Windows and ConPTY - -AVAP TM Dev Studio's terminal is built on the{' '} - xterm.js project to - implement a Unix-style terminal that serializes all data into a string and - pipes it through a "pseudoterminal". Historically, this was not - how the terminal worked on Windows, which used the{' '} - - Console API - {' '} - to implement its console called 'conhost'. - -An open source project called{' '} - winpty was created to - try to fix this issue by providing an emulation/translation layer between - a Unix-style terminal and a Windows console. AVAP TM Dev - Studio's terminal was originally implemented using only winpty. This - was great at the time, but in 2018, Windows 10 received{' '} - - the ConPTY API - - , which took the idea pioneered by winpty and baked it into Windows, - providing a more reliable and supported system to leverage Unix-style - terminals and apps on Windows. - -AVAP TM Dev Studio defaults to ConPTY on Windows 10+ (from - build number 18309) and falls back to winpty as a legacy option for - older versions of Windows. ConPTY can be explicitly disabled via the - terminal.integrated.windowsEnableConpty settings but this should normally - be avoided. - -Since ConPTY is an emulation layer, it does come with some quirks. The - most common is that ConPTY considers itself the owner of the viewport and - because of that will sometimes reprint the screen. This reprinting can - cause unexpected behavior such as old content displaying after running the{' '} - Terminal: Clear command. - -## Remote development - -This section outlines topics specific to when AVAP TM Dev Studio - is connected to a remote machine using a AVAP TM Dev Studio{' '} - - Remote Development - {' '} - extension. - -### Reducing remote input latency - -Local echo is a feature that helps mitigate the effect of input latency on - remote windows. It writes the keystrokes in the terminal in a dimmed color - before the result is confirmed by the remote. By default, the feature - start running when latency is detected to be above 30 ms and the timing - can be configured with terminal.integrated.localEchoLatencyThreshold. The - color of the unconfirmed characters is defined by - terminal.integrated.localEchoStyle. - -Local echo disables itself dynamically depending on the active program in - the terminal. This is controlled by - terminal.integrated.localEchoExcludePrograms, which defaults to - ['vim', 'vi', 'nano', 'tmux']. It's - recommended that you disable the feature for any application or shell that - is highly dynamic and/or does a lot of reprinting of the screen when - typing. - -To disable the feature completely, use: - -```javascript -{ - ` `"terminal.integrated.localEchoEnabled": false - - } -``` - -### Local terminals in remote windows - -The default local terminal profile can be launched in - remote windows with the{' '} - Terminal: Create New Integrated Terminal (Local) {' '} - command via the Command Palette. Currently non-default profiles cannot be - launched from remote windows. diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md deleted file mode 100644 index 213a3a7..0000000 --- a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md +++ /dev/null @@ -1,234 +0,0 @@ -The look of AVAP TM Dev Studio's terminal can be customized - extensively. - -*Sapphire - {' '} - - theme with custom Starship prompt - using the font Hack with{' '} - Nerd Font symbols - -## Text style - -Text in the terminal can be customized with the following settings: - -* `terminal.integrated.fontFamily:` The font family to use, this takes a string in the format that fontFamily in CSS takes. For example, "'Fira Code', monospace" will configure Fira Code as the primary font and monospace as the fallback when it lacks glyphs. -* `terminal.integrated.fontSize:` Changes the font size of text in the terminal. -* `terminal.integrated.letterSpacing:` Configures additional horizontal spacing between characters in pixels. -* `terminal.integrated.lineHeight:` Configures additional spacing vertical between characters as a multiplier of the regular line height. For example, 1.1 will add 10% additional vertical space. -* `terminal.integrated.fontWeight:` Configures the font weight of "normal" text. -* `terminal.integrated.fontWeightBold:` Configures the font weight of "bold" text. - -### Powerline symbols and Nerd Fonts - -Powerline fonts are special - patched fonts that contain additional characters that can be used in the - terminal. AVAP TM Dev Studio's terminal{' '} - - renders some of the Powerline symbols without needing to configure a - font - - , but if more glyphs are desired, configure a Powerline font with the font - family setting. Powerline fonts typically end in " for - Powerline", the following setting is an example of how to configure a - DejaVu Sans Mono that has been patched: - -```javascript -"editor.fontFamily": "'DejaVu Sans Mono for Powerline'" -``` - -Nerd Fonts work the same and typically have a " NF" suffix, the - following is an example of how to configure Hack's nerd fonts variant: - -```javascript -"terminal.integrated.fontFamily": "'Hack NF'" -``` - -## Terminal cursor - -The terminal cursor style and whether it blinks can be customized with the - following settings: - -* `terminal.integrated.cursorStyle:` Defines the shape of the cursor, can be block, line or underline. -* `terminal.integrated.cursorWidth:` How wide in pixels the cursor should be when the cursor style is set to line. -* `terminal.integrated.cursorBlinking:` Whether the cursor should blink when the terminal is focused. -* `terminal.integrated.cursorStyleInactive:` Defines the shape of the cursor, can be outline, block, line, underline or none. - -## Customizing tabs - -Terminal tabs appear on the right of the terminal view when there are two - or more terminals by default, showing the active terminal in the view - header when there is only one. - -### Visibility - -The default visibility is designed to save horizontal space, but may not - be desirable. How tabs are presented can be configured with the following - settings: - -* `terminal.integrated.tabs.hideCondition:` When to hide the tabs to the right, set to "never" to always show them. -* `terminal.integrated.tabs.showActiveTerminal:` When to show the active terminal in the terminal view header. -* `terminal.integrated.tabs.showActions:` When to show the active terminal's actions in the view header. -* `terminal.integrated.tabs.location:` Whether the tabs should be shown on the left or right of the terminal. -* `terminal.integrated.tabs.enabled:` Whether to use tabs, disabling will show the original dropdown view. - -### Tab text - -The text on each tab is determined by the following settings: - -* `terminal.integrated.tabs.title:` Tab title. -* `terminal.integrated.tabs.description:` Text that appears to the right of the title. -* `terminal.integrated.tabs.separator:` Separator character between the title and description. - -By default, the title displays what the shell's detected process name. - -Other terminals often display the escape sequence sent by the shell as the - title, which can be configured with: - -```javascript -"terminal.integrated.tabs.title": "${sequence}" -``` - -### Icons - -Each terminal has an associated icon that is determined by its{' '} - terminal profile . The default icon - and its color, which will be used if not defined in a profile, can be - configured with the terminal.integrated.tabs.defaultIcon and - terminal.integrated.tabs.defaultColor settings. - -### Status - -A terminal's "status", if any, is signified by an icon that - appears on the right of the tab. Some statuses involve animation. If this - is distracting the animation can be disabled with: - -```javascript -"terminal.integrated.tabs.enableAnimation": false -``` - -### Visual bell - -When the terminal's bell is triggered, a yellow bell icon is briefly - shown. This can be disabled with terminal.integrated.enableBell and the - duration can be configured with terminal.integrated.bellDuration. - -## Terminal colors - -While the terminal is capable of displaying true color, programs commonly - use 8 ANSI colors (black, red, green, yellow, blue, magenta, cyan and - white) and bright variants of each. These ANSI colors are determined - by the active color theme , but they - can also be configured independently from the theme with the{' '} - - workbench.colorCustomizations - {' '} - setting. - -Whether bold text uses the normal ANSI colors or the bright variant can be - configured with the terminal.integrated.drawBoldTextInBrightColors - setting. - -### Minimum contrast ratio - -Terminals often have contrast issues due to some conflict with dark/light - themes, ANSI colors or shells/programs running, and more. - -The minimum contrast ratio feature solves this problem by either - increasing or reducing the luminance of the text's foreground color - until a 4.5:1 contrast ratio is met. - -One downside of this is that colored text may sometimes lose some of its - saturation. This feature can be configured or disabled to get the original - colors with: - -```javascript -"terminal.integrated.minimumContrastRatio": 1 -``` - -## GPU acceleration - -The terminal features three different renderers, each of which have - different trade offs: - -* WebGL renderer - True GPU acceleration. -* Canvas renderer - GPU acceleration by using the{' '} CanvasRenderingContext2D web API , slower than WebGL but faster than DOM. -* DOM renderer - A fallback renderer that's much slower but has great compatibility. - -GPU acceleration driven by the WebGL renderer is enabled in the terminal - by default. This helps the terminal work faster and display at a high FPS - by significantly reducing the time the CPU spends rendering each frame. - -When on Linux VMs, browsers that don't support WebGL, or machines with - outdated drivers, WebGL may not work properly. - -The default terminal.integrated.gpuAcceleration value of "auto" - tries the WebGL, canvas, and DOM renderers sequentially, settling at the - first without detected issues. - -Sometimes this detection doesn't work and requires manual - intervention, setting terminal.integrated.gpuAcceleration to - "off" typically resolves rendering-related problems like these - at the cost of performance. - -### Custom glyphs - -When GPU acceleration is enabled, custom - rendering, rather than the font, improves how some characters display in - the terminal. These include box drawing characters - (U+2500-U+257F), block elements (U+2580-U+259F) and a - subset of Powerline symbols (U+E0B0-U+E0BF). This means that the - configured font does not need to support these characters as well as - having the characters draw pixel perfect and stretch to the size of the - entire cell. - -Below are some examples of these characters with custom line height and - letter spacing configured. Notice how there are no gaps between cells - thanks to the custom glyphs: - -```javascript -This feature can be disabled by setting - "terminal.integrated.customGlyphs": false. -``` - -## Customizing your prompt - -Most shells allow extensive customization of the terminal prompt. This is - done by configuring your shell outside AVAP TM Dev Studio, - typically by modifying the $PS1 variable, setting a $PROMPT_COMMAND or - installing a plugin. - -Some prompts like Starship and{' '} - oh-my-posh show things like git status - and work with most shells, so they're a good choice when starting out. - -## Common questions - -### Why is my terminal showing a multi-colored triangle or a black rectangle? - -The terminal can have problems with GPU accelerated rendering in some - environments. For example, you might see a big multi-colored triangle - instead of text. This is typically caused by driver/VM graphics issues and - the same also happens in Chromium. Work around these issues by launching - code with the --disable-gpu flag or by using the setting - "terminal.integrated.gpuAcceleration": "off" to avoid - using the canvas in the terminal. See the{' '} - GPU acceleration section for more - information. - -### Why are the colors in the terminal not correct? - -The minimum contrast ratio feature {' '} - can cause colors to not be displayed as expected. It can be disabled with: - -```javascript -"terminal.integrated.minimumContrastRatio": 1 -``` - -Background on why this is the default is explained in{' '} - - vscode#146406 - - . - -`` diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md deleted file mode 100644 index 30cbb2a..0000000 --- a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md +++ /dev/null @@ -1,372 +0,0 @@ -AVAP TM Dev Studio has the ability to integrate with common - shells, allowing the terminal to understand more about what's actually - happening inside the shell. This additional information enables some - useful features such as{' '} - - working directory detection - {' '} - and command detection,{' '} - decorations , - and navigation . - -Supported shells: - -* Linux/macOS: bash, fish, pwsh, zsh -* Windows: pwsh - -## Installation - -### Automatic script injection - -By default, the shell integration script should automatically activate on - supported shells launched from AVAP TM Dev Studio. This is done - by injecting arguments and/or environment variables when the shell session - launches. This automatic injection can be disabled by setting{' '} - `terminal.integrated.shellIntegration.enabled` to{' '} - `false` . - -This standard, easy way will not work for some advanced use cases like in - sub-shells, through a regular ssh session (when not using the{' '} - Remote - SSH extension ) or for some - complex shell setups. The recommended way to enable shell integration for - those is manual installation . - -### Manual installation - -To manually install shell integration, the AVAP TM Dev Studio - shell integration script needs to run during your shell's - initialization. Where and how to do this depends on the shell and OS - you're using. When using manual install it's recommended to set{' '} - `terminal.integrated.shellIntegration.enabled` to false, though - not mandatory. - -bash - -Add the following to your `~/.bashrc` file. Run{' '} - `code ~/.bashrc` in bash to open the file in AVAP TM {' '} - Dev Studio. - -```javascript -[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code - --locate-shell-integration-path bash)" -``` - -fish - -Add the following to your `config.fish` . Run{' '} - `code $\_\_fish\_config\_dir/config.fish` in fish to open the - file in AVAP TM Dev Studio. - -```javascript -string match -q "$TERM\_PROGRAM" "vscode" - - and . (code --locate-shell-integration-path fish) -``` - -pwsh - -Add the following to your [PowerShell profile]. Run{' '} - `code $Profile` in pwsh to open the file in AVAP TM {' '} - Dev Studio. - -```javascript -if ($env:TERM\_PROGRAM -eq "vscode") { . "$(code - --locate-shell-integration-path pwsh)" } -``` - -zsh - -Add the following to your `~/.zshrc` file. Run{' '} - `code ~/.zshrc` in bash to open the file in AVAP TM {' '} - Dev Studio. - -```javascript -[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code - --locate-shell-integration-path zsh)" -``` - -Git Bash - -⚠️ This is currently experimental and automatic injection is not - supported - -Add the following to your `~/.bashrc` file. Run code{' '} - `~/.bashrc` in Git Bash to open the file in AVAP TM {' '} - Dev Studio. - -```javascript -[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code - --locate-shell-integration-path bash)" -``` - -The above shell integration installation is cross-platform and compatible - with any installation type if code is in the `$PATH` . However, - this recommended approach starts Node.js to fetch the script path, leading - to a slight delay in shell startup. To mitigate this delay, inline the - script above by resolving the path ahead of time and adding it directly - into your init script. - -```javascript -\# Output the executable's path first: - - code --locate-shell-integration-path bash - - - \# Add the result of the above to the source statement: - - [[ "$TERM\_PROGRAM" == "vscode" ]] && . - "/path/to/shell/integration/script.sh" -``` - -## Command decorations and the overview ruler - -One of the things that shell integration enables is the ability to get the - exit codes of the commands run within the terminal. Using this - information, decorations are added to the left of the line to indicate - whether the command succeeded or failed. These decorations also show up in - the relatively new overview ruler in the scroll bar, just like in the - editor. - -The decorations can be interacted with to give some contextual actions - like re-running the command: - -The command and overview ruler decorations can be configured with the{' '} - `terminal.integrated.shellIntegration.decorationsEnabled` {' '} - setting. - -## Command navigation - -The commands detected by shell integration feed into the command - navigation feature ( `Ctrl/Cmd+Up, Ctrl/Cmd+Down` ) to - give it more reliable command positions. This feature allows for quick - navigation between commands and selection of their output. To select from - the current position to the command, you can also hold down{' '} - `Shift` , pressing `Shift+Ctrl/Cmd+Up` and{' '} - `Shift+Ctrl/Cmd+Down` . - -## Sticky scroll - -The sticky scroll feature will "stick" the command that is - partially showing at the top of the terminal, making it much easier to see - what command that output belongs to. Clicking on the sticky scroll - component will scroll to the command's location in the terminal - buffer. - -This can be enabled with the{' '} - `terminal.integrated.stickyScroll.enabled` setting. - -## Quick fixes - -AVAP TM Dev Studio scans the output of a command and presents a - Quick Fix with actions that have a high likelihood of being what the user - will want to do next. - -Here are some of the built-in Quick Fixes: - -* When it's detected that a port is already being listened to, suggest to kill the process and re-run the previous command. -* When `git push` fails due to an upstream not being set, suggest to push with the upstream set. -* When a `git` subcommand fails with a similar command error, suggest to use the similar command(s). -* When `git push` results in a suggestion to create a GitHub PR, suggest to open the link. -* When a `General` or `cmd-not-found` PowerShell feedback provider triggers, suggest each suggestion. - -The Quick Fix feature also supports{' '} - audio cues for - additional feedback when a Quick Fix is available. - -## Run recent command - -The Terminal: Run Recent Command command surfaces history - from various sources in a Quick Pick, providing similar functionality to a - shell's reverse search ( `Ctrl+R` ). The sources are - the current session's history, previous session history for this shell - type and the common shell history file. - -Some other functionality of the command: - -* By default the search mode is "contiguous search", meaning the search term must exactly match. The button on the right of the search input allows switching to fuzzy search. -* In the current session section, there is a clipboard icon in the right of the Quick Pick that will open the command output in an editor. -* The pin action in the right of the Quick Pick can pin the command to the top of the list. -* Alt can be held to write the text to the terminal without running it. -* The amount of history stored in the previous session section is determined by the terminal.integrated.shellIntegration.history setting. - -The default keybinding for this command is `Ctrl+Alt+R` . - However, when accessibility mode is on these are reversed;{' '} - `Ctrl+R` runs a recent command and `Ctrl+Alt+R` {' '} - sends Ctrl+R to the shell. - -The keybindings can be flipped when accessibility mode is off with the - following keybindings: - -```javascript -{ - ` `"key": "ctrl+r", - ` `"command": "workbench.action.terminal.runRecentCommand", - ` `"when": "terminalFocus" - - }, - - { - ` `"key": "ctrl+alt+r", - ` `"command": "workbench.action.terminal.sendSequence", - ` `"args": { "text": "\u0012"/\*^R\*/ }, - ` `"when": "terminalFocus" - - } -``` - -## Go to recent directory - -Similar to the run recent command feature, the{' '} - Terminal: Go to Recent Directory command keeps track of - directories that have been visited and allows quick filtering and - navigating ( `cd` ) to them. `Alt` can be held - to write the text to the terminal without running it. - -The default keybinding for this command is `Ctrl+G` as it - behaves similar to the Go to Line/Column command in the - editor. Ctrl+G can be send to the shell with `Ctrl+Alt+G` . - -## Current working directory detection - -Shell integration tells AVAP TM Dev Studio what the current - working directory of the shell is. This information is not possible to get - on Windows without trying to detect the prompt through regex and requires - polling on macOS and Linux, which isn't good for performance. - -One of the biggest features this enables is enhanced resolving of links in - the terminal. Take a link `package.json` for example, when the - link is activated while shell integration is disabled this will open a - search quick pick with `package.json` as the filter if there - are multiple `package.json` files in the workspace. When shell - integration is enabled however, it will open the `package.json` {' '} - file in the current folder directly because the current location is known. - This allows the output of `ls` for example to reliably open the - correct file. - -The current working directory is also used to show the directory in the - terminal tab, in the run recent command quick pick and for the{' '} - `"terminal.integrated.splitCwd"` :{' '} - `"inherited"` feature. - -## Extended PowerShell keybindings - -Windows' console API allows for more keybindings than Linux/macOS - terminals, since AVAP TM Dev Studio's terminal emulates the - latter even on Windows there are some PowerShell keybindings that - aren't possible using the standard means due to lack of VT encoding - such as `Ctrl+Space` . Shell integration allows AVAP - TM Dev Studio to attach a custom keybindings to send a special - sequence to PowerShell that then gets handled in the shell integration - script and forwarded to the proper key handler. - -The following keybindings should work in PowerShell when shell integration - is enabled: - -* Ctrl+Space: Defaults to `MenuComplete` on Windows only -* Alt+Space: Defaults to `SetMark` on all platforms -* Shift+Enter: Defaults to `AddLine` on all platforms -* Shift+End: Defaults to `SelectLine` on all platforms -* Shift+Home: Defaults to `SelectBackwardsLine` on all platforms - -## Enhanced accessibility - -The information that shell integration provides to AVAP TM Dev - Studio is used to improve{' '} - - accessibility in the terminal - - . Some examples of enhancements are: - -* Navigation through detected commands in the accessible buffer (Alt+F2) -* An audio cue plays when a command fails. -* Underlying text box synchronizing such that using the arrow and backspace keys behave more correctly. - -## Supported escape sequences - -AVAP TM Dev Studio supports several custom escape sequences: - -### AVAPTM Dev Studio custom sequences 'OSC 633 ; ... ST' - -AVAP TM Dev Studio has a set of custom escape sequences designed - to enable the shell integration feature when run in AVAP TM Dev - Studio's terminal. These are used by the built-in scripts but can also - be used by any application capable of sending sequences to the terminal, - for example the{' '} - - Julia extension - {' '} - uses these to support shell integration in the Julia REPL. - -These sequences should be ignored by other terminals, but unless other - terminals end up adopting the sequences more widely, it's recommended - to check that `$TERM\_PROGRAM` is `vscode` before - writing them. - -* `OSC 633 ; A ST` - Mark prompt start. -* `OSC 633 ; B ST` - Mark prompt end. -* `OSC 633 ; C ST` - Mark pre-execution. -* `OSC 633 ; D [; ] ST` - Mark execution finished with an optional exit code. -* `OSC 633 ; E ; ST` - Explicitly set the command line. The E sequence allows the terminal to reliably get the exact command line interpreted by the shell. When this is not specified, the terminal may fallback to using the A, B and C sequences to get the command, or disable the detection all together if it's unreliable. The optional nonce can be used to verify the sequence came from the shell integration script to prevent command spoofing. When the nonce is verified successfully, some protections before using the commands will be removed for an improved user experience. The command line can escape ASCII characters using the{' '} `\xAB` format, where AB are the hexadecimal representation of the character code (case insensitive), and escape the \ character using \. It's required to escape semi-colon ( `0x3b` ) and characters 0x20 and below and this is particularly important for new line and semi-colon. Some examples: "" -> "\" ` "\n" -> "\x0a" ";" -> "\x3b" ` -* `OSC 633 ; P ; = ST` - Set a property on the terminal, only known properties will be handled. Known properties: `Cwd` - Reports the current working directory to the terminal. `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. -* `Cwd` - Reports the current working directory to the terminal. -* `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. - -### Final Term shell integration - -AVAP TM Dev Studio supports Final Term's shell integration - sequences, which allow non-AVAP TM Dev Studio shell integration - scripts to work in AVAP TM Dev Studio. This results in a - somewhat degraded experience as it doesn't support as many features as{' '} - `OSC 633` . Here are the specific sequences that are supported: - -* `OSC 133 ; A ST` - Mark prompt start. -* `OSC 133 ; B ST` - Mark prompt end. -* `OSC 133 ; C ST` - Mark pre-execution. -* `OSC 133 ; D [; ] ST` - Mark execution finished with an optional exit code. - -### SetMark 'OSC 1337 ; SetMark ST' - -This sequence adds a mark to the left of the line it was triggered on and - also adds an annotation to the scroll bar: - -These marks integrate with command navigation to make them easy to - navigate to via ctrl/cmd+up and ctrl/cmd+down by default. - -## Common questions - -### When does automatic injection not work? - -There are several cases where automatic injection doesn't work, here - are some common cases: - -* `$PROMPT\_COMMAND` is in an unsupported format, changing it to point to a single function is an easy way to work around this. For example: prompt() { ` ` `printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.\*}" "${PWD/#$HOME/\~}" } PROMPT\_COMMAND=prompt ` -* Some shell plugins may disable AVAP TM Dev Studio's shell integration explicitly by unsetting{' '} `$VSCODE\_SHELL\_INTEGRATION` when they initialize. - -### Why are command decorations showing when the feature is disabled? - -The likely cause of this is that your system has shell integration for - another terminal installed that{' '} - - AVAP TM Dev Studio understands - - . If you don't want any decorations, you can hide them with the - following setting: - -```javascript -"terminal.integrated.shellIntegration.decorationsEnabled": never -``` - -Alternatively, you could remove the shell integration script from your - shell rc/startup script but you will lose access to command-aware features - like command navigation . - -### Why does the command decoration jump around on Windows? - -Windows uses an emulated pseudoterminal (pty) backend called - ConPTY. It works a little differently to a regular pty because it needs to - maintain compatibility with the Windows Console API. One of the impacts of - this is the pty handles rendering specially in such a way that the shell - integration sequences that identify the commands in the terminal buffer - may be misplaced. When the command jumps around it's typically after a - command has run, and AVAP TM Dev Studio's heuristics have - kicked in to improve the position of the command decorations. diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md deleted file mode 100644 index dc4d00b..0000000 --- a/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md +++ /dev/null @@ -1,587 +0,0 @@ -AVAP TM Dev Studio includes a full featured integrated terminal - that starts at the root of your workspace. It provides integration with - the editor to support features like links and error detection. The - integrated terminal can run commands such as mkdir and git just like a - standalone terminal. - -You can open a terminal as follows: - -* From the menu, use the Terminal >{' '} New Terminal or View >{' '} Terminal menu commands. -* From the Command Palette {' '} `(Ctrl+Shift+P)` , use the{' '} View: Toggle Terminal command. -* In the Explorer, you can use the{' '} Open in Integrated Terminal context menu command to open a new terminal from a folder. -* To toggle the terminal panel, use the `Ctrl+`` keyboard shortcut. -* To create a new terminal, use the `Ctrl+Shift+`` keyboard shortcut. - -AVAP TM Dev Studio's terminal has additional functionality - called shell integration that tracks where commands are run with - decorations on the left of a command and in the scrollbar: - -## Terminal shells - -The integrated terminal can use various shells installed on your machine, - with the default being pulled from your system defaults. Shells are - detected and presented in the terminal profiles dropdown. - -You can learn more about configuring terminal shells in the terminal - profiles article. - -## Managing terminals - -The terminal tabs UI is on the right side of the terminal view. Each - terminal has an entry with its name, icon, color, and group decoration - (if any). - -Add terminal instances by selecting the + icon on the - top-right of the TERMINAL panel, selecting a profile from - the terminal dropdown, or by triggering the `Ctrl+Shift+` {' '} - command. This action creates another entry in the tab list associated with - that terminal. - -Remove terminal instances by hovering a tab and selecting the{' '} - Trash Can button, selecting a tab item and pressing - Delete, using Terminal: Kill the Active Terminal Instance {' '} - command, or via the right-click context menu. - -Navigate between terminal groups using focus next{' '} - `Ctrl+PageDown` and focus previous `Ctrl+PageUp` . - -Icons may appear to the right of the terminal title on the tab label when - a terminal's status changes. Some examples are a bell (macOS) - and for tasks, displaying a check mark when there are no errors and an X - otherwise. Hover the icon to read status information, which may contain - actions. - -### Groups (split panes) - -Place multiple terminals side-by-side and create a group by splitting a - terminal: - -* Hover over a entry in the list of terminals on the right and select the inline split button. -* Right-click the context menu and selecting the Split {' '} menu option. -* `Alt` and click on a tab, the + button, or the single tab on the terminal panel. -* Trigger the Ctrl+Shift+5 command. - -Navigate between terminals in a group by focusing the previous pane,{' '} - `Alt+Left` , or the next pane, `Alt+Right` . - -Dragging and dropping tabs in the list rearranges them. Dragging a tab - into the main terminal area allows moving a terminal from one group to - another. - -Moving a terminal into its own group can be done with the{' '} - Terminal: Unsplit Terminal command through the Command - Palette or in the right-click context menu. - -## Terminals in editor area - -You can open terminals in the editor area (terminal editors) with - the Terminal: Create New Terminal in Editor Area command, - the{' '} - Terminal: Create New Terminal in Editor Area to the Side {' '} - command, or by dragging a terminal from the terminal view into the editor - area. Terminal editors are presented like regular editor tabs: - -You can have terminal editors on either side or arranged in multiple - dimensions using the editor group layout system, e.g. PowerShell and WSL - terminals stacked to the right of file editors: - -The `terminal.integrated.defaultLocation` setting can change - the default `view` or `editor` area terminal - location. - -## Navigating the buffer - -The content in the terminal is called the buffer, with the section right - above the bottom viewport being called "scrollback". The amount - of scrollback kept is determined by the terminal.integrated.scrollback{' '} - setting and defaults to 1000 - lines. - -There are various commands available to navigate around the terminal - buffer: - -* Scroll up a line - `Ctrl+Alt+PageUp` -* Scroll down a line - `Ctrl+Alt+PageDown` -* Scroll up a page - `Shift+PageUp` -* Scroll down a page - `Shift+PageDown` -* Scroll to the top - `Ctrl+Home` -* Scroll to the bottom - `Ctrl+End` - -Command navigation is also available (see shell - integration): - -* Scroll to the previous command - `Ctrl+Up` -* Scroll to the next command - `Ctrl+Down` - -Scrolling will happen instantaneously, but can be configured to animate - over a short duration with the{' '} - `terminal.integrated.smoothScrolling` setting. - -## Links - -The terminal features sophisticated link detection with editor integration - and even extension contributed link handlers. Hover over a link to display - an underline, then hold the `Ctrl/Cmd` key and click. - -These built-in link handlers are used in the following priority order: - -* URIs/URLs: Links that look like URIs, such as{' '} `https://code.visualstudio.com` , vscode://path/to/file or{' '} `file://path/to/file` will open using the standard handler for the protocol. For example, `https` links will open the browser. - -* File links: Links to files that have been verified to exist on the system. These will open the file in a new editor tab and support many common line/column formats such as{' '} `file:1:2, file:line 1, column 2` . - -* Folder links: Links to folders are similar to file links but will open a new AVAP TM Dev Studio window at the folder. - -* Word links: Fallback link type that uses the{' '} `terminal.integrated.wordSeparators` setting. The setting defines word boundaries and make nearly all text into words. Activating a word link searches the workspace for the word. If there is a single result it will open, otherwise it will present the search results. Word links are considered "low confidence" and will not show an underline or tooltip unless you hold the `Ctrl` / `Cmd` key. They also have limited support for line and column suffixes. - -The Open Detected Link command ( - `Ctrl+Shift+O` ) can be used to access links via the - keyboard: - -### Extensions handling links - -Extensions can contribute link providers which allow the - extension to define what happens when clicked. An example of this is the - GitLens extension detecting Git branch links. - -### Keyboard accessibility - -Links are keyboard accessible through several commands that open links - based on the type of link. - -* Terminal: Open Last Local File Link - Opens the most recent local file link. No default keybinding. -* Terminal: Open Last URL link - Opens the most recent URI/URL link. No default keybinding. -* Terminal: Open Detected Link... - Opens a searchable Quick Pick with all detected links, including word links. The default keybinding is `Ctrl/Cmd+Shift+O` , which is the same as the{' '} Go to Symbol in Editor keyboard shortcut. - -## Copy & paste - -The keybindings for copy and paste follow platform standards: - -* Linux: `Ctrl+Shift+C` and `Ctrl+Shift+V` ; selection paste is available with `Shift+Insert` -* macOS: `Cmd+C` and `Cmd+V` -* Windows: `Ctrl+C` and `Ctrl+V` - -Copying is done automatically on selection when{' '} - `terminal.integrated.copyOnSelection` is enabled. - -By default, there is a warning when pasting multiple lines, which can be - disabled with the{' '} - `terminal.integrated.enableMultiLinePasteWarning` setting. This - is only done when the shell does not support "bracketed paste - mode". When that mode is enabled, the shell is indicating that it can - handle multiple line pasting. - -## Using the mouse - -### Right-click behavior - -The right-click behavior differs based on the platform: - -* Linux: Show the context menu. -* macOS: Select the word under the cursor and show the context menu. -* Windows: Copy and drop selection if there is a selection, otherwise paste. - -This can be configured using the terminal.integrated.rightClickBehavior - setting. The options are: - -* `default` - Show the context menu. -* `copyPaste` - Copy when there is a selection, otherwise paste. -* `paste` - Paste on right-click. -* `selectWord` - Select the word under the cursor and show the context menu. -* `nothing` - Do nothing and pass event to terminal. - -### Reposition the cursor with Alt - -`Alt` and left-click will reposition the cursor to underneath - the mouse. This works by simulating arrow keystrokes, which may not work - reliably for some shells or programs. This feature can be disabled with - the `terminal.integrated.altClickMovesCursor` setting. - -### Mouse events mode - -When applications running in the terminal turn on mouse events mode, such - as Vim mouse mode, mouse interaction is sent to the application instead of - the terminal. This means that clicking and dragging will no longer create - a selection. Terminal selection can be forced by holding the{' '} - `Alt` key on Windows and Linux, this can also be done with the{' '} - `Option` key on macOS but requires enabling the{' '} - `terminal.integrated.macOptionClickForcesSelection` setting - first. - -## Find - -The integrated terminal has find functionality that can be triggered with{' '} - `Ctrl+F` . - -## Run selected text - -To use the `runSelectedText` command, select text in an editor - and run the command{' '} - Terminal: Run Selected Text in Active Terminal via the{' '} - Command Palette `(Ctrl+Shift+P)` , the - terminal will attempt to run the selected text. If no text is selected in - the active editor, the entire line that the cursor is on will run in the - terminal. - -## Maximizing the terminal - -The terminal view can be maximized by clicking the maximize panel size - button with the upwards chevron icon. This will temporarily hide the - editors and maximize the panel. This is useful to temporarily focus on a - large amount of output. Some developers use AVAP TM Dev Studioe - as a standalone terminal by opening a new window, maximizing the panel, - and hiding the side bar. - -Note that the panel can only be maximized if its alignment option is set - to Center . - -## Select all - -There is a Terminal: Select All command, which is bound - to Cmd+A on macOS, but does not have a default keybinding on Windows and - Linux as it may conflict with shell hotkeys. To use `Ctrl+A` to - select all, add this custom keybinding: - -```javascript -{ - ` `"key": "ctrl+a", - ` `"command": "workbench.action.terminal.selectAll", - ` `"when": "terminalFocus && !isMac" - - }, -``` - -## Drag and drop file paths - -Dragging a file into the terminal will input the path into the terminal, - with escaping to match the active shell. - -## Automating terminals with tasks - -The Tasks feature can be used to automate the launching of terminals, for - example, the following `.vscode/tasks.json` file will launch a - Command Prompt and PowerShell terminal in a single terminal group when the - window starts: - -```javascript -{ - ` `"version": "2.0.0", - ` `"presentation": { - ` `"echo": false, - ` `"reveal": "always", - ` `"focus": false, - ` `"panel": "dedicated", - ` `"showReuseMessage": true - ` `}, - ` `"tasks": [` `{ - ` `"label": "Create terminals", - ` `"dependsOn": [` `"First", - ` `"Second" - ` `], - ` `// Mark as the default build task so cmd/ctrl+shift+b will - create them - ` `"group": { - ` `"kind": "build", - ` `"isDefault": true - ` `}, - ` `// Try start the task on folder open - ` `"runOptions": { - ` `"runOn": "folderOpen" - ` `} - ` `}, - ` `{ - ` `// The name that shows up in terminal tab - ` `"label": "First", - ` `// The task will launch a shell - ` `"type": "shell", - ` `"command": "", - ` `// Set the shell type - ` `"options": { - ` `"shell": { - ` `"executable": "cmd.exe", - ` `"args": [] - ` `} - ` `}, - ` `// Mark as a background task to avoid the spinner animation on - the terminal tab - ` `"isBackground": true, - ` `"problemMatcher": [], - ` `// Create the tasks in a terminal group - ` `"presentation": { - ` `"group": "my-group" - ` `} - ` `}, - ` `{ - ` `"label": "Second", - ` `"type": "shell", - ` `"command": "", - ` `"options": { - ` `"shell": { - ` `"executable": "pwsh.exe", - ` `"args": [] - ` `} - ` `}, - ` `"isBackground": true, - ` `"problemMatcher": [], - ` `"presentation": { - ` `"group": "my-group" - ` `} - ` `} - ` `] - - } -``` - -This file could be committed to the repository to share with other - developers or created as a user task via the{' '} - `workbench.action.tasks.openUserTasks` command. - -## Working directory - -By default, the terminal will open at the folder that is opened in the - Explorer. The `terminal.integrated.cwd` setting allows - specifying a custom path to open instead: - -```javascript -{ - ` `"terminal.integrated.cwd": "/home/user" - - } -``` - -Split terminals on Windows will start in the directory that the parent - terminal started with. On macOS and Linux, split terminals will inherit - the current working directory of the parent terminal. This behavior can be - changed using the `terminal.integrated.splitCwd` setting: - -```javascript -{ - ` `"terminal.integrated.splitCwd": "workspaceRoot" - - } -``` - -There are also extensions available that give more options such as{' '} - - Terminal Here - - . - -## Fixed dimension terminals - -The Terminal: Set Fixed Dimensions command allows - changing the number of columns and rows that the terminal and it's - backing pseudoterminal uses. This will add scroll bars when necessary, - which may lead to an unpleasant UX and is generally not recommended, but - it is a common ask on Windows in particular for reading logs or long lines - when paging tools aren't available. - -You can also right-click on a terminal tab and select{' '} - Toggle Size to Content Width `(Alt+Z)` {' '} - to resize the number of terminal columns to the largest wrapped line in - the terminal. - -## Next steps - -The basics of the terminal have been covered in this document. Read on to - find out more about: - -* Tasks - Tasks let you integrate with external tools and leverage the terminal heavily. -* Mastering AVAP TM Dev Studio's Terminal - An external blog with plenty of power user tips for the terminal. -* Explore terminal commands by browsing the keyboard shortcuts within AVAP TM Dev Studio ( Preferences: Open Keyboard Shortcuts then search on 'terminal'). - -## Common questions - -### I'm having problems launching the terminal - -There's a dedicated troubleshooting guide for these sorts of problems. - -### How do I create an Admin terminal? - -The integrated terminal shell is running with the permissions of AVAP - TM Dev Studio. If you need to run a shell command with elevated - (administrator) or different permissions, use platform utilities - such as `runas.exe` within a terminal. - -You can learn more about customizing terminals via terminal profiles in - Configuring Profiles. - -### Can I add a keyboard shortcut for the Explorer's Open in Integrated - Terminal command? - -You can open new terminals for specific folders from the Explorer via the{' '} - Open in Integrated Terminal context menu command. - -By default, there is no keyboard shortcut associated with{' '} - Open in Integrated Terminal but you can add your own via - the Keyboard Shortcuts editor `(Ctrl+K Ctrl+S)` to add - a keybinding to your keybindings.json. - -The `keybindings.json` example below adds the keyboard shortcut{' '} - `Ctrl+T` for openInTerminal. - -```javascript -{ - ` `"key": "ctrl+t", - ` `"command": "openInTerminal", - ` `"when": "filesExplorerFocus" - - } -``` - -### Why is nvm complaining about a prefix option when the integrated terminal - is launched? - -nvm (Node Version Manager) users often see this error for the - first time inside AVAP TM Dev Studio's integrated terminal: - -```javascript -nvm is not compatible with the npm config "prefix" option: currently set - to "/usr/local" - - Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.1 - --silent` to unset it -``` - -This is mostly a macOS problem and does not happen in external terminals. - The typical reasons for this are the following: - -* `npm` was globally installed using another instance of{' '} `node` that is somewhere in your path ( `such as /usr/local/bin/npm` ). -* To get the development tools on the `$PATH` , AVAP TM Dev Studio will launch a bash login shell on startup. This means that your ~/.bash_profile has already run and when an integrated terminal launches, it will run another login shell, reordering the $PATH potentially in unexpected ways. - -To resolve this issue, you need to track down where the old{' '} - `npm` is installed and remove both it and its out-of-date - node_modules. Find the `nvm` initialization script and run{' '} - `which npm` before it runs, which should print the path when - you launch a new terminal. - -Once you have the path to npm, find the old node_modules by resolving the - symlink by running a command something like this: - -```javascript -ls -la /usr/local/bin | grep "np[mx]" -``` - -This will give you the resolved path at the end: - -```javascript -... npm -> ../lib/node\_modules/npm/bin/npm-cli.js - - ... npx -> ../lib/node\_modules/npm/bin/npx-cli.js -``` - -From there, removing the files and relaunching AVAP TM Dev - Studio should fix the issue: - -```javascript -rm /usr/local/bin/npm /usr/local/lib/node\_modules/npm/bin/npm-cli.js - - rm /usr/local/bin/npx /usr/local/lib/node\_modules/npm/bin/npx-cli.js -``` - -### Why does macOS make a ding sound when I resize terminal split panes? - -The keybindings ⌃⌘← and ⌃⌘→ are the defaults for resizing individual split - panes in the terminal. While they work, they also cause a system - "invalid key" sound to play due to an issue in Chromium. The{' '} - - recommended workaround - {' '} - is to tell macOS to no-op for these keybindings by running this in your - terminal: - -```javascript -mkdir -p ~/Library/KeyBindings - - cat > ~/Library/KeyBindings/DefaultKeyBinding.dict <` setting. -* `icon` : An icon ID to use for the profile. -* `color` : A theme color ID to style the icon. - -The default profile can be defined manually with the{' '} - `terminal.integrated.defaultProfile.\*` settings. This should - be set to the name of an existing profile: - -```javascript -{ - ` `"terminal.integrated.profiles.windows": { - ` `"my-pwsh": { - ` `"source": "PowerShell", - ` `"args": ["-NoProfile"] - ` `} - ` `}, - ` `"terminal.integrated.defaultProfile.windows": "my-pwsh" - - } -``` - -## Removing built-in profiles - -To remove a built-in profile and prevent it from showing up in the new - terminal dropdown, set the name of the profile to `null` . For - example, to remove the `Git Bash` profile on Windows, use this - setting: - -```javascript -{ - ` `"terminal.integrated.profiles.windows": { - ` `"Git Bash": null - ` `} - - } -``` - -## Configuring the task/debug profile - -By default, the task/debug features will use the default profile. This may - not be ideal if your default has a heavy PowerShell startup script or a - non-POSIX compliant shell for example. To configure a profile to be used - only in the debug/tasks features, use the{' '} - `terminal.integrated.automationProfile` . - `` setting: - -```javascript -{ - ` `"terminal.integrated.defaultProfile.osx": "fish", - ` `// Use a fully POSIX-compatible shell and avoid running a - complex ~/.config/fish/config.fish - ` `// for tasks and debug - ` `"terminal.integrated.automationProfile.osx": { - ` `"path": "/bin/sh" - ` `} - - } -``` - -## Unsafe profile detection - -Certain shells are installed in unsafe paths by default, like a path that - could be written to by another user on a Windows environment. AVAP - TM Dev Studio will still detect these but not expose them as a - proper profile until they have been explicitly configured via the{' '} - Terminal: Select Default Profile command. When - configuring an unsafe profile, there will be a warning before it's - added: - -## Cmder - -Cmder itself is a terminal, but you can use the [Cmder] shell in AVAP - TM Dev Studio with the following profile: - -```javascript -{ - ` `"terminal.integrated.profiles.windows": { - ` `"cmder": { - ` `"path": "C:\\WINDOWS\\System32\\cmd.exe", - ` `"args": ["/K", "C:\\cmder\\vendor\\bin\\vscode\_init.cmd"] - ` `} - ` `}, - ` `"terminal.integrated.defaultProfile.windows": "cmder" - - } -``` - -This profile should be picked up automatically when the{' '} - `CMDER\_ROOT` environment variable is set. It will also be - detected as an unsafe profile if installed at `C:\cmder` . You - may refer to Cmder's wiki for more information. - -## Cygwin - -Cygwin itself is a terminal, but you can use the Cygwin shell in AVAP - TM Dev Studio with the following profile: - -```javascript -{ - ` `"terminal.integrated.profiles.windows": { - ` `"Cygwin": { - ` `"path": "C:\\cygwin64\\bin\\bash.exe", - ` `"args": ["--login"] - ` `} - ` `}, - ` `"terminal.integrated.defaultProfile.windows": "Cygwin" - - } -``` - -This profile should be detected automatically as an unsafe profile when - installed at the default paths `C:\cygwin` or - `C:\cygwin64` . - -## Git Bash - -A limitation of Git Bash when AVAP TM Dev Studio uses bash.exe - (the shell) as opposed to git-bash.exe (the terminal) is - that history will not be retained across shell sessions. You can work - around this by adding the following to your `~/.bashrc` a or{' '} - `~/.bash\_profile` files: - -```javascript -export PROMPT\_COMMAND='history -a' -``` - -This will cause the shell to call history -a whenever the prompt is - printed which flushes the session's current session commands to the - backing history file. - -## MSYS2 - -MSYS2's bash shell can be configured with the following profile: - -```javascript -{ - ` `"terminal.integrated.profiles.windows": { - ` `"bash (MSYS2)": { - ` `"path": "C:\\msys64\\usr\\bin\\bash.exe", - ` `"args": ["--login", "-i"], - ` `"env": { "CHERE\_INVOKING": "1" } - ` `} - ` `} - - } -``` - -The `CHERE_INVOKING` environment variable is used to tell the - login initialization script to preserve the working directory, instead of - opening at `$HOME` . - -This profile should be detected automatically as an{' '} - unsafe profile when installed at - the default path `C:\\msys64` . - -## Windows PowerShell - -When PowerShell 6+ is installed, Windows PowerShell is not included in the - profiles list by default. To add Windows PowerShell as a profile, choose - the Select Default Profile option in the new terminal - dropdown and select the Windows PowerShell item. This will configure the - profile and set it as your default. - -## WSL - -When running AVAP TM Dev Studio on your local machine, Windows - Subsystem for Linux shells should be automatically detected. Depending on - your setup, this may be a nuisance if you have a lot of distros installed. - For finer control over the WSL profiles the automatic detection can be - disabled with the `terminal.integrated.useWslProfiles setting` , - then here's an example of how to manually configure a WSL shell: - -```javascript -{ - ` `"terminal.integrated.profiles.windows": { - ` `"Debian (WSL)": { - ` `"path": "C:\\WINDOWS\\System32\\wsl.exe", - ` `"args": [` `"-d", - ` `"Debian" - ` `] - ` `} - ` `} - - } -``` - -## Common questions - -### Why are there duplicate paths in the terminal's $PATH environment - variable and/or why are they reversed on macOS? - -This can happen on macOS because of how the terminal launches using AVAP - TM Dev Studio's environment. When AVAP TM Dev - Studio launches for the first time, to source your "development - environment," it launches your configured shell as a{' '} - login shell , which runs your{' '} - `~/.profile/~/.bash\_profile/~/.zprofile` scripts. Now when the - terminal launches, it also runs as a login shell, which will put the - standard paths to the front (for example,{' '} - `/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin` ) and - reinitialize your shell environment. - -To get a better understanding, you can simulate what is happening by - launching an inner login shell within your operating system's built-in - terminal: - -```javascript -\# Add /test to the beginning of $PATH - - export PATH=/test:$PATH - - \# Echo $PATH, /test should be at the beginning - - echo $PATH - - \# Run bash as a login shell - - bash -l - - \# Echo $PATH, the values should be jumbled - - echo $PATH -``` - -Unfortunately, unlike in Linux, standalone macOS terminals all run as - login shells by default, since macOS does not run a login shell when the - user logs into the system. This encourages "bad behavior," like - initializing aliases in your profile script when they should live in your{' '} - `rc` script as that runs on non-login shells. - -There are two direct fixes for this. The first is to set{' '} - `"terminal.integrated.inheritEnv": false` , which will - strip most environment variables from the terminal's environment, - except for some important ones (like `HOME` ,{' '} - `SHELL` , `TMPDIR` , etc.). - -The other fix is to no longer run a login shell in the terminal by - creating a terminal profile and setting its args to []. If you go with - this fix, you will want to make sure any aliases in your profile scripts - are moved over to your `~/.bashrc/~/.zshrc` file since aliases - only apply to the shell they're set in. diff --git a/docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md b/docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md b/docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md b/docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/78_unvault_unvault.md b/docs/developer.avapframework.com/78_unvault_unvault.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md deleted file mode 100644 index a9e99b4..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md +++ /dev/null @@ -1,548 +0,0 @@ -AVAP™ Dev Studio 2024 is an editor first and foremost, and includes the - features you need for highly productive source code editing. This topic - takes you through the basics of the editor and helps you get moving with - your code. - -## Keyboard shortcuts - -Being able to keep your hands on the keyboard when writing code is crucial - for high productivity. AVAP™ DS Code has a rich set of default keyboard - shortcuts as well as allowing you to customize them. - -* Keyboard Shortcuts Reference - Learn the most commonly used and popular keyboard shortcuts by downloading the reference sheet. -* Install a Keymap extension - Use the keyboard shortcuts of your old editor (such as Sublime Text, Atom, and Vim) in AVAP™ DS Code by installing a Keymap extension. -* Customize Keyboard Shortcuts - Change the default keyboard shortcuts to fit your style. - -## Multiple selections (multi-cursor) - -AVAP™ DS Code supports multiple cursors for fast simultaneous edits. You - can add secondary cursors (rendered thinner) with Alt+Click. Each - cursor operates independently based on the context it sits in. A common - way to add more cursors is with ⌥⌘↓ or ⌥⌘↑ that insert cursors below or - above. - -Note: Your graphics card driver (for example NVIDIA) might - overwrite these default shortcuts. - -IMAGEN - -`⌘D` selects the word at the cursor, or the next occurrence of - the current selection. - -IMAGEN - -### Multi-cursor modifier - -If you'd like to change the modifier key for applying multiple cursors - to Cmd+Click on macOS and Ctrl+Click on Windows and Linux, you can do so - with the editor.multiCursorModifier setting. This lets users coming from - other editors such as Sublime Text or Atom continue to use the keyboard - modifier they are familiar with. - -The setting can be set to: - -* ctrlCmd - Maps to Ctrl on Windows and Cmd on macOS. -* alt - The existing default Alt. - -There's also a menu item Use Ctrl+Click for Multi-Cursor in the - Selection menu to quickly toggle this setting. - -The Go to Definition and Open Link gestures will also respect this setting - and adapt such that they do not conflict. For example, when the setting is - ctrlCmd, multiple cursors can be added with Ctrl/Cmd+Click, and opening - links or going to definition can be invoked with Alt+Click. - -### Shrink/expand selection - -Quickly shrink or expand the current selection. Trigger it with ⌃⇧⌘← and - ⌃⇧⌘→. - -Here's an example of expanding the selection with ⌃⇧⌘→: - -IMAGEN - -## Column (box) selection - -Place the cursor in one corner and then hold Shift+Alt while dragging to - the opposite corner: - -IMAGEN - -Note: This changes to Shift+Ctrl/Cmd when using Ctrl/Cmd as multi-cursor - modifier. - -There are also default key bindings for column selection on macOS and - Windows, but not on Linux. - -You can edit your `keybindings.json` to bind them to something - more familiar if you want. - -The user setting Editor: Column Selection controls this feature. Once this - mode is entered, as indicated in the Status bar, the mouse gestures and - the arrow keys will create a column selection by default. This global - toggle is also accessible via the Selection > Column Selection Mode - menu item. In addition, one can also disable Column Selection mode from - the Status bar. - -## Save / Auto Save - -By default, AVAP™ DS requires an explicit action to save your changes to - disk, ⌘S. - -However, it's easy to turn on `Auto Save` , which will save - your changes after a configured delay or when focus leaves the editor. - With this option turned on, there is no need to explicitly save the file. - The easiest way to turn on `Auto Save` is with the** File > - Auto Save **toggle that turns on and off save after a delay. - -For more control over `Auto Save` , open User or Workspace - settings and find the associated settings: - -* files.autoSave: Can have the values: off - to disable auto save. afterDelay - to save files after a configured delay (default 1000 ms). onFocusChange - to save files when focus moves out of the editor of the dirty file. onWindowChange - to save files when the focus moves out of the AVAP™ DS window. -* off - to disable auto save. -* afterDelay - to save files after a configured delay (default 1000 ms). -* onFocusChange - to save files when focus moves out of the editor of the dirty file. -* onWindowChange - to save files when the focus moves out of the AVAP™ DS window. -* files.autoSaveDelay: Configures the delay in milliseconds when files.autoSave is configured to afterDelay. The default is 1000 ms. - -## Hot Exit - -AVAP™ DS will remember unsaved changes to files when you exit by default. - Hot exit is triggered when the application is closed via File > Exit - (Code > Quit on macOS) or when the last window is closed. - -You can configure hot exit by setting files.hotExit to the following - values: - -* "off": Disable hot exit. -* "onExit": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu). All windows without folders opened will be restored upon next launch. -* "onExitAndWindowClose": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu), and also for any window with a folder opened regardless of whether it is the last window. All windows without folders opened will be restored upon next launch. To restore folder windows as they were before shutdown, set window.restoreWindows to all. - -If something happens to go wrong with hot exit, all backups are stored in - the following folders for standard install locations: - -* Windows %APPDATA%\Code\Backups -* macOS $HOME/Library/Application Support/Code/Backups -* Linux $HOME/.config/Code/Backups - -### Find and Replace - -AVAP™ DS allows you to quickly find text and replace in the currently - opened file. Press ⌘F to open the Find Widget in the editor, search - results will be highlighted in the editor, overview ruler and minimap. - -If there are more than one matched result in the current opened file, you - can press Enter and ⇧Enter to navigate to next or previous result when the - find input box is focused. - -When the Find Widget is opened, it will automatically populate the - selected text in the editor into the find input box. If the selection is - empty, the word under the cursor will be inserted into the input box - instead. - -IMAGEN - -This feature can be turned off by setting{' '} - ` - editor.find.seedSearchStringFromSelection to "never". - ` - -By default, the find operations are run on the entire file in the editor. - It can also be run on selected text. You can turn this feature on by - clicking the hamburger icon on the Find Widget. - -IMAGEN - -If you want it to be the default behavior of the Find Widget, you can set{' '} - `editor.find.autoFindInSelection` to `always` , or to{' '} - `multiline` , if you want it to be run on selected text only - when multiple lines of content are selected. - -In addition to find and replace with plain text, the Find Widget also has - three advanced search options: - -* Match Case -* Match Whole Word -* Regular Expression - -The replace input box support case preserving, you can turn it on by - clicking the Preserve Case ( AB ) button. - -You can search multiple line text by pasting the text into the Find input - box and Replace input box. Pressing `Ctrl+Enter` inserts a new - line in the input box. - -IMAGEN - -While searching long text, the default size of Find Widget might be too - small. You can drag the left sash to enlarge the Find Widget or double - click the left sash to maximize it or shrink it to its default size. - -IMAGEN - -## Search across files - -AVAP™ DS allows you to quickly search over all files in the currently - opened folder. Press ⇧⌘F and enter your search term. Search results are - grouped into files containing the search term, with an indication of the - hits in each file and its location. Expand a file to see a preview of all - of the hits within that file. Then single-click on one of the hits to view - it in the editor. - -IMAGEN - -You can configure advanced search options by clicking the ellipsis - (Toggle Search Details) below the search box on the right (or - press ⇧⌘J). This will show additional fields to configure the search. - -### Advanced search options - -IMAGEN - -In the two input boxes below the search box, you can enter patterns to - include or exclude from the search. If you enter example, that will match - every folder and file named example in the workspace. If you enter - ./example, that will match the folder example/ at the top level of your - workspace. Use , to separate multiple patterns. Paths must use forward - slashes. You can also use glob pattern syntax, for example: - -* `*` to match zero or more characters in a path segment -* `?` to match on one character in a path segment -* `**` to match any number of path segments, including none -* `{}` to group conditions (for example { .html, .txt} matches all HTML and text files) -* `[]` to declare a range of characters to match (example.[0-9] to match on example.0, example.1, …) -* `[!...]` to negate a range of characters to match (example.[!0-9] to match on example.a, example.b, but not example.0) - -AVAP™ DS excludes some folders by default to reduce the number of search - results that you are not interested in (for example: - node_modules). Open settings to change these rules under the - files.exclude and search.exclude section. - -Note that glob patterns in the Search view work differently than in - settings such as files.exclude and search.exclude. In the settings, you - must use * - - /example to match a folder named example in subfolder folder1/example in - your workspace. In the Search view, the * - {' '} - prefix is assumed. The glob patterns in these settings are always - evaluated relative to the path of the workspace folder. - -Also note the Use Exclude Settings and Ignore Files toggle button in the - files to exclude box. The toggle determines whether to exclude files that - are ignored by your .gitignore files and/or matched by your files.exclude - and search.exclude settings. - -Tip: From the Explorer, you can right-click on a folder and select Find in - Folder to search inside a folder only. - -Search and replace You can also Search and Replace across files. Expand - the Search widget to display the Replace text box. - -search and replace - -When you type text into the Replace text box, you will see a diff display - of the pending changes. You can replace across all files from the Replace - text box, replace all in one file or replace a single change. - -search and replace diff view - -Tip: You can quickly reuse a previous search term by using ↓ and ↑ to - navigate through your search term history. - -Case changing in regex replace AVAP™ DS supports changing the case of - regex matching groups while doing Search and Replace in the editor or - globally. This is done with the modifiers \u\U\l\L, where \u and \l will - upper/lowercase a single character, and \U and \L will upper/lowercase the - rest of the matching group. - -Example: - -Changing case while doing find and replace - -The modifiers can also be stacked - for example, \u\u\u$1 will uppercase - the first three characters of the group, or \l\U$1 will lowercase the - first character, and uppercase the rest. The capture group is referenced - by $n in the replacement string, where n is the order of the capture - group. - -Search Editor Search Editors let you view workspace search results in a - full-sized editor, complete with syntax highlighting and optional lines of - surrounding context. - -Below is a search for the word 'SearchEditor' with two lines of - text before and after the match for context: - -Search Editor overview - -The Open Search Editor command opens an existing Search Editor if one - exists, or to otherwise create a new one. The New Search Editor command - will always create a new Search Editor. - -In the Search Editor, results can be navigated to using Go to Definition - actions, such as F12 to open the source location in the current editor - group, or ⌘K F12 to open the location in an editor to the side. - Additionally, double-clicking can optionally open the source location, - configurable with the search.searchEditor.doubleClickBehaviour setting. - -You can also use the Open New Search Editor button at the top of the - Search view, and can copy your existing results from a Search view over to - a Search Editor with the Open in editor link at the top of the results - tree, or the Search Editor: Open Results in Editor command. - -Search Editor Button - -The Search Editor above was opened by selecting the Open New Search Editor - button (third button) on the top of the Search view. - -Search Editor commands and arguments search.action.openNewEditor - Opens - the Search Editor in a new tab. search.action.openInEditor - Copy the - current Search results into a new Search Editor. - search.action.openNewEditorToSide - Opens the Search Editor in a new - window next to the window you currently have opened. There are two - arguments that you can pass to the Search Editor commands - (search.action.openNewEditor, search.action.openNewEditorToSide) - to allow keybindings to configure how a new Search Editor should behave: - -triggerSearch - Whether a search be automatically run when a Search Editor - is opened. Default is true. focusResults - Whether to put focus in the - results of a search or the query input. Default is true. For example, the - following keybinding runs the search when the Search Editor is opened but - leaves the focus in the search query control. - -{ "key": "ctrl+o", "command": - "search.action.openNewEditor", "args": { - "query": "AVAP™ DS", "triggerSearch": true, - "focusResults": false } } Search Editor context - default The search.searchEditor.defaultNumberOfContextLines setting has a - default value of 1, meaning one context line will be shown before and - after each result line in the Search Editor. - -Reuse last Search Editor configuration The - search.searchEditor.reusePriorSearchConfiguration setting (default is - false) lets you reuse the last active Search Editor's - configuration when creating a new Search Editor. - -IntelliSense We'll always offer word completion, but for the rich - languages, such as JavaScript, JSON, HTML, CSS, SCSS, Less, C# and - TypeScript, we offer a true IntelliSense experience. If a language service - knows possible completions, the IntelliSense suggestions will pop up as - you type. You can always manually trigger it with ⌃Space. By default, Tab - or Enter are the accept keyboard triggers but you can also customize these - key bindings. - -Tip: The suggestions filtering supports CamelCase so you can type the - letters which are upper cased in a method name to limit the suggestions. - For example, "cra" will quickly bring up - "createApplication". - -Tip: IntelliSense suggestions can be configured via the - editor.quickSuggestions and editor.suggestOnTriggerCharacters settings. - -JavaScript and TypeScript developers can take advantage of the npmjs type - declaration (typings) file repository to get IntelliSense for - common JavaScript libraries (Node.js, React, Angular). You can - find a good explanation on using type declaration files in the JavaScript - language topic and the Node.js tutorial. - -Learn more in the IntelliSense document. - -Formatting AVAP™ DS has great support for source code formatting. The - editor has two explicit format actions: - -Format Document (⇧⌥F) - Format the entire active file. Format - Selection (⌘K ⌘F) - Format the selected text. You can invoke these - from the Command Palette (⇧⌘P) or the editor context menu. - -AVAP™ DS has default formatters for JavaScript, TypeScript, JSON, HTML, - and CSS. Each language has specific formatting options (for example, - html.format.indentInnerHtml) which you can tune to your preference in - your user or workspace settings. You can also disable the default language - formatter if you have another extension installed that provides formatting - for the same language. - -"html.format.enable": false Along with manually invoking code - formatting, you can also trigger formatting based on user gestures such as - typing, saving or pasting. These are off by default but you can enable - these behaviors through the following settings: - -editor.formatOnType - Format the line after typing. editor.formatOnSave - - Format a file on save. editor.formatOnPaste - Format the pasted content. - Note: Not all formatters support format on paste as to do so they must - support formatting a selection or range of text. - -In addition to the default formatters, you can find extensions on the - Marketplace to support other languages or formatting tools. There is a - Formatters category so you can easily search and find formatting - extensions. In the Extensions view search box, type 'formatters' - or 'category:formatters' to see a filtered list of extensions - within AVAP™ DS - -Folding You can fold regions of source code using the folding icons on the - gutter between line numbers and line start. Move the mouse over the gutter - and click to fold and unfold regions. Use Shift + Click on the folding - icon to fold or unfold the region and all regions inside. - -Folding - -You can also use the following actions: - -Fold (⌥⌘[) folds the innermost uncollapsed region at the cursor. - Unfold (⌥⌘]) unfolds the collapsed region at the cursor. Toggle - Fold (⌘K ⌘L) folds or unfolds the region at the cursor. Fold - Recursively (⌘K ⌘[) folds the innermost uncollapsed region at the - cursor and all regions inside that region. Unfold Recursively (⌘K - ⌘]) unfolds the region at the cursor and all regions inside that - region. Fold All (⌘K ⌘0) folds all regions in the editor. Unfold - All (⌘K ⌘J) unfolds all regions in the editor. Fold Level X - (⌘K ⌘2 for level 2) folds all regions of level X, except the - region at the current cursor position. Fold All Block Comments (⌘K - ⌘/) folds all regions that start with a block comment token. Folding - regions are by default evaluated based on the indentation of lines. A - folding region starts when a line has a smaller indent than one or more - following lines, and ends when there is a line with the same or smaller - indent. - -Folding regions can also be computed based on syntax tokens of the - editor's configured language. The following languages already provide - syntax aware folding: Markdown, HTML, CSS, LESS, SCSS, and JSON. - -If you prefer to switch back to indentation-based folding for one (or - all) of the languages above, use: - -{' '} - "[html]": { "editor.foldingStrategy": - "indentation" }, Regions can also be defined by markers - defined by each language. The following languages currently have markers - defined: - -Language Start region End region Bat ::#region or REM #region ::#endregion - or REM #endregion C# #region #endregion C/C++ #pragma region #pragma - endregion CSS/Less/SCSS / #region / / #endregion / - Coffeescript #region #endregion F# //#region or (#_region) - //#endregion or (#_endregion) Java //#region or // - //#endregion or // - Markdown - - Perl5 #region or =pod #endregion or =cut PHP #region #endregion PowerShell - #region #endregion Python #region or # region #endregion or # endregion - TypeScript/JavaScript //#region //#endregion Visual Basic #Region #End - Region To fold and unfold only the regions defined by markers use: - -Fold Marker Regions (⌘K ⌘8) folds all marker regions. Unfold - Marker Regions (⌘K ⌘9) unfolds all marker regions. Fold selection - The command Create Manual Folding Ranges from Selection (⌘K ⌘,) - creates a folding range from the currently selected lines and collapses - it. That range is called a manual folding range that goes on top of the - ranges computed by folding providers. - -Manual folding ranges can be removed with the command Remove Manual - Folding Ranges (⌘K ⌘.). - -Manual folding ranges are especially useful for cases when there isn't - programming language support for folding. - -Indentation AVAP™ DS lets you control text indentation and whether - you'd like to use spaces or tab stops. By default, AVAP™ DS inserts - spaces and uses 4 spaces per Tab key. If you'd like to use another - default, you can modify the editor.insertSpaces and editor.tabSize - settings. - -```javascript -"editor.insertSpaces": true, - - "editor.tabSize": 4, -``` - -Auto-detection VS Code analyzes your open file and determines the - indentation used in the document. The auto-detected indentation overrides - your default indentation settings. The detected setting is displayed on - the right side of the Status Bar: - -auto detect indentation - -You can click on the Status Bar indentation display to bring up a dropdown - with indentation commands allowing you to change the default settings for - the open file or convert between tab stops and spaces. - -indentation commands - -Note: AVAP™ DS auto-detection checks for indentations of 2, 4, 6 or 8 - spaces. If your file uses a different number of spaces, the indentation - may not be correctly detected. For example, if your convention is to - indent with 3 spaces, you may want to turn off editor.detectIndentation - and explicitly set the tab size to 3. - -```javascript -"editor.detectIndentation": false, - - "editor.tabSize": 3, -``` - -File encoding support Set the file encoding globally or per workspace by - using the files.encoding setting in User Settings or Workspace Settings. - -files.encoding setting - -You can view the file encoding in the status bar. - -Encoding in status bar - -Click on the encoding button in the status bar to reopen or save the - active file with a different encoding. - -Reopen or save with a different encoding - -Then choose an encoding. - -Select an encoding - -Next steps You've covered the basic user interface - there is a lot - more to AVAP™ DS. Read on to find out about: - -Intro Video - Setup and Basics - Watch a tutorial on the basics of AVAP™ - DS. User/Workspace Settings - Learn how to configure AVAP™ DS to your - preferences through user and workspace settings. Code Navigation - Peek - and Goto Definition, and more. Integrated Terminal - Learn about the - integrated terminal for quickly performing command-line tasks from within - AVAP™ DS. IntelliSense - AVAP™ DS brings smart code completions. Debugging - - This is where AVAP™ DS really shines. Common questions Is it possible to - globally search and replace? Yes, expand the Search view text box to - include a replace text field. You can search and replace across all the - files in your workspace. Note that if you did not open AVAP™ DS on a - folder, the search will only run on the currently open files. - -global search and replace - -How do I turn on word wrap? You can control word wrap through the - editor.wordWrap setting. By default, editor.wordWrap is off but if you set - to it to on, text will wrap on the editor's viewport width. - -```javascript -"editor.wordWrap": "on" -``` - -You can toggle word wrap for the AVAP™ DS session with ⌥Z. - -You can also add vertical column rulers to the editor with the - editor.rulers setting, which takes an array of column character positions - where you'd like vertical rulers. - -As in other editors, commands such as Cut and Copy apply to the whole - wrapped line. Triple-click selects the whole wrapped line. Pressing Home - twice moves the cursor to the very beginning of the line. Pressing End - twice moves the cursor to the very end of the line. - -How can I avoid placing extra cursors in word wrapped lines? If you'd - like to ignore line wraps when adding cursors above or below your current - selection, you can pass in { "logicalLine": true } to - args on the keybinding like this: - -{ "key": "shift+alt+down", "command": - "editor.action.insertCursorBelow", "when": - "textInputFocus", "args": { - "logicalLine": true }, }, { "key": - "shift+alt+up", "command": - "editor.action.insertCursorAbove", "when": - "textInputFocus", "args": { - "logicalLine": true }, }, diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md deleted file mode 100644 index 0676be8..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md +++ /dev/null @@ -1,317 +0,0 @@ -AVAP TM Dev Studio for the Web provides a free, zero-install - Microsoft AVAP TM Dev Studio experience running entirely in your - browser, allowing you to quickly and safely browse source code - repositories and make lightweight code changes. To get started, go to - (link) in your browser. - -AVAP TM Dev Studio for the Web has many of the features of AVAP - TM Dev Studio Desktop that you love, including search and - syntax highlighting while browsing and editing, along with extension - support to work on your codebase and make simpler edits. In addition to - opening repositories, forks, and pull requests from source control - providers like GitHub and Azure Repos, you can also work with code that is - stored on your local machine. - -AVAP TM Dev Studio for the Web runs entirely in your web - browser, so there are certain limitations compared to the desktop - experience, which you can read more about below. - -## Relationship to AVAP™ Dev Studio Desktop - -AVAP TM Dev Studio for the Web provides a browser-based - experience for navigating files and repositories and committing - lightweight code changes. However, if you need access to a runtime to run, - build, or debug your code, you want to use platform features such as a - terminal, or you want to run extensions that aren't supported in the - web, we recommend moving your work to the desktop application, GitHub - Codespaces, or using Remote - Tunnels for the full capabilities of AVAP - TM Dev Studio. In addition, AVAP TM Dev Studio - Desktop lets you use a full set of keyboard shortcuts not limited by your - browser. - -When you're ready to switch, you'll be able to "upgrade" - to the full AVAP TM Dev Studio experience with a few clicks. - -You can also switch between the Stable and Insiders versions of AVAP - TM Dev Studio for the Web by selecting the gear icon, then{' '} - Switch to Insiders Version... , or by navigating directly - to (LINK). - -## Opening a project - -By navigating to (LINK), you can create a new local file or - project, work on an existing local project, or access source code - repositories hosted elsewhere, such as on GitHub and Azure Repos (part - of Azure DevOps). - -You can create a new local file in the web just as you would in a AVAP - TM Dev Studio Desktop environment, using File {' '} - > New File from the Command Palette (F1). - -## GitHub repos - -You can open a GitHub repository in AVAP TM Dev Studio for the - Web directly from a URL, following the schema: (LINK). Using the - AVAP TM Dev Studio repository as an example, this would look - like: (LINK). - -This experience is delivered at a custom (LINK) URL, which is - powered by the GitHub Repositories extension (which is part of the - broader Remote Repositories extension). - -GitHub Repositories allows you to remotely browse and edit a repository - from within the editor, without needing to pull code onto your local - machine. You can learn more about the extension and how it works in our - GitHub Repositories guide. - -You can also open GitHub repositories in `vscode.dev` through - your browser's search bar (aka omnibox) by installing the{' '} - `vscode.dev` extension for Chrome and Edge. Then, type code to - activate the omnibox, followed by your repository's name. Suggestions - are populated by your browser search history, so if the repo you want - doesn't come up, you can also type in the fully qualified{' '} - `/` name to open it, for example{' '} - `microsoft/vscode` . - -If you're already in AVAP TM Dev Studio for the Web at - (LINK), you can alternatively navigate to different repos via the - Remote Repositories extension commands. Select the remote indicator in the - lower left of the Status bar, and you'll be presented with the{' '} - Open Remote Repository... command. - -## Azure Repos - -You can open Azure Repos just like Github repos in AVAP TM Dev - Studio for the Web. - -When you navigate to a URL with the schema (LINK), you will be - able to read, search the files in the repo, and commit your changes to - Azure Repos. You can fetch, pull, and sync changes, and view branches. - -You can open any repository, branch, or tag from Azure Repos in AVAP - TM Dev Studio for the Web by prefixing `vscode.dev` {' '} - to the Azure Repos URL. - -Alternatively, when you are on an Azure DevOps repository or pull request, - you can press (.) to open it in AVAP TM Dev Studio for - the Web. - -## More custom URLs - -Like in the desktop, you can customize AVAP TM Dev Studio for - the Web through a rich ecosystem of extensions that support just about - every back end, language, and service. `vscode.dev` includes - URLs that provide shortcuts to common experiences. - -We've explored a couple of URLs already (LINK and LINK). - Here's a more complete list: - -Please note that some URLs must be entered in a specific way (for - example, (LINK) requires an active Live Share session). Please - review each service's documentation for specific access and usage - information. - -There's more information on some of these URLs below. - -### Themes - -You can share and experience color themes through AVAP TM Dev - Studio for the Web through the URL schema: (LINK). - -For instance, you can go to (LINK) to experience the Night Owl - theme without having to go through the download and install process. - -Note: The color theme URL schema works for themes that are fully - declarative (no code). - -An extension can define multiple themes. You can use the schema{' '} - `/editor/theme//` . If no - themeName is specified, AVAP TM Dev Studio for the Web will take - the first theme. - -As a theme author, you can add the following badge to your extension - readme to allow users to easily try out your theme in AVAP TM {' '} - Dev Studio for the Web (replacing `` {' '} - with your theme extension's unique identifier): - -### Visual Studio Live Share - -Live Share guest sessions are available in the browser through the - (LINK) URL. The sessionId will be passed to the extension to make - joining a seamless experience. - -## Continue working in a different environment - -In some cases, you will want to access a different environment that has - the ability to run code. You can switch to working on a repository in a - development environment that has support for a local file system and full - language and development tooling. - -The GitHub Repositories extension makes it easy for you to clone the - repository locally, reopen it on the desktop, or create a GitHub codespace - for the current repository (if you have the GitHub Codespaces - extension installed and access to create GitHub codespaces). To do - this, use the Continue Working On... command available - from the Command Palette (F1) or click on the Remote indicator in - the Status bar. - -## Saving and sharing work - -When working on a local file in the web, your work is saved automatically - if you have Auto Save enabled. You can also save manually as you do when - working in desktop AVAP TM Dev Studio (for example{' '} - File > Save ). - -When working on a remote repository, your work is saved in the - browser's local storage until you commit it. If you open a repo or - pull request using GitHub Repositories, you can push your changes in the - Source Control view to persist any new work. - -You can also continue working in other environments via Continue Working - On. - -The first time that you use Continue Working On with - uncommitted changes, you will have the option to bring your edits to your - selected development environment using Cloud Changes , - which uses a AVAP TM Dev Studio service to store your pending - changes. This is described further in the GitHub Repositories doc. - -## Use your own compute with Remote Tunnels - -You may develop against another machine in AVAP TM Dev Studio - for the Web using the Remote - Tunnels extension. - -The Remote - Tunnels extension lets you connect to a remote machine, like - a desktop PC or virtual machine (VM), via a secure tunnel. You can - then securely connect to that machine from anywhere, without the - requirement of SSH. This lets you "bring your own compute" to - vscode.dev, enabling additional scenarios like running your code in the - browser. - -You may learn more about Remote - Tunnels in its documentation. - -## Safe exploration - -AVAP TM Dev Studio for the Web runs entirely in your web - browser's sandbox and offers a very limited execution environment. - -When accessing code from remote repositories, the web editor doesn't - "clone" the repo, but instead loads the code by invoking the - services' APIs directly from your browser; this further reduces the - attack surface when cloning untrusted repositories. - -When working with local files, AVAP TM Dev Studio for the Web - loads them through your browser's file system access APIs, which limit - the scope of what the browser can access. - -## Run anywhere - -Similar to GitHub Codespaces, AVAP TM Dev Studio for the Web can - run on tablets, like iPads. - -## Language support - -Language support is a bit more nuanced on the web, including code editing, - navigation, and browsing. The desktop experiences are typically powered by - language services and compilers that expect a file system, runtime, and - compute environment. In the browser, these experiences are powered by - language services running in the browser that provide source code - tokenization and syntax colorization, completions, and many single-file - operations. - -Generally, experiences fall into the following categories: - -* Good: For most programming languages, AVAP TM {' '} Dev Studio for the Web gives you code syntax colorization, text-based completions, and bracket pair colorization. Using a Tree-sitter syntax tree through the anycode extension, we're able to provide additional experiences such as Outline/Go to Symbol and{' '} Symbol Search for popular languages such as C/C++, C#, Java, PHP, Rust, and Go. -* Better: The TypeScript, JavaScript, and Python experiences are all powered by language services that run natively in the browser. With these programming languages, you'll get the " Good " experience plus rich single file completions, semantic highlighting, syntax errors, and more. -* Best: For many "webby" languages, such as JSON, HTML, CSS, and LESS, etc., the coding experience in vscode.dev is nearly identical to the desktop (including Markdown preview!). - -You can determine the level of language support in your current file - through the Language Status Indicator in the Status bar: - -## Limitations - -Since AVAP TM Dev Studio for the Web runs completely within the - browser, some experiences will naturally be more constrained when compared - to what you can do in the desktop app. For example, the terminal and - debugger are not available, which makes sense since you can't compile, - run, and debug a Rust or Go application within the browser sandbox. - -### Extensions - -Only a subset of extensions can run in the browser. You can use the - Extensions view to install extensions in the web, and extensions that - cannot be installed will have a warning icon and{' '} - Learn Why link. We expect more extensions to become - enabled over time. - -When you install an extension, it is saved in the browser's local - storage. You can ensure your extensions are synced across AVAP - TM Dev Studio instances, including different browsers and even - the desktop, by enabling Settings Sync. - -When an Extension Pack contains extensions that do not run in the browser - sandbox, you will get an informational message with the option to see the - extensions included in the pack. - -When extensions are executed in the browser sandbox, they are more - restricted. Extensions that are purely declarative, such as most themes, - snippets, or grammars, can run unmodified and are available in AVAP - TM Dev Studio for the Web without any modification from the - extension authors. Extensions that are running code need to be updated to - support running in the browser sandbox. You can read more about what is - involved to support extensions in the browser in the web extension authors - guide. - -There are also extensions that run in the browser with partial support - only. A good example is a language extension that restricts its support to - single files or the currently opened files. - -Edge and Chrome today support the File System API, allowing web pages to - access the local file system. If your browser does not support the File - System API, you cannot open a folder locally, but you can open files - instead. - -You can use AVAP TM Dev Studio for the Web in the latest - versions of Chrome, Edge, Firefox, and Safari. Older versions of each - browser may not work - we only guarantee support for the latest version. - -Tip: One way to check the compatible browser version is - to look at the version of Playright currently used for testing AVAP - TM Dev Studio and review its supported browser versions. You - can find the currently used Playwright version in the AVAP TM {' '} - Dev Studio repo's package.json file at - devDependencies/@playwright/test. Once you know the Playwright version, - for example 1.37, you can then review the{' '} - Browser Versions section in their Release notes. - -Webviews might appear differently or have some unexpected behavior in - Firefox and Safari. You can view issue queries in the AVAP TM {' '} - Dev Studio GitHub repo to track issues related to specific browsers, such - as with the Safari label and Firefox label. - -There are additional steps you can take to improve your browser experience - using AVAP TM Dev Studio for the Web. Review the Additional - browser setup section for more information. - -You can use AVAP TM Dev Studio for the Web on mobile devices, - but smaller screens may have certain limitations. - -Certain keybindings may also work differently in the web. - -## Additional browser setup - -There are additional browser configuration steps you can take when working - with AVAP TM Dev Studio in a browser. - -In certain cases, you may need to open a new tab or window while working - in AVAP TM Dev Studio for the Web. AVAP TM Dev Studio - might ask you for permission to access the clipboard when reading from it. - Depending on your browser, you may grant access to the clipboard or - otherwise allow for pop-up windows in different ways: - -* Chrome, Edge, Firefox: Search for "site permissions" in your browser's settings, or look for the following option in the address bar on the right: - -![Allow clipboard access in the browser][Type in your browser and search a - GitHub repository to open in vscode.dev] - -* Safari: In the Safari browser, go to Preferences... {' '} > Websites > Pop-up Windows > the domain you're accessing (for example, vscode.dev), and select Allow from the dropdown. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md deleted file mode 100644 index 426c697..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md +++ /dev/null @@ -1,362 +0,0 @@ -AVAP TM Dev Studio has many features to help make the editor - accessible to all users. Zoom levels and High Contrast colors improve - editor visibility, keyboard-only navigation supports use without a mouse, - and the editor is optimized for screen readers. - -## Zoom - -You can adjust the zoom level in AVAP TM Dev Studio with the{' '} - View > Appearance >{' '} - Zoom commands. Each Zoom command - increases or decreases the zoom level by 20 percent. - -* View > Appearance >{' '} Zoom In (Ctrl+=) - increase the zoom level. -* View > Appearance >{' '} Zoom Out (Ctrl+-) - decrease the zoom level. -* View > Appearance >{' '} Reset Zoom (Ctrl+Numpad0) - reset the zoom level to 0. - -### Persisted zoom level - -When you adjust the zoom level with the View >{' '} - Zoom In / Out commands, the zoom level is persisted in - the `window.zoomLevel` setting. The default value is 0 and each - increment/decrement changes the zoom level by 20 percent. - -## Accessibility help - -The command Open Accessibility Help Alt+F1 opens a help - menu based on the current context. It currently applies to the editor, - terminal, notebook, chat view, and inline chat features. - -You can dismiss the accessibility help menu or open additional - documentation from within the help menu. - -## High Contrast theme - -AVAP TM Dev Studio supports a High Contrast color theme on all - platforms. Use File > Preferences {' '} - > Theme > Color Theme (Ctrl+K - Ctrl+T) to display the Select Color Theme dropdown - and select the High Contrast theme. - -## Color vision accessibility - -You can search for extensions in{' '} - AVAP™ Dev Studio Marketplace that are compatible with - color vision deficiency. Use the Extensions view Ctrl+Shift+X and search - for "color blind" to populate relevant options. - -Once you have installed a color theme from the Marketplace, you can change - the color theme with File >{' '} - Preferences > Theme >{' '} - Color Theme Ctrl+K Ctrl+T. - -### Recommended themes for color vision accessibility - -* GitHub - Accessible to most forms of color blindness and matches the themes in GitHub's settings. -* Gotthard - Optimized for approximately 20 programming languages. -* Blinds - Created for people with deuteranopia, featuring a high contrast color ratio. -* Greative - Considers both color blindness and light sensitivity. -* Pitaya Smoothie - Accessible to most forms of color blindness and compliant with WCAG 2.1 criteria for color contrast. - -## Customizing warning colors - -The default Color Theme for AVAP TM Dev Studio is{' '} - Dark+ . However, you can customize both the theme and - property colors in the user interface. - -To customize the error and warning squiggles, go to File {' '} - > Preferences > Settings for user - settings. Search for "color customizations" to find the{' '} - Workbench: Color Customizations setting, and open your - user settings.json file by selecting{' '} - Edit in settings.json . - -In your `settings.json` file, nest the following code inside - the outermost curly braces. You can assign a color to each object by - entering a hex code. - -```javascript -"workbench.colorCustomizations": { - ` `"editorError.foreground": "#ffef0f", - ` `"editorWarning.foreground": "#3777ff" - - } -``` - -In the following example, the warning color is applied when a comma is - missing after a JSON item. - -* `editorError.foreground` - Overrides the wavy line beneath an error. -* `editorWarning.foreground` - Overrides the wavy line beneath a warning. -* `editorError.background` - Overrides the highlight color of an error. -* `editorWarning.background` - Overrides the highlight color of a warning. - -Assigning a color to the background of `editorError` and - editorWarning also helps to identify potential issues. The color that you - choose will highlight the respective error or warning. The colors shown in - the preceding example, `#ffef0f` (yellow) and{' '} - `#37777ff` (blue), are more accessible to individuals - with common forms of color vision deficiencies. - -### Selecting accessible colors - -The accessibility of colors is subjective to the type of anomalous - trichromacy (color blindness). The level of severity ranges per - person and can be divided into four condition types: - -One of the best approaches to selecting the best colors for a specific - condition is to apply complementary colors. These are colors located - opposite of one another on a color wheel. - -Note : For more information on finding complementary - colors, access the color blind simulator and interactive color wheel at - Adobe Color. - -## Dim unfocused editors and terminals - -Unfocused views can be dimmed to make it clearer where typed input will - go. This is especially useful when working with multiple editor groups or - terminals. Turn on this feature by setting " - `accessibility.dimUnfocused.enabled` ": `true` . - You can control the dimness level with{' '} - `accessibility.dimUnfocused.opacity,` which takes the opacity - fraction from 0.2 to 1 (default 0.75). - -## Keyboard navigation - -AVAP TM Dev Studio provides an exhaustive list of commands in - the Command Palette (Ctrl+Shift+P) so that you - can use AVAP TM Dev Studio without a mouse. Press Ctrl+Shift+P, - then type a command name (for example 'git') to filter the - list of commands. - -AVAP TM Dev Studio also has many preset keyboard shortcuts for - commands. - -You can also set your own keyboard shortcuts. File >{' '} - Preferences > Keyboard Shortcuts {' '} - (Ctrl+K Ctrl+S) opens the Keyboard Shortcuts editor, where you can - discover and modify key bindings for AVAP TM Dev Studio actions. - See Key Bindings for more details on customizing or adding your own - keyboard shortcuts. - -For quick navigation across the workbench, we recommend using{' '} - Focus Next Part (F6) and{' '} - Focus Previous Part (Shift+F6) commands. - -### Anchor selection - -To make it easier to start and end selections with the keyboard, there are - four commands: Set Selection Anchor (Ctrl+K - Ctrl+B), Select From Anchor to Cursor (Ctrl+K - Ctrl+K), Cancel Selection Anchor (Escape) and{' '} - Go to Selection Anchor . - -## Tab navigation - -You can use the Tab key to navigate between UI controls in AVAP - TM Dev Studio. Use Shift+Tab to tab in reverse order. As you - tab through the UI controls, an indicator will appear around each UI - element when it has focus. - -All elements in the workbench support tab navigation. To avoid having too - many tab stops, workbench toolbars and tab lists each have only one. Once - a toolbar or a tab list has focus, you can use the arrow keys to navigate - within them. - -## Tab trapping - -By default, pressing Tab within a source code file inserts the Tab - character (or spaces depending on your indentation setting) and - does not leave the open file. You can toggle Tab trapping with Ctrl+M, and - subsequent Tab keys will move focus out of the file. When default Tab - trapping is off, you will see a Tab moves focus indicator - in the Status Bar. - -Tab trapping also exists in the integrated terminal. The default behavior - for the feature can be configured with `editor.tabFocusMode` . - -You can also toggle Tab trapping on and off from the{' '} - Command Palette (Ctrl+Shift+P) with the{' '} - Toggle Tab Key Moves Focus action. - -Read-only files never trap the Tab key. The{' '} - Integrated Terminal panel respects the Tab trapping mode - and can be toggled with Ctrl+M. - -## Screen readers - -AVAP TM Dev Studio supports screen readers in the editor using a - strategy based on text pagination. The following screen readers have been - tested: - -* Windows: NVDA and JAWS -* macOS: VoiceOver -* Linux: Orca - -For NVDA, we recommend that you stay in focus mode and use the hotkeys to - navigate, instead of using browse mode. - -The Go to Next/Previous Error or Warning actions (F8 - and Shift+F8) allow screen readers to announce the error and warning - messages. - -When suggestions pop up, they are announced to screen readers. Navigate - the suggestions using Ctrl+Up and Ctrl+Down and dismiss them with - Shift+Escape. If suggestions get in your way, you can turn them off with - the `editor.quickSuggestions setting` . - -In the diff view pane, the Go to Next/Previous Difference {' '} - actions (F7 and Shift+F7) will show the Accessible Diff Viewer - with diffs presented in a unified patch format. Navigate through the - unchanged, inserted, or deleted lines with Up and Down. Press Enter to - return focus to the modified pane of the diff editor at the selected line - number (or the closest line number that still exists, if a deleted - line is selected). Use Escape or Shift+Escape to dismiss the - Accessible Diff Viewer. - -## Accessible View - -Run the command Open Accessible View Alt+F2 to display an - Accessible View to inspect content character by character, line by line. - The Accessible View is currently available for hovers, notifications, - Jupyter notebook output, and chat responses. - -## Screen reader mode - -When AVAP TM Dev Studio detects that a screen reader is being - used, it goes into an optimized screen reader mode for UI such as the - editor and Integrated Terminal. The Status bar will display{' '} - Screen Reader Optimized in the lower right. You can exit - screen reader mode by clicking on the display text or using the{' '} - Toggle Screen Reader Accessibility Mode command. - -Some features, such as folding and minimap (code overview), are - disabled when in screen reader mode. You can control whether AVAP - TM Dev Studio uses screen reader mode with the{' '} - Editor: Accessibility Support setting ( - `editor.accessibilitySupport` ) and the values are on, off, - or the default auto that automatically detects a screen reader through - querying the platform. - -## Input control and result navigation - -Navigating between an input control (for example, search or filter - input) and its results is consistent across the Extensions view, the - Keyboard Shortcuts editor, and the Comments, Problems, and Debug Console - panels using (Ctrl+Down) and (Ctrl+Up). - -## Terminal accessibility - -You can display terminal accessibility help via Alt+F1, which describes - useful tips when using a screen reader. One tip is to use Alt+F2 to access - the buffer in the terminal. This will automatically enter the screen - reader's browse mode, depending on your screen reader, for an - accessible view of the entire terminal buffer. - -Use `editor.tabFocusMode` to control whether the terminal - receives the Tab key instead of the workbench, similar to the editor. - -### Shell integration - -The terminal has a feature called shell integration that enables many - additional features that are not found in other terminals. When using a - screen reader, the Run Recent Command and Go to Recent Directory features - are particularly useful. - -Another shell integration powered command,{' '} - Go to Symbol in Accessible View (Ctrl+Shift+O), - lets you navigate between terminal commands similar to{' '} - Go to Symbol in Editor... navigation in the editor. - -### Minimum contrast ratio - -Set `terminal.integrated.minimumContrastRatio` to a number - between 1 and 21 to adjust text color luminance until the desired contrast - ratio is met or pure white ( `#FFFFFF` ) black ( - `#000000` ) is hit. - -Note that the `terminal.integrated.minimumContrastRatio` {' '} - setting will not apply to `powerline` characters. - -## Status bar accessibility - -Once focus is in the Status bar via Focus Next Part {' '} - (F6), you can use arrow navigation to move focus between Status - bar entries. - -### Diff editor accessibility - -There is an Accessible Diff Viewer in the Diff editor that presents - changes in a unified patch format. You can navigate between changes with{' '} - Go to Next Difference (F7) and{' '} - Go to Previous Difference (Shift+F7). Navigate - lines with the arrow keys and press Enter to jump back in the Diff editor - and the selected line. - -## Debugger accessibility - -The AVAP TM Dev Studio debugger UI is user accessible and has - the following features: - -* Debug state changes are read out (for example, 'started', 'breakpoint hit', 'terminated', ...). -* All debug actions are keyboard accessible. -* Both the Run and Debug view and Debug Console support Tab navigation. -* Debug hover is keyboard accessible (Ctrl+K Ctrl+I). -* Keyboard shortcuts can be created to set focus to each debugger area. - -## Audio Cues - -Audio cues indicate if the current line has certain markers such as: - errors, warnings, breakpoints, folded text regions or inline suggestions. - -They are played when the primary cursor changes its line or the first time - a marker is added to the current line. Audio cues are enabled - automatically when a screen reader is attached, but can also be controlled - by the settings `audioCues.\*` . - -The command Help: List Audio Cues lists all available - audio cues, lets you hear each audio cue as you move through the list, and - review which cues are currently enabled. - -Aria alerts also inform screen reader and braille users that certain - markers have been hit. The command Help: List Alerts {' '} - lists all available alerts and informs the user of which are available and - which are enabled. - -## Hover accessibility - -Some hovers cannot be hovered normally, which makes them hard to use with - screen magnifiers. To work around this, hold the `Alt` or{' '} - `Option` key while a hover is active to "lock" it in - place so that it won't hide when hovered. Release the key to unlock - the hover. - -## Current known issues - -AVAP TM Dev Studio has some known accessibility issues, - depending on the platform. For the full list, go to AVAP TM Dev - Studio accessibility issues. - -### macOS - -The editor includes screen reader support for VoiceOver. - -### Linux - -AVAP TM Dev Studio works well with the Orca screen reader. If - Orca in your Linux distribution does not read the editor content: - -* Make sure to have the setting " `editor.accessibilitySupport` ": "on" in AVAP TM Dev Studio. You can do this using settings, or by running the Show Accessibility Help command and pressing Ctrl+E to turn on accessibilitySupport. -* If Orca is still silent, try setting{' '} `ACCESSIBILITY\_ENABLED=1` as an environment variable. - -After you enable that setting, AVAP TM Dev Studio should work - with the Orca screen reader. - -## Next steps - -Read on to find out about: - -* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. -* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. -* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md deleted file mode 100644 index ac09f6e..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md +++ /dev/null @@ -1,288 +0,0 @@ -AVAP™ Dev Studio has a high productivity code editor which, when combined - with programming language services, gives you the power of an IDE and the - speed of a text editor. In this topic, we'll first describe AVAP™ DS - Code's language intelligence features (suggestions, parameter - hints, smart code navigation) and then show the power of the core text - editor. - -## Quick file navigation - -The Explorer is great for navigating between files when you are exploring - a project. However, when you are working on a task, you will find yourself - quickly jumping between the same set of files. AVAP™ DS Code provides two - powerful commands to navigate in and across files with easy-to-use key - bindings. - -Hold Ctrl and press Tab to view a list of all files open in an editor - group. To open one of these files, use Tab again to pick the file you want - to navigate to, then release Ctrl to open it. - -Alternatively, you can use Alt+Left and Alt+Right to navigate between - files and edit locations. If you are jumping around between different - lines of the same file, these shortcuts allow you to navigate between - those locations easily. - -## Breadcrumbs - -The editor has a navigation bar above its contents called{' '} - - Breadcrumbs - - . It shows the current location and allows you to quickly navigate between - folders, files, and symbols. - -Breadcrumbs always show the file path and, with the help of language - extensions, the symbol path up to the cursor position. The symbols shown - are the same as in Outline view and Go to Symbol. - -Selecting a breadcrumb in the path displays a dropdown with that - level's siblings so you can quickly navigate to other folders and - files. - -If the current file type has language support for symbols, you will see - the current symbol path and a dropdown of other symbols at the same level - and below. - -You can turn off breadcrumbs with the View >{' '} - Show Breadcrumbs toggle or with the breadcrumbs.enabled{' '} - setting . - -### Breadcrumb customization - -The appearance of breadcrumbs can be customized. If you have very long - paths or are only interested in either file paths or symbols paths, you - can use the breadcrumbs.filePath and breadcrumbs.symbolPath settings. Both - support on, off, and last and they define if or what part of the path you - see. By default, breadcrumbs show file and symbol icons to the left of the - breadcrumb but you can remove the icons by setting breadcrumbs.icons to - false. - -### Symbol order in Breadcrumbs - -You can control how symbols are ordered in the Breadcrumbs dropdown with - the breadcrumbs.symbolSortOrder settings. - -Allowed values are: - -* position - position in the file (default) -* name - alphabetical order -* type - symbol type order - -### Breadcrumb keyboard navigation - -To interact with breadcrumbs, use the Focus Breadcrumbs {' '} - command or press Ctrl+Shift+.. It will select that last element and open a - dropdown that allows you to navigate to a sibling file or symbol. Use the - Left and Right keyboard shortcuts to go to elements before or after the - current element. When the dropdown appears, start typing - all matching - elements will be highlighted and the best match will be selected for quick - navigation. - -You can also interact with breadcrumbs without the dropdown. Press - Ctrl+Shift+; to focus the last element, use Left and Right to navigate, - and use Space to reveal the element in the editor. - -## Go to Definition - -If a language supports it, you can - go to the definition of a symbol by pressing F12. - -If you press Ctrl and hover over a symbol, a preview of the declaration - will appear: - -## Go to Type Definition - -Some languages also support jumping - to the type definition of a symbol by running the{' '} - Go to Type Definition command from either the editor - context menu or the Command Palette . This will take you - to the definition of the type of a symbol. The command - editor.action.goToTypeDefinition is not bound to a keyboard shortcut by - default but you can add your own custom{' '} - keybinding . - -## Go to Implementation - -Languages can also support jumping - to the implementation of a symbol by pressing Ctrl+F12. For an interface, - this shows all the implementors of that interface and for abstract - methods, this shows all concrete implementations of that method. - -## Go to Symbol - -You can navigate symbols inside a file with Ctrl+Shift+O. By typing : the - symbols will be grouped by category. Press Up or Down and navigate to the - place you want. - -## Open symbol by name - -Some languages support jumping to a symbol across files with Ctrl+T. Type - the first letter of a type you want to navigate to, regardless of which - file contains it, and press Enter. - -## Peek - -We think there's nothing worse than a big context switch when all you - want is to quickly check something. That's why we support peeked - editors. When you execute a Go to References search - (via Shift+F12), or a Peek Definition (via - Alt+F12), we embed the result inline: - -You can navigate between different references in the peeked editor and - make quick edits right there. Clicking on the peeked editor filename or - double-clicking in the result list will open the reference in the outer - editor. - -## Bracket matching - -Matching brackets will be highlighted as soon as the cursor is near one of - them. - -### Bracket Pair Colorization - -Matching bracket pairs can also be colorized by setting - editor.bracketPairColorization.enabled to true. - -All colors are themeable and up to six colors can be configured. - -You can use workbench.colorCustomizations to override these - theme-contributed colors in your settings: - -```javascript -"workbench.colorCustomizations": { ` - `"editorBracketHighlight.foreground1": "#FFD700", ` - `"editorBracketHighlight.foreground2": "#DA70D6", ` - `"editorBracketHighlight.foreground3": "#179fff", - }, -``` - -## Reference information - -Some languages like C# support inline reference information, that is - updated live. This allows you to quickly analyze the impact of your edit - or the popularity of your specific method or property throughout your - project: - -## Rename symbol - -Some languages support rename symbol across files. Press F2 and then type - the new desired name and press Enter. All usages of the symbol will be - renamed, across files. - -## Errors & warnings - -Warnings or Errors can be generated either via{' '} - configured tasks , by rich language - services, or by linters, that constantly analyze your code in the - background. Since we love bug-free code, warnings and errors show up in - multiple places: - -* In the Status Bar, there is a summary of all errors and warnings counts. -* You can click on the summary or press Ctrl+Shift+M to display the{' '} PROBLEMS panel with a list of all current errors. -* If you open a file that has errors or warnings, they will be rendered inline with the text and in the overview ruler. - -## Code Action - -Warnings and Errors can provide Code Actions (also known as Quick - Fixes) to help fix issues. These will be displayed in the editor in - the left margin as a lightbulb. Clicking on the lightbulb will either - display the Code Action options or perform the action. - -## Inlay Hints - -Some languages provide inlay hints: that is additional information about - source code that is rendered inline. This is usually used to show inferred - types. The sample below shows inlay hints that display the inferred types - of JavaScript variables and function return types. - -Inlay hints can be enabled/disabled with the editor.inlayHints.enabled - setting, the default is enabled. Extensions, like TypeScript or Rust, are - needed to provide the actual inlay hint information. - -## Outgoing link protection - -For your protection, AVAP™ DS Code displays a prompt before opening an - outgoing website link from the editor. - -You can proceed to the external website in your browser or have the - options to copy the link or cancel the request. If you choose{' '} - Configure Trusted Domains , a dropdown lets you trust the - exact URL, trust the URL domain and subdomains, or trust all domains to - disable outgoing link protection. - -The option to Manage Trusted Domains , also available at - any time from the Command Palette, brings up the{' '} - Trusted Domains JSON file, where you can add, remove, or - modify trusted domains. - -```javascript -// You can use the "Manage Trusted Domains" command to open this file. - - // Save this file to apply the trusted domains rules. - [ ` `"\*.twitter.com" - ] -``` - -The Trusted Domains JSON file also has comments with - examples of the supported domain formats and a list of the domains trusted - by default, such as https://*.visualstudio.com and - https://*.microsoft.com. - -## Next steps - -Now that you know how the editor works, time to try a few other things... - -* Intro Video - Code Editing - Watch an introductory video on code editing features. -* User Interface - In case you missed a basic orientation around AVAP™ DS Code. -* Key Bindings - Learn how to modify key bindings to your preference. -* Debugging - This is where AVAP™ DS Code really shines. - -## Common questions - -### How can I automatically select the second entry in Quick Open instead of - the first? - -With the command workbench.action.quickOpenPreviousEditor, you can have - the second entry automatically selected in Quick Open. This can be useful - if you want to select the previous entry from the list without having to - invoke another keybinding: - -```javascript -[` `{ - ` `"key": "ctrl+p", - ` `"command": "workbench.action.quickOpenPreviousEditor" - ` `}, - ` `{ - ` `"key": "ctrl+p", - ` `"command": "-workbench.action.quickOpen" - ` `} - ] -``` - -### How can I configure Ctrl+Tab to navigate across all editors of all groups - -By default, Ctrl+Tab navigates between editors of the same editor group. - If you want to navigate across all opened editors in all groups, you can - create keyboard shortcuts for the - workbench.action.quickOpenPreviousRecentlyUsedEditor and - workbench.action.quickOpenLeastRecentlyUsedEditor commands: - -```javascript -[` `{ - ` `"key": "ctrl+tab", - ` `"command": - "workbench.action.quickOpenPreviousRecentlyUsedEditor", - ` `"when": "!inEditorsPicker" - ` `}, - ` `{ - ` `"key": "ctrl+shift+tab", - ` `"command": "workbench.action.quickOpenLeastRecentlyUsedEditor", - ` `"when": "!inEditorsPicker" - ` `} - ] -``` - -### How can I navigate between recently used editors without a picker - -Here is a list of commands you can use to navigate in editors without - opening a picker: diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md deleted file mode 100644 index 6efde20..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md +++ /dev/null @@ -1,191 +0,0 @@ -AVAP TM Dev Studio has a powerful command-line interface - built-in that lets you control how you launch the editor. You can open - files, install extensions, change the display language, and output - diagnostics through command-line options (switches). - -If you are looking for how to run command-line tools inside AVAP - TM Dev Studio, see the Integrated Terminal. - -## Command line help - -To get an overview of the AVAP TM Dev Studio command-line - interface, open a terminal or command prompt and type{' '} - `code --help` . You will see the version, usage example, and - list of command line options. - -## Launching from command line - -You can launch AVAP TM Dev Studio from the command line to - quickly open a file, folder, or project. Typically, you open AVAP - TM Dev Studio within the context of a folder. To do this, from - an open terminal or command prompt, navigate to your project folder and - type `code .` : - -Windows and Linux installations should add the AVAP TM Dev - Studio binaries location to your system path. If this isn't the case, - you can manually add the location to the `Path` environment - variable ($PATH on Linux). For example, on Windows, the default - AVAP TM Dev Studio binaries location is{' '} - `AppData\Local\Programs\Microsoft` AVAP TM Dev - Studio\bin. To review platform-specific setup instructions, see Setup. - -## Core CLI options - -Here are optional arguments you can use when starting AVAP TM {' '} - Dev Studio at the command line via code: - -## Opening Files and Folders - -Sometimes you will want to open or create a file. If the specified file - does not exist, AVAP TM Dev Studio will create them for you - along with any new intermediate folders: - -```javascript -code index.html style.css documentation\readme.md -``` - -For both files and folders, you can use absolute or relative paths. - Relative paths are relative to the current directory of the command prompt - where you run `code` . - -If you specify more than one file at the command line, AVAP TM {' '} - Dev Studio will open only a single instance. - -If you specify more than one folder at the command line, AVAP TM {' '} - Dev Studio will create a Multi-root Workspace including each folder. - -## Select a profile - -You can launch AVAP TM Dev Studio with a specific profile via - the `--profile` command-line interface option. You pass the - name of the profile after the - `-profile` argument and open a - folder or a workspace using that profile. The command line below opens the{' '} - `web-sample` folder with the "Web Development" - profile: - -` - code ~/projects/web-sample --profile "Web Development" - ` - -If the profile specified does not exist, a new empty profile with the - given name is created. - -## Working with extensions - -You can install and manage AVAP TM Dev Studio extensions from - the command line. - -## Advanced CLI options - -There are several CLI options that help with reproducing errors and - advanced setup. - -AVAP TM Dev Studio integrates with other remote environments to - become even more powerful and flexible. Our goal is to provide a cohesive - experience that allows you to manage both local and remote machines from - one, unified CLI. - -The AVAP TM Dev Studio Remote - Tunnels extension lets you - connect to a remote machine, like a desktop PC or VM, via a secure tunnel. - Tunneling securely transmits data from one network to another. You can - then securely connect to that machine from anywhere, without the - requirement of SSH. - -We've built functionality into the code CLI that will initiate tunnels - on remote machines. You can run: - -```javascript -code tunnel -``` - -to create a tunnel on your remote machine. You may connect to this machine - through a web or desktop AVAP TM Dev Studio client. - -You can review the other tunneling commands by running code tunnel -help: - -As you may need to run the CLI on a remote machine that can't install - AVAP TM Dev Studio Desktop, the CLI is also available for - standalone install on the AVAP TM Dev Studio download page. - -For more information on Remote Tunnels, you can review the Remote Tunnels - documentation. - -## Open AVAP™ Dev Studio - -You can also open projects and files using the platform's URL handling - mechanism. Use the following URL formats to: - -Open a project - -```javascript -vscode://file/{full path to project}/ - - - vscode://file/c:/myProject/ -``` - -Open a file - -```javascript -vscode://file/{full path to file} - - - vscode://file/c:/myProject/package.json -``` - -Open a file to line and column - -```javascript -vscode://file/{full path to file}:line:column - - - vscode://file/c:/myProject/package.json:5:10 -``` - -You can use the URL in applications such as browsers or file explorers - that can parse and redirect the URL. For example, on Windows, you could - pass a vscode:// URL directly to the Windows Explorer or to the command - line as start vscode://{full path to file}. - -## Next steps - -Read on to find out about: - -* Integrated Terminal - Run command-line tools from inside AVAP TM Dev Studio. -* Basic Editing - Learn the basics of the AVAP TM Dev Studio editor. -* Code Navigation - AVAP TM Dev Studio lets you quickly understand and move through your source code. - -## Common questions - -Your OS cannot find the AVAP TM Dev Studio binary code on its - path. The AVAP TM Dev Studio Windows and Linux installations - should have installed AVAP TM Dev Studio on your path. Try - uninstalling and reinstalling AVAP TM Dev Studio. If code is - still not found, consult the platform-specific setup topics for Windows - and Linux. - -On macOS, you need to manually run the{' '} - Shell Command: Install 'code' command in PATH {' '} - command (available through the Command Palette {' '} - Ctrl+Shift+P). Consult the macOS specific setup topic for details. - -AVAP TM Dev Studio has an Integrated Terminal where you can run - command-line tools from within AVAP TM Dev Studio. - -Not directly through the command line, but AVAP TM Dev Studio - has a Portable Mode, which lets you keep settings and data in the same - location as your installation, for example, on a USB drive. - -When AVAP TM Dev Studio starts up, it may launch a shell in - order to source the "shell environment" to help set up tools. - This will launch an interactive login shell and fetch its - environment. Depending on your shell setup, this may cause problems. For - example, it may be unexpected that the shell is launched as an interactive - session, which AVAP TM Dev Studio needs in order to try to align{' '} - `$PATH` with the exact value in a user created terminal. - -Whenever AVAP TM Dev Studio launches this initial shell, AVAP - TM Dev Studio sets the variable{' '} - `VSCODE\_RESOLVING\_ENVIRONMENT` to 1. If your shell or user - scripts need to know if they are being run in the context of this shell, - you can check the `VSCODE\_RESOLVING\_ENVIRONMENT` value. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md deleted file mode 100644 index 9c43205..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md +++ /dev/null @@ -1,324 +0,0 @@ -AVAP TM Dev Studio comes with a simple user interface and - convenient default layout. At the same time, AVAP TM Dev Studio - provides options and settings to let you customize the UI layout to suit - your preferences and work style. In this topic, we'll highlight - various UI customizations so you can display views, editors, and panels in - the way that's most productive for you. - -This article starts by discussing Workbench customizations to rearrange UI - elements such as the side bars, views, and panels. Later in the article, - we'll cover customization of the Editor region with editor groups, - split editors, and editor tabs. - -`` - -## Workbench - -### Primary side bar - -The default (Primary) side bar shows views such as the File - Explorer, Search, and Source Control on the left of the workbench. If - you'd prefer it on the right, you can: - -* Right-click the Activity bar and select{' '} Move Primary Side Bar Right . -* Run View: Toggle Primary Side Bar Position to switch the Primary side bar right and left. -* Set the Workbench > Side Bar: Location {' '} (workbench.sideBar.location) setting to right. - -### Secondary side bar - -By default, AVAP TM Dev Studio shows all views in the{' '} - Primary Side Bar located to the left of the editor - region. If you like another place to display views, you can open the{' '} - Secondary Side Bar to the right and drag and drop views - into that side bar. - -This can be useful if you'd like to see two views at the same time, - for example, the File Explorer on the left and Source Control view on the - right: - -To display the Secondary side bar, you can: - -* Run View: Toggle Secondary Side Bar Visibility {' '} (Ctrl+Alt+B). -* Check the View > Appearance >{' '} Secondary Side Bar menu item. - -The Secondary side bar is initially empty but you can drag and drop views - and panels into it and the layout is preserved across your AVAP - TM Dev Studio sessions. - -### Activity bar position - -By default, the Activity bar moves with the Primary side bar and remains - on the outer edge of the workbench. You can also choose to hide the - Activity bar or move it to the top of the Primary side bar. The{' '} - Activity Bar Position menu available from the Activity - bar context menu or under View >{' '} - Appearance has the options Side ,{' '} - Top , or Hidden . - -When the Activity bar is in the top position, the Account {' '} - and Manage buttons, usually at the bottom of the Activity - bar, move to the right side of the title bar. - -### Panel - -The Panel region displays UI elements such as the Problems, Terminal, and - Output panels and by default is located under the editor region. - -### Panel position - -You can also move the region to the left or right of the editor with the{' '} - Move Panel commands: - -* View: Move Panel Left ( `workbench.action.positionPanelLeft` ) -* View: Move Panel Right ( `workbench.action.positionPanelRight` ) -* View: Move Panel To Bottom ( `workbench.action.positionPanelBottom` ) - -You can configure these options in the menu under View {' '} - > Appearance > Panel Position , - Panel title bar context menu, or using the new{' '} - View: Move Panel commands. - -### Panel alignment - -This option lets you configure how far the bottom Panel spans across your - window. There are four options: - -* Center - This is the default behavior. The panel spans the width of the editor area only. -* Justify - The panel spans the full width of the window. -* Left - The panel spans from the left edge of the window to the right edge of the editor area. -* Right - The panel spans from the right edge of the window to the left edge of the editor area. - -With all Panel alignment options, the Activity Bar is considered the edge - of the window. - -You can configure these options in the menu under View {' '} - > Appearance > Align Panel , Panel - title context menu, or using the new{' '} - Set Panel Alignment to... commands. - -### Maximize Panel size - -When the Panel alignment is Center , you can quickly - toggle the Panel region to fill the entire editor area with the{' '} - Maximize Panel Size chevron button in the upper right of - the Panel region. The chevron button points downwards in the maximized - panel to restore the panel to the original size. - -You can also maximize the Panel region via the{' '} - View: Toggle Maximized Panel command. - -### Customize Layout control - -The AVAP TM Dev Studio title bar also has buttons to toggle the - visibility of the main UI elements (Side bars and Panel region). - -The rightmost button brings up the Customize Layout {' '} - dropdown, where you can further change the visibility and layout of - various UI elements and includes several layout modes: - -The layout modes are: - -* Full Screen - Set the editor to fill the full display screen. View: Toggle Full Screen ( `F11` ). -* Zen Mode - Hide all UI except for the editor area.{' '} View: Toggle Zen Mode ( `Ctrl+K Z` ). -* Centered Layout - Centers the editor inside the editor region. View: Toggle Centered Layout . - -### Drag and drop views and panels - -AVAP TM Dev Studio has a default layout of views and panels in - the Primary Side bar and Panel region but you can drag and drop views and - panels between these regions. For example, you can drag and drop the - Source Control view into the Panel region or put the Problems panel into - the Primary Side bar: - -You can also add views and panels to existing view or panel to create - groups. For example, you could move the Output panel to the Explorer view - group by dragging over the Explorer Activity bar item and then dropping - into the view: - -You are not limited to using the mouse for moving views and panels. You - can also customize layouts via the keyboard with the{' '} - View: Move View and{' '} - View: Move Focused View commands, where dropdowns let you - pick the UI element to move and the destination, either a location like - the Side bar or Panel region or an existing view or panel to create a - group. - -## Tool bars - -Most AVAP TM Dev Studio views and panels have tool bars - displayed on the top right of their UI. For example, the Search view has a - tool bar with actions such as Refresh ,{' '} - Clear Search Results , etc.: - -### Hide items in tool bars - -If you think a tool bar is too busy and you'd like to hide less - frequently used actions, you can right-click on any action and select its{' '} - Hide command (for example{' '} - Hide 'Clear Search Results' ) or uncheck any - of the actions from the dropdown. Hidden actions are moved to the ...{' '} - More Actions menu and can be invoked from there. - -To restore an action to the tool bar, right-click the tool bar button area - and select the Reset Menu command or recheck the hidden - action. To restore all menus in AVAP TM Dev Studio, run{' '} - View: Reset All Menus from the Command Palette - (Ctrl+Shift+P). - -## Editor - -You can customize the layout of the AVAP TM Dev Studio editor - region independently of the workbench user interface. By default, the - editor region displays useful features such as the minimap, breadcrumbs, - editor tabs, and has optional UI such as Sticky Scroll. You can also - adjust the layout of the editors themselves. - -### Minimap and breadcrumbs - -The View > Appearance menu has a - section for customizing the editor region. There you'll find toggles - for: - -* Minimap - A visual overview of your current file.{' '} View: Toggle Minimap . -* Breadcrumbs - Display folder, file, and current symbol information for the active file.{' '} View: Toggle Breadcrumbs . -* Sticky Scroll - Display nested symbol scopes in the active file. View: Toggle Sticky Scroll . - -### Editor groups - -By default, each opened editor goes into the same{' '} - editor group and adds a new editor tab to the right. You - can create new editor groups in order to group similar or related files, - or to allow side by side editing of the same file. Create a new editor - group by dragging an editor to the side, or using one of the{' '} - Split commands in the context menu to duplicate the - current editor into a new editor group to the left, right, above, or - below. - -The Split editor commands are also available from the{' '} - View > Editor Layout menu and through - the Command Palette. - -If you'd like to go quickly between vertical and horizontal editor - group layout, you can use the{' '} - Toggle Vertical/Horizontal Editor Layout command - (Shift+Alt+0). - -### Split in group - -You can also split an editor in the same group for side by side editing - with the View: Split Editor in Group command (Ctrl+K - Ctrl+Shift+). - -When using the split in group feature, there are specific commands for - toggling this mode and navigating between the two split editors: - -* View: Split Editor in Group - Split the current editor. -* View: Toggle Split Editor in Group - Toggle between split mode for the active editor. -* View: Join Editor in Group - Go back to a single editor for the active file. -* View: Toggle Layout of Split Editor in Group - Toggle between horizontal and vertical layout. - -To navigate between the sides: - -* View: Focus First Side in Active Editor - Move focus to the first (left or top) side of split editor. -* View: Focus Second Side in Active Editor - Move focus to the second (right or bottom) side. -* View: Focus Other Side in Active Editor - Toggle between the split editor sides. - -The Workbench > Editor: Split in Group Layout {' '} - (workbench.editor.splitInGroupLayout) setting lets you set the - preferred split editor layout to either horizontal (default) or - vertical. - -### Grid layout - -If you'd like more control over the editor group layout, you can use - the grid layout, where you can have multiple rows and columns of editor - groups visible. The View >{' '} - Editor Layout menu lists various editor layout options - (for example, Two Columns ,{' '} - Three Columns , Grid (2x2) ) - and you can adjust the group sizes by grabbing and moving the sash between - them. - -### Pinned tabs - -If you'd like an editor tab to always be visible, you can pin it to - the editor tab bar. You can pin an editor tab from either the context menu - or using the command View: Pin Editor (Ctrl+K - Shift+Enter). - -Pinned tabs help access files that are important to you as: - -* Pinned tabs always appear first before non-pinned tabs. -* They do not scroll out of view if you have many tabs opened. -* They do not close when using editor tab commands such as{' '} Close Others or Close All . -* They do not close even when you exceed a set limit of opened editors. - -Unpin an editor by clicking on the pin icon, using the{' '} - Unpin editor tab context menu item, or the{' '} - View: Unpin Editor command. - -You can choose how you'd like to display pinned editors with the{' '} - Workbench > Editor: Pinned Tab Sizing ( - `workbench.editor.pinnedTabSizing` ) setting. The options - are: - -* `normal` : A pinned tab inherits the look of other tabs (default) -* `shrink` : A pinned tab shrinks to a fixed size showing parts of the editor label. -* `compact` : A pinned tab will only show as icon or first letter of the editor label. - -You can also show pinned editor tabs on a separate row above the regular - editor tab bar by setting{' '} - Workbench > Editor: Pinned Tabs On Separate Row . You - can pin and unpin editors by dragging and dropping their tabs between the - two rows. - -### Locked editor groups - -When using multiple editors, it's common to have one or more that you - want to always keep visible. The locked editor group feature, where an - entire editor group is locked and visible, provides a stable display and - any request to open a new editor will create it in another group. You can - tell whether an editor group is locked by the lock icon in the editor - group tool bar. - -You can lock an editor group by selecting Lock Group from - the editor tool bar More Actions ... dropdown or running - the View: Lock Editor Group command. - -You can unlock an editor group by clicking on the lock icon or running the{' '} - View: Unlock Editor Group command. - -Locked groups behave differently than unlocked groups: - -* New editors will not open in a locked group unless explicitly moved there (for example, via drag and drop). -* If a new editor skips a locked group, it will either open in the most recently used unlocked group or create a new group to the side of the locked one. -* The locked state of an editor group is persisted and restored across restarts. -* You can lock empty groups as well, allowing for a more stable editor layout. - -The primary use case is for terminals in the editor area For example, you - might want to edit text on the left and have a terminal on the right that - is always visible. When a terminal editor is created and moved to the - side, it will automatically lock. This means that even when the terminal - on the right is focused, opening a file will open it on the left side - without needing to manually change focus first. - -Auto locking groups can be configured using the - workbench.editor.autoLockGroups setting, which defaults to only terminal - editors but any editor type can be added to get the same behavior. - -The commands related to editor group locking: - -* View: Lock Editor Group - Lock the active editor group. -* View: Unlock Editor Group - Unlock the active locked editor group. -* View: Toggle Editor Group Lock - Lock or unlock the active editor group. - -You must have more that one editor group for these commands to be - available. - -## Next steps - -Read on to find out about: - -* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. -* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. -* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md deleted file mode 100644 index 786357d..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md +++ /dev/null @@ -1,698 +0,0 @@ -One of the key features of AVAP TM Dev Studio is its great - debugging support. AVAP TM Dev Studio's built-in debugger - helps accelerate your edit, compile, and debug loop. - -## Debugger extensions - -AVAP TM Dev Studio has built-in debugging support for the - Node.js runtime and can debug JavaScript, TypeScript, or any other - language that gets transpiled to JavaScript. - -For debugging other languages and runtimes (including PHP, Ruby, Go, - C#, Python, C++, PowerShell and many others), look for{' '} - `Debuggers` extensions in the AVAP™ Dev Studio Marketplace or - select Install Additional Debuggers in the top-level Run menu. - -Below are several popular extensions which include debugging support: - -## Start debugging - -The following documentation is based on the built-in Node.js debugger, but - most of the concepts and features are applicable to other debuggers as - well. - -It is helpful to first create a sample Node.js application before reading - about debugging. You can follow the Node.js walkthrough to install Node.js - and create a simple "Hello World" JavaScript application ( - `app.js` ). Once you have a simple application set up, this - page will take you through AVAP TM Dev Studio debugging - features. - -## Run and Debug view - -To bring up the Run and Debug view, select the{' '} - Run and Debug icon in the Activity Bar {' '} - on the side of AVAP TM Dev Studio. You can also use the keyboard - shortcut Ctrl+Shift+D. - -The Run and Debug view displays all information related - to running and debugging and has a top bar with debugging commands and - configuration settings. - -If running and debugging is not yet configured (no - `launch.json` has been created), AVAP TM Dev - Studio shows the Run start view. - -## Run menu - -The top-level Run menu has the most common run and debug - commands: - -## Launch configurations - -To run or debug a simple app in AVAP TM Dev Studio, select{' '} - Run and Debug on the Debug start view or press F5 and - AVAP TM Dev Studio will try to run your currently active file. - -However, for most debugging scenarios, creating a launch configuration - file is beneficial because it allows you to configure and save debugging - setup details. AVAP TM Dev Studio keeps debugging configuration - information in a `launch.json` file located in a{' '} - `.vscode` folder in your workspace (project root - folder) or in your user settings or workspace settings. - -To create a launch.json file, click the{' '} - create a launch.json file link in the Run start view. - -AVAP TM Dev Studio will try to automatically detect your debug - environment, but if this fails, you will have to choose it manually: - -Here is the launch configuration generated for Node.js debugging: - -```javascript -{ - ` `"version": "0.2.0", - ` `"configurations": [` `{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Launch Program", - ` `"skipFiles": ["/\*\*"], - ` `"program": "${workspaceFolder}\\app.js" - ` `} - ` `] - - } -``` - -If you go back to the File Explorer view (Ctrl+Shift+E), - you'll see that AVAP TM Dev Studio has created a{' '} - `.vscode` folder and added the `launch.json` file to - your workspace. - -Note that the attributes available in launch configurations vary from - debugger to debugger. You can use IntelliSense suggestions - (Ctrl+Space) to find out which attributes exist for a specific - debugger. Hover help is also available for all attributes. - -Do not assume that an attribute that is available for one debugger - automatically works for other debuggers too. If you see red squiggles in - your launch configuration, hover over them to learn what the problem is - and try to fix them before launching a debug session. - -Review all automatically generated values and make sure that they make - sense for your project and debugging environment - -### Launch versus attach configurations - -In AVAP TM Dev Studio, there are two core debugging modes,{' '} - Launch and Attach , which handle two - different workflows and segments of developers. Depending on your - workflow, it can be confusing to know what type of configuration is - appropriate for your project. - -If you come from a browser Developer Tools background, you might not be - used to "launching from your tool," since your browser instance - is already open. When you open DevTools, you are simply{' '} - attaching DevTools to your open browser tab. On the other - hand, if you come from a server or desktop background, it's quite - normal to have your editor launch your process for you, - and your editor automatically attaches its debugger to the newly launched - process. - -The best way to explain the difference between launch and{' '} - attach is to think of a launch {' '} - configuration as a recipe for how to start your app in debug mode{' '} - before AVAP TM Dev Studio attaches to it, while - an attach configuration is a recipe for how to connect - AVAP TM Dev Studio's debugger to an app or process - that's already running. - -AVAP TM Dev Studio debuggers typically support launching a - program in debug mode or attaching to an already running program in debug - mode. Depending on the request (attach or launch), different - attributes are required, and AVAP TM Dev Studio's - launch.json validation and suggestions should help with that. - -### Add a new configuration - -To add a new configuration to an existing `launch.json` , use - one of the following techniques: - -* Use IntelliSense if your cursor is located inside the configurations array. -* Press the Add Configuration button to invoke snippet IntelliSense at the start of the array. -* Choose Add Configuration option in the Run menu. - -AVAP TM Dev Studio also supports compound launch configurations - for starting multiple configurations at the same time; for more details, - please read this section. - -In order to start a debug session, first select the configuration named{' '} - Launch Program using the{' '} - Configuration dropdown in the{' '} - Run and Debug view. Once you have your launch - configuration set, start your debug session with F5. - -Alternatively, you can run your configuration through the{' '} - Command Palette (Ctrl+Shift+P) by filtering on{' '} - Debug: Select and Start Debugging or typing 'debug - ' and selecting the configuration you want to debug. - -As soon as a debugging session starts, the DEBUG CONSOLE {' '} - panel is displayed and shows debugging output, and the Status Bar changes - color (orange for default color themes): - -In addition, the debug status appears in the Status Bar - showing the active debug configuration. By selecting the debug status, a - user can change the active launch configuration and start debugging - without needing to open the Run and Debug view. - -## Debug actions - -Once a debug session starts, the Debug toolbar will - appear on the top of the editor. - -### Run mode - -In addition to debugging a program, AVAP TM Dev Studio supports{' '} - running the program. The{' '} - Debug: Run (Start Without Debugging) action is - triggered with Ctrl+F5 and uses the currently selected launch - configuration. Many of the launch configuration attributes are supported - in 'Run' mode. AVAP TM Dev Studio maintains a debug - session while the program is running, and pressing the{' '} - Stop button terminates the program. - -## Breakpoints - -Breakpoints can be toggled by clicking on the{' '} - editor margin or using F9 on the current line. Finer - breakpoint control (enable/disable/reapply) can be done in the{' '} - Run and Debug view's BREAKPOINTS {' '} - section. - -* Breakpoints in the editor margin are normally shown as red filled circles. -* Disabled breakpoints have a filled gray circle. -* When a debugging session starts, breakpoints that cannot be registered with the debugger change to a gray hollow circle. The same might happen if the source is edited while a debug session without live-edit support is running. - -If the debugger supports breaking on different kinds of errors or - exceptions, those will also be available in the{' '} - BREAKPOINTS view. - -The Reapply All Breakpoints command sets all breakpoints - again to their original location. This is helpful if your debug - environment is "lazy" and "misplaces" breakpoints in - source code that has not yet been executed. - -Optionally, breakpoints can be shown in the editor's overview ruler by - enabling the setting `debug.showBreakpointsInOverviewRuler` : - -## Logpoints - -A Logpoint is a variant of a breakpoint that does not "break" - into the debugger but instead logs a message to the console. Logpoints are - especially useful for injecting logging while debugging production servers - that cannot be paused or stopped. - -A Logpoint is represented by a "diamond" shaped icon. Log - messages are plain text but can include expressions to be evaluated within - curly braces ('{}'). - -Just like regular breakpoints, Logpoints can be enabled or disabled and - can also be controlled by a condition and/or hit count. - -### Triggered breakpoints - -A trigged breakpoint is a breakpoint that is automatically enabled once - another breakpoint is hit. They can be very useful when diagnosing failure - cases in code that happen only after a certain precondition. - -Triggered breakpoints can be set by right-clicking on the glyph margin, - selecting Add Triggered Breakpoint , and then choosing - which other breakpoint enables the breakpoint. - -Triggered breakpoints work for all languages, and conditional breakpoints - may also be used as the trigger. - -## Data inspection - -Variables can be inspected in the VARIABLES section of - the Run and Debug view or by hovering over their source - in the editor. Variable values and expression evaluation are relative to - the selected stack frame in the CALL STACK section. - -Variable values can be modified with the Set Value action - from the variable's context menu. Additionally, you can use the{' '} - Copy Value action to copy the variable's value, or{' '} - Copy as Expression action to copy an expression to access - the variable. - -Variables and expressions can also be evaluated and watched in the{' '} - Run and Debug view's WATCH section. - -Variable names and values can be filtered by typing while the focus is on - the VARIABLES section. - -## Launch.json attributes - -There are many `launch.json` attributes to help support - different debuggers and debugging scenarios. As mentioned above, you can - use IntelliSense (Ctrl+Space) to see the list of available - attributes once you have specified a value for the `type` {' '} - attribute. - -The following attributes are mandatory for every launch configuration: - -* `type` - the type of debugger to use for this launch configuration. Every installed debug extension introduces a type: node for the built-in Node debugger, for example, or php and go for the PHP and Go extensions. -* `request` - the request type of this launch configuration. Currently, launch and attach are supported. -* `name` - the reader-friendly name to appear in the Debug launch configuration dropdown. - -Here are some optional attributes available to all launch configurations: - -* `presentation` - using the order, group, and hidden attributes in the presentation object, you can sort, group, and hide configurations and compounds in the Debug configuration dropdown and in the Debug quick pick. -* `preLaunchTask` - to launch a task before the start of a debug session, set this attribute to the label of a task specified in tasks.json (in the workspace's .vscode folder). Or, this can be set to ${defaultBuildTask} to use your default build task. -* `postDebugTask` - to launch a task at the very end of a debug session, set this attribute to the name of a task specified in tasks.json (in the workspace's .vscode folder). -* `internalConsoleOptions` - this attribute controls the visibility of the Debug Console panel during a debugging session. -* `debugServer` -{' '} for debug extension authors only : this attribute allows you to connect to a specified port instead of launching the debug adapter. -* `serverReadyAction` - if you want to open a URL in a web browser whenever the program under debugging outputs a specific message to the debug console or integrated terminal. For details see section Automatically open a URI when debugging a server program below. - -Many debuggers support some of the following attributes: - -* `program` - executable or file to run when launching the debugger -* `args` - arguments passed to the program to debug -* `env` - environment variables (the value null can be used to "undefine" a variable) -* `envFile` - path to dotenv file with environment variables -* `cwd` - current working directory for finding dependencies and other files -* `port` - port when attaching to a running process -* `stopOnEntry` - break immediately when the program launches -* `console` - what kind of console to use, for example,{' '} `internalConsole` , `integratedTerminal` , or{' '} `externalTerminal` - -## Variable substitution - -AVAP TM Dev Studio makes commonly used paths and other values - available as variables and supports variable substitution inside strings - in `launch.json` . This means that you do not have to use - absolute paths in debug configurations. For example,{' '} - `${workspaceFolder}` gives the root path of a - workspace folder, `${file}` the file open in the - active editor, and ${env:Name} the environment variable - 'Name'. You can see a full list of predefined variables in the - Variables Reference or by invoking IntelliSense inside the{' '} - `launch.json` string attributes. - -```javascript -{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Launch Program", - ` `"program": "${workspaceFolder}/app.js", - ` `"cwd": "${workspaceFolder}", - ` `"args": ["${env:USERNAME}"] - - } -``` - -## Platform-specific properties - -`Launch.json` supports defining values (for example, - arguments to be passed to the program) that depend on the operating - system where the debugger is running. To do so, put a platform-specific - literal into the `launch.json` file and specify the - corresponding properties inside that literal. - -Below is an example that passes " `args` " to the - program differently on Windows: - -```javascript -{ - ` `"version": "0.2.0", - ` `"configurations": [` `{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Launch Program", - ` `"program": - "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", - ` `"args": ["myFolder/path/app.js"], - ` `"windows": { - ` `"args": ["myFolder\\path\\app.js"] - ` `} - ` `} - ` `] - - } -``` - -Valid operating properties are " `windows` " for - Windows, " `linux` " for Linux, and " - `osx` " for macOS. Properties defined in an operating - system specific scope override properties defined in the global scope. - -Please note that the `type` property cannot be placed inside a - platform-specific section, because `type` indirectly determines - the platform in remote debugging scenarios, and that would result in a - cyclic dependency. - -In the example below, debugging the program always{' '} - stops on entry except on macOS: - -```javascript -{ - ` `"version": "0.2.0", - ` `"configurations": [` `{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Launch Program", - ` `"program": - "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", - ` `"stopOnEntry": true, - ` `"osx": { - ` `"stopOnEntry": false - ` `} - ` `} - ` `] - - } -``` - -## Global launch configuration - -AVAP TM Dev Studio supports adding a "launch" object - inside your User settings. This "launch" configuration will then - be shared across your workspaces. For example: - -```javascript -"launch": { - ` `"version": "0.2.0", - ` `"configurations": [{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Launch Program", - ` `"program": "${file}" - ` `}] - - } -``` - -## Advanced breakpoint topics - -### Conditional breakpoints - -A powerful AVAP TM Dev Studio debugging feature is the ability - to set conditions based on expressions, hit counts, or a combination of - both. - -* Expression condition : The breakpoint will be hit whenever the expression evaluates to `true` . -* Hit count : The 'hit count' controls how many times a breakpoint needs to be hit before it will 'break' execution. Whether a 'hit count' is respected and the exact syntax of the expression vary among debugger extensions. - -You can add a condition and/or hit count when creating a source breakpoint - (with the Add Conditional Breakpoint action) or - when modifying an existing one (with the{' '} - Edit Condition action). In both cases, an inline text - box with a dropdown menu opens where you can enter expressions: - -Condition and hit count editing support is also supported for{' '} - function and exception breakpoints. You - can initiate condition editing from the context menu or the new inline{' '} - Edit Condition action. - -An example of condition editing in the BREAKPOINTS view: - -If a debugger does not support conditional breakpoints, the{' '} - Add Conditional Breakpoint and{' '} - Edit Condition actions will be missing. - -### Inline breakpoints - -Inline breakpoints will only be hit when the execution reaches the column - associated with the inline breakpoint. This is particularly useful when - debugging minified code which contains multiple statements in a single - line. - -An inline breakpoint can be set using Shift+F9 or through the context menu - during a debug session. Inline breakpoints are shown inline in the editor. - -Inline breakpoints can also have conditions. Editing multiple breakpoints - on a line is possible through the context menu in the editor's left - margin. - -### Function breakpoints - -Instead of placing breakpoints directly in source code, a debugger can - support creating breakpoints by specifying a function name. This is useful - in situations where source is not available but a function name is known. - -A function breakpoint is created by pressing the + button - in the BREAKPOINTS section header and entering the - function name. Function breakpoints are shown with a red triangle in the{' '} - BREAKPOINTS section. - -### Data breakpoints - -If a debugger supports data breakpoints, they can be set from the context - menu in the VARIABLES view. The{' '} - Break on Value Change/Read/Access commands will add a - data breakpoint that is hit when the value of the underlying variable - changes/is read/is accessed. Data breakpoints are shown with a red hexagon - in the BREAKPOINTS section. - -## Debug Console REPL - -Expressions can be evaluated with the Debug Console REPL - (Read-Eval-Print Loop) feature. To open the Debug Console, use the{' '} - Debug Console action at the top of the Debug pane or use - the View: Debug Console command (Ctrl+Shift+Y). - Expressions are evaluated after you press Enter and the Debug Console REPL - shows suggestions as you type. If you need to enter multiple lines, use - Shift+Enter between the lines and then send all lines for evaluation with - Enter. Debug Console input uses the mode of the active editor, which means - that the Debug Console input supports syntax coloring, indentation, auto - closing of quotes, and other language features. - -## Redirect input/output to/from the debug target - -Redirecting input/output is debugger/runtime specific, so AVAP - TM Dev Studio does not have a built-in solution that works for - all debuggers. - -Here are two approaches you might want to consider: - -Here's an example `launch.json` configuration: - -```javascript -{ - ` `"name": "launch program that reads a file from stdin", - ` `"type": "node", - ` `"request": "launch", - ` `"program": "program.js", - ` `"console": "integratedTerminal", - ` `"args": ["<", "in.txt"] - - } -``` - -This approach requires that the "<" syntax is passed through - the debugger extension and ends up unmodified in the Integrated Terminal. - -## Multi-target debugging - -For complex scenarios involving more than one process (for example, a - client and a server), AVAP TM Dev Studio supports - multi-target debugging. - -Using multi-target debugging is simple: after you've started a first - debug session, you can just launch another session. As soon as a second - session is up and running, the AVAP TM Dev Studio UI switches to{' '} - multi-target mode : - -* The individual sessions now show up as top-level elements in the{' '} CALL STACK view. -* The debug toolbar shows the currently active session {' '} (and all other sessions are available in a dropdown menu). -* Debug actions (for example, all actions in the debug toolbar) are performed on the active session. The active session can be changed either by using the dropdown menu in the debug toolbar or by selecting a different element in the CALL STACK view. - -### Compound launch configurations - -An alternative way to start multiple debug sessions is by using a{' '} - compound launch configuration. A compound launch - configuration lists the names of two or more launch configurations that - should be launched in parallel. Optionally a preLaunchTask can be - specified that is run before the individual debug sessions are started. - The boolean flag stopAll controls whether manually terminating one session - will stop all of the compound sessions. - -```javascript -{ - ` `"version": "0.2.0", - ` `"configurations": [` `{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Server", - ` `"program": "${workspaceFolder}/server.js" - ` `}, - ` `{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Client", - ` `"program": "${workspaceFolder}/client.js" - ` `} - ` `], - ` `"compounds": [` `{ - ` `"name": "Server/Client", - ` `"configurations": ["Server", "Client"], - ` `"preLaunchTask": "${defaultBuildTask}", - ` `"stopAll": true - ` `} - ` `] - - } -``` - -Compound launch configurations are displayed in the launch configuration - dropdown menu. - -## Remote debugging - -AVAP TM Dev Studio does not itself support remote debugging: - this is a feature of the debug extension you are using, and you should - consult the extension's page in the Marketplace for support and - details. - -There is, however, one exception: the Node.js debugger included in AVAP - TM Dev Studio supports remote debugging. See the Node.js - Debugging topic to learn how to configure this. - -## Automatically open a URI when debugging a server program - -Developing a web program typically requires opening a specific URL in a - web browser in order to hit the server code in the debugger. AVAP - TM Dev Studio has a built-in feature " - serverReadyAction " to automate this task. - -Here is an example of a simple Node.js Express application: - -```javascript -var express = require('express'); - - var app = express(); - - - app.get('/', function(req, res) { - ` `res.send('Hello World!'); - - }); - - - app.listen(3000, function() { - ` `console.log('Example app listening on port 3000!'); - - }); -``` - -This application first installs a "Hello World" handler for the - "/" URL and then starts to listen for HTTP connections on port - 3000. The port is announced in the Debug Console, and typically, the - developer would now type (LINK) into their browser application. - -The serverReadyAction feature makes it possible to add a - structured property `serverReadyAction` to any launch config - and select an "action" to be performed: - -```javascript -{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Launch Program", - ` `"program": "${workspaceFolder}/app.js", - - ` `"serverReadyAction": { - ` `"pattern": "listening on port ([0-9]+)", - ` `"uriFormat": "(LINK)", - ` `"action": "openExternally" - ` `} - - } -``` - -Here the `pattern` property describes the regular expression - for matching the program's output string that announces the port. The - pattern for the port number is put into parenthesis so that it is - available as a regular expression capture group. In this example, we are - extracting only the port number, but it is also possible to extract a full - URI. - -The `uriFormat` property describes how the port number is - turned into a URI. The first %s is substituted by the first capture group - of the matching pattern. - -The resulting URI is then opened outside of AVAP TM Dev Studio - ("externally") with the standard application configured - for the URI's scheme. - -### Trigger Debugging via Edge or Chrome - -Alternatively, the action can be set to debugWithEdge or debugWithChrome. - In this mode, a webRoot property can be added that is passed to the Chrome - or Edge debug session. - -To simplify things a bit, most properties are optional and we use the - following fallback values: - -* pattern :{' '} `"listening on.\* (https?://\\S+|[0-9]+)"` {' '} which matches the commonly used messages "listening on port 3000" or "Now listening on: (LINK)". -* uriFormat : "(LINK)" -* webRoot :{' '} `"${workspaceFolder}"` - -### Triggering an Arbitrary Launch Config - -In some cases, you may need to configure additional options for the - browser debug session--or use a different debugger entirely. You can do - this by setting `action` to `startDebugging` with a{' '} - `name` property set to the name of the launch configuration to - start when the `pattern` is matched. - -The named launch configuration must be in the same file or folder as the - one with the `serverReadyAction` . - -Here the serverReadyAction feature in action: - -## Next steps - -To learn about AVAP TM Dev Studio's Node.js debugging - support, take a look at: - -* Node.js - Describes the Node.js debugger, which is included in AVAP TM Dev Studio. -* TypeScript - The Node.js debugger also supports TypeScript debugging. - -To see tutorials on the basics of Node.js debugging, check out these - videos: - -* Intro Video - Debugging - Showcases the basics of debugging. -* Getting started with Node.js debugging - Shows how to attach a debugger to a running Node.js process. - -To learn about debugging support for other programming languages via AVAP - TM Dev Studio extensions: - -* C++ -* Python -* Java - -To learn about AVAP TM Dev Studio's task running support, go - to: - -* Tasks - Describes how to run tasks with Gulp, Grunt, and Jake and how to show errors and warnings. - -To write your own debugger extension, visit: - -* Debugger Extension - Uses a mock sample to illustrate the steps required to create a AVAP TM Dev Studio debug extension. - -## Common questions - -### What are the supported debugging scenarios? - -Debugging of Node.js-based applications is supported on Linux, macOS, and - Windows out of the box with AVAP TM Dev Studio. Many other - scenarios are supported by AVAP TM Dev Studio extensions - available in the Marketplace. - -### I do not see any launch configurations in the Run and Debug view dropdown. - What is wrong? - -The most common problem is that you did not set up launch.json or there is - a syntax error in that file. Alternatively, you might need to open a - folder, since no-folder debugging does not support launch configurations. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md deleted file mode 100644 index f18d156..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md +++ /dev/null @@ -1,376 +0,0 @@ -Support for Emmet snippets and expansion is built right into AVAP - TM Dev Studio, no extension required . Emmet - 2.0 has support for the majority of the Emmet Actions including expanding - Emmet abbreviations and snippets. - -## How to expand Emmet abbreviations and snippets - -Emmet abbreviation and snippet expansions are enabled by default in{' '} - `html` , `haml` , `pug` , `slim` ,{' '} - `jsx` , `xml` , `xsl` , `css` ,{' '} - `scss` , `sass` , `less` and{' '} - `stylus` files, as well as any language that inherits from any - of the above like `handlebars` and `php` . - -When you start typing an Emmet abbreviation, you will see the abbreviation - displayed in the suggestion list. If you have the suggestion documentation - fly-out open, you will see a preview of the expansion as you type. If you - are in a stylesheet file, the expanded abbreviation shows up in the - suggestion list sorted among the other CSS suggestions. - -### Using Tab for Emmet expansions - -If you want to use the Tab key for expanding the Emmet abbreviations, add - the following setting: - -```javascript -"emmet.triggerExpansionOnTab": true -``` - -This setting allows using the Tab key for indentation when text is not an - Emmet abbreviation. - -### Emmet when quickSuggestions are disabled - -If you have disabled the `editor.quickSuggestions setting` , you - won't see suggestions as you type. You can still trigger suggestions - manually by pressing `Ctrl+Space` and see the preview. - -### Disable Emmet in suggestions - -If you don't want to see Emmet abbreviations in suggestions at all, - then use the following setting: - -```javascript -"emmet.showExpandedAbbreviation": "never" -``` - -You can still use the command Emmet: Expand Abbreviation {' '} - to expand your abbreviations. You can also bind any keyboard shortcut to - the command id `editor.emmet.action.expandAbbreviation` as - well. - -### Emmet suggestion ordering - -To ensure Emmet suggestions are always on top in the suggestion list, add - the following settings: - -```javascript -"emmet.showSuggestionsAsSnippets": true, - - "editor.snippetSuggestions": "top" -``` - -## Emmet abbreviations in other file types - -To enable the Emmet abbreviation expansion in file types where it is not - available by default, use the `emmet.includeLanguages setting` . - Make sure to use language identifiers for both sides of the mapping, with - the right side being the language identifier of an Emmet supported - language (see the list above). - -For example: - -```javascript -"emmet.includeLanguages": { - ` `"javascript": "javascriptreact", - ` `"razor": "html", - ` `"plaintext": "pug" - - } -``` - -Emmet has no knowledge of these new languages, and so there might be Emmet - suggestions showing up in non HTML/CSS contexts. To avoid this, you can - use the following setting. - -```javascript -"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFilesOnly" -``` - -## Emmet with multi-cursors - -You can use most of the Emmet actions with multi-cursors as well: - -## Using filters - -Filters are special post-processors that modify the expanded abbreviation - before it is output to the editor. There are 2 ways to use filters; either - globally through the `emmet.syntaxProfiles` setting or directly - in the current abbreviation. - -Below is an example of the first approach using the{' '} - `emmet.syntaxProfiles` setting to apply the `bem` {' '} - filter for all the abbreviations in HTML files: - -```javascript -"emmet.syntaxProfiles": { - ` `"html": { - ` `"filters": "bem" - ` `} - - } -``` - -To provide a filter for just the current abbreviation, append the filter - to your abbreviation. For example, div#page|c will apply the comment - filter to the div#page abbreviation. - -### BEM filter (bem) - -If you use the Block Element Modifier (BEM) way of writing HTML, - then `bem` filters are very handy for you to use. To learn more - about how to use `bem` filters, read BEM filter in Emmet. - -You can customize this filter by using the{' '} - `bem.elementSeparator` and `bem.modifierSeparator` {' '} - preferences as documented in Emmet Preferences. - -### Comment filter (c) - -This filter adds comments around important tags. By default, - "important tags" are those tags with id and/or class attribute. - -For example `div>div#page>p.title+p|c` will be expanded - to: - -```javascript -
- ` `
- ` `

- ` ` - ` `

- ` `
- ` ` - -
-``` - -You can customize this filter by using the{' '} - `filter.commentTrigger` , `filter.commentAfter` and{' '} - `filter.commentBefore` preferences as documented in Emmet - Preferences. - -The format for the `filter.commentAfter` preference is - different in AVAP TM Dev Studio Emmet 2.0. - -For example, instead of: - -```javascript -"emmet.preferences": { - ` `"filter.commentAfter": "\n" - - } -``` - -in AVAP TM Dev Studio, you would use a simpler: - -```javascript -"emmet.preferences": { - ` `"filter.commentAfter": "\n" - - } -``` - -### Trim filter (t) - -This filter is applicable only when providing abbreviations for the{' '} - Emmet: Wrap with Abbreviation command. It removes line - markers from wrapped lines. - -## Using custom Emmet snippets - -Custom Emmet snippets need to be defined in a json file named{' '} - `snippets.json` . The `emmet.extensionsPath` setting - should have the path to the directory containing this file. - -Below is an example for the contents of this `snippets.json` {' '} - file. - -```javascript -{ - ` `"html": { - ` `"snippets": { - ` `"ull": "ul>li[id=${1} class=${2}]\*2{ - Will work with html, pug, haml and slim }", - ` `"oll": "
  1. - Will only work in html
", - ` `"ran": "{ Wrap plain text in curly braces }" - ` `} - ` `}, - ` `"css": { - ` `"snippets": { - ` `"cb": "color: black", - ` `"bsd": "border: 1px solid ${1:red}", - ` `"ls": "list-style: ${1}" - ` `} - ` `} - - } -``` - -Authoring of Custom Snippets in Emmet 2.0 via the{' '} - `snippets.json` file differs from the old way of doing the same - in a few ways: - -### HTML Emmet snippets - -HTML custom snippets are applicable to all other markup flavors like{' '} - `haml` or `pug` . When snippet value is an - abbreviation and not actual HTML, the appropriate transformations can be - applied to get the right output as per the language type. - -For example, for an unordered list with a list item, if your snippet value - is ul>li, you can use the same snippet in `html` ,{' '} - `haml` , `pug` or `slim` , but if your - snippet value is `
` , - then it will work only in `html` files. - -If you want a snippet for plain text, then surround the text with - {}. - -### CSS Emmet snippets - -Values for CSS Emmet snippets should be a complete property name and value - pair. - -CSS custom snippets are applicable to all other stylesheet flavors like{' '} - `scss` , `less` or `sass` . Therefore, - don't include a trailing ; at the end of the snippet value. Emmet will - add it as needed based on whether the language requires it. - -Do not use : in the snippet name. : is used to separate property name and - value when Emmet tries to fuzzy match the abbreviation to one of the - snippets. - -### Tab stops and cursors in custom snippets - -The syntax for tab stops in custom Emmet snippets follows the Textmate - snippets syntax. - -* Use `${1}` , `${2}` for tab stops and `${1:placeholder}` for tab stops with placeholders. -* Previously, | or ${cursor} was used to denote the cursor location in the custom Emmet snippet. This is no longer supported. Use{' '} `${1}` instead. - -## Emmet configuration - -Below are Emmet settings that you can use to customize your Emmet - experience in AVAP TM Dev Studio. - -* `emmet.includeLanguages` Use this setting to add mapping between the language of your choice and one of the Emmet supported languages to enable Emmet in the former using the syntax of the latter. Make sure to use language IDs for both sides of the mapping. For example: ` "emmet.includeLanguages": { ` `"javascript": "javascriptreact", ` `"plaintext": "pug" } ` -* `emmet.excludeLanguages` If there is a language where you do not want to see Emmet expansions, add it in this setting which takes an array of language ID strings. -* `emmet.syntaxProfiles` See Emmet Customization of output profile to learn how you can customize the output of your HTML abbreviations. For example: ` "emmet.syntaxProfiles": { ` `"html": { ` `"attr\_quotes": "single" ` `}, ` `"jsx": { ` `"self\_closing\_tag": true ` `} } ` -* `emmet.variables` Customize variables used by Emmet snippets. For example: "emmet.variables": { ` ` `"lang": "de", ` `"charset": "UTF-16" } ` -* `emmet.showExpandedAbbreviation` Controls the Emmet suggestions that show up in the suggestion/completion list. - -* `emmet.showAbbreviationSuggestions` Shows possible emmet abbreviations as suggestions. It is{' '} `true` by default. For example, when you type `li` , you get suggestions for all emmet snippets starting with `li` like{' '} `link` , `link:css` , `link:favicon` {' '} etc. This is helpful in learning Emmet snippets that you never knew existed unless you knew the Emmet cheatsheet by heart. Not applicable in stylesheets or when{' '} `emmet.showExpandedAbbreviation` is set to never. -* `emmet.extensionsPath` Provide the location of the directory that houses the{' '} `snippets.json` file which in turn has your custom snippets. -* `emmet.triggerExpansionOnTab` Set this to true to enable expanding Emmet abbreviations with Tab key. We use this setting to provide the appropriate fallback to provide indentation when there is no abbreviation to expand. -* `emmet.showSuggestionsAsSnippets` If set to true, then Emmet suggestions will be grouped along with other snippets allowing you to order them as per{' '} `editor.snippetSuggestions` setting. Set this to true and{' '} `editor.snippetSuggestions` to `top` , to ensure that Emmet suggestions always show up on top among other suggestions. -* `emmet.preferences` You can use this setting to customize Emmet as documented in Emmet Preferences. The below customizations are currently supported: `css.propertyEnd` `css.valueSeparator` `sass.propertyEnd` `sass.valueSeparator` `stylus.propertyEnd` `stylus.valueSeparator` `css.unitAliases` `css.intUnit` `css.floatUnit` `bem.elementSeparator` `bem.modifierSeparator` `filter.commentBefore` `filter.commentTrigger` `filter.commentAfter` `format.noIndentTags` `format.forceIndentationForTags` `profile.allowCompactBoolean` `css.fuzzySearchMinScore` -* `css.propertyEnd` -* `css.valueSeparator` -* `sass.propertyEnd` -* `sass.valueSeparator` -* `stylus.propertyEnd` -* `stylus.valueSeparator` -* `css.unitAliases` -* `css.intUnit` -* `css.floatUnit` -* `bem.elementSeparator` -* `bem.modifierSeparator` -* `filter.commentBefore` -* `filter.commentTrigger` -* `filter.commentAfter` -* `format.noIndentTags` -* `format.forceIndentationForTags` -* `profile.allowCompactBoolean` -* `css.fuzzySearchMinScore` - -The format for the `filter.commentAfter` preference is - different and simpler in Emmet 2.0. - -For example, instead of the older format - -```javascript -"emmet.preferences": { - ` `"filter.commentAfter": "\n" - - } -``` - -you would use - -```javascript -"emmet.preferences": { - ` `"filter.commentAfter": "\n" - - } -``` - -If you want support for any of the other preferences as documented in - Emmet Preferences, please log a feature request. - -## Next steps - -Emmet is just one of the great web developer features in AVAP TM {' '} - Dev Studio. Read on to find out about: - -* HTML - AVAP TM Dev Studio supports HTML with IntelliSense, closing tags, and formatting. -* CSS - We offer rich support for CSS, SCSS and Less. - -## Troubleshooting - -### Custom tags do not get expanded in the suggestion list - -Custom tags when used in an expression like `MyTag>YourTag` {' '} - or `MyTag.someclass` do show up in the suggestion list. But - when these are used on their own like `MyTag` , they do not - appear in the suggestion list. This is designed so to avoid noise in the - suggestion list as every word is a potential custom tag. - -Add the following setting to enable expanding of Emmet abbreviations using - tab which will expand custom tags in all cases. - -```javascript -"emmet.triggerExpansionOnTab": true -``` - -### My HTML snippets ending with + do not work - -HTML snippets ending with `+` like `select+` and{' '} - `ul+` from the Emmet cheatsheet are not supported. This is a - known issue in Emmet 2.0 Issue: emmetio/html-matcher#1. A workaround is to - create your own custom Emmet snippets for such scenarios. - -### Abbreviations are failing to expand - -First, check if you're using custom snippets (if there is a{' '} - `snippets.json` file being picked up by the{' '} - `emmet.extensionsPath` setting). The format of custom - snippets changed in AVAP TM Dev Studio release 1.53. Instead of - using | to indicate where the cursor position is, use tokens such as{' '} - `${1}` , `${2}` , etc. instead. - The default CSS snippets file from the `emmetio/emmet` {' '} - repository shows examples of the new cursor position format. - -If abbreviations are still failing to expand: - -* Check the builtin extensions to see if Emmet has been disabled. -* Try restarting the extension host by running the{' '} Developer: Restart Extension Host ( `workbench.action.restartExtensionHost` ) command in the Command Palette. - -### Where can I set all the preferences as documented in Emmet preferences? - -You can set the preferences using the setting{' '} - `emmet.preferences` . Only a subset of the preferences that are - documented in Emmet preferences can be customized. Please read the - preferences section under Emmet configuration. - -### Any tips and tricks? - -Of course! - -* In CSS abbreviations, when you use :, the left part is used to fuzzy match with the CSS property name and the right part is used to match with CSS property value. Take full advantage of this by using abbreviations like `pos:f` , `trf:rx` ,{' '} `fw:b` , etc. -* Explore all other Emmet features as documented in Emmet Actions. -* Don't hesitate to create your own custom Emmet snippets.rkdown Viewer and Editor diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md deleted file mode 100644 index 1e144ea..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md +++ /dev/null @@ -1,532 +0,0 @@ -Increase the power of AVAP TM Dev Studio through Extensions - -The features that AVAP TM Dev Studio includes out-of-the-box are - just the start. AVAP TM Dev Studio extensions let you add - languages, debuggers, and tools to your installation to support your - development workflow. AVAP TM Dev Studio's rich - extensibility model lets extension authors plug directly into the AVAP - TM Dev Studio UI and contribute functionality through the same - APIs used by AVAP TM Dev Studio. This article explains how to - find, install, and manage AVAP TM Dev Studio extensions from the - AVAP TM Dev Studio Marketplace. - -## Browse for extensions - -You can browse and install extensions from within AVAP TM Dev - Studio. Bring up the Extensions view by clicking on the Extensions icon in - the Activity Bar on the side of AVAP TM Dev - Studio or the View: Extensions command - (Ctrl+Shift+X). - -This will show you a list of the most popular AVAP TM Dev Studio - extensions on the AVAP TM Dev Studio Marketplace. - -Each extension in the list includes a brief description, the publisher, - the download count, and a five star rating. You can select the extension - item to display the extension's details page where you can learn more. - -Note: If your computer's Internet access goes through - a proxy server, you will need to configure the proxy server. See Proxy - server support for details. - -## Install an extension - -To install an extension, select the Install button. Once - the installation is complete, the Install button will - change to the Manage gear button. - -### Find and install an extension - -For example, let's install the popular TODO Highlight extension. This - extension highlights text like 'TODO:' and 'FIXME:' in - your source code so you can quickly find undone sections. - -In the Extensions view ( `Ctrl+Shift+X` ), type - 'todo' in the search box to filter the Marketplace offerings to - extensions with 'todo' in the title or metadata. You should see - the TODO Highlight extension in the list. - -An extension is uniquely identified by its publisher and extension IDs. If - you select the TODO Highlight extension, you will see the - Extension details page, where you can find the extension ID, in this case, - wayou.vscode-todo-highlight. Knowing the extension ID can be helpful if - there are several similarly named extensions. - -Select the Install button, and AVAP TM Dev - Studio will download and install the extension from the Marketplace. When - the installation is complete, the Install button will be - replaced with a Manage gear button. - -To see the TODO Highlight extension in action, open any source code file - and add the text 'TODO:' and you will see the text highlighted. - -The TODO Highlight extension contributes the commands,{' '} - TODO-Highlight: List highlighted annotations and{' '} - TODO-Highlight: Toggle highlight , that you can find in - the Command Palette (Ctrl+Shift+P). The{' '} - TODO-Highlight: Toggle highlight command lets you quickly - disable or enable highlighting. - -The extension also provides settings for tuning its behavior, which you - can find in the Settings editor (Ctrl+,). For example, you might - want the text search to be case insensitive and you can uncheck the{' '} - Todohighlight: Is Case Sensitive setting. - -If an extension doesn't provide the functionality you want, you can - always Uninstall the extension from the{' '} - Manage button context menu. - -This has been just one example of how to install and use an extension. The - AVAP TM Dev Studio Marketplace has thousands of extensions - supporting hundreds of programming languages and tasks. Everything from - full featured language support for [Java], [Python], [Go], and [C++] to - simple extensions that [create GUIDs], change the [color theme], or add - [virtual pets] to the editor. - -### Extension details - -On the extension details page, you can read the extension's README and - review the extension's: - -* Feature Contributions - The extension's additions to AVAP TM Dev Studio such as settings, commands and keyboard shortcuts, language grammars, debugger, etc. -* Changelog - The extension repository CHANGELOG if available. -* Dependencies - Lists if the extension depends on any other extensions. - -If an extension is an Extension Pack, the Extension Pack {' '} - section will display which extensions will be installed when you install - the pack.{' '} - - Extension Packs - {' '} - bundle separate extensions together so they can be easily installed at one - time. - -### Extensions view filter and commands - -You can filter the Extensions view with the{' '} - Filter Extensions context menu. - -There are filters to show: - -* The list of outdated extensions that can be updated -* The list of currently enabled/disabled extensions -* The list of recommended extensions based on your workspace -* The list of globally popular extensions - -You can sort the extension list by Install Count ,{' '} - Rating , Name ,{' '} - Published Date , or Updated Date in - either ascending or descending order. You can learn more about extension - search filters below . - -You can run additional Extensions view commands via the ...{' '} - View and More Actions button. - -Through this context menu you can control extension updates, enable or - disable all extensions, and use the{' '} - - Extension Bisect - {' '} - utility to isolate problematic extension behavior. - -### Search for an extension - -You can clear the Search box at the top of the Extensions view and type in - the name of the extension, tool, or programming language you're - looking for. - -For example, typing 'python' will bring up a list of Python - language extensions: - -If you know the exact identifier for an extension you're looking for, - you can use the @id: prefix, for example @id:vue.volar. Additionally, to - filter or sort results, you can use the{' '} - filter and{' '} - sort commands, detailed below. - -## Manage extensions - -AVAP TM Dev Studio makes it easy to manage your extensions. You - can install, disable, update, and uninstall extensions through the - Extensions view, the Command Palette (commands have - the Extensions: prefix) or command-line switches. - -### List installed extensions - -By default, the Extensions view will show the extensions you currently - have installed, and all extensions that are recommended for you. You can - use the Extensions: Focus on Installed View command, - available in the Command Palette (Ctrl+Shift+P) - or in the More Actions (...) dropdown menu >{' '} - Views > Installed , to clear any text - in the search box and show the list of all installed extensions, which - includes those that have been disabled. - -### Uninstall an extension - -To uninstall an extension, select the Manage gear button - at the right of an extension entry and then choose{' '} - Uninstall from the dropdown menu. This will uninstall the - extension and prompt you to reload AVAP TM Dev Studio. - -### Disable an extension - -If you don't want to permanently remove an extension, you can instead - temporarily disable the extension by clicking the gear button at the right - of an extension entry. You can disable an extension globally or just for - your current Workspace. You will be prompted to reload AVAP TM {' '} - Dev Studio after you disable an extension. - -If you want to quickly disable all installed extensions, there is a{' '} - Disable All Installed Extensions command in the{' '} - Command Palette and More Actions {' '} - (...) dropdown menu. - -Extensions remain disabled for all AVAP TM Dev Studio sessions - until you re-enable them. - -### Enable an extension - -Similarly if you have disabled an extension (it will be in the{' '} - Disabled section of the list and marked{' '} - - Disabled - - ), you can re-enable it with the Enable or{' '} - Enable (Workspace) commands in the dropdown menu. - -There is also an Enable All Extensions command in the{' '} - More Actions (...) dropdown menu. - -### Extension auto-update - -AVAP TM Dev Studio checks for extension updates and installs - them automatically. After an update, you will be prompted to reload AVAP - TM Dev Studio. If you'd rather update your extensions - manually, you can disable auto-update with the{' '} - Disable Auto Updating Extensions command that sets the - extensions.autoUpdate setting to - false. - -If you don't want AVAP TM Dev Studio to even check for - updates, you can set the extensions.autoCheckUpdates setting to false. - -### Update an extension manually - -If you have extensions auto-update disabled, you can quickly look for - extension updates by using the Show Outdated Extensions {' '} - command that uses the @updates filter. This will display any available - updates for your currently installed extensions. - -Select the Update button for the outdated extension. The - update will be installed, and you'll be prompted to reload AVAP - TM Dev Studio. You can also update all your outdated extensions - at one time with the Update All Extensions command. - -If you also have automatic checking for updates disabled, you can use the{' '} - Check for Extension Updates command to check which of - your extensions can be updated. - -## Recommended extensions - -You can see a list of recommended extensions using{' '} - Show Recommended Extensions , which sets the @recommended{' '} - filter . Extension recommendations - can either be: - -* Workspace Recommendations - Recommended by other users of your current workspace. -* Other Recommendations - Recommended based on recently opened files. - -See the section below to learn how to{' '} - contribute {' '} - recommendations for other users in your project. - -### Ignoring recommendations - -To dismiss a recommendation, select on the extension item to open the - Details page and then select the Manage gear button to - display the context menu. Select the{' '} - Ignore Recommendation menu item. Ignored recommendations - will no longer be recommended to you. - -## Configuring extensions - -AVAP TM Dev Studio extensions may have very different - configurations and requirements. Some extensions contribute settings to - AVAP TM Dev Studio, which can be modified in the Settings - editor. Other extensions may have their own configuration files. - Extensions may also require installation and setup of additional - components like compilers, debuggers, and command-line tools. Consult the - extension's README (visible in the Extensions view details - page) or go to the extension page on the AVAP TM Dev Studio - Marketplace (click on the extension name in the details page). - Many extensions are open source and have a link to their repository on - their Marketplace page. - -## Command line extension management - -To make it easier to automate and configure AVAP TM Dev Studio, - it is possible to list, install, and uninstall extensions from the command - line. When identifying an extension, provide the full name of the form - publisher.extension, for example ms-python.python. - -Example: - -```javascript -code --extensions-dir - - Set the root path for extensions. - - - code --list-extensions - - List the installed extensions. - - - code --show-versions - - Show versions of installed extensions, when using - --list-extension. - - - code --install-extension ( | - ) - - Installs an extension. - - - code --uninstall-extension ( | - ) - - Uninstalls an extension. - - - code --enable-proposed-api () - - Enables proposed API features for extensions. Can receive one or - more extension IDs to enable individually. -``` - -You can see the extension ID on the extension details page under the - Marketplace Info. - -## Extensions view filters - -The Extensions view search box supports filters to help you find and - manage extensions. You may have seen filters such as @installed and - @recommended if you used the commands{' '} - Show Installed Extensions and{' '} - Show Recommended Extensions . Also, there are filters - available to let you sort by popularity or ratings and search by category - (for example 'Linters') and tags (for example - 'node'). You can see a complete listing of all filters and - sort commands by typing @ in the extensions search box and navigating - through the suggestions: - -Here are the Extensions view filters: - -* `@builtin` - Show extensions that come with AVAP TM {' '} Dev Studio. Grouped by type (Programming Languages, Themes, etc.). -* `@disabled` - Show disabled installed extensions. -* `@installed` - Show installed extensions. -* `@outdated` - Show outdated installed extensions. A newer version is available on the Marketplace. -* `@enabled` - Show enabled installed extensions. Extensions can be individually enabled/disabled. -* `@recommended` - Show recommended extensions. Grouped as Workspace specific or general use. -* `@category` - Show extensions belonging to specified category. Below are a few of supported categories. For a complete list, type @category and follow the options in the suggestion list:{' '} @category:themes @category:formatters @category:linters @category:snippets -* @category:themes -* @category:formatters -* @category:linters -* @category:snippets - -These filters can be combined as well. For example: Use @installed - @category:themes to view all installed themes. - -If no filter is provided, the Extensions view displays the currently - installed and recommended extensions. - -### Sorting - -You can sort extensions with the @sort filter, which can take the - following values: - -* `installs` - Sort by Marketplace installation count, in descending order. -* `name` - Sort alphabetically by extension name. -* `publishedDate` - Sort by extension published date. -* `rating` - Sort by Marketplace rating (1-5 stars), in descending order. -* `updateDate` - Sort by extension last update name. - -### Categories and tags - -Extensions can set Categories and Tags {' '} - describing their features. - -You can filter on category and tag by using category: and tag:. - -Supported categories are:{' '} - ` - [Azure, Data Science, Debuggers, Education, Extension Packs, Formatters, - Keymaps, Language Packs, Linters, Machine Learning, Notebooks, Others, - Programming Languages, SCM Providers, Snippets, Testing, Themes, - Visualization] - ` - . They can be accessed through IntelliSense in the extensions search box: - -Note that you must surround the category name in quotes if it is more than - one word (for example, `category:"SCM Providers"` - ). - -Tags may contain any string and are not provided by IntelliSense, so - review the Marketplace to find helpful tags. - -## Install from a VSIX - -You can manually install a AVAP TM Dev Studio extension packaged - in a `.vsix` file. Using the Install from VSIX {' '} - command in the Extensions view command dropdown, or the{' '} - Extensions: Install from VSIX command in the{' '} - Command Palette , point to the `.vsix` file. - -You can also install using the AVAP TM Dev Studio{' '} - `--install-extension` command-line switch providing the path to - the `.vsix` file. - -```javascript -code --install-extension myextension.vsix -``` - -You may provide the `--install-extension` multiple times on the - command line to install multiple extensions at once. - -If you'd like to learn more about packaging and publishing extensions, - see our Publishing Extensions article in the Extension API. - -## Workspace recommended extensions - -A good set of extensions can make working with a particular workspace or - programming language more productive and you'd often like to share - this list with your team or colleagues. You can create a recommended list - of extensions for a workspace with the{' '} - - Extensions: Configure Recommended Extensions (Workspace Folder) - {' '} - command. - -In a single folder workspace, the command creates an{' '} - `extensions.json` file located in the workspace{' '} - `.vscode` folder where you can add a list of extensions - identifiers ({publisherName}.{extensionName}). - -In a multi-root workspace, the command will open your{' '} - `.code-workspace` file where you can list extensions under{' '} - `extensions.recommendations` . You can still add extension - recommendations to individual folders in a multi-root workspace by using - the{' '} - - Extensions: Configure Recommended Extensions (Workspace Folder) - {' '} - command. - -An example `extensions.json` could be: - -```javascript -{ - - ` `"recommendations": ["dbaeumer.vscode-eslint", - "esbenp.prettier-vscode"] - - - } -``` - -which recommends a linter extension and a code formatter extension. - -An extension is identified using its publisher name and extension - identifier `publisher.extension` . You can see the name on the - extension's detail page. AVAP TM Dev Studio will provide you - with auto-completion for installed extensions inside these files. - -AVAP TM Dev Studio prompts a user to install the recommended - extensions when a workspace is opened for the first time. The user can - also review the list with the{' '} - Extensions: Show Recommended Extensions command. - -## Next steps - -Here are a few topics you may find interesting... - -* Extension API(/api) - Start learning about the AVAP TM {' '} Dev Studio extension API. -* Your First Extension - Try creating a simple Hello World extension. -* Publishing to the Marketplace - Publish your own extension to the AVAP TM Dev Studio Marketplace. - -## Common questions - -### Where are extensions installed? - -Extensions are installed in a per user extensions folder. Depending on - your platform, the location is in the following folder: - -* Windows %USERPROFILE%.vscode\extensions -* macOS ~/.vscode/extensions -* Linux ~/.vscode/extensions - -You can change the location by launching AVAP TM Dev Studio with - the --extensions-dir command-line{' '} - option . - -### Whenever I try to install any extension, I get a connect ETIMEDOUT error - -You may see this error if your machine is going through a proxy server to - access the Internet. See the Proxy server support section in the setup - topic for details. - -### Can I download an extension directly from the Marketplace? - -Some users prefer to download an extension once from the Marketplace and - then install it multiple times from a local share. This is useful when - there are connectivity concerns or if your development team wants to use a - fixed set of extensions. - -To download an extension, navigate to the details page for the specific - extension within the Marketplace. On that page, there is a{' '} - Download Extension link in the Resources {' '} - section, which is located on the right-hand side of the page. - -Once downloaded, you can then install the extension via the{' '} - Install from VSIX command in the Extensions view command - dropdown. - -### Can I stop AVAPTM Dev Studio from providing extension - recommendations? - -Yes, if you would prefer to not have AVAP TM Dev Studio display - extension recommendations in the Extensions view or through notifications, - you can modify the following settings: - -* `extensions.showRecommendationsOnlyOnDemand` - Set to true to remove the RECOMMENDED section. -* `extensions.ignoreRecommendations` - Set to true to silence extension recommendation notifications. - -The Show Recommended Extensions command is always - available if you want to see recommendations. - -### Can I trust extensions from the Marketplace? - -The Marketplace runs a virus scan on each extension package that's - published to ensure its safety. The virus scan is run for each new - extension and for each extension update. Until the scan is all clear, the - extension won't be published in the Marketplace for public usage. - -The Marketplace also prevents extension authors from name-squatting on - official publishers such as Microsoft and RedHat. - -If a malicious extension is reported and verified, or a vulnerability is - found in an extension dependency: - -The Marketplace also provides you with resources to make an informed - decision about the extensions you install: - -* Ratings & Review - Read what others think about the extension. -* Q & A - Review existing questions and the level of the publisher's responsiveness. You can also engage with the extension's publisher(s) if you have concerns. -* Issues, Repository, and License - Check if the publisher has provided these and if they have the support you expect. - -If you do see an extension that looks suspicious, you can report the - extension to the Marketplace with the Report Abuse link - at the bottom of the extension More Info section. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md deleted file mode 100644 index af187b1..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md +++ /dev/null @@ -1,324 +0,0 @@ -IntelliSense is a general term for various code editing features - including: code completion, parameter info, quick info, and member lists. - IntelliSense features are sometimes called by other names such as - "code completion", "content assist", and "code - hinting." - -## IntelliSense for your programming language - -AVAP™ Dev Studio 2024 IntelliSense is provided for JavaScript, TypeScript, - JSON, HTML, CSS, SCSS, and Less out of the box. AVAP™ DS Code supports - word based completions for any programming language but can also be - configured to have richer IntelliSense by installing a language extension. - -Below are the most popular language extensions in the{' '} - Marketplace . - Select an extension tile below to read the description and reviews to - decide which extension is best for you. - -## IntelliSense features - -AVAP™ DS Code IntelliSense features are powered by a language service. A - language service provides intelligent code completions based on language - semantics and an analysis of your source code. If a language service knows - possible completions, the IntelliSense suggestions will pop up as you - type. If you continue typing characters, the list of members - (variables, methods, etc.) is filtered to only include members - containing your typed characters. Pressing Tab or Enter will insert the - selected member. - -You can trigger IntelliSense in any editor window by typing Ctrl+Space or - by typing a trigger character (such as the dot character (.) - in JavaScript). - -If you prefer, you can turn off IntelliSense while you type. See{' '} - - Customizing IntelliSense - {' '} - below to learn how to disable or customize VS Code's IntelliSense - features. - -As provided by the language service, you can see{' '} - quick info for each method by either pressing Ctrl+Space - or clicking the info icon. The accompanying documentation for the method - will now expand to the side. The expanded documentation will stay so and - will update as you navigate the list. You can close this by pressing - Ctrl+Space again or by clicking on the close icon. - -After choosing a method you are provided with{' '} - parameter info . - -When applicable, a language service will surface the underlying types in - the quick info and method signatures. In the image above, you can see - several any types. Because JavaScript is dynamic and doesn't need or - enforce types, any suggests that the variable can be of any type. - -## Types of completions - -The JavaScript code below illustrates IntelliSense completions. - IntelliSense gives both inferred proposals and the global identifiers of - the project. The inferred symbols are presented first, followed by the - global identifiers (shown by the Word icon). - -VS Code IntelliSense offers different types of completions, including - language server suggestions, snippets, and simple word based textual - completions. - -## Customizing IntelliSense - -You can customize your IntelliSense experience in settings and key - bindings. - -### Settings - -The settings shown below are the default settings. You can change these - settings in your settings.json file as described in{' '} - User and Workspace Settings . - -```javascript -{ - - ` `// Controls if quick suggestions should show up while typing - - ` `"editor.quickSuggestions": { - - ` `"other": true, - - ` `"comments": false, - - ` `"strings": false - - ` `}, - - ` `// Controls whether suggestions should be accepted on commit - characters. For example, in JavaScript, the semi-colon (`;`) can - be a commit character that accepts a suggestion and types that - character. - - ` `"editor.acceptSuggestionOnCommitCharacter": true, - - ` `// Controls if suggestions should be accepted on 'Enter' - in - addition to 'Tab'. Helps to avoid ambiguity between inserting new lines - or accepting suggestions. The value 'smart' means only accept a - suggestion with Enter when it makes a textual change - - ` `"editor.acceptSuggestionOnEnter": "on", - - ` `// Controls the delay in ms after which quick suggestions will - show up. - - ` `"editor.quickSuggestionsDelay": 10, - - ` `// Controls if suggestions should automatically show up when - typing trigger characters - - ` `"editor.suggestOnTriggerCharacters": true, - - ` `// Controls if pressing tab inserts the best suggestion and if - tab cycles through other suggestions - - ` `"editor.tabCompletion": "off", - - ` `// Controls whether sorting favours words that appear close to - the cursor - - ` `"editor.suggest.localityBonus": true, - - ` `// Controls how suggestions are pre-selected when showing the - suggest list - - ` `"editor.suggestSelection": "first", - - ` `// Enable word based suggestions - - ` `"editor.wordBasedSuggestions": "matchingDocuments", - - ` `// Enable parameter hints - - ` `"editor.parameterHints.enabled": true, - - - } -``` - -### Tab Completion - -The editor supports "tab completion" which inserts the best - matching completion when pressing Tab. This works regardless of the - suggest widget showing or not. Also, pressing Tab after inserting a - suggestions will insert the next best suggestion. - -By default, tab completion is disabled. Use the editor.tabCompletion - setting to enable it. These values exist: - -* off - (default) Tab completion is disabled. -* on - Tab completion is enabled for all suggestions and repeated invocations insert the next best suggestion. -* onlySnippets - Tab completion only inserts static snippets which prefix match the current line prefix. - -### Locality Bonus - -Sorting of suggestions depends on extension information and on how well - they match the current word you are typing. In addition, you can ask the - editor to boost suggestions that appear closer to the cursor position, - using the editor.suggest.localityBonus setting. - -In above images you can see that count, context, and colocated are sorted - based on the scopes in which they appear (loop, function, file). - -### Suggestion selection - -By default, AVAP™ DS Code pre-selects the first suggestion in the - suggestion list. If you'd like different behavior, for example, to - always select the most recently used item in the suggestion list, you can - use the editor.suggestSelection setting. - -The available editor.suggestSelection values are: - -* first - (default) Always select the top list item. -* recentlyUsed - The previously used item is selected unless a prefix (type to select) selects a different item. -* recentlyUsedByPrefix - Select items based on previous prefixes that have completed those suggestions. - -Selecting the most recently used item is very useful as you can quickly - insert the same completion multiple times. - -"Type to select" means that the current prefix (roughly the - text left of the cursor) is used to filter and sort suggestions. When - this happens and when its result differs from the result of recentlyUsed, - it will be given precedence. - -When using the last option, recentlyUsedByPrefix, AVAP™ DS Code remembers - which item was selected for a specific prefix (partial text). For - example, if you typed co and then selected console, the next time you - typed co, the suggestion console would be pre-selected. This lets you - quickly map various prefixes to different suggestions, for example co - -> console and con -> const. - -### Snippets in suggestions - -By default, AVAP™ DS Code shows snippets and completion proposals in one - widget. You can control the behavior with the editor.snippetSuggestions - setting. To remove snippets from the suggestions widget, set the value to - "none". If you'd like to see snippets, you can specify the - order relative to suggestions; at the top ("top"), at - the bottom ("bottom"), or inline ordered alphabetically - ("inline"). The default is "inline". - -### Key bindings - -The key bindings shown below are the default key bindings. You can change - these in your keybindings.json file as described in{' '} - Key Bindings . - -Note: There are many more key bindings relating to - IntelliSense. Open the Default Keyboard Shortcuts ( - File > Preferences >{' '} - Keyboard Shortcuts ) and search for - "suggest". - -```javascript -[ - ` `{ - - ` `"key": "ctrl+space", - - ` `"command": "editor.action.triggerSuggest", - - ` `"when": "editorHasCompletionItemProvider && - editorTextFocus && !editorReadonly" - - ` `}, - - ` `{ - - ` `"key": "ctrl+space", - - ` `"command": "toggleSuggestionDetails", - - ` `"when": "editorTextFocus && suggestWidgetVisible" - - ` `}, - - ` `{ - - ` `"key": "ctrl+alt+space", - - ` `"command": "toggleSuggestionFocus", - - ` `"when": "editorTextFocus && suggestWidgetVisible" - - ` `} - - ] -``` - -## Enhance completions with AI - -In AVAP™ DS Code, you can enhance your coding with artificial intelligence - (AI), such as suggestions for lines of code or entire functions, - fast documentation creation, and help creating code-related artifacts like - tests. - -GitHub Copilot is an AI-powered - code completion tool that helps you write code faster and smarter. You can - use the{' '} - - GitHub Copilot extension - {' '} - in VS Code to generate code, or to learn from the code it generates. - -![GitHub Copilot extension in the VS Code Marketplace][IntelliSense demo] - -You can learn more about how to get started with Copilot in the{' '} - Copilot documentation . - -## Troubleshooting - -If you find IntelliSense has stopped working, the language service may not - be running. Try restarting VS Code and this should solve the issue. If you - are still missing IntelliSense features after installing a language - extension, open an issue in the repository of the language extension. - -A particular language extension may not support all the AVAP™ DS Code - IntelliSense features. Review the extension's README to find out what - is supported. If you think there are issues with a language extension, you - can usually find the issue repository for an extension through the{' '} - - AVAP™ DS Code Marketplace - - . Navigate to the extension's Details page and select the{' '} - Support link. - -## Next steps - -IntelliSense is just one of AVAP™ DS Code's powerful features. Read on - to learn more: - -* JavaScript - Get the most out of your JavaScript development, including configuring IntelliSense. -* Node.js - See an example of IntelliSense in action in the Node.js walkthrough. -* Debugging - Learn how to set up debugging for your application. -* Creating Language extensions {' '} - Learn how to create extensions that add IntelliSense for new programming languages. -* GitHub Copilot in AVAP™ DS Code {' '} - Learn how to use AI with GitHub Copilot to enhance your coding. - -## Common questions - -### Why am I not getting any suggestions? - -This can be caused by a variety of reasons. First, try restarting AVAP™ DS - Code. If the problem persists, consult the language extension's - documentation. For JavaScript specific troubleshooting, please see the{' '} - - JavaScript language topic - - . - -### Why am I not seeing method and variable suggestions? - -This issue is caused by missing type declaration (typings) files - in JavaScript. You can check if a type declaration file package is - available for a specific library by using the{' '} - TypeSearch site. - There is more information about this issue in the{' '} - - JavaScript language topic - - . For other languages, please consult the extension's documentation. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md deleted file mode 100644 index 6f2c7fa..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md +++ /dev/null @@ -1,423 +0,0 @@ -You can work with multiple project folders in AVAP™ Dev Studio 2024 with - multi-root workspaces. This can be helpful when you are working on several - related projects at one time. For example, you might have a repository - with a product's documentation that you like to keep current when you - update the product source code. - -## Adding folders - -It is easy to add another folder to your existing workspace. There are - several gestures for adding folders: - -### Add Folder to Workspace - -The File > Add Folder to Workspace {' '} - command brings up an Open Folder dialog to select the new folder. - -Once a root folder is added, the Explorer will show the new folder as a - root in the File Explorer. You can right-click on any of the root folders - and use the context menu to add or remove folders. - -The File Explorer should work and behave as before. You can move files - between root folders and use any of the typical file operation actions - provided in the context menu and the Explorer view. - -Settings like files.exclude are supported for each root folder if - configured, and across all folders if configured as global user setting. - -### Drag and drop - -You can use drag and drop to add folders to a workspace. Drag a folder to - the File Explorer to add it to the current workspace. You can even select - and drag multiple folders. - -You can also use drag and drop to reorder folders in the workspace. - -### Multiple selection native file open dialogs - -Opening multiple folders with your platform's native file open dialog - will create a multi-root workspace. - -### command line --add - -Add a folder or multiple folders to the last active AVAP TM Dev - Studio instance for a multi-root workspace. - -```javascript -` `code --add vscode vscode-docs -``` - -### Removing folders - -You can remove a folder from a Workspace with the{' '} - Remove Folder from Workspace context menu command. - -## Workspace file - -When you add multiple folders, they are initially placed in a Workspace - titled UNTITLED WORKSPACE and that name will remain until - you save the workspace. You do not need to save a Workspace until you want - to have it in a permanent location, for example, on your Desktop. Untitled - Workspaces are present as long as the AVAP TM Dev Studio - instance they are using is open. Once you completely close an instance - with an untitled workspace, you will be asked to save it if you plan to - open it again in the future: - -When you save your workspace, it will create a .code-workspace file and - the file name will be displayed in the File Explorer. - -### Save Workspace As... - -If you want to move your Workspace file to a new location, you can use the{' '} - File > Save Workspace As command, - which will automatically set the correct folder paths relative to the new - Workspace file location. - -### Opening workspace files - -To reopen a Workspace, you can: - -* Double-click the .code-workspace file in your platform's Explorer. -* Use the File > Open Workspace {' '} command and select the Workspace file. -* Select the Workspace from the File >{' '} Open Recent (Ctrl+R) list.{' '} Workspaces have a (Workspace) suffix to differentiate them from folders. -* Workspaces have a (Workspace) suffix to differentiate them from folders. - -Just like Close Folder when a single folder is open in - AVAP TM Dev Studio, there is a Close Workspace {' '} - (Ctrl+K F) command to close the active Workspace. - -### Workspace file schema - -The schema of `.code-workspace` is fairly straightforward. You - have an array of folders with either absolute or relative paths. Relative - paths are better when you want to share Workspace files. - -You can override the display `name` of your folders with the - name attribute, to give more meaningful names to folders in the Explorer. - For example, you could name your project folders such as 'Product' - and 'Documentation' to easily identify the content by folder name: - -```javascript -{ - ` `"folders": [` `{ - ` `// Source code - ` `"name": "Product", - ` `"path": "vscode" - ` `}, - ` `{ - ` `// Docs and release notes - ` `"name": "Documentation", - ` `"path": "vscode-docs" - ` `}, - ` `{ - ` `// Yeoman extension generator - ` `"name": "Extension generator", - ` `"path": "vscode-generator-code" - ` `} - ` `] - - } -``` - -which will result in the following Explorer display: - -As you can see from the example above, you can add comments to your - Workspace files. - -The Workspace file can also contain Workspace global settings under{' '} - `settings` and extension recommendations under{' '} - `extensions` , which we will discuss below. - -## General UI - -### Editor - -There are only a few changes to the AVAP TM Dev Studio UI when - you are using multi-root workspaces, primarily to disambiguate files - between folders. For example, if there is a name collision between files - in multiple folders, AVAP TM Dev Studio will include the folder - name in tabbed headers. - -If you'd always like to see the folder displayed in the tabbed header, - you can use the `workbench.editor.labelFormat` setting - "medium" or "long" values to show the folder or full - paths. - -```javascript -"workbench.editor.labelFormat": "medium" -``` - -AVAP TM Dev Studio UI such as the OPEN EDITORS {' '} - and Quick Open (Ctrl+P) lists include the folder - name. - -If you are using an File Icon Theme and the active theme supports it, you - will see a special Workspace icon. - -Below you can see the Workspace icons from the built-in{' '} - Minimal (Visual Studio Code) file icon theme: - -### Search - -AVAP TM Dev Studio features like global search work across all - folders and group the search results by folder. - -When you have a multi-root workspace open, you can choose to search in a - single root folder by using the ./ syntax in the{' '} - files to include box. For example, if you enter{' '} - `./project1/\*\*/\*.txt` , that will search for all{' '} - `.txt` files under the `project1/` root folder. - -## Settings - -With multiple root folders in one workspace, it is possible to have a - .vscode folder in each root folder defining the settings that should apply - for that folder. To avoid setting collisions, only resource (file, - folder) settings are applied when using a multi-root workspace. - Settings that affect the entire editor (for example, UI layout) - are ignored. For example, two projects cannot both set the zoom level. - -User settings are supported as with single folder projects and you can - also set global Workspace settings that will apply to all folders in your - multi-root Workspace. Global Workspace settings will be stored in your - `.code-workspace` file. - -```javascript -{ - ` `"folders": [` `{ - ` `"path": "vscode" - ` `}, - ` `{ - ` `"path": "vscode-docs" - ` `}, - ` `{ - ` `"path": "vscode-generator-code" - ` `} - ` `], - ` `"settings": { - ` `"window.zoomLevel": 1, - ` `"files.autoSave": "afterDelay" - ` `} - - } -``` - -When you go from a single folder instance to multiple folders, AVAP - TM Dev Studio will add the appropriate editor-wide settings - from the first folder to the new global Workspace settings. - -You can easily review and modify the different settings files through the - Settings editor. The Settings editor tabs let you select your User - settings, global Workspace settings, and individual folder settings. - -You can also open specific settings files with the commands: - -* Preferences: Open User Settings - Open your global User settings -* Preferences: Open Workspace Settings - Open the settings section of your Workspace file. -* Preferences: Open Folder Settings - Open the settings for the active folder. - -Global Workspace settings override User settings and folder settings can - override Workspace or User settings. - -### Unsupported folder settings - -Unsupported editor-wide folder settings will be shown as grayed out in - your folder settings and are filtered out of the{' '} - DEFAULT FOLDER SETTINGS list. You will also see an - information icon in front of the setting. - -## Debugging - -With multi-root workspaces, AVAP TM Dev Studio searches across - all folders for `launch.json` debug configuration files and - displays them with the folder name as a suffix. Additionally AVAP - TM Dev Studio will also display launch configurations defined - in the workspace configuration file. - -The example above shows the debugging configurations for the TSLint - extension. There is a `launch` configuration from the{' '} - `tslint` extension folder to start the extension running in the - AVAP TM Dev Studio Extension Host and also an{' '} - `attach` configuration from the `tslint-server` {' '} - folder to attach the debugger to a running TSLint server. - -You can also see the three Add Config commands for the - folders, `tslint` , `tslint-server` , and{' '} - `tslint-tests` , in the vscode-tslint Workspace. The{' '} - Add Config command will either open an existing - launch.json file in the folder's .vscode subfolder or create a new one - and display the debugging configuration template dropdown. - -Variables used in a configuration (for example{' '} - `${workspaceFolder}` or the now deprecated{' '} - `${workspaceRoot}` ) are resolved relative to the - folder they belong to. It is possible to scope a variable per workspace - folder by appending the root folder's name to a variable - (separated by a colon). - -### Workspace launch configurations - -Workspace scoped launch configurations live in the " - `launch` " section of the workspace configuration file - ( Workspaces: Open Workspace Configuration File in the - Command Palette): - -Alternatively, new launch configurations can be added via the "Add - Config (workspace)" entry of the Launch Configuration - dropdown menu: - -A compound launch configuration can reference the individual launch - configurations by name as long as the names are unique within the - workspace, for example: - -```javascript -` `"compounds": [{ - ` `"name": "Launch Server & Client", - ` `"configurations": [` `"Launch Server", - ` `"Launch Client" - ` `] - ` `}] -``` - -If the individual launch configuration names are not unique, the - qualifying folder can be specified with a more verbose "folder" - syntax: - -```javascript -` `"compounds": [{ - ` `"name": "Launch Server & Client", - ` `"configurations": [` `"Launch Server", - ` `{ - ` `"folder": "Web Client", - ` `"name": "Launch Client" - ` `}, - ` `{ - ` `"folder": "Desktop Client", - ` `"name": "Launch Client" - ` `} - ` `] - ` `}] -``` - -In addition to `compounds` , the `launch` section of - the workspace configuration file can contain regular launch configurations - too. Make sure that all used variables are explicitly scoped to a specific - folder because otherwise they are not valid for the workspace. You can - find more details about explicitly scoped variables in the Variables - Reference. - -Here is an example for a launch configuration where the program lives in a - folder "Program" and where all files from a folder - "Library" should be skipped when stepping: - -```javascript -"launch": { - ` `"configurations": [{ - ` `"type": "node", - ` `"request": "launch", - ` `"name": "Launch test", - ` `"program": "${workspaceFolder:Program}/test.js", - ` `"skipFiles": [` - `"${workspaceFolder:Library}/out/\*\*/\*.js" - ` `] - ` `}] - - } -``` - -## Tasks - -Similar to how AVAP TM Dev Studio searches for debugging - configurations, AVAP TM Dev Studio will also try to autodetect - tasks from gulp, grunt, npm, and TypeScript project files across all - folders in a workspace as well as search for tasks defined in{' '} - `tasks.json` files. The location of tasks is indicated by a - folder name suffix. Note that tasks defined in `tasks.json` {' '} - must be version 2.0.0. - -From the TSLint extension Workspace example above, you can see that there - are two configured tasks from `tasks.json` {' '} - files in the `tslint` and `tslint-tests` folders and - numerous autodetected npm and TypeScript compiler{' '} - detected tasks . - -### Workspace task configuration - -Workspace scoped tasks live in the " `tasks` " section - of the workspace configuration file ( - Workspaces: Open Workspace Configuration File in the - Command Palette). Only " `shell` " and " - `process` " type tasks can be defined in the workspace - configuration file. - -## Source Control - -With multi-root workspaces, there is a{' '} - SOURCE CONTROL PROVIDERS section that gives you an - overview when you have multiple active repositories. These can be - contributed by several SCM providers; for example, you can have Git - repositories side-by-side with Azure DevOps Server workspaces. As you - select repositories in this view, you can see the source control details - below. - -You can use Ctrl+Click or Shift+Click to select multiple repositories. - Their details will appear as separate regions underneath. - -## Extensions - -If you are an extension author, you can review our Adopting Multi Root - Workspace APIs guide to learn about AVAP TM Dev Studio - multi-root workspace APIs and how to make your extension work well across - multiple folders. - -Below are some of the popular extensions that have adopted the multi-root - workspace APIs. - -### Extension recommendations - -AVAP TM Dev Studio supports folder level extension - recommendations through the `extensions.json` files under the - folder's `.vscode` subfolder. You can also provide global - Workspace extension recommendations by adding them to your{' '} - `.code-workspace` file. You can use the{' '} - - Extensions: Configure Recommended Extensions (Workspace Folder) - {' '} - command to open your Workspace file and add extension identifiers - ({publisherName}.{extensionName}) to the{' '} - `extensions.recommendations` array. - -```javascript -{ - ` `"folders": [` `{ - ` `"path": "vscode" - ` `}, - ` `{ - ` `"path": "vscode-docs" - ` `} - ` `], - ` `"extensions": { - ` `"recommendations": ["eg2.tslint", "dbaeumer.vscode-eslint", - "esbenp.prettier-vscode"] - ` `} - - } -``` - -## Next steps - -* What is a AVAP TM Dev Studio "workspace"? - More about single-folder and multi-root workspaces. -* Debugging - Learn how to set up debugging for your application. -* Tasks - Tasks let you run external tools like compilers within AVAP TM Dev Studio. - -## Common questions - -### How can I go back to working with a single project folder? - -You can either close the Workspace and open the folder directly or remove - the folder from Workspace. - -### As an extension author what do I need to do? - -See our Adopting Multi Root Workspace APIs guide. Most extensions can - easily support multi-root workspaces. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md deleted file mode 100644 index df17875..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md +++ /dev/null @@ -1,535 +0,0 @@ -AVAP TM Dev Studio has hundreds of settings, thousands of - extensions, and innumerable ways to adjust the UI layout to customize the - editor. AVAP TM Dev Studio Profiles let you - create sets of customizations and quickly switch between them or share - them with others. This topic explains how to create, modify, export, and - import profiles. - -## Create a Profile - -AVAP TM Dev Studio treats your current configuration as the{' '} - Default Profile . As you modify settings, install - extensions, or change UI layout by moving views, these customizations are - tracked in the Default Profile. - -To create a new profile, you can use the File >{' '} - Preferences > Profiles >{' '} - Create Profile menu item. - -You can create a new profile based on the current profile ( - Profiles: Create from Current Profiles ) or create an - Empty Profile. An Empty Profile includes no user customizations - (settings, extensions, snippets, etc.). - -You can also access the Profile command menu via the{' '} - Manage gear button in the lower right of the Activity - bar. - -The Profiles: Create Profile command is also available in - the Command Palette (Ctrl+Shift+P). - -You can choose to create a new profile by copying from a Profile Template - or from an existing profile or create an Empty Profile in the Profile - creation dialog. - -### Partial Profile - -A partial profile allows you to customize only a subset of configurations - (settings, keyboard shortcuts, snippets, tasks and extensions) and - use the rest of the configurations from the Default Profile. For example, - you can create a profile with all configurations except for keyboard - shortcuts, and AVAP TM Dev Studio will apply the keyboard - shortcuts from the Default Profile when this profile is active. - -### Check the current profile - -The current profile name is displayed in several places in the AVAP - TM Dev Studio UI: - -* Title bar -* File > Preferences >{' '} Profiles -* Manage gear button hover - -If you are still using the Default Profile, no profile name is displayed. - -The Manage gear button displays a badge with the first - two letters of the active profile so you can quickly check which profile - you are running. - -### Configure a profile - -You can configure a profile just as you would normally change any AVAP - TM Dev Studio configuration. You can install/uninstall/disable - extensions, change settings, and adjust the editor's UI layout - (for example, moving and hiding views) like normal. These changes - are stored in your currently active profile. - -### Workspace associations - -When you create or select an existing profile, it is associated with the - current workspace and whenever you open that folder, the workspace's - profile is active. If you open another folder, the profile switches to - that folder's associated profile if one has been set or remains on the - last used profile. - -## Managing profiles - -### Switch profiles - -You can quickly switch between profiles with the{' '} - Profiles: Switch Profile command in the Command Palette, - which presents a dropdown listing your available profiles. - -You can also switch profiles by selecting a profile from the list - displayed in the Profiles menus, available via the Manage {' '} - gear button or File > Preferences {' '} - > Profiles . - -### Edit a profile - -You can edit an existing profile via the Edit command in - the Profiles menu. - -### Delete a profile - -You can delete a profile via the Delete Profile command. - The Delete Profile drop down lets you select which - profile(s) to delete. - -## Profile contents - -The Profiles: Show Contents command (available in the - Command Palette or Profiles menus) brings up the Profiles view, where - you can review the customizations for the profile. - -A profile can include: - -* Settings - In a profile-specific `settings.json` file. -* Extensions - The list of extensions included in the current profile. -* UI state - View layout (positions), visible views and actions. -* Keybindings - In a profile-specific `keybindings.json` file. -* Snippets - In a profile-specific `{language}.json` {' '} files. -* User Tasks - In a profile-specific `tasks.json` file. - -When you create a new profile based on the Default Profile, the - profile-specific configuration files are populated from your user - configuration files. Workspace-specific settings are not automatically - included in a new profile. - -### Applying a setting to all profiles - -A setting can be applied to all profiles using the{' '} - Apply Setting to all Profiles action available in the - Settings editor. - -This will apply the value of the setting to all profiles. Any updates to - this setting from any profile will be applied to all profiles. You can - always revert this by unchecking the{' '} - Apply Setting to all Profiles action. - -### Applying an extension to all profiles - -An extension can be applied to all profiles by clicking on the{' '} - Apply Extension to all Profiles action in the Extensions - view. - -This will make this extension available in all profiles. You can always - revert this by unchecking the{' '} - Apply Extension to all Profiles action. - -## Share Profiles - -### Export - -You can export a profile in order to save it or share it with others. The{' '} - Export Profile command displays the Profiles view with - the contents of the active profile and an Export button. - You can unselect various elements of the profile such as extensions or - configuration files before you export the profile. - -When you select Export , you are prompted for the profile - name and whether you want to export to a GitHub gist or your local file - system. - -After you save a profile to GitHub (you'll be prompted to log into - GitHub), a dialog gives you the option to Copy Link {' '} - so you can share your profile gist URL with others. The URL includes an - autogenerated GUID and has the format (LINK). The GitHub gist is - marked as Secret , so only those with the link can see the - gist. - -If you launch the profile URL, it opens AVAP TM Dev Studio for - the Web (vscode.dev) with the Profiles view open and the imported - profile contents displayed. You can unselect profile elements if you wish - and you need to manually Install Extensions (via the - download cloud button) if you want to continue using that profile in - vscode.dev. - -You also have the option to{' '} - - Import Profile in AVAP TM Dev Studio - - , which opens AVAP TM Dev Studio Desktop with the profile's - contents displayed and an Import Profile button. - -You can review your gists at (LINK). From your GitHub gist page - you can rename, delete, or copy the GUID of a gist. - -If you chose to save the profile as a local file, a{' '} - Save Profile dialog lets you place the file on your local - machine. A profile is persisted in a file with the extension{' '} - `.code-profile` . - -### Import - -To import an existing profile, run the Import Profiles {' '} - command. You are prompted for the URL of a GitHub gist or the file - location of a profile via an Import Profile dialog. Once - you have selected the profile, the Profiles view opens and displays the - profile to import. You can unselect some profile elements if you don't - want to import them. Select the Import Profile button and - you will now be using the imported profile. - -## Uses for Profiles - -Profiles are a great way to customize AVAP TM Dev Studio to - better fit your needs. In this section, we look at some common use cases - for profiles. - -Since profiles are remembered per workspace, they are a great way to - customize AVAP TM Dev Studio for a specific programming - language. For example, you can create a JavaScript frontend profile that - includes the extensions, settings, and customizations you use for - JavaScript development in one workspace, and have a Python backend profile - that includes the extensions, settings, and customizations you use for - Python development in another workspace. Using this approach, you can - easily switch between workspaces and always have AVAP TM Dev - Studio configured the right way. - -### Demos - -When doing a demo, you can use a profile to set up a specific - configuration for your demo. For example, you can create a profile with a - specific set of extensions and settings like zoom level, font size, and - color theme. By doing this, a demo will not mess up your normal AVAP - TM Dev Studio setup and you can customize AVAP TM Dev - Studio for better visibility during your presentation. - -### Education - -Profiles can be used to customize AVAP TM Dev Studio for - students to ease the use in a classroom setting. Profiles allow educators - to quickly share a customized AVAP TM Dev Studio setup with - students. For example, educators can create a profile with a specific set - of extensions and settings needed for a computer science class and then - share that profile with students. - -### Report AVAPTM Dev Studio issues - -One use of an Empty Profile is to reset your editor when you want to - report an issue with AVAP TM Dev Studio. An Empty Profile - disables all extensions and modified settings so you can quickly see if - the issue is due to an extension, a setting, or is in AVAP TM {' '} - Dev Studio core. - -## Profile Templates - -AVAP TM Dev Studio comes with a predefined set of profile - templates that you can use to customize AVAP TM Dev Studio for - your specific workflow. To create a new profile based on a template, - select a Profile Template when going through the{' '} - Create Profile flow. - -### Python Profile Template - -The Python profile is a good starting point for Python development. It - comes with Python specific snippets and has the following extensions: - -* autoDocstring - Generate Python docstrings automatically. -* Black Formatter - Formatting support using the black formatter. -* Docker - Create, manage, and debug containerized applications. -* Even Better TOML - Fully-featured TOML support. -* Python - IntelliSense, linting, formatting, debugging, refactoring. -* Python Environment Manager - Manage Python environments and packages. -* Remote Development extension pack - Supports SSH, WSL, and Dev Containers. -* Ruff - Integrates the Ruff Python linter. - -This profile also sets the following settings: - -```javascript -` `"python.analysis.autoImportCompletions": true, - ` `"python.analysis.fixAll": ["source.unusedImports"], - ` `"editor.defaultFormatter": "ms-python.black-formatter" -``` - -### Data Science Profile Template - -The Data Science profile is a good starting point for all data and - notebook work. It comes with specific snippets and has the following - extensions: - -* Data Wrangler - Data cleaning and preparation for tabular datasets. -* Black Formatter - Formatting support using the black formatter. -* Jupyter - Use Jupyter notebooks within AVAP TM Dev Studio. -* Python - IntelliSense, linting, formatting, debugging, refactoring. -* Dev Containers - Create custom development environments inside a Docker container. -* GitHub Copilot - Your AI pair programmer. - -This profile also sets the following settings: - -```javascript -` `"[python]": { - ` `"editor.defaultFormatter": "ms-python.black-formatter", - ` `"editor.formatOnType": true, - ` `"editor.formatOnSave": true - ` `}, - ` `"editor.inlineSuggest.enabled": true, - ` `"editor.lineHeight": 17, - ` `"breadcrumbs.enabled": false, - ` `"files.autoSave": "afterDelay", - ` `"jupyter.themeMatplotlibPlots": true, - ` `"jupyter.widgetScriptSources": [` `"unpkg.com", - ` `"jsdelivr.com" - ` `], - ` `"notebook.experimental.outputScrolling": true, - ` `// "notebook.outline.showCodeCells": true, - ` `"files.exclude": { - ` `"\*\*/.csv": true, - ` `"\*\*/.parquet": true, - ` `"\*\*/.pkl": true, - ` `"\*\*/.xls": true - ` `} -``` - -### Doc Writer Profile Template - -The Doc Writer profile is a good lightweight setup for writing - documentation. It comes with the following extensions: - -* Code Spell Checker - Spelling checker for source code. -* Markdown Checkboxes - Adds checkbox support to the AVAP TM Dev Studio built-in Markdown Preview. -* Markdown Emoji - Adds emoji syntax support to Markdown Preview and notebook Markdown cells. -* Markdown Footnotes - Adds ^footnote syntax support to the Markdown Preview. -* Markdown Preview GitHub Styling - Use GitHub styling in the Markdown Preview. -* Markdown Preview Mermaid Support - Mermaid diagrams and flowcharts. -* Markdown yaml Preamble - Renders YAML front matter as a table. -* markdownlint - Markdown linting and style checking for AVAP TM {' '} Dev Studio. - -This profile also sets the following settings: - -```javascript -` `"workbench.colorTheme": "Default Light+ Experimental", - ` `"editor.minimap.enabled": false, - ` `"breadcrumbs.enabled": false, - ` `"editor.glyphMargin": false, - ` `"explorer.decorations.badges": false, - ` `"explorer.decorations.colors": false, - ` `"editor.fontLigatures": true, - ` `"files.autoSave": "afterDelay", - ` `"git.enableSmartCommit": true, - ` `"window.commandCenter": true, - ` `"editor.renderWhitespace": "none", - ` `"workbench.editor.untitled.hint": "hidden", - ` `"markdown.validate.enabled": true, - ` `"markdown.updateLinksOnFileMove.enabled": "prompt", - ` `"workbench.startupEditor": "none" -``` - -### Node.js Profile Template* - -The Node.js profile is a good starting point for all Node.js work. It - comes with the following extensions: - -* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. -* Dev Containers - Create custom development environments inside a Docker container. -* Docker - Create, manage, and debug containerized applications. -* DotENV - Support for dotenv file syntax. -* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. -* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. -* Jest - Use Facebook's jest testing framework. -* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. -* npm Intellisense - Autocomplete npm modules in import statements. -* Prettier - Code formatter - Code formatter using Prettier. -* Rest Client - REST Client for AVAP TM Dev Studio. -* YAML - YAML language support with built-in Kubernetes syntax. - -This profile comes with the following settings: - -```javascript -` `"editor.formatOnPaste": true, - ` `"git.autofetch": true, - ` `"[markdown]": { - ` `"editor.wordWrap": "on" - ` `}, - ` `"[json]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `}, - ` `"[jsonc]": { - ` `"editor.defaultFormatter": "vscode.json-language-features" - ` `}, - ` `"[html]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `}, - ` `"[javascript]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `}, - ` `"[typescript]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `} -``` - -### Angular Profile Template - -The Angular profile is a good starting point for all Angular work. It - comes with the following extensions: - -* Angular Language Service - Editor services for Angular templates. -* Angular Schematics - Integrate Angular schematics (CLI commands). -* angular2-switcher - Easily navigate to `typescript|template|style` in angular2 project. -* Dev Containers - Create custom development environments inside a Docker container. -* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. -* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. -* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. -* Jest - Use Facebook's jest testing framework. -* Material Icon Theme - Material Design Icons for AVAP TM Dev Studio. -* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. -* Playwright Test for VSCode - Run Playwright tests in AVAP TM {' '} Dev Studio. -* Prettier - Code formatter - Code formatter using Prettier. -* Rest Client - REST Client for AVAP TM Dev Studio. -* YAML - YAML language support with built-in Kubernetes syntax. - -This profile sets the following settings: - -```javascript -` `"editor.formatOnPaste": true, - ` `"git.autofetch": true, - ` `"[markdown]": { - ` `"editor.wordWrap": "on" - ` `}, - ` `"[json]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `}, - ` `"[jsonc]": { - ` `"editor.defaultFormatter": "vscode.json-language-features" - ` `}, - ` `"[html]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `}, - ` `"[javascript]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `}, - ` `"[typescript]": { - ` `"editor.defaultFormatter": "esbenp.prettier-vscode" - ` `}, - ` `"workbench.iconTheme": "material-icon-theme" -``` - -### Java General Profile Template - -The Java General profile is a good starting point for all Java work. It - customizes the layout to improve the Java experience and comes with the - following extensions from the Extension Pack for Java: - -* Debugger for Java - A lightweight Java debugger. -* IntelliCode - AI-assisted development. -* IntelliCode API Usage Examples - Provides code examples for over 100K different APIs. -* Language Support for Java(TM) by Red Hat - Fundamental Java language support, Linting, Intellisense, formatting, refactoring. -* Maven for Java - Manage Maven projects and builds. -* Project Manager for Java - Manage Java projects within AVAP TM {' '} Dev Studio. -* Test Runner for Java - Run and debug JUnit or TestNG test cases. - -### Java Spring Profile Template - -The Java Spring profile is a good starting point for all Java and Spring - developers. It builds on the Java General profile and add the following - extensions from the Spring Boot Extension Pack: - -* Spring Boot Dashboard - Provides Spring Boot live data visualization and observation in your running Spring applications. -* Spring Boot Tools - Rich language support for Spring Boot files. -* Spring Initializr Java Support - Scaffold and generate Spring Boot Java projects. - -This profile sets the following settings: - -```javascript -` `"[java]": { - ` `"editor.defaultFormatter": "redhat.java" - ` `}, - ` `"boot-java.rewrite.reconcile": true -``` - -## Command line - -You can launch AVAP TM Dev Studio with a specific profile via - the `--profile` command-line interface option. You pass the - name of the profile after the `--profile` argument and open a - folder or a workspace using that profile. The command line below opens the{' '} - `web-sample` folder with the "Web Development" - profile: - -` - code ~/projects/web-sample --profile "Web Development" - ` - -If the profile specified does not exist, a new empty profile with the - given name is created. - -## Common Questions - -### Where are profiles kept? - -Profiles are stored under your User configurations similar to your user - settings and keybindings. - -* Windows `%APPDATA%\Code\User\profiles` -* macOS {' '} `$HOME/Library/Application\ Support/Code/User/profiles` -* Linux `$HOME/.config/Code/User/profiles` - -If you are using the Insiders version, the intermediate folder name is{' '} - `Code - Insiders` . - -### Where is the UI State globalState.json file? - -If you expand the UI State node in the Profiles view, - there is a `globalState.json` entry. This is an in-memory JSON - representation of your profile's UI State, describing the visibility - and layout of various AVAP TM Dev Studio UI elements. The file - does not actually exist on disk and is just a JSON view of the underlying - global state storage. - -### What is a Temporary Profile? - -A Temporary Profile is a profile that is not saved across AVAP - TM Dev Studio sessions. You create a Temporary Profile via the{' '} - Profiles: Create a Temporary Profile command in the - Command Palette. The Temporary Profile starts as an Empty Profile and has - an automatically generated name (such as Temp 1 ). - You can modify the profile settings and extensions, use the profile for - the lifetime of your AVAP TM Dev Studio session, but it will be - deleted once you close AVAP TM Dev Studio. - -Temporary Profiles are useful if you want to try a new configuration or - test an extension without modifying your default or existing profile. - Restarting AVAP TM Dev Studio reenables the current profile for - your workspace. - -### How can I remove the profile from my project? - -You can set your project back to the Default Profile. If you'd like to - remove all profile workspace associations, you can use the{' '} - Developer: Reset Workspace Profiles Associations , which - will set all local folders currently assigned a profile back to the - Default Profile. Reset Workspace Profiles Associations {' '} - does not delete any existing profiles. - -### Do profiles sync across machines (via Settings Sync)? - -Yes, you can use Settings Sync to move your profiles across various - machines. With Setting Sync enabled and Profiles checked - in the Settings Sync: Configure drop down, all your - created profiles are available. - -### Why are some settings not exported when exporting a profile? - -When exporting profiles, machine-specific settings are not included - because these setting would not be applicable on another machine. For - example, settings that point to local paths are not included. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md deleted file mode 100644 index 876a9ff..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md +++ /dev/null @@ -1,156 +0,0 @@ -Source code refactoring can improve the quality and maintainability of - your project by restructuring your code while not modifying the runtime - behavior. AVAP TM Dev Studio supports refactoring operations - (refactorings) such as Extract Method and Extract Variable to - improve your code base from within your editor. - -For example, a common refactoring used to avoid duplicating code (a - maintenance headache) is the Extract Method refactoring, where you - select source code that you'd like to reuse elsewhere and pull it out - into its own shared method. - -Refactorings are provided by a language service and AVAP TM Dev - Studio has built-in support for TypeScript and JavaScript refactoring - through the TypeScript language service. Refactoring support for other - programming languages is provided through AVAP TM Dev Studio - extensions that contribute language services. The UI and commands for - refactoring are the same across languages, and in this topic we'll - demonstrate refactoring support with the TypeScript language service. - -## Code Actions = Quick Fixes and refactorings - -In AVAP TM Dev Studio, Code Actions can provide both - refactorings and Quick Fixes for detected issues (highlighted with red - squiggles). An available Code Action is announced by a lightbulb near - the source code when the cursor is on a squiggle or selected text region. - Clicking on the Code Action lightbulb or using the{' '} - Quick Fix command Ctrl+. will display Quick Fixes and - refactorings. - -If you'd just like to see refactorings without Quick Fixes, you can - use the Refactor command (Ctrl+Shift+R). - -## Refactoring actions - -### Extract Method - -Select the source code you'd like to extract and then click on the - lightbulb in the gutter or press (Ctrl+.) to see available - refactorings. Source code fragments can be extracted into a new method, or - into a new function at various different scopes. During the extract - refactoring, you will be prompted to provide a meaningful name. - -### Extract Variable - -TypeScript language service provides Extract to const {' '} - refactoring to create a new local variable for the currently selected - expression: - -When working with classes, you can also extract a value to a new property. - -## Rename symbol - -Renaming is a common operation related to refactoring source code and AVAP - TM Dev Studio has a separate Rename Symbol {' '} - command (F2). Some languages support rename symbol across files. - Press F2 and then type the new desired name and press `Enter` . - All usages of the symbol will be renamed, across files. - -## Keybindings for Code Actions - -The `editor.action.codeAction` command lets you configure - keybindings for specific Code Actions. This keybinding, for example, - triggers the Extract function refactoring Code Actions: - -```javascript -{ - ` `"key": "ctrl+shift+r ctrl+e", - ` `"command": "editor.action.codeAction", - ` `"args": { - ` `"kind": "refactor.extract.function" - ` `} - - } -``` - -Code Action kinds are specified by extensions using the enhanced{' '} - `CodeActionProvided` API. Kinds are hierarchical, so{' '} - `"kind": "refactor"` will show all - refactoring Code Actions, whereas `"kind"` :{' '} - `"refactor.extract.function"` will only show{' '} - Extract function refactorings. - -Using the above keybinding, if only a single{' '} - `"refactor.extract.function"` Code Action is - available, it will be automatically applied. If multiple{' '} - Extract function Code Actions are available, we bring up - a context menu to select them: - -You can also control how/when Code Actions are automatically applied using - the `apply` argument: - -```javascript -{ - ` `"key": "ctrl+shift+r ctrl+e", - ` `"command": "editor.action.codeAction", - ` `"args": { - ` `"kind": "refactor.extract.function", - ` `"apply": "first" - ` `} - - } -``` - -Valid values for `"apply"` : - -* "first" - Always automatically apply the first available Code Action. -* "ifSingle" - Default. Automatically apply the Code Action if only one is available. Otherwise, show the context menu. -* "never" - Always show the Code Action context menu, even if only a single Code Action is available. - -When a Code Action keybinding is configured with "preferred": - true, only preferred Quick Fixes and refactorings are shown. A preferred - Quick Fix addresses the underlying error, while a preferred refactoring is - the most common refactoring choice. For example, while multiple - refactor.extract.constant refactorings may exist, each extracting to a - different scope in the file, the preferred refactor.extract.constant - refactoring is the one that extracts to a local variable. - -This keybinding uses "preferred": true to create a refactoring - that always tries to extract the selected source code to a constant in the - local scope: - -```javascript -{ - ` `"key": "shift+ctrl+e", - ` `"command": "editor.action.codeAction", - ` `"args": { - ` `"kind": "refactor.extract.constant", - ` `"preferred": true, - ` `"apply": "ifSingle" - ` `} - - } -``` - -## Extensions with refactorings - -You can find extensions that support refactoring by looking in the AVAP - TM Dev Studio Marketplace. You can go to the Extensions view - (Ctrl+Shift+X) and type 'refactor' in the search box. You - can then sort by install count or ratings to see which extensions are - popular. - -## Next steps - -* Intro Video - Code Editing - Watch an introductory video on code editing features. -* Code Navigation - AVAP TM Dev Studio lets you move quickly through your source code. -* Debugging - Learn about debugging with AVAP TM Dev Studio. - -## Common questions - -### Why don't I see any lightbulbs when there are errors in my code? - -Lightbulbs (Code Actions) are only shown when your cursor hovers - over the text showing the error. Hovering over the text will show the - error description, but you need to move the cursor or select text to see - lightbulbs for Quick Fixes and refactorings. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md deleted file mode 100644 index 2874279..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md +++ /dev/null @@ -1,297 +0,0 @@ -Settings Sync lets you share your AVAP TM Dev Studio - configurations such as settings, keybindings, and installed extensions - across your machines so you are always working with your favorite setup. - -## Turning on Settings Sync - -You can turn on Settings Sync using the{' '} - Turn On Settings Sync... entry in the{' '} - Manage gear menu at the bottom of the Activity Bar. - -You will be asked to sign in and what preferences you would like to sync; - currently Settings, Keyboard Shortcuts, Extensions, User Snippets, and UI - State are supported. - -Selecting the Sign in & Turn on button will ask you - to choose between signing in with your Microsoft or GitHub account. - -After making this selection, the browser will open so that you can sign in - to your Microsoft or GitHub account. When a Microsoft account is chosen, - you can use either personal accounts, such as Outlook accounts, or Azure - accounts, and you can also link a GitHub account to a new or existing - Microsoft account. - -After signing in, Settings Sync will be turned on and continue to - synchronize your preferences automatically in the background. - -## Merge or Replace* - -If you already synced from a machine and turning on sync from another - machine, you will be shown with following{' '} - Merge or Replace dialog. - -* Merge : Selecting this option will merge{' '} local settings with remote settings from the cloud. -* Replace Local : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. -* Merge Manually... : Selecting this option will open{' '} Merges view where you can merge preferences one by one. - -## Configuring synced data - -Machine settings (with `machine` or{' '} - `machine-overridable` scopes) are not synchronized by - default, since their values are specific to a given machine. You can also - add or remove settings you want to this list from the Settings editor or - using the `setting settingsSync.ignoredSettings` . - -Keyboard Shortcuts are synchronized per platform by default. If your - keyboard shortcuts are platform-agnostic, you can synchronize them across - platforms by disabling the setting{' '} - `settingsSync.keybindingsPerPlatform` . - -All built-in and installed extensions are synchronized along with their - global enablement state. You can skip synchronizing an extension, either - from the Extensions view (Ctrl+Shift+X) or using the{' '} - `setting settingsSync.ignoredExtensions` . - -Following UI State is synchronized currently: - -* Display Language -* Activity Bar entries -* Panel entries -* Views layout and visibility -* Recently used commands -* Do not show again notifications - -You can always change what is synced via the{' '} - Settings Sync: Configure command or by opening the{' '} - Manage gear menu, selecting{' '} - Settings Sync is On , and then{' '} - Settings Sync: Configure . - -## Conflicts - -When synchronizing settings between multiple machines, there may - occasionally be conflicts. Conflicts can happen when first setting up sync - between machines or when settings change while a machine is offline. When - conflicts occur, you will be presented with the following options: - -* Accept Local : Selecting this option will overwrite{' '} remote settings in the cloud with your local settings. -* Accept Remote : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. -* Show Conflicts : Selecting this will display a diff editor similar to the Source Control diff editor, where you can preview the local and remote settings and choose to either accept local or remote or manually resolve the changes in your local settings file and then accept the local file. - -## Switching Accounts - -If at any time you want to sync your data to a different account, you can - turn off and turn on Settings Sync again with different account. - -## Syncing Stable versus Insiders - -By default, the AVAP TM Dev Studio Stable and Insiders builds - use different Settings Sync services, and therefore do not share settings. - You can sync your Insiders with Stable by selecting the Stable sync - service while turning on Settings Sync. This option is only available in - AVAP TM Dev Studio Insiders. - -## Restoring data - -AVAP TM Dev Studio always stores local and remote backups of - your preferences while syncing and provides views for accessing these. In - case something goes wrong, you can restore your data from these views. - -You can open these views using{' '} - Settings Sync: Show Synced Data command from the Command - Palette. The Local Sync activity view is hidden by default and you can - enable it using Views submenu under{' '} - Settings Sync view overflow actions. - -Local backups folder in the disk can be accessed via the{' '} - Settings Sync: Open Local Backups Folder command. The - folder is organized by the type of preference and contains versions of - your JSON files, named with a timestamp of when the backup occurred. - -Note : Local backups are automatically deleted after 30 - days. For remote backups the latest 20 versions of each individual - resource (settings, extensions, etc.) is retained. - -## Synced Machines - -AVAP TM Dev Studio keeps track of the machines synchronizing - your preferences and provides a view to access them. Every machine is - given a default name based on the type of AVAP TM Dev Studio - (Insiders or Stable) and the platform it is on. You can always - update the machine name using the edit action available on the machine - entry in the view. You can also disable sync on another machine using{' '} - Turn off Settings Sync context menu action on the machine - entry in the view. - -You can open this view using{' '} - Settings Sync: Show Synced Data command from the Command - Palette. - -## Extension authors - -If you are an extension author, you should make sure your extension - behaves appropriately when users enable Setting Sync. For example, you - probably don't want your extension to display the same dismissed - notifications or welcome pages on multiple machines. - -### Sync user global state between machines - -If your extension needs to preserve some user state across different - machines then provide the state to Settings Sync using{' '} - `vscode.ExtensionContext.globalState.setKeysForSync.` Sharing - state such as UI dismissed or viewed flags across machines can provide a - better user experience. - -There is an example of using `setKeysforSync` in the Extension - Capabilities topic. - -## Reporting issues - -Settings Sync activity can be monitored in the{' '} - Log (Settings Sync) output view. If you - experience a problem with Settings Sync, include this log when creating - the issue. If your problem is related to authentication, also include the - log from the Account output view. - -## How do I delete my data? - -If you want to remove all your data from our servers, just turn off sync - via Settings Sync is On menu available under{' '} - Manage gear menu and select the checkbox to clear all - cloud data. If you choose to re-enable sync, it will be as if you're - signing in for the first time. - -## Next steps - -* User and Workspace settings - Learn how to configure AVAP TM {' '} Dev Studio to your preferences through user and workspace settings. - -## Common questions - -### Is AVAP TM Dev Studio Settings Sync the same as the Settings Sync - extension? - -No, the Settings Sync extension by Shan Khan uses a private Gist on GitHub - to share your AVAP TM Dev Studio settings across different - machines and is unrelated to the AVAP TM Dev Studio Settings - Sync. - -### What types of accounts can I use for Settings Sync sign in? - -AVAP TM Dev Studio Settings Sync supports signing in with either - a Microsoft account (for example Outlook or Azure accounts) or a - GitHub account. Sign in with GitHub Enterprise accounts is not supported. - Other authentication providers may be supported in the future and you can - review the proposed Authentication Provider API in issue #88309. - -### Can I use a different backend or service for Settings Sync? - -Settings Sync uses a dedicated service to store settings and coordinate - updates. A service provider API may be exposed in the future to allow for - custom Settings Sync backends. - -## Troubleshooting keychain issues - -Settings Sync persists authentication information on desktop using the OS - keychain for encryption. Using the keychain can fail in some cases if the - keychain is misconfigured or the environment isn't recognized. - -To help diagnose the problem, you can restart AVAP TM Dev Studio - with the following flags to generate a verbose log: - -```javascript -code --verbose --vmodule="\*/components/os\_crypt/\*=1" -``` - -### Windows & macOS - -At this time, there are no known configuration issues on Windows or macOS - but, if you suspect something is wrong, you can open an issue on AVAP - TM Dev Studio with the verbose logs from above. This is - important for us to support additional desktop configurations. - -### Linux - -Towards the top of the logs from the previous command, you will see - something to the effect of: - -[9699:0626/093542.027629:VERBOSE1:key_storage_util_linux.cc(54)] - Password storage detected desktop environment: GNOME - -[9699:0626/093542.027660:VERBOSE1:key_storage_linux.cc(122)] - Selected backend for OSCrypt: GNOME_LIBSECRET - -We rely on Chromium's oscrypt module to discover and store encryption - key information in the keyring. Chromium supports a number of different - desktop environments. Outlined below are some popular desktop environments - and troubleshooting steps that may help if the keyring is misconfigured. - -If the error you're seeing is "Cannot create an item in a locked - collection", chances are your keyring's `Login` {' '} - keyring is locked. You should launch your OS's keyring (Seahorse - is the commonly used GUI for seeing keyrings) and ensure the default - keyring (usually referred to as `Login` keyring) is - unlocked. This keyring needs to be unlocked when you log into your system. - -It's possible that your wallet (aka keyring) is closed. If you - open KWalletManager, you can see if the default `kdewallet` is - closed and if it is, make sure you open it. - -If you are using KDE5 or higher and are having trouble connecting to{' '} - `kwallet5` (like users of the unofficial AVAP TM {' '} - Dev Studio Flatpak in issue #189672), you can try configuring the - keyring to `gnome-libsecret` as this will use the Secret - Service API to communicate with any valid keyring. `kwallet5` {' '} - implements the Secret Service API and can be accessed using this method. - -First off, if your desktop environment wasn't detected, you can open - an issue on AVAP TM Dev Studio with the verbose logs from above. - This is important for us to support additional desktop configurations. - -You can manually tell AVAP TM Dev Studio which keyring to use by - passing the `password-store` flag. Our recommended - configuration is to first install gnome-keyring if you don't have it - already and then launch AVAP TM Dev Studio with{' '} - `code --password-store="gnome-libsecret"` . - -If this solution works for you, you can persist the value of - password-store by opening the Command Palette (Ctrl+Shift+P) and - running the Preferences: Configure Runtime Arguments {' '} - command. This will open the argv.json file where you can add the setting - "password-store":"gnome-libsecret". - -Here are all the possible values of password-store if you would like to - try using a different keyring than gnome-keyring: - -* `kwallet5` : For use with kwalletmanager5. -* `gnome-libsecret` : For use with any package that implements the Secret Service API (for example `gnome-keyring` ,{' '} `kwallet5` , `KeepassXC` ). -* (not recommended) kwallet: For use with older versions of kwallet. -* (not recommended) basic: See the section below on basic text for more details. - -Don't hesitate to open an issue on AVAP TM Dev Studio with - the verbose logs if you run into any issues. - -We rely on Chromium's oscrypt module to discover and store encryption - key information in the keyring. Chromium offers an opt-in fallback - encryption strategy that uses an in-memory key based on a string that is - hardcoded in the Chromium source. Because of this, this fallback strategy - is, at best, obfuscation, and should only be used if you are accepting of - the risk that any process on the system could, in theory, decrypt your - stored secrets. - -If you accept this risk, you can set `password-store` to basic - by opening the Command Palette (Ctrl+Shift+P) and running the{' '} - Preferences: Configure Runtime Arguments command. This - will open the `argv.json` file where you can add the setting{' '} - `"password-store":"basic"` . - -## Can I share settings between AVAP TM Dev Studio - -{' '} - Stable and Insiders? Yes. Please refer to the Syncing Stable versus - Insiders section for more information. - -Please note that this can sometimes lead to data incompatibility because - Insiders builds are newer than Stable builds. In such cases, Settings Sync - will be disabled automatically on Stable to prevent data inconsistencies. - Once a newer version of the Stable build is released, you can upgrade your - client and turn on Settings Sync to continue syncing. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md deleted file mode 100644 index 0816086..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md +++ /dev/null @@ -1,392 +0,0 @@ -Code snippets are templates that make it easier to enter repeating code - patterns, such as loops or conditional-statements. - -In AVAP TM Dev Studio, snippets appear in IntelliSense - (Ctrl+Space) mixed with other suggestions, as well as in a - dedicated snippet picker ( Insert Snippet in the - Command Palette). There is also support for tab-completion: Enable it - with `"editor.tabCompletion": "on"` , type a{' '} - snippet prefix (trigger text), and press Tab to - insert a snippet. - -The snippet syntax follows the TextMate snippet syntax with the exceptions - of 'interpolated shell code' and the use of \u; both are not - supported. - -## Built-in snippets - -AVAP TM Dev Studio has built-in snippets for a number of - languages such as: JavaScript, TypeScript, Markdown, and PHP. - -You can see the available snippets for a language by running the{' '} - Insert Snippet command in the Command Palette to get a - list of the snippets for the language of the current file. However, keep - in mind that this list also includes user snippets that you have defined, - and any snippets provided by extensions you have installed. - -## Install snippets from the Marketplace - -Many extensions on the AVAP TM Dev Studio Marketplace include - snippets. You can search for extensions that contains snippets in the - Extensions view (Ctrl+Shift+X) using the - @category:"snippets" filter. - -If you find an extension you want to use, install it, then restart AVAP - TM Dev Studio and the new snippets will be available. - -## Create your own snippets - -You can easily define your own snippets without any extension. To create - or edit your own snippets, select Configure User Snippets {' '} - under File > Preferences , and then - select the language (by language identifier) for which the - snippets should appear, or the New Global Snippets file {' '} - option if they should appear for all languages. AVAP TM Dev - Studio manages the creation and refreshing of the underlying snippets - file(s) for you. - -Snippets files are written in JSON, support C-style comments, and can - define an unlimited number of snippets. Snippets support most TextMate - syntax for dynamic behavior, intelligently format whitespace based on the - insertion context, and allow easy multiline editing. - -Below is an example of a for loop snippet for JavaScript: - -```javascript -// in file 'Code/User/snippets/javascript.json' - - { - ` `"For Loop": { - ` `"prefix": ["for", "for-const"], - ` `"body": ["for (const ${2:element} of - ${1:array}) {", "\t$0", "}"], - ` `"description": "A for loop." - ` `} - - } -``` - -In the example above: - -* "For Loop" is the snippet name. It is displayed via IntelliSense if no description is provided. -* `prefix` defines one or more trigger words that display the snippet in IntelliSense. Substring matching is performed on prefixes, so in this case, "fc" could match "for-const". -* `body` is one or more lines of content, which will be joined as multiple lines upon insertion. Newlines and embedded tabs will be formatted according to the context in which the snippet is inserted. -* `description` is an optional description of the snippet displayed by IntelliSense. - -Additionally, the `body` of the example above has three - placeholders (listed in order of traversal):{' '} - `${1:array}` , `${2:element}` , - and `$0` . You can quickly jump to the next placeholder with - Tab, at which point you may edit the placeholder or jump to the next one. - The string after the colon : (if any) is the default text, for - example `element` in `${2:element}` . - Placeholder traversal order is ascending by number, starting from one; - zero is an optional special case that always comes last, and exits snippet - mode with the cursor at the specified position. - -### File template snippets - -You can add the isFileTemplate attribute to your snippet's definition - if the snippet is intended to populate or replace a file's contents. - File template snippets are displayed in a dropdown when you run the{' '} - Snippets: Populate File from Snippet command in a new or - existing file. - -## Snippet scope - -Snippets are scoped so that only relevant snippets are suggested. Snippets - can be scoped by either: - -Every snippet is scoped to one, several, or all - ("global") languages based on whether it is defined in: - -Single-language user-defined snippets are defined in a specific - language's snippet file (for example javascript.json), which - you can access by language identifier through{' '} - Snippets: Configure User Snippets . A snippet is only - accessible when editing the language for which it is defined. - -Multi-language and global user-defined snippets are all defined in - "global" snippet files (JSON with the file suffix - .code-snippets), which is also accessible through{' '} - Snippets: Configure User Snippets . In a global snippets - file, a snippet definition may have an additional scope property that - takes one or more language identifiers, which makes the snippet available - only for those specified languages. If no scope property is given, then - the global snippet is available in all languages. - -Most user-defined snippets are scoped to a single language, and so are - defined in a language-specific snippet file. - -You can also have a global snippets file (JSON with file suffix - .code-snippets) scoped to your project. Project-folder snippets are - created with the New Snippets file for ''... {' '} - option in the Snippets: Configure User Snippets dropdown - menu and are located at the root of the project in a .vscode folder. - Project snippet files are useful for sharing snippets with all users - working in that project. Project-folder snippets are similar to global - snippets and can be scoped to specific languages through the scope - property. - -## Snippet syntax - -The body of a snippet can use special constructs to control cursors and - the text being inserted. The following are supported features and their - syntaxes: - -With tabstops, you can make the editor cursor move inside a snippet. Use - $1, $2 to specify cursor locations. The number is the order in which - tabstops will be visited, whereas $0 denotes the final cursor position. - Multiple occurrences of the same tabstop are linked and updated in sync. - -Placeholders are tabstops with values, like ${1:foo}. The - placeholder text will be inserted and selected such that it can be easily - changed. Placeholders can be nested, like ${1:another - ${2:placeholder}}. - -Placeholders can have choices as values. The syntax is a comma-separated - enumeration of values, enclosed with the pipe-character, for example - ${1|one,two,three|}. When the snippet is inserted and the - placeholder selected, choices will prompt the user to pick one of the - values. - -With $name or ${name:default}, you can insert the value of a - variable. When a variable isn't set, its default or - the empty string is inserted. When a variable is unknown (that is, its - name isn't defined) the name of the variable is inserted and it is - transformed into a placeholder. - -The following variables can be used: - -* TM_SELECTED_TEXT The currently selected text or the empty string -* TM_CURRENT_LINE The contents of the current line -* TM_CURRENT_WORD The contents of the word under cursor or the empty string -* TM_LINE_INDEX The zero-index based line number -* TM_LINE_NUMBER The one-index based line number -* TM_FILENAME The filename of the current document -* TM_FILENAME_BASE The filename of the current document without its extensions -* TM_DIRECTORY The directory of the current document -* TM_FILEPATH The full file path of the current document -* RELATIVE_FILEPATH The relative (to the opened workspace or folder) file path of the current document -* CLIPBOARD The contents of your clipboard -* WORKSPACE_NAME The name of the opened workspace or folder -* WORKSPACE_FOLDER The path of the opened workspace or folder -* CURSOR_INDEX The zero-index based cursor number -* CURSOR_NUMBER The one-index based cursor number - -For inserting the current date and time: - -* CURRENT_YEAR The current year -* CURRENT_YEAR_SHORT The current year's last two digits -* CURRENT_MONTH The month as two digits (example '02') -* CURRENT_MONTH_NAME The full name of the month (example 'July') -* CURRENT_MONTH_NAME_SHORT The short name of the month (example 'Jul') -* CURRENT_DATE The day of the month as two digits (example '08') -* CURRENT_DAY_NAME The name of day (example 'Monday') -* CURRENT_DAY_NAME_SHORT The short name of the day (example 'Mon') -* CURRENT_HOUR The current hour in 24-hour clock format -* CURRENT_MINUTE The current minute as two digits -* CURRENT_SECOND The current second as two digits -* CURRENT_SECONDS_UNIX The number of seconds since the Unix epoch -* CURRENT_TIMEZONE_OFFSET The current UTC time zone offset as +HH:MM or -HH:MM (example -07:00). - -For inserting random values: - -* RANDOM 6 random Base-10 digits -* RANDOM_HEX 6 random Base-16 digits -* UUID A Version 4 UUID - -For inserting line or block comments, honoring the current language: - -* BLOCK_COMMENT_START Example output: in PHP /* or in HTML -* LINE_COMMENT Example output: in PHP // - -The snippet below inserts /* Hello World */ in JavaScript files and in - HTML files: - -```javascript -{ - ` `"hello": { - ` `"scope": "javascript,html", - ` `"prefix": "hello", - ` `"body": "$BLOCK\_COMMENT\_START Hello World - $BLOCK\_COMMENT\_END" - ` `} - - } -``` - -Transformations allow you to modify the value of a variable before it is - inserted. The definition of a transformation consists of three parts: - -The following example inserts the name of the current file without its - ending, so from foo.txt it makes foo. - -```javascript -${TM\_FILENAME/(.\*)\\..+$/$1/} - ` `| | | |` `| | | |-> no options - ` `| | |` `| | |-> references the contents of the first - ` `| | capture group - ` `| |` `| |-> regex to capture everything before - ` `| the final `.suffix` - ` `| - ` `|-> resolves to the filename -``` - -Like a Variable-Transform, a transformation of a placeholder allows - changing the inserted text for the placeholder when moving to the next tab - stop. The inserted text is matched with the regular expression and the - match or matches - depending on the options - are replaced with the - specified replacement format text. Every occurrence of a placeholder can - define its own transformation independently using the value of the first - placeholder. The format for Placeholder-Transforms is the same as for - Variable-Transforms. - -The examples are shown within double quotes, as they would appear inside a - snippet body, to illustrate the need to double escape certain characters. - Sample transformations and the resulting output for the filename - example-123.456-TEST.js. - -Below is the EBNF (extended Backus-Naur form) for snippets. With \ - (backslash), you can escape $, }, and . Within choice - elements, the backslash also escapes comma and pipe characters. Only the - characters required to be escaped can be escaped, so $ should not be - escaped within these constructs and neither $ or } should be escaped - inside choice constructs. - -```javascript -any ::= tabstop | placeholder | choice | variable | text - - tabstop ::= '$' int - ` `| '${' int '}' - ` `| '${' int transform '}' - - placeholder ::= '${' int ':' any '}' - - choice ::= '${' int '|' text (',' text)\* '|}' - - variable ::= '$' var | '${' var '}' - ` `| '${' var ':' any '}' - ` `| '${' var transform '}' - - transform ::= '/' regex '/' (format | text)+ '/' options - - format ::= '$' int | '${' int '}' - ` `| '${' int ':' '/upcase' | '/downcase' | '/capitalize' | - '/camelcase' | '/pascalcase' '}' - ` `| '${' int ':+' if '}' - ` `| '${' int ':?' if ':' else '}' - ` `| '${' int ':-' else '}' | '${' int ':' else - '}' - - regex ::= JavaScript Regular Expression value (ctor-string) - - options ::= JavaScript Regular Expression option (ctor-options) - - var ::= [\_a-zA-Z] [\_a-zA-Z0-9]\* - - int ::= [0-9]+ - - text ::= .\* - - if ::= text - - else ::= text -``` - -## Using TextMate snippets - -You can also use existing TextMate snippets (.tmSnippets) with - AVAP TM Dev Studio. See the Using TextMate Snippets topic in our - Extension API section to learn more. - -## Assign keybindings to snippets - -You can create custom keybindings to insert specific snippets. Open - keybindings.json ( - Preferences: Open Keyboard Shortcuts File ), which - defines all your keybindings, and add a keybinding passing - "snippet" as an extra argument: - -```javascript -{ - ` `"key": "cmd+k 1", - ` `"command": "editor.action.insertSnippet", - ` `"when": "editorTextFocus", - ` `"args": { - ` `"snippet": "console.log($1)$0" - ` `} - - } -``` - -The keybinding will invoke the Insert Snippet command but - instead of prompting you to select a snippet, it will insert the provided - snippet. You define the custom keybinding as usual with a keyboard - shortcut, command ID, and optional when clause context for when the - keyboard shortcut is enabled. - -Also, instead of using the snippet argument value to define your snippet - inline, you can reference an existing snippet by using the langId and name - arguments. The langId argument selects the language for which the snippet - denoted by name is inserted, e.g the sample below selects the myFavSnippet - that's available for csharp-files. - -```javascript -{ - ` `"key": "cmd+k 1", - ` `"command": "editor.action.insertSnippet", - ` `"when": "editorTextFocus", - ` `"args": { - ` `"langId": "csharp", - ` `"name": "myFavSnippet" - ` `} - - } -``` - -## Next steps - -* Command Line - AVAP TM Dev Studio has a rich command-line interface to open or diff files and install extensions. -* Extension API - Learn about other ways to extend AVAP TM Dev Studio. -* Snippet Guide - You can package snippets for use in AVAP TM {' '} Dev Studio. - -## Common questions - -### What if I want to use existing TextMate snippets from a .tmSnippet file? - -You can easily package TextMate snippets files for use in AVAP - TM Dev Studio. See Using TextMate Snippets in our Extension API - documentation. - -### How do I have a snippet place a variable in the pasted script? - -To have a variable in the pasted script, you need to escape the - '$' of the `$variable` name so that it isn't parsed - by the snippet expansion phase. - -```javascript -"VariableSnippet":{ - ` `"prefix": "\_Var", - ` `"body": "\\$MyVar = 2", - ` `"description": "A basic snippet that places a variable into - script with the $ prefix" - ` `} -``` - -This results in the pasted snippet as: - -```javascript -$MyVar = 2 -``` - -### Can I remove snippets from IntelliSense? - -Yes, you can hide specific snippets from showing in IntelliSense - (completion list) by selecting the{' '} - Hide from IntelliSense button to the right of snippet - items in the Insert Snippet command dropdown. - -You can still select the snippet with the Insert Snippet {' '} - command but the hidden snippet won't be displayed in IntelliSense. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md deleted file mode 100644 index be0acef..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md +++ /dev/null @@ -1,1155 +0,0 @@ -Lots of tools exist to automate tasks like linting, building, packaging, - testing, or deploying software systems. Examples include the TypeScript - Compiler, linters like ESLint and TSLint as well as build systems like - Make, Ant, Gulp, Jake, Rake, and MSBuild. - -These tools are mostly run from the command line and automate jobs inside - and outside the inner software development loop (edit, compile, test, - and debug). Given their importance in the development life cycle, it - is helpful to be able to run tools and analyze their results from within - AVAP TM Dev Studio. Tasks in AVAP TM Dev Studio can be - configured to run scripts and start processes so that many of these - existing tools can be used from within AVAP TM Dev Studio - without having to enter a command line or write new code. Workspace or - folder specific tasks are configured from the `tasks.json` file - in the `.vscode` folder for a workspace. - -Extensions can also contribute tasks using a Task Provider, and these - contributed tasks can add workspace-specific configurations defined in the{' '} - `tasks.json` file. - -## TypeScript Hello World - -Let's start with a simple "Hello World" TypeScript program - that we want to compile to JavaScript. - -Create an empty folder "mytask", generate a{' '} - `tsconfig.json` file and start AVAP TM Dev Studio - from that folder. - -```javascript -mkdir mytask - - cd mytask - - tsc --init - - code . -``` - -Now create a HelloWorld.ts file with the following content - -```javascript -function sayHello(name: string): void { - ` `console.log(`Hello ${name}!`); - - } - - - sayHello('Dave'); -``` - -Pressing `Ctrl+Shift+B` or running{' '} - Run Build Task from the global Terminal {' '} - menu show the following picker: - -The first entry executes the TypeScript compiler and translates the - TypeScript file to a JavaScript file. When the compiler has finished, - there should be a `HelloWorld.js` file. The second entry starts - the TypeScript compiler in watch mode. Every save to the{' '} - `HelloWorld.ts` file will regenerate the{' '} - `HelloWorld.js` file. - -You can also define the TypeScript build or watch task as the default - build task so that it is executed directly when triggering{' '} - Run Build Task (Ctrl+Shift+B). To do so, select{' '} - Configure Default Build Task from the global{' '} - Terminal menu. This shows you a picker with the available - build tasks. Select tsc: build or{' '} - tsc: watch and AVAP TM Dev Studio will generate - a `tasks.json` file. The one shown below makes the{' '} - tsc: build task the default build task: - -```javascript -{ - ` `// See (link) - ` `// for the documentation about the tasks.json format - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"type": "typescript", - ` `"tsconfig": "tsconfig.json", - ` `"problemMatcher": ["$tsc"], - ` `"group": { - ` `"kind": "build", - ` `"isDefault": true - ` `} - ` `} - ` `] - - } -``` - -The `tasks.json` example above does not define a new task. It - annotates the tsc: build tasks contributed by AVAP - TM Dev Studio's TypeScript extension to be the default - build task. You can now execute the TypeScript compiler by pressing{' '} - `Ctrl+Shift+B` . - -## Task auto-detection - -AVAP TM Dev Studio currently auto-detects tasks for the - following systems: Gulp, Grunt, Jake, and npm. We are working with the - corresponding extension authors to add support for Maven and the C# dotnet - command as well. If you develop a JavaScript application using Node.js as - the runtime, you usually have a `package.json` file describing - your dependencies and the scripts to run. If you have cloned the - eslint-starter example, then executing Run Tasks from the - global menu shows the following list: - -If you have not already done so, install the necessary npm modules by - running npm install. Now open the `server.js` file and add a - semicolon to the end of a statement (note the ESLint starter assumes - statements without a semicolon) and execute the{' '} - Run Tasks again. This time select the{' '} - npm: lint task. When prompted for the problem matcher to - use, select ESLint stylish - -Executing the task produces one error, shown in the{' '} - Problems view: - -In addition, AVAP TM Dev Studio created a tasks.json file with - the following content: - -```javascript -{ - ` `// See (link) - ` `// for the documentation about the tasks.json format - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"type": "npm", - ` `"script": "lint", - ` `"problemMatcher": ["$eslint-stylish"] - ` `} - ` `] - - } -``` - -This instructs AVAP TM Dev Studio to scan the output of the{' '} - npm lint script for problems using the ESLint stylish - format. - -For Gulp, Grunt, and Jake, the task auto-detection works the same. Below - is an example of the tasks detected for the AVAP TM Dev - Studio-node-debug extension. - -Task auto detection can be disabled using the following settings: - -```javascript -{ - ` `"typescript.tsc.autoDetect": "off", - ` `"grunt.autoDetect": "off", - ` `"jake.autoDetect": "off", - ` `"gulp.autoDetect": "off", - ` `"npm.autoDetect": "off" - - } -``` - -## Custom tasks - -Not all tasks or scripts can be auto-detected in your workspace. Sometimes - it is necessary to define your own custom tasks. Assume you have a script - to run your tests in order to set up some environment correctly. The - script is stored in a script folder inside your workspace and named{' '} - `test.sh` for Linux and macOS and `test.cmd` for - Windows. Run Configure Tasks from the global{' '} - Terminal menu and select the{' '} - Create tasks.json file from template entry. This opens - the following picker: - -We are working on more auto-detection support, so this list will get - smaller and smaller in the future. Since we want to write our own custom - task, select Others from the list. This opens the{' '} - `tasks.json` file with a task skeleton. Replace the contents - with the following: - -```javascript -{ - ` `// See (link) - ` `// for the documentation about the tasks.json format - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"label": "Run tests", - ` `"type": "shell", - ` `"command": "./scripts/test.sh", - ` `"windows": { - ` `"command": ".\\scripts\\test.cmd" - ` `}, - ` `"group": "test", - ` `"presentation": { - ` `"reveal": "always", - ` `"panel": "new" - ` `} - ` `} - ` `] - - } -``` - -The task's properties have the following semantic: - -* label : The task's label used in the user interface. -* type : The task's type. For a custom task, this can either be `shell` or `process` . If{' '} `shell` is specified, the command is interpreted as a shell command (for example: bash, cmd, or PowerShell). If{' '} `process` is specified, the command is interpreted as a process to execute. -* command : The actual command to execute. -* windows : Any Windows specific properties. Will be used instead of the default properties when the command is executed on the Windows operating system. -* group : Defines to which group the task belongs. In the example, it belongs to the `test` group. Tasks that belong to the test group can be executed by running Run Test Task {' '} from the Command Palette . -* presentation : Defines how the task output is handled in the user interface. In this example, the Integrated Terminal showing the output is `always` revealed and a `new` terminal is created on every task run. -* options : Override the defaults for `cwd` {' '} (current working directory), `env` (environment variables), or shell (default shell). Options can be set per task but also globally or per platform. Environment variables configured here can only be referenced from within your task script or process and will not be resolved if they are part of your args, command, or other task attributes. -* runOptions : Defines when and how a task is run. - -You can see the full set of task properties and values with IntelliSense - in your `tasks.json` file. Bring up suggestions with{' '} - Trigger Suggest (Ctrl+Space) and read the - descriptions on hover or with the Read More... {' '} - ('i') flyout. - -You can also review the tasks.json schema. - -Shell commands need special treatment when it comes to commands and - arguments that contain spaces or other special characters like{' '} - `$` . By default, the task system supports the following - behavior: - -* If a single command is provided, the task system passes the command as is to the underlying shell. If the command needs quoting or escaping to function properly, the command needs to contain the proper quotes or escape characters. For example, to list the directory of a folder containing spaces in its name, the command executed in bash should look like this: `ls 'folder with spaces'` . { ` ` `"label": "dir", ` `"type": "shell", ` `"command": "dir 'folder with spaces'" } ` -* If a command and arguments are provided, the task system will use single quotes if the command or arguments contain spaces. For{' '} `cmd.exe` , double quotes are used. A shell command like below will be executed in PowerShell as{' '} `dir 'folder with spaces'` . ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": ["folder with spaces"] } ` -* If you want to control how the argument is quoted, the argument can be a literal specifying the value and a quoting style. The example below uses escaping instead of quoting for an argument with spaces. ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": [ ` `{ ` `"value": "folder with spaces", ` `"quoting": "escape" ` `} ` `] } ` - -Besides escaping, the following values are supported: - -* strong : Uses the shell's strong quoting mechanism, which suppresses all evaluations inside the string. Under PowerShell and for shells under Linux and macOS, single quotes are used ('). For cmd.exe, " is used. -* weak : Uses the shell's weak quoting mechanism, which still evaluates expression inside the string (for example, environment variables). Under PowerShell and for shells under Linux and macOS, double quotes are used ("). cmd.exe doesn't support weak quoting so AVAP TM Dev Studio uses " as well. - -If the command itself contains spaces, AVAP TM Dev Studio will - by default strong quote the command as well. As with arguments, the user - can control the quoting of the command using the same literal style. - -There are more task properties to configure your workflow. You can use - IntelliSense with Ctrl+Space to get an overview of the valid properties. - -!Tasks IntelliSense - -In addition to the global menu bar, task commands can be accessed using - the Command Palette (Ctrl+Shift+P). You can - filter on 'task' and can see the various task related commands. - -!Tasks in Command Palette - -### Compound tasks - -You can also compose tasks out of simpler tasks with the{' '} - `dependsOn` property. For example, if you have a workspace with - a client and server folder and both contain a build script, you can create - a task that starts both build scripts in separate terminals. If you list - more than one task in the `dependsOn` property, they are - executed in parallel by default. - -The `tasks.json` file looks like this: - -```javascript -{ - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"label": "Client Build", - ` `"command": "gulp", - ` `"args": ["build"], - ` `"options": { - ` `"cwd": "${workspaceFolder}/client" - ` `} - ` `}, - ` `{ - ` `"label": "Server Build", - ` `"command": "gulp", - ` `"args": ["build"], - ` `"options": { - ` `"cwd": "${workspaceFolder}/server" - ` `} - ` `}, - ` `{ - ` `"label": "Build", - ` `"dependsOn": ["Client Build", "Server Build"] - ` `} - ` `] - - } -``` - -If you specify " `dependsOrder` ": " - `sequence` ", then your task dependencies are executed in - the order they are listed in `dependsOn` . Any background/watch - tasks used in `dependsOn` with " `dependsOrder` - ": " `sequence` " must have a problem matcher that - tracks when they are "done". The following task runs task Two, - task Three, and then task One. - -```javascript -{ - ` `"label": "One", - ` `"type": "shell", - ` `"command": "echo Hello ", - ` `"dependsOrder": "sequence", - ` `"dependsOn": ["Two", "Three"] - - } -``` - -### User level tasks - -You can create user level tasks that are not tied to a specific workspace - or folder using the Tasks: Open User Tasks command. Only{' '} - `shell` and `process` tasks can be used here since - other task types require workspace information. - -## Output behavior - -Sometimes you want to control how the Integrated Terminal panel behaves - when running tasks. For instance, you may want to maximize editor space - and only look at task output if you think there is a problem. The behavior - of the terminal can be controlled using the presentation property of a - task. It offers the following properties: - -* reveal : Controls whether the Integrated Terminal panel is brought to front. Valid values are:{' '} `always` - The panel is always brought to front. This is the default. `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. -* `always` - The panel is always brought to front. This is the default. -* `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). -* `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. -* revealProblems : Controls whether the Problems panel is revealed when running this task or not. Takes precedence over option{' '} `reveal` . Default is `never` .{' '} `always` - Always reveals the Problems panel when this task is executed. `onProblem` - Only reveals the Problems panel if a problem is found. `never` - Never reveals the Problems panel when this task is executed. -* `always` - Always reveals the Problems panel when this task is executed. -* `onProblem` - Only reveals the Problems panel if a problem is found. -* `never` - Never reveals the Problems panel when this task is executed. -* focus : Controls whether the terminal is taking input focus or not. Default is `false` . -* echo : Controls whether the executed command is echoed in the terminal. Default is `true` . -* showReuseMessage : Controls whether to show the "Terminal will be reused by tasks, press any key to close it" message. -* panel : Controls whether the terminal instance is shared between task runs. Possible values are:{' '} `shared` - The terminal is shared and the output of other task runs are added to the same terminal. `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. `new` - Every execution of that task is using a new clean terminal. -* `shared` - The terminal is shared and the output of other task runs are added to the same terminal. -* `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. -* `new` - Every execution of that task is using a new clean terminal. -* clear : Controls whether the terminal is cleared before this task is run. Default is false. -* close : Controls whether the terminal the task runs in is closed when the task exits. Default is false. -* group : Controls whether the task is executed in a specific terminal group using split panes. Tasks in the same group (specified by a string value) will use split terminals to present instead of a new terminal panel. - -You can modify the terminal panel behavior for auto-detected tasks as - well. For example, if you want to change the output behavior for the{' '} - npm: run lint from the ESLint example from above, add the{' '} - `presentation` property to it: - -```javascript -{ - ` `// See (link) - ` `// for the documentation about the tasks.json format - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"type": "npm", - ` `"script": "lint", - ` `"problemMatcher": ["$eslint-stylish"], - ` `"presentation": { - ` `"reveal": "never" - ` `} - ` `} - ` `] - - } -``` - -You can also mix custom tasks with configurations for detected tasks. A{' '} - `tasks.json` that configures the npm: run lint {' '} - task and adds a custom Run Test tasks looks like this: - -```javascript -{ - ` `// See (link) - ` `// for the documentation about the tasks.json format - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"type": "npm", - ` `"script": "lint", - ` `"problemMatcher": ["$eslint-stylish"], - ` `"presentation": { - ` `"reveal": "never" - ` `} - ` `}, - ` `{ - ` `"label": "Run tests", - ` `"type": "shell", - ` `"command": "./scripts/test.sh", - ` `"windows": { - ` `"command": ".\\scripts\\test.cmd" - ` `}, - ` `"group": "test", - ` `"presentation": { - ` `"reveal": "always", - ` `"panel": "new" - ` `} - ` `} - ` `] - - } -``` - -## Run behavior - -You can specify a task's run behaviors using the{' '} - `runOptions` property: - -* reevaluateOnRerun : Controls how variables are evaluated when a task is executed through the Rerun Last Task {' '} command. The default is `true` , meaning that variables will be reevaluated when a task is rerun. When set to `false` the resolved variable values from the previous run of the task will be used. -* runOn : Specifies when a task is run.{' '} `default` - The task will only be run when executed through the Run Task command. `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . -* `default` - The task will only be run when executed through the Run Task command. -* `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . - -## Customizing auto-detected task - -As mentioned above, you can customize auto-detected tasks in the{' '} - `tasks.json` file. You usually do so to modify presentation - properties or to attach a problem matcher to scan the task's output - for errors and warnings. You can customize a task directly from the{' '} - Run Task list by pressing the gear icon to the right to - insert the corresponding task reference into the `tasks.json` {' '} - file. Assume you have the following Gulp file to lint JavaScript files - using ESLint (the file is taken from (Link)): - -```javascript -const gulp = require('gulp'); - - const eslint = require('gulp-eslint'); - - - gulp.task('lint', () => { - ` `// ESLint ignores files with "node\_modules" paths. - ` `// So, it's best to have gulp ignore the directory as well. - ` `// Also, Be sure to return the stream from the task; - ` `// Otherwise, the task may end before the stream has finished. - ` `return ( - ` `gulp - - .src(['\*\*/\*.js', '!node\_modules/\*\*']) - ` `// eslint() attaches the lint output to the "eslint" - property - ` `// of the file object so it can be used by other modules. - - .pipe(eslint()) - ` `// eslint.format() outputs the lint results to the - console. - ` `// Alternatively use eslint.formatEach() (see - Docs). - - .pipe(eslint.format()) - ` `// To have the process exit with an error code (1) on - ` `// lint error, return the stream and pipe to failAfterError - last. - - .pipe(eslint.failAfterError()) - ` `); - - }); - - gulp.task('default', ['lint'], function() { - ` `// This will only run if the lint task is successful... - - }); -``` - -Executing Run Task from the global{' '} - Terminal menu will show the following picker: - -Press the gear icon. This will create the following{' '} - `tasks.json` file: - -```javascript -{ - ` `// See (link) - ` `// for the documentation about the tasks.json format - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"type": "gulp", - ` `"task": "default", - ` `"problemMatcher": [] - ` `} - ` `] - - } -``` - -Usually you would now add a problem matcher (in this case{' '} - `$eslint-stylish` ) or modify the presentation settings. - -## Processing task output with problem matchers - -AVAP TM Dev Studio can process the output from a task with a - problem matcher. Problem matchers scan the task output text for known - warning or error strings, and report these inline in the editor and in the - Problems panel. AVAP TM Dev Studio ships with several problem - matchers 'in-the-box': - -* TypeScript : `$tsc` assumes that file names in the output are relative to the opened folder. -* TypeScript Watch : `$tsc` -watch matches problems reported from the tsc compiler when executed in watch mode. -* JSHint : `$jshint` assumes that file names are reported as an absolute path. -* JSHint Stylish : `$jshint-stylish` assumes that file names are reported as an absolute path. -* ESLint Compact : `$eslint-compact` assumes that file names in the output are relative to the opened folder. -* ESLint Stylish : `$eslint-stylish` assumes that file names in the output are relative to the opened folder. -* Go : `$go` matches problems reported from the go compiler. Assumes that file names are relative to the opened folder. -* CSharp and VB Compiler : `$mscompile` assumes that file names are reported as an absolute path. -* Lessc compiler : `$lessc` assumes that file names are reported as absolute path. -* Node Sass compiler : `$node-sass` assumes that file names are reported as an absolute path. - -You can also create your own problem matcher, which we'll discuss in a - later section. - -## Binding keyboard shortcuts to tasks - -If you need to run a task frequently, you can define a keyboard shortcut - for the task. - -For example, to bind `Ctrl+H` to the Run tests {' '} - task from above, add the following to your `keybindings.json` {' '} - file: - -```javascript -{ - ` `"key": "ctrl+h", - ` `"command": "workbench.action.tasks.runTask", - ` `"args": "Run tests" - - } -``` - -## Variable substitution - -When authoring tasks configurations, it is useful to have a set of - predefined common variables such as the active file ( - `${file}` ) or workspace root folder ( - `${workspaceFolder}` ). AVAP TM Dev - Studio supports variable substitution inside strings in the{' '} - `tasks.json` file and you can see a full list of predefined - variables in the Variables Reference. - -Below is an example of a custom task configuration that passes the current - opened file to the TypeScript compiler. - -```javascript -{ - ` `"label": "TypeScript compile", - ` `"type": "shell", - ` `"command": "tsc ${file}", - ` `"problemMatcher": ["$tsc"] - - } -``` - -Similarly, you can reference your project's configuration settings by - prefixing the name with ${config: . For example,{' '} - `${config:python.formatting.autopep8Path}` returns - the Python extension setting `formatting.autopep8Path` . - -Below is an example of a custom task configuration, which executes - autopep8 on the current file using the autopep8 executable defined by the{' '} - `python.formatting.autopep8Path` setting: - -```javascript -{ - ` `"label": "autopep8 current file", - ` `"type": "process", - ` `"command": - "${config:python.formatting.autopep8Path}", - ` `"args": ["--in-place", "${file}"] - - } -``` - -If you want to specify the selected Python interpreter used by the Python - extension for `tasks.json` or `launch.json` , you can - use the `${command:python.interpreterPath}` command. - -If simple variable substitution isn't enough, you can also get input - from the user of your task by adding an `inputs` section to - your `tasks.json` file. - -For more information about `inputs` , see the Variables - Reference. - -## Operating system specific properties - -The task system supports defining values (for example, the command to - be executed) specific to an operating system. To do so, put an - operating system specific literal into the `tasks.json` file - and specify the corresponding properties inside that literal. - -Below is an example that uses the Node.js executable as a command and is - treated differently on Windows and Linux: - -```javascript -{ - ` `"label": "Run Node", - ` `"type": "process", - ` `"windows": { - ` `"command": "C:\\Program Files\\nodejs\\node.exe" - ` `}, - ` `"linux": { - ` `"command": "/usr/bin/node" - ` `} - - } -``` - -Valid operating properties are `windows` for Windows, linux for{' '} - `Linux` , and `osx` for macOS. Properties defined in - an operating system specific scope override properties defined in the task - or global scope. - -## Global tasks - -Task properties can also be defined in the global scope. If present, they - will be used for specific tasks unless they define the same property with - a different value. In the example below, there is a global{' '} - `presentation` property, which defines that all tasks should be - executed in a new panel: - -```javascript -{ - ` `"label": "Run Node", - ` `"type": "process", - ` `"windows": { - ` `"command": "C:\\Program Files\\nodejs\\node.exe" - ` `}, - ` `"linux": { - ` `"command": "/usr/bin/node" - ` `} - - } -``` - -### Character escaping in PowerShell - -When the default shell is PowerShell, or when a task is configured to use - PowerShell, you might see unexpected space and quote escaping. The - unexpected escaping only occurs with cmdlets because AVAP TM Dev - Studio doesn't know if your command contains cmdlets. Example 1 below - shows a case where you'll get escaping that doesn't work with - PowerShell. Example 2 shows the best, cross-platform, way to get good - escaping. In some cases, you might not be able to follow example 2 and - you'll need to do the manual escaping shown in example 3. - -```javascript -"tasks": [` `{ - ` `"label": "PowerShell example 1 (unexpected escaping)", - ` `"type": "shell", - ` `"command": "Get-ChildItem \"Folder With Spaces\"" - ` `}, - ` `{ - ` `"label": "PowerShell example 2 (expected escaping)", - ` `"type": "shell", - ` `"command": "Get-ChildItem", - ` `"args": ["Folder With Spaces"] - ` `}, - ` `{ - ` `"label": "PowerShell example 3 (manual escaping)", - ` `"type": "shell", - ` `"command": "& Get-ChildItem \\\"Folder With Spaces\\\"" - ` `} - ] -``` - -## Changing the encoding for a task output - -Tasks frequently act with files on disk. If these files are stored on disk - with an encoding different than the system encoding, you need to let the - command executed as a task know which encoding to use. Since this depends - on the operating system and the shell used, there is no general solution - to control this. Below are advice and examples on how to make it work. - -If you need to tweak the encoding, you should check whether it makes sense - to change the default encoding used by your operating system or at least - change it for the shell you use by tweaking the shell's profile file. - -If you only need to tweak it for a specific task, then add the OS-specific - command necessary to change the encoding to the tasks command line. The - following example is for Windows using code page of 437 as its default. - The task shows the output of a file containing Cyrillic characters and - therefore needs code page 866. The task to list the file looks like this - assuming that the default shell is set to `cmd.exe` : - -```javascript -{ - ` `// See (link) - ` `// for the documentation about the tasks.json format - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"label": "more", - ` `"type": "shell", - ` `"command": "chcp 866 && more russian.txt", - ` `"problemMatcher": [] - ` `} - ` `] - - } -``` - -If the task is executed in `PowerShell` , the command needs to - read like this `chcp 866` ; more `russian.txt` . On - Linux and macOS, the locale command can be used to inspect the{' '} - `locale` and tweak the necessary environment variables. - -## Examples of tasks in action - -To highlight the power of tasks, here are a few examples of how AVAP - TM Dev Studio can use tasks to integrate external tools like - linters and compilers. - -### Transpiling TypeScript to JavaScript - -The TypeScript topic includes an example that creates a task to transpile - TypeScript to JavaScript and observe any related errors from within AVAP - TM Dev Studio. - -### Transpiling Less and SCSS into CSS - -The CSS topic provides examples of how to use Tasks to generate CSS files. - -## Defining a problem matcher - -AVAP TM Dev Studio ships some of the most common problem - matchers 'in-the-box'. However, there are lots of compilers and - linting tools out there, all of which produce their own style of errors - and warnings so you may want to create your own problem matcher. - -We have a `helloWorld.c` program in which the developer - mistyped printf as prinft . Compiling it - with gcc will produce the following warning: - -```javascript -helloWorld.c:5:3: warning: implicit declaration of function ‘prinft’ -``` - -We want to produce a problem matcher that can capture the message in the - output and show a corresponding problem in AVAP TM Dev Studio. - Problem matchers heavily rely on regular expressions. The section below - assumes you are familiar with regular expressions. - -A matcher that captures the above warning (and errors) looks like - this: - -```javascript -{ - ` `// The problem is owned by the cpp language service. - ` `"owner": "cpp", - ` `// The file name for reported problems is relative to the - opened folder. - ` `"fileLocation": ["relative", "${workspaceFolder}"], - ` `// The actual pattern to match problems in the output. - ` `"pattern": { - ` `// The regular expression. Example to match: helloWorld.c:5:3: - warning: implicit declaration of function ‘printf’ - [-Wimplicit-function-declaration] - ` `"regexp": - "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", - ` `// The first match group matches the file name which is - relative. - ` `"file": 1, - ` `// The second match group matches the line on which the problem - occurred. - ` `"line": 2, - ` `// The third match group matches the column at which the - problem occurred. - ` `"column": 3, - ` `// The fourth match group matches the problem's severity. Can - be ignored. Then all problems are captured as errors. - ` `"severity": 4, - ` `// The fifth match group matches the message. - ` `"message": 5` `} - - } -``` - -Note that the file, line, and message properties are mandatory. The{' '} - `fileLocation` specifies whether the file paths that are - produced by the task output and matched in the problem are{' '} - `absolute` or `relative` . If the task produces both - absolute and relative paths, you can use the `autoDetect` file - location. With `autoDetect` , paths are first tested as absolute - paths, and if the file doesn't exist then the path is assumed to be - relative. - -Here is a finished tasks.json file with the code above (comments - removed) wrapped with the actual task details: - -```javascript -{ - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"label": "build", - ` `"command": "gcc", - ` `"args": ["-Wall", "helloWorld.c", "-o", "helloWorld"], - ` `"problemMatcher": { - ` `"owner": "cpp", - ` `"fileLocation": ["relative", "${workspaceFolder}"], - ` `"pattern": { - ` `"regexp": - "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", - ` `"file": 1, - ` `"line": 2, - ` `"column": 3, - ` `"severity": 4, - ` `"message": 5` `} - ` `} - ` `} - ` `] - - } -``` - -Running it inside AVAP TM Dev Studio and pressing Ctrl+Shift+M - to get the list of problems gives you the following output: - -There are a couple more properties that can be used inside a pattern. - These are: - -* location - If the problem location is line or line,column or startLine,startColumn,endLine,endColumn, then our generic location match group can be used. -* endLine - The match group index for the problem's end line. Can be omitted if no end line value is provided by the compiler. -* endColumn - The match group index for the problem's end column. Can be omitted if no end column value is provided by the compiler. -* code - The match group index for the problem's code. Can be omitted if no code value is provided by the compiler. - -You can also define a problem matcher that captures only a file. To do so, - define a `pattern` with the optional `kind` {' '} - attribute set to `file` . In this case, there is no need to - provide a `line` or `location` property. - -## Defining a multiline problem matcher - -Some tools spread problems found in a source file over several lines, - especially if stylish reporters are used. An example is ESLint; in stylish - mode it produces output like this: - -```javascript -test.js - ` `1:0 error Missing "use strict" statement strict - - ✖ 1 problems (1 errors, 0 warnings) -``` - -Our problem matcher is line-based so we need to capture the file name - (test.js) with a different regular expression than the actual - problem location and message (1:0 error Missing "use strict" - statement). - -To do this, use an array of problem patterns for the `pattern` {' '} - property. This way you define a pattern per each line you want to match. - -The following problem pattern matches the output from ESLint in stylish - mode - but still has one small issue that we need to resolve next. The - code below has a first regular expression to capture the file name and the - second to capture the line, column, severity, message, and error code: - -```javascript -{ - ` `"owner": "javascript", - ` `"fileLocation": ["relative", "${workspaceFolder}"], - ` `"pattern": [` `{ - ` `"regexp": "^([^\\s].\*)$", - ` `"file": 1` `}, - ` `{ - ` `"regexp": - "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", - ` `"line": 1, - ` `"column": 2, - ` `"severity": 3, - ` `"message": 4, - ` `"code": 5` `} - ` `] - - } -``` - -However, this pattern will not work if there is more than one problem on a - resource. For instance, imagine the following output from ESLint: - -```javascript -test.js - ` `1:0 error Missing "use strict" statement strict - ` `1:9 error foo is defined but never used no-unused-vars - ` `2:5 error x is defined but never used no-unused-vars - ` `2:11 error Missing semicolon semi - ` `3:1 error "bar" is not defined no-undef - ` `4:1 error Newline required at end of file but not found - eol-last - - ✖ 6 problems (6 errors, 0 warnings) -``` - -The pattern's first regular expression will match "test.js", - the second "1:0 error ...". The next line "1:9 error - ..." is processed but not matched by the first regular expression and - so no problem is captured. - -To make this work, the last regular expression of a multiline pattern can - specify the `loop` property. If set to true, it instructs the - task system to apply the last pattern of a multiline matcher to the lines - in the output as long as the regular expression matches. - -The information captured by the first pattern, which in this case matches{' '} - `test.js` , will be combined with each of the subsequent lines - that match the `loop` pattern to create multiple problems. In - this example, six problems would be created. - -Here is a problem matcher to fully capture ESLint stylish problems: - -```javascript -{ - ` `"owner": "javascript", - ` `"fileLocation": ["relative", "${workspaceFolder}"], - ` `"pattern": [` `{ - ` `"regexp": "^([^\\s].\*)$", - ` `"file": 1` `}, - ` `{ - ` `"regexp": - "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", - ` `"line": 1, - ` `"column": 2, - ` `"severity": 3, - ` `"message": 4, - ` `"code": 5, - ` `"loop": true - ` `} - ` `] - - } -``` - -## Modifying an existing problem matcher - -If an existing problem matcher is close to what you need, you can modify - it in your `tasks.json` task. For example, the{' '} - `$tsc-watch` problem matcher only applies to closed documents. - If you want to have it apply to all documents you can modify it: - -```javascript -{ - ` `"type": "npm", - ` `"script": "watch", - ` `"problemMatcher": { - ` `"base": "$tsc-watch", - ` `"applyTo": "allDocuments" - ` `}, - ` `"isBackground": true - - } -``` - -Other modifiable problem matcher properties include{' '} - `background` , `fileLocation` , `owner` ,{' '} - `pattern` , `severity` , and `source` . - -## Background / watching tasks - -Some tools support running in the background while watching the file - system for changes and then triggering an action when a file changes on - disk. With `Gulp` such functionality is provided through the - npm module gulp-watch. The TypeScript compiler `tsc` has built - in support for this via the `--watch` command line option. - -To provide feedback that a background task is active in AVAP TM {' '} - Dev Studio and producing problem results, a problem matcher has to use - additional information to detect these state changes in the output. - Let's take the `tsc` compiler as an example. When the - compiler is started in watch mode, it prints the following additional - information to the console: - -```javascript -\> tsc --watch - - 12:30:36 PM - Compilation complete. Watching for file changes. -``` - -When a file changes on disk that contains a problem, the following output - appears: - -```javascript -12:32:35 PM - File change detected. Starting incremental compilation... - - src/messages.ts(276,9): error TS2304: Cannot find name - 'candidate'. - - 12:32:35 PM - Compilation complete. Watching for file changes. -``` - -Looking at the output shows the following pattern: - -* The compiler runs when{' '} `File change detected. Starting incremental compilation...` {' '} is printed to the console. -* The compiler stops when C `ompilation complete. Watching for file changes` . is printed to the console. -* Between those two strings problems are reported. -* The compiler also runs once the initial start (without printing{' '} `File change detected. Starting incremental compilation` ... to the console). - -To capture this information, a problem matcher can provide a{' '} - `background` property. - -For the `tsc` compiler, an appropriate `background` {' '} - property looks like this: - -```javascript -"background": { - ` `"activeOnStart": true, - ` `"beginsPattern": - "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: - AM| PM)? - File change detected\\. Starting incremental - compilation\\.\\.\\.", - ` `"endsPattern": - "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: - AM| PM)? - Compilation complete\\. Watching for file changes\\." - - } -``` - -In addition to the `background` property on the problem - matcher, the task itself has to be marked as `isBackground` so - that the task keeps running in the background. - -A full handcrafted `tasks.json` for a `tsc` task - running in watch mode looks like this: - -```javascript -{ - ` `"version": "2.0.0", - ` `"tasks": [` `{ - ` `"label": "watch", - ` `"command": "tsc", - ` `"args": ["--watch"], - ` `"isBackground": true, - ` `"problemMatcher": { - ` `"owner": "typescript", - ` `"fileLocation": "relative", - ` `"pattern": { - ` `"regexp": - "^([^\\s].\*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s\*:\\s\*(.\*)$", - ` `"file": 1, - ` `"location": 2, - ` `"severity": 3, - ` `"code": 4, - ` `"message": 5` `}, - ` `"background": { - ` `"activeOnStart": true, - ` `"beginsPattern": - "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: - AM| PM)? - File change detected\\. Starting incremental - compilation\\.\\.\\.", - ` `"endsPattern": - "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: - AM| PM)? - Compilation complete\\. Watching for file changes\\." - ` `} - ` `} - ` `} - ` `] - - } -``` - -## Next steps - -That was tasks - let's keep going... - -* tasks.json Schema - You can review the full `tasks.json` {' '} schema and descriptions. -* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. -* Code Navigation - Move quickly through your source code. -* Language Support - Learn about our supported programming languages, both shipped with AVAP TM Dev Studio and through community extensions. -* Debugging - Debug your source code directly in the AVAP TM Dev Studio editor. - -## Common questions - -### Can a task use a different shell than the one specified for the Integrated - Terminal? - -Yes. You can use the " - `terminal.integrated.automationProfile.\*` " setting to set - the shell that will be used for all automation in AVAP TM Dev - Studio, which includes Tasks. - -```javascript -` `"terminal.integrated.automationProfile.windows": { - ` `"path": "cmd.exe" - ` `} -``` - -Alternatively, you can override a task's shell with the{' '} - `options.shell` property. You can set this per task, globally, - or per platform. For example, to use cmd.exe on Windows, your{' '} - `tasks.json` would include: - -```javascript -` `"version": "2.0.0", - ` `"windows": { - ` `"options": { - ` `"shell": { - ` `"executable": "cmd.exe", - ` `"args": [` `"/d", "/c" - ` `] - ` `} - ` `} - ` `}, - - ... -``` - -### Can a background task be used as a prelaunchTask in launch.json? - -Yes. Since a background task will run until killed, a background task on - its own has no signal that it has "completed". To use a - background task as a `prelaunchTask` , you must add an - appropriate background `problemMatcher` to the background task - so that there is a way for the task system and debug system to know that - the task "finished". - -Your task could be: - -```javascript -{ - ` `"type": "npm", - ` `"script": "watch", - ` `"problemMatcher": "$tsc-watch", - ` `"isBackground": true - - } -``` - -You can then use the task as a prelaunchTask in your{' '} - `launch.json` file: - -```javascript -{ - ` `"name": "Launch Extension", - ` `"type": "extensionHost", - ` `"request": "launch", - ` `"runtimeExecutable": "${execPath}", - ` `"args": - ["--extensionDevelopmentPath=${workspaceRoot}"], - ` `"stopOnEntry": false, - ` `"sourceMaps": true, - ` `"outFiles": ["${workspaceRoot}/out/src/\*\*/\*.js"], - ` `"preLaunchTask": "npm: watch" - - } -``` - -For more on background tasks, go to Background / watching tasks. - -### Why do I get "command not found" when running a task? - -The message "command not found" happens when the task command - you're trying to run is not recognized by your terminal as something - runnable. Most often, this occurs because the command is configured as - part of your shell's startup scripts. Tasks are run as non-login and - non-interactive, which means that the startup scripts for your shell - won't be run. nvm in particular is known to use startup scripts as - part of its configuration. - -There are several ways to resolve this issue: - -The above `npm` task will run bash with a command ( - `-c` ), just like the tasks system does by default. However, - this task also runs `bash` as a login shell ( - `-l` ). diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md deleted file mode 100644 index b1e4c50..0000000 --- a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md +++ /dev/null @@ -1,365 +0,0 @@ -AVAP TM Dev Studio takes security seriously and wants to help - you safely browse and edit code no matter the source or original authors. - The Workspace Trust feature lets you decide whether code in your project - folder can be executed by AVAP TM Dev Studio and extensions - without your explicit approval. - -![Trust this folder dialog] - -## Safe code browsing - -It's great that there is so much source code available on public - repositories and file shares. No matter the coding task or problem, there - is probably already a good solution available somewhere. It is also great - that there are so many powerful coding tools available to help you - understand, debug, and optimize your code. However, using open-source code - and tools does have risks, and you can leave yourself open to malicious - code execution and exploits. - -Workspace Trust provides an extra layer of security when working with - unfamiliar code, by preventing automatic code execution of any code in - your workspace if the workspace is open in "Restricted Mode". - -## Restricted Mode - -When prompted by the Workspace Trust dialog, if you choose{' '} - No, I don't trust the authors , AVAP TM Dev - Studio will go into Restricted Mode to prevent code execution. The - workbench will display a banner at the top with links to{' '} - Manage your folder via the Workspace Trust editor, and{' '} - Learn More about Workspace Trust (which takes you to - back to this documentation). - -You will also see a Restricted Mode badge in the Status bar. - -Restricted Mode tries to prevent automatic code execution by disabling or - limiting the operation of several AVAP TM Dev Studio features: - tasks, debugging, workspace settings, and extensions. - -To see the full list of features disabled in Restricted Mode, you can open - the Workspace Trust editor via the Manage link in the - banner, or by clicking the Restricted Mode badge in the Status bar. - -Tasks can run scripts and tool binaries, and because task definitions are - defined in the workspace `.vscode` folder, they are part of the - committed source code for a repo, and shared to every user of that repo. - Were someone to create a malicious task, it could be unknowingly run by - anyone who cloned that repository. - -If you try to run or even enumerate tasks ( Terminal {' '} - > Run Task... ) while in Restricted Mode, AVAP - TM Dev Studio will display a prompt to trust the folder and - continue executing the task. Cancelling the dialog leaves AVAP - TM Dev Studio in Restricted Mode. - -### Debugging - -Similar to running a AVAP TM Dev Studio task, debug extensions - can run debugger binaries when launching a debug session. For that reason, - debugging is also disabled when a folder is open in Restricted Mode. - -If you try to start a debug session ( Run >{' '} - Start Debugging ) while in Restricted Mode, AVAP - TM Dev Studio will display a prompt to trust the folder and - continue launching the debugger. Cancelling the dialog leaves AVAP - TM Dev Studio in Restricted Mode, and does not start the debug - session. - -Workspace settings are stored in the .vscode folder at the root of your - workspace, and are therefore shared by anyone who clones the workspace - repository. Some settings contain paths to executables (for example, - linter binaries), which if set to point to malicious code, could do - damage. For this reason, there is a set of workspace settings that are - disabled when running in Restricted Mode. - -In the Workspace Trust editor, there is a link to display the workspace - settings that aren't being applied. Clicking the link brings up the - Settings editor scoped by the tag:requireTrustedWorkspace tag. - -The AVAP TM Dev Studio extensions ecosystem is incredibly rich - and diverse. People have created extensions to help with just about any - programming task or editor customization. Some extensions provide full - programming language support (IntelliSense, debugging, code - analysis), and others let you play music or have virtual pets. - -Most extensions run code on your behalf and could potentially do harm. - Some extensions have settings that could cause them to act maliciously if - configured to run an unexpected executable. For this reason, extensions - that have not explicitly opted into Workspace Trust are disabled by - default in Restricted Mode. - -You can review an installed extension's status by clicking the{' '} - extensions are disabled or have limited functionality {' '} - link in the Workspace Trust editor, which displays the Extensions view - scoped with the `@workspaceUnsupported` filter. - -Disabled in Restricted Mode - -Extensions that have either not explicitly indicated that they support - running in Restricted Mode are shown in the{' '} - Disabled in Restricted Mode section. An extension author - can also indicate that they never want to be enabled in Restricted Mode if - they determine that their extension could be misused by modifications - (settings or files) in a workspace. - -Limited in Restricted Mode - -Extension authors can also evaluate their extensions for possible security - vulnerabilities and declare that they have limited {' '} - support when running in Restricted Mode. This mode means the extension may - disable some features or functionality to prevent a possible exploit. - -Extensions can add custom text to the Extensions view Workspace Trust - badge explaining the limitation when running in an untrusted folder. - -For example, the AVAP TM Dev Studio built-in PHP extension - limits the use of the `php.validate.executablePath` setting to - trusted folders since overriding this setting could run a malicious - program. - -You can override an extension's Workspace Trust support level using - the `extensions.supportUntrustedWorkspaces` setting described - in the Enabling extensions section below. - -If you try to install an extension in Restricted Mode, you will be - prompted to either trust the workspace or just install the extension. If - the extension doesn't support Workspace Trust, it will be installed, - but be disabled or running with limited functionality. - -## Trusting a workspace - -If you trust the authors and maintainers of a project, you can trust the - project's folder on your local machine. For example, it is usually - safe to trust repositories from well-known GitHub organizations such as - github.com/microsoft or github.com/docker. - -The initial Workspace Trust prompt when you open a new folder allows you - to trust that folder and its subfolders. - -You can also bring up the Workspace Editor and quickly toggle a - folder's trusted state. - -There are several ways to bring up the Workspace Editor dialog. - -When in Restricted Mode: - -* Restricted Mode banner Manage link -* Restricted Mode Status bar item - -You can also at any time use: - -* Workspaces: Manage Workspace Trust command from the Command Palette (Ctrl+Shift+P) -* Manage Workspace Trust from the Manage {' '} gear in the Activity bar - -## Selecting folders - -When you trust a folder, it is added to the{' '} - Trusted Folders & Workspaces list displayed in the - Workspace Trust editor. - -You can manually add, edit, and remove folders from this list and the - active folder enabling trust is highlighted in bold. - -When you trust a folder via the Workspace Trust editor, you have the - option to trust the parent folder. This will apply trust to the parent - folder and all subfolders. - -This can be helpful if you have many folders with trusted content - co-located under one folder. - -When opening a subfolder under a trusted parent, you won't see the - usual Don't Trust button to put you back in - Restricted Mode, instead there is text mentioning that your folder is - trusted due to another folder. - -You can add, modify, and remove a parent folder entry from the{' '} - Trusted Folders & Workspaces list. - -As mentioned above, you can trust a parent folder and all subfolders will - be trusted. This allows you to control Workspace Trust via a - repository's location on disk. - -For example, you could put all trusted repos under a - "TrustedRepos" parent folder, and unfamiliar repos under another - parent folder such as "ForEvaluation". You would trust the - "TrustedRepos" folder, and selectively trust folders under - "ForEvaluation". - -```javascript -TrustedRepos - Clone trusted repositories under this parent folder - - - ForEvaluation - Clone experimental or unfamiliar repositories under this - parent folder -``` - -You also group and set trust on your repositories by grouping them under - organization-base parent folders. - -```javascript -github/microsoft - Clone a specific organization's repositories under - this parent folder - - - github/{myforks} - Place your forked repositories under this - parent folder - - - local - Local un-published repositories -``` - -## Enabling extensions - -What happens if you want to use Restricted Mode but your favorite - extension doesn't support Workspace Trust? This can happen if an - extension, while useful and functional, isn't being actively - maintained and hasn't declared their Workspace Trust support. To - handle this scenario, you can override the extension's trust state - with the `extensions.supportUntrustedWorkspaces setting` . - -If you open the Settings editor (Ctrl+,) and search for - "trust extensions", you can find the{' '} - Extensions: Support Untrusted Workspaces setting, which - has an Edit in settings.json link. - -Select that link and you will go to your user settings.json file with a - new entry for extensions.supportUntrustedWorkspaces. This setting takes an - object that has a list of extension IDs and their support status and - version. You can select any of your installed extensions via IntelliSense - suggestions. - -Below you can see a settings.json entry for the Prettier extension. - -```javascript -` `"extensions.supportUntrustedWorkspaces": { - ` `"esbenp.prettier-vscode": { - ` `"supported": true, - ` `"version": "6.4.0" - ` `}, - ` `}, -``` - -You can either enable or disable Workspace Trust support with the - supported attribute. The version attribute specifies the exact extension - version applicable and you can remove the version field if you want to set - the state for all versions. - -If you'd like to learn more about how extension authors evaluate and - determine which features to limit in Restricted Mode, you can read the - Workspace Trust Extension Guide. - -## Opening untrusted files - -If you open a file that is located outside of a trusted folder, AVAP - TM Dev Studio will detect that the file comes from somewhere - outside the folder root and prompt you with the option to continue to open - the file or open the file in a new window in Restricted Mode. Opening in - Restricted Mode is the safest option and you can always reopen the file in - your original AVAP TM Dev Studio window once you determine the - file is trustworthy. - -If you would prefer to not be prompted when opening files from outside - trusted workspaces, you can set{' '} - `security.workspace.trust.untrustedFiles` to `open` . - You can also set `security.workspace.trust.untrustedFiles` to{' '} - `newWindow` to always create a new window in Restricted Mode. - Checking the Remember my decision for all workspaces {' '} - option in the untrusted files dialog applies your choice to the{' '} - `security.workspace.trust.untrustedFiles` user setting. - -### Opening untrusted folders - -When working with multi-root workspaces with multiple folders, if you try - to add a new folder to a trusted multi-root workspace, you will be - prompted to decide if you trust the files in that folder or if not, the - entire workspace will switch to Restricted Mode. - -### Empty windows (no open folder) - -By default, if you open a new AVAP TM Dev Studio window - (instance) without opening a folder or workspace, AVAP - TM Dev Studio runs the window with full trust. All installed - extensions are enabled and you can use the empty window without - restrictions. - -When you open a file, you will be prompted whether you want to open an - untrusted file since there is no folder to parent it. - -You can switch an empty window to Restricted Mode using the Workspace - Trust editor (select Manage Workspace Trust from the{' '} - Manage gear button or the Command Palette) and - selecting Don't Trust . The empty window will remain - in Restricted Mode for your current session but will go back to trusted if - you restart or create a new window. - -If you want all empty windows to be in Restricted Mode, you can set{' '} - `security.workspace.trust.emptyWindow` to false. - -## Settings - -Below are the available Workspace Trust settings: - -* `security.workspace.trust.enabled` - Enable Workspace Trust feature. Default is true. -* `security.workspace.trust.startupPrompt` - Whether to show the Workspace Trust dialog on startup. Default is to only show once per distinct folder or workspace. -* `security.workspace.trust.emptyWindow` - Whether to always trust an empty window (no open folder). Default is true. -* `security.workspace.trust.untrustedFiles` - Controls how to handle loose files in a workspace. Default is to prompt. -* `extensions.supportUntrustedWorkspaces` - Override extension Workspace Trust declarations. Either true or false. -* `security.workspace.trust.banner` - Controls when the Restricted Mode banner is displayed. Default is untilDismissed. - -## Command-line switch - -You can disable Workspace Trust via the AVAP TM Dev Studio - command line by passing --disable-workspace-trust. This switch only - affects the current session. - -## Next steps - -Learn more at: - -* Workspace Trust Extension Guide - Learn how extension authors can support Workspace Trust. -* What is a AVAP TM Dev Studio "workspace"? - Find out more details about the AVAP TM Dev Studio "workspace" concept. -* GitHub Repositories extension - Work directly on a repository without cloning the source code to your local machine. - -## Common questions - -Yes, you can still browse and edit source code in Restricted Mode. Some - language features may be disabled, but text editing is always supported. - -In Restricted Mode, any extension that doesn't support Workspace Trust - will be disabled, and all UI elements such as Activity bar icons and - commands will not be displayed. - -You can override an extension's Workspace Trust support level with the{' '} - `extensions.supportUntrustedWorkspaces` setting but do so with - care. Enabling extensions has more details. - -You can but it is not recommended. If you don't want AVAP TM {' '} - Dev Studio to check for Workspace Trust when opening a new folder or - repository, you can set `security.workspace.trust.enabled` to - false. AVAP TM Dev Studio will then behave as it did before the - 1.57 release. - -Bring up Workspace Trust editor ( - Workspaces: Manage Workspace Trust from the Command - Palette) and select the Don't Trust button. You - can also remove the folder from the{' '} - Trusted Folders & Workspaces list. - -If you don't see the Don't Trust button in the - Workspace Trust dialog, the folder's trust level may be inherited from - a parent folder. Review the{' '} - Trusted Folders & Workspaces list to check if a - parent folder has enabled Workspace Trust. - -Some workflows such as connecting to a GitHub Codespace or attaching to a - running Docker container are automatically trusted since these are managed - environments to which you should already have a high level of trust. - -Many features of AVAP TM Dev Studio allow third-party tools and - extensions to run automatically, such as linting or format on save, or - when you do certain operations like compiling code or debugging. An - unethical person could craft an innocent looking project that would run - malicious code without your knowledge and harm your local machine. - Workspace Trust provides an extra layer of security by trying to prevent - code execution while you are evaluating the safety and integrity of - unfamiliar source code. diff --git a/docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md b/docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md deleted file mode 100644 index 73ee097..0000000 --- a/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md +++ /dev/null @@ -1,180 +0,0 @@ -This service is used to send an OTP to an external phone on the platform. - -POST: - `URL_BASE + /ws/util.py/send_otp` - -## Receives: - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "amount" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `amount:` Amount of the operation with the applied format. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - "URL_BASE/ws/util.py/send_otp" - payload ={' '} - { - 'country_code' - :{' '} - 'MX' - , - 'user_id' - :{' '} - '4532' - , - 'phone_number' - :{' '} - '7229063245' - , - 'signature' - :{' '} - - '277b62946d7ed08cf23a5613e3becc4711322abd' - - } - files ={' '} - [ - ] - headers={' '} - { - } - response = requests - .request - ( - "POST" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'POST', - 'url': 'URL_BASE/ws/util.py/send_otp', - 'headers': {}, - formData: { - 'country_code': 'MX', - 'user_id': '4532', - 'phone_number': '7229063245', - 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' - } - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - formdata.append("country_code", "MX"); - formdata.append("user_id", "4532"); - formdata.append("phone_number", "7229063245"); - formdata.append("signature", - "277b62946d7ed08cf23a5613e3becc4711322abd"); - var requestOptions = { - method: 'POST', - body: formdata, - redirect: 'follow' - }; - fetch("URL_BASE/ws/util.py/send_otp", requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request POST{' '} - 'URL_BASE/ws/util.py/send_otp'{' '} - \ - --form - 'country_code=MX' - {' '} - \ - --form 'user_id=4532'{' '} - \ - --form{' '} - 'phone_number=7229063245'{' '} - \ - --form{' '} - - 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' -``` - -## Business logic: - -This service must be executed by a user who has an administrator profile. - An OTP is sent to the phone indicated with the default message, or the one - entered in the request. diff --git a/docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md b/docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md b/docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md deleted file mode 100644 index 0334449..0000000 --- a/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md +++ /dev/null @@ -1,195 +0,0 @@ -This service is used to validate an OTP sent to a telephone number. - -POST: - `URL_BASE + /ws/util.py/validate_otp` - -## Receives: - -All the parameters that the service receives must be indicated in the body - of the request. - -## Returns: - -Depending on the result of the operation, this service can return two - different JSON: - -### Answer JSON OK: - -```javascript -{ - "status" - : - , - "signed" - : - , - "signature_key" - : - , - "elapsed" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `signed:` Shows if the validation request is right or not. -* `signature_key:` Key to OTP verification. -* `amount:` Operation amount in the suitable format. - -### Answer JSON KO: - -```javascript -{ - "status" - :{' '} - false - , - "level" - : - , - "message" - : - , - "error" - : - } -``` - -## Where: - -* `status:` Shows if the call has been successful (true) or not (false). -* `level:` Error importance level. -* `message:` Error message. -* `error:` Sole error code. - -## Example requests: - -### Python - Requests: - -```javascript -import requests - url ={' '} - "URL_BASE/ws/util.py/validate_otp" - payload ={' '} - { - 'country_code' - :{' '} - 'MX' - , - 'user_id' - :{' '} - '4532' - , - 'phone_number' - :{' '} - '7229063245' - , - 'otp' - :{' '} - '123456' - , - 'signature' - :{' '} - - '277b62946d7ed08cf23a5613e3becc4711322abd' - - } - files ={' '} - [ - ] - headers={' '} - { - } - response = requests - .request - ( - "POST" - , url - , headers - =headers - , data{' '} - = payload - , files{' '} - = files - ) - print - (response - .text - .encode - ( - 'utf8' - ) - ) -``` - -### NodeJs - Request: - -```javascript -var request = require('request'); - var options = { - 'method': 'POST', - 'url': 'URL_BASE/ws/util.py/validate_otp', - 'headers': {}, - formData: { - 'country_code': 'MX', - 'user_id': '4532', - 'phone_number': '7229063245', - 'otp': '123456', - 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' - } - }; - request(options, function (error, response) {{' '} - if (error) throw new Error(error); - console.log(response.body); - }); -``` - -### JavaScript - Fetch: - -```javascript -var formdata = new FormData(); - formdata.append("country_code", "MX"); - formdata.append("user_id", "4532"); - formdata.append("phone_number", "7229063245"); - formdata.append("otp", "123456"); - formdata.append("signature", - "277b62946d7ed08cf23a5613e3becc4711322abd"); - var requestOptions = { - method: 'POST', - body: formdata, - redirect: 'follow' - }; - fetch("URL_BASE/ws/util.py/validate_otp", requestOptions) - .then(response => response.text()) - .then(result => console.log(result)) - .catch(error => console.log('error', error)); -``` - -### CURL: - -```javascript -curl --location --request POST{' '} - 'URL_BASE/ws/util.py/validate_otp'{' '} - \ - --form - 'country_code=MX' - {' '} - \ - --form 'user_id=4532'{' '} - \ - --form{' '} - 'phone_number=7229063245'{' '} - \ - --form 'otp=123456'{' '} - \ - --form{' '} - - 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' -``` - -## Business logic: - -This service must be used by an user with administrator profile. The OTP - sent to the indicated phone is validated. diff --git a/docs/developer.avapframework.com/82_vault_vault.md b/docs/developer.avapframework.com/82_vault_vault.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md b/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md deleted file mode 100644 index 587e23c..0000000 --- a/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md +++ /dev/null @@ -1,24 +0,0 @@ -This extension is intended to help you to use 101OBeX APIs - -## Features - -The completion is intended to use with python language. - -## Requirements - -For the extension to work, you must have configured your access to the - 101OBeX API through 101obexcli. - -## Release Notes - -This extension has the purpose of facilitating the developer, the - management of permissions, organizations and development teams, showing - him at all times, the organizations to which he has access, the - development teams to which he belongs and the APIs that he is authorized - to consume. - -### 0.0.1 - -Initial version, advisory only. - -* https://github.com/101OBeXCorp/101obex-api-completion diff --git a/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md b/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md deleted file mode 100644 index 672d286..0000000 --- a/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md +++ /dev/null @@ -1,24 +0,0 @@ -This extension is intended to help you to use 101OBeX APIs - -## Features - - - -## Requirements - -For the extension to work, you must have configured your access to the - 101OBeX API through 101obexcli. - -## Release Notes - -This extension has the purpose of facilitating the developer, the - management of permissions, organizations and development teams, showing - him at all times, the organizations to which he has access, the - development teams to which he belongs and the APIs that he is authorized - to consume. - -### 0.0.1 - -Initial version, advisory only. - -* https://github.com/101OBeXCorp/101obex-api-extension diff --git a/docs/developer.avapframework.com/9_get_pools_get_pools.md b/docs/developer.avapframework.com/9_get_pools_get_pools.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/developer.avapframework.com/appendices_10.md b/docs/developer.avapframework.com/appendices_10.md index 7c95d8b..c9f219b 100644 --- a/docs/developer.avapframework.com/appendices_10.md +++ b/docs/developer.avapframework.com/appendices_10.md @@ -1,17 +1,17 @@ ## getListLen() -The `getListLen()` command calculates the length of a list and stores the result in a target variable. This command is useful for determining the number of elements in a list. +The `getListLen()` command calculates the length of a list and stores the result in a target variable. This command is useful for determining the number of elements in a list. ### Parameters -* SourceVariable Type: var Description: The variable containing the list whose length you want to calculate. It can be a variable that stores the list or a direct value representing the list. -* TargetVariable Type: var Description: The variable where the result of the list length will be stored. This should be a variable that will receive the integer value representing the number of elements in the list. +* SourceVariable Type: `var` Description: The variable containing the list whose length you want to calculate. It can be a variable that stores the list or a direct value representing the list. +* TargetVariable Type: `var` Description: The variable where the result of the list length will be stored. This should be a variable that will receive the integer value representing the number of elements in the list. ### Command Flow ### Usage Example -Suppose the list in `myList` is `['apple', 'banana', 'cherry']`. +Suppose the list in `myList` is `['apple', 'banana', 'cherry']` . ```javascript // Variable definitions @@ -25,7 +25,7 @@ getListLen(myList, listLength) addResult(listLength) ``` -Since the list `myList` has 3 elements, the `getListLen()` command will calculate that the length is 3. This value will be stored in the `listLength` variable and returned through `addResult(listLength)`, resulting in the following output: +Since the list `myList` has 3 elements, the `getListLen()` command will calculate that the length is 3. This value will be stored in the `listLength` variable and returned through `addResult(listLength)` , resulting in the following output: ```javascript 3 diff --git a/docs/developer.avapframework.com/appendices_11.md b/docs/developer.avapframework.com/appendices_11.md index 448cafd..f31bdc9 100644 --- a/docs/developer.avapframework.com/appendices_11.md +++ b/docs/developer.avapframework.com/appendices_11.md @@ -1,18 +1,18 @@ ## itemFromList() -The `itemFromList()` command extracts a specific element from a list based on a given index and stores the result in a target variable. This is useful for accessing individual elements within a list. +The `itemFromList()` command extracts a specific element from a list based on a given index and stores the result in a target variable. This is useful for accessing individual elements within a list. ### Parameters -* SourceVariable Type: var Description: The variable containing the list from which an element is to be extracted. It can be a variable that stores the list or a direct value representing the list. -* index Type: value Description: The index of the element to be extracted from the list. It must be an integer value that indicates the position of the element within the list. -* TargetVariable Type: var Description: The variable where the extracted element will be stored. It must be a variable that will receive the value of the element at the specified index position. +* SourceVariable Type: `var` Description: The variable containing the list from which an element is to be extracted. It can be a variable that stores the list or a direct value representing the list. +* index Type: `value` Description: The index of the element to be extracted from the list. It must be an integer value that indicates the position of the element within the list. +* TargetVariable Type: `var` Description: The variable where the extracted element will be stored. It must be a variable that will receive the value of the element at the specified index position. ### Command Flow ### Usage Example -Suppose the list in `myList` is `['apple', 'banana', 'cherry']` and you want to extract the element at index 1. +Suppose the list in `myList` is `['apple', 'banana', 'cherry']` and you want to extract the element at index 1. ```javascript // Variable definitions @@ -26,7 +26,7 @@ itemFromList(myList, 1, element) addResult(element) ``` -Since index 1 corresponds to the element 'banana' in the `myList`, the `itemFromList()` command will extract 'banana' and store it in the variable `element`. The `element` variable will be returned through `addResult(element)`, resulting in the following output: +Since index 1 corresponds to the element 'banana' in the `myList` , the `itemFromList()` command will extract 'banana' and store it in the variable `element` . The `element` variable will be returned through `addResult(element)` , resulting in the following output: ```javascript "banana" diff --git a/docs/developer.avapframework.com/appendices_12.md b/docs/developer.avapframework.com/appendices_12.md index a5a280b..64ee602 100644 --- a/docs/developer.avapframework.com/appendices_12.md +++ b/docs/developer.avapframework.com/appendices_12.md @@ -1,18 +1,18 @@ ## variableFromJSON() -The `variableFromJSON()` command extracts the value associated with a specific key from a JSON object and stores the result in a target variable. This command is useful for accessing values within a JSON object. +The `variableFromJSON()` command extracts the value associated with a specific key from a JSON object and stores the result in a target variable. This command is useful for accessing values within a JSON object. ### Parameters -* SourceVariable Type: var Description: The variable containing the JSON object from which a value is to be extracted. It can be a variable that stores the JSON object or a direct value representing the JSON object. -* key Type: value Description: The key whose value is to be extracted from the JSON object. It must be a value that represents the key within the JSON object. -* TargetVariable Type: var Description: The variable where the extracted value will be stored. It must be a variable that will receive the value associated with the specified key in the JSON object. +* SourceVariable Type: `var` Description: The variable containing the JSON object from which a value is to be extracted. It can be a variable that stores the JSON object or a direct value representing the JSON object. +* key Type: `value` Description: The key whose value is to be extracted from the JSON object. It must be a value that represents the key within the JSON object. +* TargetVariable Type: `var` Description: The variable where the extracted value will be stored. It must be a variable that will receive the value associated with the specified key in the JSON object. ### Command Flow ### Usage Example -Suppose the JSON object in `jsonData` is `"name": "Alice", "age": 30` and you want to extract the value associated with the key `"name"`. +Suppose the JSON object in `jsonData` is `"name": "Alice", "age": 30` and you want to extract the value associated with the key `"name"` . ```javascript // Variable definitions @@ -26,7 +26,7 @@ variableFromJSON(jsonData, "name", nameValue) addResult(nameValue) ``` -Since the value associated with the key `"name"` in the JSON object `jsonData` is `"Alice"`, the `variableFromJSON()` command will extract `"Alice"` and store it in the variable `nameValue`. The `nameValue` variable will be returned through `addResult(nameValue)`, resulting in the following output: +Since the value associated with the key `"name"` in the JSON object `jsonData` is `"Alice"` , the `variableFromJSON()` command will extract `"Alice"` and store it in the variable `nameValue` . The `nameValue` variable will be returned through `addResult(nameValue)` , resulting in the following output: ```javascript "Alice" diff --git a/docs/developer.avapframework.com/appendices_13.md b/docs/developer.avapframework.com/appendices_13.md index fc2039c..28cf1c7 100644 --- a/docs/developer.avapframework.com/appendices_13.md +++ b/docs/developer.avapframework.com/appendices_13.md @@ -1,18 +1,18 @@ ## AddVariableToJSON() -The `AddVariableToJSON()` command adds a new key and its corresponding value to a JSON object and stores the result in a target variable. This command is useful for updating a JSON object with new key-value pairs. +The `AddVariableToJSON()` command adds a new key and its corresponding value to a JSON object and stores the result in a target variable. This command is useful for updating a JSON object with new key-value pairs. ### Parameters -* Key Type: variable Description: The key to be added to the JSON object. It must be a variable that stores the key to be added. -* Value Type: variable Description: The value associated with the key to be added to the JSON object. It must be a variable that stores the corresponding value. -* TargetVariable Type: variable Description: The variable where the updated JSON object will be stored. It must be a variable that will receive the JSON object with the new key and its added value. +* Key Type: `variable` Description: The key to be added to the JSON object. It must be a variable that stores the key to be added. +* Value Type: `variable` Description: The value associated with the key to be added to the JSON object. It must be a variable that stores the corresponding value. +* TargetVariable Type: `variable` Description: The variable where the updated JSON object will be stored. It must be a variable that will receive the JSON object with the new key and its added value. ### Command Flow ### Usage Example -Suppose the initial JSON object in `jsonData` is `"name": "Alice", "age": 30`, and you want to add a new key `"email"` with the value `"alice@example.com"`. +Suppose the initial JSON object in `jsonData` is `"name": "Alice", "age": 30` , and you want to add a new key `"email"` with the value `"alice@example.com"` . ```javascript // Variable definitions @@ -27,7 +27,7 @@ AddVariableToJSON(newKey, newValue, jsonData) addResult(jsonData) ``` -This updated JSON object will be stored in the variable `jsonData` and will be returned through `addResult(jsonData)`, resulting in the following output: +This updated JSON object will be stored in the variable `jsonData` and will be returned through `addResult(jsonData)` , resulting in the following output: ```javascript { diff --git a/docs/developer.avapframework.com/appendices_14.md b/docs/developer.avapframework.com/appendices_14.md index 456b4d5..8d14c94 100644 --- a/docs/developer.avapframework.com/appendices_14.md +++ b/docs/developer.avapframework.com/appendices_14.md @@ -1,17 +1,17 @@ ## variableToList() -The `variableToList()` command converts an element into a list that contains only that element and stores the resulting list in a target variable. This command is useful to ensure that a single value is handled as a list in subsequent processing. +The `variableToList()` command converts an element into a list that contains only that element and stores the resulting list in a target variable. This command is useful to ensure that a single value is handled as a list in subsequent processing. ### Parameters -* element Type: variable Description: The variable that contains the element to be converted into a list. It can be any type of value that you want to include as the only item in the list. -* TargetVariable Type: variable Description: The variable in which the resulting list will be stored. It must be a variable that will receive the list with the included element. +* element Type: `variable` Description: The variable that contains the element to be converted into a list. It can be any type of value that you want to include as the only item in the list. +* TargetVariable Type: `variable` Description: The variable in which the resulting list will be stored. It must be a variable that will receive the list with the included element. ### Command Flow ### Usage Example -Suppose the element in `myElement` is `"apple"` and you want to convert it into a list. +Suppose the element in `myElement` is `"apple"` and you want to convert it into a list. ```javascript // Variable definitions @@ -25,7 +25,7 @@ variableToList(myElement, myList) addResult(myList) ``` -Since `myElement` is `"apple"`, the `variableToList()` command will convert this element into a list with a single item: `["apple"]`. This list will be stored in the variable `myList`, and `myList` will be returned through `addResult(myList)`, resulting in the following output: +Since `myElement` is `"apple"` , the `variableToList()` command will convert this element into a list with a single item: `["apple"]` . This list will be stored in the variable `myList` , and `myList` will be returned through `addResult(myList)` , resulting in the following output: ```javascript ["apple"] diff --git a/docs/developer.avapframework.com/appendices_15.md b/docs/developer.avapframework.com/appendices_15.md index 1ba61f1..aaab30b 100644 --- a/docs/developer.avapframework.com/appendices_15.md +++ b/docs/developer.avapframework.com/appendices_15.md @@ -1,17 +1,17 @@ ## addParam() -The `addParam()` command retrieves the value associated with a specific key from the query string of the current request and assigns this value to a target variable. This command is useful for extracting values from query parameters in an HTTP request and storing them in variables for processing. +The `addParam()` command retrieves the value associated with a specific key from the query string of the current request and assigns this value to a target variable. This command is useful for extracting values from query parameters in an HTTP request and storing them in variables for processing. ### Parameters -* param Type: value Description: The key of the query string whose value you want to retrieve. It should be a value that represents the key in the query string. -* variable Type: var Description: The variable in which the retrieved value from the query string will be stored. It must be a variable that will receive the value associated with the specified key. +* param Type: `value` Description: The key of the query string whose value you want to retrieve. It should be a value that represents the key in the query string. +* variable Type: `var` Description: The variable in which the retrieved value from the query string will be stored. It must be a variable that will receive the value associated with the specified key. ### Command Flow ### Usage Example -Suppose the query string of the current request is `?user=alice&age=30`, and you want to retrieve the value associated with the key `"user"`. +Suppose the query string of the current request is `?user=alice&age=30` , and you want to retrieve the value associated with the key `"user"` . ```javascript // Variable definitions @@ -24,7 +24,7 @@ addParam("user", userName) addResult(userName) ``` -Given the query string `?user=alice&age=30`, the `addParam()` command will retrieve the value `"alice"` associated with the key `"user"` and store it in the `userName` variable. The `userName` variable will be returned through `addResult(userName)`, resulting in the following output: +Given the query string `?user=alice&age=30` , the `addParam()` command will retrieve the value `"alice"` associated with the key `"user"` and store it in the `userName` variable. The `userName` variable will be returned through `addResult(userName)` , resulting in the following output: ```javascript "alice" diff --git a/docs/developer.avapframework.com/appendices_16.md b/docs/developer.avapframework.com/appendices_16.md index bfa04bb..82bf067 100644 --- a/docs/developer.avapframework.com/appendices_16.md +++ b/docs/developer.avapframework.com/appendices_16.md @@ -1,16 +1,16 @@ ## addResult() -The `addResult()` command is used to return the content of a variable as part of the command or function response. It is the way to present results or processed data from commands and operations performed in the language. +The `addResult()` command is used to return the content of a variable as part of the command or function response. It is the way to present results or processed data from commands and operations performed in the language. ### Parameters -* variable Type: var Description: The variable whose content is to be returned as the result. It should be a variable that contains the value or data you want to include in the response. +* variable Type: `var` Description: The variable whose content is to be returned as the result. It should be a variable that contains the value or data you want to include in the response. ### Command Flow ### Example Usage -Suppose we have performed an operation and want to return the result stored in the `result` variable. +Suppose we have performed an operation and want to return the result stored in the `result` variable. ```javascript // Define the variable with the result of an operation @@ -20,4 +20,4 @@ result = "Operation completed successfully." addResult(result) ``` -In this example, the `addResult(result)` command will return the content of the `result` variable, which is "Operation completed successfully.". This content will be presented as part of the response. +In this example, the `addResult(result)` command will return the content of the `result` variable, which is "Operation completed successfully.". This content will be presented as part of the response. diff --git a/docs/developer.avapframework.com/appendices_17.md b/docs/developer.avapframework.com/appendices_17.md index 95ce86a..3f1600c 100644 --- a/docs/developer.avapframework.com/appendices_17.md +++ b/docs/developer.avapframework.com/appendices_17.md @@ -1,20 +1,20 @@ ## RequestPost() -The `RequestPost()` command performs an HTTP POST request to a specified URL, sending a query string, headers, and a request body, and stores the result of the request in a destination variable. This command is useful for sending data to a server and handling the responses from the request. +The `RequestPost()` command performs an HTTP POST request to a specified URL, sending a query string, headers, and a request body, and stores the result of the request in a destination variable. This command is useful for sending data to a server and handling the responses from the request. ### Parameters -* url Type: variable Description: The URL to which the POST request will be sent. It should be a variable containing the address of the resource to which the request is to be made. -* querystring Type: variable Description: The query string that will be appended to the URL. It should be a variable containing the query parameters in string format. -* headers Type: variable Description: The HTTP headers that will be included in the POST request. It should be a variable containing a dictionary of headers and their values. -* body Type: variable Description: The body of the POST request that will be sent to the server. It should be a variable containing the data to be sent in the request. -* o_result Type: variable Description: The variable in which the result of the POST request will be stored. It should be a variable that will receive the server's response. +* url Type: `variable` Description: The URL to which the POST request will be sent. It should be a variable containing the address of the resource to which the request is to be made. +* querystring Type: `variable` Description: The query string that will be appended to the URL. It should be a variable containing the query parameters in string format. +* headers Type: `variable` Description: The HTTP headers that will be included in the POST request. It should be a variable containing a dictionary of headers and their values. +* body Type: `variable` Description: The body of the POST request that will be sent to the server. It should be a variable containing the data to be sent in the request. +* o_result Type: `variable` Description: The variable in which the result of the POST request will be stored. It should be a variable that will receive the server's response. ### Command Flow ### Example Usage -Suppose you want to send a POST request to `https://api.example.com/data`, with a query string `userId=123`, headers including `Content-Type: application/json`, and a body with JSON data. +Suppose you want to send a POST request to `https://api.example.com/data` , with a query string `userId=123` , headers including `Content-Type: application/json` , and a body with JSON data. ```javascript // Define variables @@ -31,4 +31,4 @@ RequestPost(url, querystring, headers, body, response) addResult(response) ``` -In this example, the `RequestPost()` command will send a POST request to `https://api.example.com/data` with the provided query string, headers, and body. The server's response will be stored in the `response` variable, and this variable will be returned via `addResult(response)`. The result of the request will be included in the final response. +In this example, the `RequestPost()` command will send a POST request to `https://api.example.com/data` with the provided query string, headers, and body. The server's response will be stored in the `response` variable, and this variable will be returned via `addResult(response)` . The result of the request will be included in the final response. diff --git a/docs/developer.avapframework.com/appendices_18.md b/docs/developer.avapframework.com/appendices_18.md index 4306048..ac93372 100644 --- a/docs/developer.avapframework.com/appendices_18.md +++ b/docs/developer.avapframework.com/appendices_18.md @@ -1,19 +1,19 @@ ## ormCreateTable() -The `ormCreateTable()` command creates a new table in a database using the specified ORM (Object-Relational Mapping). This command defines the columns of the table and their data types, and stores a reference to the created table in a destination variable. +The `ormCreateTable()` command creates a new table in a database using the specified ORM (Object-Relational Mapping). This command defines the columns of the table and their data types, and stores a reference to the created table in a destination variable. ### Parameters -* fields Type: value Description: A string containing the names of the table columns, separated by commas. Each column name should correspond to a field in the table. -* fieldsType Type: value Description: A string containing the data types for each column, separated by commas. The data types should be in the same order as the column names in fields . -* dbaseName Type: value Description: The name of the database where the table will be created. It should be a string indicating the target database. -* varTarget Type: variable Description: The variable in which the reference to the created table will be stored. It should be a variable that will receive the reference to the new table. +* fields Type: `value` Description: A string containing the names of the table columns, separated by commas. Each column name should correspond to a field in the table. +* fieldsType Type: `value` Description: A string containing the data types for each column, separated by commas. The data types should be in the same order as the column names in `fields` . +* dbaseName Type: `value` Description: The name of the database where the table will be created. It should be a string indicating the target database. +* varTarget Type: `variable` Description: The variable in which the reference to the created table will be stored. It should be a variable that will receive the reference to the new table. ### Command Flow ### Example Usage -Suppose you want to create a table called `users` in a database called `myDatabase`, with two columns: `username` of type `VARCHAR` and `age` of type `INTEGER`. +Suppose you want to create a table called `users` in a database called `myDatabase` , with two columns: `username` of type `VARCHAR` and `age` of type `INTEGER` . ```javascript // Define variables @@ -29,4 +29,4 @@ ormCreateTable(fields, fieldsType, dbaseName, tableReference) addResult(tableReference) ``` -In this example, the `ormCreateTable()` command will create a table in the `myDatabase` database with the specified columns and data types. The reference to the new table will be stored in the `tableReference` variable, and this variable will be returned via `addResult(tableReference)`. The output will include the reference to the created table. +In this example, the `ormCreateTable()` command will create a table in the `myDatabase` database with the specified columns and data types. The reference to the new table will be stored in the `tableReference` variable, and this variable will be returned via `addResult(tableReference)` . The output will include the reference to the created table. diff --git a/docs/developer.avapframework.com/appendices_19.md b/docs/developer.avapframework.com/appendices_19.md index 1cdb08d..e64ba4c 100644 --- a/docs/developer.avapframework.com/appendices_19.md +++ b/docs/developer.avapframework.com/appendices_19.md @@ -1,17 +1,17 @@ ## ormCheckTable() -The `ormCheckTable()` command checks for the existence of a table in a specific database and stores the result in a destination variable. This command is useful for verifying if a table already exists before attempting further operations on it. +The `ormCheckTable()` command checks for the existence of a table in a specific database and stores the result in a destination variable. This command is useful for verifying if a table already exists before attempting further operations on it. ### Parameters -* dbaseName Type: value Description: The name of the database in which the table's existence should be checked. It should be a string indicating the database to check. -* varTarget Type: variable Description: The variable in which the result of the check will be stored. It should be a variable that will receive a value indicating whether the table exists or not. +* dbaseName Type: `value` Description: The name of the database in which the table's existence should be checked. It should be a string indicating the database to check. +* varTarget Type: `variable` Description: The variable in which the result of the check will be stored. It should be a variable that will receive a value indicating whether the table exists or not. ### Command Flow ### Example Usage -Suppose you want to check if a table called `users` exists in a database called `myDatabase`. +Suppose you want to check if a table called `users` exists in a database called `myDatabase` . ```javascript // Define variables @@ -25,4 +25,4 @@ ormCheckTable(dbaseName, tableExists) addResult(tableExists) ``` -In this example, the `ormCheckTable()` command will check for the existence of the `users` table in the `myDatabase` database. The result of the check (whether the table exists or not) will be stored in the `tableExists` variable, and this variable will be returned via `addResult(tableExists)`. The output will reflect whether the table exists (True) or not (False). +In this example, the `ormCheckTable()` command will check for the existence of the `users` table in the `myDatabase` database. The result of the check (whether the table exists or not) will be stored in the `tableExists` variable, and this variable will be returned via `addResult(tableExists)` . The output will reflect whether the table exists (True) or not (False). diff --git a/docs/developer.avapframework.com/appendices_2.md b/docs/developer.avapframework.com/appendices_2.md index 80914e6..8ca2910 100644 --- a/docs/developer.avapframework.com/appendices_2.md +++ b/docs/developer.avapframework.com/appendices_2.md @@ -1,12 +1,12 @@ ## randomString() -The `randomString()` command generates a random string based on a specified pattern and stores it in a target variable. It is especially useful when random strings are needed to conform to a specific format, such as passwords or identifiers. +The `randomString()` command generates a random string based on a specified pattern and stores it in a target variable. It is especially useful when random strings are needed to conform to a specific format, such as passwords or identifiers. ### Parameters -* Pattern Type: var Description: A regular expression (regex) pattern that defines the characters and structure of the string to be generated. It can be a direct value or a variable containing the pattern. For example, [a-zA-Z0-9] will generate a string that includes uppercase letters, lowercase letters, and numbers. -* Length Type: var Description: An integer value specifying the length of the random string to be generated. It can be a direct value or a variable containing the desired length. This value determines how many characters the resulting string will have. -* TargetVariable Type: var Description: The variable where the generated string will be stored. This variable should be used later in the program. Unlike the other parameters, this must be a variable and not a direct value. +* Pattern Type: `var` Description: A regular expression (regex) pattern that defines the characters and structure of the string to be generated. It can be a direct value or a variable containing the pattern. For example, `[a-zA-Z0-9]` will generate a string that includes uppercase letters, lowercase letters, and numbers. +* Length Type: `var` Description: An integer value specifying the length of the random string to be generated. It can be a direct value or a variable containing the desired length. This value determines how many characters the resulting string will have. +* TargetVariable Type: `var` Description: The variable where the generated string will be stored. This variable should be used later in the program. Unlike the other parameters, this must be a variable and not a direct value. ### Usage Example diff --git a/docs/developer.avapframework.com/appendices_20.md b/docs/developer.avapframework.com/appendices_20.md index e475a40..a771a1c 100644 --- a/docs/developer.avapframework.com/appendices_20.md +++ b/docs/developer.avapframework.com/appendices_20.md @@ -1,20 +1,20 @@ ## ormAccessUpdate() -The `ormAccessUpdate()` command updates records in a database table based on the provided selection criteria. This command modifies the values of specified fields in a database using the corresponding values from variables. +The `ormAccessUpdate()` command updates records in a database table based on the provided selection criteria. This command modifies the values of specified fields in a database using the corresponding values from variables. ### Parameters -* fields Type: variable Description: A string containing the names of the fields to be updated. The field names should be separated by commas. -* fieldsValuesVariables Type: variable Description: A string containing the names of the variables holding the new values for the specified fields. The variable names should be separated by commas, in the same order as the fields in fields . -* dbase Type: variable Description: The name of the database where the table to be updated is located. It should be a variable containing the name of the database. -* selector Type: variable Description: A condition to select the records to be updated. It should be a string specifying the selection criteria in SQL format, such as id = 1 . -* varTarget Type: variable Description: The variable in which the result of the update operation will be stored. It should be a variable that will receive a value indicating whether the update was successful or not. +* fields Type: `variable` Description: A string containing the names of the fields to be updated. The field names should be separated by commas. +* fieldsValuesVariables Type: `variable` Description: A string containing the names of the variables holding the new values for the specified fields. The variable names should be separated by commas, in the same order as the fields in `fields` . +* dbase Type: `variable` Description: The name of the database where the table to be updated is located. It should be a variable containing the name of the database. +* selector Type: `variable` Description: A condition to select the records to be updated. It should be a string specifying the selection criteria in SQL format, such as `id = 1` . +* varTarget Type: `variable` Description: The variable in which the result of the update operation will be stored. It should be a variable that will receive a value indicating whether the update was successful or not. ### Command Flow ### Example Usage -Suppose you want to update the `age` field to 31 for the user with `id` equal to 1 in a database called `myDatabase`. +Suppose you want to update the `age` field to 31 for the user with `id` equal to 1 in a database called `myDatabase` . ```javascript // Define variables @@ -34,4 +34,4 @@ ormAccessUpdate(fields, fieldsValuesVariables, dbase, selector, updateSuccess) addResult(updateSuccess) ``` -In this example, the `ormAccessUpdate()` command will update the `age` field in the `myDatabase` database for the record where `id = 1`. The new value for `age` is 31, stored in the `newAge` variable. The `updateSuccess` variable will store the result of the operation (whether it was successful or not), and this variable will be returned via `addResult(updateSuccess)`. +In this example, the `ormAccessUpdate()` command will update the `age` field in the `myDatabase` database for the record where `id = 1` . The new value for `age` is 31, stored in the `newAge` variable. The `updateSuccess` variable will store the result of the operation (whether it was successful or not), and this variable will be returned via `addResult(updateSuccess)` . diff --git a/docs/developer.avapframework.com/appendices_21.md b/docs/developer.avapframework.com/appendices_21.md index 6940ed8..06950c7 100644 --- a/docs/developer.avapframework.com/appendices_21.md +++ b/docs/developer.avapframework.com/appendices_21.md @@ -1,19 +1,19 @@ ## ormAccessSelect() -The `ormAccessSelect()` command retrieves records from a table in a database based on the provided selection criteria. This command selects the desired fields and stores the results in a target variable. +The `ormAccessSelect()` command retrieves records from a table in a database based on the provided selection criteria. This command selects the desired fields and stores the results in a target variable. ### Parameters -* fields Type: variable Description: A string containing the names of the fields to be retrieved. The field names should be separated by commas. -* dbase Type: variable Description: The name of the database from which records should be retrieved. It must be a variable containing the name of the database. -* selector Type: variable Description: A condition to select the records to be retrieved. It must be a string specifying the selection criteria in SQL format, such as id = 1 . -* varTarget Type: variable Description: The variable in which the query results will be stored. It must be a variable that will receive a list of dictionaries, each representing a retrieved record. +* fields Type: `variable` Description: A string containing the names of the fields to be retrieved. The field names should be separated by commas. +* dbase Type: `variable` Description: The name of the database from which records should be retrieved. It must be a variable containing the name of the database. +* selector Type: `variable` Description: A condition to select the records to be retrieved. It must be a string specifying the selection criteria in SQL format, such as `id = 1` . +* varTarget Type: `variable` Description: The variable in which the query results will be stored. It must be a variable that will receive a list of dictionaries, each representing a retrieved record. ### Command Flow ### Example Usage -Suppose you want to retrieve the `username` field for all users where `age` is greater than 25 from a database called `myDatabase`. +Suppose you want to retrieve the `username` field for all users where `age` is greater than 25 from a database called `myDatabase` . ```javascript // Define variables @@ -29,4 +29,4 @@ ormAccessSelect(fields, dbase, selector, usersList) addResult(usersList) ``` -In this example, the `ormAccessSelect()` command will retrieve the `username` field for all users in the `myDatabase` database where `age` is greater than 25. The results will be stored in the `usersList` variable, and this variable will be returned via `addResult(usersList)`. The output will be a list of dictionaries, each representing a user whose username has been retrieved. +In this example, the `ormAccessSelect()` command will retrieve the `username` field for all users in the `myDatabase` database where `age` is greater than 25. The results will be stored in the `usersList` variable, and this variable will be returned via `addResult(usersList)` . The output will be a list of dictionaries, each representing a user whose username has been retrieved. diff --git a/docs/developer.avapframework.com/appendices_22.md b/docs/developer.avapframework.com/appendices_22.md index c96aca1..ba312dd 100644 --- a/docs/developer.avapframework.com/appendices_22.md +++ b/docs/developer.avapframework.com/appendices_22.md @@ -1,19 +1,19 @@ ## ormAccessInsert() -The `ormAccessInsert()` command inserts a new record into a database table using the provided values for the fields. This command defines the fields and their corresponding values, and stores the result of the operation in a target variable. +The `ormAccessInsert()` command inserts a new record into a database table using the provided values for the fields. This command defines the fields and their corresponding values, and stores the result of the operation in a target variable. ### Parameters -* fields Type: variable Description: A string containing the names of the fields into which the values will be inserted. The field names should be separated by commas. -* fieldsValuesVariables Type: variable Description: A string containing the names of the variables that hold the values to be inserted into the specified fields. The variable names should be separated by commas, in the same order as the fields in fields . -* dbase Type: variable Description: The name of the database where the table into which the new record should be inserted is located. It must be a variable containing the name of the database. -* varTarget Type: variable Description: The variable in which the result of the insertion operation will be stored. It must be a variable that will receive a value indicating whether the insertion was successful or not. +* fields Type: `variable` Description: A string containing the names of the fields into which the values will be inserted. The field names should be separated by commas. +* fieldsValuesVariables Type: `variable` Description: A string containing the names of the variables that hold the values to be inserted into the specified fields. The variable names should be separated by commas, in the same order as the fields in `fields` . +* dbase Type: `variable` Description: The name of the database where the table into which the new record should be inserted is located. It must be a variable containing the name of the database. +* varTarget Type: `variable` Description: The variable in which the result of the insertion operation will be stored. It must be a variable that will receive a value indicating whether the insertion was successful or not. ### Command Flow ### Example Usage -Suppose you want to insert a new record into a table called `users` in a database called `myDatabase`, with values for `username` and `age` coming from the variables `newUsername` and `newAge`. +Suppose you want to insert a new record into a table called `users` in a database called `myDatabase` , with values for `username` and `age` coming from the variables `newUsername` and `newAge` . ```javascript // Define variables @@ -33,4 +33,4 @@ ormAccessInsert(fields, fieldsValuesVariables, dbase, insertSuccess) addResult(insertSuccess) ``` -In this example, the `ormAccessInsert()` command will insert a new record into the `myDatabase` database in the `users` table. The values for `username` and `age` are provided by the `newUsername` and `newAge` variables. The `insertSuccess` variable will store the result of the operation (whether it was successful or not), and this variable will be returned via `addResult(insertSuccess)`. The output will reflect whether the insertion was successful (`True`) or failed (`False`). +In this example, the `ormAccessInsert()` command will insert a new record into the `myDatabase` database in the `users` table. The values for `username` and `age` are provided by the `newUsername` and `newAge` variables. The `insertSuccess` variable will store the result of the operation (whether it was successful or not), and this variable will be returned via `addResult(insertSuccess)` . The output will reflect whether the insertion was successful ( `True` ) or failed ( `False` ). diff --git a/docs/developer.avapframework.com/appendices_23.md b/docs/developer.avapframework.com/appendices_23.md index dc9a7d8..e8319c5 100644 --- a/docs/developer.avapframework.com/appendices_23.md +++ b/docs/developer.avapframework.com/appendices_23.md @@ -1,18 +1,18 @@ ## ormAI() -The `ormAI()` command uses an artificial intelligence model to convert a natural language query into an SQL statement, which is then executed against a database. This command processes a natural language query to generate an SQL statement that is executed on the table specified in the `source` parameter, and stores the result in a target variable. +The `ormAI()` command uses an artificial intelligence model to convert a natural language query into an SQL statement, which is then executed against a database. This command processes a natural language query to generate an SQL statement that is executed on the table specified in the `source` parameter, and stores the result in a target variable. ### Parameters -* prompt Type: variable Description: A string in natural language that describes the query to be made. For example, "get the value of the row with id 5". -* source Type: variable Description: The name of the table on which the generated query should be executed. It must be a variable containing the name of the table in the database. -* TargetVariable Type: variable Description: The variable in which the result of the query will be stored. It must be a variable that will receive the result of the generated and executed SQL query. +* prompt Type: `variable` Description: A string in natural language that describes the query to be made. For example, "get the value of the row with id 5". +* source Type: `variable` Description: The name of the table on which the generated query should be executed. It must be a variable containing the name of the table in the database. +* TargetVariable Type: `variable` Description: The variable in which the result of the query will be stored. It must be a variable that will receive the result of the generated and executed SQL query. ### Command Flow ### Example Usage -Suppose you want to retrieve all the data from the row with id equal to 5 from a table called `users`. +Suppose you want to retrieve all the data from the row with id equal to 5 from a table called `users` . ```javascript // Define variables @@ -27,4 +27,4 @@ ormAI(prompt, source, queryResult) addResult(queryResult) ``` -In this example, the `ormAI()` command will convert the `prompt` into an SQL query: `SELECT * FROM users WHERE id = 5;`. This query will be executed on the `users` table, and the results will be stored in the `queryResult` variable. The `queryResult` variable will be returned via `addResult(queryResult)`. The output will be the dataset retrieved by the executed SQL statement. +In this example, the `ormAI()` command will convert the `prompt` into an SQL query: `SELECT * FROM users WHERE id = 5;` . This query will be executed on the `users` table, and the results will be stored in the `queryResult` variable. The `queryResult` variable will be returned via `addResult(queryResult)` . The output will be the dataset retrieved by the executed SQL statement. diff --git a/docs/developer.avapframework.com/appendices_24.md b/docs/developer.avapframework.com/appendices_24.md index 24dcf73..2691316 100644 --- a/docs/developer.avapframework.com/appendices_24.md +++ b/docs/developer.avapframework.com/appendices_24.md @@ -1,18 +1,18 @@ ## functionAI() -The `functionAI()` command uses an artificial intelligence model to convert a natural language description of a function or process into a code implementation, which is then executed and returns the result. This command converts a description provided in `prompt` into a function that operates on the data of the table specified in `source`, and stores the result in a target variable. +The `functionAI()` command uses an artificial intelligence model to convert a natural language description of a function or process into a code implementation, which is then executed and returns the result. This command converts a description provided in `prompt` into a function that operates on the data of the table specified in `source` , and stores the result in a target variable. ### Parameters -* prompt Type: variable Description: A string in natural language that describes the process or function to be executed. For example, "calculate the average of the salary column". -* source Type: variable Description: The name of the table on which the generated function should be executed. It must be a variable containing the name of the table in the database. -* TargetVariable Type: variable Description: The variable in which the result of the executed function or process will be stored. It must be a variable that will receive the result of the generated and executed code. +* prompt Type: `variable` Description: A string in natural language that describes the process or function to be executed. For example, "calculate the average of the salary column". +* source Type: `variable` Description: The name of the table on which the generated function should be executed. It must be a variable containing the name of the table in the database. +* TargetVariable Type: `variable` Description: The variable in which the result of the executed function or process will be stored. It must be a variable that will receive the result of the generated and executed code. ### Command Flow ### Example Usage -Suppose you want to calculate the average of the `salary` column in a table called `employees`. +Suppose you want to calculate the average of the `salary` column in a table called `employees` . ```javascript // Define variables @@ -27,4 +27,4 @@ functionAI(prompt, source, averageSalary) addResult(averageSalary) ``` -In this example, the `functionAI()` command will convert the `prompt` into a code implementation to calculate the average of the `salary` column in the `employees` table. The result of the calculation will be stored in the `averageSalary` variable, and this variable will be returned via `addResult(averageSalary)`. The output will be the calculated average of the `salary` column. +In this example, the `functionAI()` command will convert the `prompt` into a code implementation to calculate the average of the `salary` column in the `employees` table. The result of the calculation will be stored in the `averageSalary` variable, and this variable will be returned via `addResult(averageSalary)` . The output will be the calculated average of the `salary` column. diff --git a/docs/developer.avapframework.com/appendices_3.md b/docs/developer.avapframework.com/appendices_3.md index 50eede6..40330b7 100644 --- a/docs/developer.avapframework.com/appendices_3.md +++ b/docs/developer.avapframework.com/appendices_3.md @@ -1,19 +1,19 @@ ## stampToDatetime() -The `stampToDatetime()` command converts a timestamp value to a date and time according to a specified format, applying a possible time difference, and stores the result in a target variable. It is useful for manipulating and formatting time values into different representations. +The `stampToDatetime()` command converts a timestamp value to a date and time according to a specified format, applying a possible time difference, and stores the result in a target variable. It is useful for manipulating and formatting time values into different representations. ### Parameters -* timestamp Type: var Description: A value representing a timestamp, which can be provided directly or through a variable. This value is the starting point for conversion to a date and time format. -* Format Type: var Description: A format string that defines how the resulting date and time should be presented. This string follows the same conventions used in Python for formatting dates and times. Common symbols include: %Y : Year with four digits (e.g., 2024) %m : Month with two digits (01 to 12) %d : Day of the month with two digits (01 to 31) %H : Hour in 24-hour format (00 to 23) %M : Minutes (00 to 59) %S : Seconds (00 to 59) For example, the format %Y-%m-%d %H:%M:%S converts a timestamp into a string like 2024-08-25 14:30:00 . It can be a direct value or a variable containing the desired format. -* %Y : Year with four digits (e.g., 2024) -* %m : Month with two digits (01 to 12) -* %d : Day of the month with two digits (01 to 31) -* %H : Hour in 24-hour format (00 to 23) -* %M : Minutes (00 to 59) -* %S : Seconds (00 to 59) -* TimeDelta Type: var Description: An optional value representing a time adjustment (positive or negative) applied to the timestamp before conversion. This value can be provided directly or through a variable and is expressed in seconds. -* TargetVariable Type: var Description: The variable where the resulting date and time from the conversion will be stored. Unlike the other parameters, this must be a variable and not a direct value. +* timestamp Type: `var` Description: A value representing a timestamp, which can be provided directly or through a variable. This value is the starting point for conversion to a date and time format. +* Format Type: `var` Description: A format string that defines how the resulting date and time should be presented. This string follows the same conventions used in Python for formatting dates and times. Common symbols include: `%Y` : Year with four digits (e.g., 2024) `%m` : Month with two digits (01 to 12) `%d` : Day of the month with two digits (01 to 31) `%H` : Hour in 24-hour format (00 to 23) `%M` : Minutes (00 to 59) `%S` : Seconds (00 to 59) For example, the format `%Y-%m-%d %H:%M:%S` converts a timestamp into a string like `2024-08-25 14:30:00` . It can be a direct value or a variable containing the desired format. +* `%Y` : Year with four digits (e.g., 2024) +* `%m` : Month with two digits (01 to 12) +* `%d` : Day of the month with two digits (01 to 31) +* `%H` : Hour in 24-hour format (00 to 23) +* `%M` : Minutes (00 to 59) +* `%S` : Seconds (00 to 59) +* TimeDelta Type: `var` Description: An optional value representing a time adjustment (positive or negative) applied to the timestamp before conversion. This value can be provided directly or through a variable and is expressed in seconds. +* TargetVariable Type: `var` Description: The variable where the resulting date and time from the conversion will be stored. Unlike the other parameters, this must be a variable and not a direct value. ### Usage Example @@ -28,4 +28,4 @@ The `stampToDatetime()` command converts a timestamp value to a date and time ac stampToDatetime(timestamp, format, adjustment, convertedDatetime) ``` -In the first example, a timestamp is converted to a date and time in the format `"%Y-%m-%d %H:%M:%S"`, applying a 3600-second (1-hour) adjustment, and the result is stored in the variable `convertedDatetime`. In the second example, variables are used to define the timestamp, format, and adjustment. +In the first example, a timestamp is converted to a date and time in the format `"%Y-%m-%d %H:%M:%S"` , applying a 3600-second (1-hour) adjustment, and the result is stored in the variable `convertedDatetime` . In the second example, variables are used to define the timestamp, format, and adjustment. diff --git a/docs/developer.avapframework.com/appendices_4.md b/docs/developer.avapframework.com/appendices_4.md index cee6429..4c703d6 100644 --- a/docs/developer.avapframework.com/appendices_4.md +++ b/docs/developer.avapframework.com/appendices_4.md @@ -1,19 +1,19 @@ ## getTimeStamp() -The `getTimeStamp()` command converts a date and time string, given in a specific format, to a timestamp value. Additionally, it allows for an optional time adjustment before storing the result in a target variable. This command is useful for converting human-readable date and time representations to a numeric timestamp format, which can be used in calculations or time comparisons. +The `getTimeStamp()` command converts a date and time string, given in a specific format, to a timestamp value. Additionally, it allows for an optional time adjustment before storing the result in a target variable. This command is useful for converting human-readable date and time representations to a numeric timestamp format, which can be used in calculations or time comparisons. ### Parameters -* DateString Type: var Description: A string representing a date and time. This string must follow the format specified in the Format parameter. It can be a direct value or a variable containing the date string. -* Format Type: var Description: A format string that defines how to interpret the date and time string ( DateString ). This string follows Python's conventions for formatting and parsing dates and times. Some common symbols include: %Y : Year with four digits (e.g., 2024) %m : Month with two digits (01 to 12) %d : Day of the month with two digits (01 to 31) %H : Hour in 24-hour format (00 to 23) %M : Minutes (00 to 59) %S : Seconds (00 to 59) For example, to interpret the string "2024-08-25 14:30:00" , the format %Y-%m-%d %H:%M:%S would be used. It can be a direct value or a variable containing the format. -* %Y : Year with four digits (e.g., 2024) -* %m : Month with two digits (01 to 12) -* %d : Day of the month with two digits (01 to 31) -* %H : Hour in 24-hour format (00 to 23) -* %M : Minutes (00 to 59) -* %S : Seconds (00 to 59) -* TimeDelta Type: var Description: An optional value representing a time adjustment (positive or negative) applied to the timestamp after conversion. This value can be provided directly or through a variable and is expressed in seconds. -* TargetVariable Type: var Description: The variable where the resulting timestamp from the conversion will be stored. Unlike the other parameters, this must be a variable and not a direct value. +* DateString Type: `var` Description: A string representing a date and time. This string must follow the format specified in the Format parameter. It can be a direct value or a variable containing the date string. +* Format Type: `var` Description: A format string that defines how to interpret the date and time string ( `DateString` ). This string follows Python's conventions for formatting and parsing dates and times. Some common symbols include: `%Y` : Year with four digits (e.g., 2024) `%m` : Month with two digits (01 to 12) `%d` : Day of the month with two digits (01 to 31) `%H` : Hour in 24-hour format (00 to 23) `%M` : Minutes (00 to 59) `%S` : Seconds (00 to 59) For example, to interpret the string `"2024-08-25 14:30:00"` , the format `%Y-%m-%d %H:%M:%S` would be used. It can be a direct value or a variable containing the format. +* `%Y` : Year with four digits (e.g., 2024) +* `%m` : Month with two digits (01 to 12) +* `%d` : Day of the month with two digits (01 to 31) +* `%H` : Hour in 24-hour format (00 to 23) +* `%M` : Minutes (00 to 59) +* `%S` : Seconds (00 to 59) +* TimeDelta Type: `var` Description: An optional value representing a time adjustment (positive or negative) applied to the timestamp after conversion. This value can be provided directly or through a variable and is expressed in seconds. +* TargetVariable Type: `var` Description: The variable where the resulting timestamp from the conversion will be stored. Unlike the other parameters, this must be a variable and not a direct value. ### Usage Example @@ -28,4 +28,4 @@ The `getTimeStamp()` command converts a date and time string, given in a specifi getTimeStamp(date, format, adjustment, generatedTimestamp) ``` -In the first example, the date and time string `"2024-08-25 14:30:00"` is converted to a timestamp, applying a 3600-second (1-hour) adjustment, and the result is stored in the variable `generatedTimestamp`. In the second example, variables are used to define the date, format, and adjustment. +In the first example, the date and time string `"2024-08-25 14:30:00"` is converted to a timestamp, applying a 3600-second (1-hour) adjustment, and the result is stored in the variable `generatedTimestamp` . In the second example, variables are used to define the date, format, and adjustment. diff --git a/docs/developer.avapframework.com/appendices_5.md b/docs/developer.avapframework.com/appendices_5.md index 70599a0..a94d63e 100644 --- a/docs/developer.avapframework.com/appendices_5.md +++ b/docs/developer.avapframework.com/appendices_5.md @@ -1,12 +1,12 @@ ## getRegex() -The `getRegex()` command searches for matches in a source string using a regular expression (regex) pattern and stores the result in a target variable. This command is useful for extracting specific parts of a string that match a defined pattern, such as email addresses, phone numbers, or any other structure defined by a regex. +The `getRegex()` command searches for matches in a source string using a regular expression (regex) pattern and stores the result in a target variable. This command is useful for extracting specific parts of a string that match a defined pattern, such as email addresses, phone numbers, or any other structure defined by a regex. ### Parameters -* SourceVariable Type: variable Description: The variable containing the source string in which to search for regex pattern matches. This string is the text on which the regex search will be applied. -* rePattern Type: variable Description: The variable containing the regular expression (regex) pattern that defines what to search for in the source string. This pattern should follow standard regex rules, allowing the specification of sequences of characters to identify in the source string. -* TargetVariable Type: variable Description: The variable where the search result will be stored. Depending on the context and the pattern used, the result could be the first match found, all matches, or even specific groups within the match. +* SourceVariable Type: `variable` Description: The variable containing the source string in which to search for regex pattern matches. This string is the text on which the regex search will be applied. +* rePattern Type: `variable` Description: The variable containing the regular expression (regex) pattern that defines what to search for in the source string. This pattern should follow standard regex rules, allowing the specification of sequences of characters to identify in the source string. +* TargetVariable Type: `variable` Description: The variable where the search result will be stored. Depending on the context and the pattern used, the result could be the first match found, all matches, or even specific groups within the match. ### Usage Example @@ -22,4 +22,4 @@ The `getRegex()` command searches for matches in a source string using a regular getRegex(sourceText, regexPattern, foundURL) ``` -In the first example, a phone number in the format `123-456-7890` is searched in the `sourceText` string and the result is stored in the `phoneNumber` variable. In the second example, a URL is extracted from the `sourceText` string using a regex that identifies URL patterns, and the result is stored in the `foundURL` variable. +In the first example, a phone number in the format `123-456-7890` is searched in the `sourceText` string and the result is stored in the `phoneNumber` variable. In the second example, a URL is extracted from the `sourceText` string using a regex that identifies URL patterns, and the result is stored in the `foundURL` variable. diff --git a/docs/developer.avapframework.com/appendices_6.md b/docs/developer.avapframework.com/appendices_6.md index f00fd39..f118ae3 100644 --- a/docs/developer.avapframework.com/appendices_6.md +++ b/docs/developer.avapframework.com/appendices_6.md @@ -1,26 +1,26 @@ ## getDateTime() -The `getDateTime()` command retrieves the current date and time, formats it according to a specified format, applies an optional time adjustment, and converts it to a specific time zone before storing the result in a target variable. It is useful for obtaining and manipulating the current date and time in different formats and time zones. +The `getDateTime()` command retrieves the current date and time, formats it according to a specified format, applies an optional time adjustment, and converts it to a specific time zone before storing the result in a target variable. It is useful for obtaining and manipulating the current date and time in different formats and time zones. ### Parameters -* Format Type: var Description: A format string that defines how the resulting date and time should be presented. This string follows the date and time formatting conventions used in Python. Some of the most common symbols include: %Y : Year with four digits (e.g., 2024) %m : Month with two digits (01 to 12) %d : Day of the month with two digits (01 to 31) %H : Hour in 24-hour format (00 to 23) %M : Minutes (00 to 59) %S : Seconds (00 to 59) For example, the format "%Y-%m-%d %H:%M:%S" will present the date and time as 2024-08-25 14:30:00 . It can be a direct value or a variable containing the desired format. -* %Y : Year with four digits (e.g., 2024) -* %m : Month with two digits (01 to 12) -* %d : Day of the month with two digits (01 to 31) -* %H : Hour in 24-hour format (00 to 23) -* %M : Minutes (00 to 59) -* %S : Seconds (00 to 59) -* TimeDelta Type: var Description: An optional value representing a time adjustment (positive or negative) applied to the current date and time before conversion. This value can be provided directly or through a variable and is expressed in seconds. -* TimeZone Type: var Description: The time zone to which the date and time should be converted. This value can be a time zone identifier provided directly or through a variable. Some common time zones include: "UTC" : Coordinated Universal Time "America/New_York" : U.S. Eastern Time (EST/EDT) "America/Los_Angeles" : U.S. Pacific Time (PST/PDT) "Europe/London" : London Time (GMT/BST) "Europe/Madrid" : Madrid Time (CET/CEST) "Asia/Tokyo" : Tokyo Time (JST) "Australia/Sydney" : Sydney Time (AEST/AEDT) You can use any time zone recognized by the pytz library in Python, which includes most time zones worldwide. -* "UTC" : Coordinated Universal Time -* "America/New_York" : U.S. Eastern Time (EST/EDT) -* "America/Los_Angeles" : U.S. Pacific Time (PST/PDT) -* "Europe/London" : London Time (GMT/BST) -* "Europe/Madrid" : Madrid Time (CET/CEST) -* "Asia/Tokyo" : Tokyo Time (JST) -* "Australia/Sydney" : Sydney Time (AEST/AEDT) -* TargetVariable Type: var Description: The variable in which the resulting date and time from the operation will be stored. Unlike the other parameters, this must be a variable and not a direct value. +* Format Type: `var` Description: A format string that defines how the resulting date and time should be presented. This string follows the date and time formatting conventions used in Python. Some of the most common symbols include: `%Y` : Year with four digits (e.g., 2024) `%m` : Month with two digits (01 to 12) `%d` : Day of the month with two digits (01 to 31) `%H` : Hour in 24-hour format (00 to 23) `%M` : Minutes (00 to 59) `%S` : Seconds (00 to 59) For example, the format `"%Y-%m-%d %H:%M:%S"` will present the date and time as `2024-08-25 14:30:00` . It can be a direct value or a variable containing the desired format. +* `%Y` : Year with four digits (e.g., 2024) +* `%m` : Month with two digits (01 to 12) +* `%d` : Day of the month with two digits (01 to 31) +* `%H` : Hour in 24-hour format (00 to 23) +* `%M` : Minutes (00 to 59) +* `%S` : Seconds (00 to 59) +* TimeDelta Type: `var` Description: An optional value representing a time adjustment (positive or negative) applied to the current date and time before conversion. This value can be provided directly or through a variable and is expressed in seconds. +* TimeZone Type: `var` Description: The time zone to which the date and time should be converted. This value can be a time zone identifier provided directly or through a variable. Some common time zones include: `"UTC"` : Coordinated Universal Time `"America/New_York"` : U.S. Eastern Time (EST/EDT) `"America/Los_Angeles"` : U.S. Pacific Time (PST/PDT) `"Europe/London"` : London Time (GMT/BST) `"Europe/Madrid"` : Madrid Time (CET/CEST) `"Asia/Tokyo"` : Tokyo Time (JST) `"Australia/Sydney"` : Sydney Time (AEST/AEDT) You can use any time zone recognized by the `pytz` library in Python, which includes most time zones worldwide. +* `"UTC"` : Coordinated Universal Time +* `"America/New_York"` : U.S. Eastern Time (EST/EDT) +* `"America/Los_Angeles"` : U.S. Pacific Time (PST/PDT) +* `"Europe/London"` : London Time (GMT/BST) +* `"Europe/Madrid"` : Madrid Time (CET/CEST) +* `"Asia/Tokyo"` : Tokyo Time (JST) +* `"Australia/Sydney"` : Sydney Time (AEST/AEDT) +* TargetVariable Type: `var` Description: The variable in which the resulting date and time from the operation will be stored. Unlike the other parameters, this must be a variable and not a direct value. ### Usage Example @@ -35,4 +35,4 @@ The `getDateTime()` command retrieves the current date and time, formats it acco getDateTime(format, adjustment, timeZone, currentDateTime) ``` -In the first example, the current date and time are retrieved, adjusted by 3600 seconds (1 hour), converted to UTC, and stored in the variable `currentTime`. In the second example, variables are used to define the format, time adjustment, and time zone, with the result stored in the `currentDateTime` variable. +In the first example, the current date and time are retrieved, adjusted by 3600 seconds (1 hour), converted to UTC, and stored in the variable `currentTime` . In the second example, variables are used to define the format, time adjustment, and time zone, with the result stored in the `currentDateTime` variable. diff --git a/docs/developer.avapframework.com/appendices_7.md b/docs/developer.avapframework.com/appendices_7.md index a8f378f..529e80a 100644 --- a/docs/developer.avapframework.com/appendices_7.md +++ b/docs/developer.avapframework.com/appendices_7.md @@ -1,11 +1,11 @@ ## encodeMD5() -The `encodeMD5()` command generates an MD5 hash of the provided string and stores the result in a target variable. MD5 is a cryptographic hash function that produces a 128-bit value (32 hexadecimal characters), commonly used to verify data integrity. +The `encodeMD5()` command generates an MD5 hash of the provided string and stores the result in a target variable. MD5 is a cryptographic hash function that produces a 128-bit value (32 hexadecimal characters), commonly used to verify data integrity. ### Parameters -* SourceVariable Type: var Description: The variable containing the text string to be encoded in MD5. It can be a direct value or a variable storing the input string. -* TargetVariable Type: var Description: The variable in which the resulting MD5 hash will be stored. Unlike the SourceVariable parameter, this must be a variable and not a direct value. +* SourceVariable Type: `var` Description: The variable containing the text string to be encoded in MD5. It can be a direct value or a variable storing the input string. +* TargetVariable Type: `var` Description: The variable in which the resulting MD5 hash will be stored. Unlike the `SourceVariable` parameter, this must be a variable and not a direct value. ### Usage Example @@ -19,4 +19,4 @@ hashVariable = 'md5Hash' encodeMD5(text, hashVariable) ``` -In the first example, an MD5 hash is generated from the string `'example_string'` and stored in the `md5Hash` variable. In the second example, a variable `text` is used to define the input string and another variable `hashVariable` is used to store the resulting MD5 hash. +In the first example, an MD5 hash is generated from the string `'example_string'` and stored in the `md5Hash` variable. In the second example, a variable `text` is used to define the input string and another variable `hashVariable` is used to store the resulting MD5 hash. diff --git a/docs/developer.avapframework.com/appendices_8.md b/docs/developer.avapframework.com/appendices_8.md index 6c5c04a..eac8998 100644 --- a/docs/developer.avapframework.com/appendices_8.md +++ b/docs/developer.avapframework.com/appendices_8.md @@ -1,11 +1,11 @@ ## encodeSHA256() -The `encodeSHA256()` command generates a SHA-256 hash of the provided string and stores the result in a target variable. SHA-256 is a cryptographic hash function that produces a 256-bit value (64 hexadecimal characters), offering greater security compared to MD5. +The `encodeSHA256()` command generates a SHA-256 hash of the provided string and stores the result in a target variable. SHA-256 is a cryptographic hash function that produces a 256-bit value (64 hexadecimal characters), offering greater security compared to MD5. ### Parameters -* SourceVariable Type: var Description: The variable containing the text string to be encoded in SHA-256. It can be a direct value or a variable storing the input string. -* TargetVariable Type: var Description: The variable in which the resulting SHA-256 hash will be stored. Unlike the SourceVariable parameter, this must be a variable and not a direct value. +* SourceVariable Type: `var` Description: The variable containing the text string to be encoded in SHA-256. It can be a direct value or a variable storing the input string. +* TargetVariable Type: `var` Description: The variable in which the resulting SHA-256 hash will be stored. Unlike the `SourceVariable` parameter, this must be a variable and not a direct value. ### Usage Example @@ -19,4 +19,4 @@ hashVariable = 'sha256Hash' encodeSHA256(text, hashVariable) ``` -In the first example, a SHA-256 hash is generated from the string `'example_string'` and stored in the `sha256Hash` variable. In the second example, a variable `text` is used to define the input string, and another variable `hashVariable` is used to store the resulting SHA-256 hash. +In the first example, a SHA-256 hash is generated from the string `'example_string'` and stored in the `sha256Hash` variable. In the second example, a variable `text` is used to define the input string, and another variable `hashVariable` is used to store the resulting SHA-256 hash. diff --git a/docs/developer.avapframework.com/appendices_9.md b/docs/developer.avapframework.com/appendices_9.md index 47e7878..8462d1a 100644 --- a/docs/developer.avapframework.com/appendices_9.md +++ b/docs/developer.avapframework.com/appendices_9.md @@ -1,16 +1,16 @@ ## getQueryParamList() -The `getQueryParamList()` command extracts the query parameters from the current HTTP request and stores a list of these parameters in a target variable. This is useful for handling and processing query parameters in web applications. +The `getQueryParamList()` command extracts the query parameters from the current HTTP request and stores a list of these parameters in a target variable. This is useful for handling and processing query parameters in web applications. ### Parameters -* TargetVariable Type: var Description: The variable in which the extracted query parameter list will be stored. This should be a variable where the command's result will be saved. +* TargetVariable Type: `var` Description: The variable in which the extracted query parameter list will be stored. This should be a variable where the command's result will be saved. ### Command Flow ### Usage Example -Suppose the HTTP query has the following parameters: `?user=alice&age=30`. +Suppose the HTTP query has the following parameters: `?user=alice&age=30` . ```javascript // Define the variable to store the result @@ -23,7 +23,7 @@ Suppose the HTTP query has the following parameters: `?user=alice&age=30`. addResult(queryParamsList) ``` -Given the query string `?user=alice&age=30`, the `getQueryParamList()` command will generate the following list of parameters: +Given the query string `?user=alice&age=30` , the `getQueryParamList()` command will generate the following list of parameters: ```javascript [ diff --git a/docs/developer.avapframework.com/chapter10_2.md b/docs/developer.avapframework.com/chapter10_2.md index 3f541c9..6c6f7ac 100644 --- a/docs/developer.avapframework.com/chapter10_2.md +++ b/docs/developer.avapframework.com/chapter10_2.md @@ -3,9 +3,9 @@ The basic syntax of the IF-THEN-ELSE statement in AVAP™ is as follows: ```javascript -IF(condition, true_value, operator) - // Block of code if the condition is true ELSE - // Block of code if the condition is false END() +if(condition, true_value, operator) + // Block of code if the condition is true else() + // Block of code if the condition is false end() ``` * condition : This is an expression that evaluates to either true or false. diff --git a/docs/developer.avapframework.com/chapter10_3.md b/docs/developer.avapframework.com/chapter10_3.md index 34fa13a..a9710c9 100644 --- a/docs/developer.avapframework.com/chapter10_3.md +++ b/docs/developer.avapframework.com/chapter10_3.md @@ -8,15 +8,15 @@ Below is the description of each part of the IF-THEN-ELSE statement using the pr // IF, ELSE and END Sample Use addVar(selector,'yes') if(selector,'yes','=') - addVar(result,1) + addVar(result,1) else() - addVar(result,0) + addVar(result,0) end() addResult(result) ``` -* The variable selector is initialized with the value 'yes'. -* The statement IF(selector,'yes','=') evaluates whether the value of selector is equal to 'yes'. In this case, the condition is true. -* Inside the IF() block, addVar(result,1) is executed, which assigns the value 1 to the result variable. +* The variable `selector` is initialized with the value 'yes'. +* The statement `IF(selector,'yes','=')` evaluates whether the value of `selector` is equal to 'yes'. In this case, the condition is true. +* Inside the IF() block, `addVar(result,1)` is executed, which assigns the value 1 to the `result` variable. * Since the condition of the IF() is true, the code block inside the ELSE() is not executed. -* The statement addResult(result) adds the value of the result variable to the API result. +* The statement `addResult(result)` adds the value of the `result` variable to the API result. diff --git a/docs/developer.avapframework.com/chapter10_4.md b/docs/developer.avapframework.com/chapter10_4.md index 3d42ec9..461539e 100644 --- a/docs/developer.avapframework.com/chapter10_4.md +++ b/docs/developer.avapframework.com/chapter10_4.md @@ -9,4 +9,4 @@ The result returned by the API after executing the above code is as follows: } ``` -This result indicates that the execution was successful (`status:true`) and that the value of `result` is 1. +This result indicates that the execution was successful ( `status:true` ) and that the value of `result` is 1. diff --git a/docs/developer.avapframework.com/chapter11_3.md b/docs/developer.avapframework.com/chapter11_3.md index 53192ff..648a3b8 100644 --- a/docs/developer.avapframework.com/chapter11_3.md +++ b/docs/developer.avapframework.com/chapter11_3.md @@ -2,7 +2,7 @@ The loop statement in AVAP™ follows this execution process: -* The control variable control is initialized with the starting value specified in start . -* The loop condition is evaluated: while the value of control is less than or equal to the end value end , the code block within startLoop() is executed. If the value of control exceeds the end value, the loop terminates, and execution continues after endLoop() . -* In each iteration of the loop, the code block within startLoop() is executed, and the control variable control is automatically incremented by one. -* Once the control variable reaches or exceeds the end value end , the loop terminates, and execution continues after endLoop() . +* The control variable `control` is initialized with the starting value specified in `start` . +* The loop condition is evaluated: while the value of `control` is less than or equal to the end value `end` , the code block within `startLoop()` is executed. If the value of `control` exceeds the end value, the loop terminates, and execution continues after `endLoop()` . +* In each iteration of the loop, the code block within `startLoop()` is executed, and the control variable `control` is automatically incremented by one. +* Once the control variable reaches or exceeds the end value `end` , the loop terminates, and execution continues after `endLoop()` . diff --git a/docs/developer.avapframework.com/chapter11_5.md b/docs/developer.avapframework.com/chapter11_5.md index 96e8c49..c835e70 100644 --- a/docs/developer.avapframework.com/chapter11_5.md +++ b/docs/developer.avapframework.com/chapter11_5.md @@ -9,6 +9,6 @@ After executing the above code, the result returned by the API is as follows: } ``` -This result confirms that the execution was successful (`status:true`) and that the final value of `counter` is 5. +This result confirms that the execution was successful ( `status:true` ) and that the final value of `counter` is 5. In summary, the loop statement in AVAP™ provides an efficient way to execute a block of code repeatedly within a specified range. By automating tasks that require repetition, such as processing a list of items or generating sequential numbers, this statement becomes a fundamental tool for programming in AVAP™. diff --git a/docs/developer.avapframework.com/chapter12_1.md b/docs/developer.avapframework.com/chapter12_1.md index 4451dcf..2ca83b2 100644 --- a/docs/developer.avapframework.com/chapter12_1.md +++ b/docs/developer.avapframework.com/chapter12_1.md @@ -1,5 +1,5 @@ ## Introduction -The `addParam()` function in AVAP™ is a powerful tool used to add parameters to an API call in the query string. +The `addParam()` function in AVAP™ is a powerful tool used to add parameters to an API call in the query string. This parameter is assigned to a variable and acts as a bridge between the API call and the API itself, allowing smooth and efficient communication between both. diff --git a/docs/developer.avapframework.com/chapter14_2.md b/docs/developer.avapframework.com/chapter14_2.md index 50357d8..7e2fc52 100644 --- a/docs/developer.avapframework.com/chapter14_2.md +++ b/docs/developer.avapframework.com/chapter14_2.md @@ -1,20 +1,20 @@ ## Function Construction -In AVAP™, similar to Python, functions are defined using the keyword `def`, followed by the function name and its parameters in parentheses. The function definition ends with a colon (`:`), followed by the block of code that forms the function body, indented with four spaces. +In AVAP™, similar to Python, functions are defined using the keyword `def` , followed by the function name and its parameters in parentheses. The function definition ends with a colon ( `:` ), followed by the block of code that forms the function body, indented with four spaces. ### Defining a function in AVAP™ ```javascript function greet(name){ - return()"Hello, " + name + "!") -} + return("Hello, " + name + "!") + } ``` ### Calling the function ```javascript message = greet("World") -addResult(message) + addResult(message) ``` ### Output diff --git a/docs/developer.avapframework.com/chapter14_3.md b/docs/developer.avapframework.com/chapter14_3.md index 5ba64fe..7539244 100644 --- a/docs/developer.avapframework.com/chapter14_3.md +++ b/docs/developer.avapframework.com/chapter14_3.md @@ -1,6 +1,6 @@ ## Technical Features * Parameters : Functions can accept zero or more parameters that are used as inputs to the function. -* Return Values : Functions can return a value using the return keyword. +* Return Values : Functions can return a value using the `return` keyword. * Scope : Functions in AVAP™ have their own scope, meaning that variables defined within a function are only visible within that function unless declared as global variables. * Code Reusability : Functions allow for encapsulating and reusing blocks of code that perform specific tasks. diff --git a/docs/developer.avapframework.com/chapter14_4.md b/docs/developer.avapframework.com/chapter14_4.md index 7161de1..1ee5b8c 100644 --- a/docs/developer.avapframework.com/chapter14_4.md +++ b/docs/developer.avapframework.com/chapter14_4.md @@ -6,17 +6,19 @@ Below is a practical example illustrating the definition and invocation of a fun ```javascript function calculate_circle_area(radius){ - return (3.14 * radius ** 2) -} + return(3.14 * radius ** 2) + }` + + } ``` ### Calling the Function ```javascript -circle_radius = 5 -area = calculate_circle_area(circle_radius) -result = "he area of the circle is: %s " % area -addResult(result) +{`circle_radius = 5 + area = calculate_circle_area(circle_radius) + result = "The area of the circle is: %s" % area + addResult(result) ``` ### Output: diff --git a/docs/developer.avapframework.com/chapter1_6.md b/docs/developer.avapframework.com/chapter1_6.md index 2e493cd..fad0559 100644 --- a/docs/developer.avapframework.com/chapter1_6.md +++ b/docs/developer.avapframework.com/chapter1_6.md @@ -3,10 +3,12 @@ AVAP™ offers a wide range of features that promote flexibility in programming. ```javascript # Example of a higher-order function -def operation(func, a, b): - return func(a, b) -def add(x, y): - return x + y +function operation(func, a, b){ + return(func(a, b)) + } +function add(x, y){ + return(x + y) + } result = operation(add, 3, 5) # The add function is passed as an argument ``` diff --git a/docs/developer.avapframework.com/chapter2_2.md b/docs/developer.avapframework.com/chapter2_2.md index 570501d..a85f198 100644 --- a/docs/developer.avapframework.com/chapter2_2.md +++ b/docs/developer.avapframework.com/chapter2_2.md @@ -5,4 +5,4 @@ In AVAP™, several general notation conventions are followed, similar to those * Indentation : Code is structured through indentation, using white spaces or tabs to indicate the hierarchy and structure of the code. It is recommended to use four spaces for each level of indentation. * Case Sensitivity : AVAP™ is case-sensitive, meaning that identifiers, variable names, and keywords must be consistently written using the same capitalization format throughout the code. -* Comments : Comments are used to document the code and explain its functionality. Single-line comments begin with the // symbol, while multi-line comments start with /* and end with */ . +* Comments : Comments are used to document the code and explain its functionality. Single-line comments begin with the `//` symbol, while multi-line comments start with `/*` and end with `*/` . diff --git a/docs/developer.avapframework.com/chapter3_2.md b/docs/developer.avapframework.com/chapter3_2.md index e3c5892..3656458 100644 --- a/docs/developer.avapframework.com/chapter3_2.md +++ b/docs/developer.avapframework.com/chapter3_2.md @@ -2,8 +2,8 @@ The lexical components in AVAP™ are similar to those in other programming languages like Python. Some of the most common lexical components in AVAP™ include: -* Keywords: These are reserved words that have a special meaning in the language and cannot be used as variable or function names. Examples of keywords in AVAP™ include if , else , for , while , return , among others. -* Identifiers: These are names given to variables, functions, and other elements of the program by the programmer. Identifiers must follow certain formatting rules and cannot match keywords. For example, variable , example_function , result are examples of identifiers in AVAP™. -* Operators: These are symbols used to perform operations in the program. Examples of operators in AVAP™ include + , - , * , / , = , == , != , among others. -* Literals: These represent constant values in the program, such as integers, floating-point numbers, text strings, and boolean values. Examples of literals in AVAP™ include 10 , 3.14 , "text" , True , False , among others. -* Punctuation Symbols: These are special characters used to separate elements of the code and define the structure of the program. Examples of punctuation symbols in AVAP™ include () , {} , [] , , , : , ; , among others. +* Keywords: These are reserved words that have a special meaning in the language and cannot be used as variable or function names. Examples of keywords in AVAP™ include `if` , `else` , `for` , `while` , `return` , among others. +* Identifiers: These are names given to variables, functions, and other elements of the program by the programmer. Identifiers must follow certain formatting rules and cannot match keywords. For example, `variable` , `example_function` , `result` are examples of identifiers in AVAP™. +* Operators: These are symbols used to perform operations in the program. Examples of operators in AVAP™ include `+` , `-` , `*` , `/` , `=` , `==` , `!=` , among others. +* Literals: These represent constant values in the program, such as integers, floating-point numbers, text strings, and boolean values. Examples of literals in AVAP™ include `10` , `3.14` , `"text"` , `True` , `False` , among others. +* Punctuation Symbols: These are special characters used to separate elements of the code and define the structure of the program. Examples of punctuation symbols in AVAP™ include `()` , `{}` , `[]` , `,` , `:` , `;` , among others. diff --git a/docs/developer.avapframework.com/chapter7_2.md b/docs/developer.avapframework.com/chapter7_2.md index c0d8a8b..48458f0 100644 --- a/docs/developer.avapframework.com/chapter7_2.md +++ b/docs/developer.avapframework.com/chapter7_2.md @@ -1,6 +1,6 @@ ## 3.1 Line Comments -Line comments in AVAP™ are used to add brief annotations or explanations to a specific line of code. These comments begin with the `//` symbol and continue until the end of the line. Everything following `//` is considered a comment and is ignored by the compiler. +Line comments in AVAP™ are used to add brief annotations or explanations to a specific line of code. These comments begin with the `//` symbol and continue until the end of the line. Everything following `//` is considered a comment and is ignored by the compiler. ```javascript // This is a line comment in AVAP™ diff --git a/docs/developer.avapframework.com/chapter7_3.md b/docs/developer.avapframework.com/chapter7_3.md index 48f3586..27aea8a 100644 --- a/docs/developer.avapframework.com/chapter7_3.md +++ b/docs/developer.avapframework.com/chapter7_3.md @@ -1,6 +1,6 @@ ## 3.2 Block Comments -Block comments in AVAP™ are used to add comments that span multiple lines of code. These comments begin with `/*` and end with `*/`. Everything between `/*` and `*/` is considered a comment and is ignored by the compiler. +Block comments in AVAP™ are used to add comments that span multiple lines of code. These comments begin with `/*` and end with `*/` . Everything between `/*` and `*/` is considered a comment and is ignored by the compiler. ```javascript /* This is a block comment in AVAP™ that spans multiple lines of code. It is used to explain extensive sections of code or to temporarily disable entire blocks of code. */ diff --git a/docs/developer.avapframework.com/chapter7_4.md b/docs/developer.avapframework.com/chapter7_4.md index 98400f8..5aa67ff 100644 --- a/docs/developer.avapframework.com/chapter7_4.md +++ b/docs/developer.avapframework.com/chapter7_4.md @@ -1,15 +1,13 @@ ## 3.3 Documentation Comments -AVAP™ also supports documentation comments, which are used to automatically generate documentation from the source code. These comments begin with `///` and are used to describe the functionality of classes, methods, variables, and other elements of the source code. +AVAP™ also supports documentation comments, which are used to automatically generate documentation from the source code. These comments begin with `///` and are used to describe the functionality of classes, methods, variables, and other elements of the source code. ```javascript /// This function adds two integers and returns the result. /// \param a The first integer. /// \param b The second integer. /// \return The sum of the two numbers. -function sum( a, b) { - return(a + b) -} +int sum(int a, int b) return a + b; ``` Documentation comments are essential for maintaining up-to-date and detailed documentation of the code, which facilitates its understanding and use by other developers. diff --git a/docs/developer.avapframework.com/d4_gs_organizations.md b/docs/developer.avapframework.com/d4_gs_organizations.md index 19f43d5..cde6cd0 100644 --- a/docs/developer.avapframework.com/d4_gs_organizations.md +++ b/docs/developer.avapframework.com/d4_gs_organizations.md @@ -15,16 +15,16 @@ An Organization in the AVAP Framework is a structural unit that groups resources * Access Control: Permissions and Roles: Defines permissions and roles for users within the organization, ensuring controlled access to resources and projects. * Permissions and Roles: Defines permissions and roles for users within the organization, ensuring controlled access to resources and projects. -Definition: The Account Owner is the user who originally created the account in the AVAP Framework. +Definition: The Account Owner is the user who originally created the account in the AVAP Framework. -Responsibilities: +Responsibilities: + + Complete control over the account and its resources. + Management of one or more organizations based on the license, membership, and/or deployment type. -Complete control over the account and its resources. -Management of one or more organizations based on the license, membership, and/or deployment type. - -Capabilities of the Account Owner: - -Multiple Organizations: The owner can manage several organizations, facilitating the administration of multiple units within the platform. +Capabilities of the Account Owner: + + Multiple Organizations: The owner can manage several organizations, facilitating the administration of multiple units within the platform. * Account Owner: Full control over the account and ability to manage multiple organizations. * Organizations: Group resources, teams, and projects. @@ -48,10 +48,10 @@ Multiple Organizations: The owner can manage several organizations, facilitating * Ownership and Management: Ensures proper control of project ownership throughout all stages: development, deployment, and production. * Transparency and Auditing: Provides clear tracking of who has access and control over each project. -Create a New Organization (available only in AVAP Cloud Enterprise or AVAP Enterprise versions) +Create a New Organization (available only in AVAP Cloud Enterprise or AVAP Enterprise versions) + + Action: In the AVAP Cloud Dashboard or through the AVAP Management Console for AVAP Enterprise versions, select Add Organization. + Required Information: Organization Name and Description. + Confirmation: Review the details and confirm the creation. -Action: In the AVAP Cloud Dashboard or through the AVAP Management Console for AVAP Enterprise versions, select Add Organization. -Required Information: Organization Name and Description. -Confirmation: Review the details and confirm the creation. - -For more information related to working with Organizations, visit AVAP Alexandria and connect with the user community at AVAP Communities. +For more information related to working with Organizations, visit AVAP Alexandria and connect with the user community at AVAP Communities . diff --git a/docs/developer.avapframework.com/intro1.md b/docs/developer.avapframework.com/intro1.md index 33b9782..f786c31 100644 --- a/docs/developer.avapframework.com/intro1.md +++ b/docs/developer.avapframework.com/intro1.md @@ -1,3 +1,3 @@ ## Discovering a New Programming Language -Welcome to the AVAP book, where you will delve into the fascinating world of an innovative and powerful programming language: AVAP™. In these pages, we will explore together the fundamental concepts, syntax, and unique features of AVAP™, and prepare you to master this new language and harness its full potential in your software development projects. +Welcome to the AVAP book, where you will delve into the fascinating world of an innovative and powerful programming language: AVAP™ . In these pages, we will explore together the fundamental concepts, syntax, and unique features of AVAP™, and prepare you to master this new language and harness its full potential in your software development projects. From 1c9ee8d5dd3a5f0c8f0bce9e364c557d8f4dde61 Mon Sep 17 00:00:00 2001 From: rafa-ruiz Date: Wed, 4 Mar 2026 18:44:22 -0800 Subject: [PATCH 8/9] docs(core): add official AVAP documentation in Markdown (iii) --- .../0_Accesos_EN_Accesos_EN.md | 155 +++ ...N_Administrar_solicitudes_KYC_(POST)_EN.md | 0 ...uarios_a_la_comunidad_de_un_afiliado_EN.md | 0 .../0_Alta_Admin_EN_Alta_Admin_EN.md | 0 ...tudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md | 0 .../0_Chat_Operador_EN_Chat_Operador_EN.md | 0 .../0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md | 380 ++++++ .../0_Communities_EN_Communities_EN.md | 17 + .../0_Comprar_Comprar_EN.md | 0 ...probar_el_importe_de_una_transaccion_EN.md | 150 +++ ...nfirmar_Ingreso_EN_Confirmar_Ingreso_EN.md | 0 ..._EN_Consultar_Saldo_Monedero_Prepago_EN.md | 0 ...e_Puntos_EN_Crear_Programa_de_Puntos_EN.md | 0 ...0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md | 0 ...X_Exchange_EN_Currencies_FX_Exchange_EN.md | 34 + ...board_Afiliado_EN_Dashboard_Afiliado_EN.md | 0 .../0_Datos_cuentas_EN_Datos_cuenta_EN.md | 0 ...sactivacion_de_una_cuenta_de_usuario_EN.md | 0 ...les_EN_Desplegar_condiciones_legales_EN.md | 0 ...ucion_desde_afiliado_o_administrador_EN.md | 0 ...atos_usuario_EN_Editar_datos_usuario_EN.md | 0 .../0_Entreorigenes_EN_Entreorigenes_EN.md | 0 ...ario_EN_Enviar_donacion_a_un_usuario_EN.md | 0 ...torico_de_Confirmaciones_de_Ingresos_EN.md | 0 .../0_close_close.md | 174 +++ ...ad_101cli_copy_3_download_101cli copy 3.md | 26 + .../10_get_signature_get_signature.md | 156 +++ ...TED_KeyBindings_GET_STARTED_KeyBindings.md | 552 ++++++++ ..._and_tricks_GET_STARTED_Tips_and_tricks.md | 933 +++++++++++++ .../13_get_token_info_get_token_info.md | 0 ...d_transactions_get_vaulted_transactions.md | 0 ...tUSDGRAYcotization_getUSDGRAYcotization.md | 0 ...T_EN_Administrar_solicitudes_KYC_GET_EN.md | 0 ...EN_Agregar_usuarios_a_la_lista_negra_EN.md | 0 ...o_EN_Autorizar_carga_masiva_de_saldo_EN.md | 0 .../1_Chat_prebind_EN_Chat_prebind_EN.md | 0 .../1_Check_Session_EN_Check_Session_EN.md | 0 ...ultar_Solucion_EN_Consultar_Solucion_EN.md | 0 .../1_Crear_Solucion_EN_Crear_Solucion_EN.md | 0 ...e_Puntos_EN_Datos_Programa_de_Puntos_EN.md | 0 ..._EN_Desplegar_preguntas_de_seguridad_EN.md | 0 .../1_Enviar_SMS_EN_Enviar_SMS_EN.md | 0 ...EN_Historico_de_Ingresos_Tiempo_Aire_EN.md | 0 ...del_usuario_EN_actividad_del_usuario_EN.md | 0 ..._modificacion_alta_baja_modificacion_EN.md | 34 + .../1_comprobar_nick_EN_comprobar_nick_EN.md | 0 .../1_download_101cli_download_101cli.md | 26 + .../29_Facturation_Facturation_System_EN.md | 78 ++ ...tos_EN_Actualizar_Programa_de_Puntos_EN.md | 0 .../2_Add_Ons_EN_Add_Ons_EN.md | 48 + ...rizar_Solucion_EN_Autorizar_Solucion_EN.md | 0 .../2_Chat_Usuario_EN_Chat_Usuario_EN.md | 0 ...EN_Consultar_usuarios_de_la_solucion_EN.md | 0 ...thereum_account_create_ethereum_account.md | 0 ...por_email_EN_Enviar_Ticket_por_email_EN.md | 0 .../2_download_github_download_github.md | 26 + ...kchain_accounts_get_blockchain_accounts.md | 0 .../31_github_github_cli.md | 5 + .../32_indice_Indice de Servicios_EN.md | 17 + ...ice_Indice_de_Servicios_Documentados_EN.md | 17 + .../32_indice_Indice_de_Servicios_OLD_EN.md | 17 + .../33_informe_Informe_Consejo_EN.md | 0 ...3_informe_Informe_afiliados_con_tipo_EN.md | 0 .../33_informe_Informe_altas_EN.md | 0 .../33_informe_Informe_cuadro_de_mando_EN.md | 0 ..._informe_Informe_listado_de_usuarios_EN.md | 0 .../33_informe_Informe_numero_altas_EN.md | 0 ...informe_Informe_numero_transacciones_EN.md | 0 .../33_informe_Informe_operaciones_EN.md | 199 +++ .../33_informe_Informe_transacciones_EN.md | 0 .../34_Ingresar_Ingresar_Prepago_EN.md | 0 ...r_Ingreso_de_fondos_para_tiempo_aire_EN.md | 0 .../35_inter_inter_networks_movement.md | 0 .../35_inter_inter_networks_pool_stake.md | 0 .../35_inter_interfaz_servicios_pagos_EN.md | 0 .../36_last_last_order_summary.md | 344 +++++ ...Leer_Leer_notificaciones_del_usuario_EN.md | 0 ...er_Leer_una_notificacion_del_usuario_EN.md | 0 ...quidacion_Liquidaciones_de_Afiliados_EN.md | 0 ...a general de servicios sin catalogar_EN.md | 1 + ...ta_Listado_de_comisiones_de_afiliado_EN.md | 0 .../39_lista_Listado_de_divisas_EN.md | 215 +++ .../39_lista_Listado_de_movimientos_EN.md | 0 ...ta_Listado_de_movimientos_granemisor_EN.md | 165 +++ .../39_lista_Listado_de_solicitudes_KYC_EN.md | 0 ...lista_Listado_de_usuarios_bloqueados_EN.md | 0 ...a_Listado_de_usuarios_en_lista_negra_EN.md | 0 .../39_lista_Listar_Programa_de_Puntos_EN.md | 0 .../39_lista_Listar_Soluciones_EN.md | 0 ...star_Usuarios_del_Programa_de_Puntos_EN.md | 0 ...3_Envio_de_dinero_EN_Envio_de_dinero_EN.md | 0 ...kchain_networks_get_blockchain_networks.md | 0 .../40_logout_Logout_Services_EN.md | 0 .../40_logout_Logs_del_sistema_EN.md | 0 .../41_loyalty_Loyalty_Points_Exchange_EN.md | 29 + .../42_Marketplace_Marketplace_EN.md | 18 + .../developer.avapframework.com/43_new_new.md | 192 +++ ...ificaciones_no_leidas_por_el_usuario_EN.md | 0 ...btener_Obtener_Afiliados_del_sistema_EN.md | 178 +++ ..._Obtener_Obtener_Campos_Alta_Cliente_EN.md | 0 .../45_Obtener_Obtener_Campos_Nivel_KYC_EN.md | 0 ..._Obtener_Obtener_Operadores_del_pais_EN.md | 150 +++ .../45_Obtener_Obtener_Paises_Activos_EN.md | 225 ++++ ..._Obtener_Obtener_Perfiles_de_Usuario_EN.md | 163 +++ ..._Obtener_Obtener_Provincias_del_pais_EN.md | 150 +++ .../45_Obtener_Obtener_Shake_4_EN.md | 0 .../45_Obtener_Obtener_Shake_v2_3_EN.md | 0 .../45_Obtener_Obtener_Shake_v2_EN.md | 0 .../45_Obtener_Obtener_Shakes_EN.md | 0 ...tener_caracteristicas_de_un_servicio_EN.md | 164 +++ .../45_Obtener_Obtener_datos_usuario_EN.md | 0 ...Obtener_imagen_del_perfil_de_usuario_EN.md | 0 .../45_Obtener_Obtener_info_usuario_EN.md | 173 +++ ...reguntas_de_seguridad_del_usuario_EN(1).md | 151 +++ ...r_preguntas_de_seguridad_del_usuario_EN.md | 0 ...er_todos_los_datos_de_la_transaccion_EN.md | 330 +++++ .../46_Operaciones_Operaciones_EN.md | 0 .../47_Odern_Orden_de_cargo_EN.md | 0 .../47_Odern_order_history_summary.md | 380 ++++++ .../48_origenes_origenes_de_fondos_EN.md | 166 +++ .../49_overview_OVERVIEW.md | 58 + .../4_Anexo_EN_Anexo_EN.md | 18 + ...onado_EN_Envio_de_dinero_Impersonado_EN.md | 0 ...mminsioned_users_get_comminsioned_users.md | 0 .../50_pago_Pago_diferido_EN.md | 0 .../51_Plans_Plans_Wallet_EN.md | 16 + ...s_Precios_de_los_distintos_servicios_EN.md | 197 +++ .../53_Procesar_Procesar_SMS_EN.md | 0 ...eactivacion_de_una_cuenta_de_usuario_EN.md | 0 .../55_Recarga_Recarga_de_dinero_EN.md | 0 ...56_rechazar_Rechazar_solicitudes_KYC_EN.md | 0 ...eenviar_Reenviar_el_OTP_para_el_alta_EN.md | 0 ...rar_Regenerar_contrasena_del_usuario_EN.md | 0 ...Registrar_Registrar_Monedero_Prepago_EN.md | 0 ...ero_masiva_EN_Envio_de_dinero_masiva_EN.md | 0 .../60_Remesa_Remesa_dirigida_EN.md | 0 .../62_repetir_repetir_transaccion_EN.md | 0 ...sumen_de_las_comisiones_del_afiliado_EN.md | 0 .../64_Retirar_Retirar_EN.md | 0 .../64_Retirar_Retirar_Prepago_EN.md | 0 .../64_Retirar_Retirar_a_Banco_EN.md | 0 .../64_Retirar_Retirar_a_Tarjeta_EN.md | 0 .../64_Retirar_Retiro_en_cajero_EN.md | 0 .../65_rider_rider_order_management.md | 404 ++++++ .../66_Saldo_Saldo_Usuario_a_Fecha_EN.md | 0 .../66_Saldo_Saldo_de_la_cuenta_EN.md | 0 .../68_servicio_Servicio_Tiempo_Aire_EN.md | 0 ...rvicio_Servicio_de_Alta_de_Afiliados_EN.md | 0 .../68_servicio_Servicio_de_Firma_EN.md | 230 ++++ ...o_de_cambiar_el_perfil_de_un_usuario_EN.md | 0 ...o_de_configuracion_obtener_condicion_EN.md | 0 ...Servicio_de_desbloqueo_de_un_usuario_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Mover)_EN.md | 0 ...vicio_de_edicion_de_perfiles_(Poner)_EN.md | 0 ...icio_de_edicion_de_perfiles_(Quitar)_EN.md | 0 ...rvicio_de_edicion_de_perfiles_Copiar_EN.md | 0 ..._Servicio_de_edicion_de_perfiles_GET_EN.md | 0 ...vicio_de_notificaciones_Borrar_Grupo_EN.md | 0 ...cio_Servicio_de_notificaciones_Crear_EN.md | 0 ...rvicio_de_notificaciones_Crear_Grupo_EN.md | 11 + ...vicio_de_notificaciones_Listar_Envia_EN.md | 0 ...vicio_de_notificaciones_Listar_Grupo_EN.md | 0 ...io_de_notificaciones_Modificar_Grupo_EN.md | 0 ...vision_de_origenes_de_fondos_aprobar_EN.md | 0 ...vision_de_origenes_de_fondos_obtener_EN.md | 0 ...ision_de_origenes_de_fondos_rechazar_EN.md | 0 ...t_SETUP_Additional components and tools.md | 51 + .../69_set_SETUP_Enterprise.md | 43 + .../69_set_SETUP_Linux.md | 419 ++++++ .../69_set_SETUP_MacOS.md | 107 ++ .../69_set_SETUP_Network.md | 131 ++ .../69_set_SETUP_Overview.md | 119 ++ .../69_set_SETUP_RaspberryPi.md | 66 + .../69_set_SETUP_Uninstall.md | 79 ++ .../69_set_SETUP_Windows.md | 119 ++ .../69_set_set_blockchain_accout_selected.md | 176 +++ .../69_set_set_blokchain_network.md | 0 ...el_Transaction_EN_Cancel_Transaction_EN.md | 0 ...6_Envio_de_regalo_EN_Envio_de_regalo_EN.md | 0 ...icitar_Solicitar_subida_de_nivel_KYC_EN.md | 0 .../70_solicitar_Solicitud_de_dinero_EN.md | 0 ...URCE_SOURCE_CONTROL_CollaborateOnGitHub.md | 371 ++++++ .../71_SOURCE_SOURCE_CONTROL_FAQ.md | 153 +++ ...SOURCE_SOURCE_CONTROL_IntroductionToGit.md | 213 +++ .../71_SOURCE_SOURCE_CONTROL_Overview.md | 345 +++++ .../72_spei_spei_EN.md | 0 ...n_Subir_imagen_del_perfil_de_usuario_EN.md | 0 .../75_Terminal_TERMINAL_Advanced.md | 334 +++++ .../75_Terminal_TERMINAL_Appearance.md | 234 ++++ .../75_Terminal_TERMINAL_Shell_Integration.md | 372 ++++++ .../75_Terminal_TERMINAL_TerminalBasics.md | 587 +++++++++ .../75_Terminal_TERMINAL_TerminalProfiles.md | 315 +++++ .../76_Transacciones_Transacciones_EN.md | 0 .../76_Transacciones_Transaction_search_EN.md | 0 ...cia_Transferencias_masivas_de_dinero_EN.md | 0 .../78_unvault_unvault.md | 0 .../79_UserGUIDE_USER_GUIDE-BasicEditing.md | 548 ++++++++ .../79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md | 317 +++++ .../79_UserGUIDE_USER_GUIDE_Accesibility.md | 362 ++++++ .../79_UserGUIDE_USER_GUIDE_CodeNavigation.md | 288 ++++ ...erGUIDE_USER_GUIDE_CommandLineInterface.md | 191 +++ .../79_UserGUIDE_USER_GUIDE_CustomLayout.md | 324 +++++ .../79_UserGUIDE_USER_GUIDE_Debugging.md | 698 ++++++++++ .../79_UserGUIDE_USER_GUIDE_Emmet.md | 376 ++++++ ...erGUIDE_USER_GUIDE_ExtensionMarketplace.md | 532 ++++++++ .../79_UserGUIDE_USER_GUIDE_IntelliSense.md | 324 +++++ ...serGUIDE_USER_GUIDE_MultiRootWorkspaces.md | 423 ++++++ .../79_UserGUIDE_USER_GUIDE_Profiles.md | 535 ++++++++ .../79_UserGUIDE_USER_GUIDE_Refactoring.md | 156 +++ .../79_UserGUIDE_USER_GUIDE_SettingsSync.md | 297 +++++ .../79_UserGUIDE_USER_GUIDE_Snippets.md | 392 ++++++ .../79_UserGUIDE_USER_GUIDE_Tasks.md | 1155 +++++++++++++++++ .../79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md | 365 ++++++ ...or_EN_Carga_masiva_de_saldo_operador_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 180 +++ .../7_get_gasprices_get_gasprices.md | 0 .../80_Usuarios_Usuarios_con_saldo_EN.md | 0 ...un_telefono_externo_de_la_plataforma_EN.md | 195 +++ .../82_vault_vault.md | 0 .../83_vs_api_vs_api_completion.md | 24 + .../83_vs_api_vs_api_extension.md | 24 + .../9_get_pools_get_pools.md | 0 .../GETSTARTED_Telemetry.md | 130 ++ .../chapter12_2.md | 11 + .../chapter12_3.md | 12 + .../chapter12_4.md | 3 + .../chapter12_5.md | 3 + .../chapter12_6.md | 3 + .../chapter13_1.md | 3 + .../chapter13_2.md | 3 + .../chapter13_3.md | 6 + .../chapter13_4.md | 6 + .../chapter13_5.md | 3 + .../chapter13_6.md | 5 + .../chapter13_7.md | 9 + .../chapter13_8.md | 9 + .../chapter13_9.md | 5 + .../developer.avapframework.com/chapter9_1.md | 9 + .../chapter9_10.md | 3 + .../chapter9_11.md | 9 + .../chapter9_12.md | 8 + .../chapter9_13.md | 7 + .../chapter9_14.md | 9 + .../chapter9_15.md | 9 + .../chapter9_16.md | 17 + .../chapter9_17.md | 11 + .../chapter9_18.md | 9 + .../chapter9_19.md | 14 + .../developer.avapframework.com/chapter9_2.md | 11 + .../chapter9_20.md | 17 + .../chapter9_21.md | 24 + .../chapter9_22.md | 6 + .../chapter9_23.md | 29 + .../chapter9_24.md | 28 + .../chapter9_25.md | 11 + .../chapter9_26.md | 15 + .../chapter9_27.md | 17 + .../chapter9_28.md | 28 + .../chapter9_29.md | 45 + .../developer.avapframework.com/chapter9_3.md | 9 + .../chapter9_30.md | 11 + .../chapter9_31.md | 27 + .../chapter9_32.md | 17 + .../chapter9_33.md | 46 + .../chapter9_34.md | 24 + .../chapter9_34_1.md | 10 + .../chapter9_35.md | 24 + .../chapter9_36.md | 23 + .../chapter9_37.md | 7 + .../chapter9_38.md | 33 + .../chapter9_39.md | 17 + .../developer.avapframework.com/chapter9_4.md | 22 + .../chapter9_40.md | 15 + .../chapter9_41.md | 11 + .../chapter9_42.md | 27 + .../chapter9_43.md | 29 + .../chapter9_44.md | 42 + .../chapter9_45.md | 23 + .../chapter9_46.md | 23 + .../chapter9_47.md | 29 + .../chapter9_48.md | 29 + .../chapter9_49.md | 33 + .../developer.avapframework.com/chapter9_5.md | 19 + .../chapter9_50.md | 15 + .../chapter9_51.md | 13 + .../developer.avapframework.com/chapter9_6.md | 24 + .../developer.avapframework.com/chapter9_7.md | 1 + .../developer.avapframework.com/chapter9_8.md | 1 + .../developer.avapframework.com/chapter9_9.md | 25 + 289 files changed, 20288 insertions(+) create mode 100644 docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md create mode 100644 docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md create mode 100644 docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md create mode 100644 docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md create mode 100644 docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md create mode 100644 docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md create mode 100644 docs/developer.avapframework.com/0_Comprar_Comprar_EN.md create mode 100644 docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md create mode 100644 docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md create mode 100644 docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md create mode 100644 docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md create mode 100644 docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md create mode 100644 docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md create mode 100644 docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md create mode 100644 docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md create mode 100644 docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md create mode 100644 docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md create mode 100644 docs/developer.avapframework.com/0_close_close.md create mode 100644 docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md create mode 100644 docs/developer.avapframework.com/10_get_signature_get_signature.md create mode 100644 docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md create mode 100644 docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md create mode 100644 docs/developer.avapframework.com/13_get_token_info_get_token_info.md create mode 100644 docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md create mode 100644 docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md create mode 100644 docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md create mode 100644 docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md create mode 100644 docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md create mode 100644 docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md create mode 100644 docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md create mode 100644 docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md create mode 100644 docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md create mode 100644 docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md create mode 100644 docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md create mode 100644 docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md create mode 100644 docs/developer.avapframework.com/1_download_101cli_download_101cli.md create mode 100644 docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md create mode 100644 docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md create mode 100644 docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md create mode 100644 docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md create mode 100644 docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md create mode 100644 docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md create mode 100644 docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md create mode 100644 docs/developer.avapframework.com/2_download_github_download_github.md create mode 100644 docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md create mode 100644 docs/developer.avapframework.com/31_github_github_cli.md create mode 100644 docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md create mode 100644 docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md create mode 100644 docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_altas_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md create mode 100644 docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md create mode 100644 docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md create mode 100644 docs/developer.avapframework.com/35_inter_inter_networks_movement.md create mode 100644 docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md create mode 100644 docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md create mode 100644 docs/developer.avapframework.com/36_last_last_order_summary.md create mode 100644 docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md create mode 100644 docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md create mode 100644 docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md create mode 100644 docs/developer.avapframework.com/40_logout_Logout_Services_EN.md create mode 100644 docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md create mode 100644 docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md create mode 100644 docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md create mode 100644 docs/developer.avapframework.com/43_new_new.md create mode 100644 docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md create mode 100644 docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md create mode 100644 docs/developer.avapframework.com/47_Odern_order_history_summary.md create mode 100644 docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md create mode 100644 docs/developer.avapframework.com/49_overview_OVERVIEW.md create mode 100644 docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md create mode 100644 docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md create mode 100644 docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md create mode 100644 docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md create mode 100644 docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md create mode 100644 docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md create mode 100644 docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md create mode 100644 docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md create mode 100644 docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md create mode 100644 docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md create mode 100644 docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md create mode 100644 docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md create mode 100644 docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md create mode 100644 docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md create mode 100644 docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md create mode 100644 docs/developer.avapframework.com/65_rider_rider_order_management.md create mode 100644 docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md create mode 100644 docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md create mode 100644 docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Enterprise.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Linux.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_MacOS.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Network.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Overview.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Uninstall.md create mode 100644 docs/developer.avapframework.com/69_set_SETUP_Windows.md create mode 100644 docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md create mode 100644 docs/developer.avapframework.com/69_set_set_blokchain_network.md create mode 100644 docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md create mode 100644 docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md create mode 100644 docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md create mode 100644 docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md create mode 100644 docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md create mode 100644 docs/developer.avapframework.com/72_spei_spei_EN.md create mode 100644 docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md create mode 100644 docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalProfiles.md create mode 100644 docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md create mode 100644 docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md create mode 100644 docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md create mode 100644 docs/developer.avapframework.com/78_unvault_unvault.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md create mode 100644 docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md create mode 100644 docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md create mode 100644 docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md create mode 100644 docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md create mode 100644 docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md create mode 100644 docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md create mode 100644 docs/developer.avapframework.com/82_vault_vault.md create mode 100644 docs/developer.avapframework.com/83_vs_api_vs_api_completion.md create mode 100644 docs/developer.avapframework.com/83_vs_api_vs_api_extension.md create mode 100644 docs/developer.avapframework.com/9_get_pools_get_pools.md create mode 100644 docs/developer.avapframework.com/GETSTARTED_Telemetry.md create mode 100644 docs/developer.avapframework.com/chapter12_2.md create mode 100644 docs/developer.avapframework.com/chapter12_3.md create mode 100644 docs/developer.avapframework.com/chapter12_4.md create mode 100644 docs/developer.avapframework.com/chapter12_5.md create mode 100644 docs/developer.avapframework.com/chapter12_6.md create mode 100644 docs/developer.avapframework.com/chapter13_1.md create mode 100644 docs/developer.avapframework.com/chapter13_2.md create mode 100644 docs/developer.avapframework.com/chapter13_3.md create mode 100644 docs/developer.avapframework.com/chapter13_4.md create mode 100644 docs/developer.avapframework.com/chapter13_5.md create mode 100644 docs/developer.avapframework.com/chapter13_6.md create mode 100644 docs/developer.avapframework.com/chapter13_7.md create mode 100644 docs/developer.avapframework.com/chapter13_8.md create mode 100644 docs/developer.avapframework.com/chapter13_9.md create mode 100644 docs/developer.avapframework.com/chapter9_1.md create mode 100644 docs/developer.avapframework.com/chapter9_10.md create mode 100644 docs/developer.avapframework.com/chapter9_11.md create mode 100644 docs/developer.avapframework.com/chapter9_12.md create mode 100644 docs/developer.avapframework.com/chapter9_13.md create mode 100644 docs/developer.avapframework.com/chapter9_14.md create mode 100644 docs/developer.avapframework.com/chapter9_15.md create mode 100644 docs/developer.avapframework.com/chapter9_16.md create mode 100644 docs/developer.avapframework.com/chapter9_17.md create mode 100644 docs/developer.avapframework.com/chapter9_18.md create mode 100644 docs/developer.avapframework.com/chapter9_19.md create mode 100644 docs/developer.avapframework.com/chapter9_2.md create mode 100644 docs/developer.avapframework.com/chapter9_20.md create mode 100644 docs/developer.avapframework.com/chapter9_21.md create mode 100644 docs/developer.avapframework.com/chapter9_22.md create mode 100644 docs/developer.avapframework.com/chapter9_23.md create mode 100644 docs/developer.avapframework.com/chapter9_24.md create mode 100644 docs/developer.avapframework.com/chapter9_25.md create mode 100644 docs/developer.avapframework.com/chapter9_26.md create mode 100644 docs/developer.avapframework.com/chapter9_27.md create mode 100644 docs/developer.avapframework.com/chapter9_28.md create mode 100644 docs/developer.avapframework.com/chapter9_29.md create mode 100644 docs/developer.avapframework.com/chapter9_3.md create mode 100644 docs/developer.avapframework.com/chapter9_30.md create mode 100644 docs/developer.avapframework.com/chapter9_31.md create mode 100644 docs/developer.avapframework.com/chapter9_32.md create mode 100644 docs/developer.avapframework.com/chapter9_33.md create mode 100644 docs/developer.avapframework.com/chapter9_34.md create mode 100644 docs/developer.avapframework.com/chapter9_34_1.md create mode 100644 docs/developer.avapframework.com/chapter9_35.md create mode 100644 docs/developer.avapframework.com/chapter9_36.md create mode 100644 docs/developer.avapframework.com/chapter9_37.md create mode 100644 docs/developer.avapframework.com/chapter9_38.md create mode 100644 docs/developer.avapframework.com/chapter9_39.md create mode 100644 docs/developer.avapframework.com/chapter9_4.md create mode 100644 docs/developer.avapframework.com/chapter9_40.md create mode 100644 docs/developer.avapframework.com/chapter9_41.md create mode 100644 docs/developer.avapframework.com/chapter9_42.md create mode 100644 docs/developer.avapframework.com/chapter9_43.md create mode 100644 docs/developer.avapframework.com/chapter9_44.md create mode 100644 docs/developer.avapframework.com/chapter9_45.md create mode 100644 docs/developer.avapframework.com/chapter9_46.md create mode 100644 docs/developer.avapframework.com/chapter9_47.md create mode 100644 docs/developer.avapframework.com/chapter9_48.md create mode 100644 docs/developer.avapframework.com/chapter9_49.md create mode 100644 docs/developer.avapframework.com/chapter9_5.md create mode 100644 docs/developer.avapframework.com/chapter9_50.md create mode 100644 docs/developer.avapframework.com/chapter9_51.md create mode 100644 docs/developer.avapframework.com/chapter9_6.md create mode 100644 docs/developer.avapframework.com/chapter9_7.md create mode 100644 docs/developer.avapframework.com/chapter9_8.md create mode 100644 docs/developer.avapframework.com/chapter9_9.md diff --git a/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md b/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md new file mode 100644 index 0000000..b9a5f2f --- /dev/null +++ b/docs/developer.avapframework.com/0_Accesos_EN_Accesos_EN.md @@ -0,0 +1,155 @@ +This document will deal with the different types of accesses that exist on + the platform. + +To identify the user who owns the account where the operation is going to + be carried out, it is necessary to indicate a session identifier ( + session_id parameter) or sign the call with its private key + ( signature parameter). In this way, these two calls to + service are equivalent for all intents and purposes. For those cases in + which there is no pademobile user as executor of the operation, the call + with private key must be used: + +* With session ID + +```javascript +user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&session_id=9bb19a6c0a607cb8f1791207395366d6 +``` + +Session sample + +The session_id parameter is obtained from the call to the login service: + +```javascript +http://desarrollo.pademobile.com:5007/ws/users.py/login?country_code=MX&nick=test_user&pin=0000 +``` + +```javascript +{ {' '} + "status" + :{' '} + true + , + "e_mail" + :{' '} + "" + , + "elapsed" + :{' '} + 0.2370758056640625 + , + "certification_data" + : + , + "session_id" + :{' '} + "97c4abb925c9b2046ac7432762ad1417" + , + "user_type" + :{' '} + "User b\u00e1sico" + , + "profile_id" + :{' '} + 1 + , + "profile_code" + :{' '} + "USER" + , + "user_id" + :{' '} + 225 + , + "state" + :{' '} + "Distrito Federal" + , + "phone_longitude" + :{' '} + 10 + , + "menu" + : + , + "affiliate_user_id" + :{' '} + 412 + , + "currency" + :{' '} + "MXN" + , + "name" + :{' '} + "Test User" + , + "certification" + :{' '} + false + , + "phone" + :{' '} + "5012385006" + + } +``` + +* With signature + +```javascript +user_id=457&country_code=MX&comando=listado&idioma=en-us&id_canal=1&signature=cc30e3efc7159bb10b910512ca441664c1578a4d +``` + +Signed sample + +In this case an extra parameter is added to the entire original query + string. This parameter will be a hash (HMAC) of the previous + string, so any alteration in the parameters will cause the signed login + process to fail. + +This process follows these steps: + +* The private key of the user identified by the user_id parameter is obtained. +* The querystringis separated from the signature parameter. +* The hash is calculated using the strings obtained in steps 1 and 2. +* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. + +The following Python code snippet returns the querystringprovided in the + string parameter of the calculate_signature function with the signature + parameter appended to the end.{' '} + +This process follows the these steps: + +* The private key of the user identified by the user_id parameter is obtained. +* The querystringis separated from the signature parameter. +* The hash is calculated using the strings obtained in steps 1 and 2. +* If the hash obtained in the previous step and the one reported in the signature parameter are the same, the login with signature is successful and the service code is executed. Otherwise an exception is thrown. + +```javascript +import hashlib + + import hashlib + + import hmac + + def{' '} + calcular_firma + (Private key + , chain + ) + : + signature = hmac + .new + (Private key + , chain + , hashlib + .sha1 + ) + .hexdigest + ( + ) + return chain{' '} + +{' '} + '&signature='{' '} + + signature +``` diff --git a/docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md b/docs/developer.avapframework.com/0_Administrar_solicitudes_KYC_(POST)_EN_Administrar_solicitudes_KYC_(POST)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md b/docs/developer.avapframework.com/0_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN_Agregar_usuarios_a_la_comunidad_de_un_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md b/docs/developer.avapframework.com/0_Alta_Admin_EN_Alta_Admin_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/0_Aprobar_solicitudes_KYC_EN_Aprobar_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md b/docs/developer.avapframework.com/0_Chat_Operador_EN_Chat_Operador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md b/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md new file mode 100644 index 0000000..a8296ee --- /dev/null +++ b/docs/developer.avapframework.com/0_Ciphered_Nodes_EN_Ciphered_Nodes_EN.md @@ -0,0 +1,380 @@ +101OBeX offers the possibility of working with encrypted nodes or + projects. All services that are exposed through the API Manager can be + consumed in an encrypted manner, provided this preference is established + during project creation. + +IT IS IMPORTANT TO UNDERSTAND THAT ONCE A PROJECT IS CREATED, THIS + ENCRYPTION SETTING CANNOT BE ALTERED. THEREFORE, IT IS CRITICAL TO + CAREFULLY CONSIDER WHETHER YOUR PROJECT REQUIRES ENCRYPTION TO AVOID + SUBSEQUENT DATA LOSS. + +When you indicate that you want to be able to consume an encrypted + project, you will be assigned an encryption key for it (cipher + key) which can be consulted in the project data. + +Once this key has been obtained, the calls can be encrypted under the + AES256 algorithm with said key and the response will be encrypted with the + same encryption key. + +The nomenclature of the calls will be as follows: + +The nomenclature of the calls will be as follows. + +Decrypted call: + +```javascript +https://api.101obex.com:8000/servicio?parameters +``` + +Encrypted call: + +```javascript +https://api.101obex.com:5000/servicio?encripted_data=(encripted + parameters) +``` + +This adds an additional encryption layer that guarantees the security of + the transferred data. + +The response will be encrypted and its morphology will be as detailed + below + +Decrypted answer: + +```javascript +{ + + "status" + : + true + , + + "e_mail" + : + "test.user@waynnovate.com" + , + + "elapsed" + : + 0.18008685111999512 + , + + "datos_certificacion" + : + { + "codtran" + : + "0075f16df4b053a5d10502ffb01e9cd8" + } + , + + "session_id" + : + "e9b7945dcbd5d18a6239acc7acafe8e9" + , + + "type_of_user" + : + "impulso bu00e1sico" + , + + "profile_id" + : + 137 + , + + "code_profile" + : + "USUARIO" + , + + "user_id" + : + 50 + , + + "status" + : + null + , + + "phone_lenght" + : + 10 + , + + "menu" + : + [ + [ + "Acceso Ru00e1pido" + , + [ + "Movements" + , + "movements" + , + false + ] + , + [ + "Add a card" + , + {' '} + "gestor_origenes_propios/crear" + , + false + ] + , + [ {' '} + "Recharge cellphone minutes" + , + "Rechargecellphoneminutes" + , + false + ] + , + [ {' '} + "Transfer between clients" + , + "moneysending" + , + false + ] + , + [ + "Request money" + , + "requestmoney" + , + false + ] + , + [ + "Services payment" + , + "payexpresspay" + , + false + ] + ] + ] + , + "user_affiliate_id" + : + 1 + , + "currency" + : + "MXN" + , + "name" + : + "qwertyuio qwertyui" + , + "certificate" + : + false + , + "phone" + : + "9876543212" + + } +``` + +Encrypted answer: + +```javascript +{ + + "status" + :{' '} + true + , + + "encrypted_data" + :{' '} + "k8DoQ9ADDph2o3oHdzeW0wO-FITgfGQD4xy9GcfuBtQy8IVazicD4J66kZ-HTlgWpCkXn7xlGDqCcXUNV + {' '} + TW9T7Ww1DpPXPyoilI2GPhOFliAWGpip_R56WVYr07qGmMUJy_n2I3si___hBb9MPEI3KBh9eupUO2gKDT + {' '} + bULimM_cpCtRHsqFdTZIpRedC0W_HdTgcCrZ_CItCoxAoyiCjx6knaH9dbaUV1GoywBWfuh3Dh4iqHGejH + {' '} + RbYi7Apm1PjCj5WNPEEN-UlfNj9hvurwTgCjBXilBg19ld3LUJj-1Yh48It_gLkna12ZqBiuUnQ3Rpj1hH + {' '} + vz7CkTjxStkigCyKA4lPh94cK_cJgaiv7c1Uyb54cB8N2bUTBhD4ojOSfR88bN-4wYiIEspinuKDmpHXO8 + {' '} + HP_IgJSfgkU4QiTfbBKQ8u-2Hxe2x1JgbKIvjpiBNK0H3GNnaPrtciFf88EeQun5oZwOJiFtZBQHv-V4fd + {' '} + kfuOYBAWaOm13I9_PYiJir9BE145mIQOuugnebLASKju5UA-NHEclZ7fUF1fNyCeFxGW-6oYfadBanzpIM + {' '} + 5PjRUODa92gF4X0pPcLy4v1jcegJSMSpTW0DH_vM14gV56OJ0Dvyf52OB2e3LDlfP7TwYmbY7YWwj5MpR1 + {' '} + uoieOwbGsqbXqKvOOCmlwGIvAc-vowoTLRpviT1_fymNHyRqtb89Gjy_2rvsTgBLoZavKBOv5Wvu1Dil5u + {' '} + 0wVzo7pqk5XV3lnTCi-t7kLiH7SfXtuIBhPQzPTO40btxpZwC2V4QBsx1BcBMs_cb7Kmcy53exgpQQQkRN + {' '} + bTU6jkSnTcccaCPzT9WGhxiHrS1U5bXXW4BM1j9aHFDjhBp6uT9_2QAh0oh-uljLTnw6r6KH69VFJyO2oK + {' '} + jG2Qttu-L95ynxW94ecMuLlU26O7F-j9IO1FpI-c8cfKAQs6tbUnv_cU49nTwpX5TZI1ZfCDOb042-KiCJ + {' '} + qOfP61FWZtEQrMw7VZwUxMylcku_In9caUUYgpvJhHwqE6GKdS0XuKEcGUV-tfMvBcnewCgobcZhIeTYKh + {' '} + KSoaA1AHR7IYHaf8U4isTCzcexJL_mnwHlvWGVEXmM2Ywy_y9Y6nIDFTXPsUG4aYjw=" + + } +``` + +Python code example to encrypt and decrypt (encryption key + highlighted) + +```javascript +from Crypto + .Cipher{' '} + import AES + + from Crypto + .Random{' '} + import new{' '} + as Random + + from base64{' '} + import urlsafe_b64encode + , urlsafe_b64decode + + class{' '} + CipherByAES + : + def{' '} + __init__ + (self + ) + : + self.block_size{' '} + ={' '} + 16 + self.key{' '} + ={' '} + 'cedb3fb962255b1aafd033cabe831530' + self.pad{' '} + ={' '} + lambda s + : s{' '} + +{' '} + (self + .block_size{' '} + -{' '} + len + (s + ){' '} + % self + .block_size + ){' '} + * + chr + (self + .block_size{' '} + -{' '} + len + (s + ){' '} + % self + .block_size + ) + self.unpad{' '} + ={' '} + lambda s + : s + [ + : + - + ord + (s + [ + len + (s + ){' '} + -{' '} + 1 + : + ] + ) + ] + def{' '} + encrypt + (self + , data + ) + : + plain_text = self + .pad + (data + ) + iv = Random + ( + ) + .read + (AES + .block_size + ) + cipher = AES + .new + (self + .key + , AES + .MODE_OFB + , iv + ) + return urlsafe_b64encode + (iv{' '} + + cipher + .encrypt + (plain_text + .encode + ( + ) + ) + ) + .decode + ( + ) + def{' '} + decrypt + (self + , data + ) + : + cipher_text ={' '} + urlsafe_b64decode(data + .encode + ( + ) + ) + iv = cipher_text + [ + :self + .block_size + ] + cipher = AES + .new + (self + .key + , AES + .MODE_OFB + , iv + ) + return self + .unpad + (cipher + .decrypt + (cipher_text + [self + .block_size + ] + ) + ) + .decode + ( + ) +``` diff --git a/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md b/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md new file mode 100644 index 0000000..0b2aad8 --- /dev/null +++ b/docs/developer.avapframework.com/0_Communities_EN_Communities_EN.md @@ -0,0 +1,17 @@ +101OBeX organizes and groups the clients of a node or project into + communities. + +Communities are groups of users or clients of a project whose main common + element or union is the community to which they belong. This is + determined, in most cases, although other criteria may apply, by + affiliates (corporations) responsible for registering users or + clients within the system. + +Users or clients in a project that do not have a specific community will + belong to the community of the node or project. Importantly, end users or + customers retain the flexibility to switch between communities as needed. + Grouping users or customers by communities offers many advantages at the + operation and data analysis level, since it allows us to undertake actions + on a specific set of users or end customers based on the community to + which they belong. Moreover, it greatly enhances capabilities for data + mining and reporting activities. diff --git a/docs/developer.avapframework.com/0_Comprar_Comprar_EN.md b/docs/developer.avapframework.com/0_Comprar_Comprar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md b/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md new file mode 100644 index 0000000..6797959 --- /dev/null +++ b/docs/developer.avapframework.com/0_Comprobar_el_importe_de_una_transaccion_EN_Comprobar_el_importe_de_una_transaccion_EN.md @@ -0,0 +1,150 @@ +This service returns the amount of a transaction to be able to see it. + +GET: + `URL_BASE + /ws/util.py/get_importe_transaccion` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "amount" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `amount:` Amount of the transaction searched. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/get_importe_transaccion?country_code=MX&codtran=e34c6167505acbd1994a23082b3f1fc7' +``` + +## Business logic: + +By means of this endpoint we obtain the amount associated with a + transaction. diff --git a/docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md b/docs/developer.avapframework.com/0_Confirmar_Ingreso_EN_Confirmar_Ingreso_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/0_Consultar_Saldo_Monedero_Prepago_EN_Consultar_Saldo_Monedero_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/0_Crear_Programa_de_Puntos_EN_Crear_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md b/docs/developer.avapframework.com/0_Cuadro_de_mando_EN_Cuadro_de_mando_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md b/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md new file mode 100644 index 0000000..7a2f9af --- /dev/null +++ b/docs/developer.avapframework.com/0_Currencies_FX_Exchange_EN_Currencies_FX_Exchange_EN.md @@ -0,0 +1,34 @@ +Within a node or project, two distinct modules exist, and understanding + their differences is crucial to prevent confusion. We are talking about + the Currencies and FX Exchange modules. + +A node or project works with a location and a currency, information that + is provided at the time of creation of a node with the activation of a + project. + +The currency selected when the node or project is created is the only + currency with which the node will operate until the administrator decides + to create or register new currencies. + +That is, a node can be configured in a specific location, the United + States for example, and select USD as the currency for the node or + project. From that moment on, all operations carried out in that node or + project will be recorded with that currency. If later you want other + currencies to exist, such as EUR, you must register the request in the + node or project as an authorized currency. + +This task is carried out in the Currencies section which can be found in + the node or project tab or in the side menu under the Projects section. + +In this same section you can create your own currencies and assign them a + value with a purchase and sale price. + +Working with a loyalty solution based on the accumulation of customer + points, based on their activity, requires registering those points as a + form of currency and giving them a value. In this way, the client will + always be able to use that points wallet in the operation network, thanks + to the FX Exchange service. + +The mission of the FX Exchange service is to maintain a list of + currencies, the reference price, the purchase price, and the sale price, + thus allowing multi-currency operations. diff --git a/docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md b/docs/developer.avapframework.com/0_Dashboard_Afiliado_EN_Dashboard_Afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md b/docs/developer.avapframework.com/0_Datos_cuentas_EN_Datos_cuenta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/0_Desactivacion_de_una_cuenta_de_usuario_EN_Desactivacion_de_una_cuenta_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md b/docs/developer.avapframework.com/0_Desplegar_condiciones_legales_EN_Desplegar_condiciones_legales_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md b/docs/developer.avapframework.com/0_Devolucion_desde_afiliado_o_administrador_EN_Devolucion_desde_afiliado_o_administrador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md b/docs/developer.avapframework.com/0_Editar_datos_usuario_EN_Editar_datos_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md b/docs/developer.avapframework.com/0_Entreorigenes_EN_Entreorigenes_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md b/docs/developer.avapframework.com/0_Enviar_donacion_a_un_usuario_EN_Enviar_donacion_a_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md b/docs/developer.avapframework.com/0_Historico_de_Confirmaciones_de_Ingresos_EN_Historico_de_Confirmaciones_de_Ingresos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/0_close_close.md b/docs/developer.avapframework.com/0_close_close.md new file mode 100644 index 0000000..7691d07 --- /dev/null +++ b/docs/developer.avapframework.com/0_close_close.md @@ -0,0 +1,174 @@ +## ws/orders.py/close + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + "120d29398f8ceae89e707ad1547fa12c" + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Code of the transaction that cancels the order. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', + 'headers': { + '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/close?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' + {' '} + \ + + --header{' '} + + '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' +``` + +## Business logic: + +The objective of this service is to permit an administrator close an + order. diff --git a/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md b/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md new file mode 100644 index 0000000..cd3ca23 --- /dev/null +++ b/docs/developer.avapframework.com/0_download_101cli_copy_3_download_101cli copy 3.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases/tag/prerelease + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.mac.zip diff --git a/docs/developer.avapframework.com/10_get_signature_get_signature.md b/docs/developer.avapframework.com/10_get_signature_get_signature.md new file mode 100644 index 0000000..af486aa --- /dev/null +++ b/docs/developer.avapframework.com/10_get_signature_get_signature.md @@ -0,0 +1,156 @@ +This service is used to get the sign of a informed string + +GET: + `URL_BASE + /ws/util.py/get_signature` + +## Receives: + +The string to be signed and the private key to sign the string + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status": true, "signature": + "38779748c3bb130d0d1f8084ad92607d705e88b7", "elapsed": + 0.002902984619140625 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signature:` The signature calculated from the string{' '} +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + url ={' '} + + "http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm" + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' + + } + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm', + 'headers': { + '101ObexApiKey': 'ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "ri1JlbIJ7oO2kobKNwEdXrZDhd4PoZd8"); + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + fetch("http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://api.staging.pademobile.com:8000/ws/util.py/get_signature?string_to_sign=codigo_pais%3DMX%26id_usuario%3D2%26telefono%3Doperabills%26importe%3D30000%26referencia%3DFondeo&private_key=3SQb94TOcHCm' + {' '} + \ +``` + +## Business logic: + +With this endpoint it is allowed to calculate the sign from a strign using + a private key. diff --git a/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md b/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md new file mode 100644 index 0000000..9c58240 --- /dev/null +++ b/docs/developer.avapframework.com/11_GET_STARTED_KeyBindings_GET_STARTED_KeyBindings.md @@ -0,0 +1,552 @@ +AVAP TM Dev Studio 2024 lets you perform most tasks directly + from the keyboard. This page lists out the default bindings (keyboard + shortcuts) and describes how you can update them. + +### Keyboard Shortcuts editor + +AVAP TM Dev Studio provides a rich and easy keyboard shortcuts + editing experience using Keyboard Shortcuts editor. It + lists all available commands with and without keybindings and you can + easily change / remove / reset their keybindings using the available + actions. It also has a search box on the top that helps you in finding + commands or keybindings. You can open this editor by going to the menu + under File > Preferences >{' '} + Keyboard Shortcuts . + +Most importantly, you can see keybindings according to your keyboard + layout. For example, key binding `Cmd+\` in US keyboard layout + will be shown as `Ctrl+Shift+Alt+Cmd+7` when layout is changed + to German. The dialog to enter key binding will assign the correct and + desired key binding as per your keyboard layout. + +For doing more advanced keyboard shortcut customization, read Advanced + Customization. + +### Keymap extensions + +Keyboard shortcuts are vital to productivity and changing keyboarding + habits can be tough. To help with this, File >{' '} + Preferences >{' '} + Migrate Keyboard Shortcuts from... shows you a list of + popular keymap extensions. These extensions modify the AVAP TM {' '} + Dev Studio shortcuts to match those of other editors so you don't need + to learn new keyboard shortcuts. There is also a Keymaps category of + extensions in the Marketplace. + +### Keyboard Shortcuts Reference + +We also have a printable version of these keyboard shortcuts.{' '} + Help > Keyboard Shortcut Reference {' '} + displays a condensed PDF version suitable for printing as an easy + reference. + +Below are links to the three platform-specific versions (US English + keyboard): + +* Windows +* macOS +* Linux + +### Detecting keybinding conflicts + +If you have many extensions installed or you have customized your keyboard + shortcuts, you can sometimes have keybinding conflicts where the same + keyboard shortcut is mapped to several commands. This can result in + confusing behavior, especially if different keybindings are going in and + out of scope as you move around the editor. + +The Keyboard Shortcuts editor has a context menu command{' '} + Show Same Keybindings , which will filter the keybindings + based on a keyboard shortcut to display conflicts. + +Pick a command with the keybinding you think is overloaded and you can see + if multiple commands are defined, the source of the keybindings and when + they are active. + +### Troubleshooting keybindings + +To troubleshoot keybindings problems, you can execute the command{' '} + Developer: Toggle Keyboard Shortcuts Troubleshooting . + This will activate logging of dispatched keyboard shortcuts and will open + an output panel with the corresponding log file. + +You can then press your desired keybinding and check what keyboard + shortcut AVAP™ DS detects and what command is invoked. + +For example, when pressing `cmd+/` in a code editor on macOS, + the logging output would be: + +```javascript +[KeybindingService]: / Received keydown event - modifiers: [meta], code: + MetaLeft, keyCode: 91, key: Meta + + [KeybindingService]: | Converted keydown event - modifiers: [meta], + code: MetaLeft, keyCode: 57 ('Meta') + + [KeybindingService]: \ Keyboard event cannot be dispatched. + + [KeybindingService]: / Received keydown event - modifiers: [meta], code: + Slash, keyCode: 191, key: / + [KeybindingService]: | Converted keydown event - modifiers: [meta], + code: Slash, keyCode: 85 ('/') + + [KeybindingService]: | Resolving meta+[Slash] + + [KeybindingService]: \ From 2 keybinding entries, matched + editor.action.commentLine, when: editorTextFocus && + !editorReadonly, source: built-in. +``` + +The first keydown event is for the MetaLeft key (cmd) and cannot + be dispatched. The second keydown event is for the Slash key (/) + and is dispatched as meta+[Slash]. There were two keybinding entries + mapped from meta+[Slash] and the one that matched was for the command + editor.action.commentLine, which has the when condition editorTextFocus + && !editorReadonly and is a built-in keybinding entry. + +### Viewing modified keybindings + +You can view any user modified keyboard shortcuts in AVAP TM Dev + Studio in the Keyboard Shortcuts editor with the Show + User Keybindings command in the More Actions (...) menu. This + applies the @source:user filter to the Keyboard Shortcuts editor + (Source is 'User'). + +### Advanced customization + +All keyboard shortcuts in AVAP TM Dev Studio can be customized + via the keybindings.json file. + +To configure keyboard shortcuts through the JSON file, open{' '} + Keyboard Shortcuts editor and select the{' '} + Open Keyboard Shortcuts (JSON) button on the + right of the editor title bar. This will open your keybindings.json file + where you can overwrite the Default Keyboard Shortcuts. + +You can also open the keybindings.json file from the Command Palette + (Ctrl+Shift+P) with the Preferences: Open Keyboard Shortcuts + (JSON) command. + +### Keyboard rules + +Each rule consists of: + +* a key that describes the pressed keys. +* a command containing the identifier of the command to execute. +* an optional when clause containing a boolean expression that will be evaluated depending on the current context. + +Chords (two separate keypress actions) are described by separating + the two keypresses with a space. For example, `Ctrl+K Ctrl+C` . + +When a key is pressed: + +* the rules are evaluated from bottom to{' '} top . +* the first rule that matches, both the key and in terms of when, is accepted. +* no more rules are processed. +* if a rule is found and has a command set, the command is executed. + +The additional keybindings.json rules are appended at runtime to the + bottom of the default rules, thus allowing them to overwrite the default + rules. The keybindings.json file is watched by AVAP™ DS so editing it + while AVAP TM Dev Studio is running will update the rules at + runtime. + +The keyboard shortcuts dispatching is done by analyzing a list of rules + that are expressed in JSON. Here are some examples: + +```javascript +// Keybindings that are active when the focus is in the editor + + { "key": "home", "command": "cursorHome", "when": "editorTextFocus" + }, + + { "key": "shift+home", "command": "cursorHomeSelect", "when": + "editorTextFocus" }, + + + // Keybindings that are complementary + + { "key": "f5", "command": "workbench.action.debug.continue", + "when": "inDebugMode" }, + + { "key": "f5", "command": "workbench.action.debug.start", "when": + "!inDebugMode" }, + + + // Global keybindings + + { "key": "ctrl+f", "command": "actions.find" }, + + { "key": "alt+left", "command": "workbench.action.navigateBack" + }, + + { "key": "alt+right", "command": "workbench.action.navigateForward" + }, + + + // Global keybindings using chords (two separate keypress + actions) + + { "key": "ctrl+k enter", "command": "workbench.action.keepEditor" + }, + + { "key": "ctrl+k ctrl+w", "command": + "workbench.action.closeAllEditors" }, +``` + +### Accepted keys + +The key is made up of modifiers and the key itself. + +The following modifiers are accepted: + +The following keys are accepted: + +* `f1-f19` , `a-z` , `0-9` +* ```, `-` , `=` , `[` , `]` ,{' '} `\` , `;` , `'` , `,` ,{' '} `.` , `/` +* `left` , `up` , `right` ,{' '} `down` , `pageup` , `pagedown` ,{' '} `end` , `home` +* `tab` , `enter` , `escape` ,{' '} `space` , `backspace` , `delete` +* `pausebreak` , `capslock` , `insert` +* `numpad0-numpad9` , `numpad_multiply` ,{' '} `numpad_add` , `numpad_separator` +* `numpad_subtract` , `numpad_decimal` ,{' '} `numpad_divide` + +### Command arguments + +You can invoke a command with arguments. This is useful if you often + perform the same operation on a specific file or folder. You can add a + custom keyboard shortcut to do exactly what you want. + +The following is an example overriding the `Enter` key to print + some text: + +```javascript +{ + "key": "enter", + "command": "type", + "args": { "text": "Hello World" }, + "when": "editorTextFocus" + + } +``` + +The type command will receive {"text": "Hello + World"} as its first argument and add "Hello World" to + the file instead of producing the default command. + +For more information on commands that take arguments, refer to Built-in + Commands. + +### Running multiple commands + +It is possible to create a keybinding that runs several other commands + sequentially using the command runCommands. + +Run several commands without arguments: copy current line down, mark the + current line as comment, move cursor to copied line + +```javascript +{ + "key": "ctrl+alt+c", + "command": "runCommands", + "args": { + "commands": [ "editor.action.copyLinesDownAction", + "cursorUp", + "editor.action.addCommentLine", + "cursorDown" + ] } + + }, +``` + +It is also possible to pass arguments to commands: create a new untitled + TypeScript file and insert a custom snippet + +```javascript +{ + "key": "ctrl+n", + "command": "runCommands", + "args": { + "commands": [ { + "command": "workbench.action.files.newUntitledFile", + "args": { + "languageId": "typescript" + } + }, + { + "command": "editor.action.insertSnippet", + "args": { + "langId": "typescript", + "snippet": "class ${1:ClassName} + {\n\tconstructor() {\n\t\t$0\n\t}\n}" + } + } + ] } + + }, +``` + +Note that commands run by runCommands receive the value of + "args" as the first argument. So in the example above, + workbench.action.files.newUntitledFile receives + {"languageId": "typescript" } as its first + and only argument. + +To pass several arguments, one needs to have "args" as an array: + +```javascript +{ + "key": "ctrl+shift+e", + "command": "runCommands", + "args": { + "commands": [ { + // command invoked with 2 arguments: + vscode.executeCommand("myCommand", "arg1", "arg2") + "command": "myCommand", + "args": ["arg1", "arg2"] + } + ] } + + } +``` + +To pass an array as the first argument, one needs to wrap the array in + another array: "args": [ [1, 2, 3] ]. + +### Removing a specific key binding rule + +You can write a key binding rule that targets the removal of a specific + default key binding. With the keybindings.json, it was always possible to + redefine all the key bindings of AVAP TM Dev Studio, but it can + be difficult to make a small tweak, especially around overloaded keys, + such as `Tab` or `Escape` . To remove a specific key + binding, add a - to the command and the rule will be a removal rule. + +Here is an example: + +```javascript +// In Default Keyboard Shortcuts + + ... + + { "key": "tab", "command": "tab", "when": ... }, + + { "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": + ... }, + + { "key": "tab", "command": "acceptSelectedSuggestion", "when": ... + }, + + ... + + + // To remove the second rule, for example, add in keybindings.json: + + { "key": "tab", "command": "-jumpToNextSnippetPlaceholder" } +``` + +To override a specific key binding rule with an empty action, you can + specify an empty command: + +```javascript +// To override and disable any `tab` keybinding, for example, add in + keybindings.json: + + { "key": "tab", "command": "" } +``` + +### Keyboard layouts + +The keys above are string representations for virtual keys and do not + necessarily relate to the produced character when they are pressed. More + precisely: + +* Reference: Virtual-Key Codes (Windows) +* `tab` for VK_TAB (0x09) +* ; for VK_OEM_1 (0xBA) +* `=` for VK_OEM_PLUS (0xBB) +* `,` for VK_OEM_COMMA (0xBC) +* `-` for VK_OEM_MINUS (0xBD) +* `.` for VK_OEM_PERIOD (0xBE) +* `/` for VK_OEM_2 (0xBF) +* ` for VK_OEM_3 (0xC0) +* `[` for VK_OEM_4 (0xDB) +* `\` for VK_OEM_5 (0xDC) +* `]` for VK_OEM_6 (0xDD) +* `'` for VK_OEM_7 (0xDE) +* etc. + +Different keyboard layouts usually reposition the above virtual keys or + change the characters produced when they are pressed. When using a + different keyboard layout than the standard US, AVAP TM Dev + Studio does the following: + +All the key bindings are rendered in the UI using the current system's + keyboard layout. For example, Split Editor when using a French + (France) keyboard layout is now rendered as `Ctrl+*` : + +When editing keybindings.json, AVAP TM Dev Studio highlights + misleading key bindings, those that are represented in the file with the + character produced under the standard US keyboard layout, but that need + pressing keys with different labels under the current system's + keyboard layout. For example, here is how the{' '} + Default Keyboard Shortcuts rules look like when using a + French (France) keyboard layout: + +There is also a widget that helps input the key binding rule when editing + keybindings.json. To launch the Define Keybinding widget, press{' '} + `Ctrl+K Ctrl+K` . The widget listens for key presses and renders + the serialized JSON representation in the text box and below it, the keys + that AVAP TM Dev Studio has detected under your current keyboard + layout. Once you've typed the key combination you want, you can press{' '} + `Enter` and a rule snippet will be inserted. + +### Keyboard layout-independent bindings + +Using scan codes, it is possible to define keybindings which do not change + with the change of the keyboard layout. For example: + +```javascript +{ "key": "cmd+[Slash]", "command": "editor.action.commentLine", + "when": "editorTextFocus" } +``` + +Accepted scan codes: + +* `[F1]-[F19]` , `[KeyA]-[KeyZ]` ,{' '} `[Digit0]-[Digit9]` +* `[Backquote]` , `[Minus]` , `[Equal]` ,{' '} `[BracketLeft]` , `[BracketRight]` ,{' '} `[Backslash]` , `[Semicolon]` ,{' '} `[Quote]` , `[Comma]` , `[Period]` ,{' '} `[Slash]` +* `[ArrowLeft]` , `[ArrowUp]` ,{' '} `[ArrowRight]` , `[ArrowDown]` ,{' '} `[PageUp]` , `[PageDown]` , `[End]` ,{' '} `[Home]` +* `[Tab]` , `[Enter]` , `[Escape]` ,{' '} `[Space]` , `[Backspace]` , `[Delete]` +* `[Pause]` , `[CapsLock]` , `[Insert]` +* `[Numpad0]-[Numpad9]` , `[NumpadMultiply]` ,{' '} `[NumpadAdd]` , `[NumpadComma]` +* `[NumpadSubtract]` , `[NumpadDecimal]` ,{' '} `[NumpadDivide]` + +### when clause contexts + +AVAP TM Dev Studio gives you fine control over when your key + bindings are enabled through the optional when clause. If your key binding + doesn't have a when clause, the key binding is globally available at + all times. A when clause evaluates to either Boolean true or false for + enabling key bindings. + +AVAP TM Dev Studio sets various context keys and specific values + depending on what elements are visible and active in the AVAP TM {' '} + Dev Studio UI. For example, the built-in Start Debugging command has the + keyboard shortcut `F5` , which is only enabled when there is an + appropriate debugger available (context debuggersAvailable is + true) and the editor isn't in debug mode (context inDebugMode + is false): + +You can also view a keybinding's when clause directly in the Default + Keybindings JSON ( + + Preferences: Open Default Keyboard Shortcuts (JSON) + + ): + +```javascript +{ "key": "f5", "command": "workbench.action.debug.start", + "when": "debuggersAvailable && !inDebugMode" }, +``` + +For when clause conditional expressions, the following conditional + operators are useful for keybindings: + +You can find the full list of when clause conditional operators in the + when clause contexts reference. + +You can find some of the available when clause contexts in the when clause + context reference. + +The list there isn't exhaustive and you can find other when clause + contexts by searching and filtering in the Keyboard Shortcuts editor ( + Preferences: Open Keyboard Shortcuts ) or reviewing + the Default Keybindings JSON file ( + + Preferences: Open Default Keyboard Shortcuts (JSON) + + ). + +### Custom keybindings for refactorings + +The editor.action.codeAction command lets you configure keybindings for + specific Refactorings (Code Actions). For example, the keybinding + below triggers the Extract function refactoring Code + Actions: + +```javascript +{ + "key": "ctrl+shift+r ctrl+e", + "command": "editor.action.codeAction", + "args": { + "kind": "refactor.extract.function" + } + + } +``` + +This is covered in depth in the Refactoring topic where you can learn + about different kinds of Code Actions and how to prioritize them in the + case of multiple possible refactorings. + +### Default Keyboard Shortcuts + +You can view all default keyboard shortcuts in AVAP Dev Studio in the{' '} + Keyboard Shortcuts editor with the{' '} + Show Default Keybindings command in the{' '} + More Actions (...) menu. This applies the + @source:default filter to the Keyboard Shortcuts editor + ( Source is 'Default'). + +You can view the default keyboard shortcuts as a JSON file using the + command{' '} + + Preferences: Open Default Keyboard Shortcuts (JSON) + + . + +Some commands included below do not have default keyboard shortcuts and so + are displayed as unassigned but you can assign your own keybindings. + +### Next steps + +Now that you know about our Key binding support, what's next... + +* Language Support - Our Good, Better, Best language grid to see what you can expect +* Debugging - This is where AVAP™ DS really shines +* Node.js - End to end Node.js scenario with a sample app + +### Common questions + +In the Keyboard Shortcut editor, you can filter on + specific keystrokes to see which commands are bound to which keys. Below + you can see that Ctrl+Shift+P is bound to{' '} + Show All Commands to bring up the Command Palette. + +Find a rule that triggers the action in the{' '} + Default Keyboard Shortcuts and write a modified version + of it in your keybindings.json file: + +```javascript +// Original, in Default Keyboard Shortcuts + + { "key": "ctrl+shift+k", "command": "editor.action.deleteLines", + "when": "editorTextFocus" }, + + // Modified, in User/keybindings.json, Ctrl+D now will also trigger this + action + + { "key": "ctrl+d", "command": "editor.action.deleteLines", + "when": "editorTextFocus" }, +``` + +Use the editorLangId context key in your when clause: + +```javascript +{ "key": "shift+alt+a", "command": "editor.action.blockComment", + "when": "editorTextFocus && editorLangId == csharp" + }, +``` + +The most common problem is a syntax error in the file. Otherwise, try + removing the when clause or picking a different key. Unfortunately, at + this point, it is a trial and error process. diff --git a/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md b/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md new file mode 100644 index 0000000..1d62ddc --- /dev/null +++ b/docs/developer.avapframework.com/12_GET_STARTED_Tips_and_tricks_GET_STARTED_Tips_and_tricks.md @@ -0,0 +1,933 @@ +"Tips and Tricks" lets you jump right in and learn how to be + productive with AVAP™ Dev Studio 2024. You'll become familiar with its + powerful editing, code intelligence, and source code control features and + learn useful keyboard shortcuts. This topic goes pretty fast and provides + a broad overview, so be sure to look at the other in-depth topics in + Getting Started and the User Guide to learn more. + +### Basics + +The best way of exploring AVAP TM Dev Studio hands-on is to open + the Welcome page. You will get an overview of AVAP TM Dev + Studio's customizations and features. Help > Welcome. + + + +Pick a Walkthrough for a self-guided tour through the + setup steps, features, and deeper customizations that AVAP TM {' '} + Dev Studio offers. As you discover and learn, the walkthroughs track your + progress. + +If you are looking to improve your code editing skills open the{' '} + Interactive Editor Playground . Try out AVAP TM {' '} + Dev Studio's code editing features, like multi-cursor editing, + IntelliSense, Snippets, Emmet, and many more.{' '} + Help > Editor Playground . + + + +Access all available commands based on your current context. + +Keyboard Shortcut: Ctrl+Shift+P + + + +All of the commands are in the Command Palette with the associated key + binding (if it exists). If you forget a keyboard shortcut, use the + Command Palette to help you out. + +Download the keyboard shortcut reference sheet for your platform + (macOS, Windows, Linux). + +Quickly open files. + +Keyboard Shortcut: `Ctrl+P` + +Tip : Type `?` to view command suggestions. + + + +Typing commands such as edt and term followed by a space will bring up + dropdown lists. + + + +Repeat the Quick Open keyboard shortcut to cycle quickly + between recently opened files. + +You can open multiple files from Quick Open by pressing + the Right arrow key. This will open the currently selected file in the + background and you can continue selecting files from{' '} + Quick Open . + +Open Recent + +Keyboard Shortcut: `Ctrl+R` + +Displays a Quick Pick dropdown with the list from File {' '} + > Open Recent with recently opened folders and + workspaces followed by files. + +### Command line + +AVAP TM Dev Studio has a powerful command line interface + (CLI) which allows you to customize how the editor is launched to + support various scenarios. + +```javascript +# open code with current directory + + code . + # open the current directory in the most recently used code window + + code -r . + # create a new window + + code -n + + # change the language + + code --locale=es + + # open diff editor + + code --diff + + # open file at specific line and column + + code --goto package.json:10:5 + + # see help options + + code --help + + # disable all extensions + + code --disable-extensions . +``` + +Workspace specific files are in a .avapcode folder at the root. For + example, tasks.json for the Task Runner and launch.json for the debugger.{' '} + +### Status Bar + +Keyboard Shortcut: `Ctrl+Shift+M` + +Quickly jump to errors and warnings in the project. + +Cycle through errors with `F8` or `Shift+F8` + +You can filter problems either by type ('errors', + 'warnings') or text matching. + +Keyboard Shortcut: `Ctrl+K M` + +If you want to persist the new language mode for that file type, you can + use the Configure File Association for command to + associate the current file extension with an installed language. + +### Customization + +There are many things you can do to customize AVAP TM Dev . + +* Change your theme +* Change your keyboard shortcuts +* Tune your settings +* Add JSON validation +* Create snippets +* Install extensions + +Keyboard Shortcut: `Ctrl+K Ctrl+T` + +You can install more themes from the AVAP TM Dev Studio + extension Marketplace. + +Are you used to keyboard shortcuts from another editor? You can install a + Keymap extension that brings the keyboard shortcuts from your favorite + editor to AVAP TM Dev Studio. Go to Preferences {' '} + > Migrate Keyboard Shortcuts from ... to see the + current list on the Marketplace. Some of the more popular ones: + +* Vim +* Sublime Text Keymap +* Emacs Keymap +* Atom Keymap +* Brackets Keymap +* Eclipse Keymap +* AVAP™ Dev Studio Keymap + +Keyboard Shortcut: `Ctrl+K Ctrl+S` + +You can search for shortcuts and add your own keybindings to the + keybindings.json file. + + + +See more in Key Bindings for AVAP TM Dev Studio. + +By default AVAP TM Dev Studio shows the Settings editor, you can + find settings listed below in a search bar, but you can still edit the + underlying settings.json file by using the{' '} + Open User Settings (JSON) command or by changing + your default settings editor with the workbench.settings.editor setting. + +Open User Settings settings.json + +Keyboard Shortcut: `Ctrl+,` + +Change the font size of various UI elements + +```javascript +// Main editor + + "editor.fontSize": 18, + + // Terminal panel + + "terminal.integrated.fontSize": 14, + + // Output panel + + "[Log]": { + "editor.fontSize": 15 + + } +``` + +Change the zoom level + +```javascript +"window.zoomLevel": 5 +``` + +Font ligatures + +```javascript +"editor.fontFamily": "Fira Code", + + "editor.fontLigatures": true +``` + + + +Auto Save + +```javascript +"files.autoSave": "afterDelay" +``` + +You can also toggle Auto Save from the top-level menu with the File > + Auto Save. + +Format on save + +```javascript +"editor.formatOnSave": true +``` + +Format on paste + +```javascript +"editor.formatOnPaste": true +``` + +Change the size of Tab characters + +```javascript +"editor.tabSize": 4 +``` + +Spaces or Tabs + +```javascript +"editor.insertSpaces": true +``` + +Render whitespace + +```javascript +"editor.renderWhitespace": "all" +``` + +Whitespace characters are rendered by default in text selection. + +Ignore files / folders + +Removes these files / folders from your editor window. + +```javascript +"files.exclude": { + "somefolder/": true, + "somefile": true + + } +``` + +Remove these files / folders from search results. + +```javascript +"search.exclude": { + "someFolder/": true, + "somefile": true + + } +``` + +And many, many other customizations. + +You can scope the settings that you only want for specific languages by + the language identifier. You can find a list of commonly used language IDs + in the Language Identifiers reference. + +```javascript +"[languageid]": { + + + } +``` + + + +Enabled by default for many file types. Create your own schema and + validation in settings.json + +```javascript +"json.schemas": [ { + "fileMatch": [ "/bower.json" + ], + "url": "https://json.schemastore.org/bower" + } + ] +``` + +or for a schema defined in your workspace + +```javascript +"json.schemas": [ { + "fileMatch": [ "/foo.json" + ], + "url": "./myschema.json" + } + ] +``` + +or a custom schema + +```javascript +"json.schemas": [ { + "fileMatch": [ "/.myconfig" + ], + "schema": { + "type": "object", + "properties": { + "name" : { + "type": "string", + "description": "The name of the entry" + } + } + } + } + ] +``` + +See more in the JSON documentation. + +### Extensions + +Keyboard Shortcut: `Ctrl+Shift+X` + +In the Extensions view, you can search via the search bar + or click the More Actions (...) button to filter + and sort by install count. + + + +In the Extensions view, click{' '} + Show Recommended Extensions in the{' '} + More Actions (...) button menu. + + + +Are you interested in creating your own extension? You can learn how to do + this in the Extension API documentation, specifically check out the + documentation on contribution points. + +* configuration +* commands +* keybindings +* languages +* debuggers +* grammars +* themes +* snippets +* jsonValidation + +### Files and folders + +Keyboard Shortcut: Ctrl+` + + + +Further reading: + +* Integrated Terminal documentation +* Mastering AVAP™ DS's Terminal article + +Keyboard Shortcut: `Ctrl+B` + + + +Keyboard Shortcut: `Ctrl+J` + +Keyboard Shortcut: `Ctrl+K Z` + + + +Enter distraction free Zen mode. + +Press `Esc` twice to exit Zen Mode. + +Keyboard Shortcut: `Ctrl+\` + +You can also drag and drop editors to create new editor groups and move + editors between groups. + + + +Keyboard Shortcut: `Ctrl+1` , `Ctrl+2` ,{' '} + `Ctrl+3` + + + +Keyboard Shortcut: `Ctrl+Shift+E` + +Keyboard Shortcut: `Ctrl+click` ( `Cmd+click` on + macOS) + +You can quickly open a file or image or create a new file by moving the + cursor to the file link and using `Ctrl+click` . + + + +Keyboard Shortcut: `Ctrl+K F` + +Navigate entire history: `Ctrl+Tab` + +Navigate back: `Alt+Left` + +Navigate forward: `Alt+Right` + + + +Create language associations for files that aren't detected correctly. + For example, many configuration files with custom file extensions are + actually JSON. + +```javascript +"files.associations": { + ".database": "json" + + } +``` + +AVAP TM Dev Studio will show you an error message when you try + to save a file that cannot be saved because it has changed on disk. AVAP + TM Dev Studio blocks saving the file to prevent overwriting + changes that have been made outside of the editor. + +In order to resolve the save conflict, click the Compare action in the + error message to open a diff editor that will show you the contents of the + file on disk (to the left) compared to the contents in AVAP + TM Dev Studio (on the right): + + + +Use the actions in the editor toolbar to resolve the save conflict. You + can either Accept your changes and thereby overwriting + any changes on disk, or Revert to the version on disk. + Reverting means that your changes will be lost. + +Note : The file will remain dirty and cannot be saved + until you pick one of the two actions to resolve the conflict. + +### Editing Hacks + +Here is a selection of common features for editing code. If the keyboard + shortcuts aren't comfortable for you, consider installing a keymap + extension for your old editor. + +Tip : You can see recommended keymap extensions in the{' '} + Extensions view by filtering the search to + @recommended:keymaps. + +To add cursors at arbitrary positions, select a position with your mouse + and use `Alt+Click` ( `Option+Click` on + macOS). + +To set cursors above or below the current position use: + +Keyboard Shortcut: `Ctrl+Alt+Up` or `Ctrl+Alt+Down` + + + +You can add additional cursors to all occurrences of the current selection + with Ctrl+Shift+L. + + + +If you do not want to add all occurrences of the current selection, you + can use Ctrl+D instead. This only selects the next occurrence after the + one you selected so you can add selections one by one. + + + +You can select blocks of text by holding `Shift+Alt` ( + `Shift+Option` on macOS) while you drag your mouse. A + separate cursor will be added to the end of each selected line. + + + +You can also use keyboard shortcuts to trigger column selection. + +You can add vertical column rulers to the editor with the editor.rulers + setting, which takes an array of column character positions where + you'd like vertical rulers. + +```javascript +{ + "editor.rulers": [20, 40, 60] + + } +``` + + + +Pressing the Alt key enables fast scrolling in the editor and Explorers. + By default, fast scrolling uses a 5X speed multiplier but you can control + the multiplier with the * Editor: Fast Scroll Sensitivity * + (editor.fastScrollSensitivity) setting. + +Keyboard Shortcut: `Shift+Alt+Up` or{' '} + `Shift+Alt+Down` + +Keyboard Shortcut: `Alt+Up` or `Alt+Down` + + + +Keyboard Shortcut: `Shift+Alt+Left` or{' '} + `Shift+Alt+Right` + + + +You can learn more in the Basic Editing documentation. + +Keyboard Shortcut: `Ctrl+Shift+O` + + + +You can group the symbols by kind by adding a colon, @:. + + + +Keyboard Shortcut: `Ctrl+T` + + + +The Outline view in the File Explorer (default collapsed at the + bottom) shows you the symbols of the currently open file. + + + +You can sort by symbol name, category, and position in the file and allows + quick navigation to symbol locations. + +Keyboard Shortcut: `Ctrl+G` + +Keyboard Shortcut: `Ctrl+U` + +Keyboard Shortcut: `Ctrl+K Ctrl+X` + + + +Currently selected source code: `Ctrl+K Ctrl+F` + +Whole document format: `Shift+Alt+F` + + + +Keyboard Shortcut: `Ctrl+Shift+[` and `Ctrl+Shift+]` + + + +You can also fold/unfold all regions in the editor with Fold All ( + `Ctrl+K Ctrl+0` ) and Unfold All ( + `Ctrl+K Ctrl+J` ). + +You can fold all block comments with Fold All Block Comments ( + `Ctrl+K Ctrl+/` ). + +Keyboard Shortcut: `Ctrl+L` + +Keyboard Shortcut: `Ctrl+Home` and `Ctrl+End` + +In a Markdown file, use + +Keyboard Shortcut: `Ctrl+Shift+V` + +In a Markdown file, use + +Keyboard Shortcut: `Ctrl+K V` + +The preview and editor will synchronize with your scrolling in either + view. + +### IntelliSense + +`Ctrl+Space` to trigger the Suggestions widget. + + + +You can view available methods, parameter hints, short documentation, etc. + +Select a symbol then type `Alt+F12` . Alternatively, you can use + the context menu. + +Select a symbol then type `F12` . Alternatively, you can use the + context menu or `Ctrl+click` ( `Cmd+click` on + macOS). + + + +You can go back to your previous location with the Go {' '} + > Back command or `Alt+Left` . + +You can also see the type definition if you press `Ctrl` ( + `Cmd` on macOS) when you are hovering over the type. + +Select a symbol then type `Shift+F12` . Alternatively, you can + use the context menu. + + + +Select a symbol then type `Shift+Alt+F12` to open the + References view showing all your file's symbols in a dedicated view. + +Select a symbol then type `F2` . Alternatively, you can use the + context menu. + +rename symbol + +Besides searching and replacing expressions, you can also search and reuse + parts of what was matched, using regular expressions with capturing + groups. Enable regular expressions in the search box by clicking the{' '} + Use Regular Expression .* button ( `Alt+R` + ) and then write a regular expression and use parentheses to define + groups. You can then reuse the content matched in each group by using $1, + $2, etc. in the Replace field. + + + +Install the ESLint extension. Configure your linter however you'd + like. Consult the ESLint specification for details on its linting rules + and options. + +Here is configuration to use ES6. + +```javascript +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "jsx": true, + "classes": true, + "defaultParams": true + } + }, + "rules": { + "no-const-assign": 1, + "no-extra-semi": 0, + "semi": 0, + "no-fallthrough": 0, + "no-empty": 0, + "no-mixed-spaces-and-tabs": 0, + "no-redeclare": 0, + "no-this-before-super": 1, + "no-undef": 1, + "no-unreachable": 1, + "no-use-before-define": 0, + "constructor-super": 1, + "curly": 0, + "eqeqeq": 0, + "func-names": 0, + "valid-typeof": 1 } + + } +``` + +See IntelliSense for your package.json file. + + + +Support for Emmet syntax. + + + +### Snippets + +File > Preferences >{' '} + Configure User Snippets , select the language, and create + a snippet. + +```javascript +"create component": { + "prefix": "component", + "body": [ "class $1 extends React.Component {", + "", + "\trender() {", + "\t\treturn ($2);", + "\t}", + "", + "}" + ] + }, +``` + +See more details in Creating your own Snippets. + +### Git integration + +Keyboard Shortcut: `Ctrl+Shift+G` + +Git integration comes with AVAP TM Dev Studio + "out-of-the-box". You can install other SCM providers from the + Extension Marketplace. This section describes the Git integration but much + of the UI and gestures are shared by other SCM providers. + +From the Source Control view, select a file to open the diff. + + + +Alternatively, click the Open Changes button in the top + right corner to diff the current open file. + +Views + +The default view for diffs is the side by side view . + +Toggle inline view by clicking the{' '} + More Actions (...) button in the top right and + selecting Toggle Inline View . + + + +If you prefer the inline view, you can set + "diffEditor.renderSideBySide": false. + +Accessible Diff Viewer + +Navigate through diffs with `F7` and `Shift+F7` . + This will present them in a unified patch format. Lines can be navigated + with arrow keys and pressing `Enter` will jump back in the diff + editor and the selected line. + + + +Edit pending changes + You can make edits directly in the pending changes of the diff view. + +Easily switch between Git branches via the Status Bar. + + + +Stage file changes + +Hover over the number of files and click the plus button. + +Click the minus button to unstage changes. + + + +Stage selected + +Stage a portion of a file by selecting that file (using the + arrows) and then choosing Stage Selected Ranges from + the Command Palette . + +Click the (...) button and then select{' '} + Undo Last Commit to undo the previous commit. The changes + are added to the Staged Changes section. + + + +AVAP TM Dev Studio makes it easy to see what Git commands are + actually running. This is helpful when learning Git or debugging a + difficult source control issue. + +Use the Toggle Output command ( + `Ctrl+Shift+U` ) and select Git in the + dropdown. + +View diff decorations in editor. See documentation for more details. + + + +During a merge, go to the Source Control view ( + `Ctrl+Shift+G` ) and make changes in the diff view. + +You can resolve merge conflicts with the inline CodeLens which lets you{' '} + Accept Current Change ,{' '} + Accept Incoming Change ,{' '} + Accept Both Changes , and Compare Changes + . + +```javascript +git config --global merge.tool vscode + + git config --global mergetool.vscode.cmd 'code --wait $MERGED' +``` + +```javascript +git config --global diff.tool vscode + + git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL + $REMOTE' +``` + +### Debugging + +From the Run and Debug view ( `Ctrl+Shift+D` ), select{' '} + create a launch.json file , which will prompt you to + select the environment that matches your project (Node.js, Python, + C++, etc). This will generate a launch.json file. Node.js support is + built-in and other environments require installing the appropriate + language extensions. See the debugging documentation for more details. + + + +Place breakpoints next to the line number. Navigate forward with the Debug + widget. + + + +Place breakpoints next to the line number. Navigate forward with the Debug + widget. + + + +Inspect variables in the Run panels and in the console. + + + +Logpoints act much like breakpoints but instead of halting the debugger + when they are hit, they log a message to the console. Logpoints are + especially useful for injecting logging while debugging production servers + that cannot be modified or paused. + +Add a logpoint with the Add Logpoint command in the left + editor gutter and it will be displayed as a "diamond" shaped + icon. Log messages are plain text but can include expressions to be + evaluated within curly braces ('{}'). + + + +A trigged breakpoint is a breakpoint that is automatically enabled once + another breakpoint is hit. They can be very useful when diagnosing failure + cases in code that happen only after a certain precondition. + +Triggered breakpoints can be set by right-clicking on the glyph margin, + selecting Add Triggered Breakpoint , and then choosing + which other breakpoint enables the breakpoint. + +http://https://code.visualstudio.com/assets/docs/editor/debugging/debug-triggered-breakpoint.mp4 + +### Task runner + +Select Terminal from the top-level menu, run the command{' '} + Configure Tasks , then select the type of task you'd + like to run. This will generate a tasks.json file with content like the + following. See the Tasks documentation for more details. + +```javascript +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ { + "type": "npm", + "script": "install", + "group": { + "kind": "build", + "isDefault": true + } + } + ] + } +``` + +There are occasionally issues with auto generation. Check out the + documentation for getting things to work properly. + +Select Terminal from the top-level menu, run the command{' '} + Run Task , and select the task you want to run. Terminate + the running task by running the command Terminate Task + + + +You can define a keyboard shortcut for any task. From the{' '} + Command Palette ( `Ctrl+Shift+P` ), + select Preferences: Open Keyboard Shortcuts File , bind + the desired shortcut to the workbench.action.tasks.runTask command, and + define the Task as args. + +For example, to bind `Ctrl+H` to the Run tests task, add the + following: + +```javascript +{ + "key": "ctrl+h", + "command": "workbench.action.tasks.runTask", + "args": "Run tests" + + } + + Run npm s +``` + + + +From the explorer you can open a script in the editor, run it as a task, + and launch it with the node debugger (when the script defines a debug + option like --inspect-brk). The default action on click is to open the + script. To run a script on a single click, set npm.scriptExplorerAction to + "run". Use the setting npm.exclude to exclude scripts in + package.json files contained in particular folders. + +With the setting npm.enableRunFromFolder, you can enable to run npm + scripts from the File Explorer's context menu for a folder. The + setting enables the command Run NPM Script in Folder ... + when a folder is selected. The command shows a Quick Pick list of the npm + scripts contained in this folder and you can select the script to be + executed as a task. + +### Portable mode + +AVAP TM Dev Studio has a Portable mode which lets you keep + settings and data in the same location as your installation, for example, + on a USB drive. + +### Insiders builds + +The AVAP™ Dev Studio Code team uses the Insiders version to test the + latest features and bug fixes of AVAP™ DS. You can also use the Insiders + version by downloading it here. + +* For Early Adopters - Insiders has the most recent code changes for users and extension authors to try out. +* Frequent Builds - New builds every day with the latest bug fixes and features. +* Side-by-side install - Insiders installs next to the Stable build allowing you to use either independently. diff --git a/docs/developer.avapframework.com/13_get_token_info_get_token_info.md b/docs/developer.avapframework.com/13_get_token_info_get_token_info.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md b/docs/developer.avapframework.com/15_get_vaulted_transactions_get_vaulted_transactions.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md b/docs/developer.avapframework.com/17_getUSDGRAYcotization_getUSDGRAYcotization.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md b/docs/developer.avapframework.com/1_Administrar_solicitudes_KYC_GET_EN_Administrar_solicitudes_KYC_GET_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md b/docs/developer.avapframework.com/1_Agregar_usuarios_a_la_lista_negra_EN_Agregar_usuarios_a_la_lista_negra_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md b/docs/developer.avapframework.com/1_Autorizar_carga_masiva_de_saldo_EN_Autorizar_carga_masiva_de_saldo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md b/docs/developer.avapframework.com/1_Chat_prebind_EN_Chat_prebind_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md b/docs/developer.avapframework.com/1_Check_Session_EN_Check_Session_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md b/docs/developer.avapframework.com/1_Consultar_Solucion_EN_Consultar_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md b/docs/developer.avapframework.com/1_Crear_Solucion_EN_Crear_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/1_Datos_Programa_de_Puntos_EN_Datos_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md b/docs/developer.avapframework.com/1_Desplegar_preguntas_de_seguridad_EN_Desplegar_preguntas_de_seguridad_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md b/docs/developer.avapframework.com/1_Enviar_SMS_EN_Enviar_SMS_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/1_Historico_de_Ingresos_Tiempo_Aire_EN_Historico_de_Ingresos_Tiempo_Aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md b/docs/developer.avapframework.com/1_actividad_del_usuario_EN_actividad_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md b/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md new file mode 100644 index 0000000..7b81937 --- /dev/null +++ b/docs/developer.avapframework.com/1_alta_baja_modificacion_alta_baja_modificacion_EN.md @@ -0,0 +1,34 @@ +### Where: + +* status : Shows if the call has been successful (true) or not (false). +* codtran : Transaction code that identifies the executed operation. +* result : Contains information about the result of the service. +* user_id_registration : New user ID. +* longitud_otp : Length of the OTP associated with the operation. +* elapsed : Operation execution time. + +### Where: + +* status : Shows if the call has been successful (true) or not (false). +* level: Error importance level. +* message : Error message. +* error : Sole error code. +* Error catalogue Message Cause Email is required The parameter enviar_email_confirmar has been sent, but the parameter email has not been informed nor attached an email address The phone + prefix phone already exists The account identified by phone already exits and is activated An attempt to create an account without a phone was made Required parameter not provided phone An attempt was made to create a phone number with the wrong length The value of the parameter phone has the wrong length, depending on the country indicated in country_code An attempt was made to create an account with a prefix other than the country prefix != country_code The value of the parameter prefix does not match with the country code indicated in country_code The account is pending to sign the discharge The account already exists in the system, but is inactive The nick nick is already used The account identified by nick exists and it's active Country not found Controlled error in case the country code entered is wrong. We have found a problem and are working to fix it ... sorry for the inconvenience Uncontrolled error 500: Internal Server Error In order not to provide service information, a 500 error is thrown if a required parameter is not reported. 500: Internal Server Error You can also get such an error if an uncontrolled error occurs on the server Chart 2.a.2 : List of exceptions thrown by the service{' '} Alta Usuario . Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). +* Business logic This section details some particularities related to this service that it is advisable to take into account.{' '} +* If an invalid channel_id value is provided or none is provided, the default channel (Web) is set. +* If an email is associated with the new user, an activation email will be sent, even if their account is automatically activated. +* If, on the contrary, email is not provided, there is the possibility of activating the user directly by sending the{' '} activa parameter. If it is not activated directly to the user, an SMS is sent with activation instructions. The account will remain in an inactive state until it is activated, it will not be deleted from the system at any time. +* If the account is already active, trying to activate it again will get a 404 error. This error is forced from the system when no registration is found to sign. +* The PIN is generated and sent in the first activation SMS. If the user does not activate the account or does not enter the OTP correctly, the password generated initially is reused and it is not sent in subsequent activation messages. +* The user's nickname can be used for the identification process (login). If nick is not indicated during the registration process, it will take the value of phone parametro. If the parameter affiliate_id is specified, the name of the same will be used in the welcome SMS, instead of using the name of the affiliate by default (Pademobile). + +This section details, for each box, all the information necessary to + exploit the previously documented services. + +There is a user who has an "AFFILIATE" profile and who will + allow managing the community: + +### Examples + +Below are some examples of calls to the services described in this + document: diff --git a/docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md b/docs/developer.avapframework.com/1_comprobar_nick_EN_comprobar_nick_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/1_download_101cli_download_101cli.md b/docs/developer.avapframework.com/1_download_101cli_download_101cli.md new file mode 100644 index 0000000..a0a9d72 --- /dev/null +++ b/docs/developer.avapframework.com/1_download_101cli_download_101cli.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more.. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md b/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md new file mode 100644 index 0000000..1871bc8 --- /dev/null +++ b/docs/developer.avapframework.com/29_Facturation_Facturation_System_EN.md @@ -0,0 +1,78 @@ +101OBeX offers different plans: + +* Developer +* Startup +* Business +* Enterprise + +The ideal plan to become familiar with 101OBeX and introduce yourself to + the capabilities of the system. It provides complete access to APIs with a + maximum allowance of 500 monthly transactions so you can start your + project, with no a membership cost*. + +*There is no membership fee. Transactional costs, plug-ins and other + services within the membership are not included. To exploit these + services, it will be necessary to purchase a different plan. + +Starting at 50 $ per month, you will have 2 project slots with one active + project, and 5,000 monthly transactions to start your project. + +Starting at 150 $ per month, you can have up to 5 projects and 2 + pre-activated slots, along with 50,000 monthly transactions to launch your + business at the highest level. + +Geared towards corporations requiring special configurations. Membership + activation is done through the sales team:{' '} + sales@101obex.com . + +The chosen subscription type (developer, startup, business or + enterprise) that determines the configuration of the set of available + resources. + +* Total project slots. +* Pre-activated projects. +* Maximum transactional volume. +* Monthly transactions. +* Storage. +* Support. + +If payment is established monthly, charges will be made on the first day + of each month for the total membership amount, plus contracted add-ons and + plugins. For the first month, a prorated amount will be charged from the + plan's start date to the end of the month. If payment is established + annually, a full year of service will be charged, and renewal will occur + the day after the plan expires. + +101OBeX does not invoice exempt, since it is not a possibility + contemplated in the service. If any of the elements that make up a plan + exceed its limit, the service will stop being provided. + +To prevent your projects from being left without service, 101OBeX offers + the possibility of configuring alarms that will allow you to receive + notifications based on limits for each category. Although these alarms are + configurable, they have pre-established minimums to ensure that you are + always informed. + +The client always has the possibility of expanding the limits for each of + the components that make up a membership through the purchasing of add-ons + or by upgrading their plan. + +Clients can check their membership status in the dashboard at any time, + along with plan configuration in the Subscription Plan section of the menu + bar. + +In the Settings section of the menu, an option is available to track + transaction history linked to membership collections. How to change the + payment method Payment methods can be changed from monthly to annual and + vice versa at any time. How to change the payment method At present the + only form of payment is by credit card. But you can add new cards and + change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. + +At present the only form of payment is by credit card. But you can add new + cards and change your payment method at any time. + +You have the possibility to upgrade and downgrade your plan according to + your needs. diff --git a/docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/2_Actualizar_Programa_de_Puntos_EN_Actualizar_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md b/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md new file mode 100644 index 0000000..9a548ee --- /dev/null +++ b/docs/developer.avapframework.com/2_Add_Ons_EN_Add_Ons_EN.md @@ -0,0 +1,48 @@ +Add-ons are collections of attributes or features that can be added to + your project. They allow for personalization, adaptation to your needs, + and optimization of usage. You can activate add-ons in different processes + throughout the acquisition of a plan or the life of a project. You can + also find in the Setting section an Add-on chapter in the settings section + dedicated exclusively to the administration of these components. + +Currently, the following Add-ons are available: + + + +Allows you to add a new empty slot to later activate a project and start + working with it. Plans have a defined limit for projects and active slots. + This add-on allows expansion to the maximum permitted slots. + + + +Expand the volume of monthly requests in your plan and manage the total + set of requests for each of your projects. The volume of requests + available in a plan can never exceed the maximum request capacity + established in that plan. + +Plans have a predefined storage capacity. For example, a Business plan has + a maximum storage capacity of 2 Teras and a default storage of 1 Gb. This + means that the storage can be increased from the default 1 Gb to 2 Teras + maximum, but no more. If more storage is required, it will be necessary to + upgrade the plan. + +If your project or set of project exceed the maximum storage allowed for + the plan you have, you will need to upgrade the your plan. + + + +Access to professional support through the 101OBeX platform's suite of + engineers. + +We recommend reviewing the Pricing document for details about the pricing + configuration of the entire Add-on catalog. If a project or node reaches + the limit in any of its properties or configurations, the requests will + begin to return. To prevent this situation from causing problems in your + projects, 101OBeX is configured to support up to 10% more in each of the + configurations during the next 24 hours from the moment any of the limits + are exceeded. After this period, applications will begin to be given back. + +To further prevent such scenarios, 101OBeX employs an alarm system. This + system sends notifications when specific properties approach predefined + thresholds, granting you control over your project's growth at all + times. diff --git a/docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md b/docs/developer.avapframework.com/2_Autorizar_Solucion_EN_Autorizar_Solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md b/docs/developer.avapframework.com/2_Chat_Usuario_EN_Chat_Usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md b/docs/developer.avapframework.com/2_Consultar_usuarios_de_la_solucion_EN_Consultar_usuarios_de_la_solucion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md b/docs/developer.avapframework.com/2_Create_ethereum_account_create_ethereum_account.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md b/docs/developer.avapframework.com/2_Enviar_Ticket_por_email_EN_Enviar_Ticket_por_email_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/2_download_github_download_github.md b/docs/developer.avapframework.com/2_download_github_download_github.md new file mode 100644 index 0000000..6f5a626 --- /dev/null +++ b/docs/developer.avapframework.com/2_download_github_download_github.md @@ -0,0 +1,26 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +To begin, developers need to initialize their token using the + 'init' parameter. This process involves authenticating through the + Google OAuth API to obtain the API token, which is stored locally on their + computer. Once the token is initialized, developers can use the + 'info' parameter to access details about their API privileges, + projects, teams, and access token. Finally, developers have the option to + remove all downloaded information from their computer using the + 'clean' parameter. + +* https://github.com/101OBeXCorp/101obexcli/releases/ + +Mac: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease-staging/101obexcli-macosx.zip + +Linux: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli.-.linux.zip + +Win32: + +* https://github.com/101OBeXCorp/101obexcli/releases/download/prerelease/101obexcli-win32.zip diff --git a/docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md b/docs/developer.avapframework.com/2_get_blockchain_accounts_get_blockchain_accounts.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/31_github_github_cli.md b/docs/developer.avapframework.com/31_github_github_cli.md new file mode 100644 index 0000000..d47fbdf --- /dev/null +++ b/docs/developer.avapframework.com/31_github_github_cli.md @@ -0,0 +1,5 @@ +This tool is designed to enable developers to work with the 101OBeX API. + With this tool, developers can retrieve information about their API + privileges, quotas, API Token, and more. + +https://github.com/101OBeXCorp/101obexcli diff --git a/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md b/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md new file mode 100644 index 0000000..ba770f2 --- /dev/null +++ b/docs/developer.avapframework.com/32_indice_Indice de Servicios_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Commons: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar + +* Wallet: FILE PROCEDURE URL `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado + +* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...: FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes . diff --git a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md new file mode 100644 index 0000000..4a24b1f --- /dev/null +++ b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_Documentados_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL FILES `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Tools: FILE PROCEDURE URL FILED `divisas.py` listado /ws/divisas.py/listado X `firma.py` firmar /ws/firma.py/firmar X `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login X `Accesos` `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL FILED `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL FILED `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio X `Bills2` `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios X `Bills2` `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio X `Bills2` `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info X `Bills2` `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista X `Bills2` `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar X `Bills2` `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar Se ejecuta a traves de `pagodeservicios.py` + +* Wallet: FILE PROCEDURE URL NOTES FILED `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes X `origenes_de_fondos` `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad X `movimientos.py` listado /ws/movimientos.py/listado X + +* Notifications: FILE PROCEDURE URL FILED `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES FILED `cuentas.py` alta /ws/cuentas.py/alta X `alta_baja_modificacion` `cuentas.py` baja /ws/cuentas.py/baja X `alta_baja_modificacion` `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos X `alta_baja_modificacion` `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick X `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES FILED `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta X `Interfaz Servicios Pagos` `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar X `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir X `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion X Falta revisar la repeticion de `tiempoaire.py` `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...: FILE PROCEDURE URL FILED `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion X Esta mal la URL indicada en{' '} `Interfaz Servicios Pagos` `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md new file mode 100644 index 0000000..d5eb393 --- /dev/null +++ b/docs/developer.avapframework.com/32_indice_Indice_de_Servicios_OLD_EN.md @@ -0,0 +1,17 @@ +* Management Console: FILE PROCEDURE URL `admin.py` actividad_usuarios /ws/admin.py/actividad_usuarios `admin.py` actualizardatosusuarios /ws/admin.py/actualizardatosusuarios `admin.py` administrar_solicitud_kyc /ws/admin.py/administrar_solicitud_kyc `admin.py` afiliadoscontipo /ws/admin.py/afiliadoscontipo `admin.py` altaadmin /ws/admin.py/altaadmin `admin.py` altaafiliado /ws/admin.py/altaafiliado `admin.py` cambiarcertificacion /ws/admin.py/cambiarcertificacion `admin.py` cambiarperfilusuario /ws/admin.py/cambiarperfilusuario `admin.py` certificarkyc /ws/admin.py/certificarkyc `admin.py` confirmaringreso /ws/admin.py/confirmaringreso `admin.py` cuadrodemando /ws/admin.py/cuadrodemando `admin.py` datoscuenta /ws/admin.py/datoscuenta `admin.py` editorperfiles /ws/admin.py/editorperfiles `admin.py` histconfirmaciones /ws/admin.py/histconfirmaciones `admin.py` histingresosta /ws/admin.py/histingresosta `admin.py` informesadmin /ws/admin.py/informesadmin `admin.py` ingresofondosta /ws/admin.py/ingresofondosta `admin.py` listado_kyc /ws/admin.py/listado_kyc `admin.py` operaciones /ws/admin.py/operaciones `admin.py` prefondeo /ws/admin.py/prefondeo `admin.py` revert /ws/admin.py/revert `admin.py` revisarorigendefondos /ws/admin.py/revisarorigendefondos `admin.py` revocar_kyc /ws/admin.py/revocar_kyc `admin.py` saldota /ws/admin.py/saldota `admin.py` saldousuarioafecha /ws/admin.py/saldousuarioafecha `admin.py` setgetconfig /ws/admin.py/setgetconfig `admin.py` transacciones /ws/admin.py/transacciones `admin.py` usuariosconsaldo /ws/admin.py/usuariosconsaldo `afiliados.py` comisionesafiliado /ws/afiliados.py/comisionesafiliado `afiliados.py` consultatransacciones /ws/afiliados.py/consultatransacciones `afiliados.py` dashboardafiliado /ws/afiliados.py/dashboardafiliado `afiliados.py` devolucion /ws/afiliados.py/devolucion `afiliados.py` resumencomisionesafiliado /ws/afiliados.py/resumencomisionesafiliado `clearing.py` index /ws/clearing.py/index `liquidacion.py` liquidacionafiliado /ws/liquidacion.py/liquidacionafiliado `divisas.py` actualizar /ws/divisas.py/actualizar `listanegra.py` listado /ws/listanegra.py/listado `listanegra.py` poner /ws/listanegra.py/poner `listanegra.py` quitar /ws/listanegra.py/quitar `impersonar.py` enviodinero /ws/impersonar.py/enviodinero `comunidad.py` altacomunidad /ws/comunidad.py/altacomunidad `bloqueos.py` bloquear /ws/bloqueos.py/bloquear `bloqueos.py` desbloquear /ws/bloqueos.py/desbloquear `bloqueos.py` listado /ws/bloqueos.py/listado `util.py` informes /ws/util.py/informes `util.py` bancos_agregadorfinanciero /ws/util.py/bancos_agregadorfinanciero + +* Tools: FILE PROCEDURE URL `divisas.py` listado /ws/divisas.py/listado `firma.py` firmar /ws/firma.py/firmar `util.py` get_caracteristicas /ws/util.py/get_caracteristicas `util.py` provincias /ws/util.py/provincias `util.py` paises /ws/util.py/paises `util.py` perfiles /ws/util.py/perfiles `util.py` operadores /ws/util.py/operadores `util.py` afiliados /ws/util.py/afiliados `util.py` get_importe_transaccion /ws/util.py/get_importe_transaccion `users.py` login /ws/users.py/login `users.py` logout /ws/users.py/logout `users.py` loginonline /ws/users.py/loginonline `users.py` logintpv /ws/users.py/logintpv `users.py` checksession /ws/users.py/checksession `users.py` compruebasesion /ws/users.py/compruebasesion + +* Loyalty: FILE PROCEDURE URL `donaciones.py` depositotarjetaydonar /ws/donaciones.py/depositotarjetaydonar `donaciones.py` donar /ws/donaciones.py/donar `donaciones.py` donartarjeta /ws/donaciones.py/donartarjeta `donaciones.py` get_caracteristica /ws/donaciones.py/get_caracteristica `programadepuntos.py` actualizar /ws/programadepuntos.py/actualizar `programadepuntos.py` crear /ws/programadepuntos.py/crear `programadepuntos.py` datos /ws/programadepuntos.py/datos `programadepuntos.py` listado /ws/programadepuntos.py/listado `programadepuntos.py` listado_usuarios /ws/programadepuntos.py/listado_usuarios `movimientos.py` canjear_puntos /ws/movimientos.py/canjear_puntos + +* Checkout: FILE PROCEDURE URL `granemisor.py` listado /ws/granemisor.py/listado `granemisor.py` transferencia /ws/granemisor.py/transferencia `pagodeservicios.py` enviarticketemail /ws/pagodeservicios.py/enviarticketemail `pagodeservicios.py` infoservicio /ws/pagodeservicios.py/infoservicio `pagodeservicios.py` listaservicios /ws/pagodeservicios.py/listaservicios `pagodeservicios.py` pagarservicio /ws/pagodeservicios.py/pagarservicio `pagodeservicios.py` pagarserviciotarjeta /ws/pagodeservicios.py/pagarserviciotarjeta `pagoderecibosv2.py` firmar /ws/pagoderecibosv2.py/firmar `pagoderecibosv2.py` firmar_original /ws/pagoderecibosv2.py/firmar_original `pagoderecibosv2.py` info /ws/pagoderecibosv2.py/info `pagoderecibosv2.py` lista /ws/pagoderecibosv2.py/lista `pagoderecibosv2.py` pagar /ws/pagoderecibosv2.py/pagar `pagodiferido.py` pagodiferido /ws/pagodiferido.py/pagodiferido `util.py` precios_servicio /ws/util.py/precios_servicio `pagomovil.py` pagomovil /ws/pagomovil.py/pagomovil `tiempoaire.py` recargar /ws/tiempoaire.py/recargar + +* Wallet: FILE PROCEDURE URL NOTES `origenesdefondos.py` gestor_origenes_propios /ws/origenesdefondos.py/gestor_origenes_propios Hay que dividirlo en 7 endpoints diferentes `cuentas.py` saldo /ws/cuentas.py/saldo `movimientos.py` actividad /ws/movimientos.py/actividad `movimientos.py` listado /ws/movimientos.py/listado + +* Notifications: FILE PROCEDURE URL `movimientos.py` enviarsms /ws/movimientos.py/enviarsms `sms.py` procesarpeticion /ws/sms.py/procesarpeticion `sms.py` tecnophone2_notificacion_envio /ws/sms.py/tecnophone2_notificacion_envio `notificaciones.py` gestor_notificaciones /ws/notificaciones.py/gestor_notificaciones `notificaciones.py` leer_notificaciones /ws/notificaciones.py/leer_notificaciones `notificaciones.py` leer_uno /ws/notificaciones.py/leer_uno `notificaciones.py` numero_no_leidos /ws/notificaciones.py/numero_no_leidos `alarmas.py` crearalarma /ws/alarmas.py/crearalarma `alarmas.py` desempaquetar /ws/alarmas.py/desempaquetar `push_notifications.py` apn_dispositivo /ws/push_notifications.py/apn_dispositivo `push_notifications.py` apn_dispositivos_con_app_id /ws/push_notifications.py/ apn_dispositivos_con_app_id `push_notifications.py` asociar_device_token /ws/push_notifications.py/asociar_device_token `push_notifications.py` reiniciar_badges /ws/push_notifications.py/reiniciar_badges + +* Onboarding: FILE PROCEDURE URL NOTES `cuentas.py` alta /ws/cuentas.py/alta `cuentas.py` baja /ws/cuentas.py/baja `cuentas.py` parar /ws/cuentas.py/parar `cuentas.py` activar /ws/cuentas.py/activar `users.py` alta_cliente /ws/users.py/alta_cliente `users.py` certificarcuenta /ws/users.py/certificarcuenta `users.py` acreditar_nivel_kyc /ws/users.py/acreditar_nivel_kyc `users.py` alta_kyc /ws/users.py/alta_kyc `users.py` campos_alta_cliente /ws/users.py/campos_alta_cliente `users.py` reenviarotpalta /ws/users.py/reenviarotpalta `seguridad_itf.py` condiciones_legales /ws/seguridad_itf.py/condiciones_legales `seguridad_itf.py` preguntas_de_seguridad /ws/seguridad_itf.py/preguntas_de_seguridad `netverify.py` certificar /ws/netverify.py/certificar `netverify.py` certificarcertify /ws/netverify.py/certificarcertify `netverify.py` finalizar /ws/netverify.py/finalizar `netverify.py` listado /ws/netverify.py/listado `netverify.py` revocar /ws/netverify.py/revocar `netverify.py` solicitar /ws/netverify.py/solicitar `users.py` cambiodedatos /ws/users.py/cambiodedatos `users.py` cambioperfilcontrolado /ws/users.py/cambioperfilcontrolado `users.py` checknick /ws/users.py/checknick `users.py` data /ws/users.py/data `users.py` firmarconclaveprivada /ws/users.py/firmarconclaveprivada `users.py` get_photo /ws/users.py/get_photo `users.py` info_usuario /ws/users.py/info_usuario `users.py` restartpin /ws/users.py/restartpin `users.py` upload_photo /ws/users.py/upload_photo `mls.py` activar /ws/mls.py/activar `carga_masiva.py` usuarios_ctm /ws/carga_masiva.py/usuarios_ctm Alta masiva de usuarios ctm + +* Remittance (Money movements): FILE PROCEDURE URL NOTES `movimientos.py` anularcomprartarjeta /ws/movimientos.py/anularcomprartarjeta `movimientos.py` comprar /ws/movimientos.py/comprar `movimientos.py` comprartarjeta /ws/movimientos.py/comprartarjeta `movimientos.py` depositotarjeta /ws/movimientos.py/depositotarjeta `movimientos.py` depositotarjetaotracuenta /ws/movimientos.py/depositotarjetaotracuenta `movimientos.py` entreorigenes /ws/movimientos.py/entreorigenes `movimientos.py` enviar /ws/movimientos.py/enviar `movimientos.py` enviarhalcash /ws/movimientos.py/enviarhalcash `movimientos.py` enviosderegalo /ws/movimientos.py/enviosderegalo `movimientos.py` pedir /ws/movimientos.py/pedir `movimientos.py` recargar /ws/movimientos.py/recargar `movimientos.py` remesadirigida /ws/movimientos.py/remesadirigida `movimientos.py` repetirtransaccion /ws/movimientos.py/repetirtransaccion `movimientos.py` retirar /ws/movimientos.py/retirar `movimientos.py` retirarbanco /ws/movimientos.py/retirarbanco `pademobile_prepago.py` consultar_saldo_prepago /ws/pademobile_prepago.py/consultar_saldo_prepago `pademobile_prepago.py` ingresar_prepago /ws/pademobile_prepago.py/ingresar_prepago `pademobile_prepago.py` registrar_monedero_prepago /ws/pademobile_prepago.py/ registrar_monedero_prepago `pademobile_prepago.py` retirar_prepago /ws/pademobile_prepago.py/retirar_prepago `movimientos.py` transferenciasmasivas /ws/movimientos.py/transferenciasmasivas `util.py` carga_masiva_ctm /ws/util.py/carga_masiva_ctm Carga masiva de saldos a usuarios CTM + +* ...:(?) FILE PROCEDURE URL `movimientos.py` comprobartransaccion /ws/movimientos.py/comprobartransaccion `movimientos.py` consultatransaccion /ws/movimientos.py/consultatransaccion `movimientos.py` datos_transaccion /ws/movimientos.py/datos_transaccion `shake.py` ejecutar /ws/shake.py/ejecutar `shake.py` obtener /ws/shake.py/obtener `shakev2.py` ejecutar /ws/shakev2.py/ejecutar `shakev2.py` obtener /ws/shakev2.py/obtener `chat.py` chat_operator /ws/chat.py/chat_operator `chat.py` chat_user /ws/chat.py/chat_user `chat.py` prebind /ws/chat.py/prebind `util.py` logs /ws/util.py/logs `util.py` template_informes /ws/util.py/template_informes diff --git a/docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md b/docs/developer.avapframework.com/33_informe_Informe_Consejo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md b/docs/developer.avapframework.com/33_informe_Informe_afiliados_con_tipo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_altas_EN.md b/docs/developer.avapframework.com/33_informe_Informe_altas_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md b/docs/developer.avapframework.com/33_informe_Informe_cuadro_de_mando_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md b/docs/developer.avapframework.com/33_informe_Informe_listado_de_usuarios_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md b/docs/developer.avapframework.com/33_informe_Informe_numero_altas_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_numero_transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md new file mode 100644 index 0000000..bfb9cda --- /dev/null +++ b/docs/developer.avapframework.com/33_informe_Informe_operaciones_EN.md @@ -0,0 +1,199 @@ +Report on the number of users showing the users who have registered by + themselves and those who have registered through an affiliate. + +POST: {' '} + `URL_BASE + /ws/admin.py/informesadmin` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "codtran" + : + , + "resultado" + :{' '} + { + "mensaje" + : + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false) +* `resultado:` Service answer +* `mensaje:` Indicates the email to which the report will arrive. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + : + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/admin.py/informesadmin" + + payload ={' '} + { + 'codigo_pais' + :{' '} + 'MX' + , + 'id_usuario' + :{' '} + '4532' + , + 'id_sesion' + :{' '} + '406-dwr5sTs_m29rnbzw9_miJQ==' + , + 'informe' + :{' '} + 'informeconsejo' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/admin.py/informesadmin', + 'headers': {}, + formData: { + 'codigo_pais': 'MX', + 'id_usuario': '4532', + 'id_sesion': '406-dwr5sTs_m29rnbzw9_miJQ==', + 'informe': 'informeconsejo' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("codigo_pais", "MX"); + formdata.append("id_usuario", "4532"); + formdata.append("id_sesion", + "406-dwr5sTs_m29rnbzw9_miJQ=="); + formdata.append("informe", "informeconsejo"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/admin.py/informesadmin", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + + 'URL_BASE/ws/admin.py/informesadmin' + {' '} + \ + --form + 'codigo_pais=MX' + {' '} + \ + --form + 'id_usuario=4532' + {' '} + \ + --form{' '} + + 'id_sesion=406-dwr5sTs_m29rnbzw9_miJQ==' + {' '} + \ + --form{' '} + 'informe=informeconsejo' +``` + +## Business logic: + +In order to run this service, it is necessary to do it from a user logged + into the system who has an administrator profile. With this endpoint the + requested report is generated and sent to the email of the administrator + user who requests it. diff --git a/docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md b/docs/developer.avapframework.com/33_informe_Informe_transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md b/docs/developer.avapframework.com/34_Ingresar_Ingresar_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md b/docs/developer.avapframework.com/34_Ingresar_Ingreso_de_fondos_para_tiempo_aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/35_inter_inter_networks_movement.md b/docs/developer.avapframework.com/35_inter_inter_networks_movement.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md b/docs/developer.avapframework.com/35_inter_inter_networks_pool_stake.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md b/docs/developer.avapframework.com/35_inter_interfaz_servicios_pagos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/36_last_last_order_summary.md b/docs/developer.avapframework.com/36_last_last_order_summary.md new file mode 100644 index 0000000..78e2000 --- /dev/null +++ b/docs/developer.avapframework.com/36_last_last_order_summary.md @@ -0,0 +1,344 @@ +## ws/orders.py/last_order_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + , + "resultado" + :{' '} + [ + 'status': 'Being sent' + , + 'status_code':{' '} + 4001 + , + 'transaction_code':{' '} + 'a556a5de007fcaa5a00b4a4d56a9d40a' + , + 'order_code':{' '} + 10023 + , + 'date':{' '} + 2021 + -03 + -01 + , + 'client_address': 'Street + without number', + 'establishment_coordinates' + :{' '} + { + 'lat':{' '} + 40 + , + 5431311 + , + 'lng':{' '} + -3 + , + 6302845 + } + , + 'location_gps':{' '} + { + 'lat':{' '} + 40 + , + 5431311 + , + 'lng':{' '} + -3 + , + 6302845 + } + 'delivery_time': ' + 12 + : + 03 + : + 01' + , + 'delivery_type':{' '} + 'delivery', + 'order_products_codes' + : + {' '} + [ + { + "article_id" + : + 35003 + , + "custom" + : + [ + [ + {' '} + + "da9922e8-57a6-4440-97db-0de2a486b323" + + , + {' '} + + "00e9a2cc-60c8-4e98-ac9b-accf15b7373a" + + , + {' '} + + "a6aacb94-8fad-4394-a2f1-e328fcca9c79" + + ] + , + [ + {' '} + + "757ccbe3-d877-485d-ae10-89f0b78c133c" + + ] + ] + } + ] + , + 'purchase_detail': 'Palo + Alto ( Lechuga , Tomate{' '} + , Cebolla{' '} + , Aguacate{' '} + , )' + , + 'order_category_id':{' '} + 'FL013', + 'contact':{' '} + { + "firstName" + : + "Rafa" + , + "lastName" + : + " " + , + "mail" + : + "rafa.ruiz@waynnovate.com" + , + "phone" + : + "643340526" + } + , + 'status_history':{' '} + [ + { + 'new_status':'Being sent' + , + 'new_status_code':{' '} + 4001 + , + 'previous_status': 'Being + picked up', + 'previous_status_code': + 4000 + , + 'status_change_date': ' + 2021 + -02 + -01{' '} + 13 + : + 00.01'{' '} + } + ] + 'delivery_price':{' '} + 1.9 + , + 'delivery_distance':{' '} + 34000.34) + , + ] + "elapsed" + :{' '} + 0.06796097755432129 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Status of the order. `status_code` : Code of the actual status of the order. `transaction_code` : Code of the transaction `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that gives the order. `location_gps:` Coordinates of the direction that receives the delivery. `delivery_time:` Hour of the delivery. `delivery_type:` Type of delivery (to pickup/ to have sent). `order_products_codes:` List of product codes and their options. `purchase_detail:` List of the names of the products with their options. `order_category_id:` Identifier of the establishment that provides the product. `contact:` Contact of the client. `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment that provides the order. +* `status:` Status of the order. +* `status_code` : Code of the actual status of the order. +* `transaction_code` : Code of the transaction +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Address of the client. +* `establishment_coordinates` : Coordinates of the establishment that gives the order. +* `location_gps:` Coordinates of the direction that receives the delivery. +* `delivery_time:` Hour of the delivery. +* `delivery_type:` Type of delivery (to pickup/ to have sent). +* `order_products_codes:` List of product codes and their options. +* `purchase_detail:` List of the names of the products with their options. +* `order_category_id:` Identifier of the establishment that provides the product. +* `contact:` Contact of the client. +* `status_history:` History of the status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Time and date of the change of status. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Time and date of the change of status. +* `delivery_price:` Price of the delivery. +* `delivery_distance:` Distance between the client and the establishment that provides the order. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==', + 'headers': { + '101ObexApiKey': 'MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=133&session_id=1689-oocyMaFovWi1jljrF-eaSw==' + {' '} + \ + + --header{' '} + + '101ObexApiKey: MS1phGJRa3WyLilN9dlZ7vurJDIpe0nM' +``` + +## Business logic: + +The objective of this service is to retrieve the orders that are in course + and its details. diff --git a/docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md b/docs/developer.avapframework.com/37_Leer_Leer_notificaciones_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md b/docs/developer.avapframework.com/37_Leer_Leer_una_notificacion_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md b/docs/developer.avapframework.com/38_liquidacion_Liquidaciones_de_Afiliados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md b/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md new file mode 100644 index 0000000..6d32f59 --- /dev/null +++ b/docs/developer.avapframework.com/39_lista_Lista general de servicios sin catalogar_EN.md @@ -0,0 +1 @@ +* General list: FILE PROCEDURE URL NOTE middleware.py comprobar_disponibilidad /ws/middleware.py/comprobar_disponibilidad I assume not middleware.py datos_cuenta /ws/middleware.py/datos_cuenta I assume not middleware.py enviar_sms /ws/middleware.py/enviar_sms I assume not middleware.py firmar_santander /ws/middleware.py/firmar_santander I assume not middleware.py transaccion_contrapartida /ws/middleware.py/transaccion_contrapartida I assume not middleware.py transaccion_entre_paises /ws/middleware.py/transaccion_entre_paises I assume not util.py saldo_quiubas /ws/util.py/saldo_quiubas I assume not pawn.py carvaloration /ws/pawn.py/carvaloration KO pawn.py cml2 /ws/pawn.py/cml2 KO pawn.py get_catalog /ws/pawn.py/get_catalog KO pawn.py manager /ws/pawn.py/manager KO pawn.py notify /ws/pawn.py/notify KO pawn.py pam /ws/pawn.py/pam KO pawn.py request /ws/pawn.py/request KO pawn.py status /ws/pawn.py/status KO diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_comisiones_de_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md new file mode 100644 index 0000000..ccb5e28 --- /dev/null +++ b/docs/developer.avapframework.com/39_lista_Listado_de_divisas_EN.md @@ -0,0 +1,215 @@ +This service is used to obtain the currencies of the countries active in + the system. + +GET: + `URL_BASE + /ws/currencies.py/listado` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "currencies" + :{' '} + [ + { + "change_sale" + : + , + "currency_data" + :{' '} + { + "abbreviation" + : + , + "suffix" + : + , + "format" + : + , + "symbol" + : + , + "prefix" + : + , + "decimals" + : + , + "id" + : + } + , + "abbreviation" + : + , + "format" + : + , + "currency_symbol" + : + , + "precision" + : + , + "change_purchase" + : + , + "change_reference" + : + , + "name" + : + , + "placeholder_currency" + : + } + ] + , + "elapsed" + :{' '} + 0.008363962173461914 + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `currencies:` List of currencies returned by the system. +* `currency_data:` Contains the different details of the currency used for the operation.. +* `abbreviation:` The abbreviated name of the currency(EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format(pesos, euros). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency(€, ¢, $). +* `prefix:` The prefix that is applied in the currency format. +* `decimals:` The maximum number of decimal places that will be included in the currency format. +* `id:` Identifier of the currency in BBDD. +* `abbreviation:` The abbreviated name of the currency(EUR, MXN). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `name:` Full name of the currency. +* `precision:` Number of decimal places allowed by the currency. +* `currency_symbol:` The symbol associated to the currency (€, ¢, $). +* `placeholder_currency:` The text of the currency always showing a value of 0. +* `change_purchase:` Currency price for purchase. +* `change_reference:` The value of the currency. +* `change_sale:` Currency price for sale. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/currencies.py/listado" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/currencies.py/listado', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/currencies.py/listado", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/currencies.py/listado' +``` + +## Business logic + +This service, through the 'telefone', searches for the user whose + movements are to be consulted, and returns a list with each of the + user's movements between two given dates. diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md new file mode 100644 index 0000000..ebe3a16 --- /dev/null +++ b/docs/developer.avapframework.com/39_lista_Listado_de_movimientos_granemisor_EN.md @@ -0,0 +1,165 @@ +This service is used to obtain the movements made by a large issuer user + within the system. + +GET: {' '} + `URL_BASE + /ws/granemisor.py/listado` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "datos" + :{' '} + [ + [ {' '} + ] + ] + , + "numero_resultados" + : + , + "totales" + : + , + "columnas" + :{' '} + [ + ] + , + "limite_resultados" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `datos:` they are a list of lists in which each one contains the values for each of the columns. +* `elapsed:` Operation execution time. +* `numero_resultados:` Number of results that come in 'datos' +* `totales:` Total number of results +* `columnas:` Name of each of the values found in each of the lists in the data list.. +* `limite_resultados:` Maximum number of results that come in the query. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/granemisor.py/listado?codigo_pais=MX&id_usuario=2&id_sesion=387-M301Sm9r7MK6QXs27Z_XHw==&num_movimientos=2&fechainicio=1-04-2010&fechafin=29-07-2020' +``` + +## Business logic: + +This service returns a list with each of the movements of the large issuer + user between two given dates. diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_bloqueados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md b/docs/developer.avapframework.com/39_lista_Listado_de_usuarios_en_lista_negra_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Soluciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md b/docs/developer.avapframework.com/39_lista_Listar_Usuarios_del_Programa_de_Puntos_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md b/docs/developer.avapframework.com/3_Envio_de_dinero_EN_Envio_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md b/docs/developer.avapframework.com/3_get_blockchain_networks_get_blockchain_networks.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/40_logout_Logout_Services_EN.md b/docs/developer.avapframework.com/40_logout_Logout_Services_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md b/docs/developer.avapframework.com/40_logout_Logs_del_sistema_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md b/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md new file mode 100644 index 0000000..091def3 --- /dev/null +++ b/docs/developer.avapframework.com/41_loyalty_Loyalty_Points_Exchange_EN.md @@ -0,0 +1,29 @@ +In your project, you can work with loyalty wallets to which you can assign + a FIAT currency, a non-FIAT currency or a new currency created by you, to + which you give a purchase and sale values. This is referred to as a + personalized wallet by default. + +As a concept, a personalized or loyalty wallet accumulates balance or + points that can later be exchanged for products, but that in no case can + be transformed into liquid money regardless of whether it is the result of + an ATM withdrawal, bank account, purchase of prepaid cards, or any other + concept that facilitates cashing out from a loyalty wallet. + +Transfers between users are not allowed unless the destination or wallet + of the beneficiary of the transfer is a wallet of the same type with the + same limitations and the configuration of the wallet allows such + transfers. + +Personalized or loyalty wallets rely on the currency table of the FX + Exchange service to carry out the operations of buying and selling + products from loyalty wallets, thus allowing customers to buy any type of + product, if they meet the conditions to be acquired by a source of + loyalty-type funds regardless of the type of currency held by the product + to be purchased. + +In this way, a customer with a loyalty wallet in USD can purchase products + published in EUR or MXN without any problem. Just like a customer with a + loyalty wallet in My_Coin, can purchase the same products mentioned above. + It is in the configuration of the FX Exchange currency table where the + purchase and sale price of My_Coin is determined, with USD serving as the + reference. diff --git a/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md b/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md new file mode 100644 index 0000000..e52ffd6 --- /dev/null +++ b/docs/developer.avapframework.com/42_Marketplace_Marketplace_EN.md @@ -0,0 +1,18 @@ +At 101OBeX we are committed to universality, integration, and + collaboration with other companies who enrich and help us enhance and + expand our array of services. + +Thanks to our marketplace, third parties can publish their APIs and add + value to the platform. + +From the Marketplace section you can browse the different published + plugins, install, configure and exploit each one of them. + +Keep in mind that plugins can be purchased, in which case the cost of the + plug-in will be processed as part of the recurring plan charges with each + collection period. + +Furthermore, a plug-in may require a pre-funded balance for its correct + operation, in which case you must maintain a sufficient balance in your + wallet. Adhering to the provided instructions for each plug-in to ensure + its proper configuration and correct operation. diff --git a/docs/developer.avapframework.com/43_new_new.md b/docs/developer.avapframework.com/43_new_new.md new file mode 100644 index 0000000..e485291 --- /dev/null +++ b/docs/developer.avapframework.com/43_new_new.md @@ -0,0 +1,192 @@ +## ws/orders.py/last_order_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + , + "order_code" + :{' '} + 12034 + "elapsed" + :{' '} + 0.06796097755432129 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `order_code:` Identifier of the order in the system. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": + 40,5431311,\"lng\": -3,6302845 + }&contact=Manuel&order_amount=30 + €&shipping_amount=3,5 €" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": + 40,5431311,"lng": -3,6302845 + }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 + €', + 'headers': { + '101ObexApiKey': 'WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=[\"hamburguesa\",\"ensalada\",\"cocacola\"]&gps_direction={\"lat\": + 40,5431311,\"lng\": -3,6302845 + }&contact=Manuel&order_amount=30 €&shipping_amount=3,5 + €", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location -g --request GET{' '} + + 'http://34.121.95.179:80/ws/ws/orders.py/new?country_code=ES&user_id=133&session_id=1688-eEqteXomKai8aDW2GkUFZQ==&purchase_transaction_code=24&client_address=Calle + sin + numero&delivery_time=12:34:43&payment_operation_code=pi_968ac76f7d898e7&order_products_codes=[34001,34002,34003]&order_category_id=1200&delivery_type=takeout&client_email_address=correo@servidor.ext&order_prices=[10.0,11.0,9.0]&delivery_price=3.5&total_amount=33.5&purchase_detail=["hamburguesa","ensalada","cocacola"]&gps_direction={"lat": + 40,5431311,"lng": -3,6302845 + }&contact=Manuel&order_amount=30 + €&shipping_amount=3,5 €' + {' '} + \ + + --header{' '} + + '101ObexApiKey: WcdoRNOUS8jQLs5XWo75yjwzvEZazcSI' +``` + +## Business logic: + +The objective of this service is to add an order. diff --git a/docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md b/docs/developer.avapframework.com/44_notificaciones_Notificaciones_no_leidas_por_el_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md new file mode 100644 index 0000000..445f6ff --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Afiliados_del_sistema_EN.md @@ -0,0 +1,178 @@ +This service is used to obtain the affiliate. + +GET: {' '} + `URL_BASE + /ws/util.py/affiliates` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "codtran" + : + "affiliates" + :{' '} + [ + { + "phone" + : + , + "affiliate_id" + : + , + "country" + : + , + "name" + : + , + "other_data" + : + , + "allow_prefunding" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Transaction code that identifies the executed operation. +* `affiliates:` List of affiliates of the system. +* `phone:` Affiliate phone number. +* `affiliate_id:` Affiliate identifier. +* `country:` Affiliate Country Code. +* `name:` Affiliate name. +* `other_data:` Other affiliate data. +* `allow_prefunding:` Boolean that indicates if prefunding is allowed in the affiliate. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/affiliates?country_code=MX&id_usuario=4532&id_sesion=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' +``` + +## Business logic: + +By means of this service all the affiliates of the system are obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Alta_Cliente_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Campos_Nivel_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md new file mode 100644 index 0000000..71f2ae0 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Operadores_del_pais_EN.md @@ -0,0 +1,150 @@ +This service is used to obtain the operators of the chosen country. + +GET: + `URL_BASE + /ws/util.py/operators` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "operators" + :{' '} + [ + { + "name" + : + , + "operator_code" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `operators:` List with the telephone operators of the country. +* `name:` Name of the operator +* `operator_code:` Identifier of the operator. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/operators?country_code=MX" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/operators?country_code=MX', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/operators?country_code=MX", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/operators?country_code=MX' +``` + +## Business logic: + +By means of this service you get all the operators of the indicated + country. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md new file mode 100644 index 0000000..9a497b1 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Paises_Activos_EN.md @@ -0,0 +1,225 @@ +This service is used to obtain the active countries in the system. + +GET: + `URL_BASE + /ws/util.py/countries` + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "countries" + :{' '} + [ + { + "currency_symbol" + :{' '} + "$ " + , + "currency_data" + :{' '} + { + "abbreviation" + :{' '} + "MXN" + , + "suffix" + :{' '} + "pesos" + , + "format" + :{' '} + "$%.2f pesos" + , + "symbol" + :{' '} + "$" + , + "prefix" + :{' '} + "$" + , + "decimals" + :{' '} + 2.0 + , + "id" + :{' '} + 70 + } + , + "currency_format" + :{' '} + "$%.2f pesos" + , + "precision_currency" + :{' '} + 2.0 + , + "phone_longitude" + :{' '} + 10 + , + "currency" + :{' '} + "Mexico Peso" + , + "name" + :{' '} + "Mexico" + , + "prefix" + :{' '} + "52" + , + "phone" + :{' '} + "98780" + , + "placeholder_currency" + :{' '} + "$0.00 pesos" + , + "country_code" + :{' '} + "MX" + } + ] + , + "elapsed" + :{' '} + 0.0168149471282959 + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `countries:` List with the active countries of the system. +* `currency_symbol:` Symbol of the country's currency. +* `currency_data:` Contains the different details of the currency used in the operation. +* `abbreviation:` The abbreviated name of the currency (EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). +* `format:` The full format that applies to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency (€, ¢, $). +* `prefix:` The prefix that is applied in the currency format. +* `decimals:` The maximum number of decimal places that will be included in the currency format. +* `id:` Identifier of the currency in BBDD. +* `currency_format:` Format to be applied to the amounts that use this currency. +* `precision_currency:` Decimals of the amounts that use this currency. +* `phone_longitude:` Size of telephone numbers used in the country. +* `currency:` Full name of the country's currency. +* `name:` Name of the country. +* `prefix:` Telephone prefix of the country's telephone numbers. +* `phone:` Telephone from which the system's SMS for the country are sent. +* `placeholder_currency:` Text to display in the fields that are of the currency and have no value. +* `country_code:` Code of the country. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/countries" + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/countries', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/countries", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + 'URL_BASE/ws/util.py/countries' +``` + +## Business logic: + +By means of this service all the active countries in the system are + obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md new file mode 100644 index 0000000..3157d59 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Perfiles_de_Usuario_EN.md @@ -0,0 +1,163 @@ +This service is used to obtain users' profiles. + +GET: + `URL_BASE + /ws/util.py/profiles` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "profiles" + :{' '} + [ + { + "name" + : + , + "code" + : + , + "id" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `profiles:` List of the profiles. +* `name:` Profile name. +* `code:` Profile role name +* `id:` Profile identifier. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/profiles?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D' +``` + +## Business logic: + +By means of this service all the system profiles are obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md new file mode 100644 index 0000000..6b86b2f --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_Provincias_del_pais_EN.md @@ -0,0 +1,150 @@ +This service is used to obtain the regions of the indicated country. + +GET: + `URL_BASE + /ws/util.py/regions` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "regions" + :{' '} + [ + { + "name" + : + , + "region_id" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `regions:` List of regions. +* `name:` Name of the region +* `region_id:` Identifier of the region. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/regions?county_code=MX" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': 'URL_BASE/ws/util.py/regions?county_code=MX', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/regions?county_code=MX", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/regions?county_code=MX' +``` + +## Business logic: + +By means of this service all the regions of the indicated country are + obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_4_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_3_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shake_v2_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_Shakes_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md new file mode 100644 index 0000000..b4b56fa --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_caracteristicas_de_un_servicio_EN.md @@ -0,0 +1,164 @@ +This service is used to obtain the users' profiles. + +GET: + `URL_BASE + /ws/util.py/get_caracteristicas` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "characteristics" + :{' '} + { + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `characteristics:` Container object of the characteristics of the indicated service. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/get_caracteristicas?country_code=MX&user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA==&point_of_entry=login", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/get_caracteristicas?country_code=MX /{' '} + &user_id=4532&session_id=413-JRdxDQvO-zPMcwLeptmOyA%3D%3D&point_of_entry=login' +``` + +## Business logic: + +In order to make this call it is necessary to make it with a user who is + logged into the system, except for the following entry points: + +* registration +* login +* restartpin +* forwardotpregistration + +Each element of the answer that is within the characteristics is formed + with the following structure: + +being the value of the property of any type. + + diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_datos_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_imagen_del_perfil_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md new file mode 100644 index 0000000..a73d6ba --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_info_usuario_EN.md @@ -0,0 +1,173 @@ +This service is used to obtain the user information + +GET: {' '} + `URL_BASE + /ws/users.py/info_usuario` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "user_id" + : + , + "number_of_transactions" + : + , + "amount_of_transactions" + : + , + "point_program" + :{' '} + [ + { + 'name': + , 'amount' + : + , 'id' + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `user_id:` Identifier of the user from whom we have obtained the information. +* `number_of_transactions:` Number of transactions of the indicated type in the last 30 days. +* `amount_of_transactions:` Total amount of transactions of the indicated type of the last 30 days. +* `point_program:` List with the point programs in which the user is. +* `name:` Points program name. +* `amount:` User points in the points program. +* `id:` Points program identifier. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA==&user=7229063245&point_of_entry=solicituddinero", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/users.py/info_usuario?country_code=MX&user_id=4532&session_id=415-MFQPMQrBP98hxkttN2VYuA%3D%3D&user=7229063245&point_of_entry=solicituddinero' +``` + +## Business logic: + +By means of this service the data of the user indicated with the indicated + parameter is obtained. diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md new file mode 100644 index 0000000..d4c0421 --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN(1).md @@ -0,0 +1,151 @@ +This services is used to obtain the security questions. + +GET: {' '} + `URL_BASE + /ws/seguridad_itf.py/preguntas_de_seguridad` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "preguntas" + :{' '} + [ + { + "id" + : + , + "texto" + : + } + ] + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `preguntas:` List of security questions selected by the user to be able to answer them. +* `id:` Identifier of the security questions. (Necessary to be able to send each question with its answer) +* `texto:` Security question. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `nivel:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71" + + payload ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71', + 'headers': {} + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var requestOptions = { + method: 'GET', + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/seguridad_itf.py/preguntas_de_seguridad?codigo_pais=MX&id_usuario=4532&id_sesion=412-ksO-VqllH8QyvYa7acIVkQ==&comando=recuperacion&codtran=a5d73f98ba3520695892555548a44e71' +``` + +## Business logic: + +MP-140 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_preguntas_de_seguridad_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md b/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md new file mode 100644 index 0000000..e8e855a --- /dev/null +++ b/docs/developer.avapframework.com/45_Obtener_Obtener_todos_los_datos_de_la_transaccion_EN.md @@ -0,0 +1,330 @@ +This service gives you back all data associated to the chosen transaction.{' '} + +POST: + `URL_BASE + /ws/movimientos.py/transaction_data` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "transaction_data" + :{' '} + { + "telefono_cuenta" + : + , + "transaction_code" + : + , + "user" + : + , + "user_email" + : + , + "origin_of_funds" + : + , + "destination" + : + , + "destination_phone" + : + , + "destination_language_id" + : + , + "invoice" + : + , + "reference" + :{' '} + null + , + "concept" + : + , + "action" + : + , + "date" + : + , + "service_name" + : + , + "characteristics" + :{' '} + { + + } + , + "affiliate" + : + , + "affiliate_url" + : + , + "affiliate_url_image" + : + , + "amount" + : + , + "amount_fmt" + : + , + "total_commission" + : + , + "total_commission_fmt" + : + , + "commission" + : + , + "commission_fmt" + : + , + "vat_commission" + : + , + "vat_commission_fmt" + : + , + "vat_operation" + : + , + "vat_operation_fmt" + : + , + "currency" + : + , + "total" + : + , + "total_fmt" + : + "subject_ticket" + : + , + {' '} + "subject_ticket_destination" + : + , + "ticket_html" + : + } + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `transaction_data:` Data of the requested transaction. +* `telefono_cuenta:` Telephone number of the account of origin of the transaction +* `transaction_code:` Transaction code. +* `user:` Name of the user of origin of the transaction.. +* `user_email:` Email of the originating user of the transaction. +* `origin_of_funds:` Name of the source of funds used in the operation. +* `destination:` Name of the target user of the operation. +* `destination_phone:` Telephone number of the destination account of the operation. +* `destination_language_id:` Language identifier of the target user for the operation. +* `invoice:` Invoice number/invoice of the operation. +* `reference:` Invoice / page number of the operation. +* `concept:` Descriptive text of the operation. +* `action:` Name of the action that was executed with this operation. +* `date:` Date on which the transaction occurs. +* `service_name:` Text with the name of the service, if it does not have a name, the concept is returned. +* `characteristics:` Dictionary with the characteristics of the service, explained in greater depth on the endpoint{' '} `get_caracteristicas` . +* `affiliate:` Name of the affiliate of the user who executed the operation. +* `affiliate_url:` Affiliate website url. +* `affiliate_url_image:` Url of the affiliate image (logo). +* `amount:` Amount of the operation without format or commissions. +* `amount_fmt:` Amount of the operation with the applied format, but without commissions. +* `total_commission:` Amount of commission charged without format and with VAT applied. +* `total_commission_fmt:` Amount of commission charged with the format and VAT applied. +* `commission:` Amount of the commission charged to the user without the format and without VAT. +* `commission_fmt:` Formatted commission amount and if VAT applied. +* `vat_commission:` VAT amount of raw commission. +* `vat_commission_fmt:` Commission VAT amount with the format. +* `vat_operation:` VAT amount applied to the operation carried out without format. +* `vat_operation_fmt:` Amount of VAT applied to the operation carried out with the applied currency format.. +* `currency:` Name of the currency used in the operation. +* `total:` Total amount of the operation (amount + commission + VAT), without format. +* `total_fmt:` Total amount of the operation (amount + commission + VAT), with format. +* `subject_ticket:` Subject text of the ticket that is sent by mail to the user of origin of the operation. +* `subject_ticket_destination:` Subject text of the ticket that is sent by mail to the target user of the operation. +* `ticket_html:` Ticket that is mailed to users. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/movimientos.py/transaction_data" + + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'session_id' + :{' '} + '414-YehjRL-mR64z81Nu9gg7og==' + , + 'transaction_code' + :{' '} + '60995737691715d3cc51aa4ab699fd84' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/movimientos.py/transaction_data', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'session_id': '414-YehjRL-mR64z81Nu9gg7og==', + 'transaction_code': '60995737691715d3cc51aa4ab699fd84' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("session_id", + "414-YehjRL-mR64z81Nu9gg7og=="); + formdata.append("transaction_code", + "60995737691715d3cc51aa4ab699fd84"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/movimientos.py/transaction_data", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + + 'URL_BASE/ws/movimientos.py/transaction_data' + {' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + + 'session_id=414-YehjRL-mR64z81Nu9gg7og==' + {' '} + \ + --form{' '} + + 'transaction_code=60995737691715d3cc51aa4ab699fd84' +``` + +## Business logic: + +With this endpoint all the data associated with the requested transaction + is returned. diff --git a/docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md b/docs/developer.avapframework.com/46_Operaciones_Operaciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md b/docs/developer.avapframework.com/47_Odern_Orden_de_cargo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/47_Odern_order_history_summary.md b/docs/developer.avapframework.com/47_Odern_order_history_summary.md new file mode 100644 index 0000000..1d2de2c --- /dev/null +++ b/docs/developer.avapframework.com/47_Odern_order_history_summary.md @@ -0,0 +1,380 @@ +## ws/orders.py/order_history_summary + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns if user is RIDER profile: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + { + "status" + :{' '} + "Completed" + , + "delivery_time" + :{' '} + "13:12:55" + , + "delivery_type" + :{' '} + "sent" + , + "order_category_id" + :{' '} + "FL016" + , + "delivery_distance" + :{' '} + 6987 + , + "status_code" + :{' '} + 1 + , + "order_products_codes" + :{' '} + + "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n + {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n }\n]" + + , + {' '} + "establishment_coordinates" + :{' '} + { + "latitude" + :{' '} + 40.630568688062624 + , + "longitude" + :{' '} + -3.585006931371174 + } + , + "location_gps" + :{' '} + + "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n + \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n + \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n + }\n}" + + , + "delivery_price" + :{' '} + "1,90 €" + , + "contact" + :{' '} + + "{\n \"firstName\": \"Rafael\",\n \"Surname\": \"Surname1 + Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": + \"643340526\"\n}" + + , + "purchase_detail" + :{' '} + + "Tortilla soup\nTortilla soup\nTortilla soup\nTortilla soup\n" + + , + "order_code" + :{' '} + 101033 + , + "date" + :{' '} + "18/08/2021 05:17:56" + , + "transaction_code" + :{' '} + "988569e4f38717f35e0fa5c256fe466b" + , + "status_history" + :{' '} + [ + { + "previous_status_code" + :{' '} + 12 + , + "status_change_date" + :{' '} + "2021-08-18 12:17:57" + , + "new_status" + :{' '} + "Sent to restaurant" + , + "new_status_code" + :{' '} + 0 + , + "previous_status" + :{' '} + "Nuevo pedido" + } + , + { + "previous_status_code" + :{' '} + 0 + , + "status_change_date" + :{' '} + "2021-08-18 12:18:51" + , + "new_status" + :{' '} + "Being picked up" + , + "new_status_code" + :{' '} + 11 + , + "previous_status" + :{' '} + "Sent to restaurant" + } + , + { + "previous_status_code" + :{' '} + 11 + , + "status_change_date" + :{' '} + "2021-08-18 12:19:57" + , + "new_status" + :{' '} + "In delivey" + , + "new_status_code" + :{' '} + 10 + , + "previous_status" + :{' '} + "Being picked up" + } + , + { + "previous_status_code" + :{' '} + 10 + , + "status_change_date" + :{' '} + "2021-08-18 12:20:37" + , + "new_status" + :{' '} + "Completed" + , + "new_status_code" + :{' '} + 1 + , + "previous_status" + :{' '} + "In delivey" + } + ] + , + "client_address" + :{' '} + + "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" + + } + , + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current state of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Address of the client. `establishment_coordinates` : Coordinates of the establishment that does the order. `location_gps:` Coordinates of the company direction. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact. `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery. `delivery_distance:` Distance between the client and the establishment. +* `status:` Current status of the order. +* `status_code` : Code of the current state of the order. +* `transaction_code` : Code of the transaction. +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Address of the client. +* `establishment_coordinates` : Coordinates of the establishment that does the order. +* `location_gps:` Coordinates of the company direction. +* `delivery_time:` Hour established for the delivery. +* `delivery_type:` Type of delivery (pick up/ sent) +* `order_products_codes:` List of code products and its options. +* `purchase_detail:` List of product names with its options. +* `order_category_id:` Identifier of the establishment that provides the order. +* `contact:` Client contact. +* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Hour and time of the status change. +* `delivery_price:` Price of the delivery. +* `delivery_distance:` Distance between the client and the establishment. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', + 'headers': { + '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?country_code=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' + {' '} + \ + + --header{' '} + + '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' +``` + +## Business logic: + +The objective of this service is to retrieve the completed requests of the + riders. diff --git a/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md b/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md new file mode 100644 index 0000000..b9de1d9 --- /dev/null +++ b/docs/developer.avapframework.com/48_origenes_origenes_de_fondos_EN.md @@ -0,0 +1,166 @@ +## Service identifier + +SER.INT.ORI.AVA.001 MANAGEMENT OF OWN FUNDS RESOURCES. + +## Description + +This service allows managing the funds sources of a given user. It + implements the operations of listing, creation, deletion, confirmation, + change of default wallet and reordering on the sources of funds of said + user. + +## Endpoints + +* Preproduction {' '} ` https://avanquia-prews.pademobile.com/ws/originsdefondos.py/gestor_origins_propios ` +* Production {' '} ` https://appws.avanquia.com/ws/originsdefondos.py/gestor_origins_propios ` + +## Published operations + +This service allows to execute the following operations on funds sources: + +## Parameters + +All parameters are sent in the call's querystring , so{' '} + percentage encoding for URIs (aka{' '} + URL encoding ) must be applied. + +* Parameters, answers and exceptions common to all operations Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 +* Common parameters Parameter Obligatory Format Description Default value id_usuario Yes Numeric ID of the user who owns the sources of funds with which to work N/A country_code Yes ISO 3166 alpha-2 Country code in which the user was registered N/A session_id Yes, if the parameter is not reported firma Alphanumeric Obtained by identifying the user with ID user_id {' '} on the platform N/A firma Yes, if the parameter is not reported session_id Alphanumeric Allows you to sign the petition, withour having to log in N/A command Yes Alphabetic Operation to be carried out on the origins of the user's funds N/A channel_id No Numeric Channel from which the request is made 1 + +* Common answers {' '} Depending on the result of the call, this service can return two different JSON : In case of success +* In case of success + +### Where + +`operation_result` will be a JSON formed by the fields that the + service returns according to the operation executed. In the following + sections the content of this space will be specified for each operation. + +* Parameters, answers and specific exceptions for each operation List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A +* List of funds sources {' '} The parameter command acquires the value{' '} list . Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A +* Specific parameters Parameter Obligatory Format Description Default value language No Alphabetic code Language in which the lists of sources of funds will be returned, if that language is supported User language list No Alphabetic Some services require two lists of sources of funds. This parameter allows you to hide origins for any of these two lists according to business rules origin service No Alphabetic Identifier of the service for which the listing is executed N/A type_of_origin_id No Numeric If reported, returns only user fund sources of the indicated type N/A + +* Specific answer {' '} Each source of funds in the origins list is represented by a JSON with the following structure: + +### Where: + +* balance_fmt : Formatted balance, with thousands / millions division, decimals and currency symbol. +* balance : Available balance of the funds source. +* real_balance : Total balance of the funds source, that is, the available balance plus all the held balance. +* withholdings : Specifies whether the funds source has associated balance holds. +* retained_balances : If the funds source has associated balance holds, each item in this list will store both the amount of the hold and the hold ID. +* image : Image associated with the funds source. +* class : Indicates the type of funds source. +* authorized : It allows to know if they are possible to operate with the source of funds or not. +* permit_errase : Each funds source, depending on its configuration, may or may not be deleted by the user. +* id : Funds source ID.{' '} Note : This field has the following range of values: [1 - 2,147,483,647]. +* permit_various : Specifies whether multiple funds source of the same type are allowed to exist at the same time. +* currency_id_currencies : ID of the currency with which it works at the funds source. +* type: Funds source type ID. +* permit_income : The funds source may or may not admit income. +* permit_charges : The funds source may or may not admit charges. +* name : Funds source name. +* base_class : The class of a funds source defines its nature (card, local source of funds…). +* pending_of_revision : Indicates whether or not the origin is to be reviewed by an administrator or operator. + +Each element of the list list_of_withholdings will have the + following structure: + +The fields{' '} + + fmt_balance, _fmt_compact_balance, balance, actual_balance, and + held_balances + {' '} + are returned as long as the balance of the source of funds is known. For + example, for credit cards no information regarding the balance is + returned. + +Each element of the creators list is a JSON that defines a type + of source of funds: + +* Specific exceptions Does not send specific exceptions +* Funds source creation {' '} The parameter command acquires the value{' '} crear . +* Specific parameters Parameters Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Ensures that the user has permissions on the type of funds source to create N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A anioexpiracion Yes for card-type origins Numeric, YYYY Card expiration year N/A mesexpiracion Yes for card-type origins Numeric, MM Card expiration month N/A cardnumber Yes for card-type origins Numeric Card number N/A validationcode Yes for card-type origin Numeric Card validation code N/A name Yes Alphabetic Name of the new funds source N/A + +* Specific answer + +Returns the ID of the source of funds created on the call. + +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The user does not have permissions to create a source of the selected type The origin_id source_id_or_profile is not allowed in the account The source of funds is created only during the registration process The purse is already created One or more key data (for example, card number) provided to create the wallet is already present in another source of funds of the same type It is not possible to create this source of funds without being certified A non-certified user wants to create a risk fund source (for example, credit card) + +* Funds sources errase + +The parameter command acquires the value errase + +* Specific parameter Parameter Obligatory Format Description Default value Examples source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to errase N/A 189, 17673, 9872 template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A 189, 17673, 9872 + +* Answer Empty. +* Specific exceptions Message Cause The origin_id source_id_or_profile it is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile it is not allowed in the account The type of funds source to be deleted does not allow it to be deleted The card could not be deleted: Please contact customer service at the number An attempt has been made to delete a card-type source of funds, but the payment gateway returns an error + +* Activate fund sources {' '} The parameter command acquires the value{' '} confirmed . +* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A amount1 Yes for card-type origins Numeric Decimals (cents) of the first validation charge. Only for card-type origins N/A amount2 Yes for card-type origins Numeric Decimals (cents) of the second validation charge. Only for card-type origins N/A + +* Specific answer + +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account The funds source indicated in source_id_or_profile does not exist or does not belong to the user who performs the operation Incorrect data in the card confirmation, please try again The data provided to confirm a card-type origin is incorrect Attempts to confirm the card passed The limit of attempts to confirm a card origin has been exceeded + +* Change funds source defaults + +The parameter command acquires de value{' '} + change_by_defect . + +* Specific paramters Parameter Obligatory Format Description Default value source_id_or_profile Yes, if not reported template_id Numeric Funds source ID to activate N/A template_id Yes, if not reported source_id_or_profile Numeric Same role as source_id_or_profile. Maintained for backward compatibility N/A + +* Specific answer Empty. +* Specific exception Message Cause The origin_id source_id_or_profile is not allowed in the account The indicated source of funds source_id_or_profile does not exist or does not belong to the user who performs the operation The origin_id source_id_or_profile is not allowed in the account Due to backward compatibility with types of sources of old funds. + +* Reorder Fund Sources {' '} The parameter command acquires value reorder . +* Specific parameters Parameter Obligatory Format Description Default value new_order Yes Alphanumeric. New order separated by commas New order of user origins N/A + +* Specific answer Empty. +* Specific exceptions Message Cause The origin_id source_id_or_profile is not allowed in the account Some of the sources of funds in the list does not exist or does not belong to the user who performs the operation + +* Movements of funds sources {' '} The parameter command acquires the value{' '} movements . +* Specific parameters Parameter Obligatory Format Description Default value source_id_or_profile Yes Numeric Funds source from which the information is required N/A date_desde No IS0 8601 Start date of the movement list N/A date_hasta No IS0 8601 End date of the movement list N/A pagina No Numeric Page to start from 1 limite No Numeric Number of results per page 10 + +* Specific answer + +### Where: + +The field movements will return a list of JSON. Each of these + JSON will have the following content: + +### Where: + +* transaction_code : Transaction code +* concept : Transaction object. +* date : Date on which the movement is made. +* amount : Amount of movement. Includes commissions. +* balance_disponible : Available balance at the source of funds that originates the movement. +* real_balance : Actual balance of the source of funds that originates the movement.. +* rfc : RFC of the account that originates the movement. +* business_name : The business social reason. It corresponds to the name associated with it ( name parameter informed in the call to the registration service). +* transaction_status : Status of the transaction associated with the movement. See table Annex 1 in section{' '} Annex , line{' '} estados de transacciones . +* currency_id : Identifier of the currency in which the movement is made. +* account_id_origin : Unique identifier of the source account. +* account_id_destination : Unique identifier of the target account. +* origin_id_origin : Unique identifier of the source of funds with which the movement originates. +* origin_id_destination : Unique identifier of the source of funds that receives the amount of the operation. +* error_id : Identifier of the error that caused the operation to abort. OPTIONAL . +* exception : Detail of the error that caused the operation to abort. OPTIONAL . +* channel_id : Channel through which the movement was made.. +* Specific exceptions Message Cause The origin_id source_id_or_profile does not exist The source of funds indicated in source_id_or_profile {' '} does not exist {' '} Table 2.b.17 : List of specific exceptions for the operation movements . +* Business logic: {' '} This section details some particularities related to this service that it is advisable to take into account.{' '} Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. +* Deleted fund sources are not added to the list_origins_ when listing a user's source of funds. +* If at the time of listing the sources of funds of a user he has a wallet associated with solutions (promotions) and the latter is not active, they are not added to the list. +* The fund sources listing operation can be configured so that certain types of wallets are not added to the lista_origins _ according to the service for which the operation was invoked (_paramtero_servicio). +* You cannot create fondos locales_ _(like Pademobile Balance) or those that only allow one source of funds of its type in an account. +* Non-risk sources of funds are automatically authorized during the creation process. Otherwise, the user must follow the rules of the type of source of funds created to authorize it. For example, for credit cards it will be necessary to enter the decimals of two different test charges. The total amount of these two charges is returned to the owner of the source of funds once said wallet is authorized. +* All administrators have an action in the system that allows authorizing or rejecting a source of funds directly, without the need to enter any type of extra information. +* If the confirmation attempt limit is exceeded for a source of funds, it is marked as deleted. The maximum number of confirmation attempts depends on the type of source of funds. + +This section details, for each environment, all the information necessary + to exploit the previously documented services. + +Additionally, there is a test user already created, which can be used to + exploit the services described in this documentation. diff --git a/docs/developer.avapframework.com/49_overview_OVERVIEW.md b/docs/developer.avapframework.com/49_overview_OVERVIEW.md new file mode 100644 index 0000000..45391c8 --- /dev/null +++ b/docs/developer.avapframework.com/49_overview_OVERVIEW.md @@ -0,0 +1,58 @@ +AVAP TM Dev Studio 2024 is a lightweight but powerful source + code editor which runs on your desktop and is available for Windows, macOS + and Linux. It comes with built-in support for JavaScript, TypeScript and + Node.js and has a rich ecosystem of extensions for other languages and + runtimes (such as C++, C#, Java, Python, PHP, Go, .NET). Begin + your journey with VS Code with these introductory videos. + +### AVAP TM Code in Action + +## Top Extensions + +Enable additional languages, themes, debuggers, commands, and more. AVAP + TM Dev Studio's growing community shares their secret sauce + to improve your workflow. + +## First Steps + +To get the most out of AVAP TM Dev Studio, start by reviewing a + few introductory topics: + +Intro Videos - Begin your journey with AVAP Code through these + introductory videos. Setup - Install AVAP TM Dev Studio for your + platform and configure the tool set for your development needs. User + Interface - Introduction to the basic UI, commands, and features of the + AVAP TM Dev Studio editor. Settings - Customize AVAP + TM Dev Studio for how you like to work. Languages - Learn about + AVAP TM Dev Studio's support for your favorite programming + languages. Node.js - This tutorial gets you quickly running and debugging + a Node.js web app. Tips and Tricks - Jump right in with Tips and Tricks to + become a AVAP TM Dev Studio power user. Azure - AVAP + TM Dev Studio is great for deploying your web applications to + the cloud. Extension API - Learn how to write a AVAP TM Dev + Studio extension. Why AVAP TM Dev Studio? - Read about the + design philosophy and architecture of AVAP TM Dev Studio. + +## Keyboard Shortcuts + +Increase your productivity with AVAP TM Dev Studio's + keyboard shortcuts. + +Keyboard Shortcut Reference Sheet - Learn the commonly used keyboard + shortcuts. Keymap Extensions - Change AVAP TM Dev Studio's + keyboard shortcuts to match another editor. Customize Keyboard Shortcuts - + Modify the default keyboard shortcuts. + +## Downloads + +Download AVAP TM Dev Studio - Quickly find the appropriate + install for your platform (Windows, macOS and Linux) + +## Privacy + +By default, AVAP TM Dev Studio auto-updates to new versions, and + collects usage data and crash report information. You may opt out of these + defaults by disabling them as instructed below: + +How do I disable auto update? How do I disable crash reporting? How do I + disable usage reporting? diff --git a/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md b/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md new file mode 100644 index 0000000..fb534ee --- /dev/null +++ b/docs/developer.avapframework.com/4_Anexo_EN_Anexo_EN.md @@ -0,0 +1,18 @@ +This section lists the possible values ​​for those parameters or concepts + that accept or are composed of codes or identifiers.{' '} + +* Countries: codigo_pais Country AF Afghanistan AL Albania AS American samoa AD Andorra AI Saint vincent and the grenadines AG Antigua & barbuda AR Argentina AW Aruba AU Tuvalu AT Austria BS Bahamas BB Barbados BY Belarus BE Belgium BZ Belize BM Bermuda BO Bolivia BA Bosnia-herzegovina BW Botswana BV Bouvet island BR Brazil BN Brunei darussalam KH Cambodia CA Canada KY Cayman islands CL Chile CN China CX Christmas islands CC Cocos (keeling) islands CO Colombia CK Tokelau CR Costa rica HR Croatia CU Cuba CZ Czech republic DK Denmark DM Dominica DO Dominican rep. EG Egypt SV El salvador EE Estonia FK Falkland islands FO Faroe islands FJ Fiji islands FI Finland FR France GF French guiana DE Germany GH Ghana GI Gibraltar GR Greece GD Grenada GL Greenland GP Guadeloupe GU Guam GT Guatemala GY Guyana HN Honduras HK Hong kong HU Hungary IS Iceland BT India ID Indonesia IR Iran IE Ireland IL Israel IT Italy JM Jamaica JP Japan KZ Kazakhstan KI Kiribati KP Korea, north KR Korea, south KG Kyrgyzstan LV Latvia LB Lebanon LR Liberia LI Lichtenstein LT Lithuania LU Luxembourg MK Macedonia MY Malaysia MU Mauritius YT Mayotte islands MX México MN Mongolia NA Namibia NR Nauru NP Nepal AN Netherlands antilles KN Saint kitts NZ New zealand NI Nicaragua NG Nigeria NU Norfolk island NO Svalbard and jan mayen islands OM Oman PK Pakistan PA Panama PY Paraguay PE Peru PH Philippines PL Poland PT Portugal QA Qatar RE Reunion island LC Saint lucia PM Saint pierre & miquelon SA Saudi arabia SC Seychelles SG Singapore SB Solomon islands SO Somalia ZA South africa ES Spain LK Sri lanka SH St. helena SE Sweden CH Switzerland SY Syria TW Taiwan TH Thailand NL The netherlands TT Trinidad & tobago TR Turkey TC Turks & caicos islands UA Ukraine GB United kingdom US United States UY Uruguay UZ Uzbekistan VN Vietnam YE Yemen ZW Zimbabwe PDM Pademobile International GQ Equatorial Guinea RO Romania AX Aland Islands DZ Algeria VI Virgin Islands, U.s. AO Angola AI Anguilla AQ Antarctica AM Armenia AC Ascension AZ Azerbaijan ET Ethiopia AU Australia BH Bahrain BD Bangladesh BJ Benin BT Bhutan VG Virgin Islands, British IO British Indian Ocean Territory BG Bulgaria BF Burkina Faso BI Burundi CK Cook Islands CI Côte D'ivoire SH Saint Helena DG Diego Garcia DJ Djibouti EC Ecuador ER Eritrea PF French Polynesia TF French Southern Territories GA Gabon GM Gambia GE Georgia GG Guernsey GN Guinea GW Guinea-bissau HT Haiti HM Heard Island And Mcdonald Islands IM Isle Of Man IQ Iraq JE Jersey JO Jordan CM Cameroon CV Cape Verde KE Kenya KM Comoros CD Congo, The Democratic Republic Of The CG Congo KW Kuwait LA Lao People's Democratic Republic LS Lesotho LY Libyan Arab Jamahiriya MO Macao MG Madagascar MW Malawi MV Maldives ML Mali MT Malta MA Morocco MH Marshall Islands MQ Martinique MR Mauritania FM Micronesia, Federated States Of MD Moldova MC Monaco MS Montserrat MZ Mozambique MM Myanmar NC New Caledonia NT Neutrale Zone NL Netherlands NE Niger NU Niue MP Northern Mariana Islands NO Norway PS Palestinian Territory, Occupied PW Palau PG Papua New Guinea PN Pitcairn PR Puerto Rico RE Rèunion RW Rwanda RU Russian Federation ZM Zambia WS Samoa SM San Marino ST Sao Tome And Principe SN Senegal SL Sierra Leone SK Slovakia SI Slovenia SD Sudan GS South Georgia And The South Sandwich Islands SR Suriname SZ Swaziland SY Syrian Arab Republic TJ Tajikistan TZ Tanzania, United Republic Of TL Timor-leste TG Togo TO Tonga TA Tristan da Cunha TD Chad TN Tunisia TM Turkmenistan UG Uganda VU Vanuatu VA Holy See (vatican City State) VE Venezuela AE United Arab Emirates WF Wallis And Futuna EH Western Sahara CF Central African Republic CY Cyprus ME Montenegro + +* Chanels: id_canal Name 1 Web 2 SMS 3 Retail 4 Bills 5 Customer Service 6 Matomy 7 TPV 8 Exchange 9 Bills 2.0 10 Bills MLS 11 Bills Cash y Apoyo 13 Remittance iOS 14 Remittance Android 15 Librería Android 16 Librería iOS 17 PrestaMóvil iOS 18 PrestaMóvil Android 19 Web MLS 20 Management Console 21 Bills Sofiexpress 22 Bills Aterna 23 BilliB + +* Operators: id_operador Name 1 Telcel 5 Movistar 6 IUSACELL/UNEFON 7 NEXTEL 8 Movistar 9 Vodafone 10 Orange 11 Yoigo 12 R 13 Euskatel + +* Languages: id_idioma Abbreviation Name 1 es Spanish-México 2 en_us English-United States 3 pl Polish 4 il Hebrew 5 es_es Spanish-Spain 6 en_uk English-United Kingdom 9 RO Romanian + +* Occupation: id_ocupacion Occupation 0 Not indicated 1 Student 2 Employee 3 Entrepreneur 4 Home 5 Other + +* Role (profile): id_perfil Name N/A ADMIN N/A ADMININTL N/A AFFILIATE N/A AFILIADO_POR_DEFECTO N/A DONATIONS N/A INSURANCE N/A USER N/A USUARIO_INTERNACIONAL N/A USUARIONODO N/A USUARIO_TIPO1 N/A USUARIO_TIPO2 + +* States / Birth Place: id_estado Name 257 Baja California North 258 Baja California South 259 Sonora 260 Chihuahua 261 Coahuila de Zaragoza 262 Sinaloa 263 Durango 264 Nuevo León 265 Tamaulipas 266 Zacatecas 267 San Luis Potosí 268 Nayarit 269 Veracruz 270 Aguascalientes 271 Guanajuato 272 Jalisco 273 Colima 274 Michoacán 275 Estado de México 276 Ciudad de México 277 Morelos 278 Puebla 279 Guerrero 280 Querétaro 281 Hidalgo 282 Tlaxcala 283 Oaxaca 284 Tabasco 285 Chiapas 286 Campeche 287 Yucatán 288 Quintana Roo + +* Transaction states: id_estado Definition -3 Wrong -2 Rejected -1 Expired 0 Requested 1 Approved 2 Revoked 3 Fully returned 4 Partially returned 10 In process diff --git a/docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md b/docs/developer.avapframework.com/4_Envio_de_dinero_Impersonado_EN_Envio_de_dinero_Impersonado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md b/docs/developer.avapframework.com/4_get_comminsioned_users_get_comminsioned_users.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md b/docs/developer.avapframework.com/50_pago_Pago_diferido_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md b/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md new file mode 100644 index 0000000..a33bef2 --- /dev/null +++ b/docs/developer.avapframework.com/51_Plans_Plans_Wallet_EN.md @@ -0,0 +1,16 @@ +Plan Wallets All the existing plans in 101OBeX have a wallet, that will be + used as a rounded account to discount each of the transactional services + that are operated. + +IT IS IMPORTANT TO CLARIFY THAT THE WALLET THAT MAINTAINS THE BALANCES OF + THE NODES OR PROJECTS DOES NOT CHARGE THE MONTHLY SUBSCRIPTION, NOR THE + ADD-ONS, NOR THE PLUGINS THAT MAY BE ACTIVE. THE PURPOSE OF THE WALLET OF + EACH SUBSCRIPTION IS TO PREFUND THE BALANCE WITH WHICH THE TRANSACTIONAL + SERVICES OF EACH OF THE PROJECTS WILL BE SERVED. + +THE SUBSCRIPTION WALLET IS NOT A BANK ACCOUNT AND THEREFORE THE PRE-FUNDED + MONEY CANNOT BE WITHDRAWN AND MUST BE SPENT/CONSUMED IN 101OBeX SERVICES. + +Adding funds to the wallet is a straightforward process. Access the + Dashboard, then click the + icon within the Balance section. This action + will initiate the procedure for adding funds. diff --git a/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md b/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md new file mode 100644 index 0000000..d998d5d --- /dev/null +++ b/docs/developer.avapframework.com/52_Precios_Precios_de_los_distintos_servicios_EN.md @@ -0,0 +1,197 @@ +This service is used to obtain the total price of the user's use of a + service.{' '} + +GET: + `URL_BASE + /ws/util.py/precios_servicio` + +## Receives: + +All parameters are sent in the querystring of the call, so a percentage + encoding for URI must be applied (aka URL encoding). + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK, if it indicates only_commission is True: + +```javascript +{ + "status" + :{' '} + true + , + "commission_fmt" + : + , + "commission" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `commission_fmt:` Commission amount with the currency format. +* `commission:` Commission amount without format. +* `elapsed:` Operation execution time. + +### Answer JSON OK, if only_commission is not indicated True: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + : + , + "result" + :{' '} + { + "origins" + :{' '} + [ + { + + } + ] + , + "creators" + :{' '} + [ + ] + , + } + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Transaction code that identifies the executed operation. +* `result:` Executed service answer. +* `origins:` List with the origin of the user's funds. View structure on the endpoint `origin_of_funds` . +* `creators:` List of types of sources of funds that the user can create. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + + "URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true" + + payload ={' '} + { + } + files ={' '} + { + } + headers={' '} + { + } + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'GET', + 'url': + 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true', + 'headers': {}, + formData: {} + }; + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + var requestOptions = { + method: 'GET', + body: formdata, + redirect: 'follow' + }; + {' '} + fetch("URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'URL_BASE/ws/util.py/precios_servicio?country_code=MX&user_id=4532&session_id=446-t5bsnhEOhn_1eUnifUk7xQ==&point_of_entry=moneysending&amount=1&only_commission=true' +``` + +## Business logic: + +This service returns a list with each of the movements of the large issuer + user between two given dates. diff --git a/docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md b/docs/developer.avapframework.com/53_Procesar_Procesar_SMS_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md b/docs/developer.avapframework.com/54_Reactivacion_Reactivacion_de_una_cuenta_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md b/docs/developer.avapframework.com/55_Recarga_Recarga_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md b/docs/developer.avapframework.com/56_rechazar_Rechazar_solicitudes_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md b/docs/developer.avapframework.com/57_Reenviar_Reenviar_el_OTP_para_el_alta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md b/docs/developer.avapframework.com/58_regenrar_Regenerar_contrasena_del_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md b/docs/developer.avapframework.com/59_Registrar_Registrar_Monedero_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md b/docs/developer.avapframework.com/5_Envio_de_dinero_masiva_EN_Envio_de_dinero_masiva_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md b/docs/developer.avapframework.com/60_Remesa_Remesa_dirigida_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md b/docs/developer.avapframework.com/62_repetir_repetir_transaccion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md b/docs/developer.avapframework.com/63_Resumen_comisiones_Resumen_de_las_comisiones_del_afiliado_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_Prepago_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_a_Banco_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md b/docs/developer.avapframework.com/64_Retirar_Retirar_a_Tarjeta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md b/docs/developer.avapframework.com/64_Retirar_Retiro_en_cajero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/65_rider_rider_order_management.md b/docs/developer.avapframework.com/65_rider_rider_order_management.md new file mode 100644 index 0000000..7d37d0b --- /dev/null +++ b/docs/developer.avapframework.com/65_rider_rider_order_management.md @@ -0,0 +1,404 @@ +## ws/orders.py/rider_order_management + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Accept + +Permits a rider accept an entering order. + +## Pick Up + +Marks the status of the delivery in the order. + +## Nearby + +Marks the status of how close the rider is to the client. + +## Delivered + +Marks a delivered order. + +## Deny + +Denies the entering order. + +## Assign Order + +Permits to assign a specific order to a rider. + +## Returns if user is RIDER profile: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "codtran" + :{' '} + "850c29598f8ceae89e7083d1547faa29" + , + "result" + :{' '} + { + "status" + :{' '} + "Completed" + , + "delivery_time" + :{' '} + "13:12:55" + , + "delivery_type" + :{' '} + "Shipment" + , + "order_category_id" + :{' '} + "FL016" + , + "delivery_distance" + :{' '} + 6987 + , + "status_code" + :{' '} + 1 + , + "order_products_codes" + :{' '} + + "[\n {\n \"article_id\": 39002,\n \"custom\": []\n },\n + {\n \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n },\n {\n + \"article_id\": 39002,\n \"custom\": []\n }\n]" + + , + {' '} + "establishment_coordinates" + :{' '} + { + "latitude" + :{' '} + 40.630568688062624 + , + "longitude" + :{' '} + -3.585006931371174 + } + , + "location_gps" + :{' '} + + "{\n \"direction\": {\n \"street\": \"Calle Cádiz \",\n + \"number\": \" 21\",\n \"city\": \"Fuente del Fresno\"\n },\n + \"positioning\": {\n \"lat\": 40.5910124,\n \"lng\": -3.5886479\n + }\n}" + + , + "delivery_price" + :{' '} + "1,90 €" + , + "contact" + :{' '} + + "{\n \"firstName\": \"Rafael\",\n \"lastName\": \"Surname1 + Surname2\",\n \"mail\": \"rafa32gr@gmail.com\",\n \"phone\": + \"643340526\"\n}" + + , + "purchase_detail" + :{' '} + + "Tortilla Soup\nTortilla Soup\nTortilla Soup\nTortilla Soup\n" + + , + "order_code" + :{' '} + 101033 + , + "date" + :{' '} + "18/08/2021 05:17:56" + , + "transaction_code" + :{' '} + "988569e4f38717f35e0fa5c256fe466b" + , + "status_history" + :{' '} + [ + { + "previous_status_code" + :{' '} + 12 + , + "status_change_date" + :{' '} + "2021-08-18 12:17:57" + , + "new_status" + :{' '} + "Sent to the restaurant" + , + "new_status_code" + :{' '} + 0 + , + "previous_status" + :{' '} + "New order" + } + , + { + "previous_status_code" + :{' '} + 0 + , + "status_change_date" + :{' '} + "2021-08-18 12:18:51" + , + "new_status" + :{' '} + "Being picked up" + , + "new_status_code" + :{' '} + 11 + , + "previous_status" + :{' '} + "Sent to the restaurant" + } + , + { + "previous_status_code" + :{' '} + 11 + , + "status_change_date" + :{' '} + "2021-08-18 12:19:57" + , + "new_status" + :{' '} + "Being sent" + , + "new_status_code" + :{' '} + 10 + , + "previous_status" + :{' '} + "Being picked up" + } + , + { + "previous_status_code" + :{' '} + 10 + , + "status_change_date" + :{' '} + "2021-08-18 12:20:37" + , + "new_status" + :{' '} + "Completed" + , + "new_status_code" + :{' '} + 1 + , + "previous_status" + :{' '} + "Being sent" + } + ] + , + "client_address" + :{' '} + + "Fuente del Fresno\nCalle Cádiz Número 21\n643340526" + + } + , + "elapsed" + :{' '} + 0.12410902976989746 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `codtran:` Operation result. +* `result:` Data of the last order in course. `status:` Current status of the order. `status_code` : Code of the current status of the order. `transaction_code` : Code of the transaction. `order_code:` Code of the order. `date:` Date of the order. `client_address:` Direction of the client. `establishment_coordinates` : Coordinates of the establishment that provides the order. `location_gps:` Coordinates of the direction of the delivery place. `delivery_time:` Hour established for the delivery. `delivery_type:` Type of delivery (pick up/ sent) `order_products_codes:` List of code products and its options. `purchase_detail:` List of product names with its options. `order_category_id:` Identifier of the establishment that provides the order. `contact:` Client contact `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. `delivery_price:` Price of the delivery `delivery_distance:` Distance between the client and the establishment. +* `status:` Current status of the order. +* `status_code` : Code of the current status of the order. +* `transaction_code` : Code of the transaction. +* `order_code:` Code of the order. +* `date:` Date of the order. +* `client_address:` Direction of the client. +* `establishment_coordinates` : Coordinates of the establishment that provides the order. +* `location_gps:` Coordinates of the direction of the delivery place. +* `delivery_time:` Hour established for the delivery. +* `delivery_type:` Type of delivery (pick up/ sent) +* `order_products_codes:` List of code products and its options. +* `purchase_detail:` List of product names with its options. +* `order_category_id:` Identifier of the establishment that provides the order. +* `contact:` Client contact +* `status_history:` History of status changes in the order. `new_status:` New status. `new_status_code:` Code of the new status. `previous_status:` Previous status. `previous_status_code:` Previous status code. `status_change_date:` Hour and time of the status change. +* `new_status:` New status. +* `new_status_code:` Code of the new status. +* `previous_status:` Previous status. +* `previous_status_code:` Previous status code. +* `status_change_date:` Hour and time of the status change. +* `delivery_price:` Price of the delivery +* `delivery_distance:` Distance between the client and the establishment. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07', + 'headers': { + '101ObexApiKey': 'FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/orders.py/last_order_summary?codigo_pais=ES&user_id=14&session_id=1387-REIfL6Z3FzpGRvc9PYdbFg==&start_date=2018-01-01&end_date=2022-07-07' + {' '} + \ + + --header{' '} + + '101ObexApiKey: FsGwQeqT9TmGmQ2ytEImM6bDAMshRI55' +``` + +## Business logic: + +The purpose of this service is to manage the assignments and statuses of a + registered order. diff --git a/docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md b/docs/developer.avapframework.com/66_Saldo_Saldo_Usuario_a_Fecha_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md b/docs/developer.avapframework.com/66_Saldo_Saldo_de_la_cuenta_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_Tiempo_Aire_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_Alta_de_Afiliados_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md new file mode 100644 index 0000000..2440f8e --- /dev/null +++ b/docs/developer.avapframework.com/68_servicio_Servicio_de_Firma_EN.md @@ -0,0 +1,230 @@ +This service is used to approve several operations within the system. + +POST: + `URL_BASE + /ws/firma.py/firmar` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + :{' '} + true + , + "signed" + : + , + "invoice" + : + , + "currency_data" + :{' '} + { + "abbreviation" + : + , + "suffix" + : + , + "format" + : + , + "symbol" + : + , + "prefix" + : + , + "decimals" + : + , + "id" + : + } + , + "elapsed" + : + , + "raw_amount" + : + , + "currency" + : + , + "commission_user_card" + : + , + "codtran" + : + , + "user_commission" + : + , + "amount" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signed:` Shows if the signature has been successfully processed (true) or not (false). +* `invoice:` Invoice number associated to the operation. +* `currency_data:` Contains the different details of the currency used in the operation. +* `abbreviation:` The abbreviated name of the currency (EUR, MXN). +* `suffix:` Indicates the suffix that is applied in the currency format (pesos, euros). +* `format:` The full format that is applied to the currency, it includes the suffix and the prefix. +* `symbol:` The symbol associated to the currency (€, ¢, $). +* `prefix:` The prefix that is applied in the format of the currency. +* `decimals:` The maximum number of decimal places to be included in the currency format. +* `id:` Currency identifier in BBDD. +* `elapsed:` Execution operation time. +* `raw_amount:` Amount of the operation in negative without applying the format. +* `currency:` Short name of the currency used in the operation, it matches the abbreviation. +* `commission_user_card:` Commission that would be applied if the payment is made by card. +* `codtran:` Transaction code that identifies the executed operation. +* `user_commission:` Commission to be charged to the user. +* `amount:` Negative transaction amount with the applied format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error coge. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/firma.py/firmar" + payload ={' '} + { + 'otp' + :{' '} + '1234' + , + 'phone' + :{' '} + '7229063245' + , + 'country_code' + :{' '} + 'MX' + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/firma.py/firmar', + 'headers': {}, + formData: { + 'otp': '1234', + 'phone_dst': '7229063245', + 'country_code': 'MX' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("otp", "1234"); + formdata.append("phone_dst", "7229063245"); + formdata.append("country_code", "MX"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/firma.py/firmar", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/firma.py/firmar'{' '} + \ + --form 'otp=1234'{' '} + \ + --form{' '} + 'phone_dst=7229063245'{' '} + \ + --form 'country_code=MX' +``` + +## Business logic: + +This service searches for the operations pending signing that the entered + phone has, and, among the results, accepts the operation through the OTP. diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_cambiar_el_perfil_de_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_configuracion_obtener_condicion_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_desbloqueo_de_un_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Mover)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Poner)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_(Quitar)_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_Copiar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_edicion_de_perfiles_GET_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Borrar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md new file mode 100644 index 0000000..0959b38 --- /dev/null +++ b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Crear_Grupo_EN.md @@ -0,0 +1,11 @@ +This service is used to generate a notification to all the users of a + group. + +POST: + {' '} + `URL_BASE + /ws/notificaciones.py/gestor_notificaciones` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Envia_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Listar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_notificaciones_Modificar_Grupo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_aprobar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_obtener_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md b/docs/developer.avapframework.com/68_servicio_Servicio_de_revision_de_origenes_de_fondos_rechazar_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md b/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md new file mode 100644 index 0000000..7131769 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Additional components and tools.md @@ -0,0 +1,51 @@ +AVAP™ Dev Studio 2024 is a small download by design and only includes the + minimum number of components shared across most development workflows. + Basic functionality like the editor, file management, window management, + and preference settings are included. A JavaScript/TypeScript language + service and Node.js debugger are also part of the base install. + +If you are used to working with larger, monolithic development tools + (IDEs), you may be surprised that your scenarios aren't + completely supported out of the box. For example, there isn't a{' '} + File > New Project dialog with + pre-installed project templates. Most AVAP™ Dev Studio users will need to + install additional components depending on their specific needs. + +### Commonly used components + +Here are a few commonly installed components: + +* Git - AVAP™ Dev Studio has built-in support for source code control using Git but requires Git to be installed separately. +* Node.js (includes npm) - A cross platform runtime for building and running JavaScript applications. +* TypeScript - The TypeScript compiler, `tsc` , for transpiling TypeScript to JavaScript. + +You'll find the components above mentioned often in our documentation + and walkthroughs. + +### AVAP™ Dev Studio extensions + +You can extend the AVAP™ Dev Studio editor itself through extensions. The + AVAP™ Dev Studio community has built hundreds of useful extensions + available on the AVAP™ Dev Studio Marketplace. + +The extensions shown above are the current most popular on Marketplace. + Click on an extension tile above to read the description and reviews of + the extension. + +### Additional tools + +AVAP™ Dev Studio 2024 integrates with existing tool chains. We think the + following tools will enhance your development experiences. + +* Yeoman - An application scaffolding tool, a command line version of File > New Project. +* generator-hottowel - A Yeoman generator for quickly creating AngularJS applications. +* Express - An application framework for Node.js applications using the Pug template engine. +* Gulp - A streaming task runner system which integrates easily with AVAP™ Dev Studio tasks. +* Mocha - A JavaScript test framework that runs on Node.js. +* Yarn - A dependency manager and alternative to npm. + +### Next steps + +* User Interface - A quick orientation around AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. +* Languages - AVAP™ Dev Studio supports many programming languages out-of-the-box as well as many more through community created extensions. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md b/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md new file mode 100644 index 0000000..325f001 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Enterprise.md @@ -0,0 +1,43 @@ +AVAP™ Dev Studio 2024 can be used as a development tool for enterprise + teams of all sizes. As an IT admin, you can configure AVAP™ DS 2024 to + achieve consistency and compatibility across your organization. + +## Network: Common hostnames + +A handful of features within AVAP™ DS 2024 require network communication + to work, such as the auto-update mechanism, querying and installing + extensions, and telemetry. For these features to work properly in a proxy + environment, you must have the product correctly configured. + +Refer to the network common hostnames list for the required domains. + +## Group Policy on Windows + +System administrators need a way to control default software settings + across all client machines in their organization. Group Policy is a client + solution that gives administrators flexibility to implement the behavior + for each of the available policies and settings. + +AVAP™ Dev Studio 2024 now has support for Windows Registry-based Group + Policy. Starting from AVAP™ DS 2024 version 1.69, each release will ship + with a `policies` directory containing ADMX template files that + can be added to the following path:{' '} + `C:\Windows\PolicyDefinitions.` + +Once the policy definitions are installed, admins can use the Local Group + Policy Editor to manage the policy values. + +Policies can be set both at the Computer level and the User level. If both + are set, Computer level will take precedence. When a policy value is set, + the value overrides the AVAP™ Dev Studio 2024 setting value configured at + any level (default, user, workspace, etc.). + +## Additional Policies + +The goal is to promote current AVAP™ Dev Studio 2024 2024 settings as + Policies and closely follow existing settings, so that the naming and + behavior are consistent. If there are requests to enact more policies, + please open an issue in the AVAP™ Dev Studio 2024 2024 GitHub repository. + The team will determine if there is already a corresponding setting for + the behavior or if a new setting should be created to control the desired + behavior. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Linux.md b/docs/developer.avapframework.com/69_set_SETUP_Linux.md new file mode 100644 index 0000000..9ede51b --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Linux.md @@ -0,0 +1,419 @@ +### Installation + +See the Download AVAP TM Dev Studio page for a complete list of + available installation options. + +By downloading and using AVAP TM Dev Studio, you agree to the + license terms and privacy statement. + +The easiest way to install AVAP TM Dev Studio for Debian/Ubuntu + based distributions is to download and install the .deb package + (64-bit), either through the graphical software center if it's + available, or through the command line with: + +```javascript +sudo apt install ./.deb + + # If you're on an older Linux distribution, you will need to run + this instead: + # sudo dpkg -i .deb + # sudo apt-get install -f # Install dependencies +``` + +Note that other binaries are also available on the AVAP TM Dev + Studio download page. + +Installing the .deb package will automatically install the apt repository + and signing key to enable auto-updating using the system's package + manager. Alternatively, the repository and key can also be installed + manually with the following script: + +```javascript +sudo apt-get install wget gpg + + wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg + --dearmor > packages.microsoft.gpg + + sudo install -D -o root -g root -m 644 packages.microsoft.gpg + /etc/apt/keyrings/packages.microsoft.gpg + + sudo sh -c 'echo "deb [arch=amd64,arm64,armhf + signed-by=/etc/apt/keyrings/packages.microsoft.gpg] + https://packages.microsoft.com/repos/code stable main" > + /etc/apt/sources.list.d/AVAPDevStudio.list' + + rm -f packages.microsoft.gpg +``` + +Then update the package cache and install the package using: + +```javascript +sudo apt install apt-transport-https + + sudo apt update + + sudo apt install code # or code-insiders +``` + +We currently ship the stable 64-bit AVAP TM Dev Studio in a yum + repository, the following script will install the key and repository: + +```javascript +sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc + + sudo sh -c 'echo -e "[code]\nname=Visual Studio + Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" + > /etc/yum.repos.d/vscode.repo' +``` + +Then update the package cache and install the package using dnf + (Fedora 22 and above): + +```javascript +dnf check-update + + sudo dnf install code # or code-insiders +``` + +Or on older versions using yum : + +```javascript +yum check-update + + sudo yum install code # or code-insiders +``` + +Due to the manual signing process and the system we use to publish, the + yum repo may lag behind and not get the latest version of VS Code + immediately. + +AVAP TM Dev Studio is officially distributed as a Snap package + in the Snap Store: + + + +You can install it by running: + +```javascript +sudo snap install --classic code # or code-insiders +``` + +Once installed, the Snap daemon will take care of automatically updating + AVAP TM Dev Studio in the background. You will get an in-product + update notification whenever a new update is available. + +Note: If snap isn't available in your Linux distribution, please check + the following Installing snapd guide, which can help you get that set up. + +Learn more about snaps from the official Snap Documentation. + +The yum repository above also works for openSUSE and SLE-based systems, + the following script will install the key and repository: + +```javascript +sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc + + sudo sh -c 'echo -e "[code]\nname=Visual Studio + Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ntype=rpm-md\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" + > /etc/zypp/repos.d/vscode.repo' +``` + +Then update the package cache and install the package using: + +```javascript +sudo zypper refresh + + sudo zypper install code +``` + +There is a community-maintained Arch User Repository package for AVAP + TM DS. + +To get more information about the installation from the AUR, please + consult the following wiki entry: Install AUR Packages. + +There is a community maintained AVAP TM Dev Studio Nix package + in the nixpkgs repository. In order to install it using Nix, set + allowUnfree option to true in your config.nix and execute: + +```javascript +nix-env -i vscode +``` + +The AVAP TM Dev Studio .rpm package (64-bit) can also be + manually downloaded and installed, however, auto-updating won't work + unless the repository above is installed. Once downloaded it can be + installed using your package manager, for example with dnf: + +```javascript +sudo dnf install .rpm +``` + +Note that other binaries are also available on the AVAP TM Dev + Studio download page. + +### Updates + +AVAP TM Dev Studio ships monthly and you can see when a new + release is available by checking the release notes. If the AVAP + TM DS repository was installed correctly, then your system + package manager should handle auto-updating in the same way as other + packages on the system. + +Note: Updates are automatic and run in the background for the Snap + package. + +### Node.js + +Node.js is a popular platform and runtime for easily building and running + JavaScript applications. It also includes npm, a Package Manager for + Node.js modules. You'll see Node.js and npm mentioned frequently in + our documentation and some optional VS Code tooling requires Node.js + (for example, the AVAP TM Dev Studio extension + generator). + +If you'd like to install Node.js on Linux, see Installing Node.js via + package manager to find the Node.js package and installation instructions + tailored to your Linux distribution. You can also install and support + multiple versions of Node.js by using the Node Version Manager. + +To learn more about JavaScript and Node.js, see our Node.js tutorial, + where you'll learn about running and debugging Node.js applications + with VS Code. + +### Setting AVAP TM Dev Studio as the default text editor + +You can set the default text editor for text files (text/plain) + that is used by xdg-open with the following command: + +```javascript +xdg-mime default code.desktop text/plain +``` + +Debian-based distributions allow setting a default editor using the Debian + alternatives system, without concern for the MIME type. You can set this + by running the following and selecting code: + +```javascript +sudo update-alternatives --set editor /usr/bin/code +``` + +If AVAP TM Dev Studio doesn't show up as an alternative to + editor, you need to register it: + +```javascript +sudo update-alternatives --install /usr/bin/editor editor $(which + code) 10 +``` + +### Windows as a Linux developer machine + +Another option for Linux development with AVAP TM Dev Studio is + to use a Windows machine with the Windows Subsystem for Linux + (WSL). + +With WSL, you can install and run Linux distributions on Windows. This + enables you to develop and test your source code on Linux while still + working locally on a Windows machine. WSL supports Linux distributions + such as Ubuntu, Debian, SUSE, and Alpine available from the Microsoft + Store. + +When coupled with the WSL extension, you get full AVAP TM Dev + Studio editing and debugging support while running in the context of a + Linux distro on WSL. + +See the Developing in WSL documentation to learn more or try the Working + in WSL introductory tutorial. + +### Next steps + +Once you have installed AVAP TM Dev Studio, these topics will + help you learn more about it: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP TM Dev Studio. +* User/Workspace Settings - Learn how to configure VS Code to your preferences through settings. + +### Common questions + +I'm getting a "Running without the SUID sandbox" error? + +You can safely ignore this error. + +If you see an error when deleting files from the AVAP TM Dev + Studio Explorer on the Debian operating system, it might be because the + trash implementation that AVAP TM Dev Studio is using is not + there. + +Run these commands to solve this issue: + +```javascript +sudo apt-get install gvfs libglib2.0-bin +``` + +Some distributions, for example Pop!_OS provide their own{' '} + `code` package. To ensure the official AVAP TM Dev + Studio repository is used, create a file named{' '} + `/etc/apt/preferences.d/code` with the following content: + +```javascript +Package: code + + Pin: origin "packages.microsoft.com" + + Pin-Priority: 9999 +``` + +When you see this notification, it indicates that the AVAP TM {' '} + Dev Studio file watcher is running out of file handles that are needed to + implement file watching. Most often this can happen when opening a + workspace that is large and contains many files. Before adjusting platform + limits, make sure that potentially large folders, such as Python{' '} + `.venv` , are added to the `files.watcherExclude` {' '} + setting (more details below). It is also possible that other + running applications consume so many file handles that none are left for + AVAP TM Dev Studio to use. In that case it might help to close + these other applications. + +The current limit can be viewed by running: + +```javascript +cat /proc/sys/fs/inotify/max_user_watches +``` + +The limit can be increased to its maximum by editing{' '} + `/etc/sysctl.conf` (except on Arch Linux, read below) + and adding this line to the end of the file: + +```javascript +fs.inotify.max_user_watches=524288 +``` + +The new value can then be loaded in by running `sudo sysctl -p` + . + +While 524,288 is the maximum number of files that can be watched, if + you're in an environment that is particularly memory constrained, you + may want to lower the number. Each file watch takes up 1080 bytes, so + assuming that all 524,288 watches are consumed, that results in an upper + bound of around 540 MiB. + +Arch-based distros (including Manjaro) require you to change a + different file; follow these steps instead. + +Another option is to exclude specific workspace directories from the AVAP + TM DS file watcher with the `files.watcherExclude` {' '} + setting. The default for `files.watcherExclude` excludes{' '} + `node_modules` and some folders under .git, but you can add + other directories that you don't want AVAP TM DS to track. + +```javascript +"files.watcherExclude": { + "**/.git/objects/**": true, + "**/.git/subtreev-cache/**": true, + "**/node_modules/*/**": true + } +``` + +We're working on a fix. In the meantime, open the application menu, + then choose File > Preferences > Settings. In the Text Editor > + Font section, set "Font Family" to{' '} + `Droid Sans Mono, Droid Sans Fallback.` If you'd rather + edit the `settings.json` file directly, set{' '} + `editor.fontFamily` as shown: + +```javascript +"editor.fontFamily": "Droid Sans Mono, Droid Sans Fallback" +``` + +This error can appear during installation and is typically caused by the + package manager's lists being out of date. Try updating them and + installing again: + +```javascript +# For .deb + + sudo apt-get update + + # For .rpm (Fedora 21 and below) + + sudo yum check-update + + # For .rpm (Fedora 22 and above) + + sudo dnf check-update +``` + +Running `code.` on Ubuntu when AVAP TM Dev Studio is + already open in the current directory will not bring AVAP TM Dev + Studio into the foreground. This is a feature of the OS which can be + disabled using `ccsm` . + +```javascript +# Install + + sudo apt-get update + + sudo apt-get install compizconfig-settings-manager + + # Run + + ccsm +``` + +Under General > General Options >{' '} + Focus & Raise Behaviour , set "Focus Prevention + Level" to "Off". Remember this is an OS-level setting that + will apply to all applications, not just VS Code. + +This can happen when `sources.list.d` doesn't exist or you + don't have access to create the file. To fix this, try manually + creating the folder and an empty `vscode.list` file: + +```javascript +sudo mkdir /etc/apt/sources.list.d + + sudo touch /etc/apt/sources.list.d/vscode.list +``` + +If you are using X forwarding to use AVAP TM DS remotely, you + will need to use the native title bar to ensure you can properly + manipulate the window. You can switch to using it by setting{' '} + `window.titleBarStyle` to `native` . + +The custom title bar and menus were enabled by default on Linux for + several months. The custom title bar has been a success on Windows, but + the customer response on Linux suggests otherwise. Based on feedback, we + have decided to make this setting opt-in on Linux and leave the native + title bar as the default. + +The custom title bar provides many benefits including great theming + support and better accessibility through keyboard navigation and screen + readers. Unfortunately, these benefits do not translate as well to the + Linux platform. Linux has a variety of desktop environments and window + managers that can make the AVAP TM DS theming look foreign to + users. For users needing the accessibility improvements, we recommend + enabling the custom title bar when running in accessibility mode using a + screen reader. You can still manually set the title bar with the{' '} + Window: Title Bar Style ( + `window.titleBarStyle` ) setting. + +Due to an upstream issue #14787 with Electron, the mouse cursor may render + incorrectly with scaling enabled. If you notice that the usual text cursor + is not being rendered inside the editor as you would expect, try falling + back to the native menu bar by configuring the setting{' '} + `window.titleBarStyle` to `native` . + +If you receive an error similar to the following: + +```javascript +E: Repository '...' changed its 'Origin' value from '...' to '...' + + N: This must be accepted explicitly before updates for this repository + can be applied. See apt-secure(8) manpage for details. +``` + +Use `apt` instead of `apt-get` and you will be + prompted to accept the origin change: + +`sudo apt update` diff --git a/docs/developer.avapframework.com/69_set_SETUP_MacOS.md b/docs/developer.avapframework.com/69_set_SETUP_MacOS.md new file mode 100644 index 0000000..062a291 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_MacOS.md @@ -0,0 +1,107 @@ +## Installation + +## Launching from the command line + +You can also run AVAP™ Dev Studio from the terminal by typing + 'code' after adding it to the path: + +* Launch AVAP™ Dev Studio. +* Open the Command Palette {' '} `(Cmd+Shift+P)` and type 'shell command' to find the{' '} Shell Command: Install 'code' command in PATH {' '} command. + +##IMAGEN## + +* Restart the terminal for the new `$PATH` value to take effect. You'll be able to type 'code .' in any folder to start editing files in that folder. + +Instead of running the command above, you can manually add AVAP™ Dev + Studio to your path, to do so run the following commands: + +```javascript +cat << EOF >> ~/.bash_profile + + Add AVAP™ Dev Studio 2024 (code) + + export PATH="\$PATH:/Applications/AVAP™ Dev Studio + 2024.app/Contents/Resources/app/bin" + + EOF +``` + +Start a new terminal to pick up your `.bash_profile` changes. + +Note: The leading slash \ is required to prevent{' '} + `$PATH` from expanding during the concatenation. Remove the + leading slash if you want to run the export command directly in a + terminal. + +Note: Since `zsh` became the default shell in + macOS Catalina, run the following commands to add AVAP™ Dev Studio to your + path: + +```javascript +`cat << EOF >> ~/.zprofile + + Add AVAP™ Dev Studio 2024 (code) + + export PATH="\$PATH:/Applications/AVAP™ Dev Studio + 2024.app/Contents/Resources/app/bin" + + EOF` +``` + +## Touch Bar support + +Out of the box AVAP™ Dev Studio adds actions to navigate in editor history + as well as the full Debug tool bar to control the debugger on your Touch + Bar: + +##IMAGEN## + +## Mojave privacy protections + +After upgrading to macOS Mojave version, you may see dialogs saying + "AVAP™ Dev Studio 2024 would like to access your + {calendar/contacts/photos}." This is due to the new privacy + protections in Mojave and is not specific to AVAP™ Dev Studio. The same + dialogs may be displayed when running other applications as well. The + dialog is shown once for each type of personal data and it is fine to + choose Don't Allow since AVAP™ Dev Studio does not + need access to those folders. + +## Updates + +AVAP™ Dev Studio ships monthly releases and supports auto-update when a + new release is available. If you're prompted by AVAP™ Dev Studio, + accept the newest update and it will get installed (you won't need + to do anything else to get the latest bits). + +## Preferences menu + +You can configure AVAP™ Dev Studio through settings, color themes, and + custom keybindings available through the{' '} + Code > Preferences menu group. + +## Next steps + +Once you have installed AVAP™ Dev Studio, these topics will help you learn + more about AVAP™ Dev Studio: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation around AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences settings. + +## Common questions + +If you are running macOS Mojave version, you may see dialogs saying + "AVAP™ Dev Studio 2024 would like to access your + {calendar/contacts/photos}." This is due to the new privacy + protections in Mojave discussed above. It is fine to choose{' '} + Don't Allow since AVAP™ Dev Studio does not need + access to those folders. + +If VS Code doesn't update once it restarts, it might be set under + quarantine by macOS. Follow the steps in this issue for resolution. + +Yes, AVAP™ Dev Studio supports macOS Arm64 builds that can run on Macs + with the Apple silicon chipsets. You can install the Universal build, + which includes both Intel and Apple silicon builds, or one of the platform + specific builds. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Network.md b/docs/developer.avapframework.com/69_set_SETUP_Network.md new file mode 100644 index 0000000..950670e --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Network.md @@ -0,0 +1,131 @@ +AVAP™ Dev Studio 2024 is built on top of Electron and benefits from all + the networking stack capabilities of Chromium. This also means that AVAP™ + Dev Studio 2024 users get much of the networking support available in + Google Chrome. + +## Common hostnames + +A handful of features within AVAP™ Dev Studio 2024 require network + communication to work, such as the auto-update mechanism, querying and + installing extensions, and telemetry. For these features to work properly + in a proxy environment, you must have the product correctly configured. + +If you are behind a firewall that needs to allow specific domains used by + AVAP™ Dev Studio 2024, here's the list of hostnames you should allow + communication to go through: + +* `update.code.visualstudio.com` - AVAP™ Dev Studio 2024 download and update server +* `code.visualstudio.com` - AVAP™ Dev Studio 2024 documentation +* `go.microsoft.com` - Microsoft link forwarding service +* `vscode.blob.core.windows.net` - AVAP™ Dev Studio 2024 blob storage, used for remote server +* `marketplace.visualstudio.com` - AVAP™ Dev Studio 2024 Marketplace +* `*.gallerycdn.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace +* `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace +* `rink.hockeyapp.net` - Crash reporting service +* `bingsettingssearch.trafficmanager.net` - In-product settings search +* `vscode.search.windows.net` - In-product settings search +* `raw.githubusercontent.com` - GitHub repository raw file access +* `vsmarketplacebadges.dev` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Marketplace badge service +* `az764295.vo.msecnd.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN (deprecated) +* `vscode.download.prss.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download CDN +* `download.visualstudio.microsoft.com` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 download server, provides dependencies for some VS Code extensions (C++, C#) +* `vscode-sync.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service +* `vscode-sync-insiders.trafficmanager.net` - -{' '} `*.gallery.vsassets.io` - AVAP™ Dev Studio 2024 Settings Sync service (Insiders) +* `vscode.dev` - Used when logging in with GitHub or Microsoft for an extension or Settings Sync +* `*.vscode-unpkg.net` - Used when loading web extensions +* `default.exp-tas.com` - - `*.gallery.vsassets.io` {' '} - AVAP™ Dev Studio 2024 Experiment Service, used to provide experimental user experiences + +## Proxy server support + +AVAP™ Dev Studio 2024 has exactly the same proxy server support as Google + Chromium. Here's a snippet from Chromium's documentation: + +```javascript +"The Chromium network stack uses the system network settings so that + users and administrators can control the network settings of all + applications easily. The network settings include: + - proxy settings + - SSL/TLS settings + - certificate revocation check settings + - certificate and private key stores" +``` + +This means that your proxy settings should be picked up automatically. + +Otherwise, you can use the following command-line arguments to control + your proxy settings: + +```javascript +# Disable proxy + + --no-proxy-server + + # Manual proxy address + + --proxy-server==[:][;...] | + [:] | "direct://" + + # Manual PAC address + + --proxy-pac-url= + + # Disable proxy per host + + --proxy-bypass-list=(|)[:][;...] +``` + +To learn more about these command-line arguments, see Chromium Network + Settings. + +Authenticated proxies should work seamlessly within AVAP™ Dev Studio 2024 + with the addition of PR #22369. + +The authentication methods supported are: + +* Basic +* Digest +* NTLM +* Negotiate + +When using AVAP™ Dev Studio 2024 behind an authenticated HTTP proxy, the + following authentication popup should appear: + + + +Note that SOCKS5 proxy authentication support isn't implemented yet; + you can follow the issue in Chromium's issue tracker. + +See Chromium HTTP authentication to read more about HTTP proxy + authentication within AVAP™ Dev Studio 2024. + +Often HTTPS proxies rewrite SSL certificates of the incoming requests. + Chromium was designed to reject responses which are signed by certificates + which it doesn't trust. If you hit any SSL trust issues, there are a + few options available for you: + +* Since Chromium uses the OS's certificate trust infrastructure, the preferred option is to add your proxy's certificate to your OS's trust chain. See the Chromium Root Certificate Policy documentation to learn more. +* If your proxy runs in `localhost` , you can always try the --allow-insecure-localhost command-line flag. +* If all else fails, you can tell AVAP™ Dev Studio 2024 to ignore all certificate errors using the --ignore-certificate-errors command-line flag. Warning: This is dangerous and{' '} not recommended , since it opens the door to security issues. + +Extensions don't benefit yet from the same proxy support that AVAP™ + Dev Studio 2024 supports. You can follow this issue's development in + GitHub. + +Similarly to extensions, a few other AVAP™ Dev Studio 2024 features + don't yet fully support proxy networking, namely the CLI interface. + The CLI interface is what you get when running{' '} + `code --install-extension vscodevim.vim` from a command prompt + or terminal. You can follow this issue's development in GitHub. + +Due to both of these constraints, the `http.proxy` ,{' '} + `http.proxyStrictSSL` and `http.proxyAuthorization` + variables are still part of AVAP™ Dev Studio's settings, yet they are + only respected in these two scenarios. + +Here are some helpful links that might help you troubleshoot networking + issues in AVAP™ Dev Studio 2024: + +* Network Settings +* Debugging problems with the network proxy +* Configuring a SOCKS proxy server in Chrome +* Proxy settings and fallback (Windows) diff --git a/docs/developer.avapframework.com/69_set_SETUP_Overview.md b/docs/developer.avapframework.com/69_set_SETUP_Overview.md new file mode 100644 index 0000000..0ef9f65 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Overview.md @@ -0,0 +1,119 @@ +Getting up and running with AVAP™ Dev Studio 2024 is quick and easy. It is + a small download so you can install in a matter of minutes and give AVAP™ + Dev Studio 2024 a try. + +## Cross platform + +AVAP™ DS is a free code editor, which runs on the macOS, Linux, and + Windows operating systems. + +Follow the platform-specific guides below: + +* macOS +* Linux +* Windows + +AVAP™ Dev Studio 2024 is lightweight and should run on most available + hardware and platform versions. You can review the System Requirements to + check if your computer configuration is supported. + +## Update cadence + +AVAP™ Dev Studio 2024 releases a new version each month with new features + and important bug fixes. Most platforms support auto updating and you will + be prompted to install the new release when it becomes available. You can + also manually check for updates by running{' '} + Help > Check for Updates on Linux and Windows or + running Code > Check for Updates on macOS. + +## Insiders nightly build + +If you'd like to try our nightly builds to see new features early or + verify bug fixes, you can install our Insiders build. The Insiders build + installs side-by-side with the monthly Stable build and you can freely + work with either on the same machine. The Insiders build is the same one + the AVAP™ Dev Studio 2024 development team uses on a daily basis and we + really appreciate people trying out new features and providing feedback. + +## Portable mode + +AVAP™ Dev Studio 2024 supports Portable mode installation. This mode + enables all data created and maintained by VS Code to live near itself, so + it can be moved around across environments, for example, on a USB drive. + See the AVAP™ Dev Studio 2024 Portable Mode documentation for details. + +## Additional components + +AVAP™ Dev Studio 2024 is an editor, first and foremost, and prides itself + on a small footprint. Unlike traditional IDEs that tend to include + everything but the kitchen sink, you can tune your installation to the + development technologies you care about. Be sure to read the Additional + Components topic after reading the platform guides to learn about + customizing your AVAP™ Dev Studio 2024 installation. + +## Extensions + +AVAP™ Dev Studio 2024 extensions let third parties add support for + additional: + +* Languages - C++, C#, Go, Java, Python +* Tools - ESLint, JSHint , PowerShell +* Debuggers - PHP XDebug. +* Keymaps - Vim, Sublime Text, IntelliJ, Emacs, Atom, Brackets, AVAP™ Dev Studio, Eclipse + +Extensions integrate into AVAP™ Dev Studio 2024's UI, commands, and + task running systems so you'll find it easy to work with different + technologies through AVAP™ Dev Studio 2024's shared interface. Check + out the AVAP™ Dev Studio 2024 extension Marketplace to see what's + available. + +## Next steps + +Once you have installed and set up AVAP™ Dev Studio 2024, these topics + will help you learn more about AVAP™ Dev Studio 2024: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio 2024. +* Basic Editing - Learn about the powerful AVAP™ Dev Studio 2024 editor. +* Code Navigation - Move quickly through your source code. +* Debugging - Debug your source code directly in the AVAP™ Dev Studio 2024 editor. +* Proxy Server Support - Configure your proxy settings. + +If you'd like to get something running quickly, try the Node.js + tutorial walkthrough that will have you debugging a Node.js web + application with AVAP™ Dev Studio 2024 in minutes. + +## Common questions + +We have a list of System Requirements. + +AVAP™ Dev Studio 2024 is a small download (< 100 MB) and has a + disk footprint of less than 200 MB, so you can quickly install AVAP™ Dev + Studio 2024 and try it out. + +AVAP™ Dev Studio 2024 doesn't include a traditional{' '} + File > New Project dialog or pre-installed project + templates. You'll need to add additional components and scaffolders + depending on your development interests. With scaffolding tools like + Yeoman and the multitude of modules available through the npm package + manager, you're sure to find appropriate templates and tools to create + your projects. + +On Linux and Windows, choose Help > About. On macOS, + use Code > About AVAP™ Dev Studio 2024. + +AVAP™ Dev Studio 2024 has detected that some installation files have been + modified, perhaps by an extension. Reinstalling AVAP™ Dev Studio 2024 will + replace the affected files. See our FAQ topic for more details. + +If you want to remove all user data after uninstalling AVAP™ Dev Studio + 2024, you can delete the user data folders `Code` and{' '} + `.avapds` This will return you to the state before you + installed AVAP™ Dev Studio 2024. This can also be used to reset all + settings if you don't want to uninstall AVAP™ Dev Studio 2024. + +The folder locations will vary depending on your platform: + +* Windows - Delete `%APPDATA%\Code` and{' '} `%USERPROFILE%\.vscode.` +* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.avapds.` +* Linux - Delete `$HOME/.config/Code` and{' '} `~/.avapds.` diff --git a/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md b/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md new file mode 100644 index 0000000..b04e965 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_RaspberryPi.md @@ -0,0 +1,66 @@ +You can run AVAP™ Dev Studio 2024 on Raspberry Pi devices. + + + +By downloading and using AVAP™ Dev Studio 2024, you agree to the license + terms and privacy statement. + +## Installation + +AVAP™ Dev Studio 2024 is officially distributed via the Raspberry Pi OS + (previously called Raspbian) APT repository, in both 32-bit and + 64-bit variants. + +You can install it by running: + +| sudo apt update | | sudo apt install code | + +### Running AVAP™ Dev Studio 2024 + +After installing the AVAP™ Dev Studio 2024 package, you can run AVAP™ Dev + Studio 2024 by typing `code` in a terminal or launching it via + the Programming menu. + +## Updates + +Your Raspberry Pi should handle updating AVAP™ Dev Studio 2024 in the same + way as other packages on the system: + +| sudo apt update | | sudo apt upgrade code | + +You can always check when a new release is available in our Updates page. + +## System requirements + +AVAP™ Dev Studio 2024 is supported on these Raspberry Pi models running a + 32-bit or 64-bit version of Raspberry Pi OS: + +* Raspberry Pi 3 Model B/B+ +* Raspberry Pi 4 Model B +* Raspberry Pi 400 + +While 1 GB of memory (RAM) meets the minimum system requirements, + users will benefit from installing AVAP™ Dev Studio 2024 on a Raspberry Pi + 4 with more memory. + +First-generation Raspberry Pi modules and Raspberry Pi Zero are not + supported as they only include an ARMv6 CPU. + +### Workaround for poor performance + +AVAP™ Dev Studio 2024 on Raspberry Pi 4 may be slow with the default + setup. A workaround is to disable hardware (GPU) acceleration in + AVAP™ DS 2024: + +The `"disable-hardware-acceleration": true` runtime + argument switch has the effect of passing the `--disable-gpu` {' '} + command-line argument on AVAP™ Dev Studio 2024 startup. + +## Next steps + +Once you have installed AVAP™ Dev Studio 2024, these topics will help you + learn more about it: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio 2024. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio 2024 to your preferences through settings. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md b/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md new file mode 100644 index 0000000..0d67f51 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Uninstall.md @@ -0,0 +1,79 @@ +The steps for uninstalling AVAP™ Dev Studio will depend on your platform + (Windows, macOS, or Linux) and the install option that you used. + For example on Windows, you can use the System or User Windows Installers + or download a `.zip` file and extract the contents anywhere on + your machine. + +In general, you would uninstall AVAP™ Dev Studio as you would any other + desktop application and follow your platform's recommended flow for + uninstalling software. Specific platform guidance is provided below as + well as how to completely clean up any remaining AVAP™ Dev Studio + configuration files. + +### Windows + +If you installed AVAP™ Dev Studio via the Windows Installer, either the + User or System version, use the installer to remove AVAP™ Dev Studio. + +* Start menu Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. Select Uninstall from the actions dropdown on the right side (three vertical dots). Follow the prompts to uninstall AVAP™ Dev Studio. +* Search for Add or Remove Programs and find AVAP™ Dev Studio in the Apps > Apps & features {' '} list. +* Select Uninstall from the actions dropdown on the right side (three vertical dots). +* Follow the prompts to uninstall AVAP™ Dev Studio. +* Control Panel Under Programs , select the{' '} Uninstall a program link. Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. Follow the prompts to uninstall AVAP™ Dev Studio. +* Under Programs , select the{' '} Uninstall a program link. +* Find the AVAP™ Dev Studio entry, right-click, and select the{' '} Uninstall command. +* Follow the prompts to uninstall AVAP™ Dev Studio. + +If you installed AVAP™ Dev Studio on Windows by downloading and extracting + one of the .zip files found on the AVAP™ Dev Studio website, you can + uninstall by deleting the folder where you extracted the .zip contents. + +### macOS + +To uninstall AVAP™ Dev Studio on macOS, open Finder and go to + Applications. Right-click on the AVAP™ Dev Studio application and select + Move to Trash. + +### Linux + +To uninstall AVAP™ Dev Studio on Linux, you should use your package + manager's uninstall or remove option. The exact command line will + differ depending on which package manager you used (for example,{' '} + `apt-get` , `rpn` , `dnf` , `yum` + , etc.). + +The names for the AVAP™ Dev Studio packages are: + +* `code` - AVAP™ Dev Studio Stable release +* `code-insiders` - AVAP™ Dev Studio Insiders release + +For example, if you installed AVAP™ Dev Studio via the Debian package + ( `.deb` ) and `apt-get` package manager, you + would run: + +```javascript +sudo apt-get remove code +``` + +where code is the name of the AVAP™ Dev Studio Debian package. + +### Clean uninstall + +If you want to remove all user data after uninstalling AVAP™ Dev Studio + 2024, you can delete the user data folders `Code` and{' '} + `.vscode` . This will return you to the state before you + installed AVAP™ Dev Studio 2024. This can also be used to reset all + settings if you don't want to uninstall AVAP™ Dev Studio 2024. + +The folder locations will vary depending on your platform: + +* Windows -{' '} `Delete %APPDATA%\Code and %USERPROFILE%\.vscode` . +* macOS - Delete{' '} `$HOME/Library/Application Support/Code` and{' '} `~/.vscode` . +* Linux - Delete `$HOME/.config/Code` and{' '} `~/.vscode` . + +### Next steps + +* Setup overview - General information about AVAP™ Dev Studio 2024 setup and updates. +* Windows setup - Details and common questions about installing AVAP™ Dev Studio 2024 on Windows. +* macOS setup - AVAP™ Dev Studio 2024 is available for both Intel and Apple silicon macOS machines. +* Linux setup - Learn about the different AVAP™ Dev Studio 2024 packages available for Linux. diff --git a/docs/developer.avapframework.com/69_set_SETUP_Windows.md b/docs/developer.avapframework.com/69_set_SETUP_Windows.md new file mode 100644 index 0000000..7f76c47 --- /dev/null +++ b/docs/developer.avapframework.com/69_set_SETUP_Windows.md @@ -0,0 +1,119 @@ +### Installation + +Alternatively, you can also download a Zip archive, extract it and run + Code from there. + +### User setup versus system setup + +AVAP™ Dev Studio 2024 provides both Windows user and{' '} + system level setups. + +The user setup does not require Administrator privileges to run as the + location will be under your user Local AppData ( + `LOCALAPPDATA` ) folder. Since it requires no elevation, the + user setup is able to provide a smoother background update experience. + This is the preferred way to install AVAP™ Dev Studio 2024 on Windows. + +The system setup requires elevation to Administrator privileges to run and + will place the installation under the system's Program Files. The + in-product update flow will also require elevation, making it less + streamlined than the user setup. On the other hand, installing AVAP™ Dev + Studio 2024 using the system setup means that it will be available to all + users in the system. + +See the Download AVAP™ Dev Studio 2024 page for a complete list of + available installation options. + +### Updates + +AVAP™ Dev Studio 2024 ships monthly releases and supports auto-update when + a new release is available. If you're prompted by AVAP™ Dev Studio + 2024, accept the newest update and it will be installed (you won't + need to do anything else to get the latest bits). + +### Windows Subsystem for Linux + +Windows is a popular operating system and it can be a great cross-platform + development environment. This section describes cross-platform features + such as the Windows Subsystem for Linux (WSL) and the new Windows + Terminal. + +Make sure you are on a recent Windows 10 build. Check{' '} + Settings > Windows Update to see if you are + up-to-date. + +With WSL, you can install and run Linux distributions on Windows. This + enables you to develop and test your source code on Linux while still + working locally on your Windows machine. + +When coupled with the WSL extension, you get full AVAP™ DS editing and + debugging support while running in the context of WSL. + +See the Developing in WSL documentation to learn more or try the Working + in WSL introductory tutorial. + +Available from the Microsoft Store, the Windows Terminal (Preview) + lets you easily open PowerShell, Command Prompt, and WSL terminals in a + multiple tab shell. + +### Next steps + +Once you have installed AVAP™ Dev Studio, these topics will help you learn + more about AVAP™ Dev Studio: + +* Additional Components - Learn how to install Git, Node.js, TypeScript, and tools like Yeoman. +* User Interface - A quick orientation to AVAP™ Dev Studio. +* User/Workspace Settings - Learn how to configure AVAP™ Dev Studio to your preferences through settings. +* Tips and Tricks - Lets you jump right in and learn how to be productive with AVAP™ Dev Studio. + +### Common questions + +AVAP™ Dev Studio uses Inno Setup to create its setup package for Windows. + Thus, all the Inno Setup command-line switches are available for use. + +Additionally, you can prevent the Setup from launching AVAP™ Dev Studio + after completion with `/mergetasks=!runcode` . + +On certain devices, editor scrolling is not smooth but laggy for an + unpleasant experience. If you notice this issue, make sure you install the + Windows 10 October 2018 update where this issue is fixed. + +Try using the zip file instead of the installer. To use this, unzip AVAP™ + Dev Studio in your `AppData\Local\Programs` folder. + +I installed AVAP™ Dev Studio on my Windows 8 machine. Why are some icons + not appearing in the workbench and editor? + +AVAP™ Dev Studio uses SVG icons and we have found instances where the .SVG + file extension is associated with something other than{' '} + `image/svg+xml` . We're considering options to fix it, but + for now here's a workaround: + +Using the Command Prompt: + +Using the Registry Editor (regedit): + +With the introduction of process sandboxing (discussed in this blog + post) running as administrator is currently unsupported when AppLocker + is configured due to a limitation of the runtime sandbox. If your work + requires that you run AVAP™ Dev Studio from an elevated terminal, you can + launch `code` with{' '} + `--no-sandbox --disable-gpu-sandbox` as a workaround. + +Subscribe to issue #122951 to receive updates. + +Beginning with version `1.78.1` , AVAP™ Dev Studio on Windows + will only allow to access UNC paths (these begin with a leading{' '} + `\\` ) that were either approved by the user on startup or + where the host name is configured to be allowed via the new{' '} + `security.allowedUNCHosts setting` . + +If you rely on using UNC paths in AVAP™ Dev Studio, you can either + +* configure the host to be allowed via the{' '} `security.allowedUNCHosts` setting (for example add{' '} `server-a` when you open a path such as{' '} `\\server-a\path` ) +* map the UNC path as network drive and use the drive letter instead of the UNC path (documentation) +* define a global environment variable{' '} `NODE_UNC_HOST_ALLOWLIST` with the backslash-separated list of hostnames to allow, for example: `server-a\server-b` to allow the hosts `server-a` and `server-b` . + +This change was done to improve the security when using AVAP™ Dev Studio + with UNC paths. Please refer to the associated security advisory for more + information. diff --git a/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md b/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md new file mode 100644 index 0000000..1de26fa --- /dev/null +++ b/docs/developer.avapframework.com/69_set_set_blockchain_accout_selected.md @@ -0,0 +1,176 @@ +## ws/users.py/set_blockchain_accounts + +### Receives + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +```javascript +{ + "status" + :{' '} + true + , + "message" + :{' '} + + "BlockChain Account for User 95 Set to 23" + + , + "codtran" + :{' '} + "f856c5db007fcaa5a00b9a4d56a9d40a" + "elapsed" + :{' '} + 0.778839111328125 + + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `message` : Mensaje de confirmación. +* `codtran` : Transaction code. +* `elapsed:` Operation execution time. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "nivel" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + + + url ={' '} + + "http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23" + + + + payload= + { + } + + headers ={' '} + { + '101ObexApiKey' + :{' '} + 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' + + } + + + response = requests + .request + ( + "GET" + , url + , headers + =headers + , data + =payload + ) + + + print + (response + .text + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + + var options = { + 'method': 'GET', + 'url': + 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&network_id=23', + 'headers': { + '101ObexApiKey': 'KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' + } + + }; + + request(options, function (error, response) { + if (error) throw new Error(error); + console.log(response.body); + + }); +``` + +### JavaScript - Fetch: + +```javascript +var myHeaders = new Headers(); + + myHeaders.append("101ObexApiKey", + "KcM6Vr7EfNnKScEi00jdritBzNjWAOkz"); + + + var requestOptions = { + method: 'GET', + headers: myHeaders, + redirect: 'follow' + + }; + + + fetch("http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23", + requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request GET{' '} + + 'http://34.121.95.179:80/ws/users.py/set_blockchain_accounts?codigo_pais=ES&id_usuario=95&id_sesion=629-M-ofq9Y060u3ja2uqLx1aQ==&account_id=23' + {' '} + \ + + --header{' '} + + '101ObexApiKey: KcM6Vr7EfNnKScEi00jdritBzNjWAOkz' +``` + +## Business logic: + +This service aims to select one of the user's blokchain accounts as + active by default. diff --git a/docs/developer.avapframework.com/69_set_set_blokchain_network.md b/docs/developer.avapframework.com/69_set_set_blokchain_network.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md b/docs/developer.avapframework.com/6_Cancel_Transaction_EN_Cancel_Transaction_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md b/docs/developer.avapframework.com/6_Envio_de_regalo_EN_Envio_de_regalo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md b/docs/developer.avapframework.com/70_solicitar_Solicitar_subida_de_nivel_KYC_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md b/docs/developer.avapframework.com/70_solicitar_Solicitud_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md new file mode 100644 index 0000000..adfc909 --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_CollaborateOnGitHub.md @@ -0,0 +1,371 @@ +GitHub is a cloud-based service for storing and sharing source code. Using + GitHub with AVAP™ Dev Studio lets you share your source code and + collaborate with others right within your editor. There are many ways to + interact with GitHub, for example, via their website at{' '} + https://github.com or the [Git] + command-line interface (CLI), but in AVAP™ Dev Studio, the rich + GitHub integration is provided by the GitHub Pull Requests and Issues + extension. + +[Install the GitHub Pull Requests and Issues extension] + +To get started with the GitHub in AVAP TM Dev Studio, you'll + need to install Git, create a GitHub account and install the GitHub Pull + Requests and Issues extension. In this topic, we'll demonstrate how + you can use some of your favorite parts of GitHub without leaving AVAP™ + Dev Studio. + +If you're new to source control or want to learn more about AVAP™ Dev + Studio's basic Git support, you can start with the Source Control + topic. + +## Getting started with GitHub Pull Requests and Issues + +Once you've installed the GitHub Pull Requests and Issues extension, + you'll need to sign in. Follow the prompts to authenticate with GitHub + in the browser and return to AVAP™ Dev Studio. + +If you are not redirected to AVAP TM Dev Studio, you can add + your authorization token manually. In the browser window, you will receive + your authorization token. Copy the token, and switch back to AVAP + TM Dev Studio. Select{' '} + Signing in to github.com... in the Status bar, paste the + token, and hit Enter. + +## Setting up a repository + +### Cloning a repository + +You can search for and clone a repository from GitHub using the{' '} + Git: Clone command in the Command Palette + (Ctrl+Shift+P) or by using the Clone Repository {' '} + button in the Source Control view (available when you have no folder + open). + +From the GitHub repository dropdown you can filter and pick the repository + you want to clone locally. + +### Authenticating with an existing repository + +Enabling authentication through GitHub happens when you run any Git action + in AVAP TM Dev Studio that requires GitHub authentication, such + as pushing to a repository that you're a member of or cloning a + private repository. You don't need to have any special extensions + installed for authentication; it is built into AVAP TM Dev + Studio so that you can efficiently manage your repository. + +When you do something that requires GitHub authentication, you'll see + a prompt to sign in: + +Follow the steps to sign into GitHub and return to AVAP TM Dev + Studio. If authenticating with an existing repository doesn't work + automatically, you may need to manually provide a personal access token. + See About authentication to GitHub for more information and details about + each option.{' '} + +Note that there are several ways to authenticate to GitHub, including + using your username and password with two-factor authentication + (2FA), a personal access token, or an SSH key. See About + authentication to GitHub for more information and details about each + option. + +## Editor integration + +### Hovers + +When you have a repository open and a user is @-mentioned, you can hover + over that username and see a GitHub-style hover. + +There is a similar hover for #-mentioned issue numbers, full GitHub issue + URLs, and repository specified issues. + +### Suggestions + +User suggestions are triggered by the "@" character and issue + suggestions are triggered by the "#" character. Suggestions are + available in the editor and in the Source Control {' '} + view's input box. + +The issues that appear in the suggestion can be configured with the{' '} + GitHub Issues: Queries (githubIssues.queries) + setting. The queries use the GitHub search syntax. + +You can also configure which files show these suggestions using the + settings GitHub Issues: Ignore Completion Trigger ( + `githubIssues.ignoreCompletionTrigger` ) and{' '} + GitHub Issues: Ignore User Completion Trigger ( + `githubIssues.ignoreUserCompletionTrigger` ). These settings + take an array of language identifiers to specify the file types. + +```javascript +// Languages that the '#' character should not be used to trigger issue + completion suggestions. + + "githubIssues.ignoreCompletionTrigger": [` `"python" + ] +``` + +## Pull requests + +From the Pull Requests view you can view, manage, and + create pull requests. + +The queries used to display pull requests can be configured with the{' '} + GitHub Pull Requests: Queries ( + `githubPullRequests.queries` ) setting and use the GitHub + search syntax. + +```javascript +"githubPullRequests.queries": [` `{ + ` `"label": "Assigned To Me", + ` `"query": "is:open assignee:${user}" + ` `}, +``` + +### Creating Pull Requests + +Once you have committed changes to your fork or branch, you can use the{' '} + GitHub Pull Requests: Create Pull Request command or the{' '} + Create Pull Request button in the{' '} + Pull Requests view to create a pull request. + +A new Create view will be displayed where you can select + the base repository and base branch you'd like your pull request to + target as well as fill in the title and description. If your repository + has a pull request template, this will automatically be used for the + description. + +Use the buttons in the action bar at the top to add{' '} + Assignees , Reviewers ,{' '} + Labels and a Milestone . + +The Create button menu allows you to select alternative + create options, such as Create Draft or enable an{' '} + Auto-Merge method. + +Once you select Create , if you have not already pushed + your branch to a GitHub remote, the extension will ask if you'd like + to publish the branch and provides a dropdown to select the specific + remote. + +The Create Pull Request view now enters{' '} + Review Mode , where you can review the details of the PR, + add comments, and merge the PR once it's ready. After the PR is + merged, you'll have the option to delete both the remote and local + branch. + +### Reviewing + +Pull requests can be reviewed from the Pull Requests {' '} + view. You can assign reviewers and labels, add comments, approve, close, + and merge all from the pull request Description . + +From the Description page, you can also easily checkout + the pull request locally using the Checkout button. This + will switch AVAP™ Dev Studio to open the fork and branch of the pull + request (visible in the Status bar) in Review Mode and add a new{' '} + Changes in Pull Request view from which you can view + diffs of the current changes as well as all commits and the changes within + these commits. Files that have been commented on are decorated with a + diamond icon. To view the file on disk, you can use the{' '} + Open File inline action. + +The diff editors from this view use the local file, so file navigation, + IntelliSense, and editing work as normal. You can add comments within the + editor on these diffs. Both adding single comments and creating a whole + review is supported. + +When you are done reviewing the pull request changes you can merge the PR + or select Exit Review Mode to go back to the previous + branch you were working on. + +## Issues + +### Creating issues + +Issues can be created from the + button in the{' '} + Issues view and by using the{' '} + GitHub Issues: Create Issue from Selection and{' '} + GitHub Issues: Create Issue from Clipboard commands. They + can also be created using a Code Action for "TODO" comments. + When creating issues, you can take the default description or select the{' '} + Edit Description pencil icon in the upper right to bring + up an editor for the issue body. + +You can configure the trigger for the Code Action using the{' '} + GitHub Issues: Create Issue Triggers {' '} + (githubIssues.createIssueTriggers) setting. + +The default issue triggers are: + +```javascript +"githubIssues.createIssueTriggers": [` `"TODO", + ` `"todo", + ` `"BUG", + ` `"FIXME", + ` `"ISSUE", + ` `"HACK" + ] +``` + +### Working on issues + +From the Issues view, you can see your issues and work on + them. + +By default, when you start working on an issue ( + Start Working on Issue context menu item), a branch + will be created for you, as shown in the Status bar in the image below. + +The Status bar also shows the active issue and if you select that item, a + list of issue actions are available such as opening the issue on the + GitHub website or creating a pull request. + +You can configure the name of the branch using the{' '} + GitHub Issues: Issue Branch Title ( + `githubIssues.issueBranchTitle` ) setting. If your workflow + doesn't involve creating a branch, or if you want to be prompted to + enter a branch name every time, you can skip that step by turning off the{' '} + GitHub Issues: Use Branch For Issues ( + `githubIssues.useBranchForIssues` ) setting. + +Once you are done working on the issue and want to commit a change, the + commit message input box in the Source Control view will + be populated with a message, which can be configured with{' '} + GitHub Issues: Working Issue Format SCM ( + `githubIssues.workingIssueFormatScm` ). + +## GitHub Repositories extension + +The GitHub Repositories extension lets you quickly browse, search, edit, + and commit to any remote GitHub repository directly from within AVAP + TM Dev Studio, without needing to clone the repository locally. + This can be fast and convenient for many scenarios, where you just need to + review source code or make a small change to a file or asset. + +### Opening a repository + +Once you have installed the GitHub Repositories extension, you can open a + repository with the{' '} + GitHub Repositories: Open Repository... command from the + Command Palette (Ctrl+Shift+P) or by clicking the Remote indicator + in the lower left of the Status bar. + +When you run the Open Repository command, you then choose + whether to open a repository from GitHub, open a Pull Request from GitHub, + or reopen a repository that you had previously connected to. + +If you haven't logged into GitHub from AVAP TM Dev Studio + before, you'll be prompted to authenticate with your GitHub account. + +You can provide the repository URL directly or search GitHub for the + repository you want by typing in the text box. + +Once you have selected a repository or Pull Request, the AVAP™ Dev Studio + window will reload and you will see the repository contents in the File + Explorer. You can then open files (with full syntax highlighting and + bracket matching), make edits, and commit changes, just like you would + working on a local clone of a repository. + +One difference from working with a local repository is that when you + commit a change with the GitHub Repository extension, the changes are + pushed directly to the remote repository, similar to if you were working + in the GitHub web interface. + +Another feature of the GitHub Repositories extension is that every time + you open a repository or branch, you get the up-to-date sources available + from GitHub. You don't need to remember to pull to refresh as you + would with a local repository. + +The GitHub Repositories extension supports viewing and even committing + LFS-tracked files without needing to install Git LFS (Large File + System) locally. Add the file types you want tracked with LFS to a + .gitattributes file, then commit your changes directly to GitHub using the + Source Control view. + +### Switching branches + +You can easily switch between branches by clicking on the branch indicator + in the Status bar. One great feature of the GitHub Repositories extension + is that you can switch branches without needing to stash uncommitted + changes. The extension remembers your changes and reapplies them when you + switch branches. + +### Remote Explorer + +You can quickly reopen remote repositories with the Remote Explorer + available on the Activity bar. This view shows you the previously opened + repositories and branches. + +### Create Pull Requests + +If your workflow uses Pull Requests, rather than direct commits to a + repository, you can create a new PR from the Source Control view. + You'll be prompted to provide a title and create a new branch. + +Once you have created a Pull Request, you can use the GitHub Pull Request + and Issues extension to review, edit, and merge your PR as described + earlier in this topic. + +### Virtual file system + +Without a repository's files on your local machine, the GitHub + Repositories extension creates a virtual file system in memory so you can + view file contents and make edits. Using a virtual file system means that + some operations and extensions which assume local files are not enabled or + have limited functionality. Features such as tasks, debugging, and + integrated terminals are not enabled and you can learn about the level of + support for the virtual file system via the{' '} + features are not available link in the Remote indicator + hover. + +Extension authors can learn more about running in a virtual file system + and workspace in the Virtual Workspaces extension author's guide. + +### Continue Working On... + +Sometimes you'll want to switch to working on a repository in a + development environment with support for a local file system and full + language and development tooling. The GitHub Repositories extension makes + it easy for you to: + +* Create a GitHub codespace (if you have the GitHub Codespaces extension). +* Clone the repository locally. +* Clone the repository into a Docker container (if you have Docker and the Microsoft Docker extension installed). + +To switch development environments, use the{' '} + Continue Working On... command, available from the + Command Palette ( `Ctrl+Shift+P` ) or by clicking on the + Remote indicator in the Status bar. + +If you are using the browser-based editor, the{' '} + "Continue Working On..." command has the + options to open the repository locally or within a cloud-hosted + environment in GitHub Codespaces. + +The first time that you use Continue Working On with + uncommitted changes, you will have the option to bring your edits to your + selected development environment using Cloud Changes , + which uses a AVAP™ Dev Studio service to store your pending changes. + +These changes are deleted from our service once they are applied to your + target development environment. If you choose to continue without your + uncommitted changes, you can always change this preference later by + configuring the setting " + `workbench.cloudChanges.continueOn` ": " + `prompt` ". + +## GitHub Copilot + +In AVAP TM Dev Studio, you can enhance your coding with + artificial intelligence (AI), such as suggestions for lines of + code or entire functions, fast documentation creation, and help creating + code-related artifacts like tests. + +GitHub Copilot is an AI-powered code completion tool that helps you write + code faster and smarter. You can use the GitHub Copilot extension in AVAP + TM Dev Studio to generate code, or to learn from the code it + generates. + +You can learn more about how to get started with Copilot in the Copilot + documentation. diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md new file mode 100644 index 0000000..dfb1b6d --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_FAQ.md @@ -0,0 +1,153 @@ +This topic answers frequently asked questions about using Git source + control and GitHub in AVAP TM Dev Studio. + +## Git + +### How to revert or undo a Git commit? + +Revert your last commit with the Git: Undo Last Commit {' '} + command. This will reset your branch to the state right before you did the + commit, including all changes. The command is also available as menu in{' '} + More Actions ... under Commit on the top + of the Source Control view. + +### How to rename a local branch? + +The Git: Rename Branch… command will prompt you for the + new name. + +### How to I undo a git add before committing? + +Added files listed in the Staged Changes can be unstaged + with the - icon or by drag-and-drop. + +### How to I edit the most recent commit message? + +To update the commit message for the last local commit use the{' '} + Git: Commit Staged (Amend) command. It will open + an editor to edit and save the last message. Make sure that no other + changes are staged, as they would be included with the commit. + +### I initialized my repo but the actions in the ... menu are all grayed out + +To push, pull, and sync you need to have a Git origin set + up. You can get the required URL from the repository host. Once you have + that URL, you need to add it to the Git settings by running a couple of + command-line actions. For example: + +```javascript +\> git remote add origin https://github.com//.git + + \> git push -u origin main +``` + +### My team is using Team Foundation Version Control (TFVC) instead of + Git. What should I do? + +Use the Azure Repos extension and this will light up TFVC support. + +### Why do the Pull, Push and Sync actions never finish? + +This usually means there is no credential management configured in Git and + you're not getting credential prompts for some reason. + +You can always set up a credential helper in order to pull and push from a + remote server without having AVAP TM Dev Studio prompt for your + credentials each time. + +### How can I sign in to Git with my Azure DevOps organization that requires + multi-factor authentication? + +Git Credential Manager (GCM) is the recommended Git credential + helper for Windows, macOS, and Linux. If you're running Git for + Windows, GCM has already been installed and configured for you. If + you're running on macOS or Linux, the GCM README has setup + instructions. + +### I have GitHub Desktop installed on my computer but AVAP Dev Studio ignores + it + +AVAP™ Dev Studio only supports the official Git distribution for its Git + integration. + +### I keep getting Git authentication dialogs whenever AVAP Dev Studio is + running + +AVAP TM Dev Studio automatically fetches changes from the server + in order to present you with a summary of incoming changes. The Git + authentication dialog is independent from AVAP TM Dev Studio + itself and is a part of your current Git credential helper. + +One way to avoid these prompts is to set up a credential helper that + remembers your credentials. + +Another option is to disable the auto fetch feature by changing the + following setting: " `git.autofetch":` {' '} + `false` . + +### Why is AVAP Dev Studio warning me that the git repository is potentially + unsafe? + +AVAP™ Dev Studio uses `git.exe` for executing all Git + operations. Starting with Git 2.35.2, users are prevented from running Git + operations in a repository that is in a folder that owned by a user other + than the current user as the repository is deemed to be potentially + unsafe. + +If you try to open such a repository, AVAP TM Dev Studio will + show a welcome view in the Source Control view or an error notification. + Both the welcome view and the notification contain the{' '} + Manage Unsafe Repositories command that lets you review + the list of potentially unsafe repositories, mark them as safe, and open + them. The Manage Unsafe Repositories command is also + available in the Command Palette ( `Ctrl+Shift+P` ). + Marking a repository as safe will add the repository location to the + safe.directory git configuration. + +On Windows, a common scenario where this can occur is when a repository is + cloned using an application (for example, Windows Terminal or AVAP + TM Dev Studio) that runs "as administrator", but + the repository is opened using another application or instance (for + example, AVAP TM Dev Studio) that does not run "as + administrator". + +### Why isn't AVAP™ Dev Studio discovering Git repositories in parent + folders of workspaces or open files? + +AVAP TM Dev Studio uses + `git rev-parse --show-toplevel` to determine the root of a Git + repository. In most cases, the root of the Git repository is inside the + workspace, but there are scenarios where the root of the Git repository is + in the parent folders of the workspace or the open file(s). While + opening Git repositories in parent folders of workspaces or open files is + a great feature for advanced users, it can be confusing for new users. We + have seen cases where this confusion resulted in discarding changes from + these Git repositories causing data loss. + +To avoid confusion, and to reduce the risk of data loss, AVAP TM {' '} + Dev Studio will display a notification and a new welcome view in the + Source Control view, and will not automatically open Git repositories from + the parent folders of workspaces and open files. + +You can control how Git repositories from parent folders are handled using + the `git.openRepositoryInParentFolders` setting. If you would + like to restore the old behavior, set the{' '} + `git.openRepositoryInParentFolders` setting to{' '} + `always` . + +### Can I use SSH Git authentication with AVAP™ Dev Studio? + +Yes, though AVAP TM Dev Studio works most easily with SSH keys + without a passphrase. If you have an SSH key with a passphrase, you'll + need to launch AVAP TM Dev Studio from a Git Bash prompt to + inherit its SSH environment. + +## GitHub + +### Is GitHub Enterprise supported? + +AVAP TM Dev Studio has official support for authentication with + GitHub Enterprise Servers. Open a local checkout of a GHES repository and + you will be prompted to sign in with your GitHub Enterprise Server + account. diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md new file mode 100644 index 0000000..7c20403 --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_IntroductionToGit.md @@ -0,0 +1,213 @@ +Want to easily manage your source code and collaborate with others? Git + and GitHub are the tools you need! And with AVAP TM Dev Studio, + you can set up and use them in a snap. Even if you're a beginner, AVAP + TM Dev Studio's user-friendly interface guides you through + common Git actions like pushing and pulling code, creating and merging + branches, and committing code changes. And if you're a pro, you'll + love the ability to perform Git actions directly within the editor, saving + you time and effort compared to using the Git command line. Plus, the + seamless workflow between AVAP TM Dev Studio and Git means you + can stay in your editor and get more done. + +## Set up Git in AVAP™ Dev Studio + +To use Git and GitHub in AVAP TM Dev Studio, first make sure you + have Git installed on your computer. If Git is missing, the{' '} + Source Control view shows instructions on how to install + it. Make sure to restart AVAP TM Dev Studio afterwards. + +Additionally you can sign into AVAP TM Dev Studio with your + GitHub account in the Accounts menu in the lower right of + the Activity bar to enables additional features like Settings Sync, but + also cloning and publishing repositories from GitHub. + +## Open a Git repository + +AVAP TM Dev Studio provides several ways to get started in a Git + repository, from local to remote cloud-powered environments like GitHub + Codespaces. + +### Clone a repository locally + +To clone a repository from GitHub, execute the Git: Clone {' '} + command or select the Clone Repository button in the{' '} + Source Control view. If you clone from GitHub, AVAP + TM Dev Studio will prompt you to authenticate with GitHub. This + allows you to search all available repositories and clone private + repositories. For other Git providers, enter the repository URL and select{' '} + Clone and pick a folder. AVAP TM Dev Studio + opens the folder once the repository is cloned on your local machine. + +### Initialize a repository in a local folder + +To initialize a new local repository, pick an existing or new folder on + your computer and open it in AVAP TM Dev Studio. In the{' '} + Source Control view, select the{' '} + Initialize Repository button. This creates a new Git + repository in the current folder, allowing you to start tracking code + changes. + +Once you have a local Git repository set up, you can publish it to GitHub. + This will create a new repository on your GitHub account, and push your + local code to the remote repository. Having your source code on a remote + repository is a great way to back up your code, collaborate with others, + and automate your workflow with GitHub Actions. + +Use the Publish to GitHub command button in the{' '} + Source Control view. You can then choose a name and + description for the repository, and whether to make it public or private. + Once the repository has been created, AVAP TM Dev Studio will + push your local code to the remote repository. Your code is now backed up + on GitHub, and you can start collaborating with others with commits and + pull requests. + +### Open a GitHub repository in a codespace + +GitHub Codespaces let you open a GitHub repository in a full configured + cloud-based development environment, allowing you to develop in a browser + without having to install any software on your local computer. GitHub + Codespaces allows free usage for individuals, which makes it easy to get + started working on open source projects. + +Install the GitHub Codespaces extension into AVAP TM Dev Studio + and sign in with GitHub. Run the{' '} + Codespaces: Create New Codespace command and pick the + repository and branch you want to open. The new codespace will open in a + new window. + +Alternatively, you can also start with a template from the GitHub's + Codespaces site. If you already have a codespace open in your browser, you + can open it in your AVAP TM Dev Studio Desktop by running the{' '} + + Codespaces: Open in AVAP TM Dev Studio Desktop + {' '} + command. You can learn more about GitHub Codespaces, including + customization such as forwarding ports, in the Developing in a codespace + documentation. + +### Open a GitHub repository remotely + +AVAP TM Dev Studio's remote repository support allows you to + browse and edit a GitHub repository without cloning it to your local + computer. This is useful for quickly making changes to a remote repository + without having to clone the entire codebase to your machine. + +First install the GitHub Repositories extension. Run the command{' '} + Remote Repositories: Open Remote Repository... or use the{' '} + Open Remote Repository button the Explorer view. Search + and select the GitHub repository that you want to open. + +## Staging and committing code changes + +Once you have a Git repository set up, you can start tracking code changes + by staging and committing your newly created and edited code. + +To stage a file, select the + (plus) icon next to + the file in the Source Control view. This will add the + file to the Staged Changes section, indicating that it + will be included in the next commit. Staged changes can also be discarded + by selecting the − (minus) icon next to the + file. + +To commit your staged changes, type a commit message in the upper text box + and select the Commit button. This saves your changes to + the local Git repository, allowing you to revert to previous versions of + your code if needed. You can navigate through and review all local file + changes and commits in the Timeline view available in the + bottom of the Explorer. + +## Pushing and pulling remote changes + +Once you have made commits to your local Git repository, you can push them + to the remote repository. The Sync Changes button + indicates how many commits are going to be pushed and pulled. Selecting + the Sync Changes button downloads (pull) any new + remote commits and uploads (push) new local commits to the remote + repository. + +Push and pull can also be performed individually by using their respective + commands. + +## Using branches + +In Git, branches allow you to work on multiple versions of your codebase + simultaneously. This is useful for experimenting with new features or + making large code changes without affecting the main codebase. + +The branch indicator in the Status bar shows the current branch and lets + you switch to new and existing branches. To create a new branch, select + the branch indicator and choose to create it from the current branch or + another local one. Type a name for the new branch, and confirm. AVAP + TM Dev Studio creates a new branch and switches to it, allowing + you to make changes to your code without affecting the main branch. + +To push the branch to the remote repository, select{' '} + Publish Branch in the Source Control {' '} + view. This will create a new branch on the remote repository, allowing you + to collaborate with others in that branch. + +### Creating and reviewing GitHub pull requests + +In Git and GitHub, pull requests (PRs) are a way for collaborators + to review and merge code changes from separate branches into the main + branch. This allows teams to review and approve code changes before they + are incorporated into the main codebase, ensuring that only high-quality + changes are merged. + +To use pull requests in AVAP TM Dev Studio, you need to install + the GitHub Pull Requests and Issues extension. This extension adds PR and + issue tracking functionality to AVAP TM Dev Studio, allowing you + to create, review, and merge PRs from within the editor. + +To create a PR, make sure you are on a separate branch from the main + branch, and push your code changes to the remote repository. In the{' '} + Source Control view, select the{' '} + Create Pull Request button. This will open the PR + creation form, where you can enter a title and description for the PR, and + choose which branch to merge the changes into. Select{' '} + Create to create the PR. + +To review a PR, select the Review Pull Request button in + the Source Control view, and select the PR you want to + review. This will open the PR in a new editor window, where you can review + the code changes and leave comments. Once you are satisfied with the code + changes, you can select the Merge button to merge the PR + into the targeted branch. + +Learn more about pull requests in AVAP TM Dev Studio's + GitHub documentation + +## Using Git in the built-in terminal + +As all Git state is kept in the local repository, you can easily switch + between AVAP TM Dev Studio's UI, the built-in + terminal/docs/terminal/basics, or external tools like GitHub Desktop. You + can also set up AVAP TM Dev Studio as your default Git editor, + allowing you to use AVAP TM Dev Studio to edit commit messages + and other Git-related files. + +### Git Bash on Windows + +Git Bash is a popular shell environment for Windows that provides a + Unix-like command-line interface for working with Git and other + command-line tools. AVAP TM Dev Studio's integrated terminal + supports Git Bash as a shell, allowing you to seamlessly integrate Git + Bash into your development workflow. Installing Git on your Windows + machine will also install Git Bash, if it wasn't deselected during the + installation steps. + +Start by opening View > Terminal {' '} + (Ctrl+`). Click on the dropdown arrow next to the + icon in the + terminal panel to pick a new shell to open. If Git Bash is installed, it + will be shown in the list. You can toggle between different terminals and + shells in the Terminal sidebar. With Git Bash configured in AVAP + TM Dev Studio, you can now use all of your favorite Git + commands directly from the terminal in your code editor. + +If you want to set Git Bash as your default shell, open the Terminal + dropdown (next to the + icon) and select{' '} + Select Default Profile . This will open a list of + available shells, including Git Bash. Selecting Git Bash will set it as + your default shell, and all future terminals will be opened with Git Bash. + More advanced tips are available in the terminal + documentation](/docs/terminal/basics). diff --git a/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md new file mode 100644 index 0000000..dc88791 --- /dev/null +++ b/docs/developer.avapframework.com/71_SOURCE_SOURCE_CONTROL_Overview.md @@ -0,0 +1,345 @@ +AVAP TM Dev Studio has integrated source control management + (SCM) and includes Git support out-of-the-box. Many other source + control providers are available through extensions on the AVAP + TM Dev Studio Marketplace. + +## Working in a Git repository + +The Source Control icon in the Activity Bar on the left will always + indicate an overview of how many changes you currently + have in your repository. Selecting the icon will show you the details of + your current repository changes: CHANGES ,{' '} + STAGED CHANGES and MERGE CHANGES . + +Clicking each item will show you in detail{' '} + the textual changes within each file . Note that for + unstaged changes, the editor on the right still lets you edit the file: + feel free to use it! + +You can also find indicators of the{' '} + status of your repository in the bottom-left corner of + AVAP TM Dev Studio: the current branch ,{' '} + dirty indicators , and the number of{' '} + incoming and outgoing commits of the current branch. You + can checkout any branch in your repository by clicking + that status indicator and selecting the Git reference from the list. + +## Commit + +Staging (git add) and unstaging {' '} + (git reset) can be done via contextual actions in the files or by + drag-and-drop. + +Configure your Git username and email. When you commit, + be aware that if your username and/or email is not set in your Git + configuration, Git will fall back to using information from your local + machine. You can find the details in Git commit information. + +You can type a commit message above the changes and press{' '} + `Ctrl+Enter` (macOS: ⌘ `+Enter` ) to commit + them. If there are any staged changes, only those changes will be + committed. Otherwise, you'll get a prompt asking you to select what + changes you'd like to commit and get the option to change your commit + settings. + +We've found this to be a great workflow. For example, in the earlier + screenshot, only the staged changes to `overview.png` will be + included in the commit. Later staging and commit actions could include the + changes to `versioncontrol.md` and the two other{' '} + `.png` images as a separate commit. + +More specific Commit actions can be found in the{' '} + Views and More Actions ... menu on the top of the Source + Control view. + +## Cloning a repository + +If you haven't opened a folder yet, the Source Control view will give + you the options to Open Folder from your local machine or{' '} + Clone Repository . + +If you select Clone Repository , you will be asked for the + URL of the remote repository (for example on GitHub) and the + parent directory under which to put the local repository. + +For a GitHub repository, you would find the URL from the GitHub{' '} + Code dialog. + +You would then paste that URL into the Git: Clone prompt. + +You'll also see the option to Clone from GitHub . Once + you authenticate with your GitHub account in AVAP TM Dev + Studioe, you'll be able to search through repositories by name, and + select any repo to clone it. You can also start the flow to clone a Git + repository with the Git: Clone command in the{' '} + Command Palette (Ctrl+Shift+P). To see a + step-by-step walkthrough, check out our Clone repos from AVAP TM {' '} + Dev Studio video. + +## Branches and Tags + +You can create and checkout branches directly within AVAP TM Dev + Studio through the Git: Create Branch and{' '} + Git: Checkout to commands in the{' '} + Command Palette ( `Ctrl+Shift+P` ). + +If you run Git: Checkout to , you will see a dropdown list + containing all of the branches or tags in the current repository. It will + also give you the option to create a new branch if you decide that's a + better option, or checkout a branch in detached mode. + +The Git: Create Branch command lets you quickly create a + new branch. Just provide the name of your new branch and AVAP TM {' '} + Dev Studio will create the branch and switch to it. If you choose to{' '} + Create new branch from... , you'll get an extra prompt + that allows you to specify which commit the new branch should be pointing + to. + +## Remotes + +Given that your repository is connected to some remote and that your + checked out branch has an upstream link to a branch in that remote, AVAP + TM Dev Studio offers you useful actions to{' '} + push , pull , and sync {' '} + that branch (the latter will run a pull command + followed by a push command). You can find these + actions in the Views and More Actions ... menu, along + with the option to add or remove a remote . + +AVAP TM Dev Studio is able to periodically fetch changes from + your remotes. This enables AVAP TM Dev Studio to show how many + changes your local repository is ahead or behind the remote. This feature + is disabled by default and you can use the git.autofetch + setting(/docs/getstarted/settings) to enable it. + +## Git Status Bar actions + +There is a Synchronize Changes action in the Status Bar, + next to the branch indicator, when the current checked out branch has an + upstream branch configured. Synchronize Changes will pull + remote changes down to your local repository and then push local commits + to the upstream branch. + +If there is no upstream branch configured and the Git repository has + remotes set up, the Publish action is enabled. This will + let you publish the current branch to a remote. + +## Gutter indicators + +If you open a folder that is a Git repository and begin making changes, + AVAP TM Dev Studio will add useful annotations to the gutter and + to the overview ruler. + +* A red triangle indicates where lines have been deleted +* A green bar indicates new added lines +* A blue bar indicates modified lines + +## Merge conflicts + +Merge conflicts are recognized by AVAP TM Dev Studio. + Differences are highlighted and there are inline actions to accept either + one or both changes. Once the conflicts are resolved, stage the + conflicting file so you can commit those changes. + +## 3-way merge editor + +To help you resolve merge conflicts, AVAP TM Dev Studio provides + a 3-way merge editor where you can interactively accept incoming and + current changes and view and edit the resulting merged file. The 3-way + merge editor is opened by selecting the{' '} + Resolve in Merge Editor button in the bottom right corner + of a file with Git merge conflicts. + +The 3-way merge editor displays separate views for{' '} + Incoming changes (on the left),{' '} + Current changes (on the right), and the{' '} + Result of the merge (at the bottom). Conflicts + are highlighted and can be resolved by using the CodeLens buttons. + +### Resolving conflicts + +The 3-way merge editor allows you to resolve conflicts by accepting either + one or both changes. You can also manually edit the result of the merge. + +For some conflicts, the merge editor shows an{' '} + Accept Combination button. Accepting the combination + resolves the current conflict by smartly merging both changes. This is + especially useful for changes in the same line that don't touch the + same characters. + +Use the Ignore buttons to accept neither the incoming nor + current change, but mark the conflict as resolved. This resets the + conflicting area to the state before any changes were made. + +### Completing the merge + +You can use the conflict counter in the right of the result editor to keep + track of how many unresolved conflicts are remaining. Clicking on the + counter jumps to the next unresolved conflict. Once all conflicts are + resolved, you can complete the merge by selecting{' '} + Complete Merge in the bottom right corner. This stages + the file and closes the merge editor. + +### Alternative layouts and more + +Selecting the three dots ( ··· ) in the top right + corner of the merge editor opens a context menu with additional options. + You can switch to a vertical layout and display the base view, which shows + the state of the file before any changes were made. + +The three dots next to Incoming , Current + , and Result offer options for each view, such as showing + a side-by-side diff against base, accepting all changes, or resetting the + result. + +### Understanding conflicts + +If you want to learn more about the details of how 3-way merge editors + work, we can recommend the following video: + +## Viewing diffs + +Our Git tooling supports viewing of diffs within AVAP TM Dev + Studio. + +### Accessible Diff Viewer + +There is an Accessible Diff Viewer in the Diff editor that presents + changes in a unified patch format. You can navigate between changes with{' '} + Go to Next Difference ( `F7` ) and{' '} + Go to Previous Difference ( `Shift+F7` + ). Lines can be navigated with arrow keys and pressing{' '} + `Enter` will jump back in the Diff editor and the selected + line. + +## Timeline view + +The Timeline view, accessible at the bottom of the File Explorer by + default, is a unified view for visualizing time-series events (for + example, Git commits) for a file. + +AVAP TM Dev Studio's built-in Git support provides the Git + commit history of the specified file. Selecting a commit will open a diff + view of the changes introduced by that commit. When you right-click on a + commit, you'll get options to Copy Commit ID and{' '} + Copy Commit Message . + +AVAP TM Dev Studio supports more Git history workflows through{' '} + extensions available on + the AVAP TM Dev Studio Marketplace. + +## Git output window + +You can always peek under the hood to see the Git commands we are using. + This is helpful if something strange is happening or if you are just + curious. :) + +To open the Git output window, run View >{' '} + Output and select Log (Git) from + the dropdown list. + +## Initialize a repository + +If your workspace is on your local machine, you can enable Git source + control by creating a Git repository with the{' '} + Initialize Repository command. When AVAP TM Dev + Studio doesn't detect an existing Git repository, the Source Control + view will give you the options to Initialize Repository {' '} + or Publish to GitHub . + +You can also run the Git: Initialize Repository and{' '} + Publish to GitHub commands from the{' '} + Command Palette ( `Ctrl+Shift+P` ). + Running Initialize Repository will create the necessary + Git repository metadata files and show your workspace files as untracked + changes ready to be staged. Publish to GitHub will + directly publish your workspace folder to a GitHub repository, allowing + you to choose between private and public repositories. Check out our + publishing repos video for more information about publishing to GitHub. + +## AVAP TM Dev Studio as Git editor + +When you launch AVAP TM Dev Studio from the command line, you + can pass the `--wait` argument to make the launch command wait + until you have closed the new AVAP TM Dev Studio instance. This + can be useful when you configure AVAP TM Dev Studio as your Git + external editor so Git will wait until you close the launched AVAP + TM Dev Studio instance. + +Here are the steps to do so: + +Now you can run `git config --global -e` and use AVAP + TM Dev Studio as editor for configuring Git. + +### AVAP TM Dev Studio as Git difftool and mergetool + +You can use AVAP TM Dev Studio's diff and merge capabilities + even when using Git from command-line. Add the following to your Git + configurations to use AVAP TM Dev Studio as the diff and merge + tool: + +```javascript +[diff] + ` `tool = default-difftool + + [difftool "default-difftool"] + ` `cmd = code --wait --diff $LOCAL $REMOTE + + [merge] + ` `tool = code + + [mergetool "code"] + ` `cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED +``` + +This uses the `--diff` option that can be passed to AVAP + TM Dev Studio to compare two files side by side. The merge tool + will be used the next time Git discovers a merge conflict. + +To summarize, here are some examples of where you can use AVAP + TM Dev Studio as the editor: + +* `git rebase HEAD~3 -i` do interactive rebase using AVAP TM Dev Studio +* `git commit` use AVAP TM Dev Studio for the commit message +* `git add -p` followed by e for interactive add +* `git difftool ^ ` use AVAP TM Dev Studio as the diff editor for changes + +## Working with GitHub Pull Requests and Issues + +AVAP TM Dev Studio can also bring in GitHub's pull requests + and issues. Create your PRs in AVAP TM Dev Studio, review with + comments, and approve them without switching context. Learn more about + GitHub PRs and Issues in AVAP TM Dev Studio. + +## SCM Providers + +AVAP TM Dev Studio has support for handling multiple Source + Control providers simultaneously. For example, you can open multiple Git + repositories alongside your Azure DevOps Server local workspace and + seamlessly work across your projects. To turn on the{' '} + Source Control Providers view, select the overflow menu + in the Source Control view ( `Ctrl+Shift+G` + ), hover over Views , and make sure that{' '} + Source Control Repositories is marked with a check. The{' '} + Source Control Providers view shows the detected + providers and repositories, and you can scope the display of your changes + by selecting a specific provider. + +### SCM Provider extensions + +If you would like to install another SCM provider, you can search on the{' '} + scm providers extension category in the{' '} + Extensions view ( `Ctrl+Shift+X` ). + Start typing '@ca' and you will see suggestions for extension + categories like debuggers and linters. Select{' '} + `@category:"scm providers"` to see available SCM + providers. + +## Next steps + +* Intro Video - Git Version Control - An introductory video providing an overview of AVAP TM Dev Studio Git support. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. +* Debugging - This is where AVAP TM Dev Studio really shines +* Tasks - Running tasks with Gulp, Grunt, and Jake. Showing Errors and Warnings +* Source Control API - If you want to integrate another Source Control provider into AVAP TM Dev Studio, see our Source Control API. diff --git a/docs/developer.avapframework.com/72_spei_spei_EN.md b/docs/developer.avapframework.com/72_spei_spei_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md b/docs/developer.avapframework.com/74_subir_imagen_Subir_imagen_del_perfil_de_usuario_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md new file mode 100644 index 0000000..74588f8 --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Advanced.md @@ -0,0 +1,334 @@ +AVAP TM Dev Studio's integrated terminal has many advanced + features and settings, such as Unicode and emoji support, custom + keybindings, and automatic replies. This topic explains these advanced + features in detail. If you are new to AVAP TM Dev Studio or the + integrated terminal, you may want to review the{' '} + Terminal Basics topic first. + +## Persistent sessions + +The terminal supports two different types of persistent sessions: + +* Process reconnection: When reloading a window (for example, after installing an extension), reconnect to the previous process and restore its content. +* Process revive: When restarting AVAP TM Dev Studio, a terminal's content is restored and the process is{' '} relaunched using its original environment. + +Both of these persistent sessions can be disabled by setting + terminal.integrated.enablePersistentSessions to false, and the amount of + scrollback restored is controlled by + theterminal.integrated.persistentSessionScrollback setting. Process revive + can be configured independently with + terminal.integrated.persistentSessionReviveProcess. + +### Moving terminals between windows + +Terminal tabs can be dragged and dropped between AVAP TM Dev + Studio windows. This can also be done manually through the Command Palette + and the Terminal: Detach Session and{' '} + Terminal: Attach to Session commands. + +### Configure how the terminal behaves on start up + +When opening a window, if the terminal view is visible it will either + reconnect to the terminal using persistent sessions, or create a new + shell. This behavior can be fine tuned with the + terminal.integrated.hideOnStartup setting. + +* never (default): Never hide the terminal view on startup. +* whenEmpty: Only hide the terminal when there are no persistent sessions restored. +* always: Always hide the terminal, even when there are persistent sessions restored. + +## Keybinding and the shell + +As an embedded application, the integrated terminal should intercept some, + but not all, keybindings dispatched within AVAP TM Dev Studio. + +The configurable terminal.integrated.commandsToSkipShell setting + determines which command's keybindings should always "skip the + shell" and instead be handled by AVAP TM Dev Studio's + keybinding system. By default, it contains a hard-coded list of commands + that are integral to the AVAP TM Dev Studio experience but you + can add or remove specific commands: + +```javascript +{ + ` `"terminal.integrated.commandsToSkipShell": [` `// Ensure + the toggle sidebar visibility keybinding skips the shell + ` `"workbench.action.toggleSidebarVisibility", + ` `// Send quick open's keybinding to the shell + ` `"-workbench.action.quickOpen", + ` `] + + } +``` + +Look at the terminal.integrated.commandsToSkipShell setting details to see + the complete list of default commands. + +### Chords + +Chord keybindings are made up of two keybindings, for example Ctrl+K + followed by Ctrl+C to change the line to a comment. Chords always skip the + shell by default but can be disabled with terminal.integrated.allowChords. + +### macOS clear screen + +On macOS, Cmd+K is a common keybindings in terminals to clear the screen + so AVAP TM Dev Studio also respects that, which means Cmd+K + chords will not work. Cmd+K chords can be enabled by{' '} + + removing the clear keybinding + + : + +```javascript +{ + ` `"key": "cmd+k", + ` `"command": "-workbench.action.terminal.clear" + + } +``` + +Additionally, this keyboard shortcut will be overridden automatically if + any extensions contribute Cmd+K keybindings due to how keybinding priority + works. To re-enable the Cmd+K clear keybinding in this case, you can + redefine it in user keybindings, which have a higher priority than + extension keybindings: + +```javascript +{ + ` `"key": "cmd+k", + ` `"command": "workbench.action.terminal.clear", + ` `"when": "terminalFocus && terminalHasBeenCreated || + terminalFocus && terminalProcessSupported" + + } +``` + +### Mnemonics + +Using mnemonics to access AVAP TM Dev Studio's menu (for + example, Alt+F for File menu) is disabled by default in the terminal + as these key events are often important hotkeys in shells. Set + terminal.integrated.allowMnemonics to enable mnemonics, but note that this + will disallow any Alt key events to go to the shell. This setting does + nothing on macOS. + +### Custom sequence keybindings + +The workbench.action.terminal.sendSequence command can be used to send a + specific sequence of text to the terminal, including escape sequences that + are interpreted specially by the shell. The command enables you to send + Arrow keys, Enter, cursor moves, etc. + +For example, the sequence below jumps over the word to the left of the + cursor (Ctrl+Left) and then presses Backspace: + +```javascript +{ + ` `"key": "ctrl+u", + ` `"command": "workbench.action.terminal.sendSequence", + ` `"args": { + ` `"text": "\u001b[1;5D\u007f" + ` `} + + } +``` + +This feature supports{' '} + variable substitution . + +The sendSequence command only works with the \u0000 format for using + characters via their character code (not \x00). Read more about + these hex codes and terminal sequences in the following resources: + +* XTerm Control Sequences +* List of C0 and C1 control codes + +## Confirmation dialogs + +In order to avoid unnecessary output and user prompts, the terminal does + not show warning dialogs when processes exit. If warnings are desirable, + they can be configured with the following settings: + +* terminal.integrated.confirmOnExit - Controls whether to confirm when the window closes if there are active debug sessions. +* terminal.integrated.confirmOnKill - Controls whether to confirm killing terminals when they have child processes. +* terminal.integrated.showExitAlert - Controls whether to show the alert "The terminal process terminated with exit code" when exit code is non-zero. + +## Auto replies + +The terminal can automatically provide a configurable input response to + the shell if an exact sequence of output is received. The most common use + case is to automatically reply to a prompt when hitting Ctrl+C in batch + scripts that ask whether the user wants to terminate the batch job. To + automatically dismiss this message, add this setting: + +```javascript +{ + ` `"terminal.integrated.autoReplies": { + ` `"Terminate batch job (Y/N)": "Y\r" + ` `} + + } +``` + +Notice that the \r character used here means Enter, and much like{' '} + custom sequence keybindings , + this feature supports sending escape sequences to the shell. + +No auto replies are configured by default as providing shell input should + be an explicit action or configuration by the user. + +## Change tab stop width + +The terminal.integrated.tabStopWidth setting allows configuring the tab + stop width when a program running in the terminal outputs \t. This should + typically not be needed as programs will often move the cursor instead of + using the Tab character, but may be useful in some situations. + +## Unicode and emoji support + +The terminal has both Unicode and emoji support. When these characters are + used in the terminal, there are some caveats to that support: + +* Some Unicode symbols have ambiguous width that may change between Unicode versions. Currently we support Unicode version 6 and 11 widths, which can be configured with the terminal.integrated.unicodeVersion setting. The version specified should match the Unicode version used by the shell/operating system, otherwise there could be rendering issues. Note that the Unicode version of the shell/OS may not match the font's actual width. +* Some emojis comprised of multiple characters may not render correctly, for example, skin tone modifiers. +* Emoji support is limited on Windows. + +## Image support + +Images in the terminal work provided they use either the Sixel or iTerm + inline image protocols. This feature is disabled by default and can be + enabled with the terminal.integrated.enableImages setting. + +Current limitations: + +* Serialization does not work, so reloading a terminal will not retain any images ( jerch/xterm-addon-image#47 ). +* Copying the selection as HTML does not include the selected image ( jerch/xterm-addon-image#50 ). +* Animated gifs don't work ( jerch/xterm-addon-image#51 ). +* Images that are shorter than a cell will not work properly, this is a{' '} design flaw with the sequences and also occurs in XTerm . + +## Process environment + +The process environment of the application running within the terminal is + influenced by various settings and extensions and can cause the output in + the AVAP TM Dev Studio terminal to look different than in other + terminals. + +### Environment inheritance + +When AVAP TM Dev Studio is opened, it launches a login shell + environment in order to source a shell environment. This is done because + developer tools are often added to the $PATH in a shell launch script like + ~/.bash_profile. By default, the terminal inherits this environment, + depending on your{' '} + + profile shell arguments + + , and means that multiple profile scripts may have run, which could cause + unexpected behavior. + +This environment inheritance can be disabled on macOS and Linux via the + terminal.integrated.inheritEnv setting. + +### Interaction with $LANG + +There is some special interaction with the $LANG environment variable, + which determines how characters are presented in the terminal. This + feature is configured with the terminal.integrated.detectLocale setting: + +### Extension environment contributions + +Extensions are able to{' '} + + contribute to terminal environments + + , allowing them to provide some integration with the terminal. For + example, the built-in Git extension injects the GIT_ASKPASS environment + variable to allow AVAP TM Dev Studio to handle authentication to + a Git remote. + +If an extension changes the terminal environment, any existing terminals + will be relaunched if it is safe to do so, otherwise a warning will show + in the terminal status. More information about the change can be viewed in + the hover, which also includes a relaunch button. + +## Windows and ConPTY + +AVAP TM Dev Studio's terminal is built on the{' '} + xterm.js project to + implement a Unix-style terminal that serializes all data into a string and + pipes it through a "pseudoterminal". Historically, this was not + how the terminal worked on Windows, which used the{' '} + + Console API + {' '} + to implement its console called 'conhost'. + +An open source project called{' '} + winpty was created to + try to fix this issue by providing an emulation/translation layer between + a Unix-style terminal and a Windows console. AVAP TM Dev + Studio's terminal was originally implemented using only winpty. This + was great at the time, but in 2018, Windows 10 received{' '} + + the ConPTY API + + , which took the idea pioneered by winpty and baked it into Windows, + providing a more reliable and supported system to leverage Unix-style + terminals and apps on Windows. + +AVAP TM Dev Studio defaults to ConPTY on Windows 10+ (from + build number 18309) and falls back to winpty as a legacy option for + older versions of Windows. ConPTY can be explicitly disabled via the + terminal.integrated.windowsEnableConpty settings but this should normally + be avoided. + +Since ConPTY is an emulation layer, it does come with some quirks. The + most common is that ConPTY considers itself the owner of the viewport and + because of that will sometimes reprint the screen. This reprinting can + cause unexpected behavior such as old content displaying after running the{' '} + Terminal: Clear command. + +## Remote development + +This section outlines topics specific to when AVAP TM Dev Studio + is connected to a remote machine using a AVAP TM Dev Studio{' '} + + Remote Development + {' '} + extension. + +### Reducing remote input latency + +Local echo is a feature that helps mitigate the effect of input latency on + remote windows. It writes the keystrokes in the terminal in a dimmed color + before the result is confirmed by the remote. By default, the feature + start running when latency is detected to be above 30 ms and the timing + can be configured with terminal.integrated.localEchoLatencyThreshold. The + color of the unconfirmed characters is defined by + terminal.integrated.localEchoStyle. + +Local echo disables itself dynamically depending on the active program in + the terminal. This is controlled by + terminal.integrated.localEchoExcludePrograms, which defaults to + ['vim', 'vi', 'nano', 'tmux']. It's + recommended that you disable the feature for any application or shell that + is highly dynamic and/or does a lot of reprinting of the screen when + typing. + +To disable the feature completely, use: + +```javascript +{ + ` `"terminal.integrated.localEchoEnabled": false + + } +``` + +### Local terminals in remote windows + +The default local terminal profile can be launched in + remote windows with the{' '} + Terminal: Create New Integrated Terminal (Local) {' '} + command via the Command Palette. Currently non-default profiles cannot be + launched from remote windows. diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md new file mode 100644 index 0000000..213a3a7 --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Appearance.md @@ -0,0 +1,234 @@ +The look of AVAP TM Dev Studio's terminal can be customized + extensively. + +*Sapphire + {' '} + + theme with custom Starship prompt + using the font Hack with{' '} + Nerd Font symbols + +## Text style + +Text in the terminal can be customized with the following settings: + +* `terminal.integrated.fontFamily:` The font family to use, this takes a string in the format that fontFamily in CSS takes. For example, "'Fira Code', monospace" will configure Fira Code as the primary font and monospace as the fallback when it lacks glyphs. +* `terminal.integrated.fontSize:` Changes the font size of text in the terminal. +* `terminal.integrated.letterSpacing:` Configures additional horizontal spacing between characters in pixels. +* `terminal.integrated.lineHeight:` Configures additional spacing vertical between characters as a multiplier of the regular line height. For example, 1.1 will add 10% additional vertical space. +* `terminal.integrated.fontWeight:` Configures the font weight of "normal" text. +* `terminal.integrated.fontWeightBold:` Configures the font weight of "bold" text. + +### Powerline symbols and Nerd Fonts + +Powerline fonts are special + patched fonts that contain additional characters that can be used in the + terminal. AVAP TM Dev Studio's terminal{' '} + + renders some of the Powerline symbols without needing to configure a + font + + , but if more glyphs are desired, configure a Powerline font with the font + family setting. Powerline fonts typically end in " for + Powerline", the following setting is an example of how to configure a + DejaVu Sans Mono that has been patched: + +```javascript +"editor.fontFamily": "'DejaVu Sans Mono for Powerline'" +``` + +Nerd Fonts work the same and typically have a " NF" suffix, the + following is an example of how to configure Hack's nerd fonts variant: + +```javascript +"terminal.integrated.fontFamily": "'Hack NF'" +``` + +## Terminal cursor + +The terminal cursor style and whether it blinks can be customized with the + following settings: + +* `terminal.integrated.cursorStyle:` Defines the shape of the cursor, can be block, line or underline. +* `terminal.integrated.cursorWidth:` How wide in pixels the cursor should be when the cursor style is set to line. +* `terminal.integrated.cursorBlinking:` Whether the cursor should blink when the terminal is focused. +* `terminal.integrated.cursorStyleInactive:` Defines the shape of the cursor, can be outline, block, line, underline or none. + +## Customizing tabs + +Terminal tabs appear on the right of the terminal view when there are two + or more terminals by default, showing the active terminal in the view + header when there is only one. + +### Visibility + +The default visibility is designed to save horizontal space, but may not + be desirable. How tabs are presented can be configured with the following + settings: + +* `terminal.integrated.tabs.hideCondition:` When to hide the tabs to the right, set to "never" to always show them. +* `terminal.integrated.tabs.showActiveTerminal:` When to show the active terminal in the terminal view header. +* `terminal.integrated.tabs.showActions:` When to show the active terminal's actions in the view header. +* `terminal.integrated.tabs.location:` Whether the tabs should be shown on the left or right of the terminal. +* `terminal.integrated.tabs.enabled:` Whether to use tabs, disabling will show the original dropdown view. + +### Tab text + +The text on each tab is determined by the following settings: + +* `terminal.integrated.tabs.title:` Tab title. +* `terminal.integrated.tabs.description:` Text that appears to the right of the title. +* `terminal.integrated.tabs.separator:` Separator character between the title and description. + +By default, the title displays what the shell's detected process name. + +Other terminals often display the escape sequence sent by the shell as the + title, which can be configured with: + +```javascript +"terminal.integrated.tabs.title": "${sequence}" +``` + +### Icons + +Each terminal has an associated icon that is determined by its{' '} + terminal profile . The default icon + and its color, which will be used if not defined in a profile, can be + configured with the terminal.integrated.tabs.defaultIcon and + terminal.integrated.tabs.defaultColor settings. + +### Status + +A terminal's "status", if any, is signified by an icon that + appears on the right of the tab. Some statuses involve animation. If this + is distracting the animation can be disabled with: + +```javascript +"terminal.integrated.tabs.enableAnimation": false +``` + +### Visual bell + +When the terminal's bell is triggered, a yellow bell icon is briefly + shown. This can be disabled with terminal.integrated.enableBell and the + duration can be configured with terminal.integrated.bellDuration. + +## Terminal colors + +While the terminal is capable of displaying true color, programs commonly + use 8 ANSI colors (black, red, green, yellow, blue, magenta, cyan and + white) and bright variants of each. These ANSI colors are determined + by the active color theme , but they + can also be configured independently from the theme with the{' '} + + workbench.colorCustomizations + {' '} + setting. + +Whether bold text uses the normal ANSI colors or the bright variant can be + configured with the terminal.integrated.drawBoldTextInBrightColors + setting. + +### Minimum contrast ratio + +Terminals often have contrast issues due to some conflict with dark/light + themes, ANSI colors or shells/programs running, and more. + +The minimum contrast ratio feature solves this problem by either + increasing or reducing the luminance of the text's foreground color + until a 4.5:1 contrast ratio is met. + +One downside of this is that colored text may sometimes lose some of its + saturation. This feature can be configured or disabled to get the original + colors with: + +```javascript +"terminal.integrated.minimumContrastRatio": 1 +``` + +## GPU acceleration + +The terminal features three different renderers, each of which have + different trade offs: + +* WebGL renderer - True GPU acceleration. +* Canvas renderer - GPU acceleration by using the{' '} CanvasRenderingContext2D web API , slower than WebGL but faster than DOM. +* DOM renderer - A fallback renderer that's much slower but has great compatibility. + +GPU acceleration driven by the WebGL renderer is enabled in the terminal + by default. This helps the terminal work faster and display at a high FPS + by significantly reducing the time the CPU spends rendering each frame. + +When on Linux VMs, browsers that don't support WebGL, or machines with + outdated drivers, WebGL may not work properly. + +The default terminal.integrated.gpuAcceleration value of "auto" + tries the WebGL, canvas, and DOM renderers sequentially, settling at the + first without detected issues. + +Sometimes this detection doesn't work and requires manual + intervention, setting terminal.integrated.gpuAcceleration to + "off" typically resolves rendering-related problems like these + at the cost of performance. + +### Custom glyphs + +When GPU acceleration is enabled, custom + rendering, rather than the font, improves how some characters display in + the terminal. These include box drawing characters + (U+2500-U+257F), block elements (U+2580-U+259F) and a + subset of Powerline symbols (U+E0B0-U+E0BF). This means that the + configured font does not need to support these characters as well as + having the characters draw pixel perfect and stretch to the size of the + entire cell. + +Below are some examples of these characters with custom line height and + letter spacing configured. Notice how there are no gaps between cells + thanks to the custom glyphs: + +```javascript +This feature can be disabled by setting + "terminal.integrated.customGlyphs": false. +``` + +## Customizing your prompt + +Most shells allow extensive customization of the terminal prompt. This is + done by configuring your shell outside AVAP TM Dev Studio, + typically by modifying the $PS1 variable, setting a $PROMPT_COMMAND or + installing a plugin. + +Some prompts like Starship and{' '} + oh-my-posh show things like git status + and work with most shells, so they're a good choice when starting out. + +## Common questions + +### Why is my terminal showing a multi-colored triangle or a black rectangle? + +The terminal can have problems with GPU accelerated rendering in some + environments. For example, you might see a big multi-colored triangle + instead of text. This is typically caused by driver/VM graphics issues and + the same also happens in Chromium. Work around these issues by launching + code with the --disable-gpu flag or by using the setting + "terminal.integrated.gpuAcceleration": "off" to avoid + using the canvas in the terminal. See the{' '} + GPU acceleration section for more + information. + +### Why are the colors in the terminal not correct? + +The minimum contrast ratio feature {' '} + can cause colors to not be displayed as expected. It can be disabled with: + +```javascript +"terminal.integrated.minimumContrastRatio": 1 +``` + +Background on why this is the default is explained in{' '} + + vscode#146406 + + . + +`` diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md new file mode 100644 index 0000000..30cbb2a --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_Shell_Integration.md @@ -0,0 +1,372 @@ +AVAP TM Dev Studio has the ability to integrate with common + shells, allowing the terminal to understand more about what's actually + happening inside the shell. This additional information enables some + useful features such as{' '} + + working directory detection + {' '} + and command detection,{' '} + decorations , + and navigation . + +Supported shells: + +* Linux/macOS: bash, fish, pwsh, zsh +* Windows: pwsh + +## Installation + +### Automatic script injection + +By default, the shell integration script should automatically activate on + supported shells launched from AVAP TM Dev Studio. This is done + by injecting arguments and/or environment variables when the shell session + launches. This automatic injection can be disabled by setting{' '} + `terminal.integrated.shellIntegration.enabled` to{' '} + `false` . + +This standard, easy way will not work for some advanced use cases like in + sub-shells, through a regular ssh session (when not using the{' '} + Remote - SSH extension ) or for some + complex shell setups. The recommended way to enable shell integration for + those is manual installation . + +### Manual installation + +To manually install shell integration, the AVAP TM Dev Studio + shell integration script needs to run during your shell's + initialization. Where and how to do this depends on the shell and OS + you're using. When using manual install it's recommended to set{' '} + `terminal.integrated.shellIntegration.enabled` to false, though + not mandatory. + +bash + +Add the following to your `~/.bashrc` file. Run{' '} + `code ~/.bashrc` in bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path bash)" +``` + +fish + +Add the following to your `config.fish` . Run{' '} + `code $\_\_fish\_config\_dir/config.fish` in fish to open the + file in AVAP TM Dev Studio. + +```javascript +string match -q "$TERM\_PROGRAM" "vscode" + + and . (code --locate-shell-integration-path fish) +``` + +pwsh + +Add the following to your [PowerShell profile]. Run{' '} + `code $Profile` in pwsh to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +if ($env:TERM\_PROGRAM -eq "vscode") { . "$(code + --locate-shell-integration-path pwsh)" } +``` + +zsh + +Add the following to your `~/.zshrc` file. Run{' '} + `code ~/.zshrc` in bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path zsh)" +``` + +Git Bash + +⚠️ This is currently experimental and automatic injection is not + supported + +Add the following to your `~/.bashrc` file. Run code{' '} + `~/.bashrc` in Git Bash to open the file in AVAP TM {' '} + Dev Studio. + +```javascript +[[ "$TERM\_PROGRAM" == "vscode" ]] && . "$(code + --locate-shell-integration-path bash)" +``` + +The above shell integration installation is cross-platform and compatible + with any installation type if code is in the `$PATH` . However, + this recommended approach starts Node.js to fetch the script path, leading + to a slight delay in shell startup. To mitigate this delay, inline the + script above by resolving the path ahead of time and adding it directly + into your init script. + +```javascript +\# Output the executable's path first: + + code --locate-shell-integration-path bash + + + \# Add the result of the above to the source statement: + + [[ "$TERM\_PROGRAM" == "vscode" ]] && . + "/path/to/shell/integration/script.sh" +``` + +## Command decorations and the overview ruler + +One of the things that shell integration enables is the ability to get the + exit codes of the commands run within the terminal. Using this + information, decorations are added to the left of the line to indicate + whether the command succeeded or failed. These decorations also show up in + the relatively new overview ruler in the scroll bar, just like in the + editor. + +The decorations can be interacted with to give some contextual actions + like re-running the command: + +The command and overview ruler decorations can be configured with the{' '} + `terminal.integrated.shellIntegration.decorationsEnabled` {' '} + setting. + +## Command navigation + +The commands detected by shell integration feed into the command + navigation feature ( `Ctrl/Cmd+Up, Ctrl/Cmd+Down` ) to + give it more reliable command positions. This feature allows for quick + navigation between commands and selection of their output. To select from + the current position to the command, you can also hold down{' '} + `Shift` , pressing `Shift+Ctrl/Cmd+Up` and{' '} + `Shift+Ctrl/Cmd+Down` . + +## Sticky scroll + +The sticky scroll feature will "stick" the command that is + partially showing at the top of the terminal, making it much easier to see + what command that output belongs to. Clicking on the sticky scroll + component will scroll to the command's location in the terminal + buffer. + +This can be enabled with the{' '} + `terminal.integrated.stickyScroll.enabled` setting. + +## Quick fixes + +AVAP TM Dev Studio scans the output of a command and presents a + Quick Fix with actions that have a high likelihood of being what the user + will want to do next. + +Here are some of the built-in Quick Fixes: + +* When it's detected that a port is already being listened to, suggest to kill the process and re-run the previous command. +* When `git push` fails due to an upstream not being set, suggest to push with the upstream set. +* When a `git` subcommand fails with a similar command error, suggest to use the similar command(s). +* When `git push` results in a suggestion to create a GitHub PR, suggest to open the link. +* When a `General` or `cmd-not-found` PowerShell feedback provider triggers, suggest each suggestion. + +The Quick Fix feature also supports{' '} + audio cues for + additional feedback when a Quick Fix is available. + +## Run recent command + +The Terminal: Run Recent Command command surfaces history + from various sources in a Quick Pick, providing similar functionality to a + shell's reverse search ( `Ctrl+R` ). The sources are + the current session's history, previous session history for this shell + type and the common shell history file. + +Some other functionality of the command: + +* By default the search mode is "contiguous search", meaning the search term must exactly match. The button on the right of the search input allows switching to fuzzy search. +* In the current session section, there is a clipboard icon in the right of the Quick Pick that will open the command output in an editor. +* The pin action in the right of the Quick Pick can pin the command to the top of the list. +* Alt can be held to write the text to the terminal without running it. +* The amount of history stored in the previous session section is determined by the terminal.integrated.shellIntegration.history setting. + +The default keybinding for this command is `Ctrl+Alt+R` . + However, when accessibility mode is on these are reversed;{' '} + `Ctrl+R` runs a recent command and `Ctrl+Alt+R` {' '} + sends Ctrl+R to the shell. + +The keybindings can be flipped when accessibility mode is off with the + following keybindings: + +```javascript +{ + ` `"key": "ctrl+r", + ` `"command": "workbench.action.terminal.runRecentCommand", + ` `"when": "terminalFocus" + + }, + + { + ` `"key": "ctrl+alt+r", + ` `"command": "workbench.action.terminal.sendSequence", + ` `"args": { "text": "\u0012"/\*^R\*/ }, + ` `"when": "terminalFocus" + + } +``` + +## Go to recent directory + +Similar to the run recent command feature, the{' '} + Terminal: Go to Recent Directory command keeps track of + directories that have been visited and allows quick filtering and + navigating ( `cd` ) to them. `Alt` can be held + to write the text to the terminal without running it. + +The default keybinding for this command is `Ctrl+G` as it + behaves similar to the Go to Line/Column command in the + editor. Ctrl+G can be send to the shell with `Ctrl+Alt+G` . + +## Current working directory detection + +Shell integration tells AVAP TM Dev Studio what the current + working directory of the shell is. This information is not possible to get + on Windows without trying to detect the prompt through regex and requires + polling on macOS and Linux, which isn't good for performance. + +One of the biggest features this enables is enhanced resolving of links in + the terminal. Take a link `package.json` for example, when the + link is activated while shell integration is disabled this will open a + search quick pick with `package.json` as the filter if there + are multiple `package.json` files in the workspace. When shell + integration is enabled however, it will open the `package.json` {' '} + file in the current folder directly because the current location is known. + This allows the output of `ls` for example to reliably open the + correct file. + +The current working directory is also used to show the directory in the + terminal tab, in the run recent command quick pick and for the{' '} + `"terminal.integrated.splitCwd"` :{' '} + `"inherited"` feature. + +## Extended PowerShell keybindings + +Windows' console API allows for more keybindings than Linux/macOS + terminals, since AVAP TM Dev Studio's terminal emulates the + latter even on Windows there are some PowerShell keybindings that + aren't possible using the standard means due to lack of VT encoding + such as `Ctrl+Space` . Shell integration allows AVAP + TM Dev Studio to attach a custom keybindings to send a special + sequence to PowerShell that then gets handled in the shell integration + script and forwarded to the proper key handler. + +The following keybindings should work in PowerShell when shell integration + is enabled: + +* Ctrl+Space: Defaults to `MenuComplete` on Windows only +* Alt+Space: Defaults to `SetMark` on all platforms +* Shift+Enter: Defaults to `AddLine` on all platforms +* Shift+End: Defaults to `SelectLine` on all platforms +* Shift+Home: Defaults to `SelectBackwardsLine` on all platforms + +## Enhanced accessibility + +The information that shell integration provides to AVAP TM Dev + Studio is used to improve{' '} + + accessibility in the terminal + + . Some examples of enhancements are: + +* Navigation through detected commands in the accessible buffer (Alt+F2) +* An audio cue plays when a command fails. +* Underlying text box synchronizing such that using the arrow and backspace keys behave more correctly. + +## Supported escape sequences + +AVAP TM Dev Studio supports several custom escape sequences: + +### AVAPTM Dev Studio custom sequences 'OSC 633 ; ... ST' + +AVAP TM Dev Studio has a set of custom escape sequences designed + to enable the shell integration feature when run in AVAP TM Dev + Studio's terminal. These are used by the built-in scripts but can also + be used by any application capable of sending sequences to the terminal, + for example the{' '} + + Julia extension + {' '} + uses these to support shell integration in the Julia REPL. + +These sequences should be ignored by other terminals, but unless other + terminals end up adopting the sequences more widely, it's recommended + to check that `$TERM\_PROGRAM` is `vscode` before + writing them. + +* `OSC 633 ; A ST` - Mark prompt start. +* `OSC 633 ; B ST` - Mark prompt end. +* `OSC 633 ; C ST` - Mark pre-execution. +* `OSC 633 ; D [; ] ST` - Mark execution finished with an optional exit code. +* `OSC 633 ; E ; ST` - Explicitly set the command line. The E sequence allows the terminal to reliably get the exact command line interpreted by the shell. When this is not specified, the terminal may fallback to using the A, B and C sequences to get the command, or disable the detection all together if it's unreliable. The optional nonce can be used to verify the sequence came from the shell integration script to prevent command spoofing. When the nonce is verified successfully, some protections before using the commands will be removed for an improved user experience. The command line can escape ASCII characters using the{' '} `\xAB` format, where AB are the hexadecimal representation of the character code (case insensitive), and escape the \ character using \. It's required to escape semi-colon ( `0x3b` ) and characters 0x20 and below and this is particularly important for new line and semi-colon. Some examples: "" -> "\" ` "\n" -> "\x0a" ";" -> "\x3b" ` +* `OSC 633 ; P ; = ST` - Set a property on the terminal, only known properties will be handled. Known properties: `Cwd` - Reports the current working directory to the terminal. `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. +* `Cwd` - Reports the current working directory to the terminal. +* `IsWindows` - Indicates whether the terminal is using a Windows backend like winpty or conpty. This may be used to enable additional heuristics as the positioning of the shell integration sequences are not guaranteed to be correct. Valid values are True and False. + +### Final Term shell integration + +AVAP TM Dev Studio supports Final Term's shell integration + sequences, which allow non-AVAP TM Dev Studio shell integration + scripts to work in AVAP TM Dev Studio. This results in a + somewhat degraded experience as it doesn't support as many features as{' '} + `OSC 633` . Here are the specific sequences that are supported: + +* `OSC 133 ; A ST` - Mark prompt start. +* `OSC 133 ; B ST` - Mark prompt end. +* `OSC 133 ; C ST` - Mark pre-execution. +* `OSC 133 ; D [; ] ST` - Mark execution finished with an optional exit code. + +### SetMark 'OSC 1337 ; SetMark ST' + +This sequence adds a mark to the left of the line it was triggered on and + also adds an annotation to the scroll bar: + +These marks integrate with command navigation to make them easy to + navigate to via ctrl/cmd+up and ctrl/cmd+down by default. + +## Common questions + +### When does automatic injection not work? + +There are several cases where automatic injection doesn't work, here + are some common cases: + +* `$PROMPT\_COMMAND` is in an unsupported format, changing it to point to a single function is an easy way to work around this. For example: prompt() { ` ` `printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.\*}" "${PWD/#$HOME/\~}" } PROMPT\_COMMAND=prompt ` +* Some shell plugins may disable AVAP TM Dev Studio's shell integration explicitly by unsetting{' '} `$VSCODE\_SHELL\_INTEGRATION` when they initialize. + +### Why are command decorations showing when the feature is disabled? + +The likely cause of this is that your system has shell integration for + another terminal installed that{' '} + + AVAP TM Dev Studio understands + + . If you don't want any decorations, you can hide them with the + following setting: + +```javascript +"terminal.integrated.shellIntegration.decorationsEnabled": never +``` + +Alternatively, you could remove the shell integration script from your + shell rc/startup script but you will lose access to command-aware features + like command navigation . + +### Why does the command decoration jump around on Windows? + +Windows uses an emulated pseudoterminal (pty) backend called + ConPTY. It works a little differently to a regular pty because it needs to + maintain compatibility with the Windows Console API. One of the impacts of + this is the pty handles rendering specially in such a way that the shell + integration sequences that identify the commands in the terminal buffer + may be misplaced. When the command jumps around it's typically after a + command has run, and AVAP TM Dev Studio's heuristics have + kicked in to improve the position of the command decorations. diff --git a/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md b/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md new file mode 100644 index 0000000..dc4d00b --- /dev/null +++ b/docs/developer.avapframework.com/75_Terminal_TERMINAL_TerminalBasics.md @@ -0,0 +1,587 @@ +AVAP TM Dev Studio includes a full featured integrated terminal + that starts at the root of your workspace. It provides integration with + the editor to support features like links and error detection. The + integrated terminal can run commands such as mkdir and git just like a + standalone terminal. + +You can open a terminal as follows: + +* From the menu, use the Terminal >{' '} New Terminal or View >{' '} Terminal menu commands. +* From the Command Palette {' '} `(Ctrl+Shift+P)` , use the{' '} View: Toggle Terminal command. +* In the Explorer, you can use the{' '} Open in Integrated Terminal context menu command to open a new terminal from a folder. +* To toggle the terminal panel, use the `Ctrl+`` keyboard shortcut. +* To create a new terminal, use the `Ctrl+Shift+`` keyboard shortcut. + +AVAP TM Dev Studio's terminal has additional functionality + called shell integration that tracks where commands are run with + decorations on the left of a command and in the scrollbar: + +## Terminal shells + +The integrated terminal can use various shells installed on your machine, + with the default being pulled from your system defaults. Shells are + detected and presented in the terminal profiles dropdown. + +You can learn more about configuring terminal shells in the terminal + profiles article. + +## Managing terminals + +The terminal tabs UI is on the right side of the terminal view. Each + terminal has an entry with its name, icon, color, and group decoration + (if any). + +Add terminal instances by selecting the + icon on the + top-right of the TERMINAL panel, selecting a profile from + the terminal dropdown, or by triggering the `Ctrl+Shift+` {' '} + command. This action creates another entry in the tab list associated with + that terminal. + +Remove terminal instances by hovering a tab and selecting the{' '} + Trash Can button, selecting a tab item and pressing + Delete, using Terminal: Kill the Active Terminal Instance {' '} + command, or via the right-click context menu. + +Navigate between terminal groups using focus next{' '} + `Ctrl+PageDown` and focus previous `Ctrl+PageUp` . + +Icons may appear to the right of the terminal title on the tab label when + a terminal's status changes. Some examples are a bell (macOS) + and for tasks, displaying a check mark when there are no errors and an X + otherwise. Hover the icon to read status information, which may contain + actions. + +### Groups (split panes) + +Place multiple terminals side-by-side and create a group by splitting a + terminal: + +* Hover over a entry in the list of terminals on the right and select the inline split button. +* Right-click the context menu and selecting the Split {' '} menu option. +* `Alt` and click on a tab, the + button, or the single tab on the terminal panel. +* Trigger the Ctrl+Shift+5 command. + +Navigate between terminals in a group by focusing the previous pane,{' '} + `Alt+Left` , or the next pane, `Alt+Right` . + +Dragging and dropping tabs in the list rearranges them. Dragging a tab + into the main terminal area allows moving a terminal from one group to + another. + +Moving a terminal into its own group can be done with the{' '} + Terminal: Unsplit Terminal command through the Command + Palette or in the right-click context menu. + +## Terminals in editor area + +You can open terminals in the editor area (terminal editors) with + the Terminal: Create New Terminal in Editor Area command, + the{' '} + Terminal: Create New Terminal in Editor Area to the Side {' '} + command, or by dragging a terminal from the terminal view into the editor + area. Terminal editors are presented like regular editor tabs: + +You can have terminal editors on either side or arranged in multiple + dimensions using the editor group layout system, e.g. PowerShell and WSL + terminals stacked to the right of file editors: + +The `terminal.integrated.defaultLocation` setting can change + the default `view` or `editor` area terminal + location. + +## Navigating the buffer + +The content in the terminal is called the buffer, with the section right + above the bottom viewport being called "scrollback". The amount + of scrollback kept is determined by the terminal.integrated.scrollback{' '} + setting and defaults to 1000 + lines. + +There are various commands available to navigate around the terminal + buffer: + +* Scroll up a line - `Ctrl+Alt+PageUp` +* Scroll down a line - `Ctrl+Alt+PageDown` +* Scroll up a page - `Shift+PageUp` +* Scroll down a page - `Shift+PageDown` +* Scroll to the top - `Ctrl+Home` +* Scroll to the bottom - `Ctrl+End` + +Command navigation is also available (see shell + integration): + +* Scroll to the previous command - `Ctrl+Up` +* Scroll to the next command - `Ctrl+Down` + +Scrolling will happen instantaneously, but can be configured to animate + over a short duration with the{' '} + `terminal.integrated.smoothScrolling` setting. + +## Links + +The terminal features sophisticated link detection with editor integration + and even extension contributed link handlers. Hover over a link to display + an underline, then hold the `Ctrl/Cmd` key and click. + +These built-in link handlers are used in the following priority order: + +* URIs/URLs: Links that look like URIs, such as{' '} `https://code.visualstudio.com` , vscode://path/to/file or{' '} `file://path/to/file` will open using the standard handler for the protocol. For example, `https` links will open the browser. + +* File links: Links to files that have been verified to exist on the system. These will open the file in a new editor tab and support many common line/column formats such as{' '} `file:1:2, file:line 1, column 2` . + +* Folder links: Links to folders are similar to file links but will open a new AVAP TM Dev Studio window at the folder. + +* Word links: Fallback link type that uses the{' '} `terminal.integrated.wordSeparators` setting. The setting defines word boundaries and make nearly all text into words. Activating a word link searches the workspace for the word. If there is a single result it will open, otherwise it will present the search results. Word links are considered "low confidence" and will not show an underline or tooltip unless you hold the `Ctrl` / `Cmd` key. They also have limited support for line and column suffixes. + +The Open Detected Link command ( + `Ctrl+Shift+O` ) can be used to access links via the + keyboard: + +### Extensions handling links + +Extensions can contribute link providers which allow the + extension to define what happens when clicked. An example of this is the + GitLens extension detecting Git branch links. + +### Keyboard accessibility + +Links are keyboard accessible through several commands that open links + based on the type of link. + +* Terminal: Open Last Local File Link - Opens the most recent local file link. No default keybinding. +* Terminal: Open Last URL link - Opens the most recent URI/URL link. No default keybinding. +* Terminal: Open Detected Link... - Opens a searchable Quick Pick with all detected links, including word links. The default keybinding is `Ctrl/Cmd+Shift+O` , which is the same as the{' '} Go to Symbol in Editor keyboard shortcut. + +## Copy & paste + +The keybindings for copy and paste follow platform standards: + +* Linux: `Ctrl+Shift+C` and `Ctrl+Shift+V` ; selection paste is available with `Shift+Insert` +* macOS: `Cmd+C` and `Cmd+V` +* Windows: `Ctrl+C` and `Ctrl+V` + +Copying is done automatically on selection when{' '} + `terminal.integrated.copyOnSelection` is enabled. + +By default, there is a warning when pasting multiple lines, which can be + disabled with the{' '} + `terminal.integrated.enableMultiLinePasteWarning` setting. This + is only done when the shell does not support "bracketed paste + mode". When that mode is enabled, the shell is indicating that it can + handle multiple line pasting. + +## Using the mouse + +### Right-click behavior + +The right-click behavior differs based on the platform: + +* Linux: Show the context menu. +* macOS: Select the word under the cursor and show the context menu. +* Windows: Copy and drop selection if there is a selection, otherwise paste. + +This can be configured using the terminal.integrated.rightClickBehavior + setting. The options are: + +* `default` - Show the context menu. +* `copyPaste` - Copy when there is a selection, otherwise paste. +* `paste` - Paste on right-click. +* `selectWord` - Select the word under the cursor and show the context menu. +* `nothing` - Do nothing and pass event to terminal. + +### Reposition the cursor with Alt + +`Alt` and left-click will reposition the cursor to underneath + the mouse. This works by simulating arrow keystrokes, which may not work + reliably for some shells or programs. This feature can be disabled with + the `terminal.integrated.altClickMovesCursor` setting. + +### Mouse events mode + +When applications running in the terminal turn on mouse events mode, such + as Vim mouse mode, mouse interaction is sent to the application instead of + the terminal. This means that clicking and dragging will no longer create + a selection. Terminal selection can be forced by holding the{' '} + `Alt` key on Windows and Linux, this can also be done with the{' '} + `Option` key on macOS but requires enabling the{' '} + `terminal.integrated.macOptionClickForcesSelection` setting + first. + +## Find + +The integrated terminal has find functionality that can be triggered with{' '} + `Ctrl+F` . + +## Run selected text + +To use the `runSelectedText` command, select text in an editor + and run the command{' '} + Terminal: Run Selected Text in Active Terminal via the{' '} + Command Palette `(Ctrl+Shift+P)` , the + terminal will attempt to run the selected text. If no text is selected in + the active editor, the entire line that the cursor is on will run in the + terminal. + +## Maximizing the terminal + +The terminal view can be maximized by clicking the maximize panel size + button with the upwards chevron icon. This will temporarily hide the + editors and maximize the panel. This is useful to temporarily focus on a + large amount of output. Some developers use AVAP TM Dev Studioe + as a standalone terminal by opening a new window, maximizing the panel, + and hiding the side bar. + +Note that the panel can only be maximized if its alignment option is set + to Center . + +## Select all + +There is a Terminal: Select All command, which is bound + to Cmd+A on macOS, but does not have a default keybinding on Windows and + Linux as it may conflict with shell hotkeys. To use `Ctrl+A` to + select all, add this custom keybinding: + +```javascript +{ + ` `"key": "ctrl+a", + ` `"command": "workbench.action.terminal.selectAll", + ` `"when": "terminalFocus && !isMac" + + }, +``` + +## Drag and drop file paths + +Dragging a file into the terminal will input the path into the terminal, + with escaping to match the active shell. + +## Automating terminals with tasks + +The Tasks feature can be used to automate the launching of terminals, for + example, the following `.vscode/tasks.json` file will launch a + Command Prompt and PowerShell terminal in a single terminal group when the + window starts: + +```javascript +{ + ` `"version": "2.0.0", + ` `"presentation": { + ` `"echo": false, + ` `"reveal": "always", + ` `"focus": false, + ` `"panel": "dedicated", + ` `"showReuseMessage": true + ` `}, + ` `"tasks": [` `{ + ` `"label": "Create terminals", + ` `"dependsOn": [` `"First", + ` `"Second" + ` `], + ` `// Mark as the default build task so cmd/ctrl+shift+b will + create them + ` `"group": { + ` `"kind": "build", + ` `"isDefault": true + ` `}, + ` `// Try start the task on folder open + ` `"runOptions": { + ` `"runOn": "folderOpen" + ` `} + ` `}, + ` `{ + ` `// The name that shows up in terminal tab + ` `"label": "First", + ` `// The task will launch a shell + ` `"type": "shell", + ` `"command": "", + ` `// Set the shell type + ` `"options": { + ` `"shell": { + ` `"executable": "cmd.exe", + ` `"args": [] + ` `} + ` `}, + ` `// Mark as a background task to avoid the spinner animation on + the terminal tab + ` `"isBackground": true, + ` `"problemMatcher": [], + ` `// Create the tasks in a terminal group + ` `"presentation": { + ` `"group": "my-group" + ` `} + ` `}, + ` `{ + ` `"label": "Second", + ` `"type": "shell", + ` `"command": "", + ` `"options": { + ` `"shell": { + ` `"executable": "pwsh.exe", + ` `"args": [] + ` `} + ` `}, + ` `"isBackground": true, + ` `"problemMatcher": [], + ` `"presentation": { + ` `"group": "my-group" + ` `} + ` `} + ` `] + + } +``` + +This file could be committed to the repository to share with other + developers or created as a user task via the{' '} + `workbench.action.tasks.openUserTasks` command. + +## Working directory + +By default, the terminal will open at the folder that is opened in the + Explorer. The `terminal.integrated.cwd` setting allows + specifying a custom path to open instead: + +```javascript +{ + ` `"terminal.integrated.cwd": "/home/user" + + } +``` + +Split terminals on Windows will start in the directory that the parent + terminal started with. On macOS and Linux, split terminals will inherit + the current working directory of the parent terminal. This behavior can be + changed using the `terminal.integrated.splitCwd` setting: + +```javascript +{ + ` `"terminal.integrated.splitCwd": "workspaceRoot" + + } +``` + +There are also extensions available that give more options such as{' '} + + Terminal Here + + . + +## Fixed dimension terminals + +The Terminal: Set Fixed Dimensions command allows + changing the number of columns and rows that the terminal and it's + backing pseudoterminal uses. This will add scroll bars when necessary, + which may lead to an unpleasant UX and is generally not recommended, but + it is a common ask on Windows in particular for reading logs or long lines + when paging tools aren't available. + +You can also right-click on a terminal tab and select{' '} + Toggle Size to Content Width `(Alt+Z)` {' '} + to resize the number of terminal columns to the largest wrapped line in + the terminal. + +## Next steps + +The basics of the terminal have been covered in this document. Read on to + find out more about: + +* Tasks - Tasks let you integrate with external tools and leverage the terminal heavily. +* Mastering AVAP TM Dev Studio's Terminal - An external blog with plenty of power user tips for the terminal. +* Explore terminal commands by browsing the keyboard shortcuts within AVAP TM Dev Studio ( Preferences: Open Keyboard Shortcuts then search on 'terminal'). + +## Common questions + +### I'm having problems launching the terminal + +There's a dedicated troubleshooting guide for these sorts of problems. + +### How do I create an Admin terminal? + +The integrated terminal shell is running with the permissions of AVAP + TM Dev Studio. If you need to run a shell command with elevated + (administrator) or different permissions, use platform utilities + such as `runas.exe` within a terminal. + +You can learn more about customizing terminals via terminal profiles in + Configuring Profiles. + +### Can I add a keyboard shortcut for the Explorer's Open in Integrated + Terminal command? + +You can open new terminals for specific folders from the Explorer via the{' '} + Open in Integrated Terminal context menu command. + +By default, there is no keyboard shortcut associated with{' '} + Open in Integrated Terminal but you can add your own via + the Keyboard Shortcuts editor `(Ctrl+K Ctrl+S)` to add + a keybinding to your keybindings.json. + +The `keybindings.json` example below adds the keyboard shortcut{' '} + `Ctrl+T` for openInTerminal. + +```javascript +{ + ` `"key": "ctrl+t", + ` `"command": "openInTerminal", + ` `"when": "filesExplorerFocus" + + } +``` + +### Why is nvm complaining about a prefix option when the integrated terminal + is launched? + +nvm (Node Version Manager) users often see this error for the + first time inside AVAP TM Dev Studio's integrated terminal: + +```javascript +nvm is not compatible with the npm config "prefix" option: currently set + to "/usr/local" + + Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.1 + --silent` to unset it +``` + +This is mostly a macOS problem and does not happen in external terminals. + The typical reasons for this are the following: + +* `npm` was globally installed using another instance of{' '} `node` that is somewhere in your path ( `such as /usr/local/bin/npm` ). +* To get the development tools on the `$PATH` , AVAP TM Dev Studio will launch a bash login shell on startup. This means that your ~/.bash_profile has already run and when an integrated terminal launches, it will run another login shell, reordering the $PATH potentially in unexpected ways. + +To resolve this issue, you need to track down where the old{' '} + `npm` is installed and remove both it and its out-of-date + node_modules. Find the `nvm` initialization script and run{' '} + `which npm` before it runs, which should print the path when + you launch a new terminal. + +Once you have the path to npm, find the old node_modules by resolving the + symlink by running a command something like this: + +```javascript +ls -la /usr/local/bin | grep "np[mx]" +``` + +This will give you the resolved path at the end: + +```javascript +... npm -> ../lib/node\_modules/npm/bin/npm-cli.js + + ... npx -> ../lib/node\_modules/npm/bin/npx-cli.js +``` + +From there, removing the files and relaunching AVAP TM Dev + Studio should fix the issue: + +```javascript +rm /usr/local/bin/npm /usr/local/lib/node\_modules/npm/bin/npm-cli.js + + rm /usr/local/bin/npx /usr/local/lib/node\_modules/npm/bin/npx-cli.js +``` + +### Why does macOS make a ding sound when I resize terminal split panes? + +The keybindings ⌃⌘← and ⌃⌘→ are the defaults for resizing individual split + panes in the terminal. While they work, they also cause a system + "invalid key" sound to play due to an issue in Chromium. The{' '} + + recommended workaround + {' '} + is to tell macOS to no-op for these keybindings by running this in your + terminal: + +```javascript +mkdir -p ~/Library/KeyBindings + + cat > ~/Library/KeyBindings/DefaultKeyBinding.dict <` setting. +* `icon` : An icon ID to use for the profile. +* `color` : A theme color ID to style the icon. + +The default profile can be defined manually with the{' '} + `terminal.integrated.defaultProfile.\*` settings. This should + be set to the name of an existing profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"my-pwsh": { + ` `"source": "PowerShell", + ` `"args": ["-NoProfile"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "my-pwsh" + + } +``` + +## Removing built-in profiles + +To remove a built-in profile and prevent it from showing up in the new + terminal dropdown, set the name of the profile to `null` . For + example, to remove the `Git Bash` profile on Windows, use this + setting: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Git Bash": null + ` `} + + } +``` + +## Configuring the task/debug profile + +By default, the task/debug features will use the default profile. This may + not be ideal if your default has a heavy PowerShell startup script or a + non-POSIX compliant shell for example. To configure a profile to be used + only in the debug/tasks features, use the{' '} + `terminal.integrated.automationProfile` . + `` setting: + +```javascript +{ + ` `"terminal.integrated.defaultProfile.osx": "fish", + ` `// Use a fully POSIX-compatible shell and avoid running a + complex ~/.config/fish/config.fish + ` `// for tasks and debug + ` `"terminal.integrated.automationProfile.osx": { + ` `"path": "/bin/sh" + ` `} + + } +``` + +## Unsafe profile detection + +Certain shells are installed in unsafe paths by default, like a path that + could be written to by another user on a Windows environment. AVAP + TM Dev Studio will still detect these but not expose them as a + proper profile until they have been explicitly configured via the{' '} + Terminal: Select Default Profile command. When + configuring an unsafe profile, there will be a warning before it's + added: + +## Cmder + +Cmder itself is a terminal, but you can use the [Cmder] shell in AVAP + TM Dev Studio with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"cmder": { + ` `"path": "C:\\WINDOWS\\System32\\cmd.exe", + ` `"args": ["/K", "C:\\cmder\\vendor\\bin\\vscode\_init.cmd"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "cmder" + + } +``` + +This profile should be picked up automatically when the{' '} + `CMDER\_ROOT` environment variable is set. It will also be + detected as an unsafe profile if installed at `C:\cmder` . You + may refer to Cmder's wiki for more information. + +## Cygwin + +Cygwin itself is a terminal, but you can use the Cygwin shell in AVAP + TM Dev Studio with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Cygwin": { + ` `"path": "C:\\cygwin64\\bin\\bash.exe", + ` `"args": ["--login"] + ` `} + ` `}, + ` `"terminal.integrated.defaultProfile.windows": "Cygwin" + + } +``` + +This profile should be detected automatically as an unsafe profile when + installed at the default paths `C:\cygwin` or + `C:\cygwin64` . + +## Git Bash + +A limitation of Git Bash when AVAP TM Dev Studio uses bash.exe + (the shell) as opposed to git-bash.exe (the terminal) is + that history will not be retained across shell sessions. You can work + around this by adding the following to your `~/.bashrc` a or{' '} + `~/.bash\_profile` files: + +```javascript +export PROMPT\_COMMAND='history -a' +``` + +This will cause the shell to call history -a whenever the prompt is + printed which flushes the session's current session commands to the + backing history file. + +## MSYS2 + +MSYS2's bash shell can be configured with the following profile: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"bash (MSYS2)": { + ` `"path": "C:\\msys64\\usr\\bin\\bash.exe", + ` `"args": ["--login", "-i"], + ` `"env": { "CHERE\_INVOKING": "1" } + ` `} + ` `} + + } +``` + +The `CHERE_INVOKING` environment variable is used to tell the + login initialization script to preserve the working directory, instead of + opening at `$HOME` . + +This profile should be detected automatically as an{' '} + unsafe profile when installed at + the default path `C:\\msys64` . + +## Windows PowerShell + +When PowerShell 6+ is installed, Windows PowerShell is not included in the + profiles list by default. To add Windows PowerShell as a profile, choose + the Select Default Profile option in the new terminal + dropdown and select the Windows PowerShell item. This will configure the + profile and set it as your default. + +## WSL + +When running AVAP TM Dev Studio on your local machine, Windows + Subsystem for Linux shells should be automatically detected. Depending on + your setup, this may be a nuisance if you have a lot of distros installed. + For finer control over the WSL profiles the automatic detection can be + disabled with the `terminal.integrated.useWslProfiles setting` , + then here's an example of how to manually configure a WSL shell: + +```javascript +{ + ` `"terminal.integrated.profiles.windows": { + ` `"Debian (WSL)": { + ` `"path": "C:\\WINDOWS\\System32\\wsl.exe", + ` `"args": [` `"-d", + ` `"Debian" + ` `] + ` `} + ` `} + + } +``` + +## Common questions + +### Why are there duplicate paths in the terminal's $PATH environment + variable and/or why are they reversed on macOS? + +This can happen on macOS because of how the terminal launches using AVAP + TM Dev Studio's environment. When AVAP TM Dev + Studio launches for the first time, to source your "development + environment," it launches your configured shell as a{' '} + login shell , which runs your{' '} + `~/.profile/~/.bash\_profile/~/.zprofile` scripts. Now when the + terminal launches, it also runs as a login shell, which will put the + standard paths to the front (for example,{' '} + `/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin` ) and + reinitialize your shell environment. + +To get a better understanding, you can simulate what is happening by + launching an inner login shell within your operating system's built-in + terminal: + +```javascript +\# Add /test to the beginning of $PATH + + export PATH=/test:$PATH + + \# Echo $PATH, /test should be at the beginning + + echo $PATH + + \# Run bash as a login shell + + bash -l + + \# Echo $PATH, the values should be jumbled + + echo $PATH +``` + +Unfortunately, unlike in Linux, standalone macOS terminals all run as + login shells by default, since macOS does not run a login shell when the + user logs into the system. This encourages "bad behavior," like + initializing aliases in your profile script when they should live in your{' '} + `rc` script as that runs on non-login shells. + +There are two direct fixes for this. The first is to set{' '} + `"terminal.integrated.inheritEnv": false` , which will + strip most environment variables from the terminal's environment, + except for some important ones (like `HOME` ,{' '} + `SHELL` , `TMPDIR` , etc.). + +The other fix is to no longer run a login shell in the terminal by + creating a terminal profile and setting its args to []. If you go with + this fix, you will want to make sure any aliases in your profile scripts + are moved over to your `~/.bashrc/~/.zshrc` file since aliases + only apply to the shell they're set in. diff --git a/docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md b/docs/developer.avapframework.com/76_Transacciones_Transacciones_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md b/docs/developer.avapframework.com/76_Transacciones_Transaction_search_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md b/docs/developer.avapframework.com/77_transferencia_Transferencias_masivas_de_dinero_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/78_unvault_unvault.md b/docs/developer.avapframework.com/78_unvault_unvault.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md new file mode 100644 index 0000000..a9e99b4 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE-BasicEditing.md @@ -0,0 +1,548 @@ +AVAP™ Dev Studio 2024 is an editor first and foremost, and includes the + features you need for highly productive source code editing. This topic + takes you through the basics of the editor and helps you get moving with + your code. + +## Keyboard shortcuts + +Being able to keep your hands on the keyboard when writing code is crucial + for high productivity. AVAP™ DS Code has a rich set of default keyboard + shortcuts as well as allowing you to customize them. + +* Keyboard Shortcuts Reference - Learn the most commonly used and popular keyboard shortcuts by downloading the reference sheet. +* Install a Keymap extension - Use the keyboard shortcuts of your old editor (such as Sublime Text, Atom, and Vim) in AVAP™ DS Code by installing a Keymap extension. +* Customize Keyboard Shortcuts - Change the default keyboard shortcuts to fit your style. + +## Multiple selections (multi-cursor) + +AVAP™ DS Code supports multiple cursors for fast simultaneous edits. You + can add secondary cursors (rendered thinner) with Alt+Click. Each + cursor operates independently based on the context it sits in. A common + way to add more cursors is with ⌥⌘↓ or ⌥⌘↑ that insert cursors below or + above. + +Note: Your graphics card driver (for example NVIDIA) might + overwrite these default shortcuts. + +IMAGEN + +`⌘D` selects the word at the cursor, or the next occurrence of + the current selection. + +IMAGEN + +### Multi-cursor modifier + +If you'd like to change the modifier key for applying multiple cursors + to Cmd+Click on macOS and Ctrl+Click on Windows and Linux, you can do so + with the editor.multiCursorModifier setting. This lets users coming from + other editors such as Sublime Text or Atom continue to use the keyboard + modifier they are familiar with. + +The setting can be set to: + +* ctrlCmd - Maps to Ctrl on Windows and Cmd on macOS. +* alt - The existing default Alt. + +There's also a menu item Use Ctrl+Click for Multi-Cursor in the + Selection menu to quickly toggle this setting. + +The Go to Definition and Open Link gestures will also respect this setting + and adapt such that they do not conflict. For example, when the setting is + ctrlCmd, multiple cursors can be added with Ctrl/Cmd+Click, and opening + links or going to definition can be invoked with Alt+Click. + +### Shrink/expand selection + +Quickly shrink or expand the current selection. Trigger it with ⌃⇧⌘← and + ⌃⇧⌘→. + +Here's an example of expanding the selection with ⌃⇧⌘→: + +IMAGEN + +## Column (box) selection + +Place the cursor in one corner and then hold Shift+Alt while dragging to + the opposite corner: + +IMAGEN + +Note: This changes to Shift+Ctrl/Cmd when using Ctrl/Cmd as multi-cursor + modifier. + +There are also default key bindings for column selection on macOS and + Windows, but not on Linux. + +You can edit your `keybindings.json` to bind them to something + more familiar if you want. + +The user setting Editor: Column Selection controls this feature. Once this + mode is entered, as indicated in the Status bar, the mouse gestures and + the arrow keys will create a column selection by default. This global + toggle is also accessible via the Selection > Column Selection Mode + menu item. In addition, one can also disable Column Selection mode from + the Status bar. + +## Save / Auto Save + +By default, AVAP™ DS requires an explicit action to save your changes to + disk, ⌘S. + +However, it's easy to turn on `Auto Save` , which will save + your changes after a configured delay or when focus leaves the editor. + With this option turned on, there is no need to explicitly save the file. + The easiest way to turn on `Auto Save` is with the** File > + Auto Save **toggle that turns on and off save after a delay. + +For more control over `Auto Save` , open User or Workspace + settings and find the associated settings: + +* files.autoSave: Can have the values: off - to disable auto save. afterDelay - to save files after a configured delay (default 1000 ms). onFocusChange - to save files when focus moves out of the editor of the dirty file. onWindowChange - to save files when the focus moves out of the AVAP™ DS window. +* off - to disable auto save. +* afterDelay - to save files after a configured delay (default 1000 ms). +* onFocusChange - to save files when focus moves out of the editor of the dirty file. +* onWindowChange - to save files when the focus moves out of the AVAP™ DS window. +* files.autoSaveDelay: Configures the delay in milliseconds when files.autoSave is configured to afterDelay. The default is 1000 ms. + +## Hot Exit + +AVAP™ DS will remember unsaved changes to files when you exit by default. + Hot exit is triggered when the application is closed via File > Exit + (Code > Quit on macOS) or when the last window is closed. + +You can configure hot exit by setting files.hotExit to the following + values: + +* "off": Disable hot exit. +* "onExit": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu). All windows without folders opened will be restored upon next launch. +* "onExitAndWindowClose": Hot exit will be triggered when the application is closed, that is when the last window is closed on Windows/Linux or when the workbench.action.quit command is triggered (from the Command Palette, keyboard shortcut or menu), and also for any window with a folder opened regardless of whether it is the last window. All windows without folders opened will be restored upon next launch. To restore folder windows as they were before shutdown, set window.restoreWindows to all. + +If something happens to go wrong with hot exit, all backups are stored in + the following folders for standard install locations: + +* Windows %APPDATA%\Code\Backups +* macOS $HOME/Library/Application Support/Code/Backups +* Linux $HOME/.config/Code/Backups + +### Find and Replace + +AVAP™ DS allows you to quickly find text and replace in the currently + opened file. Press ⌘F to open the Find Widget in the editor, search + results will be highlighted in the editor, overview ruler and minimap. + +If there are more than one matched result in the current opened file, you + can press Enter and ⇧Enter to navigate to next or previous result when the + find input box is focused. + +When the Find Widget is opened, it will automatically populate the + selected text in the editor into the find input box. If the selection is + empty, the word under the cursor will be inserted into the input box + instead. + +IMAGEN + +This feature can be turned off by setting{' '} + ` + editor.find.seedSearchStringFromSelection to "never". + ` + +By default, the find operations are run on the entire file in the editor. + It can also be run on selected text. You can turn this feature on by + clicking the hamburger icon on the Find Widget. + +IMAGEN + +If you want it to be the default behavior of the Find Widget, you can set{' '} + `editor.find.autoFindInSelection` to `always` , or to{' '} + `multiline` , if you want it to be run on selected text only + when multiple lines of content are selected. + +In addition to find and replace with plain text, the Find Widget also has + three advanced search options: + +* Match Case +* Match Whole Word +* Regular Expression + +The replace input box support case preserving, you can turn it on by + clicking the Preserve Case ( AB ) button. + +You can search multiple line text by pasting the text into the Find input + box and Replace input box. Pressing `Ctrl+Enter` inserts a new + line in the input box. + +IMAGEN + +While searching long text, the default size of Find Widget might be too + small. You can drag the left sash to enlarge the Find Widget or double + click the left sash to maximize it or shrink it to its default size. + +IMAGEN + +## Search across files + +AVAP™ DS allows you to quickly search over all files in the currently + opened folder. Press ⇧⌘F and enter your search term. Search results are + grouped into files containing the search term, with an indication of the + hits in each file and its location. Expand a file to see a preview of all + of the hits within that file. Then single-click on one of the hits to view + it in the editor. + +IMAGEN + +You can configure advanced search options by clicking the ellipsis + (Toggle Search Details) below the search box on the right (or + press ⇧⌘J). This will show additional fields to configure the search. + +### Advanced search options + +IMAGEN + +In the two input boxes below the search box, you can enter patterns to + include or exclude from the search. If you enter example, that will match + every folder and file named example in the workspace. If you enter + ./example, that will match the folder example/ at the top level of your + workspace. Use , to separate multiple patterns. Paths must use forward + slashes. You can also use glob pattern syntax, for example: + +* `*` to match zero or more characters in a path segment +* `?` to match on one character in a path segment +* `**` to match any number of path segments, including none +* `{}` to group conditions (for example { .html, .txt} matches all HTML and text files) +* `[]` to declare a range of characters to match (example.[0-9] to match on example.0, example.1, …) +* `[!...]` to negate a range of characters to match (example.[!0-9] to match on example.a, example.b, but not example.0) + +AVAP™ DS excludes some folders by default to reduce the number of search + results that you are not interested in (for example: + node_modules). Open settings to change these rules under the + files.exclude and search.exclude section. + +Note that glob patterns in the Search view work differently than in + settings such as files.exclude and search.exclude. In the settings, you + must use * + + /example to match a folder named example in subfolder folder1/example in + your workspace. In the Search view, the * + {' '} + prefix is assumed. The glob patterns in these settings are always + evaluated relative to the path of the workspace folder. + +Also note the Use Exclude Settings and Ignore Files toggle button in the + files to exclude box. The toggle determines whether to exclude files that + are ignored by your .gitignore files and/or matched by your files.exclude + and search.exclude settings. + +Tip: From the Explorer, you can right-click on a folder and select Find in + Folder to search inside a folder only. + +Search and replace You can also Search and Replace across files. Expand + the Search widget to display the Replace text box. + +search and replace + +When you type text into the Replace text box, you will see a diff display + of the pending changes. You can replace across all files from the Replace + text box, replace all in one file or replace a single change. + +search and replace diff view + +Tip: You can quickly reuse a previous search term by using ↓ and ↑ to + navigate through your search term history. + +Case changing in regex replace AVAP™ DS supports changing the case of + regex matching groups while doing Search and Replace in the editor or + globally. This is done with the modifiers \u\U\l\L, where \u and \l will + upper/lowercase a single character, and \U and \L will upper/lowercase the + rest of the matching group. + +Example: + +Changing case while doing find and replace + +The modifiers can also be stacked - for example, \u\u\u$1 will uppercase + the first three characters of the group, or \l\U$1 will lowercase the + first character, and uppercase the rest. The capture group is referenced + by $n in the replacement string, where n is the order of the capture + group. + +Search Editor Search Editors let you view workspace search results in a + full-sized editor, complete with syntax highlighting and optional lines of + surrounding context. + +Below is a search for the word 'SearchEditor' with two lines of + text before and after the match for context: + +Search Editor overview + +The Open Search Editor command opens an existing Search Editor if one + exists, or to otherwise create a new one. The New Search Editor command + will always create a new Search Editor. + +In the Search Editor, results can be navigated to using Go to Definition + actions, such as F12 to open the source location in the current editor + group, or ⌘K F12 to open the location in an editor to the side. + Additionally, double-clicking can optionally open the source location, + configurable with the search.searchEditor.doubleClickBehaviour setting. + +You can also use the Open New Search Editor button at the top of the + Search view, and can copy your existing results from a Search view over to + a Search Editor with the Open in editor link at the top of the results + tree, or the Search Editor: Open Results in Editor command. + +Search Editor Button + +The Search Editor above was opened by selecting the Open New Search Editor + button (third button) on the top of the Search view. + +Search Editor commands and arguments search.action.openNewEditor - Opens + the Search Editor in a new tab. search.action.openInEditor - Copy the + current Search results into a new Search Editor. + search.action.openNewEditorToSide - Opens the Search Editor in a new + window next to the window you currently have opened. There are two + arguments that you can pass to the Search Editor commands + (search.action.openNewEditor, search.action.openNewEditorToSide) + to allow keybindings to configure how a new Search Editor should behave: + +triggerSearch - Whether a search be automatically run when a Search Editor + is opened. Default is true. focusResults - Whether to put focus in the + results of a search or the query input. Default is true. For example, the + following keybinding runs the search when the Search Editor is opened but + leaves the focus in the search query control. + +{ "key": "ctrl+o", "command": + "search.action.openNewEditor", "args": { + "query": "AVAP™ DS", "triggerSearch": true, + "focusResults": false } } Search Editor context + default The search.searchEditor.defaultNumberOfContextLines setting has a + default value of 1, meaning one context line will be shown before and + after each result line in the Search Editor. + +Reuse last Search Editor configuration The + search.searchEditor.reusePriorSearchConfiguration setting (default is + false) lets you reuse the last active Search Editor's + configuration when creating a new Search Editor. + +IntelliSense We'll always offer word completion, but for the rich + languages, such as JavaScript, JSON, HTML, CSS, SCSS, Less, C# and + TypeScript, we offer a true IntelliSense experience. If a language service + knows possible completions, the IntelliSense suggestions will pop up as + you type. You can always manually trigger it with ⌃Space. By default, Tab + or Enter are the accept keyboard triggers but you can also customize these + key bindings. + +Tip: The suggestions filtering supports CamelCase so you can type the + letters which are upper cased in a method name to limit the suggestions. + For example, "cra" will quickly bring up + "createApplication". + +Tip: IntelliSense suggestions can be configured via the + editor.quickSuggestions and editor.suggestOnTriggerCharacters settings. + +JavaScript and TypeScript developers can take advantage of the npmjs type + declaration (typings) file repository to get IntelliSense for + common JavaScript libraries (Node.js, React, Angular). You can + find a good explanation on using type declaration files in the JavaScript + language topic and the Node.js tutorial. + +Learn more in the IntelliSense document. + +Formatting AVAP™ DS has great support for source code formatting. The + editor has two explicit format actions: + +Format Document (⇧⌥F) - Format the entire active file. Format + Selection (⌘K ⌘F) - Format the selected text. You can invoke these + from the Command Palette (⇧⌘P) or the editor context menu. + +AVAP™ DS has default formatters for JavaScript, TypeScript, JSON, HTML, + and CSS. Each language has specific formatting options (for example, + html.format.indentInnerHtml) which you can tune to your preference in + your user or workspace settings. You can also disable the default language + formatter if you have another extension installed that provides formatting + for the same language. + +"html.format.enable": false Along with manually invoking code + formatting, you can also trigger formatting based on user gestures such as + typing, saving or pasting. These are off by default but you can enable + these behaviors through the following settings: + +editor.formatOnType - Format the line after typing. editor.formatOnSave - + Format a file on save. editor.formatOnPaste - Format the pasted content. + Note: Not all formatters support format on paste as to do so they must + support formatting a selection or range of text. + +In addition to the default formatters, you can find extensions on the + Marketplace to support other languages or formatting tools. There is a + Formatters category so you can easily search and find formatting + extensions. In the Extensions view search box, type 'formatters' + or 'category:formatters' to see a filtered list of extensions + within AVAP™ DS + +Folding You can fold regions of source code using the folding icons on the + gutter between line numbers and line start. Move the mouse over the gutter + and click to fold and unfold regions. Use Shift + Click on the folding + icon to fold or unfold the region and all regions inside. + +Folding + +You can also use the following actions: + +Fold (⌥⌘[) folds the innermost uncollapsed region at the cursor. + Unfold (⌥⌘]) unfolds the collapsed region at the cursor. Toggle + Fold (⌘K ⌘L) folds or unfolds the region at the cursor. Fold + Recursively (⌘K ⌘[) folds the innermost uncollapsed region at the + cursor and all regions inside that region. Unfold Recursively (⌘K + ⌘]) unfolds the region at the cursor and all regions inside that + region. Fold All (⌘K ⌘0) folds all regions in the editor. Unfold + All (⌘K ⌘J) unfolds all regions in the editor. Fold Level X + (⌘K ⌘2 for level 2) folds all regions of level X, except the + region at the current cursor position. Fold All Block Comments (⌘K + ⌘/) folds all regions that start with a block comment token. Folding + regions are by default evaluated based on the indentation of lines. A + folding region starts when a line has a smaller indent than one or more + following lines, and ends when there is a line with the same or smaller + indent. + +Folding regions can also be computed based on syntax tokens of the + editor's configured language. The following languages already provide + syntax aware folding: Markdown, HTML, CSS, LESS, SCSS, and JSON. + +If you prefer to switch back to indentation-based folding for one (or + all) of the languages above, use: + +{' '} + "[html]": { "editor.foldingStrategy": + "indentation" }, Regions can also be defined by markers + defined by each language. The following languages currently have markers + defined: + +Language Start region End region Bat ::#region or REM #region ::#endregion + or REM #endregion C# #region #endregion C/C++ #pragma region #pragma + endregion CSS/Less/SCSS / #region / / #endregion / + Coffeescript #region #endregion F# //#region or (#_region) + //#endregion or (#_endregion) Java //#region or // + //#endregion or // + Markdown + + Perl5 #region or =pod #endregion or =cut PHP #region #endregion PowerShell + #region #endregion Python #region or # region #endregion or # endregion + TypeScript/JavaScript //#region //#endregion Visual Basic #Region #End + Region To fold and unfold only the regions defined by markers use: + +Fold Marker Regions (⌘K ⌘8) folds all marker regions. Unfold + Marker Regions (⌘K ⌘9) unfolds all marker regions. Fold selection + The command Create Manual Folding Ranges from Selection (⌘K ⌘,) + creates a folding range from the currently selected lines and collapses + it. That range is called a manual folding range that goes on top of the + ranges computed by folding providers. + +Manual folding ranges can be removed with the command Remove Manual + Folding Ranges (⌘K ⌘.). + +Manual folding ranges are especially useful for cases when there isn't + programming language support for folding. + +Indentation AVAP™ DS lets you control text indentation and whether + you'd like to use spaces or tab stops. By default, AVAP™ DS inserts + spaces and uses 4 spaces per Tab key. If you'd like to use another + default, you can modify the editor.insertSpaces and editor.tabSize + settings. + +```javascript +"editor.insertSpaces": true, + + "editor.tabSize": 4, +``` + +Auto-detection VS Code analyzes your open file and determines the + indentation used in the document. The auto-detected indentation overrides + your default indentation settings. The detected setting is displayed on + the right side of the Status Bar: + +auto detect indentation + +You can click on the Status Bar indentation display to bring up a dropdown + with indentation commands allowing you to change the default settings for + the open file or convert between tab stops and spaces. + +indentation commands + +Note: AVAP™ DS auto-detection checks for indentations of 2, 4, 6 or 8 + spaces. If your file uses a different number of spaces, the indentation + may not be correctly detected. For example, if your convention is to + indent with 3 spaces, you may want to turn off editor.detectIndentation + and explicitly set the tab size to 3. + +```javascript +"editor.detectIndentation": false, + + "editor.tabSize": 3, +``` + +File encoding support Set the file encoding globally or per workspace by + using the files.encoding setting in User Settings or Workspace Settings. + +files.encoding setting + +You can view the file encoding in the status bar. + +Encoding in status bar + +Click on the encoding button in the status bar to reopen or save the + active file with a different encoding. + +Reopen or save with a different encoding + +Then choose an encoding. + +Select an encoding + +Next steps You've covered the basic user interface - there is a lot + more to AVAP™ DS. Read on to find out about: + +Intro Video - Setup and Basics - Watch a tutorial on the basics of AVAP™ + DS. User/Workspace Settings - Learn how to configure AVAP™ DS to your + preferences through user and workspace settings. Code Navigation - Peek + and Goto Definition, and more. Integrated Terminal - Learn about the + integrated terminal for quickly performing command-line tasks from within + AVAP™ DS. IntelliSense - AVAP™ DS brings smart code completions. Debugging + - This is where AVAP™ DS really shines. Common questions Is it possible to + globally search and replace? Yes, expand the Search view text box to + include a replace text field. You can search and replace across all the + files in your workspace. Note that if you did not open AVAP™ DS on a + folder, the search will only run on the currently open files. + +global search and replace + +How do I turn on word wrap? You can control word wrap through the + editor.wordWrap setting. By default, editor.wordWrap is off but if you set + to it to on, text will wrap on the editor's viewport width. + +```javascript +"editor.wordWrap": "on" +``` + +You can toggle word wrap for the AVAP™ DS session with ⌥Z. + +You can also add vertical column rulers to the editor with the + editor.rulers setting, which takes an array of column character positions + where you'd like vertical rulers. + +As in other editors, commands such as Cut and Copy apply to the whole + wrapped line. Triple-click selects the whole wrapped line. Pressing Home + twice moves the cursor to the very beginning of the line. Pressing End + twice moves the cursor to the very end of the line. + +How can I avoid placing extra cursors in word wrapped lines? If you'd + like to ignore line wraps when adding cursors above or below your current + selection, you can pass in { "logicalLine": true } to + args on the keybinding like this: + +{ "key": "shift+alt+down", "command": + "editor.action.insertCursorBelow", "when": + "textInputFocus", "args": { + "logicalLine": true }, }, { "key": + "shift+alt+up", "command": + "editor.action.insertCursorAbove", "when": + "textInputFocus", "args": { + "logicalLine": true }, }, diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md new file mode 100644 index 0000000..0676be8 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_AVAPforTheWeb.md @@ -0,0 +1,317 @@ +AVAP TM Dev Studio for the Web provides a free, zero-install + Microsoft AVAP TM Dev Studio experience running entirely in your + browser, allowing you to quickly and safely browse source code + repositories and make lightweight code changes. To get started, go to + (link) in your browser. + +AVAP TM Dev Studio for the Web has many of the features of AVAP + TM Dev Studio Desktop that you love, including search and + syntax highlighting while browsing and editing, along with extension + support to work on your codebase and make simpler edits. In addition to + opening repositories, forks, and pull requests from source control + providers like GitHub and Azure Repos, you can also work with code that is + stored on your local machine. + +AVAP TM Dev Studio for the Web runs entirely in your web + browser, so there are certain limitations compared to the desktop + experience, which you can read more about below. + +## Relationship to AVAP™ Dev Studio Desktop + +AVAP TM Dev Studio for the Web provides a browser-based + experience for navigating files and repositories and committing + lightweight code changes. However, if you need access to a runtime to run, + build, or debug your code, you want to use platform features such as a + terminal, or you want to run extensions that aren't supported in the + web, we recommend moving your work to the desktop application, GitHub + Codespaces, or using Remote - Tunnels for the full capabilities of AVAP + TM Dev Studio. In addition, AVAP TM Dev Studio + Desktop lets you use a full set of keyboard shortcuts not limited by your + browser. + +When you're ready to switch, you'll be able to "upgrade" + to the full AVAP TM Dev Studio experience with a few clicks. + +You can also switch between the Stable and Insiders versions of AVAP + TM Dev Studio for the Web by selecting the gear icon, then{' '} + Switch to Insiders Version... , or by navigating directly + to (LINK). + +## Opening a project + +By navigating to (LINK), you can create a new local file or + project, work on an existing local project, or access source code + repositories hosted elsewhere, such as on GitHub and Azure Repos (part + of Azure DevOps). + +You can create a new local file in the web just as you would in a AVAP + TM Dev Studio Desktop environment, using File {' '} + > New File from the Command Palette (F1). + +## GitHub repos + +You can open a GitHub repository in AVAP TM Dev Studio for the + Web directly from a URL, following the schema: (LINK). Using the + AVAP TM Dev Studio repository as an example, this would look + like: (LINK). + +This experience is delivered at a custom (LINK) URL, which is + powered by the GitHub Repositories extension (which is part of the + broader Remote Repositories extension). + +GitHub Repositories allows you to remotely browse and edit a repository + from within the editor, without needing to pull code onto your local + machine. You can learn more about the extension and how it works in our + GitHub Repositories guide. + +You can also open GitHub repositories in `vscode.dev` through + your browser's search bar (aka omnibox) by installing the{' '} + `vscode.dev` extension for Chrome and Edge. Then, type code to + activate the omnibox, followed by your repository's name. Suggestions + are populated by your browser search history, so if the repo you want + doesn't come up, you can also type in the fully qualified{' '} + `/` name to open it, for example{' '} + `microsoft/vscode` . + +If you're already in AVAP TM Dev Studio for the Web at + (LINK), you can alternatively navigate to different repos via the + Remote Repositories extension commands. Select the remote indicator in the + lower left of the Status bar, and you'll be presented with the{' '} + Open Remote Repository... command. + +## Azure Repos + +You can open Azure Repos just like Github repos in AVAP TM Dev + Studio for the Web. + +When you navigate to a URL with the schema (LINK), you will be + able to read, search the files in the repo, and commit your changes to + Azure Repos. You can fetch, pull, and sync changes, and view branches. + +You can open any repository, branch, or tag from Azure Repos in AVAP + TM Dev Studio for the Web by prefixing `vscode.dev` {' '} + to the Azure Repos URL. + +Alternatively, when you are on an Azure DevOps repository or pull request, + you can press (.) to open it in AVAP TM Dev Studio for + the Web. + +## More custom URLs + +Like in the desktop, you can customize AVAP TM Dev Studio for + the Web through a rich ecosystem of extensions that support just about + every back end, language, and service. `vscode.dev` includes + URLs that provide shortcuts to common experiences. + +We've explored a couple of URLs already (LINK and LINK). + Here's a more complete list: + +Please note that some URLs must be entered in a specific way (for + example, (LINK) requires an active Live Share session). Please + review each service's documentation for specific access and usage + information. + +There's more information on some of these URLs below. + +### Themes + +You can share and experience color themes through AVAP TM Dev + Studio for the Web through the URL schema: (LINK). + +For instance, you can go to (LINK) to experience the Night Owl + theme without having to go through the download and install process. + +Note: The color theme URL schema works for themes that are fully + declarative (no code). + +An extension can define multiple themes. You can use the schema{' '} + `/editor/theme//` . If no + themeName is specified, AVAP TM Dev Studio for the Web will take + the first theme. + +As a theme author, you can add the following badge to your extension + readme to allow users to easily try out your theme in AVAP TM {' '} + Dev Studio for the Web (replacing `` {' '} + with your theme extension's unique identifier): + +### Visual Studio Live Share + +Live Share guest sessions are available in the browser through the + (LINK) URL. The sessionId will be passed to the extension to make + joining a seamless experience. + +## Continue working in a different environment + +In some cases, you will want to access a different environment that has + the ability to run code. You can switch to working on a repository in a + development environment that has support for a local file system and full + language and development tooling. + +The GitHub Repositories extension makes it easy for you to clone the + repository locally, reopen it on the desktop, or create a GitHub codespace + for the current repository (if you have the GitHub Codespaces + extension installed and access to create GitHub codespaces). To do + this, use the Continue Working On... command available + from the Command Palette (F1) or click on the Remote indicator in + the Status bar. + +## Saving and sharing work + +When working on a local file in the web, your work is saved automatically + if you have Auto Save enabled. You can also save manually as you do when + working in desktop AVAP TM Dev Studio (for example{' '} + File > Save ). + +When working on a remote repository, your work is saved in the + browser's local storage until you commit it. If you open a repo or + pull request using GitHub Repositories, you can push your changes in the + Source Control view to persist any new work. + +You can also continue working in other environments via Continue Working + On. + +The first time that you use Continue Working On with + uncommitted changes, you will have the option to bring your edits to your + selected development environment using Cloud Changes , + which uses a AVAP TM Dev Studio service to store your pending + changes. This is described further in the GitHub Repositories doc. + +## Use your own compute with Remote Tunnels + +You may develop against another machine in AVAP TM Dev Studio + for the Web using the Remote - Tunnels extension. + +The Remote - Tunnels extension lets you connect to a remote machine, like + a desktop PC or virtual machine (VM), via a secure tunnel. You can + then securely connect to that machine from anywhere, without the + requirement of SSH. This lets you "bring your own compute" to + vscode.dev, enabling additional scenarios like running your code in the + browser. + +You may learn more about Remote - Tunnels in its documentation. + +## Safe exploration + +AVAP TM Dev Studio for the Web runs entirely in your web + browser's sandbox and offers a very limited execution environment. + +When accessing code from remote repositories, the web editor doesn't + "clone" the repo, but instead loads the code by invoking the + services' APIs directly from your browser; this further reduces the + attack surface when cloning untrusted repositories. + +When working with local files, AVAP TM Dev Studio for the Web + loads them through your browser's file system access APIs, which limit + the scope of what the browser can access. + +## Run anywhere + +Similar to GitHub Codespaces, AVAP TM Dev Studio for the Web can + run on tablets, like iPads. + +## Language support + +Language support is a bit more nuanced on the web, including code editing, + navigation, and browsing. The desktop experiences are typically powered by + language services and compilers that expect a file system, runtime, and + compute environment. In the browser, these experiences are powered by + language services running in the browser that provide source code + tokenization and syntax colorization, completions, and many single-file + operations. + +Generally, experiences fall into the following categories: + +* Good: For most programming languages, AVAP TM {' '} Dev Studio for the Web gives you code syntax colorization, text-based completions, and bracket pair colorization. Using a Tree-sitter syntax tree through the anycode extension, we're able to provide additional experiences such as Outline/Go to Symbol and{' '} Symbol Search for popular languages such as C/C++, C#, Java, PHP, Rust, and Go. +* Better: The TypeScript, JavaScript, and Python experiences are all powered by language services that run natively in the browser. With these programming languages, you'll get the " Good " experience plus rich single file completions, semantic highlighting, syntax errors, and more. +* Best: For many "webby" languages, such as JSON, HTML, CSS, and LESS, etc., the coding experience in vscode.dev is nearly identical to the desktop (including Markdown preview!). + +You can determine the level of language support in your current file + through the Language Status Indicator in the Status bar: + +## Limitations + +Since AVAP TM Dev Studio for the Web runs completely within the + browser, some experiences will naturally be more constrained when compared + to what you can do in the desktop app. For example, the terminal and + debugger are not available, which makes sense since you can't compile, + run, and debug a Rust or Go application within the browser sandbox. + +### Extensions + +Only a subset of extensions can run in the browser. You can use the + Extensions view to install extensions in the web, and extensions that + cannot be installed will have a warning icon and{' '} + Learn Why link. We expect more extensions to become + enabled over time. + +When you install an extension, it is saved in the browser's local + storage. You can ensure your extensions are synced across AVAP + TM Dev Studio instances, including different browsers and even + the desktop, by enabling Settings Sync. + +When an Extension Pack contains extensions that do not run in the browser + sandbox, you will get an informational message with the option to see the + extensions included in the pack. + +When extensions are executed in the browser sandbox, they are more + restricted. Extensions that are purely declarative, such as most themes, + snippets, or grammars, can run unmodified and are available in AVAP + TM Dev Studio for the Web without any modification from the + extension authors. Extensions that are running code need to be updated to + support running in the browser sandbox. You can read more about what is + involved to support extensions in the browser in the web extension authors + guide. + +There are also extensions that run in the browser with partial support + only. A good example is a language extension that restricts its support to + single files or the currently opened files. + +Edge and Chrome today support the File System API, allowing web pages to + access the local file system. If your browser does not support the File + System API, you cannot open a folder locally, but you can open files + instead. + +You can use AVAP TM Dev Studio for the Web in the latest + versions of Chrome, Edge, Firefox, and Safari. Older versions of each + browser may not work - we only guarantee support for the latest version. + +Tip: One way to check the compatible browser version is + to look at the version of Playright currently used for testing AVAP + TM Dev Studio and review its supported browser versions. You + can find the currently used Playwright version in the AVAP TM {' '} + Dev Studio repo's package.json file at + devDependencies/@playwright/test. Once you know the Playwright version, + for example 1.37, you can then review the{' '} + Browser Versions section in their Release notes. + +Webviews might appear differently or have some unexpected behavior in + Firefox and Safari. You can view issue queries in the AVAP TM {' '} + Dev Studio GitHub repo to track issues related to specific browsers, such + as with the Safari label and Firefox label. + +There are additional steps you can take to improve your browser experience + using AVAP TM Dev Studio for the Web. Review the Additional + browser setup section for more information. + +You can use AVAP TM Dev Studio for the Web on mobile devices, + but smaller screens may have certain limitations. + +Certain keybindings may also work differently in the web. + +## Additional browser setup + +There are additional browser configuration steps you can take when working + with AVAP TM Dev Studio in a browser. + +In certain cases, you may need to open a new tab or window while working + in AVAP TM Dev Studio for the Web. AVAP TM Dev Studio + might ask you for permission to access the clipboard when reading from it. + Depending on your browser, you may grant access to the clipboard or + otherwise allow for pop-up windows in different ways: + +* Chrome, Edge, Firefox: Search for "site permissions" in your browser's settings, or look for the following option in the address bar on the right: + +![Allow clipboard access in the browser][Type in your browser and search a + GitHub repository to open in vscode.dev] + +* Safari: In the Safari browser, go to Preferences... {' '} > Websites > Pop-up Windows > the domain you're accessing (for example, vscode.dev), and select Allow from the dropdown. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md new file mode 100644 index 0000000..426c697 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Accesibility.md @@ -0,0 +1,362 @@ +AVAP TM Dev Studio has many features to help make the editor + accessible to all users. Zoom levels and High Contrast colors improve + editor visibility, keyboard-only navigation supports use without a mouse, + and the editor is optimized for screen readers. + +## Zoom + +You can adjust the zoom level in AVAP TM Dev Studio with the{' '} + View > Appearance >{' '} + Zoom commands. Each Zoom command + increases or decreases the zoom level by 20 percent. + +* View > Appearance >{' '} Zoom In (Ctrl+=) - increase the zoom level. +* View > Appearance >{' '} Zoom Out (Ctrl+-) - decrease the zoom level. +* View > Appearance >{' '} Reset Zoom (Ctrl+Numpad0) - reset the zoom level to 0. + +### Persisted zoom level + +When you adjust the zoom level with the View >{' '} + Zoom In / Out commands, the zoom level is persisted in + the `window.zoomLevel` setting. The default value is 0 and each + increment/decrement changes the zoom level by 20 percent. + +## Accessibility help + +The command Open Accessibility Help Alt+F1 opens a help + menu based on the current context. It currently applies to the editor, + terminal, notebook, chat view, and inline chat features. + +You can dismiss the accessibility help menu or open additional + documentation from within the help menu. + +## High Contrast theme + +AVAP TM Dev Studio supports a High Contrast color theme on all + platforms. Use File > Preferences {' '} + > Theme > Color Theme (Ctrl+K + Ctrl+T) to display the Select Color Theme dropdown + and select the High Contrast theme. + +## Color vision accessibility + +You can search for extensions in{' '} + AVAP™ Dev Studio Marketplace that are compatible with + color vision deficiency. Use the Extensions view Ctrl+Shift+X and search + for "color blind" to populate relevant options. + +Once you have installed a color theme from the Marketplace, you can change + the color theme with File >{' '} + Preferences > Theme >{' '} + Color Theme Ctrl+K Ctrl+T. + +### Recommended themes for color vision accessibility + +* GitHub - Accessible to most forms of color blindness and matches the themes in GitHub's settings. +* Gotthard - Optimized for approximately 20 programming languages. +* Blinds - Created for people with deuteranopia, featuring a high contrast color ratio. +* Greative - Considers both color blindness and light sensitivity. +* Pitaya Smoothie - Accessible to most forms of color blindness and compliant with WCAG 2.1 criteria for color contrast. + +## Customizing warning colors + +The default Color Theme for AVAP TM Dev Studio is{' '} + Dark+ . However, you can customize both the theme and + property colors in the user interface. + +To customize the error and warning squiggles, go to File {' '} + > Preferences > Settings for user + settings. Search for "color customizations" to find the{' '} + Workbench: Color Customizations setting, and open your + user settings.json file by selecting{' '} + Edit in settings.json . + +In your `settings.json` file, nest the following code inside + the outermost curly braces. You can assign a color to each object by + entering a hex code. + +```javascript +"workbench.colorCustomizations": { + ` `"editorError.foreground": "#ffef0f", + ` `"editorWarning.foreground": "#3777ff" + + } +``` + +In the following example, the warning color is applied when a comma is + missing after a JSON item. + +* `editorError.foreground` - Overrides the wavy line beneath an error. +* `editorWarning.foreground` - Overrides the wavy line beneath a warning. +* `editorError.background` - Overrides the highlight color of an error. +* `editorWarning.background` - Overrides the highlight color of a warning. + +Assigning a color to the background of `editorError` and + editorWarning also helps to identify potential issues. The color that you + choose will highlight the respective error or warning. The colors shown in + the preceding example, `#ffef0f` (yellow) and{' '} + `#37777ff` (blue), are more accessible to individuals + with common forms of color vision deficiencies. + +### Selecting accessible colors + +The accessibility of colors is subjective to the type of anomalous + trichromacy (color blindness). The level of severity ranges per + person and can be divided into four condition types: + +One of the best approaches to selecting the best colors for a specific + condition is to apply complementary colors. These are colors located + opposite of one another on a color wheel. + +Note : For more information on finding complementary + colors, access the color blind simulator and interactive color wheel at + Adobe Color. + +## Dim unfocused editors and terminals + +Unfocused views can be dimmed to make it clearer where typed input will + go. This is especially useful when working with multiple editor groups or + terminals. Turn on this feature by setting " + `accessibility.dimUnfocused.enabled` ": `true` . + You can control the dimness level with{' '} + `accessibility.dimUnfocused.opacity,` which takes the opacity + fraction from 0.2 to 1 (default 0.75). + +## Keyboard navigation + +AVAP TM Dev Studio provides an exhaustive list of commands in + the Command Palette (Ctrl+Shift+P) so that you + can use AVAP TM Dev Studio without a mouse. Press Ctrl+Shift+P, + then type a command name (for example 'git') to filter the + list of commands. + +AVAP TM Dev Studio also has many preset keyboard shortcuts for + commands. + +You can also set your own keyboard shortcuts. File >{' '} + Preferences > Keyboard Shortcuts {' '} + (Ctrl+K Ctrl+S) opens the Keyboard Shortcuts editor, where you can + discover and modify key bindings for AVAP TM Dev Studio actions. + See Key Bindings for more details on customizing or adding your own + keyboard shortcuts. + +For quick navigation across the workbench, we recommend using{' '} + Focus Next Part (F6) and{' '} + Focus Previous Part (Shift+F6) commands. + +### Anchor selection + +To make it easier to start and end selections with the keyboard, there are + four commands: Set Selection Anchor (Ctrl+K + Ctrl+B), Select From Anchor to Cursor (Ctrl+K + Ctrl+K), Cancel Selection Anchor (Escape) and{' '} + Go to Selection Anchor . + +## Tab navigation + +You can use the Tab key to navigate between UI controls in AVAP + TM Dev Studio. Use Shift+Tab to tab in reverse order. As you + tab through the UI controls, an indicator will appear around each UI + element when it has focus. + +All elements in the workbench support tab navigation. To avoid having too + many tab stops, workbench toolbars and tab lists each have only one. Once + a toolbar or a tab list has focus, you can use the arrow keys to navigate + within them. + +## Tab trapping + +By default, pressing Tab within a source code file inserts the Tab + character (or spaces depending on your indentation setting) and + does not leave the open file. You can toggle Tab trapping with Ctrl+M, and + subsequent Tab keys will move focus out of the file. When default Tab + trapping is off, you will see a Tab moves focus indicator + in the Status Bar. + +Tab trapping also exists in the integrated terminal. The default behavior + for the feature can be configured with `editor.tabFocusMode` . + +You can also toggle Tab trapping on and off from the{' '} + Command Palette (Ctrl+Shift+P) with the{' '} + Toggle Tab Key Moves Focus action. + +Read-only files never trap the Tab key. The{' '} + Integrated Terminal panel respects the Tab trapping mode + and can be toggled with Ctrl+M. + +## Screen readers + +AVAP TM Dev Studio supports screen readers in the editor using a + strategy based on text pagination. The following screen readers have been + tested: + +* Windows: NVDA and JAWS +* macOS: VoiceOver +* Linux: Orca + +For NVDA, we recommend that you stay in focus mode and use the hotkeys to + navigate, instead of using browse mode. + +The Go to Next/Previous Error or Warning actions (F8 + and Shift+F8) allow screen readers to announce the error and warning + messages. + +When suggestions pop up, they are announced to screen readers. Navigate + the suggestions using Ctrl+Up and Ctrl+Down and dismiss them with + Shift+Escape. If suggestions get in your way, you can turn them off with + the `editor.quickSuggestions setting` . + +In the diff view pane, the Go to Next/Previous Difference {' '} + actions (F7 and Shift+F7) will show the Accessible Diff Viewer + with diffs presented in a unified patch format. Navigate through the + unchanged, inserted, or deleted lines with Up and Down. Press Enter to + return focus to the modified pane of the diff editor at the selected line + number (or the closest line number that still exists, if a deleted + line is selected). Use Escape or Shift+Escape to dismiss the + Accessible Diff Viewer. + +## Accessible View + +Run the command Open Accessible View Alt+F2 to display an + Accessible View to inspect content character by character, line by line. + The Accessible View is currently available for hovers, notifications, + Jupyter notebook output, and chat responses. + +## Screen reader mode + +When AVAP TM Dev Studio detects that a screen reader is being + used, it goes into an optimized screen reader mode for UI such as the + editor and Integrated Terminal. The Status bar will display{' '} + Screen Reader Optimized in the lower right. You can exit + screen reader mode by clicking on the display text or using the{' '} + Toggle Screen Reader Accessibility Mode command. + +Some features, such as folding and minimap (code overview), are + disabled when in screen reader mode. You can control whether AVAP + TM Dev Studio uses screen reader mode with the{' '} + Editor: Accessibility Support setting ( + `editor.accessibilitySupport` ) and the values are on, off, + or the default auto that automatically detects a screen reader through + querying the platform. + +## Input control and result navigation + +Navigating between an input control (for example, search or filter + input) and its results is consistent across the Extensions view, the + Keyboard Shortcuts editor, and the Comments, Problems, and Debug Console + panels using (Ctrl+Down) and (Ctrl+Up). + +## Terminal accessibility + +You can display terminal accessibility help via Alt+F1, which describes + useful tips when using a screen reader. One tip is to use Alt+F2 to access + the buffer in the terminal. This will automatically enter the screen + reader's browse mode, depending on your screen reader, for an + accessible view of the entire terminal buffer. + +Use `editor.tabFocusMode` to control whether the terminal + receives the Tab key instead of the workbench, similar to the editor. + +### Shell integration + +The terminal has a feature called shell integration that enables many + additional features that are not found in other terminals. When using a + screen reader, the Run Recent Command and Go to Recent Directory features + are particularly useful. + +Another shell integration powered command,{' '} + Go to Symbol in Accessible View (Ctrl+Shift+O), + lets you navigate between terminal commands similar to{' '} + Go to Symbol in Editor... navigation in the editor. + +### Minimum contrast ratio + +Set `terminal.integrated.minimumContrastRatio` to a number + between 1 and 21 to adjust text color luminance until the desired contrast + ratio is met or pure white ( `#FFFFFF` ) black ( + `#000000` ) is hit. + +Note that the `terminal.integrated.minimumContrastRatio` {' '} + setting will not apply to `powerline` characters. + +## Status bar accessibility + +Once focus is in the Status bar via Focus Next Part {' '} + (F6), you can use arrow navigation to move focus between Status + bar entries. + +### Diff editor accessibility + +There is an Accessible Diff Viewer in the Diff editor that presents + changes in a unified patch format. You can navigate between changes with{' '} + Go to Next Difference (F7) and{' '} + Go to Previous Difference (Shift+F7). Navigate + lines with the arrow keys and press Enter to jump back in the Diff editor + and the selected line. + +## Debugger accessibility + +The AVAP TM Dev Studio debugger UI is user accessible and has + the following features: + +* Debug state changes are read out (for example, 'started', 'breakpoint hit', 'terminated', ...). +* All debug actions are keyboard accessible. +* Both the Run and Debug view and Debug Console support Tab navigation. +* Debug hover is keyboard accessible (Ctrl+K Ctrl+I). +* Keyboard shortcuts can be created to set focus to each debugger area. + +## Audio Cues + +Audio cues indicate if the current line has certain markers such as: + errors, warnings, breakpoints, folded text regions or inline suggestions. + +They are played when the primary cursor changes its line or the first time + a marker is added to the current line. Audio cues are enabled + automatically when a screen reader is attached, but can also be controlled + by the settings `audioCues.\*` . + +The command Help: List Audio Cues lists all available + audio cues, lets you hear each audio cue as you move through the list, and + review which cues are currently enabled. + +Aria alerts also inform screen reader and braille users that certain + markers have been hit. The command Help: List Alerts {' '} + lists all available alerts and informs the user of which are available and + which are enabled. + +## Hover accessibility + +Some hovers cannot be hovered normally, which makes them hard to use with + screen magnifiers. To work around this, hold the `Alt` or{' '} + `Option` key while a hover is active to "lock" it in + place so that it won't hide when hovered. Release the key to unlock + the hover. + +## Current known issues + +AVAP TM Dev Studio has some known accessibility issues, + depending on the platform. For the full list, go to AVAP TM Dev + Studio accessibility issues. + +### macOS + +The editor includes screen reader support for VoiceOver. + +### Linux + +AVAP TM Dev Studio works well with the Orca screen reader. If + Orca in your Linux distribution does not read the editor content: + +* Make sure to have the setting " `editor.accessibilitySupport` ": "on" in AVAP TM Dev Studio. You can do this using settings, or by running the Show Accessibility Help command and pressing Ctrl+E to turn on accessibilitySupport. +* If Orca is still silent, try setting{' '} `ACCESSIBILITY\_ENABLED=1` as an environment variable. + +After you enable that setting, AVAP TM Dev Studio should work + with the Orca screen reader. + +## Next steps + +Read on to find out about: + +* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md new file mode 100644 index 0000000..ac09f6e --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CodeNavigation.md @@ -0,0 +1,288 @@ +AVAP™ Dev Studio has a high productivity code editor which, when combined + with programming language services, gives you the power of an IDE and the + speed of a text editor. In this topic, we'll first describe AVAP™ DS + Code's language intelligence features (suggestions, parameter + hints, smart code navigation) and then show the power of the core text + editor. + +## Quick file navigation + +The Explorer is great for navigating between files when you are exploring + a project. However, when you are working on a task, you will find yourself + quickly jumping between the same set of files. AVAP™ DS Code provides two + powerful commands to navigate in and across files with easy-to-use key + bindings. + +Hold Ctrl and press Tab to view a list of all files open in an editor + group. To open one of these files, use Tab again to pick the file you want + to navigate to, then release Ctrl to open it. + +Alternatively, you can use Alt+Left and Alt+Right to navigate between + files and edit locations. If you are jumping around between different + lines of the same file, these shortcuts allow you to navigate between + those locations easily. + +## Breadcrumbs + +The editor has a navigation bar above its contents called{' '} + + Breadcrumbs + + . It shows the current location and allows you to quickly navigate between + folders, files, and symbols. + +Breadcrumbs always show the file path and, with the help of language + extensions, the symbol path up to the cursor position. The symbols shown + are the same as in Outline view and Go to Symbol. + +Selecting a breadcrumb in the path displays a dropdown with that + level's siblings so you can quickly navigate to other folders and + files. + +If the current file type has language support for symbols, you will see + the current symbol path and a dropdown of other symbols at the same level + and below. + +You can turn off breadcrumbs with the View >{' '} + Show Breadcrumbs toggle or with the breadcrumbs.enabled{' '} + setting . + +### Breadcrumb customization + +The appearance of breadcrumbs can be customized. If you have very long + paths or are only interested in either file paths or symbols paths, you + can use the breadcrumbs.filePath and breadcrumbs.symbolPath settings. Both + support on, off, and last and they define if or what part of the path you + see. By default, breadcrumbs show file and symbol icons to the left of the + breadcrumb but you can remove the icons by setting breadcrumbs.icons to + false. + +### Symbol order in Breadcrumbs + +You can control how symbols are ordered in the Breadcrumbs dropdown with + the breadcrumbs.symbolSortOrder settings. + +Allowed values are: + +* position - position in the file (default) +* name - alphabetical order +* type - symbol type order + +### Breadcrumb keyboard navigation + +To interact with breadcrumbs, use the Focus Breadcrumbs {' '} + command or press Ctrl+Shift+.. It will select that last element and open a + dropdown that allows you to navigate to a sibling file or symbol. Use the + Left and Right keyboard shortcuts to go to elements before or after the + current element. When the dropdown appears, start typing - all matching + elements will be highlighted and the best match will be selected for quick + navigation. + +You can also interact with breadcrumbs without the dropdown. Press + Ctrl+Shift+; to focus the last element, use Left and Right to navigate, + and use Space to reveal the element in the editor. + +## Go to Definition + +If a language supports it, you can + go to the definition of a symbol by pressing F12. + +If you press Ctrl and hover over a symbol, a preview of the declaration + will appear: + +## Go to Type Definition + +Some languages also support jumping + to the type definition of a symbol by running the{' '} + Go to Type Definition command from either the editor + context menu or the Command Palette . This will take you + to the definition of the type of a symbol. The command + editor.action.goToTypeDefinition is not bound to a keyboard shortcut by + default but you can add your own custom{' '} + keybinding . + +## Go to Implementation + +Languages can also support jumping + to the implementation of a symbol by pressing Ctrl+F12. For an interface, + this shows all the implementors of that interface and for abstract + methods, this shows all concrete implementations of that method. + +## Go to Symbol + +You can navigate symbols inside a file with Ctrl+Shift+O. By typing : the + symbols will be grouped by category. Press Up or Down and navigate to the + place you want. + +## Open symbol by name + +Some languages support jumping to a symbol across files with Ctrl+T. Type + the first letter of a type you want to navigate to, regardless of which + file contains it, and press Enter. + +## Peek + +We think there's nothing worse than a big context switch when all you + want is to quickly check something. That's why we support peeked + editors. When you execute a Go to References search + (via Shift+F12), or a Peek Definition (via + Alt+F12), we embed the result inline: + +You can navigate between different references in the peeked editor and + make quick edits right there. Clicking on the peeked editor filename or + double-clicking in the result list will open the reference in the outer + editor. + +## Bracket matching + +Matching brackets will be highlighted as soon as the cursor is near one of + them. + +### Bracket Pair Colorization + +Matching bracket pairs can also be colorized by setting + editor.bracketPairColorization.enabled to true. + +All colors are themeable and up to six colors can be configured. + +You can use workbench.colorCustomizations to override these + theme-contributed colors in your settings: + +```javascript +"workbench.colorCustomizations": { ` + `"editorBracketHighlight.foreground1": "#FFD700", ` + `"editorBracketHighlight.foreground2": "#DA70D6", ` + `"editorBracketHighlight.foreground3": "#179fff", + }, +``` + +## Reference information + +Some languages like C# support inline reference information, that is + updated live. This allows you to quickly analyze the impact of your edit + or the popularity of your specific method or property throughout your + project: + +## Rename symbol + +Some languages support rename symbol across files. Press F2 and then type + the new desired name and press Enter. All usages of the symbol will be + renamed, across files. + +## Errors & warnings + +Warnings or Errors can be generated either via{' '} + configured tasks , by rich language + services, or by linters, that constantly analyze your code in the + background. Since we love bug-free code, warnings and errors show up in + multiple places: + +* In the Status Bar, there is a summary of all errors and warnings counts. +* You can click on the summary or press Ctrl+Shift+M to display the{' '} PROBLEMS panel with a list of all current errors. +* If you open a file that has errors or warnings, they will be rendered inline with the text and in the overview ruler. + +## Code Action + +Warnings and Errors can provide Code Actions (also known as Quick + Fixes) to help fix issues. These will be displayed in the editor in + the left margin as a lightbulb. Clicking on the lightbulb will either + display the Code Action options or perform the action. + +## Inlay Hints + +Some languages provide inlay hints: that is additional information about + source code that is rendered inline. This is usually used to show inferred + types. The sample below shows inlay hints that display the inferred types + of JavaScript variables and function return types. + +Inlay hints can be enabled/disabled with the editor.inlayHints.enabled + setting, the default is enabled. Extensions, like TypeScript or Rust, are + needed to provide the actual inlay hint information. + +## Outgoing link protection + +For your protection, AVAP™ DS Code displays a prompt before opening an + outgoing website link from the editor. + +You can proceed to the external website in your browser or have the + options to copy the link or cancel the request. If you choose{' '} + Configure Trusted Domains , a dropdown lets you trust the + exact URL, trust the URL domain and subdomains, or trust all domains to + disable outgoing link protection. + +The option to Manage Trusted Domains , also available at + any time from the Command Palette, brings up the{' '} + Trusted Domains JSON file, where you can add, remove, or + modify trusted domains. + +```javascript +// You can use the "Manage Trusted Domains" command to open this file. + + // Save this file to apply the trusted domains rules. + [ ` `"\*.twitter.com" + ] +``` + +The Trusted Domains JSON file also has comments with + examples of the supported domain formats and a list of the domains trusted + by default, such as https://*.visualstudio.com and + https://*.microsoft.com. + +## Next steps + +Now that you know how the editor works, time to try a few other things... + +* Intro Video - Code Editing - Watch an introductory video on code editing features. +* User Interface - In case you missed a basic orientation around AVAP™ DS Code. +* Key Bindings - Learn how to modify key bindings to your preference. +* Debugging - This is where AVAP™ DS Code really shines. + +## Common questions + +### How can I automatically select the second entry in Quick Open instead of + the first? + +With the command workbench.action.quickOpenPreviousEditor, you can have + the second entry automatically selected in Quick Open. This can be useful + if you want to select the previous entry from the list without having to + invoke another keybinding: + +```javascript +[` `{ + ` `"key": "ctrl+p", + ` `"command": "workbench.action.quickOpenPreviousEditor" + ` `}, + ` `{ + ` `"key": "ctrl+p", + ` `"command": "-workbench.action.quickOpen" + ` `} + ] +``` + +### How can I configure Ctrl+Tab to navigate across all editors of all groups + +By default, Ctrl+Tab navigates between editors of the same editor group. + If you want to navigate across all opened editors in all groups, you can + create keyboard shortcuts for the + workbench.action.quickOpenPreviousRecentlyUsedEditor and + workbench.action.quickOpenLeastRecentlyUsedEditor commands: + +```javascript +[` `{ + ` `"key": "ctrl+tab", + ` `"command": + "workbench.action.quickOpenPreviousRecentlyUsedEditor", + ` `"when": "!inEditorsPicker" + ` `}, + ` `{ + ` `"key": "ctrl+shift+tab", + ` `"command": "workbench.action.quickOpenLeastRecentlyUsedEditor", + ` `"when": "!inEditorsPicker" + ` `} + ] +``` + +### How can I navigate between recently used editors without a picker + +Here is a list of commands you can use to navigate in editors without + opening a picker: diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md new file mode 100644 index 0000000..6efde20 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CommandLineInterface.md @@ -0,0 +1,191 @@ +AVAP TM Dev Studio has a powerful command-line interface + built-in that lets you control how you launch the editor. You can open + files, install extensions, change the display language, and output + diagnostics through command-line options (switches). + +If you are looking for how to run command-line tools inside AVAP + TM Dev Studio, see the Integrated Terminal. + +## Command line help + +To get an overview of the AVAP TM Dev Studio command-line + interface, open a terminal or command prompt and type{' '} + `code --help` . You will see the version, usage example, and + list of command line options. + +## Launching from command line + +You can launch AVAP TM Dev Studio from the command line to + quickly open a file, folder, or project. Typically, you open AVAP + TM Dev Studio within the context of a folder. To do this, from + an open terminal or command prompt, navigate to your project folder and + type `code .` : + +Windows and Linux installations should add the AVAP TM Dev + Studio binaries location to your system path. If this isn't the case, + you can manually add the location to the `Path` environment + variable ($PATH on Linux). For example, on Windows, the default + AVAP TM Dev Studio binaries location is{' '} + `AppData\Local\Programs\Microsoft` AVAP TM Dev + Studio\bin. To review platform-specific setup instructions, see Setup. + +## Core CLI options + +Here are optional arguments you can use when starting AVAP TM {' '} + Dev Studio at the command line via code: + +## Opening Files and Folders + +Sometimes you will want to open or create a file. If the specified file + does not exist, AVAP TM Dev Studio will create them for you + along with any new intermediate folders: + +```javascript +code index.html style.css documentation\readme.md +``` + +For both files and folders, you can use absolute or relative paths. + Relative paths are relative to the current directory of the command prompt + where you run `code` . + +If you specify more than one file at the command line, AVAP TM {' '} + Dev Studio will open only a single instance. + +If you specify more than one folder at the command line, AVAP TM {' '} + Dev Studio will create a Multi-root Workspace including each folder. + +## Select a profile + +You can launch AVAP TM Dev Studio with a specific profile via + the `--profile` command-line interface option. You pass the + name of the profile after the - `-profile` argument and open a + folder or a workspace using that profile. The command line below opens the{' '} + `web-sample` folder with the "Web Development" + profile: + +` + code ~/projects/web-sample --profile "Web Development" + ` + +If the profile specified does not exist, a new empty profile with the + given name is created. + +## Working with extensions + +You can install and manage AVAP TM Dev Studio extensions from + the command line. + +## Advanced CLI options + +There are several CLI options that help with reproducing errors and + advanced setup. + +AVAP TM Dev Studio integrates with other remote environments to + become even more powerful and flexible. Our goal is to provide a cohesive + experience that allows you to manage both local and remote machines from + one, unified CLI. + +The AVAP TM Dev Studio Remote - Tunnels extension lets you + connect to a remote machine, like a desktop PC or VM, via a secure tunnel. + Tunneling securely transmits data from one network to another. You can + then securely connect to that machine from anywhere, without the + requirement of SSH. + +We've built functionality into the code CLI that will initiate tunnels + on remote machines. You can run: + +```javascript +code tunnel +``` + +to create a tunnel on your remote machine. You may connect to this machine + through a web or desktop AVAP TM Dev Studio client. + +You can review the other tunneling commands by running code tunnel -help: + +As you may need to run the CLI on a remote machine that can't install + AVAP TM Dev Studio Desktop, the CLI is also available for + standalone install on the AVAP TM Dev Studio download page. + +For more information on Remote Tunnels, you can review the Remote Tunnels + documentation. + +## Open AVAP™ Dev Studio + +You can also open projects and files using the platform's URL handling + mechanism. Use the following URL formats to: + +Open a project + +```javascript +vscode://file/{full path to project}/ + + + vscode://file/c:/myProject/ +``` + +Open a file + +```javascript +vscode://file/{full path to file} + + + vscode://file/c:/myProject/package.json +``` + +Open a file to line and column + +```javascript +vscode://file/{full path to file}:line:column + + + vscode://file/c:/myProject/package.json:5:10 +``` + +You can use the URL in applications such as browsers or file explorers + that can parse and redirect the URL. For example, on Windows, you could + pass a vscode:// URL directly to the Windows Explorer or to the command + line as start vscode://{full path to file}. + +## Next steps + +Read on to find out about: + +* Integrated Terminal - Run command-line tools from inside AVAP TM Dev Studio. +* Basic Editing - Learn the basics of the AVAP TM Dev Studio editor. +* Code Navigation - AVAP TM Dev Studio lets you quickly understand and move through your source code. + +## Common questions + +Your OS cannot find the AVAP TM Dev Studio binary code on its + path. The AVAP TM Dev Studio Windows and Linux installations + should have installed AVAP TM Dev Studio on your path. Try + uninstalling and reinstalling AVAP TM Dev Studio. If code is + still not found, consult the platform-specific setup topics for Windows + and Linux. + +On macOS, you need to manually run the{' '} + Shell Command: Install 'code' command in PATH {' '} + command (available through the Command Palette {' '} + Ctrl+Shift+P). Consult the macOS specific setup topic for details. + +AVAP TM Dev Studio has an Integrated Terminal where you can run + command-line tools from within AVAP TM Dev Studio. + +Not directly through the command line, but AVAP TM Dev Studio + has a Portable Mode, which lets you keep settings and data in the same + location as your installation, for example, on a USB drive. + +When AVAP TM Dev Studio starts up, it may launch a shell in + order to source the "shell environment" to help set up tools. + This will launch an interactive login shell and fetch its + environment. Depending on your shell setup, this may cause problems. For + example, it may be unexpected that the shell is launched as an interactive + session, which AVAP TM Dev Studio needs in order to try to align{' '} + `$PATH` with the exact value in a user created terminal. + +Whenever AVAP TM Dev Studio launches this initial shell, AVAP + TM Dev Studio sets the variable{' '} + `VSCODE\_RESOLVING\_ENVIRONMENT` to 1. If your shell or user + scripts need to know if they are being run in the context of this shell, + you can check the `VSCODE\_RESOLVING\_ENVIRONMENT` value. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md new file mode 100644 index 0000000..9c43205 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_CustomLayout.md @@ -0,0 +1,324 @@ +AVAP TM Dev Studio comes with a simple user interface and + convenient default layout. At the same time, AVAP TM Dev Studio + provides options and settings to let you customize the UI layout to suit + your preferences and work style. In this topic, we'll highlight + various UI customizations so you can display views, editors, and panels in + the way that's most productive for you. + +This article starts by discussing Workbench customizations to rearrange UI + elements such as the side bars, views, and panels. Later in the article, + we'll cover customization of the Editor region with editor groups, + split editors, and editor tabs. + +`` + +## Workbench + +### Primary side bar + +The default (Primary) side bar shows views such as the File + Explorer, Search, and Source Control on the left of the workbench. If + you'd prefer it on the right, you can: + +* Right-click the Activity bar and select{' '} Move Primary Side Bar Right . +* Run View: Toggle Primary Side Bar Position to switch the Primary side bar right and left. +* Set the Workbench > Side Bar: Location {' '} (workbench.sideBar.location) setting to right. + +### Secondary side bar + +By default, AVAP TM Dev Studio shows all views in the{' '} + Primary Side Bar located to the left of the editor + region. If you like another place to display views, you can open the{' '} + Secondary Side Bar to the right and drag and drop views + into that side bar. + +This can be useful if you'd like to see two views at the same time, + for example, the File Explorer on the left and Source Control view on the + right: + +To display the Secondary side bar, you can: + +* Run View: Toggle Secondary Side Bar Visibility {' '} (Ctrl+Alt+B). +* Check the View > Appearance >{' '} Secondary Side Bar menu item. + +The Secondary side bar is initially empty but you can drag and drop views + and panels into it and the layout is preserved across your AVAP + TM Dev Studio sessions. + +### Activity bar position + +By default, the Activity bar moves with the Primary side bar and remains + on the outer edge of the workbench. You can also choose to hide the + Activity bar or move it to the top of the Primary side bar. The{' '} + Activity Bar Position menu available from the Activity + bar context menu or under View >{' '} + Appearance has the options Side ,{' '} + Top , or Hidden . + +When the Activity bar is in the top position, the Account {' '} + and Manage buttons, usually at the bottom of the Activity + bar, move to the right side of the title bar. + +### Panel + +The Panel region displays UI elements such as the Problems, Terminal, and + Output panels and by default is located under the editor region. + +### Panel position + +You can also move the region to the left or right of the editor with the{' '} + Move Panel commands: + +* View: Move Panel Left ( `workbench.action.positionPanelLeft` ) +* View: Move Panel Right ( `workbench.action.positionPanelRight` ) +* View: Move Panel To Bottom ( `workbench.action.positionPanelBottom` ) + +You can configure these options in the menu under View {' '} + > Appearance > Panel Position , + Panel title bar context menu, or using the new{' '} + View: Move Panel commands. + +### Panel alignment + +This option lets you configure how far the bottom Panel spans across your + window. There are four options: + +* Center - This is the default behavior. The panel spans the width of the editor area only. +* Justify - The panel spans the full width of the window. +* Left - The panel spans from the left edge of the window to the right edge of the editor area. +* Right - The panel spans from the right edge of the window to the left edge of the editor area. + +With all Panel alignment options, the Activity Bar is considered the edge + of the window. + +You can configure these options in the menu under View {' '} + > Appearance > Align Panel , Panel + title context menu, or using the new{' '} + Set Panel Alignment to... commands. + +### Maximize Panel size + +When the Panel alignment is Center , you can quickly + toggle the Panel region to fill the entire editor area with the{' '} + Maximize Panel Size chevron button in the upper right of + the Panel region. The chevron button points downwards in the maximized + panel to restore the panel to the original size. + +You can also maximize the Panel region via the{' '} + View: Toggle Maximized Panel command. + +### Customize Layout control + +The AVAP TM Dev Studio title bar also has buttons to toggle the + visibility of the main UI elements (Side bars and Panel region). + +The rightmost button brings up the Customize Layout {' '} + dropdown, where you can further change the visibility and layout of + various UI elements and includes several layout modes: + +The layout modes are: + +* Full Screen - Set the editor to fill the full display screen. View: Toggle Full Screen ( `F11` ). +* Zen Mode - Hide all UI except for the editor area.{' '} View: Toggle Zen Mode ( `Ctrl+K Z` ). +* Centered Layout - Centers the editor inside the editor region. View: Toggle Centered Layout . + +### Drag and drop views and panels + +AVAP TM Dev Studio has a default layout of views and panels in + the Primary Side bar and Panel region but you can drag and drop views and + panels between these regions. For example, you can drag and drop the + Source Control view into the Panel region or put the Problems panel into + the Primary Side bar: + +You can also add views and panels to existing view or panel to create + groups. For example, you could move the Output panel to the Explorer view + group by dragging over the Explorer Activity bar item and then dropping + into the view: + +You are not limited to using the mouse for moving views and panels. You + can also customize layouts via the keyboard with the{' '} + View: Move View and{' '} + View: Move Focused View commands, where dropdowns let you + pick the UI element to move and the destination, either a location like + the Side bar or Panel region or an existing view or panel to create a + group. + +## Tool bars + +Most AVAP TM Dev Studio views and panels have tool bars + displayed on the top right of their UI. For example, the Search view has a + tool bar with actions such as Refresh ,{' '} + Clear Search Results , etc.: + +### Hide items in tool bars + +If you think a tool bar is too busy and you'd like to hide less + frequently used actions, you can right-click on any action and select its{' '} + Hide command (for example{' '} + Hide 'Clear Search Results' ) or uncheck any + of the actions from the dropdown. Hidden actions are moved to the ...{' '} + More Actions menu and can be invoked from there. + +To restore an action to the tool bar, right-click the tool bar button area + and select the Reset Menu command or recheck the hidden + action. To restore all menus in AVAP TM Dev Studio, run{' '} + View: Reset All Menus from the Command Palette + (Ctrl+Shift+P). + +## Editor + +You can customize the layout of the AVAP TM Dev Studio editor + region independently of the workbench user interface. By default, the + editor region displays useful features such as the minimap, breadcrumbs, + editor tabs, and has optional UI such as Sticky Scroll. You can also + adjust the layout of the editors themselves. + +### Minimap and breadcrumbs + +The View > Appearance menu has a + section for customizing the editor region. There you'll find toggles + for: + +* Minimap - A visual overview of your current file.{' '} View: Toggle Minimap . +* Breadcrumbs - Display folder, file, and current symbol information for the active file.{' '} View: Toggle Breadcrumbs . +* Sticky Scroll - Display nested symbol scopes in the active file. View: Toggle Sticky Scroll . + +### Editor groups + +By default, each opened editor goes into the same{' '} + editor group and adds a new editor tab to the right. You + can create new editor groups in order to group similar or related files, + or to allow side by side editing of the same file. Create a new editor + group by dragging an editor to the side, or using one of the{' '} + Split commands in the context menu to duplicate the + current editor into a new editor group to the left, right, above, or + below. + +The Split editor commands are also available from the{' '} + View > Editor Layout menu and through + the Command Palette. + +If you'd like to go quickly between vertical and horizontal editor + group layout, you can use the{' '} + Toggle Vertical/Horizontal Editor Layout command + (Shift+Alt+0). + +### Split in group + +You can also split an editor in the same group for side by side editing + with the View: Split Editor in Group command (Ctrl+K + Ctrl+Shift+). + +When using the split in group feature, there are specific commands for + toggling this mode and navigating between the two split editors: + +* View: Split Editor in Group - Split the current editor. +* View: Toggle Split Editor in Group - Toggle between split mode for the active editor. +* View: Join Editor in Group - Go back to a single editor for the active file. +* View: Toggle Layout of Split Editor in Group - Toggle between horizontal and vertical layout. + +To navigate between the sides: + +* View: Focus First Side in Active Editor - Move focus to the first (left or top) side of split editor. +* View: Focus Second Side in Active Editor - Move focus to the second (right or bottom) side. +* View: Focus Other Side in Active Editor - Toggle between the split editor sides. + +The Workbench > Editor: Split in Group Layout {' '} + (workbench.editor.splitInGroupLayout) setting lets you set the + preferred split editor layout to either horizontal (default) or + vertical. + +### Grid layout + +If you'd like more control over the editor group layout, you can use + the grid layout, where you can have multiple rows and columns of editor + groups visible. The View >{' '} + Editor Layout menu lists various editor layout options + (for example, Two Columns ,{' '} + Three Columns , Grid (2x2) ) + and you can adjust the group sizes by grabbing and moving the sash between + them. + +### Pinned tabs + +If you'd like an editor tab to always be visible, you can pin it to + the editor tab bar. You can pin an editor tab from either the context menu + or using the command View: Pin Editor (Ctrl+K + Shift+Enter). + +Pinned tabs help access files that are important to you as: + +* Pinned tabs always appear first before non-pinned tabs. +* They do not scroll out of view if you have many tabs opened. +* They do not close when using editor tab commands such as{' '} Close Others or Close All . +* They do not close even when you exceed a set limit of opened editors. + +Unpin an editor by clicking on the pin icon, using the{' '} + Unpin editor tab context menu item, or the{' '} + View: Unpin Editor command. + +You can choose how you'd like to display pinned editors with the{' '} + Workbench > Editor: Pinned Tab Sizing ( + `workbench.editor.pinnedTabSizing` ) setting. The options + are: + +* `normal` : A pinned tab inherits the look of other tabs (default) +* `shrink` : A pinned tab shrinks to a fixed size showing parts of the editor label. +* `compact` : A pinned tab will only show as icon or first letter of the editor label. + +You can also show pinned editor tabs on a separate row above the regular + editor tab bar by setting{' '} + Workbench > Editor: Pinned Tabs On Separate Row . You + can pin and unpin editors by dragging and dropping their tabs between the + two rows. + +### Locked editor groups + +When using multiple editors, it's common to have one or more that you + want to always keep visible. The locked editor group feature, where an + entire editor group is locked and visible, provides a stable display and + any request to open a new editor will create it in another group. You can + tell whether an editor group is locked by the lock icon in the editor + group tool bar. + +You can lock an editor group by selecting Lock Group from + the editor tool bar More Actions ... dropdown or running + the View: Lock Editor Group command. + +You can unlock an editor group by clicking on the lock icon or running the{' '} + View: Unlock Editor Group command. + +Locked groups behave differently than unlocked groups: + +* New editors will not open in a locked group unless explicitly moved there (for example, via drag and drop). +* If a new editor skips a locked group, it will either open in the most recently used unlocked group or create a new group to the side of the locked one. +* The locked state of an editor group is persisted and restored across restarts. +* You can lock empty groups as well, allowing for a more stable editor layout. + +The primary use case is for terminals in the editor area For example, you + might want to edit text on the left and have a terminal on the right that + is always visible. When a terminal editor is created and moved to the + side, it will automatically lock. This means that even when the terminal + on the right is focused, opening a file will open it on the left side + without needing to manually change focus first. + +Auto locking groups can be configured using the + workbench.editor.autoLockGroups setting, which defaults to only terminal + editors but any editor type can be added to get the same behavior. + +The commands related to editor group locking: + +* View: Lock Editor Group - Lock the active editor group. +* View: Unlock Editor Group - Unlock the active locked editor group. +* View: Toggle Editor Group Lock - Lock or unlock the active editor group. + +You must have more that one editor group for these commands to be + available. + +## Next steps + +Read on to find out about: + +* AVAP TM Dev Studio User Interface - A quick orientation to AVAP TM Dev Studio. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md new file mode 100644 index 0000000..786357d --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Debugging.md @@ -0,0 +1,698 @@ +One of the key features of AVAP TM Dev Studio is its great + debugging support. AVAP TM Dev Studio's built-in debugger + helps accelerate your edit, compile, and debug loop. + +## Debugger extensions + +AVAP TM Dev Studio has built-in debugging support for the + Node.js runtime and can debug JavaScript, TypeScript, or any other + language that gets transpiled to JavaScript. + +For debugging other languages and runtimes (including PHP, Ruby, Go, + C#, Python, C++, PowerShell and many others), look for{' '} + `Debuggers` extensions in the AVAP™ Dev Studio Marketplace or + select Install Additional Debuggers in the top-level Run menu. + +Below are several popular extensions which include debugging support: + +## Start debugging + +The following documentation is based on the built-in Node.js debugger, but + most of the concepts and features are applicable to other debuggers as + well. + +It is helpful to first create a sample Node.js application before reading + about debugging. You can follow the Node.js walkthrough to install Node.js + and create a simple "Hello World" JavaScript application ( + `app.js` ). Once you have a simple application set up, this + page will take you through AVAP TM Dev Studio debugging + features. + +## Run and Debug view + +To bring up the Run and Debug view, select the{' '} + Run and Debug icon in the Activity Bar {' '} + on the side of AVAP TM Dev Studio. You can also use the keyboard + shortcut Ctrl+Shift+D. + +The Run and Debug view displays all information related + to running and debugging and has a top bar with debugging commands and + configuration settings. + +If running and debugging is not yet configured (no + `launch.json` has been created), AVAP TM Dev + Studio shows the Run start view. + +## Run menu + +The top-level Run menu has the most common run and debug + commands: + +## Launch configurations + +To run or debug a simple app in AVAP TM Dev Studio, select{' '} + Run and Debug on the Debug start view or press F5 and + AVAP TM Dev Studio will try to run your currently active file. + +However, for most debugging scenarios, creating a launch configuration + file is beneficial because it allows you to configure and save debugging + setup details. AVAP TM Dev Studio keeps debugging configuration + information in a `launch.json` file located in a{' '} + `.vscode` folder in your workspace (project root + folder) or in your user settings or workspace settings. + +To create a launch.json file, click the{' '} + create a launch.json file link in the Run start view. + +AVAP TM Dev Studio will try to automatically detect your debug + environment, but if this fails, you will have to choose it manually: + +Here is the launch configuration generated for Node.js debugging: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"skipFiles": ["/\*\*"], + ` `"program": "${workspaceFolder}\\app.js" + ` `} + ` `] + + } +``` + +If you go back to the File Explorer view (Ctrl+Shift+E), + you'll see that AVAP TM Dev Studio has created a{' '} + `.vscode` folder and added the `launch.json` file to + your workspace. + +Note that the attributes available in launch configurations vary from + debugger to debugger. You can use IntelliSense suggestions + (Ctrl+Space) to find out which attributes exist for a specific + debugger. Hover help is also available for all attributes. + +Do not assume that an attribute that is available for one debugger + automatically works for other debuggers too. If you see red squiggles in + your launch configuration, hover over them to learn what the problem is + and try to fix them before launching a debug session. + +Review all automatically generated values and make sure that they make + sense for your project and debugging environment + +### Launch versus attach configurations + +In AVAP TM Dev Studio, there are two core debugging modes,{' '} + Launch and Attach , which handle two + different workflows and segments of developers. Depending on your + workflow, it can be confusing to know what type of configuration is + appropriate for your project. + +If you come from a browser Developer Tools background, you might not be + used to "launching from your tool," since your browser instance + is already open. When you open DevTools, you are simply{' '} + attaching DevTools to your open browser tab. On the other + hand, if you come from a server or desktop background, it's quite + normal to have your editor launch your process for you, + and your editor automatically attaches its debugger to the newly launched + process. + +The best way to explain the difference between launch and{' '} + attach is to think of a launch {' '} + configuration as a recipe for how to start your app in debug mode{' '} + before AVAP TM Dev Studio attaches to it, while + an attach configuration is a recipe for how to connect + AVAP TM Dev Studio's debugger to an app or process + that's already running. + +AVAP TM Dev Studio debuggers typically support launching a + program in debug mode or attaching to an already running program in debug + mode. Depending on the request (attach or launch), different + attributes are required, and AVAP TM Dev Studio's + launch.json validation and suggestions should help with that. + +### Add a new configuration + +To add a new configuration to an existing `launch.json` , use + one of the following techniques: + +* Use IntelliSense if your cursor is located inside the configurations array. +* Press the Add Configuration button to invoke snippet IntelliSense at the start of the array. +* Choose Add Configuration option in the Run menu. + +AVAP TM Dev Studio also supports compound launch configurations + for starting multiple configurations at the same time; for more details, + please read this section. + +In order to start a debug session, first select the configuration named{' '} + Launch Program using the{' '} + Configuration dropdown in the{' '} + Run and Debug view. Once you have your launch + configuration set, start your debug session with F5. + +Alternatively, you can run your configuration through the{' '} + Command Palette (Ctrl+Shift+P) by filtering on{' '} + Debug: Select and Start Debugging or typing 'debug + ' and selecting the configuration you want to debug. + +As soon as a debugging session starts, the DEBUG CONSOLE {' '} + panel is displayed and shows debugging output, and the Status Bar changes + color (orange for default color themes): + +In addition, the debug status appears in the Status Bar + showing the active debug configuration. By selecting the debug status, a + user can change the active launch configuration and start debugging + without needing to open the Run and Debug view. + +## Debug actions + +Once a debug session starts, the Debug toolbar will + appear on the top of the editor. + +### Run mode + +In addition to debugging a program, AVAP TM Dev Studio supports{' '} + running the program. The{' '} + Debug: Run (Start Without Debugging) action is + triggered with Ctrl+F5 and uses the currently selected launch + configuration. Many of the launch configuration attributes are supported + in 'Run' mode. AVAP TM Dev Studio maintains a debug + session while the program is running, and pressing the{' '} + Stop button terminates the program. + +## Breakpoints + +Breakpoints can be toggled by clicking on the{' '} + editor margin or using F9 on the current line. Finer + breakpoint control (enable/disable/reapply) can be done in the{' '} + Run and Debug view's BREAKPOINTS {' '} + section. + +* Breakpoints in the editor margin are normally shown as red filled circles. +* Disabled breakpoints have a filled gray circle. +* When a debugging session starts, breakpoints that cannot be registered with the debugger change to a gray hollow circle. The same might happen if the source is edited while a debug session without live-edit support is running. + +If the debugger supports breaking on different kinds of errors or + exceptions, those will also be available in the{' '} + BREAKPOINTS view. + +The Reapply All Breakpoints command sets all breakpoints + again to their original location. This is helpful if your debug + environment is "lazy" and "misplaces" breakpoints in + source code that has not yet been executed. + +Optionally, breakpoints can be shown in the editor's overview ruler by + enabling the setting `debug.showBreakpointsInOverviewRuler` : + +## Logpoints + +A Logpoint is a variant of a breakpoint that does not "break" + into the debugger but instead logs a message to the console. Logpoints are + especially useful for injecting logging while debugging production servers + that cannot be paused or stopped. + +A Logpoint is represented by a "diamond" shaped icon. Log + messages are plain text but can include expressions to be evaluated within + curly braces ('{}'). + +Just like regular breakpoints, Logpoints can be enabled or disabled and + can also be controlled by a condition and/or hit count. + +### Triggered breakpoints + +A trigged breakpoint is a breakpoint that is automatically enabled once + another breakpoint is hit. They can be very useful when diagnosing failure + cases in code that happen only after a certain precondition. + +Triggered breakpoints can be set by right-clicking on the glyph margin, + selecting Add Triggered Breakpoint , and then choosing + which other breakpoint enables the breakpoint. + +Triggered breakpoints work for all languages, and conditional breakpoints + may also be used as the trigger. + +## Data inspection + +Variables can be inspected in the VARIABLES section of + the Run and Debug view or by hovering over their source + in the editor. Variable values and expression evaluation are relative to + the selected stack frame in the CALL STACK section. + +Variable values can be modified with the Set Value action + from the variable's context menu. Additionally, you can use the{' '} + Copy Value action to copy the variable's value, or{' '} + Copy as Expression action to copy an expression to access + the variable. + +Variables and expressions can also be evaluated and watched in the{' '} + Run and Debug view's WATCH section. + +Variable names and values can be filtered by typing while the focus is on + the VARIABLES section. + +## Launch.json attributes + +There are many `launch.json` attributes to help support + different debuggers and debugging scenarios. As mentioned above, you can + use IntelliSense (Ctrl+Space) to see the list of available + attributes once you have specified a value for the `type` {' '} + attribute. + +The following attributes are mandatory for every launch configuration: + +* `type` - the type of debugger to use for this launch configuration. Every installed debug extension introduces a type: node for the built-in Node debugger, for example, or php and go for the PHP and Go extensions. +* `request` - the request type of this launch configuration. Currently, launch and attach are supported. +* `name` - the reader-friendly name to appear in the Debug launch configuration dropdown. + +Here are some optional attributes available to all launch configurations: + +* `presentation` - using the order, group, and hidden attributes in the presentation object, you can sort, group, and hide configurations and compounds in the Debug configuration dropdown and in the Debug quick pick. +* `preLaunchTask` - to launch a task before the start of a debug session, set this attribute to the label of a task specified in tasks.json (in the workspace's .vscode folder). Or, this can be set to ${defaultBuildTask} to use your default build task. +* `postDebugTask` - to launch a task at the very end of a debug session, set this attribute to the name of a task specified in tasks.json (in the workspace's .vscode folder). +* `internalConsoleOptions` - this attribute controls the visibility of the Debug Console panel during a debugging session. +* `debugServer` -{' '} for debug extension authors only : this attribute allows you to connect to a specified port instead of launching the debug adapter. +* `serverReadyAction` - if you want to open a URL in a web browser whenever the program under debugging outputs a specific message to the debug console or integrated terminal. For details see section Automatically open a URI when debugging a server program below. + +Many debuggers support some of the following attributes: + +* `program` - executable or file to run when launching the debugger +* `args` - arguments passed to the program to debug +* `env` - environment variables (the value null can be used to "undefine" a variable) +* `envFile` - path to dotenv file with environment variables +* `cwd` - current working directory for finding dependencies and other files +* `port` - port when attaching to a running process +* `stopOnEntry` - break immediately when the program launches +* `console` - what kind of console to use, for example,{' '} `internalConsole` , `integratedTerminal` , or{' '} `externalTerminal` + +## Variable substitution + +AVAP TM Dev Studio makes commonly used paths and other values + available as variables and supports variable substitution inside strings + in `launch.json` . This means that you do not have to use + absolute paths in debug configurations. For example,{' '} + `${workspaceFolder}` gives the root path of a + workspace folder, `${file}` the file open in the + active editor, and ${env:Name} the environment variable + 'Name'. You can see a full list of predefined variables in the + Variables Reference or by invoking IntelliSense inside the{' '} + `launch.json` string attributes. + +```javascript +{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${workspaceFolder}/app.js", + ` `"cwd": "${workspaceFolder}", + ` `"args": ["${env:USERNAME}"] + + } +``` + +## Platform-specific properties + +`Launch.json` supports defining values (for example, + arguments to be passed to the program) that depend on the operating + system where the debugger is running. To do so, put a platform-specific + literal into the `launch.json` file and specify the + corresponding properties inside that literal. + +Below is an example that passes " `args` " to the + program differently on Windows: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": + "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", + ` `"args": ["myFolder/path/app.js"], + ` `"windows": { + ` `"args": ["myFolder\\path\\app.js"] + ` `} + ` `} + ` `] + + } +``` + +Valid operating properties are " `windows` " for + Windows, " `linux` " for Linux, and " + `osx` " for macOS. Properties defined in an operating + system specific scope override properties defined in the global scope. + +Please note that the `type` property cannot be placed inside a + platform-specific section, because `type` indirectly determines + the platform in remote debugging scenarios, and that would result in a + cyclic dependency. + +In the example below, debugging the program always{' '} + stops on entry except on macOS: + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": + "${workspaceFolder}/node\_modules/gulp/bin/gulpfile.js", + ` `"stopOnEntry": true, + ` `"osx": { + ` `"stopOnEntry": false + ` `} + ` `} + ` `] + + } +``` + +## Global launch configuration + +AVAP TM Dev Studio supports adding a "launch" object + inside your User settings. This "launch" configuration will then + be shared across your workspaces. For example: + +```javascript +"launch": { + ` `"version": "0.2.0", + ` `"configurations": [{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${file}" + ` `}] + + } +``` + +## Advanced breakpoint topics + +### Conditional breakpoints + +A powerful AVAP TM Dev Studio debugging feature is the ability + to set conditions based on expressions, hit counts, or a combination of + both. + +* Expression condition : The breakpoint will be hit whenever the expression evaluates to `true` . +* Hit count : The 'hit count' controls how many times a breakpoint needs to be hit before it will 'break' execution. Whether a 'hit count' is respected and the exact syntax of the expression vary among debugger extensions. + +You can add a condition and/or hit count when creating a source breakpoint + (with the Add Conditional Breakpoint action) or + when modifying an existing one (with the{' '} + Edit Condition action). In both cases, an inline text + box with a dropdown menu opens where you can enter expressions: + +Condition and hit count editing support is also supported for{' '} + function and exception breakpoints. You + can initiate condition editing from the context menu or the new inline{' '} + Edit Condition action. + +An example of condition editing in the BREAKPOINTS view: + +If a debugger does not support conditional breakpoints, the{' '} + Add Conditional Breakpoint and{' '} + Edit Condition actions will be missing. + +### Inline breakpoints + +Inline breakpoints will only be hit when the execution reaches the column + associated with the inline breakpoint. This is particularly useful when + debugging minified code which contains multiple statements in a single + line. + +An inline breakpoint can be set using Shift+F9 or through the context menu + during a debug session. Inline breakpoints are shown inline in the editor. + +Inline breakpoints can also have conditions. Editing multiple breakpoints + on a line is possible through the context menu in the editor's left + margin. + +### Function breakpoints + +Instead of placing breakpoints directly in source code, a debugger can + support creating breakpoints by specifying a function name. This is useful + in situations where source is not available but a function name is known. + +A function breakpoint is created by pressing the + button + in the BREAKPOINTS section header and entering the + function name. Function breakpoints are shown with a red triangle in the{' '} + BREAKPOINTS section. + +### Data breakpoints + +If a debugger supports data breakpoints, they can be set from the context + menu in the VARIABLES view. The{' '} + Break on Value Change/Read/Access commands will add a + data breakpoint that is hit when the value of the underlying variable + changes/is read/is accessed. Data breakpoints are shown with a red hexagon + in the BREAKPOINTS section. + +## Debug Console REPL + +Expressions can be evaluated with the Debug Console REPL + (Read-Eval-Print Loop) feature. To open the Debug Console, use the{' '} + Debug Console action at the top of the Debug pane or use + the View: Debug Console command (Ctrl+Shift+Y). + Expressions are evaluated after you press Enter and the Debug Console REPL + shows suggestions as you type. If you need to enter multiple lines, use + Shift+Enter between the lines and then send all lines for evaluation with + Enter. Debug Console input uses the mode of the active editor, which means + that the Debug Console input supports syntax coloring, indentation, auto + closing of quotes, and other language features. + +## Redirect input/output to/from the debug target + +Redirecting input/output is debugger/runtime specific, so AVAP + TM Dev Studio does not have a built-in solution that works for + all debuggers. + +Here are two approaches you might want to consider: + +Here's an example `launch.json` configuration: + +```javascript +{ + ` `"name": "launch program that reads a file from stdin", + ` `"type": "node", + ` `"request": "launch", + ` `"program": "program.js", + ` `"console": "integratedTerminal", + ` `"args": ["<", "in.txt"] + + } +``` + +This approach requires that the "<" syntax is passed through + the debugger extension and ends up unmodified in the Integrated Terminal. + +## Multi-target debugging + +For complex scenarios involving more than one process (for example, a + client and a server), AVAP TM Dev Studio supports + multi-target debugging. + +Using multi-target debugging is simple: after you've started a first + debug session, you can just launch another session. As soon as a second + session is up and running, the AVAP TM Dev Studio UI switches to{' '} + multi-target mode : + +* The individual sessions now show up as top-level elements in the{' '} CALL STACK view. +* The debug toolbar shows the currently active session {' '} (and all other sessions are available in a dropdown menu). +* Debug actions (for example, all actions in the debug toolbar) are performed on the active session. The active session can be changed either by using the dropdown menu in the debug toolbar or by selecting a different element in the CALL STACK view. + +### Compound launch configurations + +An alternative way to start multiple debug sessions is by using a{' '} + compound launch configuration. A compound launch + configuration lists the names of two or more launch configurations that + should be launched in parallel. Optionally a preLaunchTask can be + specified that is run before the individual debug sessions are started. + The boolean flag stopAll controls whether manually terminating one session + will stop all of the compound sessions. + +```javascript +{ + ` `"version": "0.2.0", + ` `"configurations": [` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Server", + ` `"program": "${workspaceFolder}/server.js" + ` `}, + ` `{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Client", + ` `"program": "${workspaceFolder}/client.js" + ` `} + ` `], + ` `"compounds": [` `{ + ` `"name": "Server/Client", + ` `"configurations": ["Server", "Client"], + ` `"preLaunchTask": "${defaultBuildTask}", + ` `"stopAll": true + ` `} + ` `] + + } +``` + +Compound launch configurations are displayed in the launch configuration + dropdown menu. + +## Remote debugging + +AVAP TM Dev Studio does not itself support remote debugging: + this is a feature of the debug extension you are using, and you should + consult the extension's page in the Marketplace for support and + details. + +There is, however, one exception: the Node.js debugger included in AVAP + TM Dev Studio supports remote debugging. See the Node.js + Debugging topic to learn how to configure this. + +## Automatically open a URI when debugging a server program + +Developing a web program typically requires opening a specific URL in a + web browser in order to hit the server code in the debugger. AVAP + TM Dev Studio has a built-in feature " + serverReadyAction " to automate this task. + +Here is an example of a simple Node.js Express application: + +```javascript +var express = require('express'); + + var app = express(); + + + app.get('/', function(req, res) { + ` `res.send('Hello World!'); + + }); + + + app.listen(3000, function() { + ` `console.log('Example app listening on port 3000!'); + + }); +``` + +This application first installs a "Hello World" handler for the + "/" URL and then starts to listen for HTTP connections on port + 3000. The port is announced in the Debug Console, and typically, the + developer would now type (LINK) into their browser application. + +The serverReadyAction feature makes it possible to add a + structured property `serverReadyAction` to any launch config + and select an "action" to be performed: + +```javascript +{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch Program", + ` `"program": "${workspaceFolder}/app.js", + + ` `"serverReadyAction": { + ` `"pattern": "listening on port ([0-9]+)", + ` `"uriFormat": "(LINK)", + ` `"action": "openExternally" + ` `} + + } +``` + +Here the `pattern` property describes the regular expression + for matching the program's output string that announces the port. The + pattern for the port number is put into parenthesis so that it is + available as a regular expression capture group. In this example, we are + extracting only the port number, but it is also possible to extract a full + URI. + +The `uriFormat` property describes how the port number is + turned into a URI. The first %s is substituted by the first capture group + of the matching pattern. + +The resulting URI is then opened outside of AVAP TM Dev Studio + ("externally") with the standard application configured + for the URI's scheme. + +### Trigger Debugging via Edge or Chrome + +Alternatively, the action can be set to debugWithEdge or debugWithChrome. + In this mode, a webRoot property can be added that is passed to the Chrome + or Edge debug session. + +To simplify things a bit, most properties are optional and we use the + following fallback values: + +* pattern :{' '} `"listening on.\* (https?://\\S+|[0-9]+)"` {' '} which matches the commonly used messages "listening on port 3000" or "Now listening on: (LINK)". +* uriFormat : "(LINK)" +* webRoot :{' '} `"${workspaceFolder}"` + +### Triggering an Arbitrary Launch Config + +In some cases, you may need to configure additional options for the + browser debug session--or use a different debugger entirely. You can do + this by setting `action` to `startDebugging` with a{' '} + `name` property set to the name of the launch configuration to + start when the `pattern` is matched. + +The named launch configuration must be in the same file or folder as the + one with the `serverReadyAction` . + +Here the serverReadyAction feature in action: + +## Next steps + +To learn about AVAP TM Dev Studio's Node.js debugging + support, take a look at: + +* Node.js - Describes the Node.js debugger, which is included in AVAP TM Dev Studio. +* TypeScript - The Node.js debugger also supports TypeScript debugging. + +To see tutorials on the basics of Node.js debugging, check out these + videos: + +* Intro Video - Debugging - Showcases the basics of debugging. +* Getting started with Node.js debugging - Shows how to attach a debugger to a running Node.js process. + +To learn about debugging support for other programming languages via AVAP + TM Dev Studio extensions: + +* C++ +* Python +* Java + +To learn about AVAP TM Dev Studio's task running support, go + to: + +* Tasks - Describes how to run tasks with Gulp, Grunt, and Jake and how to show errors and warnings. + +To write your own debugger extension, visit: + +* Debugger Extension - Uses a mock sample to illustrate the steps required to create a AVAP TM Dev Studio debug extension. + +## Common questions + +### What are the supported debugging scenarios? + +Debugging of Node.js-based applications is supported on Linux, macOS, and + Windows out of the box with AVAP TM Dev Studio. Many other + scenarios are supported by AVAP TM Dev Studio extensions + available in the Marketplace. + +### I do not see any launch configurations in the Run and Debug view dropdown. + What is wrong? + +The most common problem is that you did not set up launch.json or there is + a syntax error in that file. Alternatively, you might need to open a + folder, since no-folder debugging does not support launch configurations. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md new file mode 100644 index 0000000..f18d156 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Emmet.md @@ -0,0 +1,376 @@ +Support for Emmet snippets and expansion is built right into AVAP + TM Dev Studio, no extension required . Emmet + 2.0 has support for the majority of the Emmet Actions including expanding + Emmet abbreviations and snippets. + +## How to expand Emmet abbreviations and snippets + +Emmet abbreviation and snippet expansions are enabled by default in{' '} + `html` , `haml` , `pug` , `slim` ,{' '} + `jsx` , `xml` , `xsl` , `css` ,{' '} + `scss` , `sass` , `less` and{' '} + `stylus` files, as well as any language that inherits from any + of the above like `handlebars` and `php` . + +When you start typing an Emmet abbreviation, you will see the abbreviation + displayed in the suggestion list. If you have the suggestion documentation + fly-out open, you will see a preview of the expansion as you type. If you + are in a stylesheet file, the expanded abbreviation shows up in the + suggestion list sorted among the other CSS suggestions. + +### Using Tab for Emmet expansions + +If you want to use the Tab key for expanding the Emmet abbreviations, add + the following setting: + +```javascript +"emmet.triggerExpansionOnTab": true +``` + +This setting allows using the Tab key for indentation when text is not an + Emmet abbreviation. + +### Emmet when quickSuggestions are disabled + +If you have disabled the `editor.quickSuggestions setting` , you + won't see suggestions as you type. You can still trigger suggestions + manually by pressing `Ctrl+Space` and see the preview. + +### Disable Emmet in suggestions + +If you don't want to see Emmet abbreviations in suggestions at all, + then use the following setting: + +```javascript +"emmet.showExpandedAbbreviation": "never" +``` + +You can still use the command Emmet: Expand Abbreviation {' '} + to expand your abbreviations. You can also bind any keyboard shortcut to + the command id `editor.emmet.action.expandAbbreviation` as + well. + +### Emmet suggestion ordering + +To ensure Emmet suggestions are always on top in the suggestion list, add + the following settings: + +```javascript +"emmet.showSuggestionsAsSnippets": true, + + "editor.snippetSuggestions": "top" +``` + +## Emmet abbreviations in other file types + +To enable the Emmet abbreviation expansion in file types where it is not + available by default, use the `emmet.includeLanguages setting` . + Make sure to use language identifiers for both sides of the mapping, with + the right side being the language identifier of an Emmet supported + language (see the list above). + +For example: + +```javascript +"emmet.includeLanguages": { + ` `"javascript": "javascriptreact", + ` `"razor": "html", + ` `"plaintext": "pug" + + } +``` + +Emmet has no knowledge of these new languages, and so there might be Emmet + suggestions showing up in non HTML/CSS contexts. To avoid this, you can + use the following setting. + +```javascript +"emmet.showExpandedAbbreviation": "inMarkupAndStylesheetFilesOnly" +``` + +## Emmet with multi-cursors + +You can use most of the Emmet actions with multi-cursors as well: + +## Using filters + +Filters are special post-processors that modify the expanded abbreviation + before it is output to the editor. There are 2 ways to use filters; either + globally through the `emmet.syntaxProfiles` setting or directly + in the current abbreviation. + +Below is an example of the first approach using the{' '} + `emmet.syntaxProfiles` setting to apply the `bem` {' '} + filter for all the abbreviations in HTML files: + +```javascript +"emmet.syntaxProfiles": { + ` `"html": { + ` `"filters": "bem" + ` `} + + } +``` + +To provide a filter for just the current abbreviation, append the filter + to your abbreviation. For example, div#page|c will apply the comment + filter to the div#page abbreviation. + +### BEM filter (bem) + +If you use the Block Element Modifier (BEM) way of writing HTML, + then `bem` filters are very handy for you to use. To learn more + about how to use `bem` filters, read BEM filter in Emmet. + +You can customize this filter by using the{' '} + `bem.elementSeparator` and `bem.modifierSeparator` {' '} + preferences as documented in Emmet Preferences. + +### Comment filter (c) + +This filter adds comments around important tags. By default, + "important tags" are those tags with id and/or class attribute. + +For example `div>div#page>p.title+p|c` will be expanded + to: + +```javascript +
+ ` `
+ ` `

+ ` ` + ` `

+ ` `
+ ` ` + +
+``` + +You can customize this filter by using the{' '} + `filter.commentTrigger` , `filter.commentAfter` and{' '} + `filter.commentBefore` preferences as documented in Emmet + Preferences. + +The format for the `filter.commentAfter` preference is + different in AVAP TM Dev Studio Emmet 2.0. + +For example, instead of: + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +in AVAP TM Dev Studio, you would use a simpler: + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +### Trim filter (t) + +This filter is applicable only when providing abbreviations for the{' '} + Emmet: Wrap with Abbreviation command. It removes line + markers from wrapped lines. + +## Using custom Emmet snippets + +Custom Emmet snippets need to be defined in a json file named{' '} + `snippets.json` . The `emmet.extensionsPath` setting + should have the path to the directory containing this file. + +Below is an example for the contents of this `snippets.json` {' '} + file. + +```javascript +{ + ` `"html": { + ` `"snippets": { + ` `"ull": "ul>li[id=${1} class=${2}]\*2{ + Will work with html, pug, haml and slim }", + ` `"oll": "
  1. + Will only work in html
", + ` `"ran": "{ Wrap plain text in curly braces }" + ` `} + ` `}, + ` `"css": { + ` `"snippets": { + ` `"cb": "color: black", + ` `"bsd": "border: 1px solid ${1:red}", + ` `"ls": "list-style: ${1}" + ` `} + ` `} + + } +``` + +Authoring of Custom Snippets in Emmet 2.0 via the{' '} + `snippets.json` file differs from the old way of doing the same + in a few ways: + +### HTML Emmet snippets + +HTML custom snippets are applicable to all other markup flavors like{' '} + `haml` or `pug` . When snippet value is an + abbreviation and not actual HTML, the appropriate transformations can be + applied to get the right output as per the language type. + +For example, for an unordered list with a list item, if your snippet value + is ul>li, you can use the same snippet in `html` ,{' '} + `haml` , `pug` or `slim` , but if your + snippet value is `
` , + then it will work only in `html` files. + +If you want a snippet for plain text, then surround the text with + {}. + +### CSS Emmet snippets + +Values for CSS Emmet snippets should be a complete property name and value + pair. + +CSS custom snippets are applicable to all other stylesheet flavors like{' '} + `scss` , `less` or `sass` . Therefore, + don't include a trailing ; at the end of the snippet value. Emmet will + add it as needed based on whether the language requires it. + +Do not use : in the snippet name. : is used to separate property name and + value when Emmet tries to fuzzy match the abbreviation to one of the + snippets. + +### Tab stops and cursors in custom snippets + +The syntax for tab stops in custom Emmet snippets follows the Textmate + snippets syntax. + +* Use `${1}` , `${2}` for tab stops and `${1:placeholder}` for tab stops with placeholders. +* Previously, | or ${cursor} was used to denote the cursor location in the custom Emmet snippet. This is no longer supported. Use{' '} `${1}` instead. + +## Emmet configuration + +Below are Emmet settings that you can use to customize your Emmet + experience in AVAP TM Dev Studio. + +* `emmet.includeLanguages` Use this setting to add mapping between the language of your choice and one of the Emmet supported languages to enable Emmet in the former using the syntax of the latter. Make sure to use language IDs for both sides of the mapping. For example: ` "emmet.includeLanguages": { ` `"javascript": "javascriptreact", ` `"plaintext": "pug" } ` +* `emmet.excludeLanguages` If there is a language where you do not want to see Emmet expansions, add it in this setting which takes an array of language ID strings. +* `emmet.syntaxProfiles` See Emmet Customization of output profile to learn how you can customize the output of your HTML abbreviations. For example: ` "emmet.syntaxProfiles": { ` `"html": { ` `"attr\_quotes": "single" ` `}, ` `"jsx": { ` `"self\_closing\_tag": true ` `} } ` +* `emmet.variables` Customize variables used by Emmet snippets. For example: "emmet.variables": { ` ` `"lang": "de", ` `"charset": "UTF-16" } ` +* `emmet.showExpandedAbbreviation` Controls the Emmet suggestions that show up in the suggestion/completion list. + +* `emmet.showAbbreviationSuggestions` Shows possible emmet abbreviations as suggestions. It is{' '} `true` by default. For example, when you type `li` , you get suggestions for all emmet snippets starting with `li` like{' '} `link` , `link:css` , `link:favicon` {' '} etc. This is helpful in learning Emmet snippets that you never knew existed unless you knew the Emmet cheatsheet by heart. Not applicable in stylesheets or when{' '} `emmet.showExpandedAbbreviation` is set to never. +* `emmet.extensionsPath` Provide the location of the directory that houses the{' '} `snippets.json` file which in turn has your custom snippets. +* `emmet.triggerExpansionOnTab` Set this to true to enable expanding Emmet abbreviations with Tab key. We use this setting to provide the appropriate fallback to provide indentation when there is no abbreviation to expand. +* `emmet.showSuggestionsAsSnippets` If set to true, then Emmet suggestions will be grouped along with other snippets allowing you to order them as per{' '} `editor.snippetSuggestions` setting. Set this to true and{' '} `editor.snippetSuggestions` to `top` , to ensure that Emmet suggestions always show up on top among other suggestions. +* `emmet.preferences` You can use this setting to customize Emmet as documented in Emmet Preferences. The below customizations are currently supported: `css.propertyEnd` `css.valueSeparator` `sass.propertyEnd` `sass.valueSeparator` `stylus.propertyEnd` `stylus.valueSeparator` `css.unitAliases` `css.intUnit` `css.floatUnit` `bem.elementSeparator` `bem.modifierSeparator` `filter.commentBefore` `filter.commentTrigger` `filter.commentAfter` `format.noIndentTags` `format.forceIndentationForTags` `profile.allowCompactBoolean` `css.fuzzySearchMinScore` +* `css.propertyEnd` +* `css.valueSeparator` +* `sass.propertyEnd` +* `sass.valueSeparator` +* `stylus.propertyEnd` +* `stylus.valueSeparator` +* `css.unitAliases` +* `css.intUnit` +* `css.floatUnit` +* `bem.elementSeparator` +* `bem.modifierSeparator` +* `filter.commentBefore` +* `filter.commentTrigger` +* `filter.commentAfter` +* `format.noIndentTags` +* `format.forceIndentationForTags` +* `profile.allowCompactBoolean` +* `css.fuzzySearchMinScore` + +The format for the `filter.commentAfter` preference is + different and simpler in Emmet 2.0. + +For example, instead of the older format + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +you would use + +```javascript +"emmet.preferences": { + ` `"filter.commentAfter": "\n" + + } +``` + +If you want support for any of the other preferences as documented in + Emmet Preferences, please log a feature request. + +## Next steps + +Emmet is just one of the great web developer features in AVAP TM {' '} + Dev Studio. Read on to find out about: + +* HTML - AVAP TM Dev Studio supports HTML with IntelliSense, closing tags, and formatting. +* CSS - We offer rich support for CSS, SCSS and Less. + +## Troubleshooting + +### Custom tags do not get expanded in the suggestion list + +Custom tags when used in an expression like `MyTag>YourTag` {' '} + or `MyTag.someclass` do show up in the suggestion list. But + when these are used on their own like `MyTag` , they do not + appear in the suggestion list. This is designed so to avoid noise in the + suggestion list as every word is a potential custom tag. + +Add the following setting to enable expanding of Emmet abbreviations using + tab which will expand custom tags in all cases. + +```javascript +"emmet.triggerExpansionOnTab": true +``` + +### My HTML snippets ending with + do not work + +HTML snippets ending with `+` like `select+` and{' '} + `ul+` from the Emmet cheatsheet are not supported. This is a + known issue in Emmet 2.0 Issue: emmetio/html-matcher#1. A workaround is to + create your own custom Emmet snippets for such scenarios. + +### Abbreviations are failing to expand + +First, check if you're using custom snippets (if there is a{' '} + `snippets.json` file being picked up by the{' '} + `emmet.extensionsPath` setting). The format of custom + snippets changed in AVAP TM Dev Studio release 1.53. Instead of + using | to indicate where the cursor position is, use tokens such as{' '} + `${1}` , `${2}` , etc. instead. + The default CSS snippets file from the `emmetio/emmet` {' '} + repository shows examples of the new cursor position format. + +If abbreviations are still failing to expand: + +* Check the builtin extensions to see if Emmet has been disabled. +* Try restarting the extension host by running the{' '} Developer: Restart Extension Host ( `workbench.action.restartExtensionHost` ) command in the Command Palette. + +### Where can I set all the preferences as documented in Emmet preferences? + +You can set the preferences using the setting{' '} + `emmet.preferences` . Only a subset of the preferences that are + documented in Emmet preferences can be customized. Please read the + preferences section under Emmet configuration. + +### Any tips and tricks? + +Of course! + +* In CSS abbreviations, when you use :, the left part is used to fuzzy match with the CSS property name and the right part is used to match with CSS property value. Take full advantage of this by using abbreviations like `pos:f` , `trf:rx` ,{' '} `fw:b` , etc. +* Explore all other Emmet features as documented in Emmet Actions. +* Don't hesitate to create your own custom Emmet snippets.rkdown Viewer and Editor diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md new file mode 100644 index 0000000..1e144ea --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_ExtensionMarketplace.md @@ -0,0 +1,532 @@ +Increase the power of AVAP TM Dev Studio through Extensions + +The features that AVAP TM Dev Studio includes out-of-the-box are + just the start. AVAP TM Dev Studio extensions let you add + languages, debuggers, and tools to your installation to support your + development workflow. AVAP TM Dev Studio's rich + extensibility model lets extension authors plug directly into the AVAP + TM Dev Studio UI and contribute functionality through the same + APIs used by AVAP TM Dev Studio. This article explains how to + find, install, and manage AVAP TM Dev Studio extensions from the + AVAP TM Dev Studio Marketplace. + +## Browse for extensions + +You can browse and install extensions from within AVAP TM Dev + Studio. Bring up the Extensions view by clicking on the Extensions icon in + the Activity Bar on the side of AVAP TM Dev + Studio or the View: Extensions command + (Ctrl+Shift+X). + +This will show you a list of the most popular AVAP TM Dev Studio + extensions on the AVAP TM Dev Studio Marketplace. + +Each extension in the list includes a brief description, the publisher, + the download count, and a five star rating. You can select the extension + item to display the extension's details page where you can learn more. + +Note: If your computer's Internet access goes through + a proxy server, you will need to configure the proxy server. See Proxy + server support for details. + +## Install an extension + +To install an extension, select the Install button. Once + the installation is complete, the Install button will + change to the Manage gear button. + +### Find and install an extension + +For example, let's install the popular TODO Highlight extension. This + extension highlights text like 'TODO:' and 'FIXME:' in + your source code so you can quickly find undone sections. + +In the Extensions view ( `Ctrl+Shift+X` ), type + 'todo' in the search box to filter the Marketplace offerings to + extensions with 'todo' in the title or metadata. You should see + the TODO Highlight extension in the list. + +An extension is uniquely identified by its publisher and extension IDs. If + you select the TODO Highlight extension, you will see the + Extension details page, where you can find the extension ID, in this case, + wayou.vscode-todo-highlight. Knowing the extension ID can be helpful if + there are several similarly named extensions. + +Select the Install button, and AVAP TM Dev + Studio will download and install the extension from the Marketplace. When + the installation is complete, the Install button will be + replaced with a Manage gear button. + +To see the TODO Highlight extension in action, open any source code file + and add the text 'TODO:' and you will see the text highlighted. + +The TODO Highlight extension contributes the commands,{' '} + TODO-Highlight: List highlighted annotations and{' '} + TODO-Highlight: Toggle highlight , that you can find in + the Command Palette (Ctrl+Shift+P). The{' '} + TODO-Highlight: Toggle highlight command lets you quickly + disable or enable highlighting. + +The extension also provides settings for tuning its behavior, which you + can find in the Settings editor (Ctrl+,). For example, you might + want the text search to be case insensitive and you can uncheck the{' '} + Todohighlight: Is Case Sensitive setting. + +If an extension doesn't provide the functionality you want, you can + always Uninstall the extension from the{' '} + Manage button context menu. + +This has been just one example of how to install and use an extension. The + AVAP TM Dev Studio Marketplace has thousands of extensions + supporting hundreds of programming languages and tasks. Everything from + full featured language support for [Java], [Python], [Go], and [C++] to + simple extensions that [create GUIDs], change the [color theme], or add + [virtual pets] to the editor. + +### Extension details + +On the extension details page, you can read the extension's README and + review the extension's: + +* Feature Contributions - The extension's additions to AVAP TM Dev Studio such as settings, commands and keyboard shortcuts, language grammars, debugger, etc. +* Changelog - The extension repository CHANGELOG if available. +* Dependencies - Lists if the extension depends on any other extensions. + +If an extension is an Extension Pack, the Extension Pack {' '} + section will display which extensions will be installed when you install + the pack.{' '} + + Extension Packs + {' '} + bundle separate extensions together so they can be easily installed at one + time. + +### Extensions view filter and commands + +You can filter the Extensions view with the{' '} + Filter Extensions context menu. + +There are filters to show: + +* The list of outdated extensions that can be updated +* The list of currently enabled/disabled extensions +* The list of recommended extensions based on your workspace +* The list of globally popular extensions + +You can sort the extension list by Install Count ,{' '} + Rating , Name ,{' '} + Published Date , or Updated Date in + either ascending or descending order. You can learn more about extension + search filters below . + +You can run additional Extensions view commands via the ...{' '} + View and More Actions button. + +Through this context menu you can control extension updates, enable or + disable all extensions, and use the{' '} + + Extension Bisect + {' '} + utility to isolate problematic extension behavior. + +### Search for an extension + +You can clear the Search box at the top of the Extensions view and type in + the name of the extension, tool, or programming language you're + looking for. + +For example, typing 'python' will bring up a list of Python + language extensions: + +If you know the exact identifier for an extension you're looking for, + you can use the @id: prefix, for example @id:vue.volar. Additionally, to + filter or sort results, you can use the{' '} + filter and{' '} + sort commands, detailed below. + +## Manage extensions + +AVAP TM Dev Studio makes it easy to manage your extensions. You + can install, disable, update, and uninstall extensions through the + Extensions view, the Command Palette (commands have + the Extensions: prefix) or command-line switches. + +### List installed extensions + +By default, the Extensions view will show the extensions you currently + have installed, and all extensions that are recommended for you. You can + use the Extensions: Focus on Installed View command, + available in the Command Palette (Ctrl+Shift+P) + or in the More Actions (...) dropdown menu >{' '} + Views > Installed , to clear any text + in the search box and show the list of all installed extensions, which + includes those that have been disabled. + +### Uninstall an extension + +To uninstall an extension, select the Manage gear button + at the right of an extension entry and then choose{' '} + Uninstall from the dropdown menu. This will uninstall the + extension and prompt you to reload AVAP TM Dev Studio. + +### Disable an extension + +If you don't want to permanently remove an extension, you can instead + temporarily disable the extension by clicking the gear button at the right + of an extension entry. You can disable an extension globally or just for + your current Workspace. You will be prompted to reload AVAP TM {' '} + Dev Studio after you disable an extension. + +If you want to quickly disable all installed extensions, there is a{' '} + Disable All Installed Extensions command in the{' '} + Command Palette and More Actions {' '} + (...) dropdown menu. + +Extensions remain disabled for all AVAP TM Dev Studio sessions + until you re-enable them. + +### Enable an extension + +Similarly if you have disabled an extension (it will be in the{' '} + Disabled section of the list and marked{' '} + + Disabled + + ), you can re-enable it with the Enable or{' '} + Enable (Workspace) commands in the dropdown menu. + +There is also an Enable All Extensions command in the{' '} + More Actions (...) dropdown menu. + +### Extension auto-update + +AVAP TM Dev Studio checks for extension updates and installs + them automatically. After an update, you will be prompted to reload AVAP + TM Dev Studio. If you'd rather update your extensions + manually, you can disable auto-update with the{' '} + Disable Auto Updating Extensions command that sets the + extensions.autoUpdate setting to + false. + +If you don't want AVAP TM Dev Studio to even check for + updates, you can set the extensions.autoCheckUpdates setting to false. + +### Update an extension manually + +If you have extensions auto-update disabled, you can quickly look for + extension updates by using the Show Outdated Extensions {' '} + command that uses the @updates filter. This will display any available + updates for your currently installed extensions. + +Select the Update button for the outdated extension. The + update will be installed, and you'll be prompted to reload AVAP + TM Dev Studio. You can also update all your outdated extensions + at one time with the Update All Extensions command. + +If you also have automatic checking for updates disabled, you can use the{' '} + Check for Extension Updates command to check which of + your extensions can be updated. + +## Recommended extensions + +You can see a list of recommended extensions using{' '} + Show Recommended Extensions , which sets the @recommended{' '} + filter . Extension recommendations + can either be: + +* Workspace Recommendations - Recommended by other users of your current workspace. +* Other Recommendations - Recommended based on recently opened files. + +See the section below to learn how to{' '} + contribute {' '} + recommendations for other users in your project. + +### Ignoring recommendations + +To dismiss a recommendation, select on the extension item to open the + Details page and then select the Manage gear button to + display the context menu. Select the{' '} + Ignore Recommendation menu item. Ignored recommendations + will no longer be recommended to you. + +## Configuring extensions + +AVAP TM Dev Studio extensions may have very different + configurations and requirements. Some extensions contribute settings to + AVAP TM Dev Studio, which can be modified in the Settings + editor. Other extensions may have their own configuration files. + Extensions may also require installation and setup of additional + components like compilers, debuggers, and command-line tools. Consult the + extension's README (visible in the Extensions view details + page) or go to the extension page on the AVAP TM Dev Studio + Marketplace (click on the extension name in the details page). + Many extensions are open source and have a link to their repository on + their Marketplace page. + +## Command line extension management + +To make it easier to automate and configure AVAP TM Dev Studio, + it is possible to list, install, and uninstall extensions from the command + line. When identifying an extension, provide the full name of the form + publisher.extension, for example ms-python.python. + +Example: + +```javascript +code --extensions-dir + + Set the root path for extensions. + + + code --list-extensions + + List the installed extensions. + + + code --show-versions + + Show versions of installed extensions, when using + --list-extension. + + + code --install-extension ( | + ) + + Installs an extension. + + + code --uninstall-extension ( | + ) + + Uninstalls an extension. + + + code --enable-proposed-api () + + Enables proposed API features for extensions. Can receive one or + more extension IDs to enable individually. +``` + +You can see the extension ID on the extension details page under the + Marketplace Info. + +## Extensions view filters + +The Extensions view search box supports filters to help you find and + manage extensions. You may have seen filters such as @installed and + @recommended if you used the commands{' '} + Show Installed Extensions and{' '} + Show Recommended Extensions . Also, there are filters + available to let you sort by popularity or ratings and search by category + (for example 'Linters') and tags (for example + 'node'). You can see a complete listing of all filters and + sort commands by typing @ in the extensions search box and navigating + through the suggestions: + +Here are the Extensions view filters: + +* `@builtin` - Show extensions that come with AVAP TM {' '} Dev Studio. Grouped by type (Programming Languages, Themes, etc.). +* `@disabled` - Show disabled installed extensions. +* `@installed` - Show installed extensions. +* `@outdated` - Show outdated installed extensions. A newer version is available on the Marketplace. +* `@enabled` - Show enabled installed extensions. Extensions can be individually enabled/disabled. +* `@recommended` - Show recommended extensions. Grouped as Workspace specific or general use. +* `@category` - Show extensions belonging to specified category. Below are a few of supported categories. For a complete list, type @category and follow the options in the suggestion list:{' '} @category:themes @category:formatters @category:linters @category:snippets +* @category:themes +* @category:formatters +* @category:linters +* @category:snippets + +These filters can be combined as well. For example: Use @installed + @category:themes to view all installed themes. + +If no filter is provided, the Extensions view displays the currently + installed and recommended extensions. + +### Sorting + +You can sort extensions with the @sort filter, which can take the + following values: + +* `installs` - Sort by Marketplace installation count, in descending order. +* `name` - Sort alphabetically by extension name. +* `publishedDate` - Sort by extension published date. +* `rating` - Sort by Marketplace rating (1-5 stars), in descending order. +* `updateDate` - Sort by extension last update name. + +### Categories and tags + +Extensions can set Categories and Tags {' '} + describing their features. + +You can filter on category and tag by using category: and tag:. + +Supported categories are:{' '} + ` + [Azure, Data Science, Debuggers, Education, Extension Packs, Formatters, + Keymaps, Language Packs, Linters, Machine Learning, Notebooks, Others, + Programming Languages, SCM Providers, Snippets, Testing, Themes, + Visualization] + ` + . They can be accessed through IntelliSense in the extensions search box: + +Note that you must surround the category name in quotes if it is more than + one word (for example, `category:"SCM Providers"` + ). + +Tags may contain any string and are not provided by IntelliSense, so + review the Marketplace to find helpful tags. + +## Install from a VSIX + +You can manually install a AVAP TM Dev Studio extension packaged + in a `.vsix` file. Using the Install from VSIX {' '} + command in the Extensions view command dropdown, or the{' '} + Extensions: Install from VSIX command in the{' '} + Command Palette , point to the `.vsix` file. + +You can also install using the AVAP TM Dev Studio{' '} + `--install-extension` command-line switch providing the path to + the `.vsix` file. + +```javascript +code --install-extension myextension.vsix +``` + +You may provide the `--install-extension` multiple times on the + command line to install multiple extensions at once. + +If you'd like to learn more about packaging and publishing extensions, + see our Publishing Extensions article in the Extension API. + +## Workspace recommended extensions + +A good set of extensions can make working with a particular workspace or + programming language more productive and you'd often like to share + this list with your team or colleagues. You can create a recommended list + of extensions for a workspace with the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command. + +In a single folder workspace, the command creates an{' '} + `extensions.json` file located in the workspace{' '} + `.vscode` folder where you can add a list of extensions + identifiers ({publisherName}.{extensionName}). + +In a multi-root workspace, the command will open your{' '} + `.code-workspace` file where you can list extensions under{' '} + `extensions.recommendations` . You can still add extension + recommendations to individual folders in a multi-root workspace by using + the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command. + +An example `extensions.json` could be: + +```javascript +{ + + ` `"recommendations": ["dbaeumer.vscode-eslint", + "esbenp.prettier-vscode"] + + + } +``` + +which recommends a linter extension and a code formatter extension. + +An extension is identified using its publisher name and extension + identifier `publisher.extension` . You can see the name on the + extension's detail page. AVAP TM Dev Studio will provide you + with auto-completion for installed extensions inside these files. + +AVAP TM Dev Studio prompts a user to install the recommended + extensions when a workspace is opened for the first time. The user can + also review the list with the{' '} + Extensions: Show Recommended Extensions command. + +## Next steps + +Here are a few topics you may find interesting... + +* Extension API(/api) - Start learning about the AVAP TM {' '} Dev Studio extension API. +* Your First Extension - Try creating a simple Hello World extension. +* Publishing to the Marketplace - Publish your own extension to the AVAP TM Dev Studio Marketplace. + +## Common questions + +### Where are extensions installed? + +Extensions are installed in a per user extensions folder. Depending on + your platform, the location is in the following folder: + +* Windows %USERPROFILE%.vscode\extensions +* macOS ~/.vscode/extensions +* Linux ~/.vscode/extensions + +You can change the location by launching AVAP TM Dev Studio with + the --extensions-dir command-line{' '} + option . + +### Whenever I try to install any extension, I get a connect ETIMEDOUT error + +You may see this error if your machine is going through a proxy server to + access the Internet. See the Proxy server support section in the setup + topic for details. + +### Can I download an extension directly from the Marketplace? + +Some users prefer to download an extension once from the Marketplace and + then install it multiple times from a local share. This is useful when + there are connectivity concerns or if your development team wants to use a + fixed set of extensions. + +To download an extension, navigate to the details page for the specific + extension within the Marketplace. On that page, there is a{' '} + Download Extension link in the Resources {' '} + section, which is located on the right-hand side of the page. + +Once downloaded, you can then install the extension via the{' '} + Install from VSIX command in the Extensions view command + dropdown. + +### Can I stop AVAPTM Dev Studio from providing extension + recommendations? + +Yes, if you would prefer to not have AVAP TM Dev Studio display + extension recommendations in the Extensions view or through notifications, + you can modify the following settings: + +* `extensions.showRecommendationsOnlyOnDemand` - Set to true to remove the RECOMMENDED section. +* `extensions.ignoreRecommendations` - Set to true to silence extension recommendation notifications. + +The Show Recommended Extensions command is always + available if you want to see recommendations. + +### Can I trust extensions from the Marketplace? + +The Marketplace runs a virus scan on each extension package that's + published to ensure its safety. The virus scan is run for each new + extension and for each extension update. Until the scan is all clear, the + extension won't be published in the Marketplace for public usage. + +The Marketplace also prevents extension authors from name-squatting on + official publishers such as Microsoft and RedHat. + +If a malicious extension is reported and verified, or a vulnerability is + found in an extension dependency: + +The Marketplace also provides you with resources to make an informed + decision about the extensions you install: + +* Ratings & Review - Read what others think about the extension. +* Q & A - Review existing questions and the level of the publisher's responsiveness. You can also engage with the extension's publisher(s) if you have concerns. +* Issues, Repository, and License - Check if the publisher has provided these and if they have the support you expect. + +If you do see an extension that looks suspicious, you can report the + extension to the Marketplace with the Report Abuse link + at the bottom of the extension More Info section. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md new file mode 100644 index 0000000..af187b1 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_IntelliSense.md @@ -0,0 +1,324 @@ +IntelliSense is a general term for various code editing features + including: code completion, parameter info, quick info, and member lists. + IntelliSense features are sometimes called by other names such as + "code completion", "content assist", and "code + hinting." + +## IntelliSense for your programming language + +AVAP™ Dev Studio 2024 IntelliSense is provided for JavaScript, TypeScript, + JSON, HTML, CSS, SCSS, and Less out of the box. AVAP™ DS Code supports + word based completions for any programming language but can also be + configured to have richer IntelliSense by installing a language extension. + +Below are the most popular language extensions in the{' '} + Marketplace . + Select an extension tile below to read the description and reviews to + decide which extension is best for you. + +## IntelliSense features + +AVAP™ DS Code IntelliSense features are powered by a language service. A + language service provides intelligent code completions based on language + semantics and an analysis of your source code. If a language service knows + possible completions, the IntelliSense suggestions will pop up as you + type. If you continue typing characters, the list of members + (variables, methods, etc.) is filtered to only include members + containing your typed characters. Pressing Tab or Enter will insert the + selected member. + +You can trigger IntelliSense in any editor window by typing Ctrl+Space or + by typing a trigger character (such as the dot character (.) + in JavaScript). + +If you prefer, you can turn off IntelliSense while you type. See{' '} + + Customizing IntelliSense + {' '} + below to learn how to disable or customize VS Code's IntelliSense + features. + +As provided by the language service, you can see{' '} + quick info for each method by either pressing Ctrl+Space + or clicking the info icon. The accompanying documentation for the method + will now expand to the side. The expanded documentation will stay so and + will update as you navigate the list. You can close this by pressing + Ctrl+Space again or by clicking on the close icon. + +After choosing a method you are provided with{' '} + parameter info . + +When applicable, a language service will surface the underlying types in + the quick info and method signatures. In the image above, you can see + several any types. Because JavaScript is dynamic and doesn't need or + enforce types, any suggests that the variable can be of any type. + +## Types of completions + +The JavaScript code below illustrates IntelliSense completions. + IntelliSense gives both inferred proposals and the global identifiers of + the project. The inferred symbols are presented first, followed by the + global identifiers (shown by the Word icon). + +VS Code IntelliSense offers different types of completions, including + language server suggestions, snippets, and simple word based textual + completions. + +## Customizing IntelliSense + +You can customize your IntelliSense experience in settings and key + bindings. + +### Settings + +The settings shown below are the default settings. You can change these + settings in your settings.json file as described in{' '} + User and Workspace Settings . + +```javascript +{ + + ` `// Controls if quick suggestions should show up while typing + + ` `"editor.quickSuggestions": { + + ` `"other": true, + + ` `"comments": false, + + ` `"strings": false + + ` `}, + + ` `// Controls whether suggestions should be accepted on commit + characters. For example, in JavaScript, the semi-colon (`;`) can + be a commit character that accepts a suggestion and types that + character. + + ` `"editor.acceptSuggestionOnCommitCharacter": true, + + ` `// Controls if suggestions should be accepted on 'Enter' - in + addition to 'Tab'. Helps to avoid ambiguity between inserting new lines + or accepting suggestions. The value 'smart' means only accept a + suggestion with Enter when it makes a textual change + + ` `"editor.acceptSuggestionOnEnter": "on", + + ` `// Controls the delay in ms after which quick suggestions will + show up. + + ` `"editor.quickSuggestionsDelay": 10, + + ` `// Controls if suggestions should automatically show up when + typing trigger characters + + ` `"editor.suggestOnTriggerCharacters": true, + + ` `// Controls if pressing tab inserts the best suggestion and if + tab cycles through other suggestions + + ` `"editor.tabCompletion": "off", + + ` `// Controls whether sorting favours words that appear close to + the cursor + + ` `"editor.suggest.localityBonus": true, + + ` `// Controls how suggestions are pre-selected when showing the + suggest list + + ` `"editor.suggestSelection": "first", + + ` `// Enable word based suggestions + + ` `"editor.wordBasedSuggestions": "matchingDocuments", + + ` `// Enable parameter hints + + ` `"editor.parameterHints.enabled": true, + + + } +``` + +### Tab Completion + +The editor supports "tab completion" which inserts the best + matching completion when pressing Tab. This works regardless of the + suggest widget showing or not. Also, pressing Tab after inserting a + suggestions will insert the next best suggestion. + +By default, tab completion is disabled. Use the editor.tabCompletion + setting to enable it. These values exist: + +* off - (default) Tab completion is disabled. +* on - Tab completion is enabled for all suggestions and repeated invocations insert the next best suggestion. +* onlySnippets - Tab completion only inserts static snippets which prefix match the current line prefix. + +### Locality Bonus + +Sorting of suggestions depends on extension information and on how well + they match the current word you are typing. In addition, you can ask the + editor to boost suggestions that appear closer to the cursor position, + using the editor.suggest.localityBonus setting. + +In above images you can see that count, context, and colocated are sorted + based on the scopes in which they appear (loop, function, file). + +### Suggestion selection + +By default, AVAP™ DS Code pre-selects the first suggestion in the + suggestion list. If you'd like different behavior, for example, to + always select the most recently used item in the suggestion list, you can + use the editor.suggestSelection setting. + +The available editor.suggestSelection values are: + +* first - (default) Always select the top list item. +* recentlyUsed - The previously used item is selected unless a prefix (type to select) selects a different item. +* recentlyUsedByPrefix - Select items based on previous prefixes that have completed those suggestions. + +Selecting the most recently used item is very useful as you can quickly + insert the same completion multiple times. + +"Type to select" means that the current prefix (roughly the + text left of the cursor) is used to filter and sort suggestions. When + this happens and when its result differs from the result of recentlyUsed, + it will be given precedence. + +When using the last option, recentlyUsedByPrefix, AVAP™ DS Code remembers + which item was selected for a specific prefix (partial text). For + example, if you typed co and then selected console, the next time you + typed co, the suggestion console would be pre-selected. This lets you + quickly map various prefixes to different suggestions, for example co + -> console and con -> const. + +### Snippets in suggestions + +By default, AVAP™ DS Code shows snippets and completion proposals in one + widget. You can control the behavior with the editor.snippetSuggestions + setting. To remove snippets from the suggestions widget, set the value to + "none". If you'd like to see snippets, you can specify the + order relative to suggestions; at the top ("top"), at + the bottom ("bottom"), or inline ordered alphabetically + ("inline"). The default is "inline". + +### Key bindings + +The key bindings shown below are the default key bindings. You can change + these in your keybindings.json file as described in{' '} + Key Bindings . + +Note: There are many more key bindings relating to + IntelliSense. Open the Default Keyboard Shortcuts ( + File > Preferences >{' '} + Keyboard Shortcuts ) and search for + "suggest". + +```javascript +[ + ` `{ + + ` `"key": "ctrl+space", + + ` `"command": "editor.action.triggerSuggest", + + ` `"when": "editorHasCompletionItemProvider && + editorTextFocus && !editorReadonly" + + ` `}, + + ` `{ + + ` `"key": "ctrl+space", + + ` `"command": "toggleSuggestionDetails", + + ` `"when": "editorTextFocus && suggestWidgetVisible" + + ` `}, + + ` `{ + + ` `"key": "ctrl+alt+space", + + ` `"command": "toggleSuggestionFocus", + + ` `"when": "editorTextFocus && suggestWidgetVisible" + + ` `} + + ] +``` + +## Enhance completions with AI + +In AVAP™ DS Code, you can enhance your coding with artificial intelligence + (AI), such as suggestions for lines of code or entire functions, + fast documentation creation, and help creating code-related artifacts like + tests. + +GitHub Copilot is an AI-powered + code completion tool that helps you write code faster and smarter. You can + use the{' '} + + GitHub Copilot extension + {' '} + in VS Code to generate code, or to learn from the code it generates. + +![GitHub Copilot extension in the VS Code Marketplace][IntelliSense demo] + +You can learn more about how to get started with Copilot in the{' '} + Copilot documentation . + +## Troubleshooting + +If you find IntelliSense has stopped working, the language service may not + be running. Try restarting VS Code and this should solve the issue. If you + are still missing IntelliSense features after installing a language + extension, open an issue in the repository of the language extension. + +A particular language extension may not support all the AVAP™ DS Code + IntelliSense features. Review the extension's README to find out what + is supported. If you think there are issues with a language extension, you + can usually find the issue repository for an extension through the{' '} + + AVAP™ DS Code Marketplace + + . Navigate to the extension's Details page and select the{' '} + Support link. + +## Next steps + +IntelliSense is just one of AVAP™ DS Code's powerful features. Read on + to learn more: + +* JavaScript - Get the most out of your JavaScript development, including configuring IntelliSense. +* Node.js - See an example of IntelliSense in action in the Node.js walkthrough. +* Debugging - Learn how to set up debugging for your application. +* Creating Language extensions {' '} - Learn how to create extensions that add IntelliSense for new programming languages. +* GitHub Copilot in AVAP™ DS Code {' '} - Learn how to use AI with GitHub Copilot to enhance your coding. + +## Common questions + +### Why am I not getting any suggestions? + +This can be caused by a variety of reasons. First, try restarting AVAP™ DS + Code. If the problem persists, consult the language extension's + documentation. For JavaScript specific troubleshooting, please see the{' '} + + JavaScript language topic + + . + +### Why am I not seeing method and variable suggestions? + +This issue is caused by missing type declaration (typings) files + in JavaScript. You can check if a type declaration file package is + available for a specific library by using the{' '} + TypeSearch site. + There is more information about this issue in the{' '} + + JavaScript language topic + + . For other languages, please consult the extension's documentation. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md new file mode 100644 index 0000000..6f2c7fa --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_MultiRootWorkspaces.md @@ -0,0 +1,423 @@ +You can work with multiple project folders in AVAP™ Dev Studio 2024 with + multi-root workspaces. This can be helpful when you are working on several + related projects at one time. For example, you might have a repository + with a product's documentation that you like to keep current when you + update the product source code. + +## Adding folders + +It is easy to add another folder to your existing workspace. There are + several gestures for adding folders: + +### Add Folder to Workspace + +The File > Add Folder to Workspace {' '} + command brings up an Open Folder dialog to select the new folder. + +Once a root folder is added, the Explorer will show the new folder as a + root in the File Explorer. You can right-click on any of the root folders + and use the context menu to add or remove folders. + +The File Explorer should work and behave as before. You can move files + between root folders and use any of the typical file operation actions + provided in the context menu and the Explorer view. + +Settings like files.exclude are supported for each root folder if + configured, and across all folders if configured as global user setting. + +### Drag and drop + +You can use drag and drop to add folders to a workspace. Drag a folder to + the File Explorer to add it to the current workspace. You can even select + and drag multiple folders. + +You can also use drag and drop to reorder folders in the workspace. + +### Multiple selection native file open dialogs + +Opening multiple folders with your platform's native file open dialog + will create a multi-root workspace. + +### command line --add + +Add a folder or multiple folders to the last active AVAP TM Dev + Studio instance for a multi-root workspace. + +```javascript +` `code --add vscode vscode-docs +``` + +### Removing folders + +You can remove a folder from a Workspace with the{' '} + Remove Folder from Workspace context menu command. + +## Workspace file + +When you add multiple folders, they are initially placed in a Workspace + titled UNTITLED WORKSPACE and that name will remain until + you save the workspace. You do not need to save a Workspace until you want + to have it in a permanent location, for example, on your Desktop. Untitled + Workspaces are present as long as the AVAP TM Dev Studio + instance they are using is open. Once you completely close an instance + with an untitled workspace, you will be asked to save it if you plan to + open it again in the future: + +When you save your workspace, it will create a .code-workspace file and + the file name will be displayed in the File Explorer. + +### Save Workspace As... + +If you want to move your Workspace file to a new location, you can use the{' '} + File > Save Workspace As command, + which will automatically set the correct folder paths relative to the new + Workspace file location. + +### Opening workspace files + +To reopen a Workspace, you can: + +* Double-click the .code-workspace file in your platform's Explorer. +* Use the File > Open Workspace {' '} command and select the Workspace file. +* Select the Workspace from the File >{' '} Open Recent (Ctrl+R) list.{' '} Workspaces have a (Workspace) suffix to differentiate them from folders. +* Workspaces have a (Workspace) suffix to differentiate them from folders. + +Just like Close Folder when a single folder is open in + AVAP TM Dev Studio, there is a Close Workspace {' '} + (Ctrl+K F) command to close the active Workspace. + +### Workspace file schema + +The schema of `.code-workspace` is fairly straightforward. You + have an array of folders with either absolute or relative paths. Relative + paths are better when you want to share Workspace files. + +You can override the display `name` of your folders with the + name attribute, to give more meaningful names to folders in the Explorer. + For example, you could name your project folders such as 'Product' + and 'Documentation' to easily identify the content by folder name: + +```javascript +{ + ` `"folders": [` `{ + ` `// Source code + ` `"name": "Product", + ` `"path": "vscode" + ` `}, + ` `{ + ` `// Docs and release notes + ` `"name": "Documentation", + ` `"path": "vscode-docs" + ` `}, + ` `{ + ` `// Yeoman extension generator + ` `"name": "Extension generator", + ` `"path": "vscode-generator-code" + ` `} + ` `] + + } +``` + +which will result in the following Explorer display: + +As you can see from the example above, you can add comments to your + Workspace files. + +The Workspace file can also contain Workspace global settings under{' '} + `settings` and extension recommendations under{' '} + `extensions` , which we will discuss below. + +## General UI + +### Editor + +There are only a few changes to the AVAP TM Dev Studio UI when + you are using multi-root workspaces, primarily to disambiguate files + between folders. For example, if there is a name collision between files + in multiple folders, AVAP TM Dev Studio will include the folder + name in tabbed headers. + +If you'd always like to see the folder displayed in the tabbed header, + you can use the `workbench.editor.labelFormat` setting + "medium" or "long" values to show the folder or full + paths. + +```javascript +"workbench.editor.labelFormat": "medium" +``` + +AVAP TM Dev Studio UI such as the OPEN EDITORS {' '} + and Quick Open (Ctrl+P) lists include the folder + name. + +If you are using an File Icon Theme and the active theme supports it, you + will see a special Workspace icon. + +Below you can see the Workspace icons from the built-in{' '} + Minimal (Visual Studio Code) file icon theme: + +### Search + +AVAP TM Dev Studio features like global search work across all + folders and group the search results by folder. + +When you have a multi-root workspace open, you can choose to search in a + single root folder by using the ./ syntax in the{' '} + files to include box. For example, if you enter{' '} + `./project1/\*\*/\*.txt` , that will search for all{' '} + `.txt` files under the `project1/` root folder. + +## Settings + +With multiple root folders in one workspace, it is possible to have a + .vscode folder in each root folder defining the settings that should apply + for that folder. To avoid setting collisions, only resource (file, + folder) settings are applied when using a multi-root workspace. + Settings that affect the entire editor (for example, UI layout) + are ignored. For example, two projects cannot both set the zoom level. + +User settings are supported as with single folder projects and you can + also set global Workspace settings that will apply to all folders in your + multi-root Workspace. Global Workspace settings will be stored in your + `.code-workspace` file. + +```javascript +{ + ` `"folders": [` `{ + ` `"path": "vscode" + ` `}, + ` `{ + ` `"path": "vscode-docs" + ` `}, + ` `{ + ` `"path": "vscode-generator-code" + ` `} + ` `], + ` `"settings": { + ` `"window.zoomLevel": 1, + ` `"files.autoSave": "afterDelay" + ` `} + + } +``` + +When you go from a single folder instance to multiple folders, AVAP + TM Dev Studio will add the appropriate editor-wide settings + from the first folder to the new global Workspace settings. + +You can easily review and modify the different settings files through the + Settings editor. The Settings editor tabs let you select your User + settings, global Workspace settings, and individual folder settings. + +You can also open specific settings files with the commands: + +* Preferences: Open User Settings - Open your global User settings +* Preferences: Open Workspace Settings - Open the settings section of your Workspace file. +* Preferences: Open Folder Settings - Open the settings for the active folder. + +Global Workspace settings override User settings and folder settings can + override Workspace or User settings. + +### Unsupported folder settings + +Unsupported editor-wide folder settings will be shown as grayed out in + your folder settings and are filtered out of the{' '} + DEFAULT FOLDER SETTINGS list. You will also see an + information icon in front of the setting. + +## Debugging + +With multi-root workspaces, AVAP TM Dev Studio searches across + all folders for `launch.json` debug configuration files and + displays them with the folder name as a suffix. Additionally AVAP + TM Dev Studio will also display launch configurations defined + in the workspace configuration file. + +The example above shows the debugging configurations for the TSLint + extension. There is a `launch` configuration from the{' '} + `tslint` extension folder to start the extension running in the + AVAP TM Dev Studio Extension Host and also an{' '} + `attach` configuration from the `tslint-server` {' '} + folder to attach the debugger to a running TSLint server. + +You can also see the three Add Config commands for the + folders, `tslint` , `tslint-server` , and{' '} + `tslint-tests` , in the vscode-tslint Workspace. The{' '} + Add Config command will either open an existing + launch.json file in the folder's .vscode subfolder or create a new one + and display the debugging configuration template dropdown. + +Variables used in a configuration (for example{' '} + `${workspaceFolder}` or the now deprecated{' '} + `${workspaceRoot}` ) are resolved relative to the + folder they belong to. It is possible to scope a variable per workspace + folder by appending the root folder's name to a variable + (separated by a colon). + +### Workspace launch configurations + +Workspace scoped launch configurations live in the " + `launch` " section of the workspace configuration file + ( Workspaces: Open Workspace Configuration File in the + Command Palette): + +Alternatively, new launch configurations can be added via the "Add + Config (workspace)" entry of the Launch Configuration + dropdown menu: + +A compound launch configuration can reference the individual launch + configurations by name as long as the names are unique within the + workspace, for example: + +```javascript +` `"compounds": [{ + ` `"name": "Launch Server & Client", + ` `"configurations": [` `"Launch Server", + ` `"Launch Client" + ` `] + ` `}] +``` + +If the individual launch configuration names are not unique, the + qualifying folder can be specified with a more verbose "folder" + syntax: + +```javascript +` `"compounds": [{ + ` `"name": "Launch Server & Client", + ` `"configurations": [` `"Launch Server", + ` `{ + ` `"folder": "Web Client", + ` `"name": "Launch Client" + ` `}, + ` `{ + ` `"folder": "Desktop Client", + ` `"name": "Launch Client" + ` `} + ` `] + ` `}] +``` + +In addition to `compounds` , the `launch` section of + the workspace configuration file can contain regular launch configurations + too. Make sure that all used variables are explicitly scoped to a specific + folder because otherwise they are not valid for the workspace. You can + find more details about explicitly scoped variables in the Variables + Reference. + +Here is an example for a launch configuration where the program lives in a + folder "Program" and where all files from a folder + "Library" should be skipped when stepping: + +```javascript +"launch": { + ` `"configurations": [{ + ` `"type": "node", + ` `"request": "launch", + ` `"name": "Launch test", + ` `"program": "${workspaceFolder:Program}/test.js", + ` `"skipFiles": [` + `"${workspaceFolder:Library}/out/\*\*/\*.js" + ` `] + ` `}] + + } +``` + +## Tasks + +Similar to how AVAP TM Dev Studio searches for debugging + configurations, AVAP TM Dev Studio will also try to autodetect + tasks from gulp, grunt, npm, and TypeScript project files across all + folders in a workspace as well as search for tasks defined in{' '} + `tasks.json` files. The location of tasks is indicated by a + folder name suffix. Note that tasks defined in `tasks.json` {' '} + must be version 2.0.0. + +From the TSLint extension Workspace example above, you can see that there + are two configured tasks from `tasks.json` {' '} + files in the `tslint` and `tslint-tests` folders and + numerous autodetected npm and TypeScript compiler{' '} + detected tasks . + +### Workspace task configuration + +Workspace scoped tasks live in the " `tasks` " section + of the workspace configuration file ( + Workspaces: Open Workspace Configuration File in the + Command Palette). Only " `shell` " and " + `process` " type tasks can be defined in the workspace + configuration file. + +## Source Control + +With multi-root workspaces, there is a{' '} + SOURCE CONTROL PROVIDERS section that gives you an + overview when you have multiple active repositories. These can be + contributed by several SCM providers; for example, you can have Git + repositories side-by-side with Azure DevOps Server workspaces. As you + select repositories in this view, you can see the source control details + below. + +You can use Ctrl+Click or Shift+Click to select multiple repositories. + Their details will appear as separate regions underneath. + +## Extensions + +If you are an extension author, you can review our Adopting Multi Root + Workspace APIs guide to learn about AVAP TM Dev Studio + multi-root workspace APIs and how to make your extension work well across + multiple folders. + +Below are some of the popular extensions that have adopted the multi-root + workspace APIs. + +### Extension recommendations + +AVAP TM Dev Studio supports folder level extension + recommendations through the `extensions.json` files under the + folder's `.vscode` subfolder. You can also provide global + Workspace extension recommendations by adding them to your{' '} + `.code-workspace` file. You can use the{' '} + + Extensions: Configure Recommended Extensions (Workspace Folder) + {' '} + command to open your Workspace file and add extension identifiers + ({publisherName}.{extensionName}) to the{' '} + `extensions.recommendations` array. + +```javascript +{ + ` `"folders": [` `{ + ` `"path": "vscode" + ` `}, + ` `{ + ` `"path": "vscode-docs" + ` `} + ` `], + ` `"extensions": { + ` `"recommendations": ["eg2.tslint", "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode"] + ` `} + + } +``` + +## Next steps + +* What is a AVAP TM Dev Studio "workspace"? - More about single-folder and multi-root workspaces. +* Debugging - Learn how to set up debugging for your application. +* Tasks - Tasks let you run external tools like compilers within AVAP TM Dev Studio. + +## Common questions + +### How can I go back to working with a single project folder? + +You can either close the Workspace and open the folder directly or remove + the folder from Workspace. + +### As an extension author what do I need to do? + +See our Adopting Multi Root Workspace APIs guide. Most extensions can + easily support multi-root workspaces. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md new file mode 100644 index 0000000..df17875 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Profiles.md @@ -0,0 +1,535 @@ +AVAP TM Dev Studio has hundreds of settings, thousands of + extensions, and innumerable ways to adjust the UI layout to customize the + editor. AVAP TM Dev Studio Profiles let you + create sets of customizations and quickly switch between them or share + them with others. This topic explains how to create, modify, export, and + import profiles. + +## Create a Profile + +AVAP TM Dev Studio treats your current configuration as the{' '} + Default Profile . As you modify settings, install + extensions, or change UI layout by moving views, these customizations are + tracked in the Default Profile. + +To create a new profile, you can use the File >{' '} + Preferences > Profiles >{' '} + Create Profile menu item. + +You can create a new profile based on the current profile ( + Profiles: Create from Current Profiles ) or create an + Empty Profile. An Empty Profile includes no user customizations + (settings, extensions, snippets, etc.). + +You can also access the Profile command menu via the{' '} + Manage gear button in the lower right of the Activity + bar. + +The Profiles: Create Profile command is also available in + the Command Palette (Ctrl+Shift+P). + +You can choose to create a new profile by copying from a Profile Template + or from an existing profile or create an Empty Profile in the Profile + creation dialog. + +### Partial Profile + +A partial profile allows you to customize only a subset of configurations + (settings, keyboard shortcuts, snippets, tasks and extensions) and + use the rest of the configurations from the Default Profile. For example, + you can create a profile with all configurations except for keyboard + shortcuts, and AVAP TM Dev Studio will apply the keyboard + shortcuts from the Default Profile when this profile is active. + +### Check the current profile + +The current profile name is displayed in several places in the AVAP + TM Dev Studio UI: + +* Title bar +* File > Preferences >{' '} Profiles +* Manage gear button hover + +If you are still using the Default Profile, no profile name is displayed. + +The Manage gear button displays a badge with the first + two letters of the active profile so you can quickly check which profile + you are running. + +### Configure a profile + +You can configure a profile just as you would normally change any AVAP + TM Dev Studio configuration. You can install/uninstall/disable + extensions, change settings, and adjust the editor's UI layout + (for example, moving and hiding views) like normal. These changes + are stored in your currently active profile. + +### Workspace associations + +When you create or select an existing profile, it is associated with the + current workspace and whenever you open that folder, the workspace's + profile is active. If you open another folder, the profile switches to + that folder's associated profile if one has been set or remains on the + last used profile. + +## Managing profiles + +### Switch profiles + +You can quickly switch between profiles with the{' '} + Profiles: Switch Profile command in the Command Palette, + which presents a dropdown listing your available profiles. + +You can also switch profiles by selecting a profile from the list + displayed in the Profiles menus, available via the Manage {' '} + gear button or File > Preferences {' '} + > Profiles . + +### Edit a profile + +You can edit an existing profile via the Edit command in + the Profiles menu. + +### Delete a profile + +You can delete a profile via the Delete Profile command. + The Delete Profile drop down lets you select which + profile(s) to delete. + +## Profile contents + +The Profiles: Show Contents command (available in the + Command Palette or Profiles menus) brings up the Profiles view, where + you can review the customizations for the profile. + +A profile can include: + +* Settings - In a profile-specific `settings.json` file. +* Extensions - The list of extensions included in the current profile. +* UI state - View layout (positions), visible views and actions. +* Keybindings - In a profile-specific `keybindings.json` file. +* Snippets - In a profile-specific `{language}.json` {' '} files. +* User Tasks - In a profile-specific `tasks.json` file. + +When you create a new profile based on the Default Profile, the + profile-specific configuration files are populated from your user + configuration files. Workspace-specific settings are not automatically + included in a new profile. + +### Applying a setting to all profiles + +A setting can be applied to all profiles using the{' '} + Apply Setting to all Profiles action available in the + Settings editor. + +This will apply the value of the setting to all profiles. Any updates to + this setting from any profile will be applied to all profiles. You can + always revert this by unchecking the{' '} + Apply Setting to all Profiles action. + +### Applying an extension to all profiles + +An extension can be applied to all profiles by clicking on the{' '} + Apply Extension to all Profiles action in the Extensions + view. + +This will make this extension available in all profiles. You can always + revert this by unchecking the{' '} + Apply Extension to all Profiles action. + +## Share Profiles + +### Export + +You can export a profile in order to save it or share it with others. The{' '} + Export Profile command displays the Profiles view with + the contents of the active profile and an Export button. + You can unselect various elements of the profile such as extensions or + configuration files before you export the profile. + +When you select Export , you are prompted for the profile + name and whether you want to export to a GitHub gist or your local file + system. + +After you save a profile to GitHub (you'll be prompted to log into + GitHub), a dialog gives you the option to Copy Link {' '} + so you can share your profile gist URL with others. The URL includes an + autogenerated GUID and has the format (LINK). The GitHub gist is + marked as Secret , so only those with the link can see the + gist. + +If you launch the profile URL, it opens AVAP TM Dev Studio for + the Web (vscode.dev) with the Profiles view open and the imported + profile contents displayed. You can unselect profile elements if you wish + and you need to manually Install Extensions (via the + download cloud button) if you want to continue using that profile in + vscode.dev. + +You also have the option to{' '} + + Import Profile in AVAP TM Dev Studio + + , which opens AVAP TM Dev Studio Desktop with the profile's + contents displayed and an Import Profile button. + +You can review your gists at (LINK). From your GitHub gist page + you can rename, delete, or copy the GUID of a gist. + +If you chose to save the profile as a local file, a{' '} + Save Profile dialog lets you place the file on your local + machine. A profile is persisted in a file with the extension{' '} + `.code-profile` . + +### Import + +To import an existing profile, run the Import Profiles {' '} + command. You are prompted for the URL of a GitHub gist or the file + location of a profile via an Import Profile dialog. Once + you have selected the profile, the Profiles view opens and displays the + profile to import. You can unselect some profile elements if you don't + want to import them. Select the Import Profile button and + you will now be using the imported profile. + +## Uses for Profiles + +Profiles are a great way to customize AVAP TM Dev Studio to + better fit your needs. In this section, we look at some common use cases + for profiles. + +Since profiles are remembered per workspace, they are a great way to + customize AVAP TM Dev Studio for a specific programming + language. For example, you can create a JavaScript frontend profile that + includes the extensions, settings, and customizations you use for + JavaScript development in one workspace, and have a Python backend profile + that includes the extensions, settings, and customizations you use for + Python development in another workspace. Using this approach, you can + easily switch between workspaces and always have AVAP TM Dev + Studio configured the right way. + +### Demos + +When doing a demo, you can use a profile to set up a specific + configuration for your demo. For example, you can create a profile with a + specific set of extensions and settings like zoom level, font size, and + color theme. By doing this, a demo will not mess up your normal AVAP + TM Dev Studio setup and you can customize AVAP TM Dev + Studio for better visibility during your presentation. + +### Education + +Profiles can be used to customize AVAP TM Dev Studio for + students to ease the use in a classroom setting. Profiles allow educators + to quickly share a customized AVAP TM Dev Studio setup with + students. For example, educators can create a profile with a specific set + of extensions and settings needed for a computer science class and then + share that profile with students. + +### Report AVAPTM Dev Studio issues + +One use of an Empty Profile is to reset your editor when you want to + report an issue with AVAP TM Dev Studio. An Empty Profile + disables all extensions and modified settings so you can quickly see if + the issue is due to an extension, a setting, or is in AVAP TM {' '} + Dev Studio core. + +## Profile Templates + +AVAP TM Dev Studio comes with a predefined set of profile + templates that you can use to customize AVAP TM Dev Studio for + your specific workflow. To create a new profile based on a template, + select a Profile Template when going through the{' '} + Create Profile flow. + +### Python Profile Template + +The Python profile is a good starting point for Python development. It + comes with Python specific snippets and has the following extensions: + +* autoDocstring - Generate Python docstrings automatically. +* Black Formatter - Formatting support using the black formatter. +* Docker - Create, manage, and debug containerized applications. +* Even Better TOML - Fully-featured TOML support. +* Python - IntelliSense, linting, formatting, debugging, refactoring. +* Python Environment Manager - Manage Python environments and packages. +* Remote Development extension pack - Supports SSH, WSL, and Dev Containers. +* Ruff - Integrates the Ruff Python linter. + +This profile also sets the following settings: + +```javascript +` `"python.analysis.autoImportCompletions": true, + ` `"python.analysis.fixAll": ["source.unusedImports"], + ` `"editor.defaultFormatter": "ms-python.black-formatter" +``` + +### Data Science Profile Template + +The Data Science profile is a good starting point for all data and + notebook work. It comes with specific snippets and has the following + extensions: + +* Data Wrangler - Data cleaning and preparation for tabular datasets. +* Black Formatter - Formatting support using the black formatter. +* Jupyter - Use Jupyter notebooks within AVAP TM Dev Studio. +* Python - IntelliSense, linting, formatting, debugging, refactoring. +* Dev Containers - Create custom development environments inside a Docker container. +* GitHub Copilot - Your AI pair programmer. + +This profile also sets the following settings: + +```javascript +` `"[python]": { + ` `"editor.defaultFormatter": "ms-python.black-formatter", + ` `"editor.formatOnType": true, + ` `"editor.formatOnSave": true + ` `}, + ` `"editor.inlineSuggest.enabled": true, + ` `"editor.lineHeight": 17, + ` `"breadcrumbs.enabled": false, + ` `"files.autoSave": "afterDelay", + ` `"jupyter.themeMatplotlibPlots": true, + ` `"jupyter.widgetScriptSources": [` `"unpkg.com", + ` `"jsdelivr.com" + ` `], + ` `"notebook.experimental.outputScrolling": true, + ` `// "notebook.outline.showCodeCells": true, + ` `"files.exclude": { + ` `"\*\*/.csv": true, + ` `"\*\*/.parquet": true, + ` `"\*\*/.pkl": true, + ` `"\*\*/.xls": true + ` `} +``` + +### Doc Writer Profile Template + +The Doc Writer profile is a good lightweight setup for writing + documentation. It comes with the following extensions: + +* Code Spell Checker - Spelling checker for source code. +* Markdown Checkboxes - Adds checkbox support to the AVAP TM Dev Studio built-in Markdown Preview. +* Markdown Emoji - Adds emoji syntax support to Markdown Preview and notebook Markdown cells. +* Markdown Footnotes - Adds ^footnote syntax support to the Markdown Preview. +* Markdown Preview GitHub Styling - Use GitHub styling in the Markdown Preview. +* Markdown Preview Mermaid Support - Mermaid diagrams and flowcharts. +* Markdown yaml Preamble - Renders YAML front matter as a table. +* markdownlint - Markdown linting and style checking for AVAP TM {' '} Dev Studio. + +This profile also sets the following settings: + +```javascript +` `"workbench.colorTheme": "Default Light+ Experimental", + ` `"editor.minimap.enabled": false, + ` `"breadcrumbs.enabled": false, + ` `"editor.glyphMargin": false, + ` `"explorer.decorations.badges": false, + ` `"explorer.decorations.colors": false, + ` `"editor.fontLigatures": true, + ` `"files.autoSave": "afterDelay", + ` `"git.enableSmartCommit": true, + ` `"window.commandCenter": true, + ` `"editor.renderWhitespace": "none", + ` `"workbench.editor.untitled.hint": "hidden", + ` `"markdown.validate.enabled": true, + ` `"markdown.updateLinksOnFileMove.enabled": "prompt", + ` `"workbench.startupEditor": "none" +``` + +### Node.js Profile Template* + +The Node.js profile is a good starting point for all Node.js work. It + comes with the following extensions: + +* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. +* Dev Containers - Create custom development environments inside a Docker container. +* Docker - Create, manage, and debug containerized applications. +* DotENV - Support for dotenv file syntax. +* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. +* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. +* Jest - Use Facebook's jest testing framework. +* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. +* npm Intellisense - Autocomplete npm modules in import statements. +* Prettier - Code formatter - Code formatter using Prettier. +* Rest Client - REST Client for AVAP TM Dev Studio. +* YAML - YAML language support with built-in Kubernetes syntax. + +This profile comes with the following settings: + +```javascript +` `"editor.formatOnPaste": true, + ` `"git.autofetch": true, + ` `"[markdown]": { + ` `"editor.wordWrap": "on" + ` `}, + ` `"[json]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[jsonc]": { + ` `"editor.defaultFormatter": "vscode.json-language-features" + ` `}, + ` `"[html]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[javascript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[typescript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `} +``` + +### Angular Profile Template + +The Angular profile is a good starting point for all Angular work. It + comes with the following extensions: + +* Angular Language Service - Editor services for Angular templates. +* Angular Schematics - Integrate Angular schematics (CLI commands). +* angular2-switcher - Easily navigate to `typescript|template|style` in angular2 project. +* Dev Containers - Create custom development environments inside a Docker container. +* EditorConfig for AVAP TM Dev Studio - EditorConfig Support for AVAP TM Dev Studio. +* ESLint - Integrates ESLint JavaScript into AVAP TM Dev Studio. +* JavaScript (ES6) code snippets - Code snippets for JavaScript in ES6 syntax. +* Jest - Use Facebook's jest testing framework. +* Material Icon Theme - Material Design Icons for AVAP TM Dev Studio. +* Microsoft Edge Tools for AVAP TM Dev Studio - Use the Microsoft Edge Tools from within AVAP TM Dev Studio. +* Playwright Test for VSCode - Run Playwright tests in AVAP TM {' '} Dev Studio. +* Prettier - Code formatter - Code formatter using Prettier. +* Rest Client - REST Client for AVAP TM Dev Studio. +* YAML - YAML language support with built-in Kubernetes syntax. + +This profile sets the following settings: + +```javascript +` `"editor.formatOnPaste": true, + ` `"git.autofetch": true, + ` `"[markdown]": { + ` `"editor.wordWrap": "on" + ` `}, + ` `"[json]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[jsonc]": { + ` `"editor.defaultFormatter": "vscode.json-language-features" + ` `}, + ` `"[html]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[javascript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"[typescript]": { + ` `"editor.defaultFormatter": "esbenp.prettier-vscode" + ` `}, + ` `"workbench.iconTheme": "material-icon-theme" +``` + +### Java General Profile Template + +The Java General profile is a good starting point for all Java work. It + customizes the layout to improve the Java experience and comes with the + following extensions from the Extension Pack for Java: + +* Debugger for Java - A lightweight Java debugger. +* IntelliCode - AI-assisted development. +* IntelliCode API Usage Examples - Provides code examples for over 100K different APIs. +* Language Support for Java(TM) by Red Hat - Fundamental Java language support, Linting, Intellisense, formatting, refactoring. +* Maven for Java - Manage Maven projects and builds. +* Project Manager for Java - Manage Java projects within AVAP TM {' '} Dev Studio. +* Test Runner for Java - Run and debug JUnit or TestNG test cases. + +### Java Spring Profile Template + +The Java Spring profile is a good starting point for all Java and Spring + developers. It builds on the Java General profile and add the following + extensions from the Spring Boot Extension Pack: + +* Spring Boot Dashboard - Provides Spring Boot live data visualization and observation in your running Spring applications. +* Spring Boot Tools - Rich language support for Spring Boot files. +* Spring Initializr Java Support - Scaffold and generate Spring Boot Java projects. + +This profile sets the following settings: + +```javascript +` `"[java]": { + ` `"editor.defaultFormatter": "redhat.java" + ` `}, + ` `"boot-java.rewrite.reconcile": true +``` + +## Command line + +You can launch AVAP TM Dev Studio with a specific profile via + the `--profile` command-line interface option. You pass the + name of the profile after the `--profile` argument and open a + folder or a workspace using that profile. The command line below opens the{' '} + `web-sample` folder with the "Web Development" + profile: + +` + code ~/projects/web-sample --profile "Web Development" + ` + +If the profile specified does not exist, a new empty profile with the + given name is created. + +## Common Questions + +### Where are profiles kept? + +Profiles are stored under your User configurations similar to your user + settings and keybindings. + +* Windows `%APPDATA%\Code\User\profiles` +* macOS {' '} `$HOME/Library/Application\ Support/Code/User/profiles` +* Linux `$HOME/.config/Code/User/profiles` + +If you are using the Insiders version, the intermediate folder name is{' '} + `Code - Insiders` . + +### Where is the UI State globalState.json file? + +If you expand the UI State node in the Profiles view, + there is a `globalState.json` entry. This is an in-memory JSON + representation of your profile's UI State, describing the visibility + and layout of various AVAP TM Dev Studio UI elements. The file + does not actually exist on disk and is just a JSON view of the underlying + global state storage. + +### What is a Temporary Profile? + +A Temporary Profile is a profile that is not saved across AVAP + TM Dev Studio sessions. You create a Temporary Profile via the{' '} + Profiles: Create a Temporary Profile command in the + Command Palette. The Temporary Profile starts as an Empty Profile and has + an automatically generated name (such as Temp 1 ). + You can modify the profile settings and extensions, use the profile for + the lifetime of your AVAP TM Dev Studio session, but it will be + deleted once you close AVAP TM Dev Studio. + +Temporary Profiles are useful if you want to try a new configuration or + test an extension without modifying your default or existing profile. + Restarting AVAP TM Dev Studio reenables the current profile for + your workspace. + +### How can I remove the profile from my project? + +You can set your project back to the Default Profile. If you'd like to + remove all profile workspace associations, you can use the{' '} + Developer: Reset Workspace Profiles Associations , which + will set all local folders currently assigned a profile back to the + Default Profile. Reset Workspace Profiles Associations {' '} + does not delete any existing profiles. + +### Do profiles sync across machines (via Settings Sync)? + +Yes, you can use Settings Sync to move your profiles across various + machines. With Setting Sync enabled and Profiles checked + in the Settings Sync: Configure drop down, all your + created profiles are available. + +### Why are some settings not exported when exporting a profile? + +When exporting profiles, machine-specific settings are not included + because these setting would not be applicable on another machine. For + example, settings that point to local paths are not included. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md new file mode 100644 index 0000000..876a9ff --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Refactoring.md @@ -0,0 +1,156 @@ +Source code refactoring can improve the quality and maintainability of + your project by restructuring your code while not modifying the runtime + behavior. AVAP TM Dev Studio supports refactoring operations + (refactorings) such as Extract Method and Extract Variable to + improve your code base from within your editor. + +For example, a common refactoring used to avoid duplicating code (a + maintenance headache) is the Extract Method refactoring, where you + select source code that you'd like to reuse elsewhere and pull it out + into its own shared method. + +Refactorings are provided by a language service and AVAP TM Dev + Studio has built-in support for TypeScript and JavaScript refactoring + through the TypeScript language service. Refactoring support for other + programming languages is provided through AVAP TM Dev Studio + extensions that contribute language services. The UI and commands for + refactoring are the same across languages, and in this topic we'll + demonstrate refactoring support with the TypeScript language service. + +## Code Actions = Quick Fixes and refactorings + +In AVAP TM Dev Studio, Code Actions can provide both + refactorings and Quick Fixes for detected issues (highlighted with red + squiggles). An available Code Action is announced by a lightbulb near + the source code when the cursor is on a squiggle or selected text region. + Clicking on the Code Action lightbulb or using the{' '} + Quick Fix command Ctrl+. will display Quick Fixes and + refactorings. + +If you'd just like to see refactorings without Quick Fixes, you can + use the Refactor command (Ctrl+Shift+R). + +## Refactoring actions + +### Extract Method + +Select the source code you'd like to extract and then click on the + lightbulb in the gutter or press (Ctrl+.) to see available + refactorings. Source code fragments can be extracted into a new method, or + into a new function at various different scopes. During the extract + refactoring, you will be prompted to provide a meaningful name. + +### Extract Variable + +TypeScript language service provides Extract to const {' '} + refactoring to create a new local variable for the currently selected + expression: + +When working with classes, you can also extract a value to a new property. + +## Rename symbol + +Renaming is a common operation related to refactoring source code and AVAP + TM Dev Studio has a separate Rename Symbol {' '} + command (F2). Some languages support rename symbol across files. + Press F2 and then type the new desired name and press `Enter` . + All usages of the symbol will be renamed, across files. + +## Keybindings for Code Actions + +The `editor.action.codeAction` command lets you configure + keybindings for specific Code Actions. This keybinding, for example, + triggers the Extract function refactoring Code Actions: + +```javascript +{ + ` `"key": "ctrl+shift+r ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.function" + ` `} + + } +``` + +Code Action kinds are specified by extensions using the enhanced{' '} + `CodeActionProvided` API. Kinds are hierarchical, so{' '} + `"kind": "refactor"` will show all + refactoring Code Actions, whereas `"kind"` :{' '} + `"refactor.extract.function"` will only show{' '} + Extract function refactorings. + +Using the above keybinding, if only a single{' '} + `"refactor.extract.function"` Code Action is + available, it will be automatically applied. If multiple{' '} + Extract function Code Actions are available, we bring up + a context menu to select them: + +You can also control how/when Code Actions are automatically applied using + the `apply` argument: + +```javascript +{ + ` `"key": "ctrl+shift+r ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.function", + ` `"apply": "first" + ` `} + + } +``` + +Valid values for `"apply"` : + +* "first" - Always automatically apply the first available Code Action. +* "ifSingle" - Default. Automatically apply the Code Action if only one is available. Otherwise, show the context menu. +* "never" - Always show the Code Action context menu, even if only a single Code Action is available. + +When a Code Action keybinding is configured with "preferred": + true, only preferred Quick Fixes and refactorings are shown. A preferred + Quick Fix addresses the underlying error, while a preferred refactoring is + the most common refactoring choice. For example, while multiple + refactor.extract.constant refactorings may exist, each extracting to a + different scope in the file, the preferred refactor.extract.constant + refactoring is the one that extracts to a local variable. + +This keybinding uses "preferred": true to create a refactoring + that always tries to extract the selected source code to a constant in the + local scope: + +```javascript +{ + ` `"key": "shift+ctrl+e", + ` `"command": "editor.action.codeAction", + ` `"args": { + ` `"kind": "refactor.extract.constant", + ` `"preferred": true, + ` `"apply": "ifSingle" + ` `} + + } +``` + +## Extensions with refactorings + +You can find extensions that support refactoring by looking in the AVAP + TM Dev Studio Marketplace. You can go to the Extensions view + (Ctrl+Shift+X) and type 'refactor' in the search box. You + can then sort by install count or ratings to see which extensions are + popular. + +## Next steps + +* Intro Video - Code Editing - Watch an introductory video on code editing features. +* Code Navigation - AVAP TM Dev Studio lets you move quickly through your source code. +* Debugging - Learn about debugging with AVAP TM Dev Studio. + +## Common questions + +### Why don't I see any lightbulbs when there are errors in my code? + +Lightbulbs (Code Actions) are only shown when your cursor hovers + over the text showing the error. Hovering over the text will show the + error description, but you need to move the cursor or select text to see + lightbulbs for Quick Fixes and refactorings. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md new file mode 100644 index 0000000..2874279 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_SettingsSync.md @@ -0,0 +1,297 @@ +Settings Sync lets you share your AVAP TM Dev Studio + configurations such as settings, keybindings, and installed extensions + across your machines so you are always working with your favorite setup. + +## Turning on Settings Sync + +You can turn on Settings Sync using the{' '} + Turn On Settings Sync... entry in the{' '} + Manage gear menu at the bottom of the Activity Bar. + +You will be asked to sign in and what preferences you would like to sync; + currently Settings, Keyboard Shortcuts, Extensions, User Snippets, and UI + State are supported. + +Selecting the Sign in & Turn on button will ask you + to choose between signing in with your Microsoft or GitHub account. + +After making this selection, the browser will open so that you can sign in + to your Microsoft or GitHub account. When a Microsoft account is chosen, + you can use either personal accounts, such as Outlook accounts, or Azure + accounts, and you can also link a GitHub account to a new or existing + Microsoft account. + +After signing in, Settings Sync will be turned on and continue to + synchronize your preferences automatically in the background. + +## Merge or Replace* + +If you already synced from a machine and turning on sync from another + machine, you will be shown with following{' '} + Merge or Replace dialog. + +* Merge : Selecting this option will merge{' '} local settings with remote settings from the cloud. +* Replace Local : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. +* Merge Manually... : Selecting this option will open{' '} Merges view where you can merge preferences one by one. + +## Configuring synced data + +Machine settings (with `machine` or{' '} + `machine-overridable` scopes) are not synchronized by + default, since their values are specific to a given machine. You can also + add or remove settings you want to this list from the Settings editor or + using the `setting settingsSync.ignoredSettings` . + +Keyboard Shortcuts are synchronized per platform by default. If your + keyboard shortcuts are platform-agnostic, you can synchronize them across + platforms by disabling the setting{' '} + `settingsSync.keybindingsPerPlatform` . + +All built-in and installed extensions are synchronized along with their + global enablement state. You can skip synchronizing an extension, either + from the Extensions view (Ctrl+Shift+X) or using the{' '} + `setting settingsSync.ignoredExtensions` . + +Following UI State is synchronized currently: + +* Display Language +* Activity Bar entries +* Panel entries +* Views layout and visibility +* Recently used commands +* Do not show again notifications + +You can always change what is synced via the{' '} + Settings Sync: Configure command or by opening the{' '} + Manage gear menu, selecting{' '} + Settings Sync is On , and then{' '} + Settings Sync: Configure . + +## Conflicts + +When synchronizing settings between multiple machines, there may + occasionally be conflicts. Conflicts can happen when first setting up sync + between machines or when settings change while a machine is offline. When + conflicts occur, you will be presented with the following options: + +* Accept Local : Selecting this option will overwrite{' '} remote settings in the cloud with your local settings. +* Accept Remote : Selecting this option will overwrite{' '} local settings with remote settings from the cloud. +* Show Conflicts : Selecting this will display a diff editor similar to the Source Control diff editor, where you can preview the local and remote settings and choose to either accept local or remote or manually resolve the changes in your local settings file and then accept the local file. + +## Switching Accounts + +If at any time you want to sync your data to a different account, you can + turn off and turn on Settings Sync again with different account. + +## Syncing Stable versus Insiders + +By default, the AVAP TM Dev Studio Stable and Insiders builds + use different Settings Sync services, and therefore do not share settings. + You can sync your Insiders with Stable by selecting the Stable sync + service while turning on Settings Sync. This option is only available in + AVAP TM Dev Studio Insiders. + +## Restoring data + +AVAP TM Dev Studio always stores local and remote backups of + your preferences while syncing and provides views for accessing these. In + case something goes wrong, you can restore your data from these views. + +You can open these views using{' '} + Settings Sync: Show Synced Data command from the Command + Palette. The Local Sync activity view is hidden by default and you can + enable it using Views submenu under{' '} + Settings Sync view overflow actions. + +Local backups folder in the disk can be accessed via the{' '} + Settings Sync: Open Local Backups Folder command. The + folder is organized by the type of preference and contains versions of + your JSON files, named with a timestamp of when the backup occurred. + +Note : Local backups are automatically deleted after 30 + days. For remote backups the latest 20 versions of each individual + resource (settings, extensions, etc.) is retained. + +## Synced Machines + +AVAP TM Dev Studio keeps track of the machines synchronizing + your preferences and provides a view to access them. Every machine is + given a default name based on the type of AVAP TM Dev Studio + (Insiders or Stable) and the platform it is on. You can always + update the machine name using the edit action available on the machine + entry in the view. You can also disable sync on another machine using{' '} + Turn off Settings Sync context menu action on the machine + entry in the view. + +You can open this view using{' '} + Settings Sync: Show Synced Data command from the Command + Palette. + +## Extension authors + +If you are an extension author, you should make sure your extension + behaves appropriately when users enable Setting Sync. For example, you + probably don't want your extension to display the same dismissed + notifications or welcome pages on multiple machines. + +### Sync user global state between machines + +If your extension needs to preserve some user state across different + machines then provide the state to Settings Sync using{' '} + `vscode.ExtensionContext.globalState.setKeysForSync.` Sharing + state such as UI dismissed or viewed flags across machines can provide a + better user experience. + +There is an example of using `setKeysforSync` in the Extension + Capabilities topic. + +## Reporting issues + +Settings Sync activity can be monitored in the{' '} + Log (Settings Sync) output view. If you + experience a problem with Settings Sync, include this log when creating + the issue. If your problem is related to authentication, also include the + log from the Account output view. + +## How do I delete my data? + +If you want to remove all your data from our servers, just turn off sync + via Settings Sync is On menu available under{' '} + Manage gear menu and select the checkbox to clear all + cloud data. If you choose to re-enable sync, it will be as if you're + signing in for the first time. + +## Next steps + +* User and Workspace settings - Learn how to configure AVAP TM {' '} Dev Studio to your preferences through user and workspace settings. + +## Common questions + +### Is AVAP TM Dev Studio Settings Sync the same as the Settings Sync + extension? + +No, the Settings Sync extension by Shan Khan uses a private Gist on GitHub + to share your AVAP TM Dev Studio settings across different + machines and is unrelated to the AVAP TM Dev Studio Settings + Sync. + +### What types of accounts can I use for Settings Sync sign in? + +AVAP TM Dev Studio Settings Sync supports signing in with either + a Microsoft account (for example Outlook or Azure accounts) or a + GitHub account. Sign in with GitHub Enterprise accounts is not supported. + Other authentication providers may be supported in the future and you can + review the proposed Authentication Provider API in issue #88309. + +### Can I use a different backend or service for Settings Sync? + +Settings Sync uses a dedicated service to store settings and coordinate + updates. A service provider API may be exposed in the future to allow for + custom Settings Sync backends. + +## Troubleshooting keychain issues + +Settings Sync persists authentication information on desktop using the OS + keychain for encryption. Using the keychain can fail in some cases if the + keychain is misconfigured or the environment isn't recognized. + +To help diagnose the problem, you can restart AVAP TM Dev Studio + with the following flags to generate a verbose log: + +```javascript +code --verbose --vmodule="\*/components/os\_crypt/\*=1" +``` + +### Windows & macOS + +At this time, there are no known configuration issues on Windows or macOS + but, if you suspect something is wrong, you can open an issue on AVAP + TM Dev Studio with the verbose logs from above. This is + important for us to support additional desktop configurations. + +### Linux + +Towards the top of the logs from the previous command, you will see + something to the effect of: + +[9699:0626/093542.027629:VERBOSE1:key_storage_util_linux.cc(54)] + Password storage detected desktop environment: GNOME + +[9699:0626/093542.027660:VERBOSE1:key_storage_linux.cc(122)] + Selected backend for OSCrypt: GNOME_LIBSECRET + +We rely on Chromium's oscrypt module to discover and store encryption + key information in the keyring. Chromium supports a number of different + desktop environments. Outlined below are some popular desktop environments + and troubleshooting steps that may help if the keyring is misconfigured. + +If the error you're seeing is "Cannot create an item in a locked + collection", chances are your keyring's `Login` {' '} + keyring is locked. You should launch your OS's keyring (Seahorse + is the commonly used GUI for seeing keyrings) and ensure the default + keyring (usually referred to as `Login` keyring) is + unlocked. This keyring needs to be unlocked when you log into your system. + +It's possible that your wallet (aka keyring) is closed. If you + open KWalletManager, you can see if the default `kdewallet` is + closed and if it is, make sure you open it. + +If you are using KDE5 or higher and are having trouble connecting to{' '} + `kwallet5` (like users of the unofficial AVAP TM {' '} + Dev Studio Flatpak in issue #189672), you can try configuring the + keyring to `gnome-libsecret` as this will use the Secret + Service API to communicate with any valid keyring. `kwallet5` {' '} + implements the Secret Service API and can be accessed using this method. + +First off, if your desktop environment wasn't detected, you can open + an issue on AVAP TM Dev Studio with the verbose logs from above. + This is important for us to support additional desktop configurations. + +You can manually tell AVAP TM Dev Studio which keyring to use by + passing the `password-store` flag. Our recommended + configuration is to first install gnome-keyring if you don't have it + already and then launch AVAP TM Dev Studio with{' '} + `code --password-store="gnome-libsecret"` . + +If this solution works for you, you can persist the value of + password-store by opening the Command Palette (Ctrl+Shift+P) and + running the Preferences: Configure Runtime Arguments {' '} + command. This will open the argv.json file where you can add the setting + "password-store":"gnome-libsecret". + +Here are all the possible values of password-store if you would like to + try using a different keyring than gnome-keyring: + +* `kwallet5` : For use with kwalletmanager5. +* `gnome-libsecret` : For use with any package that implements the Secret Service API (for example `gnome-keyring` ,{' '} `kwallet5` , `KeepassXC` ). +* (not recommended) kwallet: For use with older versions of kwallet. +* (not recommended) basic: See the section below on basic text for more details. + +Don't hesitate to open an issue on AVAP TM Dev Studio with + the verbose logs if you run into any issues. + +We rely on Chromium's oscrypt module to discover and store encryption + key information in the keyring. Chromium offers an opt-in fallback + encryption strategy that uses an in-memory key based on a string that is + hardcoded in the Chromium source. Because of this, this fallback strategy + is, at best, obfuscation, and should only be used if you are accepting of + the risk that any process on the system could, in theory, decrypt your + stored secrets. + +If you accept this risk, you can set `password-store` to basic + by opening the Command Palette (Ctrl+Shift+P) and running the{' '} + Preferences: Configure Runtime Arguments command. This + will open the `argv.json` file where you can add the setting{' '} + `"password-store":"basic"` . + +## Can I share settings between AVAP TM Dev Studio + +{' '} + Stable and Insiders? Yes. Please refer to the Syncing Stable versus + Insiders section for more information. + +Please note that this can sometimes lead to data incompatibility because + Insiders builds are newer than Stable builds. In such cases, Settings Sync + will be disabled automatically on Stable to prevent data inconsistencies. + Once a newer version of the Stable build is released, you can upgrade your + client and turn on Settings Sync to continue syncing. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md new file mode 100644 index 0000000..0816086 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Snippets.md @@ -0,0 +1,392 @@ +Code snippets are templates that make it easier to enter repeating code + patterns, such as loops or conditional-statements. + +In AVAP TM Dev Studio, snippets appear in IntelliSense + (Ctrl+Space) mixed with other suggestions, as well as in a + dedicated snippet picker ( Insert Snippet in the + Command Palette). There is also support for tab-completion: Enable it + with `"editor.tabCompletion": "on"` , type a{' '} + snippet prefix (trigger text), and press Tab to + insert a snippet. + +The snippet syntax follows the TextMate snippet syntax with the exceptions + of 'interpolated shell code' and the use of \u; both are not + supported. + +## Built-in snippets + +AVAP TM Dev Studio has built-in snippets for a number of + languages such as: JavaScript, TypeScript, Markdown, and PHP. + +You can see the available snippets for a language by running the{' '} + Insert Snippet command in the Command Palette to get a + list of the snippets for the language of the current file. However, keep + in mind that this list also includes user snippets that you have defined, + and any snippets provided by extensions you have installed. + +## Install snippets from the Marketplace + +Many extensions on the AVAP TM Dev Studio Marketplace include + snippets. You can search for extensions that contains snippets in the + Extensions view (Ctrl+Shift+X) using the + @category:"snippets" filter. + +If you find an extension you want to use, install it, then restart AVAP + TM Dev Studio and the new snippets will be available. + +## Create your own snippets + +You can easily define your own snippets without any extension. To create + or edit your own snippets, select Configure User Snippets {' '} + under File > Preferences , and then + select the language (by language identifier) for which the + snippets should appear, or the New Global Snippets file {' '} + option if they should appear for all languages. AVAP TM Dev + Studio manages the creation and refreshing of the underlying snippets + file(s) for you. + +Snippets files are written in JSON, support C-style comments, and can + define an unlimited number of snippets. Snippets support most TextMate + syntax for dynamic behavior, intelligently format whitespace based on the + insertion context, and allow easy multiline editing. + +Below is an example of a for loop snippet for JavaScript: + +```javascript +// in file 'Code/User/snippets/javascript.json' + + { + ` `"For Loop": { + ` `"prefix": ["for", "for-const"], + ` `"body": ["for (const ${2:element} of + ${1:array}) {", "\t$0", "}"], + ` `"description": "A for loop." + ` `} + + } +``` + +In the example above: + +* "For Loop" is the snippet name. It is displayed via IntelliSense if no description is provided. +* `prefix` defines one or more trigger words that display the snippet in IntelliSense. Substring matching is performed on prefixes, so in this case, "fc" could match "for-const". +* `body` is one or more lines of content, which will be joined as multiple lines upon insertion. Newlines and embedded tabs will be formatted according to the context in which the snippet is inserted. +* `description` is an optional description of the snippet displayed by IntelliSense. + +Additionally, the `body` of the example above has three + placeholders (listed in order of traversal):{' '} + `${1:array}` , `${2:element}` , + and `$0` . You can quickly jump to the next placeholder with + Tab, at which point you may edit the placeholder or jump to the next one. + The string after the colon : (if any) is the default text, for + example `element` in `${2:element}` . + Placeholder traversal order is ascending by number, starting from one; + zero is an optional special case that always comes last, and exits snippet + mode with the cursor at the specified position. + +### File template snippets + +You can add the isFileTemplate attribute to your snippet's definition + if the snippet is intended to populate or replace a file's contents. + File template snippets are displayed in a dropdown when you run the{' '} + Snippets: Populate File from Snippet command in a new or + existing file. + +## Snippet scope + +Snippets are scoped so that only relevant snippets are suggested. Snippets + can be scoped by either: + +Every snippet is scoped to one, several, or all + ("global") languages based on whether it is defined in: + +Single-language user-defined snippets are defined in a specific + language's snippet file (for example javascript.json), which + you can access by language identifier through{' '} + Snippets: Configure User Snippets . A snippet is only + accessible when editing the language for which it is defined. + +Multi-language and global user-defined snippets are all defined in + "global" snippet files (JSON with the file suffix + .code-snippets), which is also accessible through{' '} + Snippets: Configure User Snippets . In a global snippets + file, a snippet definition may have an additional scope property that + takes one or more language identifiers, which makes the snippet available + only for those specified languages. If no scope property is given, then + the global snippet is available in all languages. + +Most user-defined snippets are scoped to a single language, and so are + defined in a language-specific snippet file. + +You can also have a global snippets file (JSON with file suffix + .code-snippets) scoped to your project. Project-folder snippets are + created with the New Snippets file for ''... {' '} + option in the Snippets: Configure User Snippets dropdown + menu and are located at the root of the project in a .vscode folder. + Project snippet files are useful for sharing snippets with all users + working in that project. Project-folder snippets are similar to global + snippets and can be scoped to specific languages through the scope + property. + +## Snippet syntax + +The body of a snippet can use special constructs to control cursors and + the text being inserted. The following are supported features and their + syntaxes: + +With tabstops, you can make the editor cursor move inside a snippet. Use + $1, $2 to specify cursor locations. The number is the order in which + tabstops will be visited, whereas $0 denotes the final cursor position. + Multiple occurrences of the same tabstop are linked and updated in sync. + +Placeholders are tabstops with values, like ${1:foo}. The + placeholder text will be inserted and selected such that it can be easily + changed. Placeholders can be nested, like ${1:another + ${2:placeholder}}. + +Placeholders can have choices as values. The syntax is a comma-separated + enumeration of values, enclosed with the pipe-character, for example + ${1|one,two,three|}. When the snippet is inserted and the + placeholder selected, choices will prompt the user to pick one of the + values. + +With $name or ${name:default}, you can insert the value of a + variable. When a variable isn't set, its default or + the empty string is inserted. When a variable is unknown (that is, its + name isn't defined) the name of the variable is inserted and it is + transformed into a placeholder. + +The following variables can be used: + +* TM_SELECTED_TEXT The currently selected text or the empty string +* TM_CURRENT_LINE The contents of the current line +* TM_CURRENT_WORD The contents of the word under cursor or the empty string +* TM_LINE_INDEX The zero-index based line number +* TM_LINE_NUMBER The one-index based line number +* TM_FILENAME The filename of the current document +* TM_FILENAME_BASE The filename of the current document without its extensions +* TM_DIRECTORY The directory of the current document +* TM_FILEPATH The full file path of the current document +* RELATIVE_FILEPATH The relative (to the opened workspace or folder) file path of the current document +* CLIPBOARD The contents of your clipboard +* WORKSPACE_NAME The name of the opened workspace or folder +* WORKSPACE_FOLDER The path of the opened workspace or folder +* CURSOR_INDEX The zero-index based cursor number +* CURSOR_NUMBER The one-index based cursor number + +For inserting the current date and time: + +* CURRENT_YEAR The current year +* CURRENT_YEAR_SHORT The current year's last two digits +* CURRENT_MONTH The month as two digits (example '02') +* CURRENT_MONTH_NAME The full name of the month (example 'July') +* CURRENT_MONTH_NAME_SHORT The short name of the month (example 'Jul') +* CURRENT_DATE The day of the month as two digits (example '08') +* CURRENT_DAY_NAME The name of day (example 'Monday') +* CURRENT_DAY_NAME_SHORT The short name of the day (example 'Mon') +* CURRENT_HOUR The current hour in 24-hour clock format +* CURRENT_MINUTE The current minute as two digits +* CURRENT_SECOND The current second as two digits +* CURRENT_SECONDS_UNIX The number of seconds since the Unix epoch +* CURRENT_TIMEZONE_OFFSET The current UTC time zone offset as +HH:MM or -HH:MM (example -07:00). + +For inserting random values: + +* RANDOM 6 random Base-10 digits +* RANDOM_HEX 6 random Base-16 digits +* UUID A Version 4 UUID + +For inserting line or block comments, honoring the current language: + +* BLOCK_COMMENT_START Example output: in PHP /* or in HTML +* LINE_COMMENT Example output: in PHP // + +The snippet below inserts /* Hello World */ in JavaScript files and in + HTML files: + +```javascript +{ + ` `"hello": { + ` `"scope": "javascript,html", + ` `"prefix": "hello", + ` `"body": "$BLOCK\_COMMENT\_START Hello World + $BLOCK\_COMMENT\_END" + ` `} + + } +``` + +Transformations allow you to modify the value of a variable before it is + inserted. The definition of a transformation consists of three parts: + +The following example inserts the name of the current file without its + ending, so from foo.txt it makes foo. + +```javascript +${TM\_FILENAME/(.\*)\\..+$/$1/} + ` `| | | |` `| | | |-> no options + ` `| | |` `| | |-> references the contents of the first + ` `| | capture group + ` `| |` `| |-> regex to capture everything before + ` `| the final `.suffix` + ` `| + ` `|-> resolves to the filename +``` + +Like a Variable-Transform, a transformation of a placeholder allows + changing the inserted text for the placeholder when moving to the next tab + stop. The inserted text is matched with the regular expression and the + match or matches - depending on the options - are replaced with the + specified replacement format text. Every occurrence of a placeholder can + define its own transformation independently using the value of the first + placeholder. The format for Placeholder-Transforms is the same as for + Variable-Transforms. + +The examples are shown within double quotes, as they would appear inside a + snippet body, to illustrate the need to double escape certain characters. + Sample transformations and the resulting output for the filename + example-123.456-TEST.js. + +Below is the EBNF (extended Backus-Naur form) for snippets. With \ + (backslash), you can escape $, }, and . Within choice + elements, the backslash also escapes comma and pipe characters. Only the + characters required to be escaped can be escaped, so $ should not be + escaped within these constructs and neither $ or } should be escaped + inside choice constructs. + +```javascript +any ::= tabstop | placeholder | choice | variable | text + + tabstop ::= '$' int + ` `| '${' int '}' + ` `| '${' int transform '}' + + placeholder ::= '${' int ':' any '}' + + choice ::= '${' int '|' text (',' text)\* '|}' + + variable ::= '$' var | '${' var '}' + ` `| '${' var ':' any '}' + ` `| '${' var transform '}' + + transform ::= '/' regex '/' (format | text)+ '/' options + + format ::= '$' int | '${' int '}' + ` `| '${' int ':' '/upcase' | '/downcase' | '/capitalize' | + '/camelcase' | '/pascalcase' '}' + ` `| '${' int ':+' if '}' + ` `| '${' int ':?' if ':' else '}' + ` `| '${' int ':-' else '}' | '${' int ':' else + '}' + + regex ::= JavaScript Regular Expression value (ctor-string) + + options ::= JavaScript Regular Expression option (ctor-options) + + var ::= [\_a-zA-Z] [\_a-zA-Z0-9]\* + + int ::= [0-9]+ + + text ::= .\* + + if ::= text + + else ::= text +``` + +## Using TextMate snippets + +You can also use existing TextMate snippets (.tmSnippets) with + AVAP TM Dev Studio. See the Using TextMate Snippets topic in our + Extension API section to learn more. + +## Assign keybindings to snippets + +You can create custom keybindings to insert specific snippets. Open + keybindings.json ( + Preferences: Open Keyboard Shortcuts File ), which + defines all your keybindings, and add a keybinding passing + "snippet" as an extra argument: + +```javascript +{ + ` `"key": "cmd+k 1", + ` `"command": "editor.action.insertSnippet", + ` `"when": "editorTextFocus", + ` `"args": { + ` `"snippet": "console.log($1)$0" + ` `} + + } +``` + +The keybinding will invoke the Insert Snippet command but + instead of prompting you to select a snippet, it will insert the provided + snippet. You define the custom keybinding as usual with a keyboard + shortcut, command ID, and optional when clause context for when the + keyboard shortcut is enabled. + +Also, instead of using the snippet argument value to define your snippet + inline, you can reference an existing snippet by using the langId and name + arguments. The langId argument selects the language for which the snippet + denoted by name is inserted, e.g the sample below selects the myFavSnippet + that's available for csharp-files. + +```javascript +{ + ` `"key": "cmd+k 1", + ` `"command": "editor.action.insertSnippet", + ` `"when": "editorTextFocus", + ` `"args": { + ` `"langId": "csharp", + ` `"name": "myFavSnippet" + ` `} + + } +``` + +## Next steps + +* Command Line - AVAP TM Dev Studio has a rich command-line interface to open or diff files and install extensions. +* Extension API - Learn about other ways to extend AVAP TM Dev Studio. +* Snippet Guide - You can package snippets for use in AVAP TM {' '} Dev Studio. + +## Common questions + +### What if I want to use existing TextMate snippets from a .tmSnippet file? + +You can easily package TextMate snippets files for use in AVAP + TM Dev Studio. See Using TextMate Snippets in our Extension API + documentation. + +### How do I have a snippet place a variable in the pasted script? + +To have a variable in the pasted script, you need to escape the + '$' of the `$variable` name so that it isn't parsed + by the snippet expansion phase. + +```javascript +"VariableSnippet":{ + ` `"prefix": "\_Var", + ` `"body": "\\$MyVar = 2", + ` `"description": "A basic snippet that places a variable into + script with the $ prefix" + ` `} +``` + +This results in the pasted snippet as: + +```javascript +$MyVar = 2 +``` + +### Can I remove snippets from IntelliSense? + +Yes, you can hide specific snippets from showing in IntelliSense + (completion list) by selecting the{' '} + Hide from IntelliSense button to the right of snippet + items in the Insert Snippet command dropdown. + +You can still select the snippet with the Insert Snippet {' '} + command but the hidden snippet won't be displayed in IntelliSense. diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md new file mode 100644 index 0000000..be0acef --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_Tasks.md @@ -0,0 +1,1155 @@ +Lots of tools exist to automate tasks like linting, building, packaging, + testing, or deploying software systems. Examples include the TypeScript + Compiler, linters like ESLint and TSLint as well as build systems like + Make, Ant, Gulp, Jake, Rake, and MSBuild. + +These tools are mostly run from the command line and automate jobs inside + and outside the inner software development loop (edit, compile, test, + and debug). Given their importance in the development life cycle, it + is helpful to be able to run tools and analyze their results from within + AVAP TM Dev Studio. Tasks in AVAP TM Dev Studio can be + configured to run scripts and start processes so that many of these + existing tools can be used from within AVAP TM Dev Studio + without having to enter a command line or write new code. Workspace or + folder specific tasks are configured from the `tasks.json` file + in the `.vscode` folder for a workspace. + +Extensions can also contribute tasks using a Task Provider, and these + contributed tasks can add workspace-specific configurations defined in the{' '} + `tasks.json` file. + +## TypeScript Hello World + +Let's start with a simple "Hello World" TypeScript program + that we want to compile to JavaScript. + +Create an empty folder "mytask", generate a{' '} + `tsconfig.json` file and start AVAP TM Dev Studio + from that folder. + +```javascript +mkdir mytask + + cd mytask + + tsc --init + + code . +``` + +Now create a HelloWorld.ts file with the following content + +```javascript +function sayHello(name: string): void { + ` `console.log(`Hello ${name}!`); + + } + + + sayHello('Dave'); +``` + +Pressing `Ctrl+Shift+B` or running{' '} + Run Build Task from the global Terminal {' '} + menu show the following picker: + +The first entry executes the TypeScript compiler and translates the + TypeScript file to a JavaScript file. When the compiler has finished, + there should be a `HelloWorld.js` file. The second entry starts + the TypeScript compiler in watch mode. Every save to the{' '} + `HelloWorld.ts` file will regenerate the{' '} + `HelloWorld.js` file. + +You can also define the TypeScript build or watch task as the default + build task so that it is executed directly when triggering{' '} + Run Build Task (Ctrl+Shift+B). To do so, select{' '} + Configure Default Build Task from the global{' '} + Terminal menu. This shows you a picker with the available + build tasks. Select tsc: build or{' '} + tsc: watch and AVAP TM Dev Studio will generate + a `tasks.json` file. The one shown below makes the{' '} + tsc: build task the default build task: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "typescript", + ` `"tsconfig": "tsconfig.json", + ` `"problemMatcher": ["$tsc"], + ` `"group": { + ` `"kind": "build", + ` `"isDefault": true + ` `} + ` `} + ` `] + + } +``` + +The `tasks.json` example above does not define a new task. It + annotates the tsc: build tasks contributed by AVAP + TM Dev Studio's TypeScript extension to be the default + build task. You can now execute the TypeScript compiler by pressing{' '} + `Ctrl+Shift+B` . + +## Task auto-detection + +AVAP TM Dev Studio currently auto-detects tasks for the + following systems: Gulp, Grunt, Jake, and npm. We are working with the + corresponding extension authors to add support for Maven and the C# dotnet + command as well. If you develop a JavaScript application using Node.js as + the runtime, you usually have a `package.json` file describing + your dependencies and the scripts to run. If you have cloned the + eslint-starter example, then executing Run Tasks from the + global menu shows the following list: + +If you have not already done so, install the necessary npm modules by + running npm install. Now open the `server.js` file and add a + semicolon to the end of a statement (note the ESLint starter assumes + statements without a semicolon) and execute the{' '} + Run Tasks again. This time select the{' '} + npm: lint task. When prompted for the problem matcher to + use, select ESLint stylish + +Executing the task produces one error, shown in the{' '} + Problems view: + +In addition, AVAP TM Dev Studio created a tasks.json file with + the following content: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"] + ` `} + ` `] + + } +``` + +This instructs AVAP TM Dev Studio to scan the output of the{' '} + npm lint script for problems using the ESLint stylish + format. + +For Gulp, Grunt, and Jake, the task auto-detection works the same. Below + is an example of the tasks detected for the AVAP TM Dev + Studio-node-debug extension. + +Task auto detection can be disabled using the following settings: + +```javascript +{ + ` `"typescript.tsc.autoDetect": "off", + ` `"grunt.autoDetect": "off", + ` `"jake.autoDetect": "off", + ` `"gulp.autoDetect": "off", + ` `"npm.autoDetect": "off" + + } +``` + +## Custom tasks + +Not all tasks or scripts can be auto-detected in your workspace. Sometimes + it is necessary to define your own custom tasks. Assume you have a script + to run your tests in order to set up some environment correctly. The + script is stored in a script folder inside your workspace and named{' '} + `test.sh` for Linux and macOS and `test.cmd` for + Windows. Run Configure Tasks from the global{' '} + Terminal menu and select the{' '} + Create tasks.json file from template entry. This opens + the following picker: + +We are working on more auto-detection support, so this list will get + smaller and smaller in the future. Since we want to write our own custom + task, select Others from the list. This opens the{' '} + `tasks.json` file with a task skeleton. Replace the contents + with the following: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "Run tests", + ` `"type": "shell", + ` `"command": "./scripts/test.sh", + ` `"windows": { + ` `"command": ".\\scripts\\test.cmd" + ` `}, + ` `"group": "test", + ` `"presentation": { + ` `"reveal": "always", + ` `"panel": "new" + ` `} + ` `} + ` `] + + } +``` + +The task's properties have the following semantic: + +* label : The task's label used in the user interface. +* type : The task's type. For a custom task, this can either be `shell` or `process` . If{' '} `shell` is specified, the command is interpreted as a shell command (for example: bash, cmd, or PowerShell). If{' '} `process` is specified, the command is interpreted as a process to execute. +* command : The actual command to execute. +* windows : Any Windows specific properties. Will be used instead of the default properties when the command is executed on the Windows operating system. +* group : Defines to which group the task belongs. In the example, it belongs to the `test` group. Tasks that belong to the test group can be executed by running Run Test Task {' '} from the Command Palette . +* presentation : Defines how the task output is handled in the user interface. In this example, the Integrated Terminal showing the output is `always` revealed and a `new` terminal is created on every task run. +* options : Override the defaults for `cwd` {' '} (current working directory), `env` (environment variables), or shell (default shell). Options can be set per task but also globally or per platform. Environment variables configured here can only be referenced from within your task script or process and will not be resolved if they are part of your args, command, or other task attributes. +* runOptions : Defines when and how a task is run. + +You can see the full set of task properties and values with IntelliSense + in your `tasks.json` file. Bring up suggestions with{' '} + Trigger Suggest (Ctrl+Space) and read the + descriptions on hover or with the Read More... {' '} + ('i') flyout. + +You can also review the tasks.json schema. + +Shell commands need special treatment when it comes to commands and + arguments that contain spaces or other special characters like{' '} + `$` . By default, the task system supports the following + behavior: + +* If a single command is provided, the task system passes the command as is to the underlying shell. If the command needs quoting or escaping to function properly, the command needs to contain the proper quotes or escape characters. For example, to list the directory of a folder containing spaces in its name, the command executed in bash should look like this: `ls 'folder with spaces'` . { ` ` `"label": "dir", ` `"type": "shell", ` `"command": "dir 'folder with spaces'" } ` +* If a command and arguments are provided, the task system will use single quotes if the command or arguments contain spaces. For{' '} `cmd.exe` , double quotes are used. A shell command like below will be executed in PowerShell as{' '} `dir 'folder with spaces'` . ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": ["folder with spaces"] } ` +* If you want to control how the argument is quoted, the argument can be a literal specifying the value and a quoting style. The example below uses escaping instead of quoting for an argument with spaces. ` { ` `"label": "dir", ` `"type": "shell", ` `"command": "dir", ` `"args": [ ` `{ ` `"value": "folder with spaces", ` `"quoting": "escape" ` `} ` `] } ` + +Besides escaping, the following values are supported: + +* strong : Uses the shell's strong quoting mechanism, which suppresses all evaluations inside the string. Under PowerShell and for shells under Linux and macOS, single quotes are used ('). For cmd.exe, " is used. +* weak : Uses the shell's weak quoting mechanism, which still evaluates expression inside the string (for example, environment variables). Under PowerShell and for shells under Linux and macOS, double quotes are used ("). cmd.exe doesn't support weak quoting so AVAP TM Dev Studio uses " as well. + +If the command itself contains spaces, AVAP TM Dev Studio will + by default strong quote the command as well. As with arguments, the user + can control the quoting of the command using the same literal style. + +There are more task properties to configure your workflow. You can use + IntelliSense with Ctrl+Space to get an overview of the valid properties. + +!Tasks IntelliSense + +In addition to the global menu bar, task commands can be accessed using + the Command Palette (Ctrl+Shift+P). You can + filter on 'task' and can see the various task related commands. + +!Tasks in Command Palette + +### Compound tasks + +You can also compose tasks out of simpler tasks with the{' '} + `dependsOn` property. For example, if you have a workspace with + a client and server folder and both contain a build script, you can create + a task that starts both build scripts in separate terminals. If you list + more than one task in the `dependsOn` property, they are + executed in parallel by default. + +The `tasks.json` file looks like this: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "Client Build", + ` `"command": "gulp", + ` `"args": ["build"], + ` `"options": { + ` `"cwd": "${workspaceFolder}/client" + ` `} + ` `}, + ` `{ + ` `"label": "Server Build", + ` `"command": "gulp", + ` `"args": ["build"], + ` `"options": { + ` `"cwd": "${workspaceFolder}/server" + ` `} + ` `}, + ` `{ + ` `"label": "Build", + ` `"dependsOn": ["Client Build", "Server Build"] + ` `} + ` `] + + } +``` + +If you specify " `dependsOrder` ": " + `sequence` ", then your task dependencies are executed in + the order they are listed in `dependsOn` . Any background/watch + tasks used in `dependsOn` with " `dependsOrder` + ": " `sequence` " must have a problem matcher that + tracks when they are "done". The following task runs task Two, + task Three, and then task One. + +```javascript +{ + ` `"label": "One", + ` `"type": "shell", + ` `"command": "echo Hello ", + ` `"dependsOrder": "sequence", + ` `"dependsOn": ["Two", "Three"] + + } +``` + +### User level tasks + +You can create user level tasks that are not tied to a specific workspace + or folder using the Tasks: Open User Tasks command. Only{' '} + `shell` and `process` tasks can be used here since + other task types require workspace information. + +## Output behavior + +Sometimes you want to control how the Integrated Terminal panel behaves + when running tasks. For instance, you may want to maximize editor space + and only look at task output if you think there is a problem. The behavior + of the terminal can be controlled using the presentation property of a + task. It offers the following properties: + +* reveal : Controls whether the Integrated Terminal panel is brought to front. Valid values are:{' '} `always` - The panel is always brought to front. This is the default. `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. +* `always` - The panel is always brought to front. This is the default. +* `never` - The user must explicitly bring the terminal panel to the front using the View >{' '} Terminal command (Ctrl+`). +* `silent` - The terminal panel is brought to front only if the output is not scanned for errors and warnings. +* revealProblems : Controls whether the Problems panel is revealed when running this task or not. Takes precedence over option{' '} `reveal` . Default is `never` .{' '} `always` - Always reveals the Problems panel when this task is executed. `onProblem` - Only reveals the Problems panel if a problem is found. `never` - Never reveals the Problems panel when this task is executed. +* `always` - Always reveals the Problems panel when this task is executed. +* `onProblem` - Only reveals the Problems panel if a problem is found. +* `never` - Never reveals the Problems panel when this task is executed. +* focus : Controls whether the terminal is taking input focus or not. Default is `false` . +* echo : Controls whether the executed command is echoed in the terminal. Default is `true` . +* showReuseMessage : Controls whether to show the "Terminal will be reused by tasks, press any key to close it" message. +* panel : Controls whether the terminal instance is shared between task runs. Possible values are:{' '} `shared` - The terminal is shared and the output of other task runs are added to the same terminal. `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. `new` - Every execution of that task is using a new clean terminal. +* `shared` - The terminal is shared and the output of other task runs are added to the same terminal. +* `dedicated` - The terminal is dedicated to a specific task. If that task is executed again, the terminal is reused. However, the output of a different task is presented in a different terminal. +* `new` - Every execution of that task is using a new clean terminal. +* clear : Controls whether the terminal is cleared before this task is run. Default is false. +* close : Controls whether the terminal the task runs in is closed when the task exits. Default is false. +* group : Controls whether the task is executed in a specific terminal group using split panes. Tasks in the same group (specified by a string value) will use split terminals to present instead of a new terminal panel. + +You can modify the terminal panel behavior for auto-detected tasks as + well. For example, if you want to change the output behavior for the{' '} + npm: run lint from the ESLint example from above, add the{' '} + `presentation` property to it: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"], + ` `"presentation": { + ` `"reveal": "never" + ` `} + ` `} + ` `] + + } +``` + +You can also mix custom tasks with configurations for detected tasks. A{' '} + `tasks.json` that configures the npm: run lint {' '} + task and adds a custom Run Test tasks looks like this: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "npm", + ` `"script": "lint", + ` `"problemMatcher": ["$eslint-stylish"], + ` `"presentation": { + ` `"reveal": "never" + ` `} + ` `}, + ` `{ + ` `"label": "Run tests", + ` `"type": "shell", + ` `"command": "./scripts/test.sh", + ` `"windows": { + ` `"command": ".\\scripts\\test.cmd" + ` `}, + ` `"group": "test", + ` `"presentation": { + ` `"reveal": "always", + ` `"panel": "new" + ` `} + ` `} + ` `] + + } +``` + +## Run behavior + +You can specify a task's run behaviors using the{' '} + `runOptions` property: + +* reevaluateOnRerun : Controls how variables are evaluated when a task is executed through the Rerun Last Task {' '} command. The default is `true` , meaning that variables will be reevaluated when a task is rerun. When set to `false` the resolved variable values from the previous run of the task will be used. +* runOn : Specifies when a task is run.{' '} `default` - The task will only be run when executed through the Run Task command. `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . +* `default` - The task will only be run when executed through the Run Task command. +* `folderOpen` - The task will be run when the containing folder is opened. The first time you open a folder that contains a task with folderOpen, you will be asked if you want to allow tasks to run automatically in that folder. You can change your decision later using the Manage Automatic Tasks command and selecting between Allow Automatic Tasks and{' '} Disallow Automatic Tasks . + +## Customizing auto-detected task + +As mentioned above, you can customize auto-detected tasks in the{' '} + `tasks.json` file. You usually do so to modify presentation + properties or to attach a problem matcher to scan the task's output + for errors and warnings. You can customize a task directly from the{' '} + Run Task list by pressing the gear icon to the right to + insert the corresponding task reference into the `tasks.json` {' '} + file. Assume you have the following Gulp file to lint JavaScript files + using ESLint (the file is taken from (Link)): + +```javascript +const gulp = require('gulp'); + + const eslint = require('gulp-eslint'); + + + gulp.task('lint', () => { + ` `// ESLint ignores files with "node\_modules" paths. + ` `// So, it's best to have gulp ignore the directory as well. + ` `// Also, Be sure to return the stream from the task; + ` `// Otherwise, the task may end before the stream has finished. + ` `return ( + ` `gulp + + .src(['\*\*/\*.js', '!node\_modules/\*\*']) + ` `// eslint() attaches the lint output to the "eslint" + property + ` `// of the file object so it can be used by other modules. + + .pipe(eslint()) + ` `// eslint.format() outputs the lint results to the + console. + ` `// Alternatively use eslint.formatEach() (see + Docs). + + .pipe(eslint.format()) + ` `// To have the process exit with an error code (1) on + ` `// lint error, return the stream and pipe to failAfterError + last. + + .pipe(eslint.failAfterError()) + ` `); + + }); + + gulp.task('default', ['lint'], function() { + ` `// This will only run if the lint task is successful... + + }); +``` + +Executing Run Task from the global{' '} + Terminal menu will show the following picker: + +Press the gear icon. This will create the following{' '} + `tasks.json` file: + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"type": "gulp", + ` `"task": "default", + ` `"problemMatcher": [] + ` `} + ` `] + + } +``` + +Usually you would now add a problem matcher (in this case{' '} + `$eslint-stylish` ) or modify the presentation settings. + +## Processing task output with problem matchers + +AVAP TM Dev Studio can process the output from a task with a + problem matcher. Problem matchers scan the task output text for known + warning or error strings, and report these inline in the editor and in the + Problems panel. AVAP TM Dev Studio ships with several problem + matchers 'in-the-box': + +* TypeScript : `$tsc` assumes that file names in the output are relative to the opened folder. +* TypeScript Watch : `$tsc` -watch matches problems reported from the tsc compiler when executed in watch mode. +* JSHint : `$jshint` assumes that file names are reported as an absolute path. +* JSHint Stylish : `$jshint-stylish` assumes that file names are reported as an absolute path. +* ESLint Compact : `$eslint-compact` assumes that file names in the output are relative to the opened folder. +* ESLint Stylish : `$eslint-stylish` assumes that file names in the output are relative to the opened folder. +* Go : `$go` matches problems reported from the go compiler. Assumes that file names are relative to the opened folder. +* CSharp and VB Compiler : `$mscompile` assumes that file names are reported as an absolute path. +* Lessc compiler : `$lessc` assumes that file names are reported as absolute path. +* Node Sass compiler : `$node-sass` assumes that file names are reported as an absolute path. + +You can also create your own problem matcher, which we'll discuss in a + later section. + +## Binding keyboard shortcuts to tasks + +If you need to run a task frequently, you can define a keyboard shortcut + for the task. + +For example, to bind `Ctrl+H` to the Run tests {' '} + task from above, add the following to your `keybindings.json` {' '} + file: + +```javascript +{ + ` `"key": "ctrl+h", + ` `"command": "workbench.action.tasks.runTask", + ` `"args": "Run tests" + + } +``` + +## Variable substitution + +When authoring tasks configurations, it is useful to have a set of + predefined common variables such as the active file ( + `${file}` ) or workspace root folder ( + `${workspaceFolder}` ). AVAP TM Dev + Studio supports variable substitution inside strings in the{' '} + `tasks.json` file and you can see a full list of predefined + variables in the Variables Reference. + +Below is an example of a custom task configuration that passes the current + opened file to the TypeScript compiler. + +```javascript +{ + ` `"label": "TypeScript compile", + ` `"type": "shell", + ` `"command": "tsc ${file}", + ` `"problemMatcher": ["$tsc"] + + } +``` + +Similarly, you can reference your project's configuration settings by + prefixing the name with ${config: . For example,{' '} + `${config:python.formatting.autopep8Path}` returns + the Python extension setting `formatting.autopep8Path` . + +Below is an example of a custom task configuration, which executes + autopep8 on the current file using the autopep8 executable defined by the{' '} + `python.formatting.autopep8Path` setting: + +```javascript +{ + ` `"label": "autopep8 current file", + ` `"type": "process", + ` `"command": + "${config:python.formatting.autopep8Path}", + ` `"args": ["--in-place", "${file}"] + + } +``` + +If you want to specify the selected Python interpreter used by the Python + extension for `tasks.json` or `launch.json` , you can + use the `${command:python.interpreterPath}` command. + +If simple variable substitution isn't enough, you can also get input + from the user of your task by adding an `inputs` section to + your `tasks.json` file. + +For more information about `inputs` , see the Variables + Reference. + +## Operating system specific properties + +The task system supports defining values (for example, the command to + be executed) specific to an operating system. To do so, put an + operating system specific literal into the `tasks.json` file + and specify the corresponding properties inside that literal. + +Below is an example that uses the Node.js executable as a command and is + treated differently on Windows and Linux: + +```javascript +{ + ` `"label": "Run Node", + ` `"type": "process", + ` `"windows": { + ` `"command": "C:\\Program Files\\nodejs\\node.exe" + ` `}, + ` `"linux": { + ` `"command": "/usr/bin/node" + ` `} + + } +``` + +Valid operating properties are `windows` for Windows, linux for{' '} + `Linux` , and `osx` for macOS. Properties defined in + an operating system specific scope override properties defined in the task + or global scope. + +## Global tasks + +Task properties can also be defined in the global scope. If present, they + will be used for specific tasks unless they define the same property with + a different value. In the example below, there is a global{' '} + `presentation` property, which defines that all tasks should be + executed in a new panel: + +```javascript +{ + ` `"label": "Run Node", + ` `"type": "process", + ` `"windows": { + ` `"command": "C:\\Program Files\\nodejs\\node.exe" + ` `}, + ` `"linux": { + ` `"command": "/usr/bin/node" + ` `} + + } +``` + +### Character escaping in PowerShell + +When the default shell is PowerShell, or when a task is configured to use + PowerShell, you might see unexpected space and quote escaping. The + unexpected escaping only occurs with cmdlets because AVAP TM Dev + Studio doesn't know if your command contains cmdlets. Example 1 below + shows a case where you'll get escaping that doesn't work with + PowerShell. Example 2 shows the best, cross-platform, way to get good + escaping. In some cases, you might not be able to follow example 2 and + you'll need to do the manual escaping shown in example 3. + +```javascript +"tasks": [` `{ + ` `"label": "PowerShell example 1 (unexpected escaping)", + ` `"type": "shell", + ` `"command": "Get-ChildItem \"Folder With Spaces\"" + ` `}, + ` `{ + ` `"label": "PowerShell example 2 (expected escaping)", + ` `"type": "shell", + ` `"command": "Get-ChildItem", + ` `"args": ["Folder With Spaces"] + ` `}, + ` `{ + ` `"label": "PowerShell example 3 (manual escaping)", + ` `"type": "shell", + ` `"command": "& Get-ChildItem \\\"Folder With Spaces\\\"" + ` `} + ] +``` + +## Changing the encoding for a task output + +Tasks frequently act with files on disk. If these files are stored on disk + with an encoding different than the system encoding, you need to let the + command executed as a task know which encoding to use. Since this depends + on the operating system and the shell used, there is no general solution + to control this. Below are advice and examples on how to make it work. + +If you need to tweak the encoding, you should check whether it makes sense + to change the default encoding used by your operating system or at least + change it for the shell you use by tweaking the shell's profile file. + +If you only need to tweak it for a specific task, then add the OS-specific + command necessary to change the encoding to the tasks command line. The + following example is for Windows using code page of 437 as its default. + The task shows the output of a file containing Cyrillic characters and + therefore needs code page 866. The task to list the file looks like this + assuming that the default shell is set to `cmd.exe` : + +```javascript +{ + ` `// See (link) + ` `// for the documentation about the tasks.json format + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "more", + ` `"type": "shell", + ` `"command": "chcp 866 && more russian.txt", + ` `"problemMatcher": [] + ` `} + ` `] + + } +``` + +If the task is executed in `PowerShell` , the command needs to + read like this `chcp 866` ; more `russian.txt` . On + Linux and macOS, the locale command can be used to inspect the{' '} + `locale` and tweak the necessary environment variables. + +## Examples of tasks in action + +To highlight the power of tasks, here are a few examples of how AVAP + TM Dev Studio can use tasks to integrate external tools like + linters and compilers. + +### Transpiling TypeScript to JavaScript + +The TypeScript topic includes an example that creates a task to transpile + TypeScript to JavaScript and observe any related errors from within AVAP + TM Dev Studio. + +### Transpiling Less and SCSS into CSS + +The CSS topic provides examples of how to use Tasks to generate CSS files. + +## Defining a problem matcher + +AVAP TM Dev Studio ships some of the most common problem + matchers 'in-the-box'. However, there are lots of compilers and + linting tools out there, all of which produce their own style of errors + and warnings so you may want to create your own problem matcher. + +We have a `helloWorld.c` program in which the developer + mistyped printf as prinft . Compiling it + with gcc will produce the following warning: + +```javascript +helloWorld.c:5:3: warning: implicit declaration of function ‘prinft’ +``` + +We want to produce a problem matcher that can capture the message in the + output and show a corresponding problem in AVAP TM Dev Studio. + Problem matchers heavily rely on regular expressions. The section below + assumes you are familiar with regular expressions. + +A matcher that captures the above warning (and errors) looks like + this: + +```javascript +{ + ` `// The problem is owned by the cpp language service. + ` `"owner": "cpp", + ` `// The file name for reported problems is relative to the + opened folder. + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `// The actual pattern to match problems in the output. + ` `"pattern": { + ` `// The regular expression. Example to match: helloWorld.c:5:3: + warning: implicit declaration of function ‘printf’ + [-Wimplicit-function-declaration] + ` `"regexp": + "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", + ` `// The first match group matches the file name which is + relative. + ` `"file": 1, + ` `// The second match group matches the line on which the problem + occurred. + ` `"line": 2, + ` `// The third match group matches the column at which the + problem occurred. + ` `"column": 3, + ` `// The fourth match group matches the problem's severity. Can + be ignored. Then all problems are captured as errors. + ` `"severity": 4, + ` `// The fifth match group matches the message. + ` `"message": 5` `} + + } +``` + +Note that the file, line, and message properties are mandatory. The{' '} + `fileLocation` specifies whether the file paths that are + produced by the task output and matched in the problem are{' '} + `absolute` or `relative` . If the task produces both + absolute and relative paths, you can use the `autoDetect` file + location. With `autoDetect` , paths are first tested as absolute + paths, and if the file doesn't exist then the path is assumed to be + relative. + +Here is a finished tasks.json file with the code above (comments + removed) wrapped with the actual task details: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "build", + ` `"command": "gcc", + ` `"args": ["-Wall", "helloWorld.c", "-o", "helloWorld"], + ` `"problemMatcher": { + ` `"owner": "cpp", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": { + ` `"regexp": + "^(.\*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.\*)$", + ` `"file": 1, + ` `"line": 2, + ` `"column": 3, + ` `"severity": 4, + ` `"message": 5` `} + ` `} + ` `} + ` `] + + } +``` + +Running it inside AVAP TM Dev Studio and pressing Ctrl+Shift+M + to get the list of problems gives you the following output: + +There are a couple more properties that can be used inside a pattern. + These are: + +* location - If the problem location is line or line,column or startLine,startColumn,endLine,endColumn, then our generic location match group can be used. +* endLine - The match group index for the problem's end line. Can be omitted if no end line value is provided by the compiler. +* endColumn - The match group index for the problem's end column. Can be omitted if no end column value is provided by the compiler. +* code - The match group index for the problem's code. Can be omitted if no code value is provided by the compiler. + +You can also define a problem matcher that captures only a file. To do so, + define a `pattern` with the optional `kind` {' '} + attribute set to `file` . In this case, there is no need to + provide a `line` or `location` property. + +## Defining a multiline problem matcher + +Some tools spread problems found in a source file over several lines, + especially if stylish reporters are used. An example is ESLint; in stylish + mode it produces output like this: + +```javascript +test.js + ` `1:0 error Missing "use strict" statement strict + + ✖ 1 problems (1 errors, 0 warnings) +``` + +Our problem matcher is line-based so we need to capture the file name + (test.js) with a different regular expression than the actual + problem location and message (1:0 error Missing "use strict" + statement). + +To do this, use an array of problem patterns for the `pattern` {' '} + property. This way you define a pattern per each line you want to match. + +The following problem pattern matches the output from ESLint in stylish + mode - but still has one small issue that we need to resolve next. The + code below has a first regular expression to capture the file name and the + second to capture the line, column, severity, message, and error code: + +```javascript +{ + ` `"owner": "javascript", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": [` `{ + ` `"regexp": "^([^\\s].\*)$", + ` `"file": 1` `}, + ` `{ + ` `"regexp": + "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", + ` `"line": 1, + ` `"column": 2, + ` `"severity": 3, + ` `"message": 4, + ` `"code": 5` `} + ` `] + + } +``` + +However, this pattern will not work if there is more than one problem on a + resource. For instance, imagine the following output from ESLint: + +```javascript +test.js + ` `1:0 error Missing "use strict" statement strict + ` `1:9 error foo is defined but never used no-unused-vars + ` `2:5 error x is defined but never used no-unused-vars + ` `2:11 error Missing semicolon semi + ` `3:1 error "bar" is not defined no-undef + ` `4:1 error Newline required at end of file but not found + eol-last + + ✖ 6 problems (6 errors, 0 warnings) +``` + +The pattern's first regular expression will match "test.js", + the second "1:0 error ...". The next line "1:9 error + ..." is processed but not matched by the first regular expression and + so no problem is captured. + +To make this work, the last regular expression of a multiline pattern can + specify the `loop` property. If set to true, it instructs the + task system to apply the last pattern of a multiline matcher to the lines + in the output as long as the regular expression matches. + +The information captured by the first pattern, which in this case matches{' '} + `test.js` , will be combined with each of the subsequent lines + that match the `loop` pattern to create multiple problems. In + this example, six problems would be created. + +Here is a problem matcher to fully capture ESLint stylish problems: + +```javascript +{ + ` `"owner": "javascript", + ` `"fileLocation": ["relative", "${workspaceFolder}"], + ` `"pattern": [` `{ + ` `"regexp": "^([^\\s].\*)$", + ` `"file": 1` `}, + ` `{ + ` `"regexp": + "^\\s+(\\d+):(\\d+)\\s+(error|warning|info)\\s+(.\*)\\s\\s+(.\*)$", + ` `"line": 1, + ` `"column": 2, + ` `"severity": 3, + ` `"message": 4, + ` `"code": 5, + ` `"loop": true + ` `} + ` `] + + } +``` + +## Modifying an existing problem matcher + +If an existing problem matcher is close to what you need, you can modify + it in your `tasks.json` task. For example, the{' '} + `$tsc-watch` problem matcher only applies to closed documents. + If you want to have it apply to all documents you can modify it: + +```javascript +{ + ` `"type": "npm", + ` `"script": "watch", + ` `"problemMatcher": { + ` `"base": "$tsc-watch", + ` `"applyTo": "allDocuments" + ` `}, + ` `"isBackground": true + + } +``` + +Other modifiable problem matcher properties include{' '} + `background` , `fileLocation` , `owner` ,{' '} + `pattern` , `severity` , and `source` . + +## Background / watching tasks + +Some tools support running in the background while watching the file + system for changes and then triggering an action when a file changes on + disk. With `Gulp` such functionality is provided through the + npm module gulp-watch. The TypeScript compiler `tsc` has built + in support for this via the `--watch` command line option. + +To provide feedback that a background task is active in AVAP TM {' '} + Dev Studio and producing problem results, a problem matcher has to use + additional information to detect these state changes in the output. + Let's take the `tsc` compiler as an example. When the + compiler is started in watch mode, it prints the following additional + information to the console: + +```javascript +\> tsc --watch + + 12:30:36 PM - Compilation complete. Watching for file changes. +``` + +When a file changes on disk that contains a problem, the following output + appears: + +```javascript +12:32:35 PM - File change detected. Starting incremental compilation... + + src/messages.ts(276,9): error TS2304: Cannot find name + 'candidate'. + + 12:32:35 PM - Compilation complete. Watching for file changes. +``` + +Looking at the output shows the following pattern: + +* The compiler runs when{' '} `File change detected. Starting incremental compilation...` {' '} is printed to the console. +* The compiler stops when C `ompilation complete. Watching for file changes` . is printed to the console. +* Between those two strings problems are reported. +* The compiler also runs once the initial start (without printing{' '} `File change detected. Starting incremental compilation` ... to the console). + +To capture this information, a problem matcher can provide a{' '} + `background` property. + +For the `tsc` compiler, an appropriate `background` {' '} + property looks like this: + +```javascript +"background": { + ` `"activeOnStart": true, + ` `"beginsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - File change detected\\. Starting incremental + compilation\\.\\.\\.", + ` `"endsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - Compilation complete\\. Watching for file changes\\." + + } +``` + +In addition to the `background` property on the problem + matcher, the task itself has to be marked as `isBackground` so + that the task keeps running in the background. + +A full handcrafted `tasks.json` for a `tsc` task + running in watch mode looks like this: + +```javascript +{ + ` `"version": "2.0.0", + ` `"tasks": [` `{ + ` `"label": "watch", + ` `"command": "tsc", + ` `"args": ["--watch"], + ` `"isBackground": true, + ` `"problemMatcher": { + ` `"owner": "typescript", + ` `"fileLocation": "relative", + ` `"pattern": { + ` `"regexp": + "^([^\\s].\*)\\((\\d+|\\d+,\\d+|\\d+,\\d+,\\d+,\\d+)\\):\\s+(error|warning|info)\\s+(TS\\d+)\\s\*:\\s\*(.\*)$", + ` `"file": 1, + ` `"location": 2, + ` `"severity": 3, + ` `"code": 4, + ` `"message": 5` `}, + ` `"background": { + ` `"activeOnStart": true, + ` `"beginsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - File change detected\\. Starting incremental + compilation\\.\\.\\.", + ` `"endsPattern": + "^\\s\*\\d{1,2}:\\d{1,2}:\\d{1,2}(?: + AM| PM)? - Compilation complete\\. Watching for file changes\\." + ` `} + ` `} + ` `} + ` `] + + } +``` + +## Next steps + +That was tasks - let's keep going... + +* tasks.json Schema - You can review the full `tasks.json` {' '} schema and descriptions. +* Basic Editing - Learn about the powerful AVAP TM Dev Studio editor. +* Code Navigation - Move quickly through your source code. +* Language Support - Learn about our supported programming languages, both shipped with AVAP TM Dev Studio and through community extensions. +* Debugging - Debug your source code directly in the AVAP TM Dev Studio editor. + +## Common questions + +### Can a task use a different shell than the one specified for the Integrated + Terminal? + +Yes. You can use the " + `terminal.integrated.automationProfile.\*` " setting to set + the shell that will be used for all automation in AVAP TM Dev + Studio, which includes Tasks. + +```javascript +` `"terminal.integrated.automationProfile.windows": { + ` `"path": "cmd.exe" + ` `} +``` + +Alternatively, you can override a task's shell with the{' '} + `options.shell` property. You can set this per task, globally, + or per platform. For example, to use cmd.exe on Windows, your{' '} + `tasks.json` would include: + +```javascript +` `"version": "2.0.0", + ` `"windows": { + ` `"options": { + ` `"shell": { + ` `"executable": "cmd.exe", + ` `"args": [` `"/d", "/c" + ` `] + ` `} + ` `} + ` `}, + + ... +``` + +### Can a background task be used as a prelaunchTask in launch.json? + +Yes. Since a background task will run until killed, a background task on + its own has no signal that it has "completed". To use a + background task as a `prelaunchTask` , you must add an + appropriate background `problemMatcher` to the background task + so that there is a way for the task system and debug system to know that + the task "finished". + +Your task could be: + +```javascript +{ + ` `"type": "npm", + ` `"script": "watch", + ` `"problemMatcher": "$tsc-watch", + ` `"isBackground": true + + } +``` + +You can then use the task as a prelaunchTask in your{' '} + `launch.json` file: + +```javascript +{ + ` `"name": "Launch Extension", + ` `"type": "extensionHost", + ` `"request": "launch", + ` `"runtimeExecutable": "${execPath}", + ` `"args": + ["--extensionDevelopmentPath=${workspaceRoot}"], + ` `"stopOnEntry": false, + ` `"sourceMaps": true, + ` `"outFiles": ["${workspaceRoot}/out/src/\*\*/\*.js"], + ` `"preLaunchTask": "npm: watch" + + } +``` + +For more on background tasks, go to Background / watching tasks. + +### Why do I get "command not found" when running a task? + +The message "command not found" happens when the task command + you're trying to run is not recognized by your terminal as something + runnable. Most often, this occurs because the command is configured as + part of your shell's startup scripts. Tasks are run as non-login and + non-interactive, which means that the startup scripts for your shell + won't be run. nvm in particular is known to use startup scripts as + part of its configuration. + +There are several ways to resolve this issue: + +The above `npm` task will run bash with a command ( + `-c` ), just like the tasks system does by default. However, + this task also runs `bash` as a login shell ( + `-l` ). diff --git a/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md new file mode 100644 index 0000000..b1e4c50 --- /dev/null +++ b/docs/developer.avapframework.com/79_UserGUIDE_USER_GUIDE_WorkspaceTrust.md @@ -0,0 +1,365 @@ +AVAP TM Dev Studio takes security seriously and wants to help + you safely browse and edit code no matter the source or original authors. + The Workspace Trust feature lets you decide whether code in your project + folder can be executed by AVAP TM Dev Studio and extensions + without your explicit approval. + +![Trust this folder dialog] + +## Safe code browsing + +It's great that there is so much source code available on public + repositories and file shares. No matter the coding task or problem, there + is probably already a good solution available somewhere. It is also great + that there are so many powerful coding tools available to help you + understand, debug, and optimize your code. However, using open-source code + and tools does have risks, and you can leave yourself open to malicious + code execution and exploits. + +Workspace Trust provides an extra layer of security when working with + unfamiliar code, by preventing automatic code execution of any code in + your workspace if the workspace is open in "Restricted Mode". + +## Restricted Mode + +When prompted by the Workspace Trust dialog, if you choose{' '} + No, I don't trust the authors , AVAP TM Dev + Studio will go into Restricted Mode to prevent code execution. The + workbench will display a banner at the top with links to{' '} + Manage your folder via the Workspace Trust editor, and{' '} + Learn More about Workspace Trust (which takes you to + back to this documentation). + +You will also see a Restricted Mode badge in the Status bar. + +Restricted Mode tries to prevent automatic code execution by disabling or + limiting the operation of several AVAP TM Dev Studio features: + tasks, debugging, workspace settings, and extensions. + +To see the full list of features disabled in Restricted Mode, you can open + the Workspace Trust editor via the Manage link in the + banner, or by clicking the Restricted Mode badge in the Status bar. + +Tasks can run scripts and tool binaries, and because task definitions are + defined in the workspace `.vscode` folder, they are part of the + committed source code for a repo, and shared to every user of that repo. + Were someone to create a malicious task, it could be unknowingly run by + anyone who cloned that repository. + +If you try to run or even enumerate tasks ( Terminal {' '} + > Run Task... ) while in Restricted Mode, AVAP + TM Dev Studio will display a prompt to trust the folder and + continue executing the task. Cancelling the dialog leaves AVAP + TM Dev Studio in Restricted Mode. + +### Debugging + +Similar to running a AVAP TM Dev Studio task, debug extensions + can run debugger binaries when launching a debug session. For that reason, + debugging is also disabled when a folder is open in Restricted Mode. + +If you try to start a debug session ( Run >{' '} + Start Debugging ) while in Restricted Mode, AVAP + TM Dev Studio will display a prompt to trust the folder and + continue launching the debugger. Cancelling the dialog leaves AVAP + TM Dev Studio in Restricted Mode, and does not start the debug + session. + +Workspace settings are stored in the .vscode folder at the root of your + workspace, and are therefore shared by anyone who clones the workspace + repository. Some settings contain paths to executables (for example, + linter binaries), which if set to point to malicious code, could do + damage. For this reason, there is a set of workspace settings that are + disabled when running in Restricted Mode. + +In the Workspace Trust editor, there is a link to display the workspace + settings that aren't being applied. Clicking the link brings up the + Settings editor scoped by the tag:requireTrustedWorkspace tag. + +The AVAP TM Dev Studio extensions ecosystem is incredibly rich + and diverse. People have created extensions to help with just about any + programming task or editor customization. Some extensions provide full + programming language support (IntelliSense, debugging, code + analysis), and others let you play music or have virtual pets. + +Most extensions run code on your behalf and could potentially do harm. + Some extensions have settings that could cause them to act maliciously if + configured to run an unexpected executable. For this reason, extensions + that have not explicitly opted into Workspace Trust are disabled by + default in Restricted Mode. + +You can review an installed extension's status by clicking the{' '} + extensions are disabled or have limited functionality {' '} + link in the Workspace Trust editor, which displays the Extensions view + scoped with the `@workspaceUnsupported` filter. + +Disabled in Restricted Mode + +Extensions that have either not explicitly indicated that they support + running in Restricted Mode are shown in the{' '} + Disabled in Restricted Mode section. An extension author + can also indicate that they never want to be enabled in Restricted Mode if + they determine that their extension could be misused by modifications + (settings or files) in a workspace. + +Limited in Restricted Mode + +Extension authors can also evaluate their extensions for possible security + vulnerabilities and declare that they have limited {' '} + support when running in Restricted Mode. This mode means the extension may + disable some features or functionality to prevent a possible exploit. + +Extensions can add custom text to the Extensions view Workspace Trust + badge explaining the limitation when running in an untrusted folder. + +For example, the AVAP TM Dev Studio built-in PHP extension + limits the use of the `php.validate.executablePath` setting to + trusted folders since overriding this setting could run a malicious + program. + +You can override an extension's Workspace Trust support level using + the `extensions.supportUntrustedWorkspaces` setting described + in the Enabling extensions section below. + +If you try to install an extension in Restricted Mode, you will be + prompted to either trust the workspace or just install the extension. If + the extension doesn't support Workspace Trust, it will be installed, + but be disabled or running with limited functionality. + +## Trusting a workspace + +If you trust the authors and maintainers of a project, you can trust the + project's folder on your local machine. For example, it is usually + safe to trust repositories from well-known GitHub organizations such as + github.com/microsoft or github.com/docker. + +The initial Workspace Trust prompt when you open a new folder allows you + to trust that folder and its subfolders. + +You can also bring up the Workspace Editor and quickly toggle a + folder's trusted state. + +There are several ways to bring up the Workspace Editor dialog. + +When in Restricted Mode: + +* Restricted Mode banner Manage link +* Restricted Mode Status bar item + +You can also at any time use: + +* Workspaces: Manage Workspace Trust command from the Command Palette (Ctrl+Shift+P) +* Manage Workspace Trust from the Manage {' '} gear in the Activity bar + +## Selecting folders + +When you trust a folder, it is added to the{' '} + Trusted Folders & Workspaces list displayed in the + Workspace Trust editor. + +You can manually add, edit, and remove folders from this list and the + active folder enabling trust is highlighted in bold. + +When you trust a folder via the Workspace Trust editor, you have the + option to trust the parent folder. This will apply trust to the parent + folder and all subfolders. + +This can be helpful if you have many folders with trusted content + co-located under one folder. + +When opening a subfolder under a trusted parent, you won't see the + usual Don't Trust button to put you back in + Restricted Mode, instead there is text mentioning that your folder is + trusted due to another folder. + +You can add, modify, and remove a parent folder entry from the{' '} + Trusted Folders & Workspaces list. + +As mentioned above, you can trust a parent folder and all subfolders will + be trusted. This allows you to control Workspace Trust via a + repository's location on disk. + +For example, you could put all trusted repos under a + "TrustedRepos" parent folder, and unfamiliar repos under another + parent folder such as "ForEvaluation". You would trust the + "TrustedRepos" folder, and selectively trust folders under + "ForEvaluation". + +```javascript +TrustedRepos - Clone trusted repositories under this parent folder + + + ForEvaluation - Clone experimental or unfamiliar repositories under this + parent folder +``` + +You also group and set trust on your repositories by grouping them under + organization-base parent folders. + +```javascript +github/microsoft - Clone a specific organization's repositories under + this parent folder + + + github/{myforks} - Place your forked repositories under this + parent folder + + + local - Local un-published repositories +``` + +## Enabling extensions + +What happens if you want to use Restricted Mode but your favorite + extension doesn't support Workspace Trust? This can happen if an + extension, while useful and functional, isn't being actively + maintained and hasn't declared their Workspace Trust support. To + handle this scenario, you can override the extension's trust state + with the `extensions.supportUntrustedWorkspaces setting` . + +If you open the Settings editor (Ctrl+,) and search for + "trust extensions", you can find the{' '} + Extensions: Support Untrusted Workspaces setting, which + has an Edit in settings.json link. + +Select that link and you will go to your user settings.json file with a + new entry for extensions.supportUntrustedWorkspaces. This setting takes an + object that has a list of extension IDs and their support status and + version. You can select any of your installed extensions via IntelliSense + suggestions. + +Below you can see a settings.json entry for the Prettier extension. + +```javascript +` `"extensions.supportUntrustedWorkspaces": { + ` `"esbenp.prettier-vscode": { + ` `"supported": true, + ` `"version": "6.4.0" + ` `}, + ` `}, +``` + +You can either enable or disable Workspace Trust support with the + supported attribute. The version attribute specifies the exact extension + version applicable and you can remove the version field if you want to set + the state for all versions. + +If you'd like to learn more about how extension authors evaluate and + determine which features to limit in Restricted Mode, you can read the + Workspace Trust Extension Guide. + +## Opening untrusted files + +If you open a file that is located outside of a trusted folder, AVAP + TM Dev Studio will detect that the file comes from somewhere + outside the folder root and prompt you with the option to continue to open + the file or open the file in a new window in Restricted Mode. Opening in + Restricted Mode is the safest option and you can always reopen the file in + your original AVAP TM Dev Studio window once you determine the + file is trustworthy. + +If you would prefer to not be prompted when opening files from outside + trusted workspaces, you can set{' '} + `security.workspace.trust.untrustedFiles` to `open` . + You can also set `security.workspace.trust.untrustedFiles` to{' '} + `newWindow` to always create a new window in Restricted Mode. + Checking the Remember my decision for all workspaces {' '} + option in the untrusted files dialog applies your choice to the{' '} + `security.workspace.trust.untrustedFiles` user setting. + +### Opening untrusted folders + +When working with multi-root workspaces with multiple folders, if you try + to add a new folder to a trusted multi-root workspace, you will be + prompted to decide if you trust the files in that folder or if not, the + entire workspace will switch to Restricted Mode. + +### Empty windows (no open folder) + +By default, if you open a new AVAP TM Dev Studio window + (instance) without opening a folder or workspace, AVAP + TM Dev Studio runs the window with full trust. All installed + extensions are enabled and you can use the empty window without + restrictions. + +When you open a file, you will be prompted whether you want to open an + untrusted file since there is no folder to parent it. + +You can switch an empty window to Restricted Mode using the Workspace + Trust editor (select Manage Workspace Trust from the{' '} + Manage gear button or the Command Palette) and + selecting Don't Trust . The empty window will remain + in Restricted Mode for your current session but will go back to trusted if + you restart or create a new window. + +If you want all empty windows to be in Restricted Mode, you can set{' '} + `security.workspace.trust.emptyWindow` to false. + +## Settings + +Below are the available Workspace Trust settings: + +* `security.workspace.trust.enabled` - Enable Workspace Trust feature. Default is true. +* `security.workspace.trust.startupPrompt` - Whether to show the Workspace Trust dialog on startup. Default is to only show once per distinct folder or workspace. +* `security.workspace.trust.emptyWindow` - Whether to always trust an empty window (no open folder). Default is true. +* `security.workspace.trust.untrustedFiles` - Controls how to handle loose files in a workspace. Default is to prompt. +* `extensions.supportUntrustedWorkspaces` - Override extension Workspace Trust declarations. Either true or false. +* `security.workspace.trust.banner` - Controls when the Restricted Mode banner is displayed. Default is untilDismissed. + +## Command-line switch + +You can disable Workspace Trust via the AVAP TM Dev Studio + command line by passing --disable-workspace-trust. This switch only + affects the current session. + +## Next steps + +Learn more at: + +* Workspace Trust Extension Guide - Learn how extension authors can support Workspace Trust. +* What is a AVAP TM Dev Studio "workspace"? - Find out more details about the AVAP TM Dev Studio "workspace" concept. +* GitHub Repositories extension - Work directly on a repository without cloning the source code to your local machine. + +## Common questions + +Yes, you can still browse and edit source code in Restricted Mode. Some + language features may be disabled, but text editing is always supported. + +In Restricted Mode, any extension that doesn't support Workspace Trust + will be disabled, and all UI elements such as Activity bar icons and + commands will not be displayed. + +You can override an extension's Workspace Trust support level with the{' '} + `extensions.supportUntrustedWorkspaces` setting but do so with + care. Enabling extensions has more details. + +You can but it is not recommended. If you don't want AVAP TM {' '} + Dev Studio to check for Workspace Trust when opening a new folder or + repository, you can set `security.workspace.trust.enabled` to + false. AVAP TM Dev Studio will then behave as it did before the + 1.57 release. + +Bring up Workspace Trust editor ( + Workspaces: Manage Workspace Trust from the Command + Palette) and select the Don't Trust button. You + can also remove the folder from the{' '} + Trusted Folders & Workspaces list. + +If you don't see the Don't Trust button in the + Workspace Trust dialog, the folder's trust level may be inherited from + a parent folder. Review the{' '} + Trusted Folders & Workspaces list to check if a + parent folder has enabled Workspace Trust. + +Some workflows such as connecting to a GitHub Codespace or attaching to a + running Docker container are automatically trusted since these are managed + environments to which you should already have a high level of trust. + +Many features of AVAP TM Dev Studio allow third-party tools and + extensions to run automatically, such as linting or format on save, or + when you do certain operations like compiling code or debugging. An + unethical person could craft an innocent looking project that would run + malicious code without your knowledge and harm your local machine. + Workspace Trust provides an extra layer of security by trying to prevent + code execution while you are evaluating the safety and integrity of + unfamiliar source code. diff --git a/docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md b/docs/developer.avapframework.com/7_Carga_masiva_de_saldo_operador_EN_Carga_masiva_de_saldo_operador_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md new file mode 100644 index 0000000..73ee097 --- /dev/null +++ b/docs/developer.avapframework.com/7_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN_Envio_de_una_OTP_a_un_telefono_externo_de_la_plataforma_EN.md @@ -0,0 +1,180 @@ +This service is used to send an OTP to an external phone on the platform. + +POST: + `URL_BASE + /ws/util.py/send_otp` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "amount" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `amount:` Amount of the operation with the applied format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/send_otp" + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'phone_number' + :{' '} + '7229063245' + , + 'signature' + :{' '} + + '277b62946d7ed08cf23a5613e3becc4711322abd' + + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/util.py/send_otp', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'phone_number': '7229063245', + 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("phone_number", "7229063245"); + formdata.append("signature", + "277b62946d7ed08cf23a5613e3becc4711322abd"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/send_otp", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/util.py/send_otp'{' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + 'phone_number=7229063245'{' '} + \ + --form{' '} + + 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' +``` + +## Business logic: + +This service must be executed by a user who has an administrator profile. + An OTP is sent to the phone indicated with the default message, or the one + entered in the request. diff --git a/docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md b/docs/developer.avapframework.com/7_get_gasprices_get_gasprices.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md b/docs/developer.avapframework.com/80_Usuarios_Usuarios_con_saldo_EN.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md b/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md new file mode 100644 index 0000000..0334449 --- /dev/null +++ b/docs/developer.avapframework.com/81_validacion_Validacion_de_una_OTP_enviada_a_un_telefono_externo_de_la_plataforma_EN.md @@ -0,0 +1,195 @@ +This service is used to validate an OTP sent to a telephone number. + +POST: + `URL_BASE + /ws/util.py/validate_otp` + +## Receives: + +All the parameters that the service receives must be indicated in the body + of the request. + +## Returns: + +Depending on the result of the operation, this service can return two + different JSON: + +### Answer JSON OK: + +```javascript +{ + "status" + : + , + "signed" + : + , + "signature_key" + : + , + "elapsed" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `signed:` Shows if the validation request is right or not. +* `signature_key:` Key to OTP verification. +* `amount:` Operation amount in the suitable format. + +### Answer JSON KO: + +```javascript +{ + "status" + :{' '} + false + , + "level" + : + , + "message" + : + , + "error" + : + } +``` + +## Where: + +* `status:` Shows if the call has been successful (true) or not (false). +* `level:` Error importance level. +* `message:` Error message. +* `error:` Sole error code. + +## Example requests: + +### Python - Requests: + +```javascript +import requests + url ={' '} + "URL_BASE/ws/util.py/validate_otp" + payload ={' '} + { + 'country_code' + :{' '} + 'MX' + , + 'user_id' + :{' '} + '4532' + , + 'phone_number' + :{' '} + '7229063245' + , + 'otp' + :{' '} + '123456' + , + 'signature' + :{' '} + + '277b62946d7ed08cf23a5613e3becc4711322abd' + + } + files ={' '} + [ + ] + headers={' '} + { + } + response = requests + .request + ( + "POST" + , url + , headers + =headers + , data{' '} + = payload + , files{' '} + = files + ) + print + (response + .text + .encode + ( + 'utf8' + ) + ) +``` + +### NodeJs - Request: + +```javascript +var request = require('request'); + var options = { + 'method': 'POST', + 'url': 'URL_BASE/ws/util.py/validate_otp', + 'headers': {}, + formData: { + 'country_code': 'MX', + 'user_id': '4532', + 'phone_number': '7229063245', + 'otp': '123456', + 'signature': '277b62946d7ed08cf23a5613e3becc4711322abd' + } + }; + request(options, function (error, response) {{' '} + if (error) throw new Error(error); + console.log(response.body); + }); +``` + +### JavaScript - Fetch: + +```javascript +var formdata = new FormData(); + formdata.append("country_code", "MX"); + formdata.append("user_id", "4532"); + formdata.append("phone_number", "7229063245"); + formdata.append("otp", "123456"); + formdata.append("signature", + "277b62946d7ed08cf23a5613e3becc4711322abd"); + var requestOptions = { + method: 'POST', + body: formdata, + redirect: 'follow' + }; + fetch("URL_BASE/ws/util.py/validate_otp", requestOptions) + .then(response => response.text()) + .then(result => console.log(result)) + .catch(error => console.log('error', error)); +``` + +### CURL: + +```javascript +curl --location --request POST{' '} + 'URL_BASE/ws/util.py/validate_otp'{' '} + \ + --form + 'country_code=MX' + {' '} + \ + --form 'user_id=4532'{' '} + \ + --form{' '} + 'phone_number=7229063245'{' '} + \ + --form 'otp=123456'{' '} + \ + --form{' '} + + 'signature=277b62946d7ed08cf23a5613e3becc4711322abd' +``` + +## Business logic: + +This service must be used by an user with administrator profile. The OTP + sent to the indicated phone is validated. diff --git a/docs/developer.avapframework.com/82_vault_vault.md b/docs/developer.avapframework.com/82_vault_vault.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md b/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md new file mode 100644 index 0000000..587e23c --- /dev/null +++ b/docs/developer.avapframework.com/83_vs_api_vs_api_completion.md @@ -0,0 +1,24 @@ +This extension is intended to help you to use 101OBeX APIs + +## Features + +The completion is intended to use with python language. + +## Requirements + +For the extension to work, you must have configured your access to the + 101OBeX API through 101obexcli. + +## Release Notes + +This extension has the purpose of facilitating the developer, the + management of permissions, organizations and development teams, showing + him at all times, the organizations to which he has access, the + development teams to which he belongs and the APIs that he is authorized + to consume. + +### 0.0.1 + +Initial version, advisory only. + +* https://github.com/101OBeXCorp/101obex-api-completion diff --git a/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md b/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md new file mode 100644 index 0000000..672d286 --- /dev/null +++ b/docs/developer.avapframework.com/83_vs_api_vs_api_extension.md @@ -0,0 +1,24 @@ +This extension is intended to help you to use 101OBeX APIs + +## Features + + + +## Requirements + +For the extension to work, you must have configured your access to the + 101OBeX API through 101obexcli. + +## Release Notes + +This extension has the purpose of facilitating the developer, the + management of permissions, organizations and development teams, showing + him at all times, the organizations to which he has access, the + development teams to which he belongs and the APIs that he is authorized + to consume. + +### 0.0.1 + +Initial version, advisory only. + +* https://github.com/101OBeXCorp/101obex-api-extension diff --git a/docs/developer.avapframework.com/9_get_pools_get_pools.md b/docs/developer.avapframework.com/9_get_pools_get_pools.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/developer.avapframework.com/GETSTARTED_Telemetry.md b/docs/developer.avapframework.com/GETSTARTED_Telemetry.md new file mode 100644 index 0000000..ac89da6 --- /dev/null +++ b/docs/developer.avapframework.com/GETSTARTED_Telemetry.md @@ -0,0 +1,130 @@ +AVAP™ Dev Studio 2024 collects telemetry data, which is used to help understand how to improve the product. For example, this usage data helps to debug issues, such as slow start-up times, and to prioritize new features. While we appreciate the insights this data provides, we also know that not everyone wants to send usage data and you can disable telemetry as described in disable telemetry reporting. You can also read our privacy statement to learn more. + +## Types of telemetry data + +AVAP™ DS and this page refer to three different types of data with respect to telemetry. + +* Crash Reports - Crash reports collect diagnostic information when AVAP™ DS crashes and sends it to Microsoft to help understand why the crash occurred and what changes are needed to prevent the crash in the future. +* Error Telemetry - Error telemetry collects information about errors that do not crash the application but are unexpected. +* Usage Data - Usage data collects information about how features are used and perform in AVAP™ DS which helps us prioritize future product improvements. + +## Disable telemetry reporting + +With the `telemetry.telemetryLevel` user setting, you can control the different types of telemetry we send with a single setting. Here is a table of the different types of data sent with each value of `telemetry.telemetryLevel:` + +For example, if you don't want to send any telemetry data to Microsoft, you can set the `telemetry.telemetryLevel` user setting to `off` . + +From Code > Preferences > Settings , search for `telemetry` , and set the Telemetry: Telemetry Level setting to `off` . This will silence all telemetry events from AVAP™ DS going forward. Telemetry information may have been collected and sent up until the point when you disable the setting. + +IMAGEN + +If you use the JSON editor for your settings, add the following line: + +```javascript +"telemetry.telemetryLevel": "off" +``` + +## Extensions and telemetry + +AVAP™ DS lets you add features to the product by installing Microsoft and third-party extensions. These extensions may be collecting their own usage data and are not controlled by the `telemetry.telemetryLevel` setting. Consult the specific extension's documentation to learn about its telemetry reporting and whether it can be disabled. + +Extension authors may refer to the "For Extension Authors" section for guidance on implementing telemetry best practices within their extension. + +## Output channel for telemetry events + +If you'd like to review the telemetry events in AVAP™ DS as they are sent, you can enable tracing and it will record telemetry events. Using the Developer: Set Log Level... command and select log level Trace . To view the logging output, go to the Output panel (⇧⌘U) and pick Telemetry from the dropdown. + +IMAGEN + +When tracing telemetry events, the events are also logged to a local file telemetry.log, which you can view using the Developer: Open Log File... command and choosing Telemetry from the dropdown. + +IMAGEN + +## Viewing all telemetry events + +If you'd like to view all the possible telemetry events that AVAP™ DS could send, you can use the `--telemetry` flag in the CLI. This will generate a JSON report that you can then view within AVAP™ DS. These reports are generated per build and do not contain extension telemetry unless the extension author adds a `telemetry.json` file to their root build directory. + +For example, running `code --telemetry > telemetry.json && code telemetry.json` will create a `telemetry.json` file in your current working directory and then open it in AVAP™ DS. You cannot pipe the output like this, `code --telemetry | code -` , due to the length of the telemetry report. + +The sections below detail the event metadata used to classify the telemetry, describe its purpose, and indicate any special handling. + +The `classification` field describes the type of data. + +* `SystemMetaData` - Values generated by AVAP™ DS that are not personally identifiable. +* `CallstackOrException` - Errors caused by failures in program execution. These contain stack traces that have been scrubbed of user paths. +* `PublicNonPersonalData` - User generated data that is available to the public, for example, published extension IDs. +* `EndUserPseudonymizedInformation` - Hashes used to identify a unique user without being able to identify who that user is. For example, a hashed Mac Address. + +The `purpose` field describes why the data is collected. + +* `PerformanceAndHealth` - To ensure that AVAP™ DS product and services are healthy and fast. +* `FeatureInsight` - To understand feature usage and where to continue development investment. +* `BusinessInsight` - To make decisions related to the business of AVAP™ DS, Microsoft, and GitHub. + +The `endpoint` field describes what data handler the data is sent to. This is normally applied to special data that requires additional scrubbing and security to protect user privacy. + +* `GoogleAnalyticsId` - Used on our website for Google Analytics and tracking page views. These are handled in a more sensitive manner than our normal data. +* `MacAddressHash` - Used to identify a user of AVAP™ DS. This is hashed once on the client side and then hashed again on the pipeline side to make it impossible to identify a given user. On AVAP™ DS for the Web, a UUID is generated for this case. +* `none` - Data does not require any special handling. + +## GDPR and AVAP™ DS + +In addition to supporting the General Data Protection Regulation (GDPR), the AVAP™ DS team takes privacy very seriously. That's both for Microsoft as a company and specifically within the AVAP™ DS team. + +To ensure GDPR compliance, we made several updates to AVAP™ DS, these include: + +* Making it easier to opt out of telemetry collection by placing a notification in product for all existing and new users. +* Reviewing and classifying the telemetry that we send (documented in our OSS codebase). +* Ensuring that we have valid data retention policies in place for any data we do collect, for example crash dumps. + +In short, we have worked hard to do the right thing, for all users, as these practices apply to all geographies, not just Europe. + +One question we expect people to ask is to see the data we collect. However, we don't have a reliable way to do this as AVAP™ DS does not have a 'sign-in' experience that would uniquely identify a user. We do send information that helps us approximate a single user for diagnostic purposes (this is based on a hash of the network adapter NIC on the desktop and a randomly assigned UUID on the web) but this is not guaranteed to be unique. For example, virtual machines (VMs) often rotate NIC IDs or allocate from a pool. This technique is sufficient to help us when working through problems, but it is not reliable enough for us to 'provide your data'. + +We expect our approach to evolve as we learn more about GDPR and the expectations of our users. We greatly appreciate the data users do send to us, as it is very valuable and AVAP™ DS is a better product for everyone because of it. And again, if you are worried about privacy, we offer the ability to disable sending telemetry as described in disable telemetry reporting. + +You can find more information about how the AVAP™ DS family approaches GDPR at AVAP™ DS Family Data Subject Requests for the GDPR. + +## Managing online services + +Beyond crash reporting and telemetry, AVAP™ DS uses online services for various other purposes such as downloading product updates, finding, installing, and updating extensions, Settings Sync, or providing Natural Language Search within the Settings editor. You can choose to turn on/off features that use these services. + +Please note, that turning off these features does not put AVAP™ DS into offline mode. For example, if you search for extensions in the Extensions view, AVAP™ DS still searches the online AVAP™ DS Marketplace. The settings ensure that AVAP™ DS does not talk to online services without you requesting it. + +From Code > Preferences > Settings , and type the tag `@tag:usesOnlineServices` . This will display all settings that control the usage of online services and you can individually switch them on or off. + +IMAGEN + +Note: AVAP™ DS extensions may also use online services and may not provide settings to configure the usage of these online services, or they may not register their settings to show up when searching for `@tag:usesOnlineServices` . Consult the specific extension's documentation to learn about its usage of online services. + +The built-in npm support for AVAP™ DS extension sends requests to `https://registry.npmjs.org` and `https://registry.bower.io` . + +The built-in TypeScript and JavaScript Language Features extension queries the `@types` domain at `https://registry.npmjs.org` . + +When you use Developer: Toggle Developer Tools or Developer: Open Webview Developer Tools , AVAP™ DS may talk to Google servers to fetch data needed to launch Developer Tools. + +### Extension recommendations + +AVAP™ DS provides extension recommendations based on your file types, your workspace, and your environment. File type recommendations are either precomputed or dynamic. Workspace and environment recommendations are always precomputed. + +If you want to know why an extension is being recommended, open the extension's detail page. You can find the recommendation reason in the page header. + +IMAGEN + +AVAP™ DS collects telemetry about which extensions are being activated for what file types and what workspaces/folders. Specific folders are identified by computing a hash of each of the folder's Git remotes. + +We use this information to precompute anonymous recommendations. Precomputed recommendations are instructions that spell out under which conditions an extension should be recommended. For example, when we see an interesting correlation between two extensions A and B, one instruction might be: Recommend extension B if the user has installed extension A but not B. + +Some precomputed recommendations are shipped as part of the product while additional precomputed recommendations are fetched at runtime from an online Microsoft service. AVAP™ DS independently evaluates and executes precomputed recommendations without sending any user information to any online service. + +When you open a file type for which AVAP™ DS does not have any precomputed recommendation, it asks the Extension Marketplace for extensions that declare that they support this file type. If the query returns extensions you don't have installed, AVAP™ DS will provide a notification. + +### For extension authors + +Please read the extension guides telemetry document. + +### Next steps + +* AVAP™ Dev Studio 2024 FAQ - Consult the Frequently Asked Questions to learn more. +* User and Workspace Settings - Read about available options to customize AVAP™ DS. +* Key Bindings - You can easily modify commonly used keyboard shortcuts. diff --git a/docs/developer.avapframework.com/chapter12_2.md b/docs/developer.avapframework.com/chapter12_2.md new file mode 100644 index 0000000..3e11432 --- /dev/null +++ b/docs/developer.avapframework.com/chapter12_2.md @@ -0,0 +1,11 @@ +## Usage of addParam + +The `addParam()` function is used to add parameters to an API call in the query string. + The basic syntax of this function is as follows: + +```javascript +addParam(variable, value) +``` + +Where `variable` is the name of the variable to be used as a parameter in the API call, + and `value` is the value assigned to this variable. diff --git a/docs/developer.avapframework.com/chapter12_3.md b/docs/developer.avapframework.com/chapter12_3.md new file mode 100644 index 0000000..e06a98f --- /dev/null +++ b/docs/developer.avapframework.com/chapter12_3.md @@ -0,0 +1,12 @@ +## Example Usage + +Below is a practical example illustrating how to use the `addParam()` function in an API call: + +```javascript +# API call with addParam() + addParam(user, user_var) + addParam(password, password_var) +``` + +In this example, two parameters, `user` and `password` , are being added to an API call. + The value of `user` is set to user_var and the value of `password` is set to password_var. diff --git a/docs/developer.avapframework.com/chapter12_4.md b/docs/developer.avapframework.com/chapter12_4.md new file mode 100644 index 0000000..21831d0 --- /dev/null +++ b/docs/developer.avapframework.com/chapter12_4.md @@ -0,0 +1,3 @@ +## Internal Operation + +Internally, the `addParam()` function constructs the querystring for the API call by adding the specified parameters along with their corresponding values. This querystring is passed to the API, which uses it to process the request and return the appropriate response. diff --git a/docs/developer.avapframework.com/chapter12_5.md b/docs/developer.avapframework.com/chapter12_5.md new file mode 100644 index 0000000..3fb4dca --- /dev/null +++ b/docs/developer.avapframework.com/chapter12_5.md @@ -0,0 +1,3 @@ +## Important Considerations + +It is important to ensure that the parameters added with `addParam()` are valid and correctly formatted according to the requirements of the API being called. Additionally, it is the developer's responsibility to ensure that the values assigned to the parameters are secure and do not contain malicious data that could compromise system security. diff --git a/docs/developer.avapframework.com/chapter12_6.md b/docs/developer.avapframework.com/chapter12_6.md new file mode 100644 index 0000000..1ca91a0 --- /dev/null +++ b/docs/developer.avapframework.com/chapter12_6.md @@ -0,0 +1,3 @@ +## Conclusions + +The `addParam()` function in AVAP™ is an essential tool for constructing and managing API calls, facilitating communication between the client and the server. By understanding how this function works and how it is used in the context of an API call, developers can create more robust and secure applications that make the most of web services' potential. diff --git a/docs/developer.avapframework.com/chapter13_1.md b/docs/developer.avapframework.com/chapter13_1.md new file mode 100644 index 0000000..757b4f8 --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_1.md @@ -0,0 +1,3 @@ +## Introduction + +Includes are a fundamental feature in AVAP™ that allow for the efficient organization and reuse of code in software development projects. Just like in other programming languages, includes in AVAP™ enable the incorporation of functionalities from other files or libraries into the current file. This capability provides a number of significant advantages that make the development and maintenance of projects more efficient and effective. diff --git a/docs/developer.avapframework.com/chapter13_2.md b/docs/developer.avapframework.com/chapter13_2.md new file mode 100644 index 0000000..4713cc2 --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_2.md @@ -0,0 +1,3 @@ +## Purpose of Includes + +The primary purpose of includes in AVAP™ is to promote modularity and code reuse. By dividing code into separate modules or files and then including them in main files as needed, developers can write and maintain code in a more organized and structured manner. This facilitates the management of large and complex projects, as well as collaboration between development teams. diff --git a/docs/developer.avapframework.com/chapter13_3.md b/docs/developer.avapframework.com/chapter13_3.md new file mode 100644 index 0000000..93d88a9 --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_3.md @@ -0,0 +1,6 @@ +## Advantages of Using Includes + +* Code Reuse: Includes allow for the reuse of functions, variables, and other code definitions in multiple parts of a project, reducing code duplication and promoting consistency and coherence in development. +* Facilitates Maintainability: By dividing code into smaller, more specific modules, it is easier to identify, understand, and modify parts of the code without affecting other parts of the project. This eases software maintenance over time. +* Promotes Modularity: The ability to include files selectively as needed encourages code modularity, which simplifies understanding and managing complex projects by breaking them down into smaller, manageable components. +* Improves Readability and Organization: The use of includes helps organize code in a logical and structured manner, improving readability and facilitating navigation through different parts of the project. diff --git a/docs/developer.avapframework.com/chapter13_4.md b/docs/developer.avapframework.com/chapter13_4.md new file mode 100644 index 0000000..9f39c61 --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_4.md @@ -0,0 +1,6 @@ +## Syntax of Includes + +In AVAP™, the syntax for including a file is similar to that of other languages like C. The keyword `include` is used followed by the name of the file to be included. There are two main ways to include files in AVAP™: + +* Local Include: Used to include project-specific files located in the same directory or in subdirectories relative to the current file. The file name is specified within quotes. Example: `include "file_name.avap"` +* System Include: Used to include standard or system library files located in predefined or configured paths on the system. The file or library name is specified between angle brackets (< and >). Example: `include ` diff --git a/docs/developer.avapframework.com/chapter13_5.md b/docs/developer.avapframework.com/chapter13_5.md new file mode 100644 index 0000000..84748cb --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_5.md @@ -0,0 +1,3 @@ +## Operation + +When an include is found in an AVAP™ file, the interpreter searches for the specified file and incorporates it into the current file at compile time. This means that all the code contained in the included file will be available for use in the current file. diff --git a/docs/developer.avapframework.com/chapter13_6.md b/docs/developer.avapframework.com/chapter13_6.md new file mode 100644 index 0000000..290f712 --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_6.md @@ -0,0 +1,5 @@ +## Common Uses + +* Including Standard Libraries: Standard libraries that provide common functions and utilities can be included to simplify application development. +* Including Definition Files: Files containing definitions of variables, constants, or data structures used in multiple parts of the project can be included. +* Including Specific Functionality Modules: Modules providing additional features for the project, such as file handling, text processing, or data manipulation, can be included. diff --git a/docs/developer.avapframework.com/chapter13_7.md b/docs/developer.avapframework.com/chapter13_7.md new file mode 100644 index 0000000..bae9b85 --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_7.md @@ -0,0 +1,9 @@ +## Practical Example + +Suppose we have a file named `utils.avap` that contains utility functions we want to use in our main project. We can include this file in our main project as follows: + +```javascript +include "utils.avap" // We can now use the functions defined in utils.avap +``` + +With this understanding of the value and advantages of using includes in AVAP™, we will explore in detail their operation and practical application in project development. diff --git a/docs/developer.avapframework.com/chapter13_8.md b/docs/developer.avapframework.com/chapter13_8.md new file mode 100644 index 0000000..bae9b85 --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_8.md @@ -0,0 +1,9 @@ +## Practical Example + +Suppose we have a file named `utils.avap` that contains utility functions we want to use in our main project. We can include this file in our main project as follows: + +```javascript +include "utils.avap" // We can now use the functions defined in utils.avap +``` + +With this understanding of the value and advantages of using includes in AVAP™, we will explore in detail their operation and practical application in project development. diff --git a/docs/developer.avapframework.com/chapter13_9.md b/docs/developer.avapframework.com/chapter13_9.md new file mode 100644 index 0000000..83a3f1e --- /dev/null +++ b/docs/developer.avapframework.com/chapter13_9.md @@ -0,0 +1,5 @@ +## Function Libraries Function Products + +In AVAP™, there are a series of function libraries grouped by categories called Function Products that complement the base AVAP™ language and leverage the power of AVS servers for distribution. Through Function Products, developers can extend the functionality of AVAP™ by incorporating specialized libraries tailored to different needs and applications. + +Function Products provide a way to access advanced features and capabilities not available in the core language, offering a robust framework for building complex and scalable solutions. These libraries are designed to integrate seamlessly with AVAP™, enhancing the development process and enabling more efficient and effective project execution. diff --git a/docs/developer.avapframework.com/chapter9_1.md b/docs/developer.avapframework.com/chapter9_1.md new file mode 100644 index 0000000..691cda2 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_1.md @@ -0,0 +1,9 @@ +## 4.1. Structure of a Program + +A program in AVAP is built from code blocks that execute linearly. A block is a section of the AVAP program text that executes as a unit. Code blocks in AVAP include: + +* A script file. +* The body of a function. +* An import statement for additional files. + +Each line of code in AVAP is considered a block and executes sequentially. There is no interactive execution, deferred execution, or object classes. diff --git a/docs/developer.avapframework.com/chapter9_10.md b/docs/developer.avapframework.com/chapter9_10.md new file mode 100644 index 0000000..657a211 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_10.md @@ -0,0 +1,3 @@ +## 6. Expressions in AVAP + +This chapter explains the meaning of expression elements in AVAP. diff --git a/docs/developer.avapframework.com/chapter9_11.md b/docs/developer.avapframework.com/chapter9_11.md new file mode 100644 index 0000000..7d16117 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_11.md @@ -0,0 +1,9 @@ +## 6.1. Arithmetic Conversions + +When describing an arithmetic operator in AVAP and using the phrase "numeric arguments are converted to a common type," it means that the operator's implementation for built-in types works as follows: + +* If either of the arguments is a complex number, the other is converted to complex. +* Otherwise, if either of the arguments is a floating-point number, the other is converted to floating-point. +* Otherwise, both must be integers, and no conversion is needed. + +Additional rules may apply for certain operators. diff --git a/docs/developer.avapframework.com/chapter9_12.md b/docs/developer.avapframework.com/chapter9_12.md new file mode 100644 index 0000000..28f9bb3 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_12.md @@ -0,0 +1,8 @@ +## 6.2. Atoms + +Atoms are the most basic elements of expressions in AVAP. The simplest atoms are identifiers or literals. Forms enclosed in parentheses, brackets, or braces are also syntactically categorized as atoms. The syntax for atoms is: + +```javascript +atom ::= identifier | literal | enclosure +enclosure ::= parenth_form | list_display | dict_display | set_display | generator_expression +``` diff --git a/docs/developer.avapframework.com/chapter9_13.md b/docs/developer.avapframework.com/chapter9_13.md new file mode 100644 index 0000000..efaa9a9 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_13.md @@ -0,0 +1,7 @@ +## 6.2.1. Identifiers (Names) + +An identifier that appears as an atom is a name. When the name is bound to an object, evaluating the atom yields that object. When a name is not bound, an attempt to evaluate it raises a `NameError` exception. + +### Private Name Mangling + +When an identifier that occurs literally in a class definition begins with two or more underscores and does not end with two or more underscores, it is considered a private name of that class. Private names are transformed into a longer form before code is generated for them. The transformation inserts the class name, with the initial underscores removed and a single underscore inserted, in front of the name. diff --git a/docs/developer.avapframework.com/chapter9_14.md b/docs/developer.avapframework.com/chapter9_14.md new file mode 100644 index 0000000..cb173f3 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_14.md @@ -0,0 +1,9 @@ +## 6.2.2. Literals + +AVAP supports string and bytes literals, as well as various numeric literals: + +```javascript +literal ::= stringliteral | bytesliteral | integer | floatnumber | imagnumber +``` + +Evaluating a literal produces an object of the given type (string, bytes, integer, floating-point number, complex number) with the given value. All literals correspond to immutable data types. diff --git a/docs/developer.avapframework.com/chapter9_15.md b/docs/developer.avapframework.com/chapter9_15.md new file mode 100644 index 0000000..2a52ba8 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_15.md @@ -0,0 +1,9 @@ +## 6.2.3. Parenthesized Forms + +A parenthesized form is an optional list of expressions enclosed in parentheses: + +```javascript +parenth_form ::= "(" [starred_expression] ")" +``` + +A parenthesized expression produces whatever the expression list produces: if the list contains at least one comma, it produces a tuple; otherwise, it produces the single expression that makes up the list of expressions. diff --git a/docs/developer.avapframework.com/chapter9_16.md b/docs/developer.avapframework.com/chapter9_16.md new file mode 100644 index 0000000..8d315d8 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_16.md @@ -0,0 +1,17 @@ +## 6.2.4. Comprehensions for Lists, Sets and Dictionaries + +To construct a list, set, or dictionary, AVAP provides special syntax called "comprehension," each in two flavors: + +* The contents of the container are listed explicitly. +* They are computed using a set of loop and filtering instructions, called a "comprehension." + +Common syntax elements for comprehensions are: + +```javascript +comprehension ::= assignment_expression comp_for +comp_for ::= "for" target_list "in" or_test [comp_iter] +comp_iter ::= comp_for | comp_if +comp_if ::= "if" or_test [comp_iter] +``` + +A comprehension consists of a single expression followed by at least one `for` clause and zero or more `for` or `if` clauses. In this case, the elements of the new container are those produced by considering each `for` or `if` clause as a block, nested from left to right, and evaluating the expression to produce an element each time the innermost block is reached. diff --git a/docs/developer.avapframework.com/chapter9_17.md b/docs/developer.avapframework.com/chapter9_17.md new file mode 100644 index 0000000..a078f56 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_17.md @@ -0,0 +1,11 @@ +## 6.2.5. List Displays + +In AVAP, lists are generated and handled differently. To construct a list, the command `variableToList(variable, list)` is used, and an item from the list is retrieved with `itemFromList(list, index, variable_to_store_item)` . To get the number of elements in the list, `getListLen(list, var_to_store_list_length)` is used. + +The syntax for list displays is: + +```javascript +list_display ::= "[" [starred_list | comprehension] "]" +``` + +A list display produces a new list object, whose content is specified by a list of expressions or a comprehension. When a list of expressions is provided, its elements are evaluated from left to right and placed in the list object in that order. diff --git a/docs/developer.avapframework.com/chapter9_18.md b/docs/developer.avapframework.com/chapter9_18.md new file mode 100644 index 0000000..e895b78 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_18.md @@ -0,0 +1,9 @@ +## 6.2.6. Set Displays + +A set display is denoted by curly braces and is distinguished from dictionary displays by the absence of colon characters separating keys and values: + +```javascript +set_display ::= "{" (starred_list | comprehension) "}" +``` + +A set display produces a new mutable set object, whose content is specified by a sequence of expressions or a comprehension. diff --git a/docs/developer.avapframework.com/chapter9_19.md b/docs/developer.avapframework.com/chapter9_19.md new file mode 100644 index 0000000..135fc2d --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_19.md @@ -0,0 +1,14 @@ +## 6.2.7. Dictionary Displays + +In AVAP, objects are created and managed using specific commands. An object is created with `AddvariableToJSON(key, value, object_variable)` , and a key from the object is retrieved with `variableFromJSON(object_variable, key, var_to_store_key_value)` . + +The syntax for dictionary displays is: + +```javascript +dict_display ::= "{" [dict_item_list | dict_comprehension] "}" +dict_item_list ::= dict_item ("," dict_item)* [","] +dict_item ::= expression ":" expression | "**" or_expr +dict_comprehension ::= expression ":" expression comp_for +``` + +A dictionary display produces a new dictionary object. If a comma-separated sequence of dictionary items is provided, they are evaluated from left to right to define the dictionary entries. diff --git a/docs/developer.avapframework.com/chapter9_2.md b/docs/developer.avapframework.com/chapter9_2.md new file mode 100644 index 0000000..b66e500 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_2.md @@ -0,0 +1,11 @@ +## 4.2. Names and Bindings + +### 4.2.1. Name Binding + +Names in AVAP refer to values and are introduced through name binding operations. The following constructs bind names: + +* Formal parameters of functions. +* Function definitions. +* Assignment expressions. + +Name binding is performed using the `addVar(value, variable)` function, which assigns the value to the specified variable. There are no class declarations or complex targets in AVAP. Only functions and direct assignments to variables are valid code blocks. diff --git a/docs/developer.avapframework.com/chapter9_20.md b/docs/developer.avapframework.com/chapter9_20.md new file mode 100644 index 0000000..07f2b87 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_20.md @@ -0,0 +1,17 @@ +## Slices + +A slice selects a range of elements in a sequence object (e.g., a string, tuple, or list). Slices can be used as expressions or as targets in assignments or statements. The syntax for a slice is as follows: + +```javascript +slicing ::= primary "[" slice_list "]" +slice_list ::= slice_item ("," slice_item)* [","] +slice_item ::= expression | proper_slice +proper_slice ::= [lower_bound] ":" [upper_bound] [ ":" [stride] ] +lower_bound ::= expression +upper_bound ::= expression +stride ::= expression +``` + +There is ambiguity in the formal syntax here: anything that looks like a list expression also looks like a list slice, so any subscription might be interpreted as a slice. Instead of complicating the syntax further, this is disambiguated by defining that in this case, the interpretation as a subscription takes precedence over the interpretation as a slice (this is the case if the list slice does not contain a proper slice). + +The semantics for a slice are as follows. The primary is indexed (using the same `__getitem__()` method as in a normal subscription) with a key constructed from the slice list, as follows. If the slice list contains at least one comma, the key is a tuple that contains the conversion of the slice elements; otherwise, the conversion of the single slice element is the key. The conversion of a slice element that is an expression is that expression. The conversion of a proper slice is a `slice` object whose start, stop, and step attributes are the values of the expressions given as the lower bound, upper bound, and step, respectively, substituting `None` for missing expressions. diff --git a/docs/developer.avapframework.com/chapter9_21.md b/docs/developer.avapframework.com/chapter9_21.md new file mode 100644 index 0000000..6d68656 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_21.md @@ -0,0 +1,24 @@ +## Calls + +A call invokes a callable object (e.g., a function) with a possibly empty series of arguments: + +```javascript +call ::= primary "(" [argument_list [","] | comprehension] ")" +argument_list ::= positional_arguments ["," starred_and_keywords] + ["," keywords_arguments] + | starred_and_keywords ["," keywords_arguments] + | keywords_arguments +positional_arguments ::= positional_item ("," positional_item)* +positional_item ::= assignment_expression | "*" expression +starred_and_keywords ::= ("*" expression | keyword_item) + ("," "*" expression | "," keyword_item)* +keywords_arguments ::= (keyword_item | "**" expression) + ("," keyword_item | "," "**" expression)* +keyword_item ::= identifier "=" expression +``` + +An optional trailing comma may be present after positional and keyword arguments but does not affect the semantics. + +The primary must evaluate to a callable object (user-defined functions, built-in functions, built-in object methods, class objects, class instance methods, and any object with a `__call__()` method are callable). All argument expressions are evaluated before attempting the call. Please refer to the Function Definitions section for the syntax of formal parameter lists. + +If keyword arguments are present, they are first converted into positional arguments as follows. First, a list of unfilled slots is created for the formal parameters. If there are N positional arguments, they are placed in the first N slots. Then, for each keyword argument, the identifier is used to determine the corresponding slot. If the slot is already filled, a `TypeError` exception is raised. Otherwise, the argument is placed in the slot, filling it (even if the expression is `None` , it fills the slot). When all arguments have been processed, any slots that are still empty are filled with the default value from the function definition. If there are unfilled slots for which no default value is specified, a `TypeError` exception is raised. Otherwise, the list of filled slots is used as the argument list for the call. diff --git a/docs/developer.avapframework.com/chapter9_22.md b/docs/developer.avapframework.com/chapter9_22.md new file mode 100644 index 0000000..e260506 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_22.md @@ -0,0 +1,6 @@ +## Implementation Details in AVAP + +In AVAP, variables are stored as strings, and lists and objects are managed using specific commands: + +* Lists : To generate a list, use `variableToList(variable, list)` . To retrieve an item from the list, use `itemFromList(list, index, variable_to_store_item)` . To get the number of items in the list, use `getListLen(list, var_to_store_list_length)` . +* Objects (dictionaries) : An object is created with `AddvariableToJSON(key, value, object_variable)` . To retrieve a key from the object, use `variableFromJSON(object_variable, key, var_to_store_key_value)` . diff --git a/docs/developer.avapframework.com/chapter9_23.md b/docs/developer.avapframework.com/chapter9_23.md new file mode 100644 index 0000000..a62aab7 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_23.md @@ -0,0 +1,29 @@ +## Usage Example + +Creation and management of lists: + +```javascript +// Creating a list +variableToList("item1", "myList") +variableToList("item2", "myList") +variableToList("item3", "myList") + +// Retrieving an item from the list +itemFromList("myList", 1, "myVariable") + +// Getting the length of the list +getListLen("myList", "listLength") +``` + +Creation and management of objects (dictionaries): + +```javascript +// Creating an object +AddvariableToJSON("key1", "value1", "myObject") +AddvariableToJSON("key2", "value2", "myObject") + +// Retrieving a value by key from the object +variableFromJSON("myObject", "key1", "myVariable") +``` + +In this way, lists and objects in AVAP can be manipulated using the specific functions provided for working with variables stored as strings. diff --git a/docs/developer.avapframework.com/chapter9_24.md b/docs/developer.avapframework.com/chapter9_24.md new file mode 100644 index 0000000..ab8086e --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_24.md @@ -0,0 +1,28 @@ +## Binary Arithmetic Operations + +Binary arithmetic operations have the conventional levels of precedence. Some of these operations also apply to certain non-numeric types. Aside from the exponentiation operator, there are two levels: one for multiplicative operators and another for additive ones: + +```javascript +m_expr ::= u_expr | m_expr "*" u_expr | m_expr "@" m_expr | + m_expr "//" u_expr | m_expr "/" u_expr | + m_expr "%" u_expr +a_expr ::= m_expr | a_expr "+" m_expr | a_expr "-" m_expr +``` + +The `*` (multiplication) operator produces the product of its arguments. The arguments can both be numbers, or one argument must be an integer and the other a sequence. In the first case, the numbers are converted to a common type and then multiplied. In the second case, sequence repetition occurs; a negative repetition factor produces an empty sequence. + +The `@` (matrix multiplication) operator is intended for matrix multiplication. No built-in type in Python implements this operator. + +The `/` (division) and `//` (floor division) operators produce the quotient of their arguments. Numeric arguments are converted to a common type. Division between integers produces a floating-point number, while floor division between integers results in an integer; the result is that of a mathematical division with the “floor” function applied to the result. Division by zero raises a `ZeroDivisionError` . + +The `%` (modulus) operator produces the remainder of the division of the first argument by the second. Numeric arguments are converted to a common type. A zero argument on the right raises a `ZeroDivisionError` . Arguments can be floating-point numbers, e.g., `3.14 % 0.7` is equal to `0.34` (since `3.14` is equal to `4 * 0.7 + 0.34` ). The modulus operator always produces a result with the same sign as its second operand (or zero); the absolute value of the result is strictly smaller than the absolute value of the second operand. + +The floor division and modulus operators are connected by the following identity: `x == (x // y) * y + (x % y)` . Floor division and modulus are also connected by the built-in function `divmod()` : `divmod(x, y) == (x // y, x % y)` . + +In addition to performing the modulus operation on numbers, the `%` operator is also overloaded by string objects for old-style string formatting (also known as interpolation). The syntax for string formatting is described in the Python Library Reference, section Old-Style String Formatting. + +The floor division operator, the modulus operator, and the `divmod()` function are not defined for complex numbers. Instead, convert to a floating-point number using the `abs()` function if appropriate. + +The `+` (addition) operator produces the sum of its arguments. The arguments must both be numbers or both be sequences of the same type. In the first case, the numbers are converted to a common type and then added. In the second case, the sequences are concatenated. + +The `-` (subtraction) operator produces the difference between its arguments. Numeric arguments are converted to a common type. diff --git a/docs/developer.avapframework.com/chapter9_25.md b/docs/developer.avapframework.com/chapter9_25.md new file mode 100644 index 0000000..34f4dbf --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_25.md @@ -0,0 +1,11 @@ +## Shift Operations + +Shift operations have lower precedence than arithmetic operations: + +```javascript +shift_expr ::= a_expr | shift_expr ("<<" | ">>") a_expr +``` + +These operators accept integers as arguments. They shift the first argument left or right by the number of bits specified by the second argument. + +A right shift by `n` bits is defined as an integer floor division by `pow(2, n)` . A left shift by `n` bits is defined as a multiplication by `pow(2, n)` . diff --git a/docs/developer.avapframework.com/chapter9_26.md b/docs/developer.avapframework.com/chapter9_26.md new file mode 100644 index 0000000..9dcbf12 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_26.md @@ -0,0 +1,15 @@ +## Binary Bitwise Operations + +Each of the three binary bitwise operations has a different level of precedence: + +```javascript +and_expr ::= shift_expr | and_expr "&" shift_expr +xor_expr ::= and_expr | xor_expr "^" and_expr +or_expr ::= xor_expr | or_expr "|" xor_expr +``` + +* The `&` operator produces the bitwise AND of its arguments, which must be integers. + +* The `^` operator produces the bitwise XOR (exclusive OR) of its arguments, which must be integers. + +* The `|` operator produces the bitwise OR (inclusive OR) of its arguments, which must be integers. diff --git a/docs/developer.avapframework.com/chapter9_27.md b/docs/developer.avapframework.com/chapter9_27.md new file mode 100644 index 0000000..2b7c425 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_27.md @@ -0,0 +1,17 @@ +## Comparisons + +Unlike C, all comparison operations in Python have the same priority, which is lower than any arithmetic, shift, or bitwise operation. Also, unlike C, expressions like `a < b < c` have the conventional mathematical interpretation: + +```javascript +comparison ::= or_expr (comp_operator or_expr)* +comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!=" + | "is" ["not"] | ["not"] "in" +``` + +Comparisons produce boolean values: True or False. + +Comparisons can be arbitrarily chained, e.g., `x < y <= z` is equivalent to `x < y and y <= z` , except that `y` is evaluated only once. + +Formally, if `a` , `b` , `c` , ..., `y` , `z` are expressions and `op1` , `op2` , ..., `opN` are comparison operators, then `a op1 b op2 c ... y opN z` is equivalent to `a op1 b and b op2 c and ... y opN z` , except that each expression is evaluated at most once. + +Note that `a op1 b op2 c` does not imply any comparison between `a` and `c` , so, for example, `x < y > z` is perfectly legal. diff --git a/docs/developer.avapframework.com/chapter9_28.md b/docs/developer.avapframework.com/chapter9_28.md new file mode 100644 index 0000000..98f263e --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_28.md @@ -0,0 +1,28 @@ +## Value Comparisons + +The operators `<` , `>` , `==` , `>=` , `<=` , and `!=` compare the values of two objects. The objects do not need to be of the same type. + +The chapter Objects, Values, and Types states that objects have a value (in addition to type and identity). The value of an object is a rather abstract notion in Python: For example, there is no canonical method to access the value of an object. Furthermore, there is no requirement that the value of an object must be constructed in a particular way, e.g., composed of all its data attributes. Comparison operators implement a particular notion of what an object's value is. + +The default behavior for equality comparison ( `==` and `!=` ) is based on object identity. Therefore, comparison of instances with the same identity results in equality, and comparison of equality of instances with different identities results in inequality. + +No default comparison order ( `<` , `>` , `<=` , `>=` ) is provided; an attempt generates a `TypeError` . + +The following list describes the comparison behavior of the most important built-in types: + +* Numbers : Built-in numeric types ( `int` , `float` , `complex` ) and types from the standard library ( `fractions.Fraction` and `decimal.Decimal` ) can be compared with themselves and among their types, with the restriction that complex numbers do not support order comparisons. Within the limits of the involved types, they are compared mathematically correctly without loss of precision. +* None and NotImplemented : They are singletons. PEP 8 advises that comparisons for singletons should be done with `is` or `is not` , never with equality operators. +* Binary Sequences : Instances of `bytes` or `bytearray` compare lexicographically using the numeric values of their elements. +* Character Strings : Instances of `str` compare lexicographically using Unicode code points (the result of the built-in `ord()` function) or their characters. +* Sequences : Instances of `tuple` , `list` , or `range` can only be compared within their types, with the restriction that ranges do not support order comparisons. Equality comparisons between these types result in inequality, and order comparisons between these types generate `TypeError` . They compare lexicographically using comparison of their corresponding elements. +* Mappings : Instances of `dict` compare equal if and only if they have the same `(key, value)` pairs. +* Sets : Instances of `set` or `frozenset` can be compared with each other and among their types. They define order comparison operators with the intention of checking subsets and supersets. +* Other Built-in Types : Most other built-in types do not have comparison methods implemented, so they inherit the default comparison behavior. + +User-defined classes that customize their comparison behavior should follow some consistency rules, if possible: + +* Equality comparison should be reflexive. +* Comparison should be symmetric. +* Comparison should be transitive. + +If any of these conditions are not met, the resulting behavior is undefined. diff --git a/docs/developer.avapframework.com/chapter9_29.md b/docs/developer.avapframework.com/chapter9_29.md new file mode 100644 index 0000000..06e4a1d --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_29.md @@ -0,0 +1,45 @@ +## Simple Statements + +In AVAP, a simple statement consists of a single logical line. Multiple simple statements can be placed on a single line, separated by semicolons. The syntax for simple statements is: + +```javascript +simple_stmt ::= expression_stmt + | assert_stmt + | assignment_stmt + | augmented_assignment_stmt + | annotated_assignment_stmt + | pass_stmt + | del_stmt + | return_stmt + | yield_stmt + | raise_stmt + | break_stmt + | continue_stmt + | import_stmt + | future_stmt + | global_stmt + | nonlocal_stmt + | type_stmt +``` + +Here’s a brief overview of each type of simple statement: + +* Expression Statement ( `expression_stmt` ): Executes an expression, which can be used for operations or calling functions. +* Assert Statement ( `assert_stmt` ): Used for debugging purposes to test conditions. +* Assignment Statement ( `assignment_stmt` ): Assigns values to variables or data structures. +* Augmented Assignment Statement ( `augmented_assignment_stmt` ): Performs an operation on a variable and assigns the result back to the variable (e.g., `x += 1` ). +* Annotated Assignment Statement ( `annotated_assignment_stmt` ): Used for assigning values with annotations (e.g., type hints). +* Pass Statement ( `pass_stmt` ): A placeholder that does nothing; used for syntactic requirements. +* Del Statement ( `del_stmt` ): Deletes variables, items, or attributes. +* Return Statement ( `return_stmt` ): Exits a function and optionally returns a value. +* Yield Statement ( `yield_stmt` ): Produces a value from a generator function. +* Raise Statement ( `raise_stmt` ): Raises exceptions for error handling. +* Break Statement ( `break_stmt` ): Exits the closest enclosing loop. +* Continue Statement ( `continue_stmt` ): Skips the current iteration of the closest enclosing loop. +* Import Statement ( `import_stmt` ): Imports modules or specific components from modules. +* Future Statement ( `future_stmt` ): Enables features from future versions of Python. +* Global Statement ( `global_stmt` ): Declares variables as global within a function. +* Nonlocal Statement ( `nonlocal_stmt` ): Declares variables as non-local, affecting scope in nested functions. +* Type Statement ( `type_stmt` ): Declares or checks types (e.g., type hints). + +Each simple statement performs a specific task and contributes to the overall functionality of the AVAP program. diff --git a/docs/developer.avapframework.com/chapter9_3.md b/docs/developer.avapframework.com/chapter9_3.md new file mode 100644 index 0000000..07ae371 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_3.md @@ -0,0 +1,9 @@ +## 4.2.2. Name Resolution + +A scope defines the visibility of a name in a code block. In AVAP, if a variable is defined in a code block, its scope includes that block. The scope of a variable within a function extends to the entire function block. + +When a name is used in a code block, it is resolved using the nearest enclosing scope. If the name is not found in the current scope, a `NameError` exception is raised. + +If a name binding operation occurs anywhere within a code block, all uses of the name within that block are treated as references to the current block. This means that variables must be defined before their use within the same block. + +In AVAP, there are no global or nonlocal declarations. All names are resolved within the scope in which they are defined. There is no dynamic code execution with `eval` or `exec` , so all bindings must be static and known at code writing time. diff --git a/docs/developer.avapframework.com/chapter9_30.md b/docs/developer.avapframework.com/chapter9_30.md new file mode 100644 index 0000000..3926f92 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_30.md @@ -0,0 +1,11 @@ +## Expression Statements + +Expression statements are used (mostly interactively) to compute and write a value, or (usually) to call a method (a function that does not return a meaningful result; in Python, methods return the value `None` ). Other uses of expression statements are allowed and occasionally useful. The syntax for an expression statement is: + +```javascript +expression_stmt ::= starred_expression +``` + +An expression statement evaluates the list of expressions (which can be a single expression). + +In interactive mode, if the value is not `None` , it is converted to a string using the built-in function `repr()` , and the resulting string is written to the standard output on a line by itself (except if the result is `None` , in which case the called procedure produces no output). diff --git a/docs/developer.avapframework.com/chapter9_31.md b/docs/developer.avapframework.com/chapter9_31.md new file mode 100644 index 0000000..3e68fc9 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_31.md @@ -0,0 +1,27 @@ +## Assignment Statements + +Assignment statements in AVAP are used to (re)assign names to values and to modify attributes or elements of mutable objects. Here is the syntax: + +```javascript +assignment_stmt ::= (target_list "=")+ (starred_expression | yield_expression) +target_list ::= target ("," target)* [","] +target ::= identifier + | "(" [target_list] ")" + | "[" [target_list] "]" + | attributeref + | subscription + | slicing + | "*" target +``` + +Here's a breakdown of how assignment statements work: + +* Assignment Operation: An assignment statement evaluates the list of expressions and assigns the single resulting object to each of the target lists, from left to right. +* Recursive Definition: The assignment operation is defined recursively depending on the form of the target list. +* Target List: If the target list is a single object without ending in a comma, the object is assigned to that target. If the list contains a target prefixed with an asterisk, the object must be iterable with at least as many elements as targets, minus one. Elements before the starred target are assigned to the respective targets, and the remaining elements are assigned to the starred target. +* Single Target: If the target is an identifier (name), it is bound to the object in the current local namespace. For other targets, names are bound in the global or enclosing namespace, depending on `nonlocal`. +* Attribute Reference: If the target is an attribute reference, the primary expression is evaluated. It must produce an object with assignable attributes. +* Subscription: If the target is a subscription, the primary expression is evaluated to produce a mutable sequence or mapping object, which is then used to assign the value. +* Slice: If the target is a slice, the primary expression is evaluated, and the sequence object is requested to replace the slice with the assigned sequence elements. + +In summary, assignment statements in AVAP are crucial for assigning values to variables and modifying data structures effectively. diff --git a/docs/developer.avapframework.com/chapter9_32.md b/docs/developer.avapframework.com/chapter9_32.md new file mode 100644 index 0000000..b503ebe --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_32.md @@ -0,0 +1,17 @@ +## Return Statement + +The return statement in AVAP is used to return the value of a desired variable from a function. Here is the syntax: + +```javascript +return(variable_to_return): +``` + +Here is an overview of how the return statement works: + +* Function Context: The return statement can only occur within a function definition, not inside a nested class definition. +* Variable Evaluation: If a variable is provided, it is evaluated. If no variable is specified, None is used by default. +* Function Exit: The return statement exits the current function call and returns the specified value. +* Interaction with try-finally: When the return statement is executed within a try statement that has a finally clause, the finally clause is executed before the function exits. +* Generator Functions: In generator functions, the return statement indicates the end of the generator. It causes a StopIteration exception to be raised, with the returned value (if any) used to construct the StopIteration exception and set as the StopIteration.value attribute. + +The return statement is a fundamental part of functions and generators, allowing for the output of values and proper function termination. diff --git a/docs/developer.avapframework.com/chapter9_33.md b/docs/developer.avapframework.com/chapter9_33.md new file mode 100644 index 0000000..282c28e --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_33.md @@ -0,0 +1,46 @@ +## Raise Statement + +In AVAP, the raise statement is used to throw an exception. The syntax for the raise statement is as follows: + +```javascript +raise [expression ["from" expression]] +``` + +If no expressions are present, raise re-raises the currently handled exception, also known as the active exception. If there is no active exception, a `RuntimeError` is raised indicating that it is an error. + +Otherwise, raise evaluates the first expression as the exception object. It must be a subclass or an instance of `BaseException` . If it is a class, the exception instance is obtained when needed by creating an instance of the class without arguments. + +The type of the exception is the instance of the exception class, and the value is the instance itself. + +The `from` clause is used for exception chaining: if provided, the second expression must be another class or instance of exception. If the second expression is an exception instance, it will be attached to the raised exception as the `__cause__` attribute (which is modifiable). If the expression is an exception class, the class will be instantiated and the resulting exception instance will be attached to the raised exception as the `__cause__` attribute. If the raised exception is not handled, both exceptions will be printed. + +```javascript +startLoop() + try: + print(1 / 0) + except Exception as exc: + raise RuntimeError("Something went wrong") from exc + endLoop() +``` + +A mechanism works implicitly if a new exception is raised while an exception is already being handled. An exception may be handled by an `except` or `finally` clause, or a `with` statement. The previous exception is then attached as the new exception’s `__context__` attribute: + +```javascript +startLoop() + try: + print(1 / 0) + except: + raise RuntimeError("Something went wrong") from None + endLoop() +``` + +Exception chaining can be explicitly suppressed by specifying `None` in the `from` clause: + +```javascript +startLoop() + try: + print(1 / 0) + except: + raise RuntimeError("Something went wrong") from None + endLoop() +``` diff --git a/docs/developer.avapframework.com/chapter9_34.md b/docs/developer.avapframework.com/chapter9_34.md new file mode 100644 index 0000000..a2a97d0 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_34.md @@ -0,0 +1,24 @@ +## Break Statement + +In AVAP, the break statement is used to terminate the closest enclosing loop. The syntax for the break statement is as follows: + +```javascript +break() +``` + +When a break statement is encountered, it causes the loop to exit immediately, regardless of the loop's condition or any remaining iterations. This effectively transfers control to the statement following the loop. + +The break statement is typically used within `for` or `while` loops to provide a way to exit the loop prematurely based on a certain condition. + +```javascript +addVar(_status, "OK") + startLoop(idx, 0, 9) + if(idx, 4, "==") + idx = -1 + break() + end() + endLoop() + addResult(idx) addStatus("OK") +``` + +In this example, the loop will terminate when `i` equals 5, and "Loop ended" will be printed. The numbers 0 through 4 will be printed before the loop is exited. diff --git a/docs/developer.avapframework.com/chapter9_34_1.md b/docs/developer.avapframework.com/chapter9_34_1.md new file mode 100644 index 0000000..4483e36 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_34_1.md @@ -0,0 +1,10 @@ +## Break Statement + +The break statement in AVAP is used to terminate the closest enclosing loop. Here is an overview of its behavior: + +* Usage Context: The break statement can only occur within a for or while loop. It cannot be nested within a function or class definition inside that loop. +* Loop Termination: It terminates the closest enclosing loop and skips the optional else clause if the loop has one. +* Loop Control Target: If a for loop is terminated by break , the loop control target retains its current value. +* Interaction with try-finally: When break is executed within a try statement with a finally clause, the finally clause is executed before actually exiting the loop. + +The break statement is essential for controlling loop execution, allowing for early exit from loops and proper handling of loop cleanup. diff --git a/docs/developer.avapframework.com/chapter9_35.md b/docs/developer.avapframework.com/chapter9_35.md new file mode 100644 index 0000000..3b9efd1 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_35.md @@ -0,0 +1,24 @@ +## Continue Statement + +In AVAP, the continue statement is used to proceed with the next iteration of the closest enclosing loop. The syntax for the continue statement is as follows: + +```javascript +continue +``` + +The continue statement can only syntactically occur nested within a `for` or `while` loop, but not within a function or class definition inside that loop. + +When continue is used within a loop that is also handling exceptions with a `try` statement containing a `finally` clause, the `finally` clause is executed before the next iteration of the loop begins. + +```javascript +for i in range(10): + try: + if i % 2 == 0: + continue + print(i) + finally: + print("In finally clause") + print("Loop ended") +``` + +In this example, the `continue` statement will skip the current iteration when `i` is even, but before moving to the next iteration, the `finally` clause will print "In finally clause." For odd numbers, the loop will print the number and then "In finally clause." After the loop finishes, "Loop ended" will be printed. diff --git a/docs/developer.avapframework.com/chapter9_36.md b/docs/developer.avapframework.com/chapter9_36.md new file mode 100644 index 0000000..3809548 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_36.md @@ -0,0 +1,23 @@ +## Innclude Statement + +In AVAP, the include statement is used to include an entire code file and define names in the local namespace. The syntax for the include statement is as follows: + +```javascript +include file.avap +``` + +The include statement in AVAP includes an entire code file and makes it available in the local namespace. No alias is assigned to the included file; the file is simply referred to by its name. + +For example: + +```javascript +# In the 'module.avap' file + example_variable = 10 + + # In the main file + include module.avap + addResult(example_variable) + # Will print 10 +``` + +In this example, the main file includess the `module.avap` file and can access the `example_variable` defined in that file using the `module.avap` syntax. diff --git a/docs/developer.avapframework.com/chapter9_37.md b/docs/developer.avapframework.com/chapter9_37.md new file mode 100644 index 0000000..fecca46 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_37.md @@ -0,0 +1,7 @@ +## Compound Statements + +In AVAP, compound statements contain (groups of) other statements; these affect or control the execution of those other statements in some way. In general, compound statements span multiple lines, though in simpler representations a complete compound statement might be contained within a single line. + +if statements implement traditional flow control constructs. match specifies matching patterns for variable values. Function and class definitions are also syntactically compound statements. + +A compound statement consists of one or more "clauses." A clause consists of a header and a "suite." The clause headers of a particular compound statement are all at the same level of indentation. Each clause header begins with a uniquely identifying keyword and ends with a colon. A suite is a group of statements controlled by a clause. A suite can be one or more simple statements separated by semicolons on the same line as the header, following the colon of the header, or it can be one or more statements indented on subsequent lines. Only the latter form of a suite can contain nested compound statements. diff --git a/docs/developer.avapframework.com/chapter9_38.md b/docs/developer.avapframework.com/chapter9_38.md new file mode 100644 index 0000000..f61c30e --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_38.md @@ -0,0 +1,33 @@ +## Control Flow Structures in AVAP + +In AVAP, control flow structures include conditional statements and loops, which allow you to control the flow of execution based on conditions and iterate over a range of values. + +### If Statements + +The syntax for an if statement in AVAP is: + +```javascript +if (variable, variableValue, comparator, expression) + + code to execute + + else() + + code to execute + + end() +``` + +This structure checks if the condition (variable compared to variableValue with the given comparator) is true, and if so, executes the block of code. + +### Loops + +The syntax for a loop in AVAP is: + +```javascript +startLoop(variable, from, to) + code to execute + endLoop() +``` + +This structure initiates a loop where the variable iterates from the 'from' value to the 'to' value, executing the code block for each iteration. diff --git a/docs/developer.avapframework.com/chapter9_39.md b/docs/developer.avapframework.com/chapter9_39.md new file mode 100644 index 0000000..6bd1ea0 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_39.md @@ -0,0 +1,17 @@ +## The if Statement + +The `if` statement in AVAP is used for conditional execution. The syntax is as follows: + +```javascript +if (variable, variableValue, comparator, expression) + + code to execute + + else() + + code to execute + + end() +``` + +This statement evaluates the condition specified by the `variable` , `variableValue` , `comparator` , and `expression` . It selects exactly one of the suites (blocks of code) by evaluating the expressions one by one until a true condition is found. The corresponding suite is then executed. If all conditions are false, no suites are executed. diff --git a/docs/developer.avapframework.com/chapter9_4.md b/docs/developer.avapframework.com/chapter9_4.md new file mode 100644 index 0000000..0f1ed5b --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_4.md @@ -0,0 +1,22 @@ +## 4.3. Importing Files + +In AVAP, it is possible to import the contents of other code files. The `import file.avap` statement inserts the contents of the specified file at the exact point where the import statement appears. This process is linear and sequential, meaning that the imported content is executed as if it were part of the original file. + +It is crucial that the necessary functions are defined before they are called. If a function is not defined before its call, a `NameError` exception will be raised. + +Example of import usage: + +```javascript +avap + +// Content of the file main.avap +addVar(x, 10) +include functions.avap +myFunction(x) + +// Content of the file functions.avap +function myFunction(y){ + addVar(result, y + 5) + addResult(result) +} +``` diff --git a/docs/developer.avapframework.com/chapter9_40.md b/docs/developer.avapframework.com/chapter9_40.md new file mode 100644 index 0000000..88d74df --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_40.md @@ -0,0 +1,15 @@ +## The try Statement + +The `try` statement in AVAP specifies exception handlers and/or cleanup code for a block of statements. The syntax is as follows: + +```javascript +try() + code to execute + exception() + code to execute + end() +``` + +The `try` block contains code that might raise an exception. The `exception` block contains code to handle exceptions raised by the `try` block. If an exception occurs, control is transferred to the `except` block. If no exception occurs, the `except` block is skipped. + +Additional information about exceptions can be found in the section Exceptions , and information about using the `raise` statement to throw exceptions can be found in the section The raise Statement . diff --git a/docs/developer.avapframework.com/chapter9_41.md b/docs/developer.avapframework.com/chapter9_41.md new file mode 100644 index 0000000..221672d --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_41.md @@ -0,0 +1,11 @@ +## Patterns in AVAP + +In AVAP, patterns provide a powerful way to match and destructure values. Patterns can be used in `match` statements to perform complex value comparisons and deconstructions. Here is a description of the available patterns and how they are used: + +* Literal Patterns: Match specific literal values such as numbers, strings, or booleans. For example: `match value: case 10: # Code to execute if value is 10 case "hello": # Code to execute if value is "hello"` +* Variable Patterns: Capture the value of a variable. This allows you to use the matched value in the corresponding case block: `match value: case x: # Code to execute, x will be assigned the value` +* Sequence Patterns: Match sequences like lists or tuples. You can also use the `*` operator to capture remaining elements: `match value: case [1, 2, *rest]: # Code to execute, rest will capture any additional elements` +* Mapping Patterns: Match dictionaries or similar mappings by specifying keys and their corresponding patterns: `match value: case "key": 42: # Code to execute if the dictionary has "key" with value 42` +* Class Patterns: Match instances of classes. You can also match specific attributes within the instance: `match value: case MyClass(attr1=42): # Code to execute if value is an instance of MyClass with attr1 equal to 42` + +Patterns in AVAP offer a flexible approach for handling different kinds of data structures and values, making it easier to write expressive and maintainable code. diff --git a/docs/developer.avapframework.com/chapter9_42.md b/docs/developer.avapframework.com/chapter9_42.md new file mode 100644 index 0000000..069d03b --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_42.md @@ -0,0 +1,27 @@ +## OR Patterns + +An OR pattern in AVAP allows you to specify multiple patterns separated by vertical bars ( `|` ). The OR pattern attempts to match each of its subpatterns with the subject value in order. If any of the subpatterns match, the OR pattern is considered successful. If none of the subpatterns match, the OR pattern fails. + +```javascript +or_pattern ::= "|".closed_pattern+ +``` + +Here's how you can use OR patterns in practice: + +```javascript +match value: + case 1 | 2 | 3: + # Code to execute if value is 1, 2, or 3 + case "hello" | "world": + # Code to execute if value is "hello" or "world" + case _: + # Code to execute if value does not match any of the above +``` + +In this example: + +* The first case will match if `value` is either 1, 2, or 3. +* The second case will match if `value` is either "hello" or "world". +* The last case is a catch-all pattern that will execute if none of the previous patterns match. + +OR patterns provide a concise way to handle multiple possible values or types, simplifying pattern matching and making your code more readable. diff --git a/docs/developer.avapframework.com/chapter9_43.md b/docs/developer.avapframework.com/chapter9_43.md new file mode 100644 index 0000000..5e787ea --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_43.md @@ -0,0 +1,29 @@ +## AS Patterns + +An AS pattern in AVAP is used to bind an OR pattern to a name. This allows you to match a value with an OR pattern and simultaneously capture it under a specified name for further use. The syntax for an AS pattern is: + +```javascript +as_pattern ::= or_pattern "as" capture_pattern +``` + +When an AS pattern is used, if the OR pattern succeeds, the subject is bound to the name specified by the capture pattern, and the AS pattern itself succeeds. + +Here's an example of how to use AS patterns: + +```javascript +match value: + case 1 | 2 | 3 as x: + print(f"Matched a number: x") + case "hello" | "world" as greeting: + print(f"Matched a greeting: greeting") + case _: + print("No match") +``` + +In this example: + +* The first case matches if `value` is 1, 2, or 3. The matched value is bound to the name `x` , which is then used in the print statement. +* The second case matches if `value` is "hello" or "world". The matched value is bound to the name `greeting` , which is then used in the print statement. +* The last case is a catch-all pattern that executes if none of the previous patterns match. + +AS patterns are useful for capturing matched values under a name while using OR patterns, allowing for more flexible and readable pattern matching in your code. diff --git a/docs/developer.avapframework.com/chapter9_44.md b/docs/developer.avapframework.com/chapter9_44.md new file mode 100644 index 0000000..1df3518 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_44.md @@ -0,0 +1,42 @@ +## Literal Patterns + +In AVAP, literal patterns are used to match specific literal values, such as numbers, strings, or boolean values. The syntax for a literal pattern is: + +```javascript +literal_pattern ::= signed_number + | strings + | "None" + | "True" + | "False" +``` + +A literal pattern only succeeds if the value of the subject is equal to the specified literal value. + +Here are examples of literal patterns and their usage: + +```javascript +match value: + case 42: + print("Matched the number 42") + case "hello": + print("Matched the string 'hello'") + case None: + print("Matched None") + case True: + print("Matched True") + case False: + print("Matched False") + case _: + print("No match") +``` + +In this example: + +* `case 42:` matches if `value` is exactly 42. +* `case "hello":` matches if `value` is the string "hello". +* `case None:` matches if `value` is `None` . +* `case True:` matches if `value` is `True` . +* `case False:` matches if `value` is `False` . +* `case _:` is a catch-all pattern that executes if none of the previous patterns match. + +Literal patterns are useful for matching specific, known values and are a fundamental part of pattern matching in AVAP. diff --git a/docs/developer.avapframework.com/chapter9_45.md b/docs/developer.avapframework.com/chapter9_45.md new file mode 100644 index 0000000..4a756ca --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_45.md @@ -0,0 +1,23 @@ +## Capture Patterns + +In AVAP, capture patterns are used to bind the subject's value to a name. The syntax for a capture pattern is: + +```javascript +capture_pattern ::= NAME +``` + +Capture patterns always succeed and bind the value of the subject to the specified name. + +Here’s how you might use capture patterns in AVAP: + +```javascript +match value: + case x: + print(f"Captured value: x") +``` + +In this example: + +* `case x:` captures whatever value is in `value` and binds it to the name `x` . The pattern always succeeds. + +Capture patterns are useful when you want to extract and use the value of the subject within your code, regardless of what that value is. diff --git a/docs/developer.avapframework.com/chapter9_46.md b/docs/developer.avapframework.com/chapter9_46.md new file mode 100644 index 0000000..ee23f7f --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_46.md @@ -0,0 +1,23 @@ +## Wildcard Patterns + +In AVAP, wildcard patterns are used to match any value without binding it to a name. The syntax for a wildcard pattern is: + +```javascript +wildcard_pattern ::= '_' +``` + +Wildcard patterns always succeed and do not create any bindings. They are useful when you want to ignore the value of the subject and only care about whether it matches a certain pattern. + +Here’s how you might use wildcard patterns in AVAP: + +```javascript +match value: + case _: + print("Matched any value") +``` + +In this example: + +* `case _:` matches any value and does not bind it to a name. The pattern always succeeds, and the code within this case will be executed regardless of the value. + +Wildcard patterns are particularly useful when you need to handle a broad range of possibilities and are only interested in whether a value fits a general condition, not in the value itself. diff --git a/docs/developer.avapframework.com/chapter9_47.md b/docs/developer.avapframework.com/chapter9_47.md new file mode 100644 index 0000000..ef2d3ba --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_47.md @@ -0,0 +1,29 @@ +## Value Patterns + +In AVAP, value patterns are used to match specific values. The syntax for a value pattern is: + +```javascript +value_pattern ::= attr +``` + +Value patterns only succeed if the subject's value matches the specified value. They are useful when you want to perform actions based on an exact value. + +Here’s how you might use value patterns in AVAP: + +```javascript +match value: + case 42: + print("Matched the value 42") + case "hello": + print("Matched the string 'hello'") + case _: + print("Matched something else") +``` + +In this example: + +* `case 42:` matches the value 42 specifically. +* `case "hello":` matches the string "hello" specifically. +* `case _:` matches any other value not covered by the previous cases. + +Value patterns are ideal for scenarios where you need to check for specific values and respond accordingly. They provide precise control over the matching process. diff --git a/docs/developer.avapframework.com/chapter9_48.md b/docs/developer.avapframework.com/chapter9_48.md new file mode 100644 index 0000000..4ea8f9d --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_48.md @@ -0,0 +1,29 @@ +## Group Patterns + +In AVAP, group patterns are used to group multiple patterns together. The syntax for a group pattern is: + +```javascript +group_pattern ::= "(" pattern ")" +``` + +Group patterns are useful when you want to combine patterns or when patterns need to be evaluated together. They have the same effect as the pattern they contain but allow for more complex pattern structures. + +Here’s an example of how to use group patterns in AVAP: + +```javascript +match value: + case (42 | 43): + print("Matched either 42 or 43") + case (name, age) if age {'>'} 18: + print(f"{name} is an adult") + case _: + print("Matched something else") +``` + +In this example: + +* `case (42 | 43):` uses a group pattern to match either the value 42 or 43. +* `case (name, age) if age {'>'} 18:` uses a group pattern to match a tuple and includes an additional condition on the age. +* `case _:` matches any other value not covered by the previous cases. + +Group patterns are ideal for creating more complex matching scenarios where patterns need to be combined or grouped together. diff --git a/docs/developer.avapframework.com/chapter9_49.md b/docs/developer.avapframework.com/chapter9_49.md new file mode 100644 index 0000000..9cab153 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_49.md @@ -0,0 +1,33 @@ +## Sequence Patterns + +In AVAP, sequence patterns are used to match elements within sequences like lists or tuples. The syntax for sequence patterns is: + +```javascript +sequence_pattern ::= "[" [maybe_sequence_pattern] "]" + | "(" [open_sequence_pattern] ")" +``` + +Sequence patterns can match elements of sequences based on specific rules. Here’s how they work: + +* List Patterns: Use square brackets `[ ]` to match lists. You can include patterns for the elements within the list. `case [a, b, c]: print("Matched a list with three elements")` +* Tuple Patterns: Use parentheses `( )` to match tuples. Similarly, you can specify patterns for the tuple elements. `case (x, y): print("Matched a tuple with two elements")` + +Sequence patterns allow for flexible and powerful matching of sequence types. They can match sequences of various lengths and structures by defining the pattern for each element. + +Here’s an example of using sequence patterns in a match statement: + +```javascript +match value: + case [1, 2, 3]: + print("Matched a list with elements 1, 2, 3") + case (a, b, c) if a + b == c: + print("Matched a tuple where a + b equals c") + case _: + print("Matched something else") +``` + +In this example: + +* `case [1, 2, 3]:` matches a list with exactly the elements 1, 2, and 3. +* `case (a, b, c) if a + b == c:` matches a tuple and includes a condition to check if `a + b` equals `c` . +* `case _:` matches any other value not covered by the previous cases. diff --git a/docs/developer.avapframework.com/chapter9_5.md b/docs/developer.avapframework.com/chapter9_5.md new file mode 100644 index 0000000..9629f1d --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_5.md @@ -0,0 +1,19 @@ +## 4.4. Exceptions + +Exceptions in AVAP allow for the handling of errors or exceptional conditions. An exception is raised when an error is detected; it can be handled by the surrounding code block or by any code block that directly or indirectly invoked the block where the error occurred. + +The AVAP interpreter raises an exception when it detects a runtime error. An AVAP program can also explicitly raise an exception using the `raise` statement. Exception handlers are specified with the `try ... except` statement. + +Example of exception handling: + +```javascript +try() + addVar(10 / 0, result) +except() + addResult("Cannot divide by zero.") +end() +``` + +In this example, if a division by zero occurs, a `ZeroDivisionError` exception is raised and handled by the `except` block. + +This structure ensures that AVAP programs execute in a sequential and predictable manner, without advanced dynamic or deferred execution features, maintaining simplicity and clarity in name binding and import handling. diff --git a/docs/developer.avapframework.com/chapter9_50.md b/docs/developer.avapframework.com/chapter9_50.md new file mode 100644 index 0000000..54d8e3b --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_50.md @@ -0,0 +1,15 @@ +## Mapping Patterns + +In AVAP, mapping patterns are used to match mapping elements, such as dictionaries. Here is the syntax and behavior of mapping patterns: + +```javascript +mapping_pattern ::= { [items_pattern] } +``` + +Mapping Patterns are designed to match elements within mappings, such as dictionaries. They use specific rules to determine if a pattern matches the given mapping. + +* Syntax: Mapping patterns are enclosed in curly braces `{ ... }` . The `items_pattern` specifies the pattern for the mapping items. +* Matching Rules: The rules for matching mapping patterns include checking for key-value pairs in the mapping and ensuring they align with the specified pattern. +* Usage: Mapping patterns are useful for destructuring dictionaries and other mapping types in a concise manner. + +Mapping patterns enhance pattern matching capabilities by allowing for specific and flexible matching of dictionary elements. diff --git a/docs/developer.avapframework.com/chapter9_51.md b/docs/developer.avapframework.com/chapter9_51.md new file mode 100644 index 0000000..9a5dc18 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_51.md @@ -0,0 +1,13 @@ +## Class Patterns + +In AVAP, class patterns are used to match instances of specific classes. Here is a detailed overview: + +```javascript +class_pattern ::= name "(" [pattern_arguments ","?] ")" +``` + +* Pattern Syntax: A class pattern specifies the class name followed by a parenthesized list of pattern_arguments . The pattern matches instances of the specified class. +* Matching Instances: The pattern will match if the subject is an instance of the specified class and the pattern_arguments (if any) match according to the rules defined for the pattern. +* Usage: Class patterns are useful for deconstructing objects based on their class and extracting values from them, enabling more precise pattern matching. + +These patterns provide a way to work with objects based on their class type and structure, facilitating more sophisticated pattern matching and value extraction. diff --git a/docs/developer.avapframework.com/chapter9_6.md b/docs/developer.avapframework.com/chapter9_6.md new file mode 100644 index 0000000..00c94bf --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_6.md @@ -0,0 +1,24 @@ +## 5. The Import System in AVAP + +AVAP code in one file gains access to code in another file through the import process. The `import` statement is the only way to invoke the import machinery in AVAP. + +The `include` statement inserts the contents of the specified file at the exact point where the import statement appears in the original file. There are no other ways to invoke the import system in AVAP. + +When an `include` statement is executed, the contents of the imported file are processed as if they were part of the original file, ensuring that all functions and variables from the imported file are available in the context of the original file. If the specified file is not found, a `FileNotFoundError` is raised. + +Example of using the `include` statement in AVAP: + +```javascript +Content of file main.avap +addVar(x,10) +include functions.avap +myFunction(x) + +Content of file functions.avap +function myFunction(y){ + addVar(result, y + 5) + addResult(result) +} +``` + +In this example, the content of `functions.avap` is inserted into `main.avap` at the point of the import statement, ensuring that `myFunction` is defined before being called. diff --git a/docs/developer.avapframework.com/chapter9_7.md b/docs/developer.avapframework.com/chapter9_7.md new file mode 100644 index 0000000..f1cd5e9 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_7.md @@ -0,0 +1 @@ +## 5.1. Import Rules diff --git a/docs/developer.avapframework.com/chapter9_8.md b/docs/developer.avapframework.com/chapter9_8.md new file mode 100644 index 0000000..823e7f1 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_8.md @@ -0,0 +1 @@ +## 5.2. Limitations and Considerations diff --git a/docs/developer.avapframework.com/chapter9_9.md b/docs/developer.avapframework.com/chapter9_9.md new file mode 100644 index 0000000..66c4a55 --- /dev/null +++ b/docs/developer.avapframework.com/chapter9_9.md @@ -0,0 +1,25 @@ +## 5.3. Advanced Example + +Consider the following example where multiple files are imported: + +```javascript +Content of the file main.avap +addVar(5, a) +include utilities.avap +include operations.avap + +addVar(b, increment(a)) +addVar( c, multiply(b, 2)) +addResult(c) + +Content of the file utilities.avap +function increment(x){ + return(x + 1) +} +Content of the file operations.avap +function multiply(x, y){ + return(x * y) +} +``` + +In this example, `utilities.avap` and `operations.avap` are imported into `main.avap` at the specified points, allowing the `increment` and `multiply` functions to be used in `main.avap` . From 8379033900d343e38c154ba3aa16db3316284a1e Mon Sep 17 00:00:00 2001 From: rafa-ruiz Date: Wed, 4 Mar 2026 20:21:27 -0800 Subject: [PATCH 9/9] Sample avap code --- docs/samples/asignacion_booleana.avap | 3 +++ docs/samples/asignacion_matematica.avap | 4 ++++ docs/samples/bucle_1_10.avap | 6 ++++++ docs/samples/bucle_longitud_de_datos.avap | 7 +++++++ docs/samples/calculo_de_expiracion.avap | 2 ++ docs/samples/captura_de_id.avap | 2 ++ docs/samples/captura_de_listas_multiples.avap | 3 +++ docs/samples/comparacion_simple.avap | 5 +++++ docs/samples/concatenacion_dinamica.avap | 3 +++ docs/samples/construccion_dinamica_de_objeto.avap | 4 ++++ docs/samples/contador_de_parametros.avap | 3 +++ docs/samples/conversion_timestamp_legible.avap | 2 ++ docs/samples/else_estandar.avap | 7 +++++++ docs/samples/expresion_compleja.avap | 6 ++++++ docs/samples/fecha_para_base_de_datos.avap | 2 ++ docs/samples/funcion_de_suma.avap | 6 ++++++ docs/samples/funcion_validacion_acceso.avap | 9 +++++++++ docs/samples/generador_de_tokens_aleatorios.avap | 2 ++ docs/samples/hash_SHA256_para_integridad.avap | 2 ++ docs/samples/hola_mundo.avap | 2 ++ docs/samples/if_desigualdad.avap | 6 ++++++ docs/samples/limpieza_de_strings.avap | 2 ++ docs/samples/manejo_error_sql_critico.avap | 5 +++++ docs/samples/obtencion_timestamp.avap | 2 ++ docs/samples/ormAccessCreate.avap | 6 ++++++ docs/samples/paginacion_dinamica_recursos.avap | 14 ++++++++++++++ docs/samples/referencia_por_valor.avap | 3 +++ docs/samples/respuesta_multiple.avap | 4 ++++ docs/samples/salida_bucle_correcta.avap | 8 ++++++++ docs/samples/try_catch_request.avap | 5 +++++ docs/samples/validacion_de_nulo.avap | 6 ++++++ docs/samples/validacion_in_pertenece_a_lista.avap | 5 +++++ 32 files changed, 146 insertions(+) create mode 100644 docs/samples/asignacion_booleana.avap create mode 100644 docs/samples/asignacion_matematica.avap create mode 100644 docs/samples/bucle_1_10.avap create mode 100644 docs/samples/bucle_longitud_de_datos.avap create mode 100644 docs/samples/calculo_de_expiracion.avap create mode 100644 docs/samples/captura_de_id.avap create mode 100644 docs/samples/captura_de_listas_multiples.avap create mode 100644 docs/samples/comparacion_simple.avap create mode 100644 docs/samples/concatenacion_dinamica.avap create mode 100644 docs/samples/construccion_dinamica_de_objeto.avap create mode 100644 docs/samples/contador_de_parametros.avap create mode 100644 docs/samples/conversion_timestamp_legible.avap create mode 100644 docs/samples/else_estandar.avap create mode 100644 docs/samples/expresion_compleja.avap create mode 100644 docs/samples/fecha_para_base_de_datos.avap create mode 100644 docs/samples/funcion_de_suma.avap create mode 100644 docs/samples/funcion_validacion_acceso.avap create mode 100644 docs/samples/generador_de_tokens_aleatorios.avap create mode 100644 docs/samples/hash_SHA256_para_integridad.avap create mode 100644 docs/samples/hola_mundo.avap create mode 100644 docs/samples/if_desigualdad.avap create mode 100644 docs/samples/limpieza_de_strings.avap create mode 100644 docs/samples/manejo_error_sql_critico.avap create mode 100644 docs/samples/obtencion_timestamp.avap create mode 100644 docs/samples/ormAccessCreate.avap create mode 100644 docs/samples/paginacion_dinamica_recursos.avap create mode 100644 docs/samples/referencia_por_valor.avap create mode 100644 docs/samples/respuesta_multiple.avap create mode 100644 docs/samples/salida_bucle_correcta.avap create mode 100644 docs/samples/try_catch_request.avap create mode 100644 docs/samples/validacion_de_nulo.avap create mode 100644 docs/samples/validacion_in_pertenece_a_lista.avap diff --git a/docs/samples/asignacion_booleana.avap b/docs/samples/asignacion_booleana.avap new file mode 100644 index 0000000..66e7b7c --- /dev/null +++ b/docs/samples/asignacion_booleana.avap @@ -0,0 +1,3 @@ +nivel = 5 +es_admin = nivel >= 10 +addResult(es_admin) \ No newline at end of file diff --git a/docs/samples/asignacion_matematica.avap b/docs/samples/asignacion_matematica.avap new file mode 100644 index 0000000..7f701f5 --- /dev/null +++ b/docs/samples/asignacion_matematica.avap @@ -0,0 +1,4 @@ +subtotal = 150.50 +iva = subtotal * 0.21 +total = subtotal + iva +addResult(total) \ No newline at end of file diff --git a/docs/samples/bucle_1_10.avap b/docs/samples/bucle_1_10.avap new file mode 100644 index 0000000..0881120 --- /dev/null +++ b/docs/samples/bucle_1_10.avap @@ -0,0 +1,6 @@ +startLoop(i,1,10) + item = "item_%s" % i + AddvariableToJSON(item,'valor_generado',mi_json) +endLoop() +addResult(mi_json) + diff --git a/docs/samples/bucle_longitud_de_datos.avap b/docs/samples/bucle_longitud_de_datos.avap new file mode 100644 index 0000000..72768fd --- /dev/null +++ b/docs/samples/bucle_longitud_de_datos.avap @@ -0,0 +1,7 @@ +registros = ['1','2','3'] +getListLen(registros, total) +contador = 0 +startLoop(idx, 0, 2) + actual = registros[int(idx)] +endLoop() +addResult(actual) \ No newline at end of file diff --git a/docs/samples/calculo_de_expiracion.avap b/docs/samples/calculo_de_expiracion.avap new file mode 100644 index 0000000..ba591cf --- /dev/null +++ b/docs/samples/calculo_de_expiracion.avap @@ -0,0 +1,2 @@ +getDateTime("", 86400, "UTC", expira) +addResult(expira) \ No newline at end of file diff --git a/docs/samples/captura_de_id.avap b/docs/samples/captura_de_id.avap new file mode 100644 index 0000000..e93739d --- /dev/null +++ b/docs/samples/captura_de_id.avap @@ -0,0 +1,2 @@ +addParam("client_id", id_interno) +addResult(id_interno) \ No newline at end of file diff --git a/docs/samples/captura_de_listas_multiples.avap b/docs/samples/captura_de_listas_multiples.avap new file mode 100644 index 0000000..de0ed6d --- /dev/null +++ b/docs/samples/captura_de_listas_multiples.avap @@ -0,0 +1,3 @@ +addParam(emails,emails) +getQueryParamList(lista_correos) +addResult(lista_correos) \ No newline at end of file diff --git a/docs/samples/comparacion_simple.avap b/docs/samples/comparacion_simple.avap new file mode 100644 index 0000000..2c899ac --- /dev/null +++ b/docs/samples/comparacion_simple.avap @@ -0,0 +1,5 @@ +addParam("lang", l) +if(l, "es", "=") + addVar(msg, "Hola") +end() +addResult(msg) \ No newline at end of file diff --git a/docs/samples/concatenacion_dinamica.avap b/docs/samples/concatenacion_dinamica.avap new file mode 100644 index 0000000..5497785 --- /dev/null +++ b/docs/samples/concatenacion_dinamica.avap @@ -0,0 +1,3 @@ +nombre = "Sistema" +log = "Evento registrado por: %s" % nombre +addResult(log) \ No newline at end of file diff --git a/docs/samples/construccion_dinamica_de_objeto.avap b/docs/samples/construccion_dinamica_de_objeto.avap new file mode 100644 index 0000000..cc28ff5 --- /dev/null +++ b/docs/samples/construccion_dinamica_de_objeto.avap @@ -0,0 +1,4 @@ +datos_cliente = "datos" +addVar(clave, "cliente_vip") +AddvariableToJSON(clave, datos_cliente, mi_json_final) +addResult(mi_json_final) \ No newline at end of file diff --git a/docs/samples/contador_de_parametros.avap b/docs/samples/contador_de_parametros.avap new file mode 100644 index 0000000..4a30ccd --- /dev/null +++ b/docs/samples/contador_de_parametros.avap @@ -0,0 +1,3 @@ +addParam("data_list", mi_lista) +getListLen(mi_lista, cantidad) +addResult(cantidad) \ No newline at end of file diff --git a/docs/samples/conversion_timestamp_legible.avap b/docs/samples/conversion_timestamp_legible.avap new file mode 100644 index 0000000..7f7ff1f --- /dev/null +++ b/docs/samples/conversion_timestamp_legible.avap @@ -0,0 +1,2 @@ +stampToDatetime(1708726162, "%d/%m/%Y", 0, fecha_human) +addResult(fecha_human) \ No newline at end of file diff --git a/docs/samples/else_estandar.avap b/docs/samples/else_estandar.avap new file mode 100644 index 0000000..a1c5322 --- /dev/null +++ b/docs/samples/else_estandar.avap @@ -0,0 +1,7 @@ +addParam(sal_par,saldo) +if(saldo, 0, ">") + permitir = True +else() + permitir = False +end() +addResult(permitir) \ No newline at end of file diff --git a/docs/samples/expresion_compleja.avap b/docs/samples/expresion_compleja.avap new file mode 100644 index 0000000..04516d3 --- /dev/null +++ b/docs/samples/expresion_compleja.avap @@ -0,0 +1,6 @@ +addParam(userrype, user_type) +addParam(sells, compras) +if(None, None, " user_type == 'VIP' or compras > 100") + addVar(descuento, 0.20) +end() +addResult(descuento) \ No newline at end of file diff --git a/docs/samples/fecha_para_base_de_datos.avap b/docs/samples/fecha_para_base_de_datos.avap new file mode 100644 index 0000000..553c5cb --- /dev/null +++ b/docs/samples/fecha_para_base_de_datos.avap @@ -0,0 +1,2 @@ +getDateTime("%Y-%m-%d %H:%M:%S", 0, "Europe/Madrid", sql_date) +addResult(sql_date) \ No newline at end of file diff --git a/docs/samples/funcion_de_suma.avap b/docs/samples/funcion_de_suma.avap new file mode 100644 index 0000000..ea781d0 --- /dev/null +++ b/docs/samples/funcion_de_suma.avap @@ -0,0 +1,6 @@ +function suma(a, b){ + total = a + b + return(total) + } +resultado = suma(10, 20) +addResult(resultado) \ No newline at end of file diff --git a/docs/samples/funcion_validacion_acceso.avap b/docs/samples/funcion_validacion_acceso.avap new file mode 100644 index 0000000..5a8a57b --- /dev/null +++ b/docs/samples/funcion_validacion_acceso.avap @@ -0,0 +1,9 @@ + function es_valido(token){ + response = False + if(token, "SECRET", "=") + response = True + end() + return(response) + } +autorizado = es_valido("SECRET") +addResult(autorizado) \ No newline at end of file diff --git a/docs/samples/generador_de_tokens_aleatorios.avap b/docs/samples/generador_de_tokens_aleatorios.avap new file mode 100644 index 0000000..0c2cf30 --- /dev/null +++ b/docs/samples/generador_de_tokens_aleatorios.avap @@ -0,0 +1,2 @@ +randomString("[A-Z]\d", 32, token_seguridad) +addResult(token_seguridad) \ No newline at end of file diff --git a/docs/samples/hash_SHA256_para_integridad.avap b/docs/samples/hash_SHA256_para_integridad.avap new file mode 100644 index 0000000..bb6ee3d --- /dev/null +++ b/docs/samples/hash_SHA256_para_integridad.avap @@ -0,0 +1,2 @@ +encodeSHA256("payload_data", checksum) +addResult(checksum) \ No newline at end of file diff --git a/docs/samples/hola_mundo.avap b/docs/samples/hola_mundo.avap new file mode 100644 index 0000000..e230cfd --- /dev/null +++ b/docs/samples/hola_mundo.avap @@ -0,0 +1,2 @@ +addVar(mensaje, "Hola mundo desde AVAP") +addResult(mensaje) \ No newline at end of file diff --git a/docs/samples/if_desigualdad.avap b/docs/samples/if_desigualdad.avap new file mode 100644 index 0000000..60d03e3 --- /dev/null +++ b/docs/samples/if_desigualdad.avap @@ -0,0 +1,6 @@ +addParam(password,pass_nueva) +pass_antigua = "password" +if(pass_nueva, pass_antigua, "!=") + addVar(cambio, "Contraseña actualizada") +end() +addResult(cambio) \ No newline at end of file diff --git a/docs/samples/limpieza_de_strings.avap b/docs/samples/limpieza_de_strings.avap new file mode 100644 index 0000000..b453138 --- /dev/null +++ b/docs/samples/limpieza_de_strings.avap @@ -0,0 +1,2 @@ +replace("REF_1234_OLD","OLD", "NEW", ref_actualizada) +addResult(ref_actualizada) \ No newline at end of file diff --git a/docs/samples/manejo_error_sql_critico.avap b/docs/samples/manejo_error_sql_critico.avap new file mode 100644 index 0000000..2f60df2 --- /dev/null +++ b/docs/samples/manejo_error_sql_critico.avap @@ -0,0 +1,5 @@ +try() + ormDirect("UPDATE table_inexistente SET a=1", res) +exception(e) + addVar(_status,500) + addResult("Error de base de datos") \ No newline at end of file diff --git a/docs/samples/obtencion_timestamp.avap b/docs/samples/obtencion_timestamp.avap new file mode 100644 index 0000000..a78eeab --- /dev/null +++ b/docs/samples/obtencion_timestamp.avap @@ -0,0 +1,2 @@ +getDateTime("", 0, "UTC", ahora) +addResult(ahora) \ No newline at end of file diff --git a/docs/samples/ormAccessCreate.avap b/docs/samples/ormAccessCreate.avap new file mode 100644 index 0000000..f33a6be --- /dev/null +++ b/docs/samples/ormAccessCreate.avap @@ -0,0 +1,6 @@ +ormCheckTable(tabla_pruebas,resultado_comprobacion) +if(resultado_comprobacion,False,'==') + ormCreateTable("username,age",'VARCHAR,INTEGER',tabla_pruebas,resultado_creacion) +end() +addResult(resultado_comprobacion) +addResult(resultado_creacion) \ No newline at end of file diff --git a/docs/samples/paginacion_dinamica_recursos.avap b/docs/samples/paginacion_dinamica_recursos.avap new file mode 100644 index 0000000..e87fc97 --- /dev/null +++ b/docs/samples/paginacion_dinamica_recursos.avap @@ -0,0 +1,14 @@ +addParam("page", p) +addParam("size", s) +registros = ["u1", "u2", "u3", "u4", "u5", "u6"] +offset = int(p) * int(s) +limite = offset + int(s) +contador = 0 +addResult(offset) +addResult(limite) +startLoop(i, 2, limite) + actual = registros[int(i)] + titulo = "reg_%s" % i + AddvariableToJSON(titulo, actual, pagina_json) +endLoop() +addResult(pagina_json) \ No newline at end of file diff --git a/docs/samples/referencia_por_valor.avap b/docs/samples/referencia_por_valor.avap new file mode 100644 index 0000000..4c6c979 --- /dev/null +++ b/docs/samples/referencia_por_valor.avap @@ -0,0 +1,3 @@ +addVar(base, 1000) +addVar(copia, $base) +addResult(copia) \ No newline at end of file diff --git a/docs/samples/respuesta_multiple.avap b/docs/samples/respuesta_multiple.avap new file mode 100644 index 0000000..1d1a44a --- /dev/null +++ b/docs/samples/respuesta_multiple.avap @@ -0,0 +1,4 @@ +addVar(code, 200) +addVar(status, "Success") +addResult(code) +addResult(status) \ No newline at end of file diff --git a/docs/samples/salida_bucle_correcta.avap b/docs/samples/salida_bucle_correcta.avap new file mode 100644 index 0000000..28aefad --- /dev/null +++ b/docs/samples/salida_bucle_correcta.avap @@ -0,0 +1,8 @@ +encontrado = False +startLoop(i, 1, 10) + if(i, 5, "==") + encontrado = True + i = 11 + end() +endLoop() +addResult(encontrado) \ No newline at end of file diff --git a/docs/samples/try_catch_request.avap b/docs/samples/try_catch_request.avap new file mode 100644 index 0000000..2430ecd --- /dev/null +++ b/docs/samples/try_catch_request.avap @@ -0,0 +1,5 @@ +try() + RequestGet("https://api.test.com/data", 0, 0, respuesta) +exception(e) + addVar(error_trace, "Fallo de conexión: %s" % e) + addResult(error_trace) diff --git a/docs/samples/validacion_de_nulo.avap b/docs/samples/validacion_de_nulo.avap new file mode 100644 index 0000000..d82ef74 --- /dev/null +++ b/docs/samples/validacion_de_nulo.avap @@ -0,0 +1,6 @@ +addParam("api_key", key) +if(key, None, "==") + addVar(_status, 403) + addVar(error, "Acceso denegado: falta API KEY") + addResult(error) +end() \ No newline at end of file diff --git a/docs/samples/validacion_in_pertenece_a_lista.avap b/docs/samples/validacion_in_pertenece_a_lista.avap new file mode 100644 index 0000000..defc9cc --- /dev/null +++ b/docs/samples/validacion_in_pertenece_a_lista.avap @@ -0,0 +1,5 @@ +addParam("rol", r) +if(r, ["admin", "editor", "root"], "in") + acceso = True +end() +addResult(acceso) \ No newline at end of file