25 lines
13 KiB
HTML
25 lines
13 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>sim-api - API Documentation</title>
|
|
<style>
|
|
body { margin: 0; padding: 0; }
|
|
#opencollection-container { width: 100vw; height: 100vh; }
|
|
</style>
|
|
<link rel="stylesheet" href="https://cdn.opencollection.com/docs.css">
|
|
<script src="https://cdn.opencollection.com/docs.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="opencollection-container"></div>
|
|
<script>
|
|
const collectionData = "opencollection: 1.0.0\ninfo:\n name: sim-api\nconfig:\n environments:\n - name: local\n color: '#2E8A54'\n variables:\n - name: baseurl\n value: http://localhost:3000\n - name: prod\n color: '#CE4F3B'\n variables:\n - name: baseurl\n value: https://sf-sims.savefamilygps.net\n - name: simconnections\n color: '#C77A0F'\n variables:\n - name: baseurl\n value: http://sim-connections.savefamilygps.net\nitems:\n - info:\n name: ReActivate\n type: http\n seq: 11\n http:\n method: POST\n url: '{{baseurl}}/sim/reActivate'\n body:\n type: form-urlencoded\n data:\n - name: iccid\n value: '8935103196306448300'\n - name: offer\n value: SAVEFAMILY1\n disabled: true\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Test Order\n type: http\n seq: 9\n http:\n method: POST\n url: '{{baseurl}}/sim/test'\n body:\n type: form-urlencoded\n data:\n - name: iccid\n value: '8933201125065160999'\n - name: offer\n value: SAVEFAMILY1\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: test proxy\n type: http\n seq: 12\n http:\n method: GET\n url: '{{baseurl}}/simconnections/alai/select?iccid=1111111111111111111'\n params:\n - name: iccid\n value: '1111111111111111111'\n type: query\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Docs\n type: http\n seq: 10\n http:\n method: GET\n url: '{{baseurl}}/docs/sim-api-documentation.html'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Cancel\n type: http\n seq: 3\n http:\n method: POST\n url: '{{baseurl}}/sim/cancel'\n body:\n type: form-urlencoded\n data:\n - name: iccid\n value: '8933201125068889894'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n docs: |-\n El endpoint recibe como body\n ```\n {\n iccid: string,\n update_webhook?: string\n }\n ```\n\n `update_webhook` est\xE1 en desarrollo, pero ser\xE1 donde se mande la actualizacion de la cancelaci\xF3n cuando haya una respuesta de la API externa.\n\n Si la llamada tiene exito devuelve:\n ``` json\n {\n data: {\n iccid: string,\n message_id: string,\n operation: \"cancelation\"\n }\n }\n\n ```\n message_id se usar\xE1 para la llamada /orders/message_id/}{message_id} \n\n Si la llamada falla devolvera:\n ```json\n {\n errors: {\n msg: string\n ... (campos extra de gestion del error)\n }\n }\n ```\n - info:\n name: Pause\n type: http\n seq: 4\n http:\n method: POST\n url: '{{baseurl}}/sim/pause'\n params:\n - name: iccid\n value: ''\n type: query\n disabled: true\n body:\n type: form-urlencoded\n data:\n - name: iccid\n value: '8935103196306448300'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Activation Email Health\n type: http\n seq: 8\n http:\n method: POST\n url: https://sf-sim-activation.savefamily.net/health\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Preactivate\n type: http\n seq: 5\n http:\n method: POST\n url: '{{baseurl}}/sim/preactivate'\n params:\n - name: iccid\n value: '1234'\n type: query\n disabled: true\n body:\n type: form-urlencoded\n data:\n - name: iccid\n value: '8933201125065160380'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Activation Email\n type: http\n seq: 7\n http:\n method: POST\n url: https://sf-sim-activation.savefamily.net/send-activation-mail\n headers:\n - name: x-apikey-sim-activation\n value: 9e48c4ac-1ab0-4397-b3f3-6c239200dfe6\n body:\n type: json\n data: |-\n {\n \"id\": \"11\",\n \"retry_count\": 0,\n \"max_retry\": null,\n \"max_date_retry\": null,\n \"iccids\": [\n \"8933201125068886080\"\n ],\n \"request_id\": \"14362\",\n \"mass_action_id\": \"5208468\",\n \"operation\": \"activate\",\n \"start_date\": \"2026-02-13T11:08:42.499Z\",\n \"last_change_date\": \"2026-02-16T09:24:36.073Z\",\n \"end_date\": \"2026-02-16T09:24:36.073Z\",\n \"error\": null,\n \"status\": \"finished\",\n \"objenious_status\": \"Termin\xE9\",\n \"msisdn\": \"33764399870\"\n }\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Health\n type: http\n seq: 6\n http:\n method: GET\n url: '{{baseurl}}/health'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Activate\n type: http\n seq: 1\n http:\n method: POST\n url: '{{baseurl}}/sim/activate'\n body:\n type: json\n data: |-\n {\n \"iccid\": \"1234\"\n }\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n docs: |-\n Campos de entrada: \n ```ts\n // Header requerido\n // > content-type:application/x-www-form-urlencoded\n // > content-type:application/json\n // Cualquiera de los 2 es valido\n\n // Esquema body\n {\n iccid: string,\n offer: \"mensual\" | \"anual\" | \"SAVEFAMILY1\" | \"SAVEFAMILY2\"\n webhook?: string,\n }\n ```\n\n En el campo `offer` \"mensual\" equivale a \"SAVEFAMILY2\" y \"anual\" a \"SAVEFAMILY1\" porque se mantien los c\xF3digos de Oferta de Objenious por compatibilidad pero se espera usar \"mensual\" y \"anual\" y hacer la conversi\xF3n en el servicio de cada proveedor.\n\n Para las llamadas al webhook se va a usar siempre el metodo `POST`, ahora mismo no se firman los mensajes. Se introduce la URL completa tal que `https://dominion.com/v1/endpoint`.\n\n Respuestas:\n - **200**: OK \n ``` ts\n // Esquema\n {\n iccid: string,\n operation: string,\n message_id: string, //uuidv7\n }\n ```\n ``` json\n // Ejemplo\n {\n \"iccid\": \"89332011250651xxxxx\",\n \"operation\": \"activation\",\n \"message_id\": \"019dbeaf-8abb-7783-8b51-94fbd9f0b0df\"\n }\n ```\n\n *iccid*: Confirmaci\xF3n del iccid enviado.\n *operation*: Confirmaci\xF3n de la operacion que se ha aplicado.\n *message_id*: Id de la operaci\xF3n, para consultar en orders.\n\n > A futuro se va a incluir un campo `\"ref\":[]` para a\xF1adir los enlaces a las consultas de la operaci\xF3n. El body va a permitir tambien json.\n\n - **402**: Alg\xFAn campo es incorrecto\n Se indica que campo es incorrecto, si hubiese mas de uno solo aparecer\xEDa el primero en comprobarse.\n ```json\n \"errors\": {\n \"msg\": \"La longitud del iccid es incorrecta debera ser de 19 caracteres\",\n \"field\": \"iccid\"\n }\n ```\n\n - **500**: Error general\n Ha ocurrido un error imprevisto durante la \n - info:\n name: Orders\n type: folder\n request:\n auth: inherit\n docs:\n content: |+\n # Orders\n\n Los *order* representan ordenes que se hacen al servidor y representan en que estado se encuentran las peticiones. Los *order* se generan cuando se solicita una operacion y devuelven su identificador en el campo `message_id` de todas las respuestas a peticiones que requieran cambios. Los identificadores de `order` son UUIDv7, aunque tambien tienen asociado un id tradicional BIGINT en la BDD.\n\n ## Ciclo de vida\n\n Cuando se crea un *order* comienza en estado `pending`, inicando que ha entrado en la cola y est\xE1 pendiente de iniciarse; una vez se ha consumido por un servicio pasa a estado `running` indicando que la operacion asociada al *order* ha comenzado, el order continuara en este estado durante un tiempo indefinido (pueden pasar semanas para algunos casos), hasta que la tara finalize correctamente o con errores. En el caso que la tarea finalize con \xE9xito el *order* pasar\xE1 a estado `finished`, en caso de que haya habido un error el estado ser\xE1 `failed` y se almacenar\xE1 el error en los campos `error_message` y opcionalemente en `error_stacktrace` seg\xFAn gravedad del error.\n\n - Caso normal\n `pending` -> `running` -> `finished`\n\n - Error durante el consumo\n `pending` -> `failed`\n\n - Error durante la operacion\n `pending` -> `running` -> `failed`\n\n ## Endpoints \n Estan sujetos a cambios en cuanto a mostrar informaci\xF3n\n\n - [WIP]**GET** /orders?{query} \n Devuelve todos los orders con un campo que tenga el valor especificado en la query\n\n - **GET** /orders/{id}\n Devuelve el order objetivo seg\xFAn su UUID de mensaje (No seg\xFAn el uuid de mensaje)\n \n - **GET** /orders/base_id/{id}\n Devuelve el id seg\xFAn su id de la bdd, no es el metodo normal de usar la api\n\n - **GET** /orders/pending\n Devuelve todas las order que no hayan finalizado\n\n\n type: text/markdown\n items:\n - info:\n name: Get pending orders\n type: http\n seq: 10\n http:\n method: GET\n url: '{{baseurl}}/orders/pending'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Orders by message_id\n type: http\n seq: 12\n http:\n method: GET\n url: '{{baseurl}}/orders/message_id/019dbeaf-8abb-7783-8b51-94fbd9f0b0df'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\n - info:\n name: Order by id\n type: http\n seq: 9\n http:\n method: GET\n url: '{{baseurl}}/orders/019dbeaf-8abb-7783-8b51-94fbd9f0b0df'\n auth: inherit\n settings:\n encodeUrl: true\n timeout: 0\n followRedirects: true\n maxRedirects: 5\ndocs:\n content: |-\n Todos los endpoint tienen unos campos comunes de entrada:\n\n ```ts\n {\n iccid: string,\n update_webhook?: string\n }\n ```\n\n `update_webhook` est\xE1 en desarrollo, pero ser\xE1 donde se mande la actualizacion de la cancelaci\xF3n cuando haya una respuesta de la API externa.\n\n Si la llamada tiene exito devuelve:\n ```ts\n {\n data: {\n iccid: string,\n message_id: string,\n operation: string,\n }\n }\n\n ```\n message_id se usar\xE1 para la llamada /orders/message_id/}{message_id} \n\n Si la llamada falla devolvera:\n ```ts\n {\n errors: {\n msg: string\n ... (campos extra de gestion del error)\n }\n }\n ```\n type: text/markdown\nbundled: true\nextensions:\n bruno:\n ignore:\n - node_modules\n - .git\n exportedAt: '2026-04-27T13:13:16.469Z'\n exportedUsing: Bruno/3.3.0\n";
|
|
new window.OpenCollection({
|
|
target: document.getElementById('opencollection-container'),
|
|
opencollection: collectionData,
|
|
theme: 'light'
|
|
});
|
|
</script>
|
|
</body>
|
|
</html> |