@massalabs/gossip-sdk 0.0.2-dev.20260128094509 → 0.0.2-dev.20260128111120

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 (142) hide show
  1. package/dist/api/messageProtocol/index.d.ts +19 -0
  2. package/dist/api/messageProtocol/index.js +26 -0
  3. package/dist/api/messageProtocol/mock.d.ts +12 -0
  4. package/{src/api/messageProtocol/mock.ts → dist/api/messageProtocol/mock.js} +2 -3
  5. package/dist/api/messageProtocol/rest.d.ts +22 -0
  6. package/dist/api/messageProtocol/rest.js +161 -0
  7. package/dist/api/messageProtocol/types.d.ts +61 -0
  8. package/dist/api/messageProtocol/types.js +6 -0
  9. package/dist/assets/generated/wasm/README.md +281 -0
  10. package/dist/assets/generated/wasm/gossip_wasm.d.ts +498 -0
  11. package/dist/assets/generated/wasm/gossip_wasm.js +1399 -0
  12. package/dist/assets/generated/wasm/gossip_wasm_bg.wasm +0 -0
  13. package/dist/assets/generated/wasm/gossip_wasm_bg.wasm.d.ts +68 -0
  14. package/dist/assets/generated/wasm/package.json +15 -0
  15. package/dist/config/protocol.d.ts +36 -0
  16. package/dist/config/protocol.js +77 -0
  17. package/dist/config/sdk.d.ts +82 -0
  18. package/dist/config/sdk.js +55 -0
  19. package/{src/contacts.ts → dist/contacts.d.ts} +10 -94
  20. package/dist/contacts.js +166 -0
  21. package/dist/core/SdkEventEmitter.d.ts +36 -0
  22. package/dist/core/SdkEventEmitter.js +59 -0
  23. package/dist/core/SdkPolling.d.ts +35 -0
  24. package/dist/core/SdkPolling.js +100 -0
  25. package/{src/core/index.ts → dist/core/index.d.ts} +0 -2
  26. package/dist/core/index.js +5 -0
  27. package/dist/crypto/bip39.d.ts +34 -0
  28. package/dist/crypto/bip39.js +62 -0
  29. package/dist/crypto/encryption.d.ts +37 -0
  30. package/dist/crypto/encryption.js +46 -0
  31. package/dist/db.d.ts +190 -0
  32. package/dist/db.js +311 -0
  33. package/dist/gossipSdk.d.ts +274 -0
  34. package/dist/gossipSdk.js +690 -0
  35. package/dist/index.d.ts +73 -0
  36. package/dist/index.js +77 -0
  37. package/dist/services/announcement.d.ts +43 -0
  38. package/dist/services/announcement.js +491 -0
  39. package/dist/services/auth.d.ts +37 -0
  40. package/dist/services/auth.js +76 -0
  41. package/dist/services/discussion.d.ts +63 -0
  42. package/dist/services/discussion.js +297 -0
  43. package/dist/services/message.d.ts +74 -0
  44. package/dist/services/message.js +826 -0
  45. package/dist/services/refresh.d.ts +41 -0
  46. package/dist/services/refresh.js +205 -0
  47. package/{src/sw.ts → dist/sw.d.ts} +1 -8
  48. package/dist/sw.js +10 -0
  49. package/dist/types/events.d.ts +80 -0
  50. package/dist/types/events.js +7 -0
  51. package/dist/types.d.ts +32 -0
  52. package/dist/types.js +7 -0
  53. package/dist/utils/base64.d.ts +10 -0
  54. package/dist/utils/base64.js +30 -0
  55. package/dist/utils/contacts.d.ts +42 -0
  56. package/dist/utils/contacts.js +113 -0
  57. package/dist/utils/discussions.d.ts +24 -0
  58. package/dist/utils/discussions.js +38 -0
  59. package/dist/utils/logs.d.ts +19 -0
  60. package/dist/utils/logs.js +89 -0
  61. package/dist/utils/messageSerialization.d.ts +64 -0
  62. package/dist/utils/messageSerialization.js +184 -0
  63. package/dist/utils/queue.d.ts +50 -0
  64. package/dist/utils/queue.js +110 -0
  65. package/dist/utils/type.d.ts +10 -0
  66. package/dist/utils/type.js +4 -0
  67. package/dist/utils/userId.d.ts +40 -0
  68. package/dist/utils/userId.js +90 -0
  69. package/dist/utils/validation.d.ts +50 -0
  70. package/dist/utils/validation.js +112 -0
  71. package/dist/utils.d.ts +30 -0
  72. package/{src/utils.ts → dist/utils.js} +9 -19
  73. package/dist/wasm/encryption.d.ts +56 -0
  74. package/{src/wasm/encryption.ts → dist/wasm/encryption.js} +22 -51
  75. package/dist/wasm/index.d.ts +10 -0
  76. package/{src/wasm/index.ts → dist/wasm/index.js} +1 -8
  77. package/dist/wasm/loader.d.ts +21 -0
  78. package/dist/wasm/loader.js +103 -0
  79. package/dist/wasm/session.d.ts +85 -0
  80. package/dist/wasm/session.js +226 -0
  81. package/dist/wasm/userKeys.d.ts +17 -0
  82. package/{src/wasm/userKeys.ts → dist/wasm/userKeys.js} +6 -13
  83. package/package.json +5 -1
  84. package/src/api/messageProtocol/index.ts +0 -53
  85. package/src/api/messageProtocol/rest.ts +0 -209
  86. package/src/api/messageProtocol/types.ts +0 -70
  87. package/src/config/protocol.ts +0 -97
  88. package/src/config/sdk.ts +0 -131
  89. package/src/core/SdkEventEmitter.ts +0 -91
  90. package/src/core/SdkPolling.ts +0 -134
  91. package/src/crypto/bip39.ts +0 -84
  92. package/src/crypto/encryption.ts +0 -77
  93. package/src/db.ts +0 -465
  94. package/src/gossipSdk.ts +0 -994
  95. package/src/index.ts +0 -211
  96. package/src/services/announcement.ts +0 -653
  97. package/src/services/auth.ts +0 -95
  98. package/src/services/discussion.ts +0 -380
  99. package/src/services/message.ts +0 -1055
  100. package/src/services/refresh.ts +0 -234
  101. package/src/types/events.ts +0 -108
  102. package/src/types.ts +0 -70
  103. package/src/utils/base64.ts +0 -39
  104. package/src/utils/contacts.ts +0 -161
  105. package/src/utils/discussions.ts +0 -55
  106. package/src/utils/logs.ts +0 -86
  107. package/src/utils/messageSerialization.ts +0 -257
  108. package/src/utils/queue.ts +0 -106
  109. package/src/utils/type.ts +0 -7
  110. package/src/utils/userId.ts +0 -114
  111. package/src/utils/validation.ts +0 -144
  112. package/src/wasm/loader.ts +0 -123
  113. package/src/wasm/session.ts +0 -276
  114. package/test/config/protocol.spec.ts +0 -31
  115. package/test/config/sdk.spec.ts +0 -163
  116. package/test/db/helpers.spec.ts +0 -142
  117. package/test/db/operations.spec.ts +0 -128
  118. package/test/db/states.spec.ts +0 -535
  119. package/test/integration/discussion-flow.spec.ts +0 -422
  120. package/test/integration/messaging-flow.spec.ts +0 -708
  121. package/test/integration/sdk-lifecycle.spec.ts +0 -325
  122. package/test/mocks/index.ts +0 -9
  123. package/test/mocks/mockMessageProtocol.ts +0 -100
  124. package/test/services/auth.spec.ts +0 -311
  125. package/test/services/discussion.spec.ts +0 -279
  126. package/test/services/message-deduplication.spec.ts +0 -299
  127. package/test/services/message-startup.spec.ts +0 -331
  128. package/test/services/message.spec.ts +0 -817
  129. package/test/services/refresh.spec.ts +0 -199
  130. package/test/services/session-status.spec.ts +0 -349
  131. package/test/session/wasm.spec.ts +0 -227
  132. package/test/setup.ts +0 -52
  133. package/test/utils/contacts.spec.ts +0 -156
  134. package/test/utils/discussions.spec.ts +0 -66
  135. package/test/utils/queue.spec.ts +0 -52
  136. package/test/utils/serialization.spec.ts +0 -120
  137. package/test/utils/userId.spec.ts +0 -120
  138. package/test/utils/validation.spec.ts +0 -223
  139. package/test/utils.ts +0 -212
  140. package/tsconfig.json +0 -26
  141. package/tsconfig.tsbuildinfo +0 -1
  142. package/vitest.config.ts +0 -28
@@ -1,142 +0,0 @@
1
- /**
2
- * Database helper methods tests
3
- */
4
-
5
- import { describe, it, expect, beforeEach } from 'vitest';
6
- import {
7
- db,
8
- DiscussionDirection,
9
- DiscussionStatus,
10
- MessageDirection,
11
- MessageStatus,
12
- MessageType,
13
- } from '../../src/db';
14
- import { encodeUserId } from '../../src/utils/userId';
15
-
16
- const OWNER_USER_ID = encodeUserId(new Uint8Array(32).fill(6));
17
- const CONTACT_USER_ID = encodeUserId(new Uint8Array(32).fill(7));
18
-
19
- describe('Database helper methods', () => {
20
- beforeEach(async () => {
21
- if (!db.isOpen()) {
22
- await db.open();
23
- }
24
- await Promise.all(db.tables.map(table => table.clear()));
25
- });
26
-
27
- it('returns discussions sorted by last message timestamp', async () => {
28
- await db.discussions.add({
29
- ownerUserId: OWNER_USER_ID,
30
- contactUserId: CONTACT_USER_ID,
31
- direction: DiscussionDirection.INITIATED,
32
- status: DiscussionStatus.ACTIVE,
33
- unreadCount: 0,
34
- lastMessageTimestamp: new Date('2024-01-01'),
35
- createdAt: new Date('2024-01-01'),
36
- updatedAt: new Date('2024-01-01'),
37
- });
38
-
39
- await db.discussions.add({
40
- ownerUserId: OWNER_USER_ID,
41
- contactUserId: encodeUserId(new Uint8Array(32).fill(8)),
42
- direction: DiscussionDirection.INITIATED,
43
- status: DiscussionStatus.ACTIVE,
44
- unreadCount: 0,
45
- lastMessageTimestamp: new Date('2024-02-01'),
46
- createdAt: new Date('2024-02-01'),
47
- updatedAt: new Date('2024-02-01'),
48
- });
49
-
50
- const discussions = await db.getDiscussionsByOwner(OWNER_USER_ID);
51
- expect(discussions[0].lastMessageTimestamp?.toISOString()).toBe(
52
- new Date('2024-02-01').toISOString()
53
- );
54
- });
55
-
56
- it('returns active discussions only', async () => {
57
- await db.discussions.add({
58
- ownerUserId: OWNER_USER_ID,
59
- contactUserId: CONTACT_USER_ID,
60
- direction: DiscussionDirection.INITIATED,
61
- status: DiscussionStatus.ACTIVE,
62
- unreadCount: 0,
63
- createdAt: new Date(),
64
- updatedAt: new Date(),
65
- });
66
-
67
- await db.discussions.add({
68
- ownerUserId: OWNER_USER_ID,
69
- contactUserId: encodeUserId(new Uint8Array(32).fill(9)),
70
- direction: DiscussionDirection.RECEIVED,
71
- status: DiscussionStatus.PENDING,
72
- unreadCount: 0,
73
- createdAt: new Date(),
74
- updatedAt: new Date(),
75
- });
76
-
77
- const active = await db.getActiveDiscussionsByOwner(OWNER_USER_ID);
78
- expect(active.length).toBe(1);
79
- expect(active[0].status).toBe(DiscussionStatus.ACTIVE);
80
- });
81
-
82
- it('aggregates unread counts across discussions', async () => {
83
- await db.discussions.add({
84
- ownerUserId: OWNER_USER_ID,
85
- contactUserId: CONTACT_USER_ID,
86
- direction: DiscussionDirection.INITIATED,
87
- status: DiscussionStatus.ACTIVE,
88
- unreadCount: 2,
89
- createdAt: new Date(),
90
- updatedAt: new Date(),
91
- });
92
-
93
- await db.discussions.add({
94
- ownerUserId: OWNER_USER_ID,
95
- contactUserId: encodeUserId(new Uint8Array(32).fill(10)),
96
- direction: DiscussionDirection.RECEIVED,
97
- status: DiscussionStatus.ACTIVE,
98
- unreadCount: 3,
99
- createdAt: new Date(),
100
- updatedAt: new Date(),
101
- });
102
-
103
- const unread = await db.getUnreadCountByOwner(OWNER_USER_ID);
104
- expect(unread).toBe(5);
105
- });
106
-
107
- it('marks delivered incoming messages as read', async () => {
108
- await db.discussions.add({
109
- ownerUserId: OWNER_USER_ID,
110
- contactUserId: CONTACT_USER_ID,
111
- direction: DiscussionDirection.INITIATED,
112
- status: DiscussionStatus.ACTIVE,
113
- unreadCount: 1,
114
- createdAt: new Date(),
115
- updatedAt: new Date(),
116
- });
117
-
118
- await db.messages.add({
119
- ownerUserId: OWNER_USER_ID,
120
- contactUserId: CONTACT_USER_ID,
121
- content: 'Hello',
122
- type: MessageType.TEXT,
123
- direction: MessageDirection.INCOMING,
124
- status: MessageStatus.DELIVERED,
125
- timestamp: new Date(),
126
- });
127
-
128
- await db.markMessagesAsRead(OWNER_USER_ID, CONTACT_USER_ID);
129
-
130
- const messages = await db.messages
131
- .where('[ownerUserId+contactUserId+status]')
132
- .equals([OWNER_USER_ID, CONTACT_USER_ID, MessageStatus.READ])
133
- .toArray();
134
- expect(messages.length).toBe(1);
135
-
136
- const discussion = await db.getDiscussionByOwnerAndContact(
137
- OWNER_USER_ID,
138
- CONTACT_USER_ID
139
- );
140
- expect(discussion?.unreadCount).toBe(0);
141
- });
142
- });
@@ -1,128 +0,0 @@
1
- /**
2
- * Database operations tests
3
- */
4
-
5
- import { describe, it, expect, beforeEach, afterAll } from 'vitest';
6
- import {
7
- GossipDatabase,
8
- DiscussionStatus,
9
- DiscussionDirection,
10
- MessageDirection,
11
- MessageStatus,
12
- MessageType,
13
- } from '../../src/db';
14
-
15
- const TEST_OWNER_USER_ID = 'gossip1testowner';
16
- const TEST_CONTACT_USER_ID = 'gossip1testcontact';
17
-
18
- const testDb = new GossipDatabase();
19
-
20
- describe('Simple Database Tests', () => {
21
- beforeEach(async () => {
22
- if (!testDb.isOpen()) {
23
- await testDb.open();
24
- }
25
- await testDb.discussions.clear();
26
- await testDb.messages.clear();
27
- await testDb.contacts.clear();
28
- await testDb.pendingAnnouncements.clear();
29
- });
30
-
31
- afterAll(async () => {
32
- await testDb.close();
33
- });
34
-
35
- it('should create and retrieve a discussion', async () => {
36
- const discussionId = await testDb.discussions.add({
37
- ownerUserId: TEST_OWNER_USER_ID,
38
- contactUserId: TEST_CONTACT_USER_ID,
39
- direction: DiscussionDirection.INITIATED,
40
- status: DiscussionStatus.PENDING,
41
- unreadCount: 0,
42
- createdAt: new Date(),
43
- updatedAt: new Date(),
44
- });
45
-
46
- const discussion = await testDb.discussions.get(discussionId);
47
- expect(discussion?.direction).toBe(DiscussionDirection.INITIATED);
48
- expect(discussion?.status).toBe(DiscussionStatus.PENDING);
49
- });
50
-
51
- it('should update discussion status', async () => {
52
- const discussionId = await testDb.discussions.add({
53
- ownerUserId: TEST_OWNER_USER_ID,
54
- contactUserId: TEST_CONTACT_USER_ID,
55
- direction: DiscussionDirection.INITIATED,
56
- status: DiscussionStatus.PENDING,
57
- unreadCount: 0,
58
- createdAt: new Date(),
59
- updatedAt: new Date(),
60
- });
61
-
62
- await testDb.discussions.update(discussionId, {
63
- status: DiscussionStatus.ACTIVE,
64
- });
65
-
66
- const discussion = await testDb.discussions.get(discussionId);
67
- expect(discussion?.status).toBe(DiscussionStatus.ACTIVE);
68
- });
69
-
70
- it('should create and retrieve a message', async () => {
71
- const messageId = await testDb.messages.add({
72
- ownerUserId: TEST_OWNER_USER_ID,
73
- contactUserId: TEST_CONTACT_USER_ID,
74
- content: 'Test message',
75
- type: MessageType.TEXT,
76
- direction: MessageDirection.OUTGOING,
77
- status: MessageStatus.SENDING,
78
- timestamp: new Date(),
79
- });
80
-
81
- const message = await testDb.messages.get(messageId);
82
- expect(message?.content).toBe('Test message');
83
- expect(message?.status).toBe(MessageStatus.SENDING);
84
- });
85
-
86
- it('should reset SENDING messages to FAILED', async () => {
87
- await testDb.messages.add({
88
- ownerUserId: TEST_OWNER_USER_ID,
89
- contactUserId: TEST_CONTACT_USER_ID,
90
- content: 'Stuck message',
91
- type: MessageType.TEXT,
92
- direction: MessageDirection.OUTGOING,
93
- status: MessageStatus.SENDING,
94
- timestamp: new Date(),
95
- });
96
-
97
- const count = await testDb.messages
98
- .where('status')
99
- .equals(MessageStatus.SENDING)
100
- .modify({ status: MessageStatus.FAILED });
101
-
102
- expect(count).toBe(1);
103
-
104
- const messages = await testDb.messages
105
- .where('status')
106
- .equals(MessageStatus.FAILED)
107
- .toArray();
108
- expect(messages.length).toBe(1);
109
- });
110
-
111
- it('should store announcement bytes for retry', async () => {
112
- const announcement = new Uint8Array([1, 2, 3, 4, 5]);
113
- const discussionId = await testDb.discussions.add({
114
- ownerUserId: TEST_OWNER_USER_ID,
115
- contactUserId: TEST_CONTACT_USER_ID,
116
- direction: DiscussionDirection.INITIATED,
117
- status: DiscussionStatus.SEND_FAILED,
118
- initiationAnnouncement: announcement,
119
- unreadCount: 0,
120
- createdAt: new Date(),
121
- updatedAt: new Date(),
122
- });
123
-
124
- const discussion = await testDb.discussions.get(discussionId);
125
- expect(discussion?.initiationAnnouncement).toBeDefined();
126
- expect(discussion?.initiationAnnouncement?.length).toBe(5);
127
- });
128
- });