@openfin/cloud-notification-core-api 0.0.1-alpha.04fd21d

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.
package/LICENSE.md ADDED
@@ -0,0 +1,4 @@
1
+ Learn more about OpenFin licensing at the links listed below or email us at support@openfin.co with questions.
2
+
3
+ - [Developer agreement](https://openfin.co/developer-agreement)
4
+
package/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # @openfin/cloud-notification-core-api
2
+
3
+ This package contains the core notification library that handles all interactions with the Here™ Cloud Notification Service.
4
+
5
+ It is callable via browser or node applications.
6
+
7
+
8
+ ## Authentication
9
+
10
+ The library supports authentication with the Here™ Cloud Notification Service using the following methods:
11
+ - Basic Authentication
12
+ - JWT Token Authentication
13
+ - Default Authentication i.e. Interactive session based authentication using cookies
14
+
package/bundle.d.ts ADDED
@@ -0,0 +1,409 @@
1
+ import z from 'zod';
2
+
3
+ export declare class AuthorizationError extends CloudNotificationAPIError {
4
+ constructor(message?: string, code?: string);
5
+ }
6
+
7
+ export declare type BaseNotificationReceivedEvent = {
8
+ action: 'new' | 'update' | 'delete';
9
+ notificationId: string;
10
+ correlationId?: string;
11
+ target: string;
12
+ targetName?: string;
13
+ targetType: string;
14
+ payload: unknown;
15
+ };
16
+
17
+ /**
18
+ * Represents a single connection to the Cloud Notification service
19
+ *
20
+ */
21
+ export declare class CloudNotificationAPI {
22
+ #private;
23
+ deDuplicator: SetWithTTL<string>;
24
+ constructor(cloudNotificationSettings: CloudNotificationSettings);
25
+ /**
26
+ * Connects and creates a session on the Cloud Notifications service.
27
+ *
28
+ * @param parameters - The parameters to use to connect.
29
+ * @returns A promise that resolves when the connection is established.
30
+ * @throws {@link CloudNotificationAPIError} If an error occurs during connection.
31
+ * @throws {@link AuthorizationError} If the connection is unauthorized.
32
+ */
33
+ connect(parameters: ConnectParameters): Promise<ConnectionResult>;
34
+ /**
35
+ * Disconnects from the Cloud Notification service.
36
+ *
37
+ * @returns A promise that resolves when disconnected.
38
+ * @throws {@link CloudNotificationAPIError} If an error occurs during disconnection.
39
+ */
40
+ disconnect(): Promise<void>;
41
+ /**
42
+ * Posts a notification event to the Cloud Notification service.
43
+ *
44
+ * @param notificationId - The ID of the notification.
45
+ * @param event - The event details, including category, type, and optional payload.
46
+ * @returns A promise that resolves when the event is posted.
47
+ * @throws {@link SessionNotConnectedError} If the session is not connected.
48
+ * @throws {@link PublishError} If an error occurs during publishing.
49
+ */
50
+ postNotificationEvent(notificationId: string, event: {
51
+ category: string;
52
+ type: string;
53
+ payload?: unknown;
54
+ }): Promise<void>;
55
+ /**
56
+ * Raises a notification to the Cloud Notification service.
57
+ *
58
+ * @param options - The options for the notification.
59
+ * @param payload - The payload of the notification.
60
+ * @returns A promise that resolves with the notification raise result.
61
+ * @throws {@link SessionNotConnectedError} If the session is not connected.
62
+ * @throws {@link PublishError} If an error occurs during publishing.
63
+ */
64
+ raiseNotification(options: NotificationOptions_2, payload: unknown): Promise<NotificationRaiseResult>;
65
+ /**
66
+ * Raises a notification update to the Cloud Notification service.
67
+ *
68
+ * @param notificationId - The ID of the notification to update.
69
+ * @param options - The options for the notification update.
70
+ * @param payload - The new payload of the notification.
71
+ * @throws {@link SessionNotConnectedError} If the session is not connected.
72
+ * @throws {@link PublishError} If an error occurs during publishing of the update.
73
+ */
74
+ updateNotification(notificationId: string, options: NotificationUpdateOptions, payload: unknown): Promise<void>;
75
+ /**
76
+ * Marks a notification as deleted in the Cloud Notification service.
77
+ *
78
+ * @param notificationId - The ID of the notification to delete.
79
+ * @returns A promise that resolves when the notification is deleted.
80
+ * @throws {@link SessionNotConnectedError} If the session is not connected.
81
+ */
82
+ deleteNotification(notificationId: string): Promise<void>;
83
+ /**
84
+ * Replays notifications from the Cloud Notification service.
85
+ *
86
+ * @param pageItemLimit - The maximum number of items per page.
87
+ * @param pageStartCursor - The cursor to start the page from.
88
+ * @returns A promise that resolves with the notifications replay details.
89
+ * @throws {@link SessionNotConnectedError} If the session is not connected.
90
+ * @throws {@link NotificationRetrievalError} If an error occurs during retrieval.
91
+ */
92
+ replayNotifications(pageItemLimit: number | undefined, pageStartCursor: string | undefined): Promise<NotificationsReplayDetails>;
93
+ /**
94
+ * Adds an event listener for a specific event type.
95
+ *
96
+ * @param type - The event type.
97
+ * @param callback - The callback function to invoke when the event occurs.
98
+ */
99
+ addEventListener<K extends keyof EventMap>(type: K, callback: EventMap[K]): void;
100
+ /**
101
+ * Removes an event listener for a specific event type.
102
+ *
103
+ * @param type - The event type.
104
+ * @param callback - The callback function to remove.
105
+ */
106
+ removeEventListener<K extends keyof EventMap>(type: K, callback: EventMap[K]): void;
107
+ /**
108
+ * Adds a one-time event listener for a specific event type.
109
+ *
110
+ * @param type - The event type.
111
+ * @param callback - The callback function to invoke once when the event occurs.
112
+ */
113
+ once<K extends keyof EventMap>(type: K, callback: EventMap[K]): void;
114
+ }
115
+
116
+ export declare class CloudNotificationAPIError extends Error {
117
+ code: string;
118
+ constructor(message?: string, code?: string, cause?: unknown);
119
+ }
120
+
121
+ /**
122
+ * Represents a logging function to be used by the cloud notification client
123
+ */
124
+ export declare type CloudNotificationLogger = (level: LogLevel, message: string) => void;
125
+
126
+ export declare type CloudNotificationSettings = {
127
+ /**
128
+ * The URL of the notification server to connect to
129
+ */
130
+ url: string;
131
+ /**
132
+ * The maximum number of times to retry connecting to the cloud notification service when the connection is dropped
133
+ * defaults to 30
134
+ */
135
+ reconnectRetryLimit?: number;
136
+ /**
137
+ * Specifies how often keep alive messages should be sent to the cloud notification service in seconds
138
+ * defaults to 30
139
+ */
140
+ keepAliveIntervalSeconds?: number;
141
+ /**
142
+ * Optional function to call with any logging messages to allow integration with the host application's logging
143
+ *
144
+ * defaults to console.log
145
+ */
146
+ logger?: CloudNotificationLogger;
147
+ /**
148
+ * The time used to deduplicate notifications
149
+ */
150
+ deduplicationTTLms?: number;
151
+ /**
152
+ * Will cause the api to calculate the time offset between the local machine and the notification server
153
+ * defaults to true
154
+ */
155
+ syncTime?: boolean;
156
+ };
157
+
158
+ /**
159
+ * Repesents the result of a successful connection to the server
160
+ */
161
+ export declare type ConnectionResult = {
162
+ /**
163
+ * The unique identifier for the session
164
+ */
165
+ sessionId: string;
166
+ /**
167
+ * The platform identifier
168
+ */
169
+ platformId: string;
170
+ /**
171
+ * The source identifier
172
+ */
173
+ sourceId: string;
174
+ /**
175
+ * The user identifier
176
+ */
177
+ userId: string;
178
+ /**
179
+ * A collection of groups that the user is either a direct or indirect member of
180
+ */
181
+ groups: {
182
+ uuid: string;
183
+ name: string;
184
+ }[];
185
+ };
186
+
187
+ /**
188
+ * Represents the parameters to use to connect to an notification server
189
+ */
190
+ export declare type ConnectParameters = {
191
+ /**
192
+ * ID for a group of shared applications.
193
+ * This acts as a namespace for the notification messages that allows separation of messages between different groups of applications for the same user
194
+ */
195
+ platformId: string;
196
+ /**
197
+ * A value that distinguishes the host the application is running in. For example this could be the hostname of the current machine
198
+ */
199
+ sourceId: string;
200
+ /**
201
+ * Determines the type of authentication to use with the service gateway
202
+ * defaults to 'none'
203
+ *
204
+ * 'jwt' - Use JWT authentication, in this case jwtAuthenticationParameters must also be provided
205
+ * 'basic' - Use basic authentication, in this case basicAuthenticationParameters must also be provided
206
+ * 'default' - Authentication will be inherited from the current session
207
+ */
208
+ authenticationType?: 'jwt' | 'basic' | 'default';
209
+ /**
210
+ * Optional parameters for basic authentication
211
+ */
212
+ basicAuthenticationParameters?: {
213
+ /**
214
+ * The username to use for basic authentication
215
+ */
216
+ username: string;
217
+ /**
218
+ * The password to use for basic authentication
219
+ */
220
+ password: string;
221
+ };
222
+ /**
223
+ * Optional parameters for JWT authentication
224
+ */
225
+ jwtAuthenticationParameters?: {
226
+ /**
227
+ * When JWT authentication is being used, this will be invoked just whenever a JWT token is required for a request
228
+ */
229
+ jwtRequestCallback: () => string | object;
230
+ /**
231
+ * The id of the service gateway JWT authentication definition to use
232
+ *
233
+ * Note: Contact Here support to to get your organization's authentication id
234
+ */
235
+ authenticationId: string;
236
+ };
237
+ };
238
+
239
+ export declare type DeleteNotificationEvent = BaseNotificationReceivedEvent & {
240
+ action: 'delete';
241
+ };
242
+
243
+ export declare type EventListenersMap = Map<keyof EventMap, Array<(...args: Parameters<EventMap[keyof EventMap]>) => void>>;
244
+
245
+ export declare type EventMap = {
246
+ reconnected: () => void;
247
+ disconnected: () => void;
248
+ reconnecting: (attemptNo: number) => void;
249
+ error: (error: Error) => void;
250
+ 'session-expired': () => void;
251
+ 'session-extended': () => void;
252
+ 'new-notification': (event: NewNotificationEvent) => void;
253
+ 'update-notification': (event: UpdateNotificationEvent) => void;
254
+ 'delete-notification': (event: DeleteNotificationEvent) => void;
255
+ 'notification-event': (event: NotificationEvent) => void;
256
+ };
257
+
258
+ export declare class EventPublishError extends CloudNotificationAPIError {
259
+ constructor(message?: string, code?: string, cause?: unknown);
260
+ }
261
+
262
+ export declare class EventRetrievalError extends CloudNotificationAPIError {
263
+ constructor(message?: string, code?: string, cause?: unknown);
264
+ }
265
+
266
+ export declare class InvalidMessageFormatError extends CloudNotificationAPIError {
267
+ constructor(zodParseResult: z.SafeParseReturnType<unknown, unknown>);
268
+ }
269
+
270
+ export declare type LogLevel = 'log' | 'debug' | 'info' | 'warn' | 'error';
271
+
272
+ export declare type NewNotificationEvent = BaseNotificationReceivedEvent & {
273
+ action: 'new';
274
+ };
275
+
276
+ export declare type NotificationEvent = {
277
+ notificationId: string;
278
+ correlationId?: string;
279
+ category: string;
280
+ type: string;
281
+ payload?: unknown;
282
+ };
283
+
284
+ /**
285
+ * Represents the options for a notification publish
286
+ */
287
+ declare type NotificationOptions_2 = {
288
+ /**
289
+ * A caller specified identifier for the notification
290
+ * This is used to identify the notification in the system when events and responses are received
291
+ */
292
+ correlationId?: string;
293
+ /**
294
+ * The targets to send the notification to
295
+ * This is a set of groups and users that the notification will be sent to
296
+ */
297
+ targets: NotificationTargets;
298
+ /**
299
+ * Optional number of seconds to keep the notification alive
300
+ * After this time the notification will be expired and a delete update will be raised
301
+ */
302
+ ttlSeconds?: number;
303
+ };
304
+ export { NotificationOptions_2 as NotificationOptions }
305
+
306
+ /**
307
+ * Represents the response from raising a notification
308
+ */
309
+ export declare type NotificationRaiseResult = {
310
+ /**
311
+ * The unique identifier for the notification
312
+ */
313
+ notificationId: string;
314
+ /**
315
+ * The correlation ID that was provided when raising the notification
316
+ */
317
+ correlationId?: string;
318
+ };
319
+
320
+ export declare class NotificationRetrievalError extends CloudNotificationAPIError {
321
+ constructor(message?: string, code?: string, cause?: unknown);
322
+ }
323
+
324
+ export declare type NotificationsReplayDetail = {
325
+ cursor: string;
326
+ sessionId: string;
327
+ notificationId: string;
328
+ version: number;
329
+ action: 'new' | 'update' | 'delete';
330
+ payload?: unknown;
331
+ correlationId?: string | null;
332
+ timestamp: Date;
333
+ };
334
+
335
+ export declare type NotificationsReplayDetails = {
336
+ data: NotificationsReplayDetail[];
337
+ pageInfo: {
338
+ pageStart?: string;
339
+ nextPage?: string;
340
+ hasNextPage: boolean;
341
+ };
342
+ };
343
+
344
+ /**
345
+ * Represents a set of targets for a notification publish
346
+ */
347
+ export declare type NotificationTargets = {
348
+ /**
349
+ * The groups to send the notification to
350
+ */
351
+ groups: string[];
352
+ /**
353
+ * The users to send the notification to
354
+ */
355
+ users: string[];
356
+ };
357
+
358
+ /**
359
+ * Represents the options for a notification update
360
+ */
361
+ export declare type NotificationUpdateOptions = {
362
+ /**
363
+ * Optional number of seconds to keep the notification alive
364
+ * After this time the notification will be expired and a delete update will be raised
365
+ */
366
+ ttlSeconds?: number;
367
+ };
368
+
369
+ export declare class PublishError extends CloudNotificationAPIError {
370
+ constructor(message?: string, code?: string, cause?: unknown);
371
+ }
372
+
373
+ export declare type PublishResult = {
374
+ notificationId: string;
375
+ correlationId: string | undefined;
376
+ };
377
+
378
+ export declare class SessionNotConnectedError extends CloudNotificationAPIError {
379
+ constructor(message?: string, code?: string);
380
+ }
381
+
382
+ /**
383
+ * Simple set-like structure that allows you to add values with a TTL (time to live).
384
+ * Values are automatically removed from the set after the TTL expires.
385
+ */
386
+ declare class SetWithTTL<T> {
387
+ #private;
388
+ private ttl;
389
+ private store;
390
+ private nextCollection;
391
+ private collectionDelay;
392
+ constructor(ttl: number, collectionCheckInterval?: number);
393
+ get size(): number;
394
+ add(value: T, customTtl?: number): this;
395
+ has(value: T): boolean;
396
+ delete(value: T): this;
397
+ }
398
+
399
+ export declare type UpdateNotificationEvent = BaseNotificationReceivedEvent & {
400
+ action: 'update';
401
+ };
402
+
403
+ export declare type UserGroupWithTopic = {
404
+ uuid: string;
405
+ name: string;
406
+ topic?: string;
407
+ };
408
+
409
+ export { }