@visiion/dci-registry-core 1.0.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 (188) hide show
  1. package/README.md +142 -0
  2. package/dist/controllers/registry-async.controller.d.ts +54 -0
  3. package/dist/controllers/registry-async.controller.js +251 -0
  4. package/dist/controllers/registry-async.controller.js.map +1 -0
  5. package/dist/controllers/registry-sync.controller.d.ts +9 -0
  6. package/dist/controllers/registry-sync.controller.js +106 -0
  7. package/dist/controllers/registry-sync.controller.js.map +1 -0
  8. package/dist/crypto/digest.d.ts +2 -0
  9. package/dist/crypto/digest.js +14 -0
  10. package/dist/crypto/digest.js.map +1 -0
  11. package/dist/crypto/ed25519.d.ts +1 -0
  12. package/dist/crypto/ed25519.js +23 -0
  13. package/dist/crypto/ed25519.js.map +1 -0
  14. package/dist/crypto/signature-header.parser.d.ts +2 -0
  15. package/dist/crypto/signature-header.parser.js +39 -0
  16. package/dist/crypto/signature-header.parser.js.map +1 -0
  17. package/dist/crypto/signature-verifier.d.ts +10 -0
  18. package/dist/crypto/signature-verifier.js +37 -0
  19. package/dist/crypto/signature-verifier.js.map +1 -0
  20. package/dist/dtos/ack.dto.d.ts +5 -0
  21. package/dist/dtos/ack.dto.d.ts.map +1 -0
  22. package/dist/dtos/ack.dto.js +3 -0
  23. package/dist/dtos/ack.dto.js.map +1 -0
  24. package/dist/dtos/encrypted-message.dto.d.ts +12 -0
  25. package/dist/dtos/encrypted-message.dto.js +54 -0
  26. package/dist/dtos/encrypted-message.dto.js.map +1 -0
  27. package/dist/dtos/envelope.dto.d.ts +7 -0
  28. package/dist/dtos/envelope.dto.js +33 -0
  29. package/dist/dtos/envelope.dto.js.map +1 -0
  30. package/dist/dtos/error.dto.d.ts +7 -0
  31. package/dist/dtos/error.dto.js +35 -0
  32. package/dist/dtos/error.dto.js.map +1 -0
  33. package/dist/dtos/header.dto.d.ts +16 -0
  34. package/dist/dtos/header.dto.d.ts.map +1 -0
  35. package/dist/dtos/header.dto.js +87 -0
  36. package/dist/dtos/header.dto.js.map +1 -0
  37. package/dist/dtos/registry-notify.dto.d.ts +17 -0
  38. package/dist/dtos/registry-notify.dto.d.ts.map +1 -0
  39. package/dist/dtos/registry-notify.dto.js +75 -0
  40. package/dist/dtos/registry-notify.dto.js.map +1 -0
  41. package/dist/dtos/registry-search.dto.d.ts +55 -0
  42. package/dist/dtos/registry-search.dto.d.ts.map +1 -0
  43. package/dist/dtos/registry-search.dto.js +176 -0
  44. package/dist/dtos/registry-search.dto.js.map +1 -0
  45. package/dist/dtos/registry-subscribe.dto.d.ts +56 -0
  46. package/dist/dtos/registry-subscribe.dto.d.ts.map +1 -0
  47. package/dist/dtos/registry-subscribe.dto.js +149 -0
  48. package/dist/dtos/registry-subscribe.dto.js.map +1 -0
  49. package/dist/dtos/registry-txn.dto.d.ts +39 -0
  50. package/dist/dtos/registry-txn.dto.d.ts.map +1 -0
  51. package/dist/dtos/registry-txn.dto.js +102 -0
  52. package/dist/dtos/registry-txn.dto.js.map +1 -0
  53. package/dist/dtos/registry-unsubscribe.dto.d.ts +18 -0
  54. package/dist/dtos/registry-unsubscribe.dto.d.ts.map +1 -0
  55. package/dist/dtos/registry-unsubscribe.dto.js +69 -0
  56. package/dist/dtos/registry-unsubscribe.dto.js.map +1 -0
  57. package/dist/dtos/signature.dto.d.ts +9 -0
  58. package/dist/dtos/signature.dto.js +3 -0
  59. package/dist/dtos/signature.dto.js.map +1 -0
  60. package/dist/dtos/status-codes.dto.d.ts +27 -0
  61. package/dist/dtos/status-codes.dto.js +35 -0
  62. package/dist/dtos/status-codes.dto.js.map +1 -0
  63. package/dist/entities/subscription.entity.d.ts +7 -0
  64. package/dist/entities/subscription.entity.d.ts.map +1 -0
  65. package/dist/entities/subscription.entity.js +40 -0
  66. package/dist/entities/subscription.entity.js.map +1 -0
  67. package/dist/entities/transaction.entity.d.ts +8 -0
  68. package/dist/entities/transaction.entity.d.ts.map +1 -0
  69. package/dist/entities/transaction.entity.js +44 -0
  70. package/dist/entities/transaction.entity.js.map +1 -0
  71. package/dist/errors/dci-error.catalog.d.ts +31 -0
  72. package/dist/errors/dci-error.catalog.js +50 -0
  73. package/dist/errors/dci-error.catalog.js.map +1 -0
  74. package/dist/errors/dci-exception.filter.d.ts +5 -0
  75. package/dist/errors/dci-exception.filter.js +47 -0
  76. package/dist/errors/dci-exception.filter.js.map +1 -0
  77. package/dist/handlers/store-notify.handler.d.ts +13 -0
  78. package/dist/handlers/store-notify.handler.js +38 -0
  79. package/dist/handlers/store-notify.handler.js.map +1 -0
  80. package/dist/handlers/store-search.handler.d.ts +21 -0
  81. package/dist/handlers/store-search.handler.js +68 -0
  82. package/dist/handlers/store-search.handler.js.map +1 -0
  83. package/dist/handlers/store-subscribe.handler.d.ts +36 -0
  84. package/dist/handlers/store-subscribe.handler.js +120 -0
  85. package/dist/handlers/store-subscribe.handler.js.map +1 -0
  86. package/dist/handlers/store-txn.handler.d.ts +19 -0
  87. package/dist/handlers/store-txn.handler.js +63 -0
  88. package/dist/handlers/store-txn.handler.js.map +1 -0
  89. package/dist/index.d.ts +54 -0
  90. package/dist/index.js +110 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/interceptors/correlation.interceptor.d.ts +5 -0
  93. package/dist/interceptors/correlation.interceptor.js +28 -0
  94. package/dist/interceptors/correlation.interceptor.js.map +1 -0
  95. package/dist/interceptors/logging.interceptor.d.ts +8 -0
  96. package/dist/interceptors/logging.interceptor.js +52 -0
  97. package/dist/interceptors/logging.interceptor.js.map +1 -0
  98. package/dist/interfaces/dataset-resolver.interface.d.ts +21 -0
  99. package/dist/interfaces/dataset-resolver.interface.js +3 -0
  100. package/dist/interfaces/dataset-resolver.interface.js.map +1 -0
  101. package/dist/interfaces/default-handlers.d.ts +14 -0
  102. package/dist/interfaces/default-handlers.js +41 -0
  103. package/dist/interfaces/default-handlers.js.map +1 -0
  104. package/dist/interfaces/encryption.d.ts +4 -0
  105. package/dist/interfaces/encryption.js +3 -0
  106. package/dist/interfaces/encryption.js.map +1 -0
  107. package/dist/interfaces/handlers.d.ts +45 -0
  108. package/dist/interfaces/handlers.d.ts.map +1 -0
  109. package/dist/interfaces/handlers.js +3 -0
  110. package/dist/interfaces/handlers.js.map +1 -0
  111. package/dist/interfaces/public-key-resolver.d.ts +3 -0
  112. package/dist/interfaces/public-key-resolver.js +3 -0
  113. package/dist/interfaces/public-key-resolver.js.map +1 -0
  114. package/dist/interfaces/subscription-store.interface.d.ts +18 -0
  115. package/dist/interfaces/subscription-store.interface.d.ts.map +1 -0
  116. package/dist/interfaces/subscription-store.interface.js +3 -0
  117. package/dist/interfaces/subscription-store.interface.js.map +1 -0
  118. package/dist/interfaces/transaction-store.interface.d.ts +14 -0
  119. package/dist/interfaces/transaction-store.interface.d.ts.map +1 -0
  120. package/dist/interfaces/transaction-store.interface.js +3 -0
  121. package/dist/interfaces/transaction-store.interface.js.map +1 -0
  122. package/dist/module/dci-registry-core.module.d.ts +5 -0
  123. package/dist/module/dci-registry-core.module.js +109 -0
  124. package/dist/module/dci-registry-core.module.js.map +1 -0
  125. package/dist/module/dci-registry-core.types.d.ts +68 -0
  126. package/dist/module/dci-registry-core.types.d.ts.map +1 -0
  127. package/dist/module/dci-registry-core.types.js +3 -0
  128. package/dist/module/dci-registry-core.types.js.map +1 -0
  129. package/dist/module/tokens.d.ts +19 -0
  130. package/dist/module/tokens.js +23 -0
  131. package/dist/module/tokens.js.map +1 -0
  132. package/dist/modules/dci-subscriptions.module.d.ts +2 -0
  133. package/dist/modules/dci-subscriptions.module.d.ts.map +1 -0
  134. package/dist/modules/dci-subscriptions.module.js +24 -0
  135. package/dist/modules/dci-subscriptions.module.js.map +1 -0
  136. package/dist/modules/dci-transactions.module.d.ts +2 -0
  137. package/dist/modules/dci-transactions.module.d.ts.map +1 -0
  138. package/dist/modules/dci-transactions.module.js +24 -0
  139. package/dist/modules/dci-transactions.module.js.map +1 -0
  140. package/dist/pipes/dci-decrypt-message.pipe.d.ts +13 -0
  141. package/dist/pipes/dci-decrypt-message.pipe.js +40 -0
  142. package/dist/pipes/dci-decrypt-message.pipe.js.map +1 -0
  143. package/dist/pipes/dci-validate-action.pipe.d.ts +11 -0
  144. package/dist/pipes/dci-validate-action.pipe.js +35 -0
  145. package/dist/pipes/dci-validate-action.pipe.js.map +1 -0
  146. package/dist/services/dci-search.service.d.ts +16 -0
  147. package/dist/services/dci-search.service.js +95 -0
  148. package/dist/services/dci-search.service.js.map +1 -0
  149. package/dist/services/subscription-store.service.d.ts +16 -0
  150. package/dist/services/subscription-store.service.d.ts.map +1 -0
  151. package/dist/services/subscription-store.service.js +75 -0
  152. package/dist/services/subscription-store.service.js.map +1 -0
  153. package/dist/services/transaction-store.service.d.ts +12 -0
  154. package/dist/services/transaction-store.service.d.ts.map +1 -0
  155. package/dist/services/transaction-store.service.js +60 -0
  156. package/dist/services/transaction-store.service.js.map +1 -0
  157. package/dist/swagger.d.ts +85 -0
  158. package/dist/swagger.js +75 -0
  159. package/dist/swagger.js.map +1 -0
  160. package/dist/tsconfig.build.tsbuildinfo +1 -0
  161. package/dist/utils/callback-sender.d.ts +15 -0
  162. package/dist/utils/callback-sender.js +31 -0
  163. package/dist/utils/callback-sender.js.map +1 -0
  164. package/dist/utils/callback-url.utils.d.ts +4 -0
  165. package/dist/utils/callback-url.utils.js +7 -0
  166. package/dist/utils/callback-url.utils.js.map +1 -0
  167. package/dist/utils/date.utils.d.ts +2 -0
  168. package/dist/utils/date.utils.d.ts.map +1 -0
  169. package/dist/utils/date.utils.js +22 -0
  170. package/dist/utils/date.utils.js.map +1 -0
  171. package/dist/utils/dci-module-config.d.ts +10 -0
  172. package/dist/utils/dci-module-config.d.ts.map +1 -0
  173. package/dist/utils/dci-module-config.js +19 -0
  174. package/dist/utils/dci-module-config.js.map +1 -0
  175. package/dist/utils/notify-filter.utils.d.ts +5 -0
  176. package/dist/utils/notify-filter.utils.js +41 -0
  177. package/dist/utils/notify-filter.utils.js.map +1 -0
  178. package/dist/utils/search-response.builder.d.ts +6 -0
  179. package/dist/utils/search-response.builder.js +30 -0
  180. package/dist/utils/search-response.builder.js.map +1 -0
  181. package/dist/utils/subscribe-response.builder.d.ts +16 -0
  182. package/dist/utils/subscribe-response.builder.js +47 -0
  183. package/dist/utils/subscribe-response.builder.js.map +1 -0
  184. package/dist/utils/txn-status-response.builder.d.ts +3 -0
  185. package/dist/utils/txn-status-response.builder.d.ts.map +1 -0
  186. package/dist/utils/txn-status-response.builder.js +63 -0
  187. package/dist/utils/txn-status-response.builder.js.map +1 -0
  188. package/package.json +70 -0
package/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # @visiion/dci-registry-core
2
+
3
+ Librería NestJS que implementa la **DCI Registry Core API v1.0.0**.
4
+
5
+ - **Especificación oficial:** [https://api.spdci.org/release/html/registry_core_api_v1.0.0.html](https://api.spdci.org/release/html/registry_core_api_v1.0.0.html)
6
+
7
+ ## Instalación
8
+
9
+ ```bash
10
+ npm install @visiion/dci-registry-core
11
+ ```
12
+
13
+ ## Uso en una app NestJS
14
+
15
+ ### 1. Registrar el módulo
16
+
17
+ ```typescript
18
+ import { Module } from '@nestjs/common';
19
+ import { DciRegistryCoreModule } from '@visiion/dci-registry-core';
20
+ import { MySearchHandler } from './handlers/my-search.handler';
21
+
22
+ @Module({
23
+ imports: [
24
+ DciRegistryCoreModule.register({
25
+ version: '1.0.0',
26
+ strictHeaderValidation: true,
27
+ strictMessageValidation: true,
28
+ crypto: {
29
+ enableSignatureVerification: true,
30
+ algorithm: 'ed25519',
31
+ clockSkewSeconds: 60,
32
+ publicKeyResolver: async (senderId: string, kidId?: string) => {
33
+ // Resolver la clave pública del sender (ej: desde BD, JWKS, etc.)
34
+ return fetchPublicKey(senderId, kidId);
35
+ },
36
+ },
37
+ encryption: {
38
+ enableEncryptionSupport: false,
39
+ decrypt: async () => ({}),
40
+ encrypt: async (p) => p,
41
+ },
42
+ observability: {
43
+ logger: console,
44
+ },
45
+ handlers: {
46
+ search: MySearchHandler,
47
+ onSearch: MyOnSearchHandler,
48
+ syncSearch: MySyncSearchHandler,
49
+ // ... resto de handlers
50
+ },
51
+ }),
52
+ ],
53
+ })
54
+ export class AppModule {}
55
+ ```
56
+
57
+ ### 2. Implementar handlers
58
+
59
+ Cada API consumidora debe implementar los handlers que use:
60
+
61
+ ```typescript
62
+ // my-search.handler.ts
63
+ import { Injectable } from '@nestjs/common';
64
+ import type { SearchHandler } from '@visiion/dci-registry-core';
65
+ import type { SearchRequestDto } from '@visiion/dci-registry-core';
66
+
67
+ @Injectable()
68
+ export class MySearchHandler implements SearchHandler {
69
+ async handleSearch(request, header, rawEnvelope) {
70
+ // Lógica de negocio: validar, buscar en BD, etc.
71
+ // Para async: devolver ACK (o void para ACK por defecto)
72
+ return { status: 'ACK', message_id: header.message_id };
73
+ }
74
+ }
75
+ ```
76
+
77
+ ### 3. Ejemplo de controller funcionando
78
+
79
+ Tras registrar el módulo, los endpoints quedan expuestos automáticamente:
80
+
81
+ - **Async:** `POST /registry/search`, `POST /registry/on-search`, `POST /registry/subscribe`, etc.
82
+ - **Sync:** `POST /registry/sync/search`, `POST /registry/sync/txn/status`
83
+
84
+ ```typescript
85
+ // main.ts
86
+ import { NestFactory } from '@nestjs/core';
87
+ import { AppModule } from './app.module';
88
+
89
+ async function bootstrap() {
90
+ const app = await NestFactory.create(AppModule);
91
+ await app.listen(3000);
92
+ }
93
+ bootstrap();
94
+ ```
95
+
96
+ ## Checklist: qué debe implementar cada API
97
+
98
+ | Rol | Endpoints a implementar | Handlers requeridos |
99
+ |-------|-------------------------|--------------------------|
100
+ | SR | /registry/search, /registry/txn/status, /registry/sync/search, /registry/sync/txn/status | search, txnStatus, syncSearch, syncTxnStatus |
101
+ | SPMIS | /registry/on-search, /registry/on-subscribe, /registry/on-unsubscribe, /registry/txn/on-status | onSearch, onSubscribe, onUnsubscribe, txnOnStatus |
102
+ | Ambos | subscribe, unsubscribe, notify | subscribe, unsubscribe, notify |
103
+
104
+ ## Assumptions
105
+
106
+ 1. **Digest del body:** Se asume que el digest se calcula sobre `JSON.stringify({ header, message })`. El spec no especifica orden de claves; se usa el orden nativo de `JSON.stringify`.
107
+ 2. **Signature en body:** La firma viaja en `envelope.signature`, no en header HTTP `Signature`.
108
+ 3. **ACK por defecto:** Si el handler devuelve `void`, se responde con `{ status: 'ACK', message_id }`.
109
+ 4. **Namespace:** Soporte configurable vía `options.namespace`; paths con namespace no están implementados en los controllers (TODO).
110
+ 5. **EncryptedMessage:** Cuando `is_msg_encrypted=true`, `message` es un `EncryptedMessage`; el pipe de decrypt lo desencripta antes de pasar al handler.
111
+
112
+ ## Security Notes
113
+
114
+ - **Verificación de firma:** Activar `enableSignatureVerification: true` en producción.
115
+ - **Public key resolver:** Implementar resolución segura (JWKS, BD, etc.).
116
+ - **Clock skew:** Ajustar `clockSkewSeconds` según la precisión de relojes entre sistemas.
117
+ - **Logging:** No loguear PII ni payload completo; usar `correlation_id` y `message_id` para trazabilidad.
118
+
119
+ ## Estructura del paquete
120
+
121
+ ```
122
+ src/
123
+ module/ # DynamicModule, tipos, tokens
124
+ controllers/ # registry-async.controller, registry-sync.controller
125
+ dtos/ # envelope, header, signature, message DTOs
126
+ crypto/ # signature parser, digest, ed25519, verifier
127
+ interfaces/ # handlers, public-key-resolver, encryption
128
+ pipes/ # validate-action, decrypt-message
129
+ interceptors/ # correlation, logging
130
+ errors/ # exception filter, error catalog
131
+ ```
132
+
133
+ ## Scripts
134
+
135
+ ```bash
136
+ npm run build # Compila a dist/
137
+ npm test # Ejecuta tests
138
+ ```
139
+
140
+ ## Licencia
141
+
142
+ MIT
@@ -0,0 +1,54 @@
1
+ import { Request } from 'express';
2
+ import type { SearchHandler, OnSearchHandler, SubscribeHandler, OnSubscribeHandler } from '../interfaces/handlers';
3
+ import type { NotifyHandler, UnsubscribeHandler, OnUnsubscribeHandler } from '../interfaces/handlers';
4
+ import type { TxnStatusHandler, TxnOnStatusHandler } from '../interfaces/handlers';
5
+ import type { RawEnvelope } from '../interfaces/handlers';
6
+ export declare class RegistryAsyncController {
7
+ private readonly searchHandler;
8
+ private readonly onSearchHandler;
9
+ private readonly subscribeHandler;
10
+ private readonly onSubscribeHandler;
11
+ private readonly notifyHandler;
12
+ private readonly unsubscribeHandler;
13
+ private readonly onUnsubscribeHandler;
14
+ private readonly txnStatusHandler;
15
+ private readonly txnOnStatusHandler;
16
+ private readonly namespace;
17
+ constructor(searchHandler: SearchHandler, onSearchHandler: OnSearchHandler, subscribeHandler: SubscribeHandler, onSubscribeHandler: OnSubscribeHandler, notifyHandler: NotifyHandler, unsubscribeHandler: UnsubscribeHandler, onUnsubscribeHandler: OnUnsubscribeHandler, txnStatusHandler: TxnStatusHandler, txnOnStatusHandler: TxnOnStatusHandler);
18
+ search(envelope: RawEnvelope, req: Request): Promise<import("..").DciAckResponse | {
19
+ status: "ACK";
20
+ message_id: unknown;
21
+ }>;
22
+ onSearch(envelope: RawEnvelope, req: Request): Promise<import("..").DciAckResponse | {
23
+ status: "ACK";
24
+ message_id: unknown;
25
+ }>;
26
+ subscribe(envelope: RawEnvelope): Promise<import("..").DciAckResponse | {
27
+ status: "ACK";
28
+ message_id: unknown;
29
+ }>;
30
+ onSubscribe(envelope: RawEnvelope): Promise<import("..").DciAckResponse | {
31
+ status: "ACK";
32
+ message_id: unknown;
33
+ }>;
34
+ notify(envelope: RawEnvelope): Promise<import("..").DciAckResponse | {
35
+ status: "ACK";
36
+ message_id: unknown;
37
+ }>;
38
+ unsubscribe(envelope: RawEnvelope): Promise<import("..").DciAckResponse | {
39
+ status: "ACK";
40
+ message_id: unknown;
41
+ }>;
42
+ onUnsubscribe(envelope: RawEnvelope): Promise<import("..").DciAckResponse | {
43
+ status: "ACK";
44
+ message_id: unknown;
45
+ }>;
46
+ txnStatus(envelope: RawEnvelope): Promise<import("..").DciAckResponse | {
47
+ status: "ACK";
48
+ message_id: unknown;
49
+ }>;
50
+ txnOnStatus(envelope: RawEnvelope): Promise<import("..").DciAckResponse | {
51
+ status: "ACK";
52
+ message_id: unknown;
53
+ }>;
54
+ }
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RegistryAsyncController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const swagger_1 = require("@nestjs/swagger");
18
+ const swagger_2 = require("../swagger");
19
+ const dci_validate_action_pipe_1 = require("../pipes/dci-validate-action.pipe");
20
+ const dci_decrypt_message_pipe_1 = require("../pipes/dci-decrypt-message.pipe");
21
+ const correlation_interceptor_1 = require("../interceptors/correlation.interceptor");
22
+ const logging_interceptor_1 = require("../interceptors/logging.interceptor");
23
+ const tokens_1 = require("../module/tokens");
24
+ const ENDPOINT_ACTIONS = {
25
+ search: 'search',
26
+ onSearch: 'on-search',
27
+ subscribe: 'subscribe',
28
+ onSubscribe: 'on-subscribe',
29
+ notify: 'notify',
30
+ unsubscribe: 'unsubscribe',
31
+ onUnsubscribe: 'on-unsubscribe',
32
+ txnStatus: 'txn-status',
33
+ txnOnStatus: 'txn-on-status',
34
+ };
35
+ let RegistryAsyncController = class RegistryAsyncController {
36
+ constructor(searchHandler, onSearchHandler, subscribeHandler, onSubscribeHandler, notifyHandler, unsubscribeHandler, onUnsubscribeHandler, txnStatusHandler, txnOnStatusHandler) {
37
+ this.searchHandler = searchHandler;
38
+ this.onSearchHandler = onSearchHandler;
39
+ this.subscribeHandler = subscribeHandler;
40
+ this.onSubscribeHandler = onSubscribeHandler;
41
+ this.notifyHandler = notifyHandler;
42
+ this.unsubscribeHandler = unsubscribeHandler;
43
+ this.onUnsubscribeHandler = onUnsubscribeHandler;
44
+ this.txnStatusHandler = txnStatusHandler;
45
+ this.txnOnStatusHandler = txnOnStatusHandler;
46
+ }
47
+ async search(envelope, req) {
48
+ const ack = await this.searchHandler.handleSearch(envelope.message, envelope.header, envelope);
49
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
50
+ }
51
+ async onSearch(envelope, req) {
52
+ const ack = await this.onSearchHandler.handleOnSearch(envelope.message, envelope.header, envelope);
53
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
54
+ }
55
+ async subscribe(envelope) {
56
+ const ack = await this.subscribeHandler.handleSubscribe(envelope.message, envelope.header, envelope);
57
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
58
+ }
59
+ async onSubscribe(envelope) {
60
+ const ack = await this.onSubscribeHandler.handleOnSubscribe(envelope.message, envelope.header, envelope);
61
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
62
+ }
63
+ async notify(envelope) {
64
+ const ack = await this.notifyHandler.handleNotify(envelope.message, envelope.header, envelope);
65
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
66
+ }
67
+ async unsubscribe(envelope) {
68
+ const ack = await this.unsubscribeHandler.handleUnsubscribe(envelope.message, envelope.header, envelope);
69
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
70
+ }
71
+ async onUnsubscribe(envelope) {
72
+ const ack = await this.onUnsubscribeHandler.handleOnUnsubscribe(envelope.message, envelope.header, envelope);
73
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
74
+ }
75
+ async txnStatus(envelope) {
76
+ const ack = await this.txnStatusHandler.handleTxnStatus(envelope.message, envelope.header, envelope);
77
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
78
+ }
79
+ async txnOnStatus(envelope) {
80
+ const ack = await this.txnOnStatusHandler.handleTxnOnStatus(envelope.message, envelope.header, envelope);
81
+ return ack ?? { status: 'ACK', message_id: envelope.header?.message_id };
82
+ }
83
+ };
84
+ exports.RegistryAsyncController = RegistryAsyncController;
85
+ __decorate([
86
+ (0, common_1.Post)('registry/search'),
87
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
88
+ (0, swagger_1.ApiTags)('DCI Async'),
89
+ (0, swagger_1.ApiOperation)({
90
+ summary: 'Búsqueda asíncrona DCI - retorna ACK, respuesta vía on-search',
91
+ description: 'DCI Registry Core v1.0: Envelope con action "search". El SR envía SearchRequest; el registry responde 202 ACK y devuelve SearchResponse vía callback POST a on-search del SR.',
92
+ }),
93
+ (0, swagger_1.ApiBody)({
94
+ ...swagger_2.DCI_ENVELOPE_SCHEMA,
95
+ examples: {
96
+ search: {
97
+ summary: 'Buscar en dataset (async)',
98
+ description: 'Mismo formato que sync/search. Retorna ACK, respuesta vía on-search',
99
+ value: swagger_2.DCI_SYNC_SEARCH_EXAMPLE,
100
+ },
101
+ },
102
+ }),
103
+ (0, swagger_1.ApiResponse)({
104
+ status: 202,
105
+ description: 'ACK - búsqueda aceptada',
106
+ schema: { type: 'object', properties: { status: { example: 'ACK' }, message_id: { type: 'string' } } },
107
+ }),
108
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.search), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
109
+ __param(0, (0, common_1.Body)()),
110
+ __param(1, (0, common_1.Req)()),
111
+ __metadata("design:type", Function),
112
+ __metadata("design:paramtypes", [Object, Object]),
113
+ __metadata("design:returntype", Promise)
114
+ ], RegistryAsyncController.prototype, "search", null);
115
+ __decorate([
116
+ (0, common_1.Post)('registry/on-search'),
117
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
118
+ (0, swagger_1.ApiTags)('DCI Callbacks'),
119
+ (0, swagger_1.ApiOperation)({
120
+ summary: 'Respuesta a búsqueda asíncrona',
121
+ description: 'DCI Registry Core v1.0: Envelope con action "on-search". El SPMIS/registry envía SearchResponse al SR como callback. El SR recibe los registros aquí.',
122
+ }),
123
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
124
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.onSearch), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
125
+ __param(0, (0, common_1.Body)()),
126
+ __param(1, (0, common_1.Req)()),
127
+ __metadata("design:type", Function),
128
+ __metadata("design:paramtypes", [Object, Object]),
129
+ __metadata("design:returntype", Promise)
130
+ ], RegistryAsyncController.prototype, "onSearch", null);
131
+ __decorate([
132
+ (0, common_1.Post)('registry/subscribe'),
133
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
134
+ (0, swagger_1.ApiTags)('DCI Async'),
135
+ (0, swagger_1.ApiOperation)({
136
+ summary: 'Suscribirse a eventos',
137
+ description: 'DCI Registry Core v1.0: Envelope con action "subscribe". El SR se suscribe a eventos del registry. Recibe 202 ACK; respuesta en on-subscribe.',
138
+ }),
139
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
140
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.subscribe), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
141
+ __param(0, (0, common_1.Body)()),
142
+ __metadata("design:type", Function),
143
+ __metadata("design:paramtypes", [Object]),
144
+ __metadata("design:returntype", Promise)
145
+ ], RegistryAsyncController.prototype, "subscribe", null);
146
+ __decorate([
147
+ (0, common_1.Post)('registry/on-subscribe'),
148
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
149
+ (0, swagger_1.ApiTags)('DCI Callbacks'),
150
+ (0, swagger_1.ApiOperation)({
151
+ summary: 'Respuesta a suscripción',
152
+ description: 'DCI Registry Core v1.0: Envelope con action "on-subscribe". El registry envía respuesta a la suscripción del SR. Incluye subscription_code para futuras notificaciones.',
153
+ }),
154
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
155
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.onSubscribe), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
156
+ __param(0, (0, common_1.Body)()),
157
+ __metadata("design:type", Function),
158
+ __metadata("design:paramtypes", [Object]),
159
+ __metadata("design:returntype", Promise)
160
+ ], RegistryAsyncController.prototype, "onSubscribe", null);
161
+ __decorate([
162
+ (0, common_1.Post)('registry/notify'),
163
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
164
+ (0, swagger_1.ApiTags)('DCI Async'),
165
+ (0, swagger_1.ApiOperation)({
166
+ summary: 'Notificación de evento',
167
+ description: 'DCI Registry Core v1.0: Envelope con action "notify". El registry notifica al SR sobre eventos (ej. nuevos registros). Requiere suscripción previa.',
168
+ }),
169
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
170
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.notify), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
171
+ __param(0, (0, common_1.Body)()),
172
+ __metadata("design:type", Function),
173
+ __metadata("design:paramtypes", [Object]),
174
+ __metadata("design:returntype", Promise)
175
+ ], RegistryAsyncController.prototype, "notify", null);
176
+ __decorate([
177
+ (0, common_1.Post)('registry/unsubscribe'),
178
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
179
+ (0, swagger_1.ApiTags)('DCI Async'),
180
+ (0, swagger_1.ApiOperation)({
181
+ summary: 'Cancelar suscripción',
182
+ description: 'DCI Registry Core v1.0: Envelope con action "unsubscribe". El SR cancela una suscripción. Requiere subscription_code de la suscripción original.',
183
+ }),
184
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
185
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.unsubscribe), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
186
+ __param(0, (0, common_1.Body)()),
187
+ __metadata("design:type", Function),
188
+ __metadata("design:paramtypes", [Object]),
189
+ __metadata("design:returntype", Promise)
190
+ ], RegistryAsyncController.prototype, "unsubscribe", null);
191
+ __decorate([
192
+ (0, common_1.Post)('registry/on-unsubscribe'),
193
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
194
+ (0, swagger_1.ApiTags)('DCI Callbacks'),
195
+ (0, swagger_1.ApiOperation)({
196
+ summary: 'Respuesta a cancelación de suscripción',
197
+ description: 'DCI Registry Core v1.0: Envelope con action "on-unsubscribe". El registry confirma la cancelación de la suscripción al SR.',
198
+ }),
199
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
200
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.onUnsubscribe), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
201
+ __param(0, (0, common_1.Body)()),
202
+ __metadata("design:type", Function),
203
+ __metadata("design:paramtypes", [Object]),
204
+ __metadata("design:returntype", Promise)
205
+ ], RegistryAsyncController.prototype, "onUnsubscribe", null);
206
+ __decorate([
207
+ (0, common_1.Post)('registry/txn/status'),
208
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
209
+ (0, swagger_1.ApiTags)('DCI Async'),
210
+ (0, swagger_1.ApiOperation)({
211
+ summary: 'Estado de transacción (async)',
212
+ description: 'DCI Registry Core v1.0: Envelope con action "txn-status". El SR consulta estado de una transacción. Retorna 202 ACK; respuesta en txn/on-status.',
213
+ }),
214
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
215
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.txnStatus), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
216
+ __param(0, (0, common_1.Body)()),
217
+ __metadata("design:type", Function),
218
+ __metadata("design:paramtypes", [Object]),
219
+ __metadata("design:returntype", Promise)
220
+ ], RegistryAsyncController.prototype, "txnStatus", null);
221
+ __decorate([
222
+ (0, common_1.Post)('registry/txn/on-status'),
223
+ (0, common_1.HttpCode)(common_1.HttpStatus.ACCEPTED),
224
+ (0, swagger_1.ApiTags)('DCI Callbacks'),
225
+ (0, swagger_1.ApiOperation)({
226
+ summary: 'Respuesta a estado de transacción',
227
+ description: 'DCI Registry Core v1.0: Envelope con action "txn-on-status". El registry envía TxnStatusResponse al SR como callback. Retorna 202 ACK.',
228
+ }),
229
+ (0, swagger_1.ApiBody)(swagger_2.DCI_ENVELOPE_SCHEMA),
230
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe(ENDPOINT_ACTIONS.txnOnStatus), dci_decrypt_message_pipe_1.DciDecryptMessagePipe),
231
+ __param(0, (0, common_1.Body)()),
232
+ __metadata("design:type", Function),
233
+ __metadata("design:paramtypes", [Object]),
234
+ __metadata("design:returntype", Promise)
235
+ ], RegistryAsyncController.prototype, "txnOnStatus", null);
236
+ exports.RegistryAsyncController = RegistryAsyncController = __decorate([
237
+ (0, swagger_2.ApiDciAuthAndErrors)(),
238
+ (0, common_1.Controller)(),
239
+ (0, common_1.UseInterceptors)(correlation_interceptor_1.CorrelationInterceptor, logging_interceptor_1.LoggingInterceptor),
240
+ __param(0, (0, common_1.Inject)(tokens_1.DCI_SEARCH_HANDLER)),
241
+ __param(1, (0, common_1.Inject)(tokens_1.DCI_ON_SEARCH_HANDLER)),
242
+ __param(2, (0, common_1.Inject)(tokens_1.DCI_SUBSCRIBE_HANDLER)),
243
+ __param(3, (0, common_1.Inject)(tokens_1.DCI_ON_SUBSCRIBE_HANDLER)),
244
+ __param(4, (0, common_1.Inject)(tokens_1.DCI_NOTIFY_HANDLER)),
245
+ __param(5, (0, common_1.Inject)(tokens_1.DCI_UNSUBSCRIBE_HANDLER)),
246
+ __param(6, (0, common_1.Inject)(tokens_1.DCI_ON_UNSUBSCRIBE_HANDLER)),
247
+ __param(7, (0, common_1.Inject)(tokens_1.DCI_TXN_STATUS_HANDLER)),
248
+ __param(8, (0, common_1.Inject)(tokens_1.DCI_TXN_ON_STATUS_HANDLER)),
249
+ __metadata("design:paramtypes", [Object, Object, Object, Object, Object, Object, Object, Object, Object])
250
+ ], RegistryAsyncController);
251
+ //# sourceMappingURL=registry-async.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-async.controller.js","sourceRoot":"","sources":["../../src/controllers/registry-async.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,2CAUwB;AACxB,6CAA8E;AAE9E,wCAA+F;AAC/F,gFAA0E;AAC1E,gFAA0E;AAC1E,qFAAiF;AACjF,6EAAyE;AACzE,6CAU0B;AAK1B,MAAM,gBAAgB,GAA2B;IAC/C,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,cAAc;IAC3B,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,gBAAgB;IAC/B,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,eAAe;CAC7B,CAAC;AAKK,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAGlC,YAEmB,aAA4B,EAE5B,eAAgC,EAEhC,gBAAkC,EAElC,kBAAsC,EAEtC,aAA4B,EAE5B,kBAAsC,EAEtC,oBAA0C,EAE1C,gBAAkC,EAElC,kBAAsC;QAhBtC,kBAAa,GAAb,aAAa,CAAe;QAE5B,oBAAe,GAAf,eAAe,CAAiB;QAEhC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAElC,uBAAkB,GAAlB,kBAAkB,CAAoB;QAEtC,kBAAa,GAAb,aAAa,CAAe;QAE5B,uBAAkB,GAAlB,kBAAkB,CAAoB;QAEtC,yBAAoB,GAApB,oBAAoB,CAAsB;QAE1C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAElC,uBAAkB,GAAlB,kBAAkB,CAAoB;IACtD,CAAC;IA4BE,AAAN,KAAK,CAAC,MAAM,CAAS,QAAqB,EAAS,GAAY;QAC7D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAC/C,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,QAAQ,CAAS,QAAqB,EAAS,GAAY;QAC/D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CACnD,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,SAAS,CAAS,QAAqB;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACrD,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,WAAW,CAAS,QAAqB;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CACzD,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,MAAM,CAAS,QAAqB;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAC/C,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,WAAW,CAAS,QAAqB;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CACzD,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,aAAa,CAAS,QAAqB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAC7D,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,SAAS,CAAS,QAAqB;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACrD,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;IAcK,AAAN,KAAK,CAAC,WAAW,CAAS,QAAqB;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CACzD,QAAQ,CAAC,OAAgB,EACzB,QAAQ,CAAC,MAAe,EACxB,QAAQ,CACT,CAAC;QACF,OAAO,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;IAC3E,CAAC;CACF,CAAA;AAlOY,0DAAuB;AAkD5B;IA1BL,IAAA,aAAI,EAAC,iBAAiB,CAAC;IACvB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,WAAW,CAAC;IACpB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,+DAA+D;QACxE,WAAW,EAAE,+KAA+K;KAC7L,CAAC;IACD,IAAA,iBAAO,EAAC;QACP,GAAG,6BAAmB;QACtB,QAAQ,EAAE;YACR,MAAM,EAAE;gBACN,OAAO,EAAE,2BAA2B;gBACpC,WAAW,EAAE,qEAAqE;gBAClF,KAAK,EAAE,iCAAuB;aAC/B;SACF;KACF,CAAC;IACD,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,GAAG;QACX,WAAW,EAAE,yBAAyB;QACtC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;KACvG,CAAC;IACD,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAClD,gDAAqB,CACtB;IACa,WAAA,IAAA,aAAI,GAAE,CAAA;IAAyB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAOjD;AAcK;IAZL,IAAA,aAAI,EAAC,oBAAoB,CAAC;IAC1B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,eAAe,CAAC;IACxB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,gCAAgC;QACzC,WAAW,EAAE,uJAAuJ;KACrK,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACpD,gDAAqB,CACtB;IACe,WAAA,IAAA,aAAI,GAAE,CAAA;IAAyB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;uDAOnD;AAcK;IAZL,IAAA,aAAI,EAAC,oBAAoB,CAAC;IAC1B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,WAAW,CAAC;IACpB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,uBAAuB;QAChC,WAAW,EAAE,+IAA+I;KAC7J,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACrD,gDAAqB,CACtB;IACgB,WAAA,IAAA,aAAI,GAAE,CAAA;;;;wDAOtB;AAcK;IAZL,IAAA,aAAI,EAAC,uBAAuB,CAAC;IAC7B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,eAAe,CAAC;IACxB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,yBAAyB;QAClC,WAAW,EAAE,yKAAyK;KACvL,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,WAAW,CAAC,EACvD,gDAAqB,CACtB;IACkB,WAAA,IAAA,aAAI,GAAE,CAAA;;;;0DAOxB;AAcK;IAZL,IAAA,aAAI,EAAC,iBAAiB,CAAC;IACvB,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,WAAW,CAAC;IACpB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,wBAAwB;QACjC,WAAW,EAAE,qJAAqJ;KACnK,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAClD,gDAAqB,CACtB;IACa,WAAA,IAAA,aAAI,GAAE,CAAA;;;;qDAOnB;AAcK;IAZL,IAAA,aAAI,EAAC,sBAAsB,CAAC;IAC5B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,WAAW,CAAC;IACpB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,sBAAsB;QAC/B,WAAW,EAAE,kJAAkJ;KAChK,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,WAAW,CAAC,EACvD,gDAAqB,CACtB;IACkB,WAAA,IAAA,aAAI,GAAE,CAAA;;;;0DAOxB;AAcK;IAZL,IAAA,aAAI,EAAC,yBAAyB,CAAC;IAC/B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,eAAe,CAAC;IACxB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,wCAAwC;QACjD,WAAW,EAAE,4HAA4H;KAC1I,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,aAAa,CAAC,EACzD,gDAAqB,CACtB;IACoB,WAAA,IAAA,aAAI,GAAE,CAAA;;;;4DAO1B;AAcK;IAZL,IAAA,aAAI,EAAC,qBAAqB,CAAC;IAC3B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,WAAW,CAAC;IACpB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,+BAA+B;QACxC,WAAW,EAAE,kJAAkJ;KAChK,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,SAAS,CAAC,EACrD,gDAAqB,CACtB;IACgB,WAAA,IAAA,aAAI,GAAE,CAAA;;;;wDAOtB;AAcK;IAZL,IAAA,aAAI,EAAC,wBAAwB,CAAC;IAC9B,IAAA,iBAAQ,EAAC,mBAAU,CAAC,QAAQ,CAAC;IAC7B,IAAA,iBAAO,EAAC,eAAe,CAAC;IACxB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,mCAAmC;QAC5C,WAAW,EAAE,wIAAwI;KACtJ,CAAC;IACD,IAAA,iBAAO,EAAC,6BAAmB,CAAC;IAC5B,IAAA,iBAAQ,EACP,IAAI,gDAAqB,CAAC,gBAAgB,CAAC,WAAW,CAAC,EACvD,gDAAqB,CACtB;IACkB,WAAA,IAAA,aAAI,GAAE,CAAA;;;;0DAOxB;kCAjOU,uBAAuB;IAHnC,IAAA,6BAAmB,GAAE;IACrB,IAAA,mBAAU,GAAE;IACZ,IAAA,wBAAe,EAAC,gDAAsB,EAAE,wCAAkB,CAAC;IAKvD,WAAA,IAAA,eAAM,EAAC,2BAAkB,CAAC,CAAA;IAE1B,WAAA,IAAA,eAAM,EAAC,8BAAqB,CAAC,CAAA;IAE7B,WAAA,IAAA,eAAM,EAAC,8BAAqB,CAAC,CAAA;IAE7B,WAAA,IAAA,eAAM,EAAC,iCAAwB,CAAC,CAAA;IAEhC,WAAA,IAAA,eAAM,EAAC,2BAAkB,CAAC,CAAA;IAE1B,WAAA,IAAA,eAAM,EAAC,gCAAuB,CAAC,CAAA;IAE/B,WAAA,IAAA,eAAM,EAAC,mCAA0B,CAAC,CAAA;IAElC,WAAA,IAAA,eAAM,EAAC,+BAAsB,CAAC,CAAA;IAE9B,WAAA,IAAA,eAAM,EAAC,kCAAyB,CAAC,CAAA;;GApBzB,uBAAuB,CAkOnC"}
@@ -0,0 +1,9 @@
1
+ import type { SyncSearchHandler, SyncTxnStatusHandler } from '../interfaces/handlers';
2
+ import type { RawEnvelope } from '../interfaces/handlers';
3
+ export declare class RegistrySyncController {
4
+ private readonly syncSearchHandler;
5
+ private readonly syncTxnStatusHandler;
6
+ constructor(syncSearchHandler: SyncSearchHandler, syncTxnStatusHandler: SyncTxnStatusHandler);
7
+ syncSearch(envelope: RawEnvelope): Promise<import("..").SearchResponseDto>;
8
+ syncTxnStatus(envelope: RawEnvelope): Promise<import("..").TxnStatusResponseDto>;
9
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RegistrySyncController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const swagger_1 = require("@nestjs/swagger");
18
+ const dci_validate_action_pipe_1 = require("../pipes/dci-validate-action.pipe");
19
+ const dci_decrypt_message_pipe_1 = require("../pipes/dci-decrypt-message.pipe");
20
+ const correlation_interceptor_1 = require("../interceptors/correlation.interceptor");
21
+ const logging_interceptor_1 = require("../interceptors/logging.interceptor");
22
+ const tokens_1 = require("../module/tokens");
23
+ const swagger_2 = require("../swagger");
24
+ let RegistrySyncController = class RegistrySyncController {
25
+ constructor(syncSearchHandler, syncTxnStatusHandler) {
26
+ this.syncSearchHandler = syncSearchHandler;
27
+ this.syncTxnStatusHandler = syncTxnStatusHandler;
28
+ }
29
+ async syncSearch(envelope) {
30
+ return this.syncSearchHandler.handleSyncSearch(envelope.message, envelope.header, envelope);
31
+ }
32
+ async syncTxnStatus(envelope) {
33
+ return this.syncTxnStatusHandler.handleSyncTxnStatus(envelope.message, envelope.header, envelope);
34
+ }
35
+ };
36
+ exports.RegistrySyncController = RegistrySyncController;
37
+ __decorate([
38
+ (0, common_1.Post)('registry/sync/search'),
39
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
40
+ (0, swagger_1.ApiOperation)({
41
+ summary: 'Búsqueda síncrona DCI - retorna registros inmediatamente',
42
+ description: 'DCI Registry Core v1.0: Envelope con action "search". El SR envía SearchRequest y recibe SearchResponse en la misma petición. message.search_request[].search_criteria define query, filters, pagination.',
43
+ }),
44
+ (0, swagger_1.ApiBody)({
45
+ ...swagger_2.DCI_ENVELOPE_SCHEMA,
46
+ examples: {
47
+ syncSearch: {
48
+ summary: 'Buscar en dataset MINSA',
49
+ description: 'query.dataset_id + query.filters (eq, contains, in)',
50
+ value: swagger_2.DCI_SYNC_SEARCH_EXAMPLE,
51
+ },
52
+ },
53
+ }),
54
+ (0, swagger_1.ApiResponse)({
55
+ status: 200,
56
+ description: 'SearchResponse con reg_records',
57
+ schema: {
58
+ type: 'object',
59
+ properties: {
60
+ transaction_id: { type: 'string' },
61
+ correlation_id: { type: 'string' },
62
+ search_response: {
63
+ type: 'array',
64
+ items: {
65
+ type: 'object',
66
+ properties: {
67
+ reference_id: { type: 'string' },
68
+ status: { type: 'string', example: 'rcvd' },
69
+ data: { type: 'object' },
70
+ pagination: { type: 'object' },
71
+ },
72
+ },
73
+ },
74
+ },
75
+ },
76
+ }),
77
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe('search'), new dci_decrypt_message_pipe_1.DciDecryptMessagePipe()),
78
+ __param(0, (0, common_1.Body)()),
79
+ __metadata("design:type", Function),
80
+ __metadata("design:paramtypes", [Object]),
81
+ __metadata("design:returntype", Promise)
82
+ ], RegistrySyncController.prototype, "syncSearch", null);
83
+ __decorate([
84
+ (0, common_1.Post)('registry/sync/txn/status'),
85
+ (0, common_1.HttpCode)(common_1.HttpStatus.OK),
86
+ (0, swagger_1.ApiOperation)({
87
+ summary: 'Estado de transacción DCI (sync)',
88
+ description: 'DCI Registry Core v1.0: Envelope con action "txn-status". Consulta síncrona del estado de una transacción. Retorna TxnStatusResponse en la misma petición.',
89
+ }),
90
+ (0, swagger_1.ApiBody)({ ...swagger_2.DCI_ENVELOPE_SCHEMA, description: 'Envelope con action: txn-status' }),
91
+ (0, common_1.UsePipes)(new dci_validate_action_pipe_1.DciValidateActionPipe('txn-status'), new dci_decrypt_message_pipe_1.DciDecryptMessagePipe()),
92
+ __param(0, (0, common_1.Body)()),
93
+ __metadata("design:type", Function),
94
+ __metadata("design:paramtypes", [Object]),
95
+ __metadata("design:returntype", Promise)
96
+ ], RegistrySyncController.prototype, "syncTxnStatus", null);
97
+ exports.RegistrySyncController = RegistrySyncController = __decorate([
98
+ (0, swagger_1.ApiTags)('DCI Sync'),
99
+ (0, swagger_2.ApiDciAuthAndErrors)(),
100
+ (0, common_1.Controller)(),
101
+ (0, common_1.UseInterceptors)(correlation_interceptor_1.CorrelationInterceptor, logging_interceptor_1.LoggingInterceptor),
102
+ __param(0, (0, common_1.Inject)(tokens_1.DCI_SYNC_SEARCH_HANDLER)),
103
+ __param(1, (0, common_1.Inject)(tokens_1.DCI_SYNC_TXN_STATUS_HANDLER)),
104
+ __metadata("design:paramtypes", [Object, Object])
105
+ ], RegistrySyncController);
106
+ //# sourceMappingURL=registry-sync.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-sync.controller.js","sourceRoot":"","sources":["../../src/controllers/registry-sync.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function computeSha256Digest(body: string | Buffer): string;
2
+ export declare function buildSigningContent(created: string, expires: string, bodyDigest: string): string;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.computeSha256Digest = computeSha256Digest;
4
+ exports.buildSigningContent = buildSigningContent;
5
+ const crypto_1 = require("crypto");
6
+ function computeSha256Digest(body) {
7
+ const hash = (0, crypto_1.createHash)('sha256');
8
+ hash.update(typeof body === 'string' ? body : body.toString('utf8'));
9
+ return hash.digest('base64');
10
+ }
11
+ function buildSigningContent(created, expires, bodyDigest) {
12
+ return `(created): ${created}\n(expires): ${expires}\ndigest: SHA-256=${bodyDigest}`;
13
+ }
14
+ //# sourceMappingURL=digest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"digest.js","sourceRoot":"","sources":["../../src/crypto/digest.ts"],"names":[],"mappings":";;AAUA,kDAIC;AAKD,kDAMC;AArBD,mCAAoC;AAMpC,SAAgB,mBAAmB,CAAC,IAAqB;IACvD,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAKD,SAAgB,mBAAmB,CACjC,OAAe,EACf,OAAe,EACf,UAAkB;IAElB,OAAO,cAAc,OAAO,gBAAgB,OAAO,qBAAqB,UAAU,EAAE,CAAC;AACvF,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function verifyEd25519(message: Uint8Array | string, signature: string, publicKey: string): boolean;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.verifyEd25519 = verifyEd25519;
7
+ const tweetnacl_1 = __importDefault(require("tweetnacl"));
8
+ function decodeBase64(str) {
9
+ return new Uint8Array(Buffer.from(str, 'base64'));
10
+ }
11
+ function verifyEd25519(message, signature, publicKey) {
12
+ const sigBytes = decodeBase64(signature);
13
+ const keyBytes = decodeBase64(publicKey);
14
+ if (sigBytes.length !== tweetnacl_1.default.sign.signatureLength) {
15
+ return false;
16
+ }
17
+ if (keyBytes.length !== tweetnacl_1.default.sign.publicKeyLength) {
18
+ return false;
19
+ }
20
+ const msgBytes = typeof message === 'string' ? new TextEncoder().encode(message) : message;
21
+ return tweetnacl_1.default.sign.detached.verify(msgBytes, sigBytes, keyBytes);
22
+ }
23
+ //# sourceMappingURL=ed25519.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/crypto/ed25519.ts"],"names":[],"mappings":";;;;;AAeA,sCAiBC;AA7BD,0DAA6B;AAE7B,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACpD,CAAC;AAQD,SAAgB,aAAa,CAC3B,OAA4B,EAC5B,SAAiB,EACjB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAEzC,IAAI,QAAQ,CAAC,MAAM,KAAK,mBAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,mBAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3F,OAAO,mBAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ParsedSignature } from '../dtos/signature.dto';
2
+ export declare function parseSignatureHeader(headerValue: string): ParsedSignature;