@simplito/privmx-webendpoint 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/Types.d.ts +407 -0
  2. package/Types.js +27 -0
  3. package/api/Api.d.ts +20 -0
  4. package/api/Api.js +48 -0
  5. package/api/BaseNative.d.ts +20 -0
  6. package/api/BaseNative.js +35 -0
  7. package/api/ConnectionNative.d.ts +24 -0
  8. package/api/ConnectionNative.js +51 -0
  9. package/api/CryptoApiNative.d.ts +25 -0
  10. package/api/CryptoApiNative.js +54 -0
  11. package/api/EventQueueNative.d.ts +20 -0
  12. package/api/EventQueueNative.js +37 -0
  13. package/api/IdGenerator.d.ts +14 -0
  14. package/api/IdGenerator.js +21 -0
  15. package/api/InboxApiNative.d.ts +38 -0
  16. package/api/InboxApiNative.js +90 -0
  17. package/api/StoreApiNative.d.ts +37 -0
  18. package/api/StoreApiNative.js +87 -0
  19. package/api/ThreadApiNative.d.ts +31 -0
  20. package/api/ThreadApiNative.js +69 -0
  21. package/assets/endpoint-wasm-module.js +20 -0
  22. package/{webAssets → assets}/endpoint-wasm-module.wasm +0 -0
  23. package/bundle/privmx-endpoint-web.js +2 -0
  24. package/bundle/privmx-endpoint-web.js.LICENSE.txt +10 -0
  25. package/bundle.d.ts +12 -0
  26. package/bundle.js +16 -0
  27. package/extra/__tests__/__mocks__/constants.d.ts +36 -0
  28. package/extra/__tests__/__mocks__/constants.js +42 -0
  29. package/extra/__tests__/__mocks__/mockContainerSubscriber.d.ts +12 -0
  30. package/extra/__tests__/__mocks__/mockContainerSubscriber.js +25 -0
  31. package/extra/__tests__/__mocks__/mockEventAPIs.d.ts +30 -0
  32. package/extra/__tests__/__mocks__/mockEventAPIs.js +70 -0
  33. package/extra/__tests__/__mocks__/mockEventQueue.d.ts +13 -0
  34. package/extra/__tests__/__mocks__/mockEventQueue.js +45 -0
  35. package/extra/__tests__/__mocks__/utils.d.ts +8 -0
  36. package/extra/__tests__/__mocks__/utils.js +21 -0
  37. package/extra/__tests__/eventsManager.test.d.ts +1 -0
  38. package/extra/__tests__/eventsManager.test.js +73 -0
  39. package/extra/__tests__/inboxEventManager.test.d.ts +1 -0
  40. package/extra/__tests__/inboxEventManager.test.js +56 -0
  41. package/extra/__tests__/storeEventManager.test.d.ts +1 -0
  42. package/extra/__tests__/storeEventManager.test.js +56 -0
  43. package/extra/__tests__/threadEventManager.test.d.ts +1 -0
  44. package/extra/__tests__/threadEventManager.test.js +60 -0
  45. package/extra/__tests__/utils.test.d.ts +1 -0
  46. package/extra/__tests__/utils.test.js +52 -0
  47. package/extra/events.d.ts +234 -0
  48. package/extra/events.js +270 -0
  49. package/extra/files.d.ts +120 -0
  50. package/extra/files.js +216 -0
  51. package/extra/generics.d.ts +19 -0
  52. package/extra/generics.js +2 -0
  53. package/extra/inbox.d.ts +38 -0
  54. package/extra/inbox.js +35 -0
  55. package/extra/index.d.ts +8 -0
  56. package/extra/index.js +23 -0
  57. package/extra/utils.d.ts +24 -0
  58. package/extra/utils.js +68 -0
  59. package/index.d.ts +14 -0
  60. package/index.js +25 -0
  61. package/package.json +45 -3
  62. package/service/BaseApi.d.ts +16 -0
  63. package/service/BaseApi.js +29 -0
  64. package/service/Connection.d.ts +45 -0
  65. package/service/Connection.js +57 -0
  66. package/service/CryptoApi.d.ts +83 -0
  67. package/service/CryptoApi.js +113 -0
  68. package/service/EndpointFactory.d.ts +89 -0
  69. package/service/EndpointFactory.js +173 -0
  70. package/service/EventQueue.d.ts +20 -0
  71. package/service/EventQueue.js +37 -0
  72. package/service/InboxApi.d.ts +183 -0
  73. package/service/InboxApi.js +262 -0
  74. package/service/StoreApi.d.ts +170 -0
  75. package/service/StoreApi.js +246 -0
  76. package/service/ThreadApi.d.ts +124 -0
  77. package/service/ThreadApi.js +186 -0
  78. package/service/index.d.ts +9 -0
  79. package/service/index.js +19 -0
  80. package/README.md +0 -13
  81. package/webAssets/LICENSE.md +0 -76
  82. package/webAssets/endpoint-wasm-module.js +0 -20
  83. package/webAssets/privmx-endpoint-web.js +0 -2
  84. /package/{webAssets → assets}/driver-web-context.js +0 -0
  85. /package/{webAssets → assets}/endpoint-wasm-module.worker.js +0 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockInboxEventApi = exports.MockStoreEventApi = exports.MockThreadEventApi = void 0;
4
+ const mockContainerSubscriber_1 = require("./mockContainerSubscriber");
5
+ class MockThreadEventApi extends mockContainerSubscriber_1.MockContainerSubscriber {
6
+ containerChannel = 'thread';
7
+ containerElementChannel(id) {
8
+ return `thread/${id}/messages`;
9
+ }
10
+ constructor(queue) {
11
+ super(queue);
12
+ }
13
+ subscribeForThreadEvents() {
14
+ return this.subscribeForContainerEvents();
15
+ }
16
+ unsubscribeFromThreadEvents() {
17
+ return this.unsubscribeFromContainerEvents();
18
+ }
19
+ subscribeForMessageEvents(threadId) {
20
+ return this.subscribeForContainerItemEvents(threadId);
21
+ }
22
+ unsubscribeFromMessageEvents(threadId) {
23
+ return this.unsubscribeFromContainerItemEvents(threadId);
24
+ }
25
+ }
26
+ exports.MockThreadEventApi = MockThreadEventApi;
27
+ class MockStoreEventApi extends mockContainerSubscriber_1.MockContainerSubscriber {
28
+ containerChannel = 'store';
29
+ containerElementChannel(id) {
30
+ return `store/${id}/files`;
31
+ }
32
+ constructor(queue) {
33
+ super(queue);
34
+ }
35
+ subscribeForStoreEvents() {
36
+ return this.subscribeForContainerEvents();
37
+ }
38
+ unsubscribeFromStoreEvents() {
39
+ return this.unsubscribeFromContainerEvents();
40
+ }
41
+ subscribeForFileEvents(storeId) {
42
+ return this.subscribeForContainerItemEvents(storeId);
43
+ }
44
+ unsubscribeFromFileEvents(storeId) {
45
+ return this.unsubscribeFromContainerItemEvents(storeId);
46
+ }
47
+ }
48
+ exports.MockStoreEventApi = MockStoreEventApi;
49
+ class MockInboxEventApi extends mockContainerSubscriber_1.MockContainerSubscriber {
50
+ containerChannel = 'inbox';
51
+ containerElementChannel(id) {
52
+ return `inbox/${id}/entries`;
53
+ }
54
+ constructor(queue) {
55
+ super(queue);
56
+ }
57
+ subscribeForInboxEvents() {
58
+ return this.subscribeForContainerEvents();
59
+ }
60
+ unsubscribeFromInboxEvents() {
61
+ return this.unsubscribeFromContainerEvents();
62
+ }
63
+ subscribeForEntryEvents(storeId) {
64
+ return this.subscribeForContainerItemEvents(storeId);
65
+ }
66
+ unsubscribeFromEntryEvents(storeId) {
67
+ return this.unsubscribeFromContainerItemEvents(storeId);
68
+ }
69
+ }
70
+ exports.MockInboxEventApi = MockInboxEventApi;
@@ -0,0 +1,13 @@
1
+ import { Channel } from '../../events';
2
+ import { Types } from "../../..";
3
+ export declare class MockEventQueue {
4
+ queue: Types.Event[];
5
+ resolveCommand: {
6
+ resolver: Function;
7
+ } | null;
8
+ registeredChannels: Set<Channel>;
9
+ constructor();
10
+ dispatchEvent(event: Types.Event): void;
11
+ waitEvent(): Promise<Types.Event>;
12
+ emitBreakEvent(): Promise<void>;
13
+ }
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockEventQueue = void 0;
4
+ class MockEventQueue {
5
+ queue = [];
6
+ resolveCommand = null;
7
+ registeredChannels = new Set();
8
+ constructor() { }
9
+ dispatchEvent(event) {
10
+ if (this.registeredChannels.has(event.channel)) {
11
+ this.queue.push(event);
12
+ if (this.resolveCommand) {
13
+ this.resolveCommand.resolver();
14
+ this.resolveCommand = null;
15
+ }
16
+ }
17
+ }
18
+ async waitEvent() {
19
+ const lockPromise = new Promise((resolve) => {
20
+ const event = this.queue.shift();
21
+ //if there is event in queue resolve immediately
22
+ if (event) {
23
+ resolve(event);
24
+ }
25
+ else {
26
+ //if not, lock promise and unlock it on new event
27
+ this.resolveCommand = {
28
+ resolver: () => {
29
+ const event = this.queue.shift();
30
+ if (event) {
31
+ resolve(event);
32
+ }
33
+ }
34
+ };
35
+ }
36
+ });
37
+ return lockPromise;
38
+ }
39
+ async emitBreakEvent() {
40
+ return new Promise((resolve) => {
41
+ resolve;
42
+ });
43
+ }
44
+ }
45
+ exports.MockEventQueue = MockEventQueue;
@@ -0,0 +1,8 @@
1
+ import { MockEventQueue } from "./mockEventQueue";
2
+ import { EventManager } from "../../events";
3
+ export declare function utils<T>(cb: () => T): Promise<T>;
4
+ export declare function createTestSetup(): {
5
+ q: MockEventQueue;
6
+ manager: EventManager;
7
+ };
8
+ export declare function waitForNextTick(): Promise<void>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.waitForNextTick = exports.createTestSetup = exports.utils = void 0;
4
+ const mockEventQueue_1 = require("./mockEventQueue");
5
+ const events_1 = require("../../events");
6
+ async function utils(cb) {
7
+ return new Promise((resolve) => {
8
+ setTimeout(() => resolve(cb()), 10);
9
+ });
10
+ }
11
+ exports.utils = utils;
12
+ function createTestSetup() {
13
+ const q = new mockEventQueue_1.MockEventQueue();
14
+ const mockEventsManager = events_1.EventManager.startEventLoop(q);
15
+ return { q, manager: mockEventsManager };
16
+ }
17
+ exports.createTestSetup = createTestSetup;
18
+ function waitForNextTick() {
19
+ return new Promise((resolve) => setTimeout(resolve, 0));
20
+ }
21
+ exports.waitForNextTick = waitForNextTick;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const events_1 = require("../events");
4
+ const mockEventAPIs_1 = require("./__mocks__/mockEventAPIs");
5
+ const utils_1 = require("./__mocks__/utils");
6
+ describe('Events Helpers', () => {
7
+ let { q, manager } = (0, utils_1.createTestSetup)();
8
+ let mockEventsManager = new events_1.ThreadEventsManager(new mockEventAPIs_1.MockThreadEventApi(q));
9
+ manager.registerDispatcher(mockEventsManager);
10
+ beforeEach(() => {
11
+ let { q: _q, manager: _m } = (0, utils_1.createTestSetup)();
12
+ q = _q;
13
+ manager = _m;
14
+ mockEventsManager = new events_1.ThreadEventsManager(new mockEventAPIs_1.MockThreadEventApi(q));
15
+ manager.registerDispatcher(mockEventsManager);
16
+ });
17
+ it('should registered dispatchers', () => {
18
+ expect(manager.dispatchers.length).toBe(1);
19
+ });
20
+ it('should call callback for matching event', async () => {
21
+ const cb = jest.fn();
22
+ await mockEventsManager.onThreadEvent({ event: 'threadStatsChanged', callback: cb });
23
+ q.dispatchEvent({
24
+ type: 'threadStatsChanged',
25
+ data: {},
26
+ channel: 'thread',
27
+ connectionId: 1
28
+ });
29
+ //adding task on end of js event loop
30
+ await new Promise((resolve) => {
31
+ setTimeout(() => {
32
+ expect(cb).toHaveBeenCalled();
33
+ resolve();
34
+ }, 0);
35
+ });
36
+ });
37
+ it('should receive multiple events', async () => {
38
+ const cb = jest.fn();
39
+ await mockEventsManager.onThreadEvent({ event: 'threadStatsChanged', callback: cb });
40
+ q.dispatchEvent({
41
+ type: 'threadStatsChanged',
42
+ data: {},
43
+ channel: 'thread',
44
+ connectionId: 1
45
+ });
46
+ q.dispatchEvent({
47
+ type: 'threadStatsChanged',
48
+ data: {},
49
+ channel: 'thread',
50
+ connectionId: 1
51
+ });
52
+ //adding task on end of js event loop
53
+ await new Promise((resolve) => {
54
+ setTimeout(() => {
55
+ expect(cb).toHaveBeenCalledTimes(2);
56
+ resolve();
57
+ }, 0);
58
+ });
59
+ q.dispatchEvent({
60
+ type: 'threadStatsChanged',
61
+ data: {},
62
+ channel: 'thread',
63
+ connectionId: 1
64
+ });
65
+ //adding task on end of js event loop
66
+ await new Promise((resolve) => {
67
+ setTimeout(() => {
68
+ expect(cb).toHaveBeenCalledTimes(3);
69
+ resolve();
70
+ }, 0);
71
+ });
72
+ });
73
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mockEventAPIs_1 = require("./__mocks__/mockEventAPIs");
4
+ const utils_1 = require("./__mocks__/utils");
5
+ const constants_1 = require("./__mocks__/constants");
6
+ describe('Inbox event manager', () => {
7
+ let { q, manager } = (0, utils_1.createTestSetup)();
8
+ let mockEventsManager = manager.getInboxEventManager(new mockEventAPIs_1.MockInboxEventApi(q));
9
+ beforeEach(() => {
10
+ let { q: _q, manager } = (0, utils_1.createTestSetup)();
11
+ q = _q;
12
+ mockEventsManager = manager.getInboxEventManager(new mockEventAPIs_1.MockInboxEventApi(q));
13
+ });
14
+ it('should add callback for event', async () => {
15
+ await mockEventsManager.onInboxEvent({
16
+ event: 'inboxUpdated',
17
+ callback: () => { }
18
+ });
19
+ expect(mockEventsManager.listeners.size).toBe(1);
20
+ });
21
+ it('should function to remove callback from event', async () => {
22
+ const removeListener = await mockEventsManager.onInboxEvent({
23
+ event: 'inboxUpdated',
24
+ callback: () => { }
25
+ });
26
+ expect(mockEventsManager.listeners.size).toBe(1);
27
+ await removeListener();
28
+ expect(mockEventsManager.listeners.size).toBe(0);
29
+ });
30
+ it('should register multiple callbacks for channel', async () => {
31
+ const storeEventCb = jest.fn();
32
+ await mockEventsManager.onInboxEvent({ event: constants_1.MOCK_INBOX_CREATED_EVENT.type, callback: storeEventCb });
33
+ await mockEventsManager.onInboxEvent({ event: constants_1.MOCK_INBOX_CREATED_EVENT.type, callback: storeEventCb });
34
+ q.dispatchEvent(constants_1.MOCK_INBOX_CREATED_EVENT);
35
+ //adding task on end of js event loop
36
+ await (0, utils_1.waitForNextTick)();
37
+ expect(storeEventCb).toHaveBeenCalledTimes(2);
38
+ });
39
+ it('should handle subscription for two channels', async () => {
40
+ const storeEventCb = jest.fn();
41
+ const messageEventCb = jest.fn();
42
+ const inboxId = "98dsyvb8as7ybd0asydvb0as";
43
+ const event = (0, constants_1.MOCK_INBOX_ENTRY_DELETED_EVENT)(inboxId);
44
+ await mockEventsManager.onInboxEvent({ event: constants_1.MOCK_INBOX_CREATED_EVENT.type, callback: storeEventCb });
45
+ await mockEventsManager.onEntryEvent(inboxId, {
46
+ event: event.type,
47
+ callback: messageEventCb
48
+ });
49
+ q.dispatchEvent(constants_1.MOCK_INBOX_CREATED_EVENT);
50
+ q.dispatchEvent(event);
51
+ //adding task on end of js event loop
52
+ await (0, utils_1.waitForNextTick)();
53
+ expect(storeEventCb).toHaveBeenCalledTimes(1);
54
+ expect(messageEventCb).toHaveBeenCalledTimes(1);
55
+ });
56
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mockEventAPIs_1 = require("./__mocks__/mockEventAPIs");
4
+ const utils_1 = require("./__mocks__/utils");
5
+ const constants_1 = require("./__mocks__/constants");
6
+ describe('Store event manager', () => {
7
+ let { q, manager } = (0, utils_1.createTestSetup)();
8
+ let mockEventsManager = manager.getStoreEventManager(new mockEventAPIs_1.MockStoreEventApi(q));
9
+ beforeEach(() => {
10
+ let { q: _q, manager } = (0, utils_1.createTestSetup)();
11
+ q = _q;
12
+ mockEventsManager = manager.getStoreEventManager(new mockEventAPIs_1.MockStoreEventApi(q));
13
+ });
14
+ it('should add callback for event', async () => {
15
+ await mockEventsManager.onStoreEvent({
16
+ event: 'storeStatsChanged',
17
+ callback: () => { }
18
+ });
19
+ expect(mockEventsManager.listeners.size).toBe(1);
20
+ });
21
+ it('should function to remove callback from event', async () => {
22
+ const removeListener = await mockEventsManager.onStoreEvent({
23
+ event: 'storeStatsChanged',
24
+ callback: () => { }
25
+ });
26
+ expect(mockEventsManager.listeners.size).toBe(1);
27
+ await removeListener();
28
+ expect(mockEventsManager.listeners.size).toBe(0);
29
+ });
30
+ it('should register multiple callbacks for channel', async () => {
31
+ const storeEventCb = jest.fn();
32
+ await mockEventsManager.onStoreEvent({ event: constants_1.MOCK_STORE_CREATED_EVENT.type, callback: storeEventCb });
33
+ await mockEventsManager.onStoreEvent({ event: constants_1.MOCK_STORE_CREATED_EVENT.type, callback: storeEventCb });
34
+ q.dispatchEvent(constants_1.MOCK_STORE_CREATED_EVENT);
35
+ //adding task on end of js event loop
36
+ await (0, utils_1.waitForNextTick)();
37
+ expect(storeEventCb).toHaveBeenCalledTimes(2);
38
+ });
39
+ it('should handle subscription for two channels', async () => {
40
+ const storeEventCb = jest.fn();
41
+ const messageEventCb = jest.fn();
42
+ const STORE_ID = '98dsyvs87dybv9a87dyvb98';
43
+ const storeEvent = (0, constants_1.MOCK_STORE_FILE_DELETED_EVENT)(STORE_ID);
44
+ await mockEventsManager.onStoreEvent({ event: constants_1.MOCK_STORE_CREATED_EVENT.type, callback: storeEventCb });
45
+ await mockEventsManager.onFileEvent(STORE_ID, {
46
+ event: storeEvent.type,
47
+ callback: messageEventCb
48
+ });
49
+ q.dispatchEvent(constants_1.MOCK_STORE_CREATED_EVENT);
50
+ q.dispatchEvent(storeEvent);
51
+ //adding task on end of js event loop
52
+ await (0, utils_1.waitForNextTick)();
53
+ expect(storeEventCb).toHaveBeenCalledTimes(1);
54
+ expect(messageEventCb).toHaveBeenCalledTimes(1);
55
+ });
56
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mockEventAPIs_1 = require("./__mocks__/mockEventAPIs");
4
+ const utils_1 = require("./__mocks__/utils");
5
+ const constants_1 = require("./__mocks__/constants");
6
+ describe('Thread event manager', () => {
7
+ let { q, manager } = (0, utils_1.createTestSetup)();
8
+ let mockEventsManager = manager.getThreadEventManager(new mockEventAPIs_1.MockThreadEventApi(q));
9
+ beforeEach(() => {
10
+ let { q: _q, manager } = (0, utils_1.createTestSetup)();
11
+ q = _q;
12
+ mockEventsManager = manager.getThreadEventManager(new mockEventAPIs_1.MockThreadEventApi(q));
13
+ });
14
+ it('should create manager', async () => {
15
+ expect(mockEventsManager).toBeDefined();
16
+ expect(manager.dispatchers.length).toBe(1);
17
+ });
18
+ it('should add callback for event', async () => {
19
+ await mockEventsManager.onThreadEvent({
20
+ event: 'threadStatsChanged',
21
+ callback: () => { }
22
+ });
23
+ expect(mockEventsManager.listeners.size).toBe(1);
24
+ });
25
+ it('should function to remove callback from event', async () => {
26
+ const removeListener = await mockEventsManager.onThreadEvent({
27
+ event: 'threadStatsChanged',
28
+ callback: () => { }
29
+ });
30
+ expect(mockEventsManager.listeners.size).toBe(1);
31
+ await removeListener();
32
+ expect(mockEventsManager.listeners.size).toBe(0);
33
+ });
34
+ it('should register multiple callbacks for channel', async () => {
35
+ const threadEventCb = jest.fn();
36
+ await mockEventsManager.onThreadEvent({ event: constants_1.MOCK_THREAD_CREATED_EVENT.type, callback: threadEventCb });
37
+ await mockEventsManager.onThreadEvent({ event: constants_1.MOCK_THREAD_CREATED_EVENT.type, callback: threadEventCb });
38
+ q.dispatchEvent(constants_1.MOCK_THREAD_CREATED_EVENT);
39
+ //adding task on end of js event loop
40
+ await (0, utils_1.waitForNextTick)();
41
+ expect(threadEventCb).toHaveBeenCalledTimes(2);
42
+ });
43
+ it('should handle subscription for two channels', async () => {
44
+ const threadEventCb = jest.fn();
45
+ const messageEventCb = jest.fn();
46
+ const THREAD_ID = '823yrcby32987yc23984b7y3w';
47
+ const threadEvent = (0, constants_1.MOCK_THREAD_MESSAGE_DELETED_EVENT)(THREAD_ID);
48
+ await mockEventsManager.onThreadEvent({ event: constants_1.MOCK_THREAD_CREATED_EVENT.type, callback: threadEventCb });
49
+ await mockEventsManager.onMessageEvent(THREAD_ID, {
50
+ event: threadEvent.type,
51
+ callback: messageEventCb
52
+ });
53
+ q.dispatchEvent(constants_1.MOCK_THREAD_CREATED_EVENT);
54
+ q.dispatchEvent(threadEvent);
55
+ //adding task on end of js event loop
56
+ await (0, utils_1.waitForNextTick)();
57
+ expect(threadEventCb).toHaveBeenCalledTimes(1);
58
+ expect(messageEventCb).toHaveBeenCalledTimes(1);
59
+ });
60
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../utils");
4
+ describe('Serialization Helpers', () => {
5
+ test('serializeObject should correctly serialize objects', () => {
6
+ const obj = { key: 'value', num: 42 };
7
+ const result = (0, utils_1.serializeObject)(obj);
8
+ expect(result).toBeInstanceOf(Uint8Array);
9
+ expect((0, utils_1.uint8ToStr)(result)).toBe(JSON.stringify(obj));
10
+ });
11
+ test('serializeObject should throw an error for invalid inputs', () => {
12
+ expect(() => (0, utils_1.serializeObject)(null)).toThrow(TypeError);
13
+ expect(() => (0, utils_1.serializeObject)('string')).toThrow(TypeError);
14
+ });
15
+ test('deserializeObject should correctly deserialize Uint8Array', () => {
16
+ const obj = { key: 'value', num: 42 };
17
+ const serialized = (0, utils_1.strToUint8)(JSON.stringify(obj));
18
+ const result = (0, utils_1.deserializeObject)(serialized);
19
+ expect(result).toEqual(obj);
20
+ });
21
+ test('deserializeObject should handle empty input gracefully', () => {
22
+ const empty = new Uint8Array();
23
+ const result = (0, utils_1.deserializeObject)(empty);
24
+ expect(result).toEqual({});
25
+ });
26
+ test('deserializeObject should throw an error for invalid inputs', () => {
27
+ expect(() => (0, utils_1.deserializeObject)(null)).toThrow(TypeError);
28
+ expect(() => (0, utils_1.deserializeObject)('string')).toThrow(TypeError);
29
+ const invalidJson = (0, utils_1.strToUint8)('{ key: value }');
30
+ expect(() => (0, utils_1.deserializeObject)(invalidJson)).toThrow(SyntaxError);
31
+ });
32
+ test('uint8ToStr should correctly convert Uint8Array to string', () => {
33
+ const str = 'Hello, world!';
34
+ const arr = (0, utils_1.strToUint8)(str);
35
+ const result = (0, utils_1.uint8ToStr)(arr);
36
+ expect(result).toBe(str);
37
+ });
38
+ test('uint8ToStr should throw an error for invalid inputs', () => {
39
+ expect(() => (0, utils_1.uint8ToStr)(null)).toThrow(TypeError);
40
+ expect(() => (0, utils_1.uint8ToStr)('string')).toThrow(TypeError);
41
+ });
42
+ test('strToUint8 should correctly convert string to Uint8Array', () => {
43
+ const str = 'Hello, world!';
44
+ const result = (0, utils_1.strToUint8)(str);
45
+ expect(result).toBeInstanceOf(Uint8Array);
46
+ expect((0, utils_1.uint8ToStr)(result)).toBe(str);
47
+ });
48
+ test('strToUint8 should throw an error for invalid inputs', () => {
49
+ expect(() => (0, utils_1.strToUint8)(null)).toThrow(TypeError);
50
+ expect(() => (0, utils_1.strToUint8)(42)).toThrow(TypeError);
51
+ });
52
+ });