@ai-pip/core 0.1.1 → 0.1.3
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 +102 -9
- package/dist/cpe/envelope.d.ts +34 -0
- package/dist/cpe/envelope.d.ts.map +1 -0
- package/dist/cpe/envelope.js +70 -0
- package/dist/cpe/envelope.js.map +1 -0
- package/dist/cpe/exceptions/EnvelopeError.d.ts +8 -0
- package/dist/cpe/exceptions/EnvelopeError.d.ts.map +1 -0
- package/dist/cpe/exceptions/EnvelopeError.js +13 -0
- package/dist/cpe/exceptions/EnvelopeError.js.map +1 -0
- package/dist/cpe/exceptions/index.d.ts +5 -0
- package/dist/cpe/exceptions/index.d.ts.map +1 -0
- package/dist/cpe/exceptions/index.js +5 -0
- package/dist/cpe/exceptions/index.js.map +1 -0
- package/dist/cpe/index.d.ts +24 -0
- package/dist/cpe/index.d.ts.map +1 -0
- package/dist/cpe/index.js +28 -0
- package/dist/cpe/index.js.map +1 -0
- package/dist/cpe/types.d.ts +58 -0
- package/dist/cpe/types.d.ts.map +1 -0
- package/dist/cpe/types.js +5 -0
- package/dist/cpe/types.js.map +1 -0
- package/dist/cpe/utils.d.ts +38 -0
- package/dist/cpe/utils.d.ts.map +1 -0
- package/dist/cpe/utils.js +47 -0
- package/dist/cpe/utils.js.map +1 -0
- package/dist/cpe/value-objects/Metadata.d.ts +32 -0
- package/dist/cpe/value-objects/Metadata.d.ts.map +1 -0
- package/dist/cpe/value-objects/Metadata.js +65 -0
- package/dist/cpe/value-objects/Metadata.js.map +1 -0
- package/dist/cpe/value-objects/Nonce.d.ts +33 -0
- package/dist/cpe/value-objects/Nonce.d.ts.map +1 -0
- package/dist/cpe/value-objects/Nonce.js +44 -0
- package/dist/cpe/value-objects/Nonce.js.map +1 -0
- package/dist/cpe/value-objects/Signature.d.ts +39 -0
- package/dist/cpe/value-objects/Signature.d.ts.map +1 -0
- package/dist/cpe/value-objects/Signature.js +60 -0
- package/dist/cpe/value-objects/Signature.js.map +1 -0
- package/dist/cpe/value-objects/index.d.ts +7 -0
- package/dist/cpe/value-objects/index.d.ts.map +1 -0
- package/dist/cpe/value-objects/index.js +7 -0
- package/dist/cpe/value-objects/index.js.map +1 -0
- package/dist/csl/classify.d.ts +35 -0
- package/dist/csl/classify.d.ts.map +1 -0
- package/dist/csl/classify.js +62 -0
- package/dist/csl/classify.js.map +1 -0
- package/dist/csl/exceptions/ClassificationError.d.ts +12 -0
- package/dist/csl/exceptions/ClassificationError.d.ts.map +1 -0
- package/dist/csl/exceptions/ClassificationError.js +16 -0
- package/dist/csl/exceptions/ClassificationError.js.map +1 -0
- package/dist/csl/exceptions/SegmentationError.d.ts +13 -0
- package/dist/csl/exceptions/SegmentationError.d.ts.map +1 -0
- package/dist/csl/exceptions/SegmentationError.js +18 -0
- package/dist/csl/exceptions/SegmentationError.js.map +1 -0
- package/dist/csl/exceptions/index.d.ts +3 -0
- package/dist/csl/exceptions/index.d.ts.map +1 -0
- package/dist/csl/exceptions/index.js +3 -0
- package/dist/csl/exceptions/index.js.map +1 -0
- package/dist/csl/index.d.ts +24 -0
- package/dist/csl/index.d.ts.map +1 -0
- package/dist/csl/index.js +29 -0
- package/dist/csl/index.js.map +1 -0
- package/dist/csl/lineage.d.ts +31 -0
- package/dist/csl/lineage.d.ts.map +1 -0
- package/dist/csl/lineage.js +36 -0
- package/dist/csl/lineage.js.map +1 -0
- package/dist/csl/segment.d.ts +35 -0
- package/dist/csl/segment.d.ts.map +1 -0
- package/dist/csl/segment.js +90 -0
- package/dist/csl/segment.js.map +1 -0
- package/dist/csl/types.d.ts +97 -0
- package/dist/csl/types.d.ts.map +1 -0
- package/dist/csl/types.js +62 -0
- package/dist/csl/types.js.map +1 -0
- package/dist/csl/utils.d.ts +16 -0
- package/dist/csl/utils.d.ts.map +1 -0
- package/dist/csl/utils.js +27 -0
- package/dist/csl/utils.js.map +1 -0
- package/dist/csl/value-objects/ContentHash.d.ts +18 -0
- package/dist/csl/value-objects/ContentHash.d.ts.map +1 -0
- package/dist/csl/value-objects/ContentHash.js +33 -0
- package/dist/csl/value-objects/ContentHash.js.map +1 -0
- package/dist/csl/value-objects/LineageEntry.d.ts +20 -0
- package/dist/csl/value-objects/LineageEntry.d.ts.map +1 -0
- package/dist/csl/value-objects/LineageEntry.js +20 -0
- package/dist/csl/value-objects/LineageEntry.js.map +1 -0
- package/dist/csl/value-objects/Origin-map.d.ts +21 -0
- package/dist/csl/value-objects/Origin-map.d.ts.map +1 -0
- package/dist/csl/value-objects/Origin-map.js +42 -0
- package/dist/csl/value-objects/Origin-map.js.map +1 -0
- package/dist/csl/value-objects/Origin.d.ts +22 -0
- package/dist/csl/value-objects/Origin.d.ts.map +1 -0
- package/dist/csl/value-objects/Origin.js +38 -0
- package/dist/csl/value-objects/Origin.js.map +1 -0
- package/dist/csl/value-objects/TrustLevel.d.ts +18 -0
- package/dist/csl/value-objects/TrustLevel.d.ts.map +1 -0
- package/dist/csl/value-objects/TrustLevel.js +23 -0
- package/dist/csl/value-objects/TrustLevel.js.map +1 -0
- package/dist/csl/value-objects/index.d.ts +10 -0
- package/dist/csl/value-objects/index.d.ts.map +1 -0
- package/dist/csl/value-objects/index.js +8 -0
- package/dist/csl/value-objects/index.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/isl/exceptions/SanitizationError.d.ts +8 -0
- package/dist/isl/exceptions/SanitizationError.d.ts.map +1 -0
- package/dist/isl/exceptions/SanitizationError.js +13 -0
- package/dist/isl/exceptions/SanitizationError.js.map +1 -0
- package/dist/isl/exceptions/index.d.ts +2 -0
- package/dist/isl/exceptions/index.d.ts.map +1 -0
- package/dist/isl/exceptions/index.js +2 -0
- package/dist/isl/exceptions/index.js.map +1 -0
- package/dist/isl/index.d.ts +12 -0
- package/dist/isl/index.d.ts.map +1 -0
- package/dist/isl/index.js +16 -0
- package/dist/isl/index.js.map +1 -0
- package/dist/isl/sanitize.d.ts +13 -0
- package/dist/isl/sanitize.d.ts.map +1 -0
- package/dist/isl/sanitize.js +74 -0
- package/dist/isl/sanitize.js.map +1 -0
- package/dist/isl/types.d.ts +75 -0
- package/dist/isl/types.d.ts.map +1 -0
- package/dist/isl/types.js +5 -0
- package/dist/isl/types.js.map +1 -0
- package/dist/isl/value-objects/AnomalyScore.d.ts +19 -0
- package/dist/isl/value-objects/AnomalyScore.d.ts.map +1 -0
- package/dist/isl/value-objects/AnomalyScore.js +25 -0
- package/dist/isl/value-objects/AnomalyScore.js.map +1 -0
- package/dist/isl/value-objects/Pattern.d.ts +32 -0
- package/dist/isl/value-objects/Pattern.d.ts.map +1 -0
- package/dist/isl/value-objects/Pattern.js +116 -0
- package/dist/isl/value-objects/Pattern.js.map +1 -0
- package/dist/isl/value-objects/PiDetection.d.ts +22 -0
- package/dist/isl/value-objects/PiDetection.d.ts.map +1 -0
- package/dist/isl/value-objects/PiDetection.js +60 -0
- package/dist/isl/value-objects/PiDetection.js.map +1 -0
- package/dist/isl/value-objects/PiDetectionResult.d.ts +24 -0
- package/dist/isl/value-objects/PiDetectionResult.d.ts.map +1 -0
- package/dist/isl/value-objects/PiDetectionResult.js +90 -0
- package/dist/isl/value-objects/PiDetectionResult.js.map +1 -0
- package/dist/isl/value-objects/PolicyRule.d.ts +39 -0
- package/dist/isl/value-objects/PolicyRule.d.ts.map +1 -0
- package/dist/isl/value-objects/PolicyRule.js +65 -0
- package/dist/isl/value-objects/PolicyRule.js.map +1 -0
- package/dist/isl/value-objects/index.d.ts +9 -0
- package/dist/isl/value-objects/index.d.ts.map +1 -0
- package/dist/isl/value-objects/index.js +8 -0
- package/dist/isl/value-objects/index.js.map +1 -0
- package/dist/shared/index.d.ts +9 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +12 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/lineage.d.ts +29 -0
- package/dist/shared/lineage.d.ts.map +1 -0
- package/dist/shared/lineage.js +36 -0
- package/dist/shared/lineage.js.map +1 -0
- package/package.json +21 -19
- package/src/cpe/envelope.ts +3 -3
- package/src/cpe/types.ts +1 -1
- package/src/index.ts +2 -0
- package/src/isl/sanitize.ts +5 -5
- package/src/isl/types.ts +1 -1
- package/src/shared/lineage.ts +1 -1
- package/tsconfig.json +6 -3
package/README.md
CHANGED
|
@@ -139,24 +139,28 @@ pnpm dev
|
|
|
139
139
|
- **Node.js**: >= 18.0.0
|
|
140
140
|
- **pnpm**: >= 8.0.0 (recomendado) o npm/yarn
|
|
141
141
|
|
|
142
|
-
### TypeScript
|
|
142
|
+
### TypeScript ⚠️ **REQUERIDO**
|
|
143
143
|
|
|
144
|
-
Este paquete utiliza ESM (`"type": "module"`) y exports con subpaths. Para que TypeScript resuelva correctamente los imports, tu proyecto **
|
|
144
|
+
Este paquete utiliza ESM (`"type": "module"`) y exports con subpaths. Para que TypeScript resuelva correctamente los imports y tipos, tu proyecto **DEBE** tener la siguiente configuración en `tsconfig.json`:
|
|
145
|
+
|
|
146
|
+
**Configuración mínima requerida:**
|
|
145
147
|
|
|
146
148
|
```json
|
|
147
149
|
{
|
|
148
150
|
"compilerOptions": {
|
|
149
151
|
"module": "NodeNext",
|
|
150
152
|
"moduleResolution": "nodenext",
|
|
151
|
-
"target": "ES2022"
|
|
152
|
-
// ... otras opciones
|
|
153
|
+
"target": "ES2022"
|
|
153
154
|
}
|
|
154
155
|
}
|
|
155
156
|
```
|
|
156
157
|
|
|
157
|
-
**⚠️
|
|
158
|
+
**⚠️ CRÍTICO**: Sin esta configuración, obtendrás errores como:
|
|
159
|
+
- `Module '"@ai-pip/core/csl"' has no exported member 'CSLResult'`
|
|
160
|
+
- `ERR_PACKAGE_PATH_NOT_EXPORTED`
|
|
161
|
+
- Los tipos no se resolverán correctamente
|
|
158
162
|
|
|
159
|
-
#### Ejemplo de `tsconfig.json` completo
|
|
163
|
+
#### Ejemplo de `tsconfig.json` completo recomendado
|
|
160
164
|
|
|
161
165
|
```json
|
|
162
166
|
{
|
|
@@ -173,9 +177,11 @@ Este paquete utiliza ESM (`"type": "module"`) y exports con subpaths. Para que T
|
|
|
173
177
|
}
|
|
174
178
|
```
|
|
175
179
|
|
|
176
|
-
####
|
|
180
|
+
#### Notas importantes
|
|
177
181
|
|
|
178
|
-
|
|
182
|
+
- **Desde la versión 0.1.2+**: Esta configuración es obligatoria. Las versiones anteriores (0.1.0, 0.1.1) están deprecadas.
|
|
183
|
+
- **Si usas `tsx` o `ts-node`**: Aunque ejecutes TypeScript directamente, **aún necesitas** esta configuración en `tsconfig.json` para que TypeScript resuelva los tipos correctamente.
|
|
184
|
+
- **JavaScript puro**: Si usas JavaScript sin TypeScript, no necesitas esta configuración, pero perderás el soporte de tipos.
|
|
179
185
|
|
|
180
186
|
## 📄 Licencia
|
|
181
187
|
|
|
@@ -200,5 +206,92 @@ Las contribuciones son bienvenidas. Por favor:
|
|
|
200
206
|
|
|
201
207
|
---
|
|
202
208
|
|
|
203
|
-
|
|
209
|
+
## 📝 CHANGELOG
|
|
210
|
+
|
|
211
|
+
### [0.1.3] - 2025-12-28
|
|
212
|
+
|
|
213
|
+
#### ✨ Nuevas características
|
|
214
|
+
- **Compilación a JavaScript**: El paquete ahora se compila a JavaScript (`dist/`) para mayor compatibilidad
|
|
215
|
+
- **Archivos de declaración de tipos**: Se generan archivos `.d.ts` para soporte completo de TypeScript
|
|
216
|
+
- **Source maps**: Incluidos para mejor debugging
|
|
217
|
+
|
|
218
|
+
#### 🔧 Cambios técnicos
|
|
219
|
+
- **Estructura de publicación**: Cambio de publicar archivos `.ts` directamente a compilar a `dist/`
|
|
220
|
+
- **Exports mejorados**: Los exports ahora apuntan a archivos compilados (`.js` y `.d.ts`)
|
|
221
|
+
- **Rutas relativas**: Reemplazo de path aliases (`@/`) por rutas relativas para compatibilidad
|
|
222
|
+
- **Configuración de build**: Corregida la generación de archivos `.d.ts` en `dist/` en lugar de `src/`
|
|
223
|
+
- **ESLint**: Configurado para ignorar archivos `.d.ts` generados
|
|
224
|
+
|
|
225
|
+
#### 🐛 Correcciones
|
|
226
|
+
- **Resolución de tipos**: Los tipos TypeScript ahora se resuelven correctamente desde `node_modules`
|
|
227
|
+
- **Imports desde subpaths**: Corregidos los imports desde `@ai-pip/core/csl`, `@ai-pip/core/isl`, etc.
|
|
228
|
+
- **Exports completos**: Agregado campo `default` a todos los exports para Node.js ESM
|
|
229
|
+
- **Generación de archivos**: Archivos `.d.ts` ahora se generan correctamente en `dist/`
|
|
230
|
+
|
|
231
|
+
#### 📚 Documentación
|
|
232
|
+
- **Requisitos de TypeScript**: Documentación mejorada sobre configuración requerida
|
|
233
|
+
- **Ejemplos actualizados**: Ejemplos de uso actualizados para la nueva estructura
|
|
234
|
+
- **CHANGELOG completo**: Documentación de todas las versiones y deprecaciones
|
|
235
|
+
|
|
236
|
+
#### 🛠️ Mejoras de desarrollo
|
|
237
|
+
- **Script test:install**: Script para verificar instalación antes de publicar
|
|
238
|
+
- **Script prepublishOnly**: Ejecuta automáticamente build, lint, tests y test:install antes de publicar
|
|
239
|
+
|
|
240
|
+
#### ⚠️ Breaking Changes
|
|
241
|
+
- **Configuración TypeScript requerida**: Ahora es **obligatorio** usar `module: "NodeNext"` y `moduleResolution: "nodenext"` en `tsconfig.json`
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
### [0.1.2] - 2025-12-28
|
|
246
|
+
|
|
247
|
+
#### ⚠️ DEPRECADA
|
|
248
|
+
|
|
249
|
+
**Motivo de deprecación**: Esta versión tenía problemas con la compilación y generación de archivos `.d.ts`. Los archivos se generaban en ubicaciones incorrectas (`src/` en lugar de `dist/`), causando errores de linting y problemas de resolución de tipos.
|
|
250
|
+
|
|
251
|
+
**Problemas conocidos**:
|
|
252
|
+
- Archivos `.d.ts` se generaban en `src/` en lugar de `dist/`
|
|
253
|
+
- ESLint intentaba lintear archivos `.d.ts` generados, causando errores
|
|
254
|
+
- Configuración de build incompleta (`declarationDir` mal configurado)
|
|
255
|
+
- Los tipos no se resolvían correctamente en algunos casos
|
|
256
|
+
|
|
257
|
+
**Recomendación**: Actualizar a `0.1.3` o superior.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
### [0.1.1] - 2025-12-28
|
|
262
|
+
|
|
263
|
+
#### ⚠️ DEPRECADA
|
|
264
|
+
|
|
265
|
+
**Motivo de deprecación**: Esta versión tenía problemas con la resolución de path aliases (`@/`) que causaban errores al importar desde otros proyectos. Los tipos no se resolvían correctamente cuando el paquete se instalaba desde npm.
|
|
266
|
+
|
|
267
|
+
**Problemas conocidos**:
|
|
268
|
+
- Errores: `Module '"@ai-pip/core/csl"' has no exported member 'CSLResult'`
|
|
269
|
+
- Path aliases no funcionaban en proyectos consumidores
|
|
270
|
+
- Tipos no se resolvían correctamente desde `node_modules`
|
|
271
|
+
|
|
272
|
+
**Recomendación**: Actualizar a `0.1.3` o superior.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
### [0.1.0] - 2025-12-28
|
|
277
|
+
|
|
278
|
+
#### ⚠️ DEPRECADA
|
|
279
|
+
|
|
280
|
+
**Motivo de deprecación**: Versión inicial con problemas fundamentales de compatibilidad. Los exports no incluían el campo `default` requerido por Node.js ESM, causando errores `ERR_PACKAGE_PATH_NOT_EXPORTED`.
|
|
281
|
+
|
|
282
|
+
**Problemas conocidos**:
|
|
283
|
+
- Errores: `ERR_PACKAGE_PATH_NOT_EXPORTED` al importar subpaths
|
|
284
|
+
- Exports incompletos: Faltaba el campo `default` en los exports
|
|
285
|
+
- Path aliases no funcionaban correctamente
|
|
286
|
+
|
|
287
|
+
**Recomendación**: Actualizar a `0.1.3` o superior.
|
|
288
|
+
|
|
289
|
+
#### 📦 Contenido inicial
|
|
290
|
+
- **CSL (Context Segmentation Layer)**: Segmentación y clasificación de contenido
|
|
291
|
+
- **ISL (Instruction Sanitization Layer)**: Sanitización de instrucciones
|
|
292
|
+
- **CPE (Cryptographic Prompt Envelope)**: Envoltorio criptográfico con HMAC-SHA256
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
**Versión actual**: 0.1.3
|
|
204
297
|
**Estado**: Fase 1 - Capas Core (60% completado)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Genera el envoltorio criptográfico (CPEEvelope) - función pura principal de CPE
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Esta es la función principal de CPE. Genera un envoltorio criptográfico
|
|
6
|
+
* que garantiza la integridad y autenticidad del prompt procesado.
|
|
7
|
+
*
|
|
8
|
+
* **Funciones:**
|
|
9
|
+
* - Genera metadata de seguridad (timestamp, nonce, versión)
|
|
10
|
+
* - Firma criptográficamente el contenido con HMAC-SHA256
|
|
11
|
+
* - Encapsula el contenido sanitizado con metadata
|
|
12
|
+
* - Preserva el linaje completo para auditoría
|
|
13
|
+
*
|
|
14
|
+
* @param islResult - Resultado de ISL con contenido sanitizado
|
|
15
|
+
* @param secretKey - Clave secreta para HMAC (debe ser proporcionada por el SDK)
|
|
16
|
+
* @returns CPEResult con el envelope criptográfico
|
|
17
|
+
*
|
|
18
|
+
* @throws {EnvelopeError} Si la generación del envelope falla
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* const cpeResult = envelope(islResult, secretKey)
|
|
23
|
+
*
|
|
24
|
+
* // cpeResult.envelope contiene:
|
|
25
|
+
* // - content: contenido sanitizado serializado
|
|
26
|
+
* // - signature: firma HMAC-SHA256
|
|
27
|
+
* // - metadata: timestamp, nonce, versión
|
|
28
|
+
* // - lineage: linaje completo
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import type { ISLResult } from '../isl/types';
|
|
32
|
+
import type { CPEResult } from './types';
|
|
33
|
+
export declare function envelope(islResult: ISLResult, secretKey: string): CPEResult;
|
|
34
|
+
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/cpe/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAc,SAAS,EAAE,MAAM,SAAS,CAAA;AAUpD,wBAAgB,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,CAwE3E"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createNonce } from './value-objects/Nonce';
|
|
2
|
+
import { createMetadata } from './value-objects/Metadata';
|
|
3
|
+
import { createSignature } from './value-objects/Signature';
|
|
4
|
+
import { EnvelopeError } from './exceptions';
|
|
5
|
+
// Serialización NO es core - va al SDK
|
|
6
|
+
// El core solo define la estructura del envelope
|
|
7
|
+
import { addLineageEntries } from '../shared/lineage';
|
|
8
|
+
import { createLineageEntry } from '../csl/value-objects/LineageEntry';
|
|
9
|
+
export function envelope(islResult, secretKey) {
|
|
10
|
+
const startTime = Date.now();
|
|
11
|
+
try {
|
|
12
|
+
// 1. Validar input
|
|
13
|
+
if (!islResult?.segments?.length) {
|
|
14
|
+
throw new EnvelopeError('ISLResult must contain at least one segment');
|
|
15
|
+
}
|
|
16
|
+
if (!secretKey || secretKey.length === 0) {
|
|
17
|
+
throw new EnvelopeError('Secret key is required for envelope generation');
|
|
18
|
+
}
|
|
19
|
+
// 2. Generar metadata de seguridad
|
|
20
|
+
const timestamp = Date.now();
|
|
21
|
+
const nonce = createNonce();
|
|
22
|
+
const metadata = createMetadata(timestamp, nonce);
|
|
23
|
+
// 3. Preparar payload semántico (contenido procesado por ISL)
|
|
24
|
+
// El payload puede ser cualquier estructura que represente el contenido procesado
|
|
25
|
+
const payload = {
|
|
26
|
+
segments: islResult.segments.map((segment) => ({
|
|
27
|
+
id: segment.id,
|
|
28
|
+
content: segment.sanitizedContent,
|
|
29
|
+
trust: segment.trust.value,
|
|
30
|
+
sanitizationLevel: segment.sanitizationLevel,
|
|
31
|
+
})),
|
|
32
|
+
};
|
|
33
|
+
// 4. Generar firma criptográfica HMAC-SHA256
|
|
34
|
+
// Nota: La serialización del contenido para firma debe hacerse en el SDK
|
|
35
|
+
// El core solo define que se debe firmar el payload + metadata
|
|
36
|
+
// Por ahora, serializamos de forma básica para mantener funcionalidad
|
|
37
|
+
const algorithm = 'HMAC-SHA256';
|
|
38
|
+
const signableContent = JSON.stringify({
|
|
39
|
+
payload,
|
|
40
|
+
metadata,
|
|
41
|
+
algorithm
|
|
42
|
+
});
|
|
43
|
+
const signatureVO = createSignature(signableContent, secretKey);
|
|
44
|
+
// 5. Actualizar linaje con entrada CPE
|
|
45
|
+
const cpeLineageEntry = createLineageEntry('CPE', timestamp);
|
|
46
|
+
const updatedLineage = addLineageEntries(islResult.lineage, [cpeLineageEntry]);
|
|
47
|
+
// 9. Construir envelope según especificación
|
|
48
|
+
const envelope = {
|
|
49
|
+
payload,
|
|
50
|
+
metadata,
|
|
51
|
+
signature: {
|
|
52
|
+
value: signatureVO.value,
|
|
53
|
+
algorithm: signatureVO.algorithm,
|
|
54
|
+
},
|
|
55
|
+
lineage: updatedLineage,
|
|
56
|
+
};
|
|
57
|
+
const processingTime = Date.now() - startTime;
|
|
58
|
+
return {
|
|
59
|
+
envelope,
|
|
60
|
+
processingTimeMs: processingTime,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (error instanceof EnvelopeError) {
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
throw new EnvelopeError(`Failed to generate envelope: ${error instanceof Error ? error.message : 'Unknown error'}`, error instanceof Error ? error : undefined);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/cpe/envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnvelopeError - Error al generar el envelope criptográfico
|
|
3
|
+
*/
|
|
4
|
+
export declare class EnvelopeError extends Error {
|
|
5
|
+
readonly cause?: Error | undefined;
|
|
6
|
+
constructor(message: string, cause?: Error | undefined);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=EnvelopeError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvelopeError.d.ts","sourceRoot":"","sources":["../../../src/cpe/exceptions/EnvelopeError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aACO,KAAK,CAAC,EAAE,KAAK;gBAA9C,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,KAAK,YAAA;CAK3D"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnvelopeError - Error al generar el envelope criptográfico
|
|
3
|
+
*/
|
|
4
|
+
export class EnvelopeError extends Error {
|
|
5
|
+
cause;
|
|
6
|
+
constructor(message, cause) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.cause = cause;
|
|
9
|
+
this.name = 'EnvelopeError';
|
|
10
|
+
Object.setPrototypeOf(this, EnvelopeError.prototype);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=EnvelopeError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvelopeError.js","sourceRoot":"","sources":["../../../src/cpe/exceptions/EnvelopeError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACO;IAA7C,YAAY,OAAe,EAAkB,KAAa;QACxD,KAAK,CAAC,OAAO,CAAC,CAAA;QAD6B,UAAK,GAAL,KAAK,CAAQ;QAExD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cpe/exceptions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cpe/exceptions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CPE (Cryptographic Prompt Envelope) - Core Semántico
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Este es el core semántico de CPE. Solo contiene:
|
|
6
|
+
* - Funciones puras (sin estado)
|
|
7
|
+
* - Value objects inmutables
|
|
8
|
+
* - Tipos y excepciones
|
|
9
|
+
*
|
|
10
|
+
* **Funciones principales:**
|
|
11
|
+
* - Generación de metadata de seguridad (timestamp, nonce, versión)
|
|
12
|
+
* - Firma criptográfica HMAC-SHA256
|
|
13
|
+
* - Construcción del envelope criptográfico
|
|
14
|
+
* - Preservación del linaje completo
|
|
15
|
+
*/
|
|
16
|
+
export { envelope } from './envelope';
|
|
17
|
+
export { createNonce, isValidNonce, equalsNonce } from './value-objects/Nonce';
|
|
18
|
+
export type { Nonce } from './value-objects/Nonce';
|
|
19
|
+
export { createMetadata, isValidMetadata, CURRENT_PROTOCOL_VERSION } from './value-objects/Metadata';
|
|
20
|
+
export { createSignature } from './value-objects/Signature';
|
|
21
|
+
export type { SignatureVO } from './value-objects/Signature';
|
|
22
|
+
export * from './exceptions';
|
|
23
|
+
export * from './types';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cpe/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAGrC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAC9E,YAAY,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAG5D,cAAc,cAAc,CAAA;AAG5B,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CPE (Cryptographic Prompt Envelope) - Core Semántico
|
|
3
|
+
*
|
|
4
|
+
* @remarks
|
|
5
|
+
* Este es el core semántico de CPE. Solo contiene:
|
|
6
|
+
* - Funciones puras (sin estado)
|
|
7
|
+
* - Value objects inmutables
|
|
8
|
+
* - Tipos y excepciones
|
|
9
|
+
*
|
|
10
|
+
* **Funciones principales:**
|
|
11
|
+
* - Generación de metadata de seguridad (timestamp, nonce, versión)
|
|
12
|
+
* - Firma criptográfica HMAC-SHA256
|
|
13
|
+
* - Construcción del envelope criptográfico
|
|
14
|
+
* - Preservación del linaje completo
|
|
15
|
+
*/
|
|
16
|
+
// Funciones puras principales
|
|
17
|
+
export { envelope } from './envelope';
|
|
18
|
+
// Value objects
|
|
19
|
+
export { createNonce, isValidNonce, equalsNonce } from './value-objects/Nonce';
|
|
20
|
+
export { createMetadata, isValidMetadata, CURRENT_PROTOCOL_VERSION } from './value-objects/Metadata';
|
|
21
|
+
export { createSignature } from './value-objects/Signature';
|
|
22
|
+
// Exceptions
|
|
23
|
+
export * from './exceptions';
|
|
24
|
+
// Types
|
|
25
|
+
export * from './types';
|
|
26
|
+
// Serialización y verificación NO son core - van al SDK
|
|
27
|
+
// El core solo define la estructura del envelope, no implementa serialización
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cpe/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,gBAAgB;AAChB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAE9E,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAG3D,aAAa;AACb,cAAc,cAAc,CAAA;AAE5B,QAAQ;AACR,cAAc,SAAS,CAAA;AAEvB,wDAAwD;AACxD,8EAA8E"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for CPE (Cryptographic Prompt Envelope) - Core Semántico
|
|
3
|
+
*/
|
|
4
|
+
import type { LineageEntry } from '../csl/value-objects';
|
|
5
|
+
/**
|
|
6
|
+
* ProtocolVersion - Versión del protocolo AI-PIP
|
|
7
|
+
*/
|
|
8
|
+
export type ProtocolVersion = string;
|
|
9
|
+
/**
|
|
10
|
+
* Timestamp - Timestamp Unix en milisegundos
|
|
11
|
+
*/
|
|
12
|
+
export type Timestamp = number;
|
|
13
|
+
/**
|
|
14
|
+
* NonceValue - Valor único para prevenir ataques de replay (string)
|
|
15
|
+
*/
|
|
16
|
+
export type NonceValue = string;
|
|
17
|
+
/**
|
|
18
|
+
* SignatureAlgorithm - Algoritmo de firma criptográfica
|
|
19
|
+
*/
|
|
20
|
+
export type SignatureAlgorithm = 'HMAC-SHA256';
|
|
21
|
+
/**
|
|
22
|
+
* Signature - Firma criptográfica del envelope
|
|
23
|
+
*/
|
|
24
|
+
export type Signature = string;
|
|
25
|
+
/**
|
|
26
|
+
* CPEMetadata - Metadata de seguridad del envelope
|
|
27
|
+
* Según especificación: timestamp, nonce, protocolVersion, previousSignatures opcionales
|
|
28
|
+
*/
|
|
29
|
+
export interface CPEMetadata {
|
|
30
|
+
readonly timestamp: Timestamp;
|
|
31
|
+
readonly nonce: NonceValue;
|
|
32
|
+
readonly protocolVersion: ProtocolVersion;
|
|
33
|
+
readonly previousSignatures?: {
|
|
34
|
+
readonly csl?: string | undefined;
|
|
35
|
+
readonly isl?: string | undefined;
|
|
36
|
+
} | undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* CPEEvelope - Envoltorio criptográfico completo
|
|
40
|
+
* Según especificación: payload, metadata, signature (value + algorithm), lineage
|
|
41
|
+
*/
|
|
42
|
+
export interface CPEEvelope {
|
|
43
|
+
readonly payload: unknown;
|
|
44
|
+
readonly metadata: CPEMetadata;
|
|
45
|
+
readonly signature: {
|
|
46
|
+
readonly value: string;
|
|
47
|
+
readonly algorithm: string;
|
|
48
|
+
};
|
|
49
|
+
readonly lineage: readonly LineageEntry[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* CPEResult - Resultado de la generación del envelope
|
|
53
|
+
*/
|
|
54
|
+
export interface CPEResult {
|
|
55
|
+
readonly envelope: CPEEvelope;
|
|
56
|
+
readonly processingTimeMs?: number;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cpe/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAExD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAA;AAEpC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAE/B;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAE9C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAClC,GAAG,SAAS,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAC3B,CAAA;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cpe/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilidades puras para CPE
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Serializa el contenido sanitizado de ISL para firma
|
|
6
|
+
*
|
|
7
|
+
* @param segments - Segmentos sanitizados
|
|
8
|
+
* @returns Contenido serializado
|
|
9
|
+
*/
|
|
10
|
+
export declare function serializeContent(segments: readonly {
|
|
11
|
+
readonly sanitizedContent: string;
|
|
12
|
+
}[]): string;
|
|
13
|
+
/**
|
|
14
|
+
* Serializa metadata para firma
|
|
15
|
+
*
|
|
16
|
+
* @param metadata - Metadata a serializar
|
|
17
|
+
* @returns Metadata serializada
|
|
18
|
+
*/
|
|
19
|
+
export declare function serializeMetadata(metadata: {
|
|
20
|
+
readonly timestamp: number;
|
|
21
|
+
readonly nonce: string;
|
|
22
|
+
readonly protocolVersion: string;
|
|
23
|
+
readonly previousSignatures?: {
|
|
24
|
+
readonly csl?: string | undefined;
|
|
25
|
+
readonly isl?: string | undefined;
|
|
26
|
+
} | undefined;
|
|
27
|
+
}): string;
|
|
28
|
+
/**
|
|
29
|
+
* Genera el contenido completo para firma
|
|
30
|
+
* Según spec: contenido procesado + metadata + identificador del algoritmo
|
|
31
|
+
*
|
|
32
|
+
* @param content - Contenido serializado (payload semántico)
|
|
33
|
+
* @param metadata - Metadata serializada
|
|
34
|
+
* @param algorithm - Identificador del algoritmo de firma
|
|
35
|
+
* @returns Contenido completo para firma
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateSignableContent(content: string, metadata: string, algorithm: string): string;
|
|
38
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/cpe/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;IAAE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,MAAM,CAInG;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;QAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAClC,GAAG,SAAS,CAAA;CACd,GAAG,MAAM,CAgBT;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilidades puras para CPE
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Serializa el contenido sanitizado de ISL para firma
|
|
6
|
+
*
|
|
7
|
+
* @param segments - Segmentos sanitizados
|
|
8
|
+
* @returns Contenido serializado
|
|
9
|
+
*/
|
|
10
|
+
export function serializeContent(segments) {
|
|
11
|
+
return segments
|
|
12
|
+
.map((segment, index) => `[${index}]:${segment.sanitizedContent}`)
|
|
13
|
+
.join('\n');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Serializa metadata para firma
|
|
17
|
+
*
|
|
18
|
+
* @param metadata - Metadata a serializar
|
|
19
|
+
* @returns Metadata serializada
|
|
20
|
+
*/
|
|
21
|
+
export function serializeMetadata(metadata) {
|
|
22
|
+
const parts = [
|
|
23
|
+
`timestamp:${metadata.timestamp}`,
|
|
24
|
+
`nonce:${metadata.nonce}`,
|
|
25
|
+
`version:${metadata.protocolVersion}`,
|
|
26
|
+
];
|
|
27
|
+
if (metadata.previousSignatures?.csl) {
|
|
28
|
+
parts.push(`csl:${metadata.previousSignatures.csl}`);
|
|
29
|
+
}
|
|
30
|
+
if (metadata.previousSignatures?.isl) {
|
|
31
|
+
parts.push(`isl:${metadata.previousSignatures.isl}`);
|
|
32
|
+
}
|
|
33
|
+
return parts.join('|');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Genera el contenido completo para firma
|
|
37
|
+
* Según spec: contenido procesado + metadata + identificador del algoritmo
|
|
38
|
+
*
|
|
39
|
+
* @param content - Contenido serializado (payload semántico)
|
|
40
|
+
* @param metadata - Metadata serializada
|
|
41
|
+
* @param algorithm - Identificador del algoritmo de firma
|
|
42
|
+
* @returns Contenido completo para firma
|
|
43
|
+
*/
|
|
44
|
+
export function generateSignableContent(content, metadata, algorithm) {
|
|
45
|
+
return `${metadata}\n---\n${content}\n---\nalgorithm:${algorithm}`;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/cpe/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA0D;IACzF,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,KAAK,OAAO,CAAC,gBAAgB,EAAE,CAAC;SACjE,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAQjC;IACC,MAAM,KAAK,GAAG;QACZ,aAAa,QAAQ,CAAC,SAAS,EAAE;QACjC,SAAS,QAAQ,CAAC,KAAK,EAAE;QACzB,WAAW,QAAQ,CAAC,eAAe,EAAE;KACtC,CAAA;IAED,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,QAAgB,EAChB,SAAiB;IAEjB,OAAO,GAAG,QAAQ,UAAU,OAAO,oBAAoB,SAAS,EAAE,CAAA;AACpE,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CPEMetadata - Metadata de seguridad del envelope
|
|
3
|
+
* Value Object puro e inmutable
|
|
4
|
+
*/
|
|
5
|
+
import type { CPEMetadata, ProtocolVersion, Timestamp } from '../types';
|
|
6
|
+
import type { Nonce as NonceVO } from './Nonce';
|
|
7
|
+
/**
|
|
8
|
+
* Versión actual del protocolo
|
|
9
|
+
*/
|
|
10
|
+
export declare const CURRENT_PROTOCOL_VERSION: ProtocolVersion;
|
|
11
|
+
/**
|
|
12
|
+
* Crea metadata de seguridad para el envelope
|
|
13
|
+
* Según especificación: timestamp, nonce, protocolVersion, previousSignatures opcionales
|
|
14
|
+
*
|
|
15
|
+
* @param timestamp - Timestamp Unix en milisegundos
|
|
16
|
+
* @param nonce - Nonce único
|
|
17
|
+
* @param protocolVersion - Versión del protocolo (default: CURRENT_PROTOCOL_VERSION)
|
|
18
|
+
* @param previousSignatures - Firmas opcionales de capas anteriores (csl, isl)
|
|
19
|
+
* @returns CPEMetadata inmutable
|
|
20
|
+
*/
|
|
21
|
+
export declare function createMetadata(timestamp: Timestamp, nonce: NonceVO, protocolVersion?: ProtocolVersion, previousSignatures?: {
|
|
22
|
+
csl?: string;
|
|
23
|
+
isl?: string;
|
|
24
|
+
}): CPEMetadata;
|
|
25
|
+
/**
|
|
26
|
+
* Valida que la metadata sea válida
|
|
27
|
+
*
|
|
28
|
+
* @param metadata - Metadata a validar
|
|
29
|
+
* @returns true si es válida
|
|
30
|
+
*/
|
|
31
|
+
export declare function isValidMetadata(metadata: CPEMetadata): boolean;
|
|
32
|
+
//# sourceMappingURL=Metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metadata.d.ts","sourceRoot":"","sources":["../../../src/cpe/value-objects/Metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACvE,OAAO,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,SAAS,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAAyB,CAAA;AAEhE;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,OAAO,EACd,eAAe,GAAE,eAA0C,EAC3D,kBAAkB,CAAC,EAAE;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,GACA,WAAW,CA4Bb;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAS9D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CPEMetadata - Metadata de seguridad del envelope
|
|
3
|
+
* Value Object puro e inmutable
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Versión actual del protocolo
|
|
7
|
+
*/
|
|
8
|
+
export const CURRENT_PROTOCOL_VERSION = '1.0.0';
|
|
9
|
+
/**
|
|
10
|
+
* Crea metadata de seguridad para el envelope
|
|
11
|
+
* Según especificación: timestamp, nonce, protocolVersion, previousSignatures opcionales
|
|
12
|
+
*
|
|
13
|
+
* @param timestamp - Timestamp Unix en milisegundos
|
|
14
|
+
* @param nonce - Nonce único
|
|
15
|
+
* @param protocolVersion - Versión del protocolo (default: CURRENT_PROTOCOL_VERSION)
|
|
16
|
+
* @param previousSignatures - Firmas opcionales de capas anteriores (csl, isl)
|
|
17
|
+
* @returns CPEMetadata inmutable
|
|
18
|
+
*/
|
|
19
|
+
export function createMetadata(timestamp, nonce, protocolVersion = CURRENT_PROTOCOL_VERSION, previousSignatures) {
|
|
20
|
+
// Validar timestamp
|
|
21
|
+
if (timestamp <= 0) {
|
|
22
|
+
throw new Error('Timestamp must be a positive number');
|
|
23
|
+
}
|
|
24
|
+
// Validar que no sea del futuro (con margen de 5 minutos para sincronización)
|
|
25
|
+
const maxFutureTimestamp = Date.now() + 5 * 60 * 1000;
|
|
26
|
+
if (timestamp > maxFutureTimestamp) {
|
|
27
|
+
throw new Error('Timestamp cannot be in the future');
|
|
28
|
+
}
|
|
29
|
+
// Validar version del protocolo
|
|
30
|
+
if (!protocolVersion || typeof protocolVersion !== 'string') {
|
|
31
|
+
throw new Error('Protocol version must be a non-empty string');
|
|
32
|
+
}
|
|
33
|
+
return Object.freeze({
|
|
34
|
+
timestamp,
|
|
35
|
+
nonce: nonce.value,
|
|
36
|
+
protocolVersion,
|
|
37
|
+
previousSignatures: previousSignatures
|
|
38
|
+
? Object.freeze({
|
|
39
|
+
csl: previousSignatures.csl ?? undefined,
|
|
40
|
+
isl: previousSignatures.isl ?? undefined,
|
|
41
|
+
})
|
|
42
|
+
: undefined,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Valida que la metadata sea válida
|
|
47
|
+
*
|
|
48
|
+
* @param metadata - Metadata a validar
|
|
49
|
+
* @returns true si es válida
|
|
50
|
+
*/
|
|
51
|
+
export function isValidMetadata(metadata) {
|
|
52
|
+
try {
|
|
53
|
+
if (metadata.timestamp <= 0)
|
|
54
|
+
return false;
|
|
55
|
+
if (!metadata.nonce || metadata.nonce.length < 16)
|
|
56
|
+
return false;
|
|
57
|
+
if (!metadata.protocolVersion)
|
|
58
|
+
return false;
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=Metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metadata.js","sourceRoot":"","sources":["../../../src/cpe/value-objects/Metadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAoB,OAAO,CAAA;AAEhE;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAoB,EACpB,KAAc,EACd,kBAAmC,wBAAwB,EAC3D,kBAGC;IAED,oBAAoB;IACpB,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IAED,8EAA8E;IAC9E,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;IACrD,IAAI,SAAS,GAAG,kBAAkB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS;QACT,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,eAAe;QACf,kBAAkB,EAAE,kBAAkB;YACpC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBACZ,GAAG,EAAE,kBAAkB,CAAC,GAAG,IAAI,SAAS;gBACxC,GAAG,EAAE,kBAAkB,CAAC,GAAG,IAAI,SAAS;aACzC,CAAC;YACJ,CAAC,CAAC,SAAS;KACd,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAqB;IACnD,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC;YAAE,OAAO,KAAK,CAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,KAAK,CAAA;QAC/D,IAAI,CAAC,QAAQ,CAAC,eAAe;YAAE,OAAO,KAAK,CAAA;QAC3C,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|