@fiado/type-kit 3.57.0 → 3.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/_test_/unit/cognitoBackofficeConnector/dtos/CreateUserRequest.test.ts +53 -0
  2. package/bin/cognitoBackofficeConnector/dtos/CreateUserRequest.js +2 -1
  3. package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.d.ts +20 -0
  4. package/bin/cognitoBackofficeConnector/dtos/PoolConfigResponse.js +11 -0
  5. package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.d.ts +4 -0
  6. package/bin/cognitoBackofficeConnector/dtos/PoolsListResponse.js +6 -0
  7. package/bin/rbac/enums/PoolKind.d.ts +16 -0
  8. package/bin/rbac/enums/PoolKind.js +20 -0
  9. package/bin/rbac/index.d.ts +1 -0
  10. package/bin/rbac/index.js +17 -0
  11. package/bin/remittance/dtos/RemittanceConfirmRequest.d.ts +41 -0
  12. package/bin/remittance/dtos/RemittanceSendPreviewResponse.d.ts +15 -0
  13. package/bin/remittance/dtos/index.d.ts +1 -0
  14. package/bin/remittance/dtos/index.js +1 -0
  15. package/package.json +1 -1
  16. package/src/cognitoBackofficeConnector/dtos/CreateUserRequest.ts +2 -2
  17. package/src/remittance/dtos/RemittanceConfirmRequest.ts +42 -0
  18. package/src/remittance/dtos/RemittanceSendPreviewResponse.ts +17 -0
  19. package/src/remittance/dtos/index.ts +1 -0
  20. package/bin/benefitCenter/dtos/BackofficeLeafOverrideUpsertRequest.d.ts +0 -22
  21. package/bin/benefitCenter/dtos/BackofficeLeafOverrideUpsertRequest.js +0 -91
  22. package/bin/benefitCenter/dtos/FieldOverrideRequest.d.ts +0 -19
  23. package/bin/benefitCenter/dtos/FieldOverrideRequest.js +0 -80
  24. package/bin/benefitCenter/dtos/InputSchemaOverrideRequest.d.ts +0 -9
  25. package/bin/benefitCenter/dtos/InputSchemaOverrideRequest.js +0 -29
  26. package/bin/benefitCenter/enums/LeafOverrideStatusEnum.d.ts +0 -10
  27. package/bin/benefitCenter/enums/LeafOverrideStatusEnum.js +0 -14
  28. package/bin/cognitoConnector/dtos/SignUpBackofficeRequest.d.ts +0 -13
  29. package/bin/cognitoConnector/dtos/SignUpBackofficeRequest.js +0 -71
  30. package/bin/comission-business/dtos/GenerateReportRequest.d.ts +0 -10
  31. package/bin/comission-business/dtos/GenerateReportResponse.d.ts +0 -6
  32. package/bin/comission-business/dtos/GenerateReportResponse.js +0 -2
  33. package/bin/comission-business/enums/PaymentStatusEnum.d.ts +0 -5
  34. package/bin/comission-business/enums/PaymentStatusEnum.js +0 -9
  35. package/bin/credit/dtos/CreditBannerStateResponse.d.ts +0 -10
  36. package/bin/credit/dtos/CreditBannerStateResponse.js +0 -6
  37. package/bin/credit/dtos/CreditDetailResponse.d.ts +0 -23
  38. package/bin/credit/dtos/CreditDetailResponse.js +0 -6
  39. package/bin/credit/dtos/CreditEligibilityResponse.d.ts +0 -9
  40. package/bin/credit/dtos/CreditEligibilityResponse.js +0 -6
  41. package/bin/credit/dtos/CreditMovementResponse.d.ts +0 -20
  42. package/bin/credit/dtos/CreditMovementResponse.js +0 -9
  43. package/bin/credit/dtos/CreditRequestCreate.d.ts +0 -4
  44. package/bin/credit/dtos/CreditRequestCreate.js +0 -26
  45. package/bin/credit/dtos/CreditRequestResponse.d.ts +0 -7
  46. package/bin/credit/dtos/CreditRequestResponse.js +0 -6
  47. package/bin/credit/dtos/CreditScheduleResponse.d.ts +0 -18
  48. package/bin/credit/dtos/CreditScheduleResponse.js +0 -9
  49. package/bin/credit/dtos/CreditStatementResponse.d.ts +0 -11
  50. package/bin/credit/dtos/CreditStatementResponse.js +0 -9
  51. package/bin/credit/dtos/EarlyPaymentRequest.d.ts +0 -7
  52. package/bin/credit/dtos/EarlyPaymentRequest.js +0 -37
  53. package/bin/credit/dtos/EarlyPaymentResponse.d.ts +0 -11
  54. package/bin/credit/dtos/EarlyPaymentResponse.js +0 -6
  55. package/bin/credit/dtos/internal/CreditBalanceRequest.d.ts +0 -3
  56. package/bin/credit/dtos/internal/CreditBalanceRequest.js +0 -21
  57. package/bin/credit/dtos/internal/CreditCollectionRequest.d.ts +0 -11
  58. package/bin/credit/dtos/internal/CreditCollectionRequest.js +0 -59
  59. package/bin/credit/dtos/internal/CreditCollectionResponse.d.ts +0 -12
  60. package/bin/credit/dtos/internal/CreditCollectionResponse.js +0 -6
  61. package/bin/credit/dtos/internal/CreditDisbursementRequest.d.ts +0 -7
  62. package/bin/credit/dtos/internal/CreditDisbursementRequest.js +0 -43
  63. package/bin/credit/dtos/internal/CreditDisbursementResponse.d.ts +0 -8
  64. package/bin/credit/dtos/internal/CreditDisbursementResponse.js +0 -6
  65. package/bin/credit/dtos/internal/CreditProfileRequest.d.ts +0 -3
  66. package/bin/credit/dtos/internal/CreditProfileRequest.js +0 -23
  67. package/bin/credit/dtos/internal/CreditReversalRequest.d.ts +0 -5
  68. package/bin/credit/dtos/internal/CreditReversalRequest.js +0 -31
  69. package/bin/credit/dtos/internal/CreditReversalResponse.d.ts +0 -7
  70. package/bin/credit/dtos/internal/CreditReversalResponse.js +0 -6
  71. package/bin/credit/dtos/internal/CreditTransferLoancoRequest.d.ts +0 -8
  72. package/bin/credit/dtos/internal/CreditTransferLoancoRequest.js +0 -46
  73. package/bin/credit/dtos/internal/CreditTransferLoancoResponse.d.ts +0 -8
  74. package/bin/credit/dtos/internal/CreditTransferLoancoResponse.js +0 -6
  75. package/bin/credit/dtos/internal/DocumentSignRequest.d.ts +0 -3
  76. package/bin/credit/dtos/internal/DocumentSignRequest.js +0 -21
  77. package/bin/credit/dtos/internal/LienApplyRequest.d.ts +0 -7
  78. package/bin/credit/dtos/internal/LienApplyRequest.js +0 -45
  79. package/bin/credit/enums/CollectionFrequencyEnum.d.ts +0 -5
  80. package/bin/credit/enums/CollectionFrequencyEnum.js +0 -9
  81. package/bin/credit/enums/CreditOperationEnum.d.ts +0 -11
  82. package/bin/credit/enums/CreditOperationEnum.js +0 -15
  83. package/bin/credit/enums/CreditStatusEnum.d.ts +0 -12
  84. package/bin/credit/enums/CreditStatusEnum.js +0 -16
  85. package/bin/credit/enums/DelinquencyLevelEnum.d.ts +0 -9
  86. package/bin/credit/enums/DelinquencyLevelEnum.js +0 -13
  87. package/bin/credit/enums/DocumentTypeEnum.d.ts +0 -8
  88. package/bin/credit/enums/DocumentTypeEnum.js +0 -12
  89. package/bin/credit/enums/OfferStatusEnum.d.ts +0 -8
  90. package/bin/credit/enums/OfferStatusEnum.js +0 -12
  91. package/bin/credit/enums/PaymentTypeEnum.d.ts +0 -9
  92. package/bin/credit/enums/PaymentTypeEnum.js +0 -13
  93. package/bin/credit/enums/ReconciliationStatusEnum.d.ts +0 -6
  94. package/bin/credit/enums/ReconciliationStatusEnum.js +0 -10
  95. package/bin/credit/enums/TransferStatusEnum.d.ts +0 -8
  96. package/bin/credit/enums/TransferStatusEnum.js +0 -12
  97. package/docs/superpowers/plans/2026-05-22-http-client-inversify-v8.md +0 -243
  98. package/docs/superpowers/specs/2026-05-22-inversify-v8-migration-design.md +0 -191
  99. /package/bin/{comission-business/dtos/GenerateReportRequest.js → remittance/dtos/RemittanceConfirmRequest.js} +0 -0
@@ -1,243 +0,0 @@
1
- # http-client → inversify v8 (2.0.0) Implementation Plan
2
-
3
- > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
-
5
- **Goal:** Migrar `@fiado/http-client` a inversify 8 (última) y dejarlo listo como major **2.0.0**, con la línea v6 (1.x) como rama de mantenimiento. **No se publica** hasta terminar los cambios y tener visto bueno.
6
-
7
- **Architecture:** http-client solo usa `@injectable()` sobre `AxiosHttpRequest` (sin inyección por constructor). El cambio es: (1) introducir un smoke test que prueba que la clase se resuelve desde un `Container`, como guardia de regresión; (2) subir inversify a 8 moviéndola a `peerDependency` + `devDependency`; (3) dejar 2.0.0 listo (publicación diferida). Es la lib hoja (sin deps `@fiado`), por eso va primero.
8
-
9
- **Tech Stack:** TypeScript 5.4, inversify 8.x (^8.1.0), reflect-metadata 0.2.2, axios 1.8, jest + ts-jest (nuevo).
10
-
11
- **Nota de versión:** se va de v6 directo a **v8** (la última); se salta v7. Confirmado contra las guías oficiales ([v6](https://inversify.io/docs/guides/migrating-from-v6/), [v7](https://inversify.io/docs/guides/migrating-from-v7/)): http-client solo usa `@injectable()`, que **no cambió**.
12
-
13
- **Constraint ESM:** inversify 8 es **ESM-only**; CommonJS lo consume vía `require(esm)` solo en **Node ≥20**. El build de la lib (tsconfig commonjs) no cambia, pero el harness de jest debe correr en Node 20+ y puede requerir ajuste si jest no resuelve el paquete ESM (ver Task 3 Step 3).
14
-
15
- **Repo:** `/Users/yhon/fsrc/fiado-http-client` (rama base: `develop`, hoy en 1.0.10, limpia tras pull).
16
-
17
- ---
18
-
19
- ## Estructura de archivos
20
-
21
- - `fiado-http-client/jest.config.js` — **crear**: config jest con preset ts-jest.
22
- - `fiado-http-client/test/AxiosHttpRequest.di.test.ts` — **crear**: smoke test de resolución por container.
23
- - `fiado-http-client/package.json` — **modificar**: scripts.test, devDependencies (jest, ts-jest, @types/jest, inversify, reflect-metadata), peerDependencies (inversify, reflect-metadata), quitar inversify de dependencies, bump version.
24
- - `fiado-http-client/src/AxiosHttpRequest.ts` — **modificar solo si v8 lo exige** (no se espera cambio: `@injectable()` sigue igual).
25
- - `fiado-http-client/tsconfig.json` — **modificar**: excluir `test/` del build de producción.
26
-
27
- ---
28
-
29
- ## Task 1: Montar harness de tests + smoke test (baseline en inversify 6)
30
-
31
- **Files:**
32
- - Modify: `fiado-http-client/package.json`
33
- - Create: `fiado-http-client/jest.config.js`
34
- - Create: `fiado-http-client/test/AxiosHttpRequest.di.test.ts`
35
- - Modify: `fiado-http-client/tsconfig.json`
36
-
37
- - [ ] **Step 1: Instalar dependencias de test**
38
-
39
- Run:
40
- ```bash
41
- cd /Users/yhon/fsrc/fiado-http-client
42
- npm install -D jest@^29 ts-jest@^29 @types/jest@^29
43
- ```
44
- Expected: se agregan a `devDependencies`, sin errores de peer deps.
45
-
46
- - [ ] **Step 2: Crear `jest.config.js`**
47
-
48
- ```js
49
- /** @type {import('ts-jest').JestConfigWithTsJest} */
50
- module.exports = {
51
- preset: 'ts-jest',
52
- testEnvironment: 'node',
53
- testMatch: ['**/test/**/*.test.ts'],
54
- setupFiles: ['reflect-metadata'],
55
- };
56
- ```
57
-
58
- - [ ] **Step 3: Actualizar el script de test en `package.json`**
59
-
60
- Reemplazar la línea `"test": "test",` por:
61
- ```json
62
- "test": "jest",
63
- ```
64
-
65
- - [ ] **Step 4: Excluir `test/` del build en `tsconfig.json`**
66
-
67
- Agregar a `exclude` (junto a `node_modules`):
68
- ```json
69
- "exclude": [
70
- "node_modules",
71
- "test"
72
- ]
73
- ```
74
-
75
- - [ ] **Step 5: Escribir el smoke test (debe pasar con inversify 6 actual)**
76
-
77
- Create `test/AxiosHttpRequest.di.test.ts`:
78
- ```ts
79
- import 'reflect-metadata';
80
- import { Container } from 'inversify';
81
- import { AxiosHttpRequest } from '../src/AxiosHttpRequest';
82
- import { IHttpRequest } from '../src/IHttpRequest';
83
-
84
- describe('AxiosHttpRequest DI', () => {
85
- it('se resuelve como IHttpRequest desde un Container de inversify', () => {
86
- const container = new Container();
87
- container.bind<IHttpRequest>('IHttpRequest').to(AxiosHttpRequest);
88
-
89
- const instance = container.get<IHttpRequest>('IHttpRequest');
90
-
91
- expect(instance).toBeInstanceOf(AxiosHttpRequest);
92
- expect(typeof instance.get).toBe('function');
93
- expect(typeof instance.post).toBe('function');
94
- });
95
- });
96
- ```
97
-
98
- - [ ] **Step 6: Correr el test (baseline verde en inversify 6)**
99
-
100
- Run:
101
- ```bash
102
- cd /Users/yhon/fsrc/fiado-http-client && npm test
103
- ```
104
- Expected: PASS (1 test). Esto fija el baseline antes del bump.
105
-
106
- - [ ] **Step 7: Commit**
107
-
108
- ```bash
109
- cd /Users/yhon/fsrc/fiado-http-client
110
- git add jest.config.js test/AxiosHttpRequest.di.test.ts package.json package-lock.json tsconfig.json
111
- git commit -m "test: add DI smoke test and jest harness for http-client"
112
- ```
113
-
114
- ---
115
-
116
- ## Task 2: Crear rama de mantenimiento v6 antes de subir develop a v8
117
-
118
- **Files:** ninguno (operación de git/branch)
119
-
120
- - [ ] **Step 1: Cortar la rama de mantenimiento desde el develop actual (1.x)**
121
-
122
- Run:
123
- ```bash
124
- cd /Users/yhon/fsrc/fiado-http-client
125
- git checkout -b release/1.x
126
- git push -u origin release/1.x
127
- git checkout develop
128
- ```
129
- Expected: `release/1.x` creada en remoto desde 1.0.10. `develop` será la línea v8.
130
-
131
- ---
132
-
133
- ## Task 3: Subir inversify a v8 como peerDependency
134
-
135
- **Files:**
136
- - Modify: `fiado-http-client/package.json`
137
- - (posible) Modify: `fiado-http-client/src/AxiosHttpRequest.ts`
138
-
139
- - [ ] **Step 1: Quitar inversify de `dependencies` e instalar v8 como peer + dev**
140
-
141
- Editar `package.json`:
142
- - Quitar `"inversify": "^6.0.2"` de `dependencies` (dejar ahí solo `axios` y `typescript`).
143
- - Agregar bloque:
144
- ```json
145
- "peerDependencies": {
146
- "inversify": "^8.0.0",
147
- "reflect-metadata": "^0.2.2"
148
- },
149
- ```
150
- - Agregar a `devDependencies`: `"inversify": "^8.1.0"`, `"reflect-metadata": "^0.2.2"`.
151
-
152
- Luego instalar:
153
- ```bash
154
- cd /Users/yhon/fsrc/fiado-http-client
155
- npm install
156
- ```
157
- Expected: inversify 8.x en `node_modules`, sin errores.
158
-
159
- - [ ] **Step 2: Compilar contra v8**
160
-
161
- Run:
162
- ```bash
163
- cd /Users/yhon/fsrc/fiado-http-client && npm run build
164
- ```
165
- Expected: PASS. Si falla por la API de decoradores, ajustar el import de `@injectable` según la guía v8 (no se espera; `import { injectable } from 'inversify'` sigue válido).
166
-
167
- - [ ] **Step 3: Correr el smoke test contra v8 (debe seguir verde)**
168
-
169
- Run:
170
- ```bash
171
- node --version # debe ser >= 20 (inversify 8 es ESM-only)
172
- cd /Users/yhon/fsrc/fiado-http-client && npm test
173
- ```
174
- Expected: PASS. Notas según la guía oficial:
175
- - `container.get()` **sigue síncrono** en v8 (convención sync-first), así que el test no debería requerir `getAsync`.
176
- - Si jest falla al cargar inversify 8 por ser **ESM-only** (error tipo `Cannot use import statement outside a module` o `ERR_REQUIRE_ESM`), habilitar ESM en jest: correr con `NODE_OPTIONS=--experimental-vm-modules`, `preset: 'ts-jest/presets/default-esm'` y `extensionsToTreatAsEsm: ['.ts']` en `jest.config.js`. Documentar el ajuste final para reutilizarlo en las demás libs.
177
-
178
- - [ ] **Step 4: Commit**
179
-
180
- ```bash
181
- cd /Users/yhon/fsrc/fiado-http-client
182
- git add package.json package-lock.json src/
183
- git commit -m "feat!: bump inversify to v8 as peerDependency
184
-
185
- BREAKING CHANGE: requires inversify ^8 in the consumer. inversify ya no
186
- es dependency directa; ahora es peerDependency para compartir una sola
187
- instancia con el container del consumidor."
188
- ```
189
-
190
- ---
191
-
192
- ## Task 4: Bump a 2.0.0 (sin publicar)
193
-
194
- **Files:**
195
- - Modify: `fiado-http-client/package.json`
196
-
197
- - [ ] **Step 1: Subir la versión a 2.0.0**
198
-
199
- Run:
200
- ```bash
201
- cd /Users/yhon/fsrc/fiado-http-client
202
- npm version 2.0.0 --no-git-tag-version
203
- ```
204
- Expected: `package.json` queda en `"version": "2.0.0"`.
205
-
206
- - [ ] **Step 2: Build limpio y verificación final**
207
-
208
- Run:
209
- ```bash
210
- cd /Users/yhon/fsrc/fiado-http-client && npm run build && npm test
211
- ```
212
- Expected: build OK + test PASS.
213
-
214
- - [ ] **Step 3: Commit y tag (sin publicar a npm)**
215
-
216
- ```bash
217
- cd /Users/yhon/fsrc/fiado-http-client
218
- git add package.json
219
- git commit -m "2.0.0"
220
- git tag v2.0.0
221
- git push origin develop --tags
222
- ```
223
-
224
- - [ ] **Step 4: Publicación — EN ESPERA**
225
-
226
- > **NO publicar todavía.** Por instrucción del usuario, ninguna lib se publica a
227
- > npm hasta terminar todos los cambios del set (http-client, gateway-adapter,
228
- > api-invoker) y tener visto bueno explícito. Cuando se autorice, el publish
229
- > será (resolviendo antes el token de npm del `.npmrc`, ver spec §Seguridad):
230
- >
231
- > ```bash
232
- > npm publish # 2.0.0 como dist-tag "latest"
233
- > npm dist-tag add @fiado/http-client@1.0.10 legacy-v6
234
- > ```
235
-
236
- ---
237
-
238
- ## Self-Review
239
-
240
- - **Cobertura del spec:** http-client es la primera lib del §5 del spec; este plan cubre su migración (v8), la creación de la línea de mantenimiento (§6) y deja el publish documentado pero **en espera** (instrucción del usuario). gateway-adapter + api-invoker y las lambdas son planes aparte.
241
- - **peerDependency:** decisión añadida sobre el spec para garantizar una sola instancia de inversify a través de la frontera lib↔lambda. Coherente con la causa raíz del §2.
242
- - **Sin placeholders:** todos los pasos tienen comando o código concreto.
243
- - **Riesgo abierto:** si `container.get` resultara async en 8.x, el Step 3 de Task 3 lo detecta y obliga a actualizar el test; ese hallazgo se documenta para el codemod de las lambdas.
@@ -1,191 +0,0 @@
1
- # Migración a inversify v8 (última) con soporte gradual de lambdas en v6
2
-
3
- Fecha: 2026-05-22
4
- Estado: diseño aprobado (estrategia), pendiente de revisión del spec
5
- Versión objetivo: inversify **8.x** (la última, hoy 8.1.0). Se salta v7; se va de v6 directo a v8.
6
-
7
- ## 1. Contexto y objetivo
8
-
9
- Las libs compartidas (`@fiado/api-invoker`, `@fiado/gateway-adapter`,
10
- `@fiado/http-client`) dependen hoy de `inversify ^6.x` como dependencia normal.
11
- 122 repos de lambdas las consumen y todos declaran `inversify` directamente,
12
- repartidos entre el major 1 (~80 repos, `^1.x`) y el major 3 (~30, `^3.x`).
13
- Las libs se publican a npm público (`registry.npmjs.org`).
14
-
15
- **Objetivo:** subir las libs a inversify 8 y migrar las 122 lambdas **de forma
16
- gradual**, manteniendo las lambdas no migradas funcionando en inversify 6,
17
- incluyendo la capacidad de sacar hotfixes a las libs para esas lambdas v6.
18
-
19
- ## 2. Restricciones técnicas (la causa raíz)
20
-
21
- - **La DI cruza la frontera lib↔lambda.** Cada lambda hace
22
- `const c = new Container(); c.load(gatewayAdapterBindings); c.load(apiInvokerBindings)`
23
- y además `c.bind("IHttpRequest").to(AxiosHttpRequest)`. Los `ContainerModule`
24
- y las clases `@injectable` viajan desde la lib al container de la lambda.
25
- - **Consecuencia:** el `ContainerModule`/decoradores producidos por la lib y el
26
- `Container` de la lambda **deben ser de la misma versión de inversify**.
27
- inversify 6 y 8 no se pueden mezclar en un mismo container (cambian la firma
28
- del callback de `ContainerModule`, se elimina el namespace `interfaces`, y
29
- cambian APIs de binding). Por eso **no existe una sola versión de lib que
30
- sirva para ambos** sin un shim frágil.
31
- - **Atomicidad de la migración por lambda:** una lambda no puede mezclar
32
- `gateway-adapter` v6 con `api-invoker` v8. Debe subir **en un solo PR**:
33
- `inversify` 6→8 + el set completo de libs que tocan su container
34
- (`api-invoker`, `gateway-adapter`, `http-client`).
35
- - **Ciclo entre libs:** `gateway-adapter` depende de `api-invoker` y
36
- `api-invoker` depende de `gateway-adapter`. No se pueden publicar "uno a la
37
- vez"; sus majors nuevos se publican coordinados (ver §5).
38
- - **Libs sin inversify:** `logger` y `type-kit` no usan el container ni
39
- decoradores → **no se tocan** en esta migración.
40
-
41
- ## 3. Estrategia elegida: majors paralelos (dual-track)
42
-
43
- Sacar un **major nuevo** de cada lib del set, construido sobre inversify 8.
44
- Los majors v6 actuales quedan como **línea de mantenimiento** para backports.
45
- Cada lambda migra cuando le toca, en un PR atómico. Cada container en runtime
46
- ve **una sola** versión de inversify.
47
-
48
- Líneas resultantes por lib (los majors de NUESTRAS libs son independientes del
49
- número de versión de inversify):
50
-
51
- | Lib | Línea v6 (mantenimiento) | Línea v8 (nueva) |
52
- |----------------|--------------------------|----------------------|
53
- | http-client | 1.x | 2.0.0 |
54
- | gateway-adapter| 1.x | 2.0.0 |
55
- | api-invoker | 3.x | 4.0.0 |
56
- | logger | — (sin cambio) | — |
57
- | type-kit | — (sin cambio) | — |
58
-
59
- (Estrategias descartadas: desacoplar las libs de inversify por completo —
60
- refactor enorme incompatible con "gradual"; peerDependency + shim dual-API —
61
- frágil por las diferencias de API entre v6 y v8.)
62
-
63
- ## 4. Breaking changes confirmados (v6 → v8)
64
-
65
- Verificado contra las guías oficiales ([migrating-from-v6](https://inversify.io/docs/guides/migrating-from-v6/)
66
- y [migrating-from-v7](https://inversify.io/docs/guides/migrating-from-v7/)).
67
- Lo que toca este código:
68
-
69
- 1. **`ContainerModule`**: el callback recibe ahora un objeto
70
- `ContainerModuleLoadOptions`; se usa `options.bind(...)`. Afecta
71
- `apiInvokerBindings` y `gatewayAdapterBindings`.
72
- ```ts
73
- // v6
74
- export const apiInvokerBindings = new ContainerModule((bind: interfaces.Bind) => {
75
- bind<IDirectoryApi>("IDirectoryApi").to(DirectoryApi);
76
- });
77
- // v8
78
- export const apiInvokerBindings = new ContainerModule((options) => {
79
- options.bind<IDirectoryApi>("IDirectoryApi").to(DirectoryApi);
80
- });
81
- ```
82
- 2. **Namespace `interfaces` eliminado**: importar los tipos directamente.
83
- `interfaces.Context → ResolutionContext`, `interfaces.Factory → Factory`,
84
- `interfaces.Newable → Newable`, `interfaces.Request → BindingConstraints`.
85
- Afecta `import { ContainerModule, interfaces } from "inversify"`.
86
- 3. **`toAutoFactory` eliminado** → reescribir con `toFactory`:
87
- ```ts
88
- // v6 (auth-business)
89
- .toAutoFactory("EventBridgeMessageSubscriber")
90
- // v8
91
- .toFactory((ctx) => () => ctx.get("EventBridgeMessageSubscriber"))
92
- ```
93
- También: `toProvider → toFactory` (con función async),
94
- `toConstructor → toConstantValue`, `toFunction → toConstantValue`.
95
- 4. **`container.load()` SIGUE SIENDO SÍNCRONO en v8** (convención "sync-first":
96
- el nombre por defecto es sync, el async es `loadAsync()`). Como nuestros
97
- módulos de binding son síncronos, **el patrón `const container = new
98
- Container(); container.load(...); export { container }` se conserva** — NO
99
- hay que volverlo async. (En v7 sí era async; v8 lo revirtió, a nuestro favor.)
100
- `container.get()` también sigue síncrono.
101
- 5. **Opciones del `Container`**: `autoBindInjectable → autobind`;
102
- `container.createChild()` → `new Container({ parent })`. Revisar usos.
103
- 6. **`@injectable`/`@inject` sin cambios**; nuevo `@injectFromBase` solo si una
104
- clase hereda de una base injectable (revisar herencia).
105
- 7. **inversify 8 es ESM-only**, pero proyectos CommonJS lo consumen vía
106
- `require(esm)` en **Node 20+**. ⇒ todas las lambdas deben correr en runtime
107
- **Node 20.x o superior**. Verificar el runtime de cada lambda antes de migrar.
108
-
109
- Entregable de esta fase: un **codemod / guía** reproducible para
110
- `container.config.ts` (reescritura de `toAutoFactory`, import de `interfaces`,
111
- firma de `ContainerModule`), ya que el patrón se repite en las 122 lambdas.
112
-
113
- ## 5. Orden de trabajo en las libs (un proyecto a la vez)
114
-
115
- Para cada lib, antes de tocar: `git checkout develop && git pull`.
116
-
117
- 1. **http-client** (hoja, solo `@injectable` en `AxiosHttpRequest`):
118
- migrar a v8, publicar **2.0.0**. dist-tag `latest` → 2.x, `legacy-v6` → 1.x.
119
- 2. **gateway-adapter + api-invoker** (ciclo): migrar el código de ambos a v8 en
120
- ramas, desarrollando con enlaces locales (`npm link` / `file:`) para que
121
- compilen uno contra otro. Publicar coordinado con prerelease:
122
- - `gateway-adapter@2.0.0-rc.0` con dep `@fiado/api-invoker@^4.0.0-rc`
123
- - `api-invoker@4.0.0-rc.0` con dep `@fiado/gateway-adapter@^2.0.0-rc`
124
- - validar en 1 lambda piloto, luego promover a `2.0.0` / `4.0.0` finales.
125
- 3. **logger / type-kit**: sin cambios.
126
-
127
- > **Publicación en espera:** no se publica ninguna lib a npm hasta terminar los
128
- > cambios y tener el visto bueno explícito del usuario.
129
-
130
- ## 6. Política de branching y backport (soporte v6)
131
-
132
- - Cortar una rama de mantenimiento por línea v6 en el último release v6:
133
- `release/3.x` en api-invoker (desde 3.18.0), `release/1.x` en
134
- gateway-adapter y http-client. `develop` pasa a ser la línea v8.
135
- - **Hotfix que toca una lib mientras una lambda sigue en v6:**
136
- 1. El fix se hace en la línea natural y se hace `git cherry-pick` a la otra.
137
- La mayoría de hotfixes (lógica de negocio, no inversify) tienen archivos
138
- idénticos entre líneas → cherry-pick limpio.
139
- 2. Publicar patch en la línea v6 (ej. `3.18.1`) y, si aplica, en la nueva.
140
- 3. La lambda v6 (pineada `^3.x`) hace `npm update` y recibe el fix: cero
141
- cambio de inversify, cero cambio en su `container.config.ts`.
142
- - **Disciplina clave:** mantener el major nuevo como un **diff quirúrgico** sobre
143
- v6 (tocar solo archivos que tocan inversify) para que los cherry-picks no
144
- choquen.
145
- - **Ventana de soporte:** se backportea **solo al último major v6** (api-invoker
146
- 3.x). Las ~80 lambdas aún en `^1.x` deben consolidarse a `^3` como parte de
147
- (o antes de) la migración, porque hoy ya no pueden recibir fixes limpios.
148
-
149
- ## 7. Playbook de migración por lambda (gradual)
150
-
151
- Por cada lambda, en un PR atómico:
152
-
153
- 1. `inversify` 6→8 y `reflect-metadata` a la versión alineada.
154
- 2. Subir el set de libs nuevas: `api-invoker` `^4`, `gateway-adapter` `^2`,
155
- `http-client` `^2`.
156
- 3. Aplicar el codemod/guía a `container.config.ts`: reescribir `toAutoFactory`
157
- → `toFactory`, ajustar imports del namespace `interfaces`. El patrón
158
- síncrono `export { container }` **no cambia** (load/get siguen sync en v8).
159
- 4. Verificar que el runtime de la lambda sea **Node ≥20** (inversify 8 ESM-only).
160
- 5. Correr tests + smoke test del handler. Merge y deploy.
161
-
162
- Las lambdas no migradas siguen en v6 sin cambios.
163
-
164
- ## 8. Riesgos
165
-
166
- - **Divergencia de líneas v6/v8** si el major nuevo refactoriza de más →
167
- mitigado con el "diff quirúrgico".
168
- - **Ciclo api-invoker↔gateway-adapter** en el publish → mitigado con prerelease
169
- rc + dist-tags.
170
- - **Cola de migración larga** (122 lambdas) → mantener línea v6 viva y priorizar
171
- consolidar los `^1.x` a `^3.x`.
172
- - **Runtime Node <20**: inversify 8 es ESM-only; lambdas en Node 18 o menor no
173
- podrán hacer `require(esm)`. Mitigación: auditar y subir a Node 20+ el runtime
174
- de cada lambda como prerrequisito de su PR de migración.
175
- - **Saltar v7→v8 directo** acumula breaking changes; mitigado validando lib por
176
- lib con su smoke test antes de avanzar. (El cambio más riesgoso de v7 —`load`
177
- async— quedó revertido en v8, así que el bootstrap síncrono se conserva.)
178
-
179
- ## 9. Criterios de éxito
180
-
181
- - http-client@2, gateway-adapter@2, api-invoker@4 construidos sobre inversify 8
182
- y validados en 1 lambda piloto (publicación pendiente de visto bueno).
183
- - Línea v6 (`release/*`) capaz de recibir y publicar un hotfix backporteado.
184
- - Guía/codemod de `container.config.ts` documentada y reutilizable.
185
- - Lambdas no migradas siguen desplegando sin cambios.
186
-
187
- ## Seguridad (fuera de alcance, pero a atender)
188
-
189
- `fiado-api-invoker/.npmrc` contiene un token de publicación de npm en texto
190
- plano. Si está versionado, debe **revocarse/rotarse** en npmjs.com y moverse a
191
- una variable de entorno / secret de CI.