@massalabs/gossip-sdk 0.0.2-dev.20260128094509

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 (69) hide show
  1. package/README.md +484 -0
  2. package/package.json +41 -0
  3. package/src/api/messageProtocol/index.ts +53 -0
  4. package/src/api/messageProtocol/mock.ts +13 -0
  5. package/src/api/messageProtocol/rest.ts +209 -0
  6. package/src/api/messageProtocol/types.ts +70 -0
  7. package/src/config/protocol.ts +97 -0
  8. package/src/config/sdk.ts +131 -0
  9. package/src/contacts.ts +210 -0
  10. package/src/core/SdkEventEmitter.ts +91 -0
  11. package/src/core/SdkPolling.ts +134 -0
  12. package/src/core/index.ts +9 -0
  13. package/src/crypto/bip39.ts +84 -0
  14. package/src/crypto/encryption.ts +77 -0
  15. package/src/db.ts +465 -0
  16. package/src/gossipSdk.ts +994 -0
  17. package/src/index.ts +211 -0
  18. package/src/services/announcement.ts +653 -0
  19. package/src/services/auth.ts +95 -0
  20. package/src/services/discussion.ts +380 -0
  21. package/src/services/message.ts +1055 -0
  22. package/src/services/refresh.ts +234 -0
  23. package/src/sw.ts +17 -0
  24. package/src/types/events.ts +108 -0
  25. package/src/types.ts +70 -0
  26. package/src/utils/base64.ts +39 -0
  27. package/src/utils/contacts.ts +161 -0
  28. package/src/utils/discussions.ts +55 -0
  29. package/src/utils/logs.ts +86 -0
  30. package/src/utils/messageSerialization.ts +257 -0
  31. package/src/utils/queue.ts +106 -0
  32. package/src/utils/type.ts +7 -0
  33. package/src/utils/userId.ts +114 -0
  34. package/src/utils/validation.ts +144 -0
  35. package/src/utils.ts +47 -0
  36. package/src/wasm/encryption.ts +108 -0
  37. package/src/wasm/index.ts +20 -0
  38. package/src/wasm/loader.ts +123 -0
  39. package/src/wasm/session.ts +276 -0
  40. package/src/wasm/userKeys.ts +31 -0
  41. package/test/config/protocol.spec.ts +31 -0
  42. package/test/config/sdk.spec.ts +163 -0
  43. package/test/db/helpers.spec.ts +142 -0
  44. package/test/db/operations.spec.ts +128 -0
  45. package/test/db/states.spec.ts +535 -0
  46. package/test/integration/discussion-flow.spec.ts +422 -0
  47. package/test/integration/messaging-flow.spec.ts +708 -0
  48. package/test/integration/sdk-lifecycle.spec.ts +325 -0
  49. package/test/mocks/index.ts +9 -0
  50. package/test/mocks/mockMessageProtocol.ts +100 -0
  51. package/test/services/auth.spec.ts +311 -0
  52. package/test/services/discussion.spec.ts +279 -0
  53. package/test/services/message-deduplication.spec.ts +299 -0
  54. package/test/services/message-startup.spec.ts +331 -0
  55. package/test/services/message.spec.ts +817 -0
  56. package/test/services/refresh.spec.ts +199 -0
  57. package/test/services/session-status.spec.ts +349 -0
  58. package/test/session/wasm.spec.ts +227 -0
  59. package/test/setup.ts +52 -0
  60. package/test/utils/contacts.spec.ts +156 -0
  61. package/test/utils/discussions.spec.ts +66 -0
  62. package/test/utils/queue.spec.ts +52 -0
  63. package/test/utils/serialization.spec.ts +120 -0
  64. package/test/utils/userId.spec.ts +120 -0
  65. package/test/utils/validation.spec.ts +223 -0
  66. package/test/utils.ts +212 -0
  67. package/tsconfig.json +26 -0
  68. package/tsconfig.tsbuildinfo +1 -0
  69. package/vitest.config.ts +28 -0
package/src/index.ts ADDED
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Gossip SDK
3
+ *
4
+ * Main entry point for the Gossip SDK.
5
+ * Provides a platform-agnostic interface for automation, chatbot,
6
+ * and integration use cases with the Gossip messenger.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { gossipSdk } from 'gossip-sdk';
11
+ *
12
+ * // Initialize once at app startup
13
+ * await gossipSdk.init({
14
+ * db,
15
+ * protocolBaseUrl: 'https://api.example.com',
16
+ * });
17
+ *
18
+ * // Open session (login)
19
+ * await gossipSdk.openSession({ mnemonic: '...' });
20
+ *
21
+ * // Use clean API
22
+ * await gossipSdk.messages.send(contactId, 'Hello!');
23
+ * await gossipSdk.discussions.start(contact);
24
+ *
25
+ * // Events
26
+ * gossipSdk.on('message', (msg) => { ... });
27
+ *
28
+ * // Logout
29
+ * await gossipSdk.closeSession();
30
+ * ```
31
+ *
32
+ * @packageDocumentation
33
+ */
34
+
35
+ // SDK version - matches package.json
36
+ export const SDK_VERSION = '0.0.1';
37
+
38
+ // ─────────────────────────────────────────────────────────────────────────────
39
+ // SDK Singleton - Primary API
40
+ // ─────────────────────────────────────────────────────────────────────────────
41
+ export { gossipSdk, GossipSdkImpl } from './gossipSdk';
42
+ export type {
43
+ GossipSdkInitOptions,
44
+ OpenSessionOptions,
45
+ SdkEventType,
46
+ SdkEventHandlers,
47
+ } from './gossipSdk';
48
+
49
+ // SDK Events
50
+ export type { GossipSdkEvents } from './types/events';
51
+
52
+ // Services - class-based with dependency injection
53
+ export { AuthService } from './services/auth';
54
+ export type { PublicKeyResult } from './services/auth';
55
+ export {
56
+ getPublicKeyErrorMessage,
57
+ PUBLIC_KEY_NOT_FOUND_ERROR,
58
+ PUBLIC_KEY_NOT_FOUND_MESSAGE,
59
+ FAILED_TO_FETCH_ERROR,
60
+ FAILED_TO_FETCH_MESSAGE,
61
+ FAILED_TO_RETRIEVE_CONTACT_PUBLIC_KEY_ERROR,
62
+ } from './services/auth';
63
+
64
+ export {
65
+ AnnouncementService,
66
+ EstablishSessionError,
67
+ } from './services/announcement';
68
+ export type { AnnouncementReceptionResult } from './services/announcement';
69
+
70
+ export { MessageService } from './services/message';
71
+ export type { MessageResult, SendMessageResult } from './services/message';
72
+
73
+ export { DiscussionService } from './services/discussion';
74
+
75
+ export { RefreshService } from './services/refresh';
76
+
77
+ // Contact Management (utility functions)
78
+ export {
79
+ getContacts,
80
+ getContact,
81
+ addContact,
82
+ updateContactName,
83
+ deleteContact,
84
+ } from './contacts';
85
+ export type {
86
+ UpdateContactNameResult,
87
+ DeleteContactResult,
88
+ } from './utils/contacts';
89
+
90
+ // Discussion utilities
91
+ export { updateDiscussionName } from './utils/discussions';
92
+ export type { UpdateDiscussionNameResult } from './utils/discussions';
93
+
94
+ // Types - re-export all types from the types module
95
+ export * from './types';
96
+
97
+ // Message Protocol - for direct use by host apps
98
+ export {
99
+ createMessageProtocol,
100
+ restMessageProtocol,
101
+ RestMessageProtocol,
102
+ MessageProtocol,
103
+ } from './api/messageProtocol';
104
+ export type {
105
+ IMessageProtocol,
106
+ EncryptedMessage,
107
+ MessageProtocolResponse,
108
+ BulletinItem,
109
+ } from './api/messageProtocol';
110
+
111
+ // Config - for runtime configuration
112
+ export {
113
+ setProtocolBaseUrl,
114
+ resetProtocolBaseUrl,
115
+ MessageProtocolType,
116
+ protocolConfig,
117
+ } from './config/protocol';
118
+ export type { ProtocolConfig } from './config/protocol';
119
+
120
+ // SDK Config - for SDK initialization options
121
+ export { defaultSdkConfig, mergeConfig } from './config/sdk';
122
+ export type {
123
+ SdkConfig,
124
+ PollingConfig,
125
+ MessagesConfig,
126
+ AnnouncementsConfig,
127
+ DeepPartial,
128
+ } from './config/sdk';
129
+
130
+ // Database - for direct access by host apps
131
+ export { setDb, getDb, db, GossipDatabase } from './db';
132
+
133
+ // WASM utilities - for session management
134
+ export { SessionModule, sessionStatusToString } from './wasm/session';
135
+ export {
136
+ initializeWasm,
137
+ ensureWasmInitialized,
138
+ startWasmInitialization,
139
+ } from './wasm/loader';
140
+ export {
141
+ EncryptionKey,
142
+ Nonce,
143
+ generateEncryptionKey,
144
+ generateEncryptionKeyFromSeed,
145
+ encryptionKeyFromBytes,
146
+ generateNonce,
147
+ nonceFromBytes,
148
+ encryptAead,
149
+ decryptAead,
150
+ } from './wasm/encryption';
151
+ export { generateUserKeys } from './wasm/userKeys';
152
+
153
+ // Utility functions - for direct use
154
+ export {
155
+ encodeUserId,
156
+ decodeUserId,
157
+ isValidUserId,
158
+ formatUserId,
159
+ generate as generateUserId,
160
+ } from './utils/userId';
161
+ export {
162
+ validateUsernameFormat,
163
+ validatePassword,
164
+ validateUserIdFormat,
165
+ validateUsernameAvailability,
166
+ validateUsernameFormatAndAvailability,
167
+ } from './utils/validation';
168
+ export type { ValidationResult } from './utils/validation';
169
+ export {
170
+ encodeToBase64,
171
+ decodeFromBase64,
172
+ encodeToBase64Url,
173
+ decodeFromBase64Url,
174
+ } from './utils/base64';
175
+ export type { Result } from './utils/type';
176
+
177
+ // Message serialization utilities
178
+ export {
179
+ MESSAGE_TYPE_KEEP_ALIVE,
180
+ serializeKeepAliveMessage,
181
+ serializeRegularMessage,
182
+ serializeReplyMessage,
183
+ serializeForwardMessage,
184
+ deserializeMessage,
185
+ } from './utils/messageSerialization';
186
+ export type { DeserializedMessage } from './utils/messageSerialization';
187
+
188
+ // Crypto utilities
189
+ export {
190
+ generateMnemonic,
191
+ validateMnemonic,
192
+ mnemonicToSeed,
193
+ accountFromMnemonic,
194
+ PRIVATE_KEY_VERSION,
195
+ } from './crypto/bip39';
196
+ export { encrypt, decrypt, deriveKey } from './crypto/encryption';
197
+
198
+ // WASM types and functions re-exported for convenience
199
+ export {
200
+ UserPublicKeys,
201
+ UserSecretKeys,
202
+ SessionStatus,
203
+ SessionConfig,
204
+ SessionManagerWrapper,
205
+ SendMessageOutput,
206
+ ReceiveMessageOutput,
207
+ AnnouncementResult,
208
+ generate_user_keys,
209
+ } from './assets/generated/wasm/gossip_wasm';
210
+
211
+ export { UserKeys } from './wasm/userKeys';