@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.
- package/README.md +142 -0
- package/dist/controllers/registry-async.controller.d.ts +54 -0
- package/dist/controllers/registry-async.controller.js +251 -0
- package/dist/controllers/registry-async.controller.js.map +1 -0
- package/dist/controllers/registry-sync.controller.d.ts +9 -0
- package/dist/controllers/registry-sync.controller.js +106 -0
- package/dist/controllers/registry-sync.controller.js.map +1 -0
- package/dist/crypto/digest.d.ts +2 -0
- package/dist/crypto/digest.js +14 -0
- package/dist/crypto/digest.js.map +1 -0
- package/dist/crypto/ed25519.d.ts +1 -0
- package/dist/crypto/ed25519.js +23 -0
- package/dist/crypto/ed25519.js.map +1 -0
- package/dist/crypto/signature-header.parser.d.ts +2 -0
- package/dist/crypto/signature-header.parser.js +39 -0
- package/dist/crypto/signature-header.parser.js.map +1 -0
- package/dist/crypto/signature-verifier.d.ts +10 -0
- package/dist/crypto/signature-verifier.js +37 -0
- package/dist/crypto/signature-verifier.js.map +1 -0
- package/dist/dtos/ack.dto.d.ts +5 -0
- package/dist/dtos/ack.dto.d.ts.map +1 -0
- package/dist/dtos/ack.dto.js +3 -0
- package/dist/dtos/ack.dto.js.map +1 -0
- package/dist/dtos/encrypted-message.dto.d.ts +12 -0
- package/dist/dtos/encrypted-message.dto.js +54 -0
- package/dist/dtos/encrypted-message.dto.js.map +1 -0
- package/dist/dtos/envelope.dto.d.ts +7 -0
- package/dist/dtos/envelope.dto.js +33 -0
- package/dist/dtos/envelope.dto.js.map +1 -0
- package/dist/dtos/error.dto.d.ts +7 -0
- package/dist/dtos/error.dto.js +35 -0
- package/dist/dtos/error.dto.js.map +1 -0
- package/dist/dtos/header.dto.d.ts +16 -0
- package/dist/dtos/header.dto.d.ts.map +1 -0
- package/dist/dtos/header.dto.js +87 -0
- package/dist/dtos/header.dto.js.map +1 -0
- package/dist/dtos/registry-notify.dto.d.ts +17 -0
- package/dist/dtos/registry-notify.dto.d.ts.map +1 -0
- package/dist/dtos/registry-notify.dto.js +75 -0
- package/dist/dtos/registry-notify.dto.js.map +1 -0
- package/dist/dtos/registry-search.dto.d.ts +55 -0
- package/dist/dtos/registry-search.dto.d.ts.map +1 -0
- package/dist/dtos/registry-search.dto.js +176 -0
- package/dist/dtos/registry-search.dto.js.map +1 -0
- package/dist/dtos/registry-subscribe.dto.d.ts +56 -0
- package/dist/dtos/registry-subscribe.dto.d.ts.map +1 -0
- package/dist/dtos/registry-subscribe.dto.js +149 -0
- package/dist/dtos/registry-subscribe.dto.js.map +1 -0
- package/dist/dtos/registry-txn.dto.d.ts +39 -0
- package/dist/dtos/registry-txn.dto.d.ts.map +1 -0
- package/dist/dtos/registry-txn.dto.js +102 -0
- package/dist/dtos/registry-txn.dto.js.map +1 -0
- package/dist/dtos/registry-unsubscribe.dto.d.ts +18 -0
- package/dist/dtos/registry-unsubscribe.dto.d.ts.map +1 -0
- package/dist/dtos/registry-unsubscribe.dto.js +69 -0
- package/dist/dtos/registry-unsubscribe.dto.js.map +1 -0
- package/dist/dtos/signature.dto.d.ts +9 -0
- package/dist/dtos/signature.dto.js +3 -0
- package/dist/dtos/signature.dto.js.map +1 -0
- package/dist/dtos/status-codes.dto.d.ts +27 -0
- package/dist/dtos/status-codes.dto.js +35 -0
- package/dist/dtos/status-codes.dto.js.map +1 -0
- package/dist/entities/subscription.entity.d.ts +7 -0
- package/dist/entities/subscription.entity.d.ts.map +1 -0
- package/dist/entities/subscription.entity.js +40 -0
- package/dist/entities/subscription.entity.js.map +1 -0
- package/dist/entities/transaction.entity.d.ts +8 -0
- package/dist/entities/transaction.entity.d.ts.map +1 -0
- package/dist/entities/transaction.entity.js +44 -0
- package/dist/entities/transaction.entity.js.map +1 -0
- package/dist/errors/dci-error.catalog.d.ts +31 -0
- package/dist/errors/dci-error.catalog.js +50 -0
- package/dist/errors/dci-error.catalog.js.map +1 -0
- package/dist/errors/dci-exception.filter.d.ts +5 -0
- package/dist/errors/dci-exception.filter.js +47 -0
- package/dist/errors/dci-exception.filter.js.map +1 -0
- package/dist/handlers/store-notify.handler.d.ts +13 -0
- package/dist/handlers/store-notify.handler.js +38 -0
- package/dist/handlers/store-notify.handler.js.map +1 -0
- package/dist/handlers/store-search.handler.d.ts +21 -0
- package/dist/handlers/store-search.handler.js +68 -0
- package/dist/handlers/store-search.handler.js.map +1 -0
- package/dist/handlers/store-subscribe.handler.d.ts +36 -0
- package/dist/handlers/store-subscribe.handler.js +120 -0
- package/dist/handlers/store-subscribe.handler.js.map +1 -0
- package/dist/handlers/store-txn.handler.d.ts +19 -0
- package/dist/handlers/store-txn.handler.js +63 -0
- package/dist/handlers/store-txn.handler.js.map +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +110 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/correlation.interceptor.d.ts +5 -0
- package/dist/interceptors/correlation.interceptor.js +28 -0
- package/dist/interceptors/correlation.interceptor.js.map +1 -0
- package/dist/interceptors/logging.interceptor.d.ts +8 -0
- package/dist/interceptors/logging.interceptor.js +52 -0
- package/dist/interceptors/logging.interceptor.js.map +1 -0
- package/dist/interfaces/dataset-resolver.interface.d.ts +21 -0
- package/dist/interfaces/dataset-resolver.interface.js +3 -0
- package/dist/interfaces/dataset-resolver.interface.js.map +1 -0
- package/dist/interfaces/default-handlers.d.ts +14 -0
- package/dist/interfaces/default-handlers.js +41 -0
- package/dist/interfaces/default-handlers.js.map +1 -0
- package/dist/interfaces/encryption.d.ts +4 -0
- package/dist/interfaces/encryption.js +3 -0
- package/dist/interfaces/encryption.js.map +1 -0
- package/dist/interfaces/handlers.d.ts +45 -0
- package/dist/interfaces/handlers.d.ts.map +1 -0
- package/dist/interfaces/handlers.js +3 -0
- package/dist/interfaces/handlers.js.map +1 -0
- package/dist/interfaces/public-key-resolver.d.ts +3 -0
- package/dist/interfaces/public-key-resolver.js +3 -0
- package/dist/interfaces/public-key-resolver.js.map +1 -0
- package/dist/interfaces/subscription-store.interface.d.ts +18 -0
- package/dist/interfaces/subscription-store.interface.d.ts.map +1 -0
- package/dist/interfaces/subscription-store.interface.js +3 -0
- package/dist/interfaces/subscription-store.interface.js.map +1 -0
- package/dist/interfaces/transaction-store.interface.d.ts +14 -0
- package/dist/interfaces/transaction-store.interface.d.ts.map +1 -0
- package/dist/interfaces/transaction-store.interface.js +3 -0
- package/dist/interfaces/transaction-store.interface.js.map +1 -0
- package/dist/module/dci-registry-core.module.d.ts +5 -0
- package/dist/module/dci-registry-core.module.js +109 -0
- package/dist/module/dci-registry-core.module.js.map +1 -0
- package/dist/module/dci-registry-core.types.d.ts +68 -0
- package/dist/module/dci-registry-core.types.d.ts.map +1 -0
- package/dist/module/dci-registry-core.types.js +3 -0
- package/dist/module/dci-registry-core.types.js.map +1 -0
- package/dist/module/tokens.d.ts +19 -0
- package/dist/module/tokens.js +23 -0
- package/dist/module/tokens.js.map +1 -0
- package/dist/modules/dci-subscriptions.module.d.ts +2 -0
- package/dist/modules/dci-subscriptions.module.d.ts.map +1 -0
- package/dist/modules/dci-subscriptions.module.js +24 -0
- package/dist/modules/dci-subscriptions.module.js.map +1 -0
- package/dist/modules/dci-transactions.module.d.ts +2 -0
- package/dist/modules/dci-transactions.module.d.ts.map +1 -0
- package/dist/modules/dci-transactions.module.js +24 -0
- package/dist/modules/dci-transactions.module.js.map +1 -0
- package/dist/pipes/dci-decrypt-message.pipe.d.ts +13 -0
- package/dist/pipes/dci-decrypt-message.pipe.js +40 -0
- package/dist/pipes/dci-decrypt-message.pipe.js.map +1 -0
- package/dist/pipes/dci-validate-action.pipe.d.ts +11 -0
- package/dist/pipes/dci-validate-action.pipe.js +35 -0
- package/dist/pipes/dci-validate-action.pipe.js.map +1 -0
- package/dist/services/dci-search.service.d.ts +16 -0
- package/dist/services/dci-search.service.js +95 -0
- package/dist/services/dci-search.service.js.map +1 -0
- package/dist/services/subscription-store.service.d.ts +16 -0
- package/dist/services/subscription-store.service.d.ts.map +1 -0
- package/dist/services/subscription-store.service.js +75 -0
- package/dist/services/subscription-store.service.js.map +1 -0
- package/dist/services/transaction-store.service.d.ts +12 -0
- package/dist/services/transaction-store.service.d.ts.map +1 -0
- package/dist/services/transaction-store.service.js +60 -0
- package/dist/services/transaction-store.service.js.map +1 -0
- package/dist/swagger.d.ts +85 -0
- package/dist/swagger.js +75 -0
- package/dist/swagger.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/utils/callback-sender.d.ts +15 -0
- package/dist/utils/callback-sender.js +31 -0
- package/dist/utils/callback-sender.js.map +1 -0
- package/dist/utils/callback-url.utils.d.ts +4 -0
- package/dist/utils/callback-url.utils.js +7 -0
- package/dist/utils/callback-url.utils.js.map +1 -0
- package/dist/utils/date.utils.d.ts +2 -0
- package/dist/utils/date.utils.d.ts.map +1 -0
- package/dist/utils/date.utils.js +22 -0
- package/dist/utils/date.utils.js.map +1 -0
- package/dist/utils/dci-module-config.d.ts +10 -0
- package/dist/utils/dci-module-config.d.ts.map +1 -0
- package/dist/utils/dci-module-config.js +19 -0
- package/dist/utils/dci-module-config.js.map +1 -0
- package/dist/utils/notify-filter.utils.d.ts +5 -0
- package/dist/utils/notify-filter.utils.js +41 -0
- package/dist/utils/notify-filter.utils.js.map +1 -0
- package/dist/utils/search-response.builder.d.ts +6 -0
- package/dist/utils/search-response.builder.js +30 -0
- package/dist/utils/search-response.builder.js.map +1 -0
- package/dist/utils/subscribe-response.builder.d.ts +16 -0
- package/dist/utils/subscribe-response.builder.js +47 -0
- package/dist/utils/subscribe-response.builder.js.map +1 -0
- package/dist/utils/txn-status-response.builder.d.ts +3 -0
- package/dist/utils/txn-status-response.builder.d.ts.map +1 -0
- package/dist/utils/txn-status-response.builder.js +63 -0
- package/dist/utils/txn-status-response.builder.js.map +1 -0
- 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":"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"}
|
|
@@ -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,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"}
|