@voiceflow/encryption 0.2.0 → 0.3.1

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=encryption.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.service.test.d.ts","sourceRoot":"","sources":["../../src/encryption.service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,77 @@
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
+ const vitest_1 = require("vitest");
7
+ const aes_256_gcm_1 = require("./aes-256-gcm");
8
+ const encryption_service_1 = __importDefault(require("./encryption.service"));
9
+ (0, vitest_1.describe)('EncryptionService', () => {
10
+ // 32-byte key (256 bits) required for AES-256
11
+ const MOCK_KEY = Buffer.from('0123456789abcdef0123456789abcdef').toString('base64');
12
+ (0, vitest_1.describe)('constructor', () => {
13
+ (0, vitest_1.it)('creates instance with valid encryption key', () => {
14
+ (0, vitest_1.expect)(() => new encryption_service_1.default(MOCK_KEY)).not.toThrow();
15
+ });
16
+ });
17
+ (0, vitest_1.describe)('encrypt', () => {
18
+ let service;
19
+ (0, vitest_1.beforeEach)(() => {
20
+ service = new encryption_service_1.default(MOCK_KEY);
21
+ });
22
+ (0, vitest_1.it)('encrypts plaintext string', () => {
23
+ const plaintext = 'test-data';
24
+ const encrypted = service.encrypt(plaintext);
25
+ (0, vitest_1.expect)(encrypted).toBeDefined();
26
+ (0, vitest_1.expect)(encrypted.iv).toBeDefined();
27
+ (0, vitest_1.expect)(encrypted.mac).toBeDefined();
28
+ (0, vitest_1.expect)(encrypted.value).toBeDefined();
29
+ (0, vitest_1.expect)(encrypted.value).not.toBe(plaintext);
30
+ // Verify we can decrypt it back
31
+ const decrypted = service.decrypt(encrypted);
32
+ (0, vitest_1.expect)(decrypted).toBe(plaintext);
33
+ });
34
+ (0, vitest_1.it)('produces different ciphertext for same plaintext', () => {
35
+ const plaintext = 'test-data';
36
+ const encrypted1 = service.encrypt(plaintext);
37
+ const encrypted2 = service.encrypt(plaintext);
38
+ // Should have different IVs
39
+ (0, vitest_1.expect)(encrypted1.iv).not.toBe(encrypted2.iv);
40
+ // Should have different ciphertext
41
+ (0, vitest_1.expect)(encrypted1.value).not.toBe(encrypted2.value);
42
+ // But both should decrypt to the same plaintext
43
+ (0, vitest_1.expect)(service.decrypt(encrypted1)).toBe(service.decrypt(encrypted2));
44
+ });
45
+ });
46
+ (0, vitest_1.describe)('decrypt', () => {
47
+ let service;
48
+ (0, vitest_1.beforeEach)(() => {
49
+ service = new encryption_service_1.default(MOCK_KEY);
50
+ });
51
+ (0, vitest_1.it)('decrypts valid encrypted data', () => {
52
+ const plaintext = 'test-data';
53
+ const encrypted = (0, aes_256_gcm_1.encryptAes256Gcm)(plaintext, MOCK_KEY);
54
+ const decrypted = service.decrypt(encrypted);
55
+ (0, vitest_1.expect)(decrypted).toBe(plaintext);
56
+ });
57
+ (0, vitest_1.it)('throws error for invalid encrypted data', () => {
58
+ const invalidData = {
59
+ iv: 'invalid',
60
+ mac: 'invalid',
61
+ value: 'invalid',
62
+ };
63
+ (0, vitest_1.expect)(() => service.decrypt(invalidData)).toThrow();
64
+ });
65
+ (0, vitest_1.it)('throws error for tampered encrypted data', () => {
66
+ const plaintext = 'test-data';
67
+ const encrypted = service.encrypt(plaintext);
68
+ // Tamper with the encrypted data
69
+ const tampered = {
70
+ ...encrypted,
71
+ value: `${encrypted.value}tampered`,
72
+ };
73
+ (0, vitest_1.expect)(() => service.decrypt(tampered)).toThrow();
74
+ });
75
+ });
76
+ });
77
+ //# sourceMappingURL=encryption.service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.service.test.js","sourceRoot":"","sources":["../../src/encryption.service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=encryption.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.service.test.d.ts","sourceRoot":"","sources":["../../src/encryption.service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import { beforeEach, describe, expect, it } from 'vitest';
2
+ import { encryptAes256Gcm } from './aes-256-gcm.js';
3
+ import EncryptionService from './encryption.service.js';
4
+ describe('EncryptionService', () => {
5
+ // 32-byte key (256 bits) required for AES-256
6
+ const MOCK_KEY = Buffer.from('0123456789abcdef0123456789abcdef').toString('base64');
7
+ describe('constructor', () => {
8
+ it('creates instance with valid encryption key', () => {
9
+ expect(() => new EncryptionService(MOCK_KEY)).not.toThrow();
10
+ });
11
+ });
12
+ describe('encrypt', () => {
13
+ let service;
14
+ beforeEach(() => {
15
+ service = new EncryptionService(MOCK_KEY);
16
+ });
17
+ it('encrypts plaintext string', () => {
18
+ const plaintext = 'test-data';
19
+ const encrypted = service.encrypt(plaintext);
20
+ expect(encrypted).toBeDefined();
21
+ expect(encrypted.iv).toBeDefined();
22
+ expect(encrypted.mac).toBeDefined();
23
+ expect(encrypted.value).toBeDefined();
24
+ expect(encrypted.value).not.toBe(plaintext);
25
+ // Verify we can decrypt it back
26
+ const decrypted = service.decrypt(encrypted);
27
+ expect(decrypted).toBe(plaintext);
28
+ });
29
+ it('produces different ciphertext for same plaintext', () => {
30
+ const plaintext = 'test-data';
31
+ const encrypted1 = service.encrypt(plaintext);
32
+ const encrypted2 = service.encrypt(plaintext);
33
+ // Should have different IVs
34
+ expect(encrypted1.iv).not.toBe(encrypted2.iv);
35
+ // Should have different ciphertext
36
+ expect(encrypted1.value).not.toBe(encrypted2.value);
37
+ // But both should decrypt to the same plaintext
38
+ expect(service.decrypt(encrypted1)).toBe(service.decrypt(encrypted2));
39
+ });
40
+ });
41
+ describe('decrypt', () => {
42
+ let service;
43
+ beforeEach(() => {
44
+ service = new EncryptionService(MOCK_KEY);
45
+ });
46
+ it('decrypts valid encrypted data', () => {
47
+ const plaintext = 'test-data';
48
+ const encrypted = encryptAes256Gcm(plaintext, MOCK_KEY);
49
+ const decrypted = service.decrypt(encrypted);
50
+ expect(decrypted).toBe(plaintext);
51
+ });
52
+ it('throws error for invalid encrypted data', () => {
53
+ const invalidData = {
54
+ iv: 'invalid',
55
+ mac: 'invalid',
56
+ value: 'invalid',
57
+ };
58
+ expect(() => service.decrypt(invalidData)).toThrow();
59
+ });
60
+ it('throws error for tampered encrypted data', () => {
61
+ const plaintext = 'test-data';
62
+ const encrypted = service.encrypt(plaintext);
63
+ // Tamper with the encrypted data
64
+ const tampered = {
65
+ ...encrypted,
66
+ value: `${encrypted.value}tampered`,
67
+ };
68
+ expect(() => service.decrypt(tampered)).toThrow();
69
+ });
70
+ });
71
+ });
72
+ //# sourceMappingURL=encryption.service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.service.test.js","sourceRoot":"","sources":["../../src/encryption.service.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voiceflow/encryption",
3
- "version": "0.2.0",
3
+ "version": "0.3.1",
4
4
  "description": "Voiceflow encryption library",
5
5
  "license": "ISC",
6
6
  "main": "build/cjs/main.js",
@@ -24,11 +24,14 @@
24
24
  "test:types": "yarn g:tsc --noEmit",
25
25
  "test:unit": "yarn g:vitest run --coverage"
26
26
  },
27
+ "engines": {
28
+ "node": "20"
29
+ },
27
30
  "volta": {
28
31
  "extends": "../../package.json"
29
32
  },
30
33
  "publishConfig": {
31
34
  "access": "public"
32
35
  },
33
- "gitHead": "c71920a42998c80a09029b70724a39fb84f8df74"
36
+ "gitHead": "db852b0cbef17d080c71361782acf6cb9d16a84c"
34
37
  }