UNPKG

@phnq/message

Version:

Asynchronous, incremental messaging client and server

139 lines (138 loc) 5.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MessageTransport_1 = require("../MessageTransport"); const serialize_1 = require("../serialize"); const sign_1 = require("../sign"); const SALT = 'abcd1234'; describe('sign/verify', () => { it('should successfully sign and verify a simple message', () => { const message = { t: MessageTransport_1.MessageType.Request, c: 1, s: 'source', p: 'hello', }; const signedMessage = (0, sign_1.signMessage)(message, SALT); expect(signedMessage.z).toBeTruthy(); expect(() => { (0, sign_1.verifyMessage)(signedMessage, SALT); }).not.toThrowError(); }); it('should throw during verification of a modified signed message', () => { const message = { t: MessageTransport_1.MessageType.Request, c: 1, s: 'source', p: 'hello', }; const signedMessage = (0, sign_1.signMessage)(message, SALT); expect(() => { const doctoredMessage = Object.assign(Object.assign({}, signedMessage), { s: 'wrong source' }); (0, sign_1.verifyMessage)(doctoredMessage, SALT); }).toThrowError(); }); it('should throw during verification of a message with no signature', () => { const message = { t: MessageTransport_1.MessageType.Request, c: 1, s: 'source', p: 'hello', }; const signedMessage = (0, sign_1.signMessage)(message, SALT); expect(() => { (0, sign_1.verifyMessage)(Object.assign(Object.assign({}, signedMessage), { z: undefined }), SALT); }).toThrowError(); }); it('should successfully sign and verify a message with object payload', () => { const message = { t: MessageTransport_1.MessageType.Request, c: 1, s: 'source', p: { date: new Date(), foo: 'bar', nums: [1, 2, 3, 4, 5], nope: undefined, stuff: null, }, }; const signedMessage = (0, sign_1.signMessage)(message, SALT); expect(signedMessage.z).toBeTruthy(); expect(() => { (0, sign_1.verifyMessage)(signedMessage, SALT); }).not.toThrowError(); }); it('should successfully sign and verify a message with serialized/deserialized message', () => { const message = { t: MessageTransport_1.MessageType.Request, c: 1, s: 'source', p: { date: new Date(), foo: 'bar', nums: [1, 2, 3, 4, 5], nope: undefined, stuff: null, }, }; const signedMessage = (0, sign_1.signMessage)(message, SALT); expect(signedMessage.z).toBeTruthy(); expect(() => { (0, sign_1.verifyMessage)((0, serialize_1.deserialize)((0, serialize_1.serialize)(signedMessage)), SALT); }).not.toThrowError(); }); it('should successfully sign and verify a message with serialized/deserialized message, dates and date strings', () => { const message = { t: MessageTransport_1.MessageType.Request, c: 1, s: 'source', p: { date1: new Date(), date2: '2025-03-22T11:53:26.424', date3: '2025-03-22T11:53:26.424Z', foo: 'bar', nums: [1, 2, 3, 4, 5], nope: undefined, stuff: null, }, }; const signedMessage = (0, sign_1.signMessage)(message, SALT); expect(signedMessage.z).toBeTruthy(); expect(() => { (0, sign_1.verifyMessage)((0, serialize_1.deserialize)((0, serialize_1.serialize)(signedMessage)), SALT); }).not.toThrowError(); }); it('should successfully sign and verify a message with a large payload', () => { const num = 20000; const streams = { time: [], hr: [], altitude: [], power: [], cadence: [], temp: [], }; for (let i = 0; i < num; i++) { streams.time.push(i); streams.hr.push(150); streams.altitude.push(1000); streams.power.push(200); streams.cadence.push(90); streams.temp.push(20); } const largeMessage = { t: MessageTransport_1.MessageType.Request, c: 1, s: 'source', p: { streams, }, }; const signedMessage = (0, sign_1.signMessage)(largeMessage, SALT); expect(signedMessage.z).toBeTruthy(); expect(() => { const serDeser = (0, serialize_1.deserialize)((0, serialize_1.serialize)(signedMessage)); (0, sign_1.verifyMessage)(serDeser, SALT); }).not.toThrowError(); }); });