@openfin/cloud-api 0.0.1-alpha.4f8b7372 → 0.0.1-alpha.8d5ffd0
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/README.md +59 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -4
- package/dist/index.d.ts +42 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# @openfin/cloud-api
|
|
2
|
+
|
|
3
|
+
Client library for interacting with notifications when used as part of the OpenFin Cloud Platform.
|
|
4
|
+
|
|
5
|
+
<!-- High-level description of what this package is useful for. Include specific use case/s whenever possible. -->
|
|
6
|
+
|
|
7
|
+
<!-- Depending on package, explain why this package vs a different one, and link to other options. -->
|
|
8
|
+
|
|
9
|
+
Related packages:
|
|
10
|
+
|
|
11
|
+
- [@openfin/workspace](https://www.npmjs.com/package/@openfin/workspace)
|
|
12
|
+
- [@openfin/workspace-platform](https://www.npmjs.com/package/@openfin/workspace-platform)
|
|
13
|
+
|
|
14
|
+
<!-- For more information about how to work with this package, see [{the relevant docs}]({relevant_docs_link}). -->
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
None.
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
With npm:
|
|
23
|
+
|
|
24
|
+
> npm -i @openfin/cloud-api
|
|
25
|
+
|
|
26
|
+
With pnpm:
|
|
27
|
+
|
|
28
|
+
> pnpm add @openfin/cloud-api
|
|
29
|
+
|
|
30
|
+
With bun:
|
|
31
|
+
|
|
32
|
+
> bun add @openfin/cloud-api
|
|
33
|
+
|
|
34
|
+
With yarn:
|
|
35
|
+
|
|
36
|
+
> yarn global add @openfin/cloud-api
|
|
37
|
+
|
|
38
|
+
## Usage
|
|
39
|
+
|
|
40
|
+
<!-- If this is a command-line tool, this is some basic usage info. -->
|
|
41
|
+
|
|
42
|
+
<!-- If it is a library, link to the specific section of the developer guide or api refdoc. (This might mean repeating links already -->
|
|
43
|
+
<!-- provided in the first section of the readme. This is FINE.) -->
|
|
44
|
+
|
|
45
|
+
<!-- ## For more information -->
|
|
46
|
+
|
|
47
|
+
<!-- - [{Developer guide}]({relevant_docs_link}). -->
|
|
48
|
+
<!-- - [{API reference}]({relevant_docs_link}). -->
|
|
49
|
+
<!-- - See the [workspace-starter]() project for example code.-->
|
|
50
|
+
|
|
51
|
+
## License
|
|
52
|
+
|
|
53
|
+
Copyright 2024-2024 OpenFin
|
|
54
|
+
|
|
55
|
+
The code in this package is distributed under the {relevant license}.
|
|
56
|
+
|
|
57
|
+
However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin's Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the link listed below or email us at support@openfin.co with questions.
|
|
58
|
+
|
|
59
|
+
- [Developer license](https://openfin.co/developer-agreement/)
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["PACKAGE_NAME","getChannelName","isInViewContext","extractAppUuidFromIdentity","identity","notificationsClientPromise","getNotificationsClient","getNotificationsClientInternal","channelPromise","getChannelClient","message","listener","eventListeners","eventName","listeners","options","notificationId","channelClientPromise","getChannelClientInternal","channel"],"mappings":"AAMA,IAAMA,EAAe,qBAmBrB,SAASC,GAAiB,CACtB,MAAO,GAAG,OAAO,IAAI,GAAG,IAAI,0BAChC,CAEA,eAAeC,GAAoC,CAC/C,GAAI,CACA,aAAM,OAAO,IAAI,KAAK,eAAe,EAAE,QAAQ,EACxC,EACX,MAAQ,CACJ,MAAO,EACX,CACJ,CAEA,SAASC,EAA2BC,EAAoC,CACpE,GAAIA,EAAS,KAAK,WAAW,oBAAoB,EAC7C,MAAM,IAAI,MAAM,uCAAuC,EAG3D,MAAI,mBAAmB,KAAKA,EAAS,IAAI,EAC9BA,EAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAK,GAGnCA,EAAS,IACpB,CAEA,IAAIC,EAAkE,KAStE,eAAeC,GAAuD,CAClE,OAAKD,IACDA,EAA6BE,EAA+B,GAGzDF,CACX,CAEA,eAAeE,GAA+D,CAC1E,GAAI,CAAC,OAAO,IACR,MAAM,IAAI,MAAM,KAAKP,CAAY,4EAA4E,EAGjH,GAAK,MAAME,EAAgB,IAAO,GAC9B,MAAM,IAAI,MAAM,GAAGF,CAAY,0EAA0E,EAG7GG,EAA2B,OAAO,IAAI,EAAE,EAExC,IAAMK,EAAiB,MAAMC,EAAiB,EAC9C,QAAQ,IAAID,CAAc,EAE1BA,EAAe,SAAS,sBAAwBE,GAAY,CACxD,QAAWC,KAAYC,EAAe,IAAIF,EAAQ,IAAI,GAAK,CAAC,EAEpD,OAAOA,EAAQ,QAAQ,WAAc,WACrCA,EAAQ,QAAQ,UAAY,IAAI,KAAKA,EAAQ,QAAQ,SAAS,GAGlEC,EAASD,EAAQ,OAAgB,CAEzC,CAAC,EAED,IAAME,EAAiB,IAAI,IAE3B,MAAO,CACH,iBAAkB,CAAwCC,EAAcF,IAAuC,CAC3G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,GAAK,IAAI,IACvDC,EAAU,IAAIH,CAAQ,EACtBC,EAAe,IAAIC,EAAWC,CAAS,CAC3C,EACA,oBAAqB,CAAwCD,EAAcF,IAAuC,CAC9G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,EAC9C,GAAI,CAACC,EAAW,CACZ,QAAQ,KACJ,KAAKd,CAAY,+HACjBa,CACJ,EACA,MACJ,CAEIC,EAAU,OAAOH,CAAmC,IAAM,IAC1D,QAAQ,KAAK,KAAKX,CAAY,iGAAkGa,CAAS,CAEjJ,EACA,OAAQ,MAAOE,IACM,MAAMP,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAcO,CAClB,CACJ,CAAC,GACe,QAAQ,SAE5B,MAAO,MAAOC,IACO,MAAMR,EAAe,SAAS,mCAAoC,CAC/E,QAAS,EACT,QAAS,CACL,eAAAQ,CACJ,CACJ,CAAC,GACe,QAAQ,SAE5B,mBAAoB,MAChBD,IAEIA,EAAQ,IACR,QAAQ,KACJ,KAAKf,CAAY,+KACrB,GAEa,MAAMQ,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAc,CAAE,GAAGO,EAAS,GAAI,MAAU,CAC9C,CACJ,CAAC,GACe,QAAQ,SAEhC,CACJ,CAEA,IAAIE,EAA6D,KAEjE,eAAeR,GAAkD,CAC7D,OAAKQ,IACDA,EAAuBC,EAAyB,GAG7CD,CACX,CAEA,eAAeC,GAA0D,CACrE,IAAMC,EAAW,MAAM,OAAO,IAAI,oBAAoB,QAAQ,QAAQlB,EAAe,CAAC,EAEtF,OAAAkB,EAAQ,gBAAiBf,GAAa,CAClC,QAAQ,KAAK,KAAKJ,CAAY,gCAAiCI,EAAU,iBAAiB,EAC1Fa,EAAuB,IAC3B,CAAC,EAEME,CACX","sourcesContent":["// eslint-disable-next-line check-file/no-index\nimport type OpenFin from '@openfin/core';\nimport type * as NotificationsTypes from 'openfin-notifications';\n\nimport type { FlannelChannelClient, NotificationEventsMap, NotificationsClient } from './types';\n\nconst PACKAGE_NAME = '@openfin/cloud-api';\n\nexport type {\n FlannelChannelProvider as __INTERNAL_FlannelChannelProvider,\n FlannelCreateNotificationRequest as __INTERNAL_FlannelCreateNotificationRequest,\n FlannelCreateNotificationResponse as __INTERNAL_FlannelCreateNotificationResponse,\n FlannelUpdateNotificationRequest as __INTERNAL_FlannelUpdateNotificationRequest,\n FlannelUpdateNotificationResponse as __INTERNAL_FlannelUpdateNotificationResponse,\n FlannelClearNotificationRequest as __INTERNAL_FlannelClearNotificationRequest,\n FlannelClearNotificationResponse as __INTERNAL_FlannelClearNotificationResponse,\n} from './types';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface Window {\n fin: typeof import('@openfin/core').fin;\n }\n}\n\nfunction getChannelName() {\n return `${window.fin.me.uuid}-cloud-api-notifications`;\n}\n\nasync function isInViewContext(): Promise<boolean> {\n try {\n await window.fin.View.getCurrentSync().getInfo();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction extractAppUuidFromIdentity(identity: OpenFin.Identity): string {\n if (identity.name.startsWith('internal-generated')) {\n throw new Error('Cannot extract app UUID from identity');\n }\n // <uuid>/<name>\n if (/\\/[\\d,a-z-]{36}$/.test(identity.name)) {\n return identity.name.split('/')[0] || '';\n }\n\n return identity.name;\n}\n\nlet notificationsClientPromise: Promise<NotificationsClient> | null = null;\n\n/**\n * @returns A client for interacting with the OpenFin Notifications service\n *\n * @throws {Error} If the function is called outside of an OpenFin environment\n * @throws {Error} If the function is called outside of an OpenFin View context\n * @throws {Error} If the app UUID cannot be extracted from the current context\n */\nasync function getNotificationsClient(): Promise<NotificationsClient> {\n if (!notificationsClientPromise) {\n notificationsClientPromise = getNotificationsClientInternal();\n }\n\n return notificationsClientPromise;\n}\n\nasync function getNotificationsClientInternal(): Promise<NotificationsClient> {\n if (!window.fin) {\n throw new Error(`\\`${PACKAGE_NAME}\\`: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n if ((await isInViewContext()) === false) {\n throw new Error(`${PACKAGE_NAME}: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n extractAppUuidFromIdentity(window.fin.me);\n\n const channelPromise = await getChannelClient();\n console.log(channelPromise);\n\n channelPromise.register('openfin-cloud-event', (message) => {\n for (const listener of eventListeners.get(message.type) ?? []) {\n // `Date` is serialized as a string, so we need to convert it back\n if (typeof message.payload.timestamp === 'string') {\n message.payload.timestamp = new Date(message.payload.timestamp);\n }\n\n listener(message.payload as never);\n }\n });\n\n const eventListeners = new Map<keyof NotificationEventsMap, Set<NotificationEventsMap[keyof NotificationEventsMap]>>();\n\n return {\n addEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName) || new Set();\n listeners.add(listener);\n eventListeners.set(eventName, listeners);\n },\n removeEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName);\n if (!listeners) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference or forget to add the listener?`,\n eventName,\n );\n return;\n }\n\n if (listeners.delete(listener as (args: unknown) => void) === false) {\n console.warn(`\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference?`, eventName);\n }\n },\n update: async (options: Parameters<typeof NotificationsTypes.update>[0]): ReturnType<typeof NotificationsTypes.update> => {\n const response = await channelPromise.dispatch('openfin-cloud-update-notification', {\n version: 1,\n payload: {\n notification: options,\n },\n });\n return response.payload.response;\n },\n clear: async (notificationId: Parameters<typeof NotificationsTypes.clear>[0]): ReturnType<typeof NotificationsTypes.clear> => {\n const response = await channelPromise.dispatch('openfin-cloud-clear-notification', {\n version: 1,\n payload: {\n notificationId,\n },\n });\n return response.payload.response;\n },\n createNotification: async (\n options: NotificationsTypes.NotificationOptions,\n ): Promise<NotificationsTypes.Notification<NotificationsTypes.NotificationOptions>> => {\n if (options.id) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: The \\`id\\` property is not supported and will be ignored. If you need to use the \\`id\\` property, you should use the \\`id\\` property of the returned notification object.`,\n );\n }\n const response = await channelPromise.dispatch('openfin-cloud-create-notification', {\n version: 1,\n payload: {\n notification: { ...options, id: undefined },\n },\n });\n return response.payload.response;\n },\n };\n}\n\nlet channelClientPromise: Promise<FlannelChannelClient> | null = null;\n\nasync function getChannelClient(): Promise<FlannelChannelClient> {\n if (!channelClientPromise) {\n channelClientPromise = getChannelClientInternal();\n }\n\n return channelClientPromise;\n}\n\nasync function getChannelClientInternal(): Promise<FlannelChannelClient> {\n const channel = (await window.fin.InterApplicationBus.Channel.connect(getChannelName())) as FlannelChannelClient;\n\n channel.onDisconnection((identity) => {\n console.warn(`\\`${PACKAGE_NAME}\\`: Channel Disconnected from`, identity, 'Reconnecting...');\n channelClientPromise = null;\n });\n\n return channel;\n}\n\nexport { getNotificationsClient };\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["PACKAGE_NAME","getChannelName","isInViewContext","extractAppUuidFromIdentity","identity","notificationsClientPromise","getNotificationsClient","getNotificationsClientInternal","channelPromise","getChannelClient","message","listener","eventListeners","eventName","listeners","options","notificationId","channelClientPromise","getChannelClientInternal","channel"],"mappings":"AAMA,IAAMA,EAAe,qBAmBrB,SAASC,GAAiB,CACtB,MAAO,GAAG,OAAO,IAAI,GAAG,IAAI,0BAChC,CAEA,eAAeC,GAAoC,CAC/C,GAAI,CACA,aAAM,OAAO,IAAI,KAAK,eAAe,EAAE,QAAQ,EACxC,EACX,MAAQ,CACJ,MAAO,EACX,CACJ,CAEA,SAASC,EAA2BC,EAAoC,CACpE,GAAIA,EAAS,KAAK,WAAW,oBAAoB,EAC7C,MAAM,IAAI,MAAM,uCAAuC,EAG3D,MAAI,mBAAmB,KAAKA,EAAS,IAAI,EAC9BA,EAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAK,GAGnCA,EAAS,IACpB,CAEA,IAAIC,EAAkE,KAmDtE,eAAeC,GAAuD,CAClE,OAAKD,IACDA,EAA6BE,EAA+B,GAGzDF,CACX,CAEA,eAAeE,GAA+D,CAC1E,GAAI,CAAC,OAAO,IACR,MAAM,IAAI,MAAM,KAAKP,CAAY,4EAA4E,EAGjH,GAAK,MAAME,EAAgB,IAAO,GAC9B,MAAM,IAAI,MAAM,GAAGF,CAAY,0EAA0E,EAG7GG,EAA2B,OAAO,IAAI,EAAE,EAExC,IAAMK,EAAiB,MAAMC,EAAiB,EAC9C,QAAQ,IAAID,CAAc,EAE1BA,EAAe,SAAS,sBAAwBE,GAAY,CACxD,QAAWC,KAAYC,EAAe,IAAIF,EAAQ,IAAI,GAAK,CAAC,EAEpD,OAAOA,EAAQ,QAAQ,WAAc,WACrCA,EAAQ,QAAQ,UAAY,IAAI,KAAKA,EAAQ,QAAQ,SAAS,GAGlEC,EAASD,EAAQ,OAAgB,CAEzC,CAAC,EAED,IAAME,EAAiB,IAAI,IAE3B,MAAO,CACH,iBAAkB,CAAwCC,EAAcF,IAAuC,CAC3G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,GAAK,IAAI,IACvDC,EAAU,IAAIH,CAAQ,EACtBC,EAAe,IAAIC,EAAWC,CAAS,CAC3C,EACA,oBAAqB,CAAwCD,EAAcF,IAAuC,CAC9G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,EAC9C,GAAI,CAACC,EAAW,CACZ,QAAQ,KACJ,KAAKd,CAAY,+HACjBa,CACJ,EACA,MACJ,CAEIC,EAAU,OAAOH,CAAmC,IAAM,IAC1D,QAAQ,KAAK,KAAKX,CAAY,iGAAkGa,CAAS,CAEjJ,EACA,OAAQ,MAAOE,IACM,MAAMP,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAcO,CAClB,CACJ,CAAC,GACe,QAAQ,SAE5B,MAAO,MAAOC,IACO,MAAMR,EAAe,SAAS,mCAAoC,CAC/E,QAAS,EACT,QAAS,CACL,eAAAQ,CACJ,CACJ,CAAC,GACe,QAAQ,SAE5B,mBAAoB,MAChBD,IAEIA,EAAQ,IACR,QAAQ,KACJ,KAAKf,CAAY,+KACrB,GAEa,MAAMQ,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAc,CAAE,GAAGO,EAAS,GAAI,MAAU,CAC9C,CACJ,CAAC,GACe,QAAQ,SAEhC,CACJ,CAEA,IAAIE,EAA6D,KAEjE,eAAeR,GAAkD,CAC7D,OAAKQ,IACDA,EAAuBC,EAAyB,GAG7CD,CACX,CAEA,eAAeC,GAA0D,CACrE,IAAMC,EAAW,MAAM,OAAO,IAAI,oBAAoB,QAAQ,QAAQlB,EAAe,CAAC,EAEtF,OAAAkB,EAAQ,gBAAiBf,GAAa,CAClC,QAAQ,KAAK,KAAKJ,CAAY,gCAAiCI,EAAU,iBAAiB,EAC1Fa,EAAuB,IAC3B,CAAC,EAEME,CACX","sourcesContent":["// eslint-disable-next-line check-file/no-index\nimport type OpenFin from '@openfin/core';\nimport type * as NotificationsTypes from 'openfin-notifications';\n\nimport type { FlannelChannelClient, NotificationEventsMap, NotificationsClient } from './types';\n\nconst PACKAGE_NAME = '@openfin/cloud-api';\n\nexport type {\n FlannelChannelProvider as __INTERNAL_FlannelChannelProvider,\n FlannelCreateNotificationRequest as __INTERNAL_FlannelCreateNotificationRequest,\n FlannelCreateNotificationResponse as __INTERNAL_FlannelCreateNotificationResponse,\n FlannelUpdateNotificationRequest as __INTERNAL_FlannelUpdateNotificationRequest,\n FlannelUpdateNotificationResponse as __INTERNAL_FlannelUpdateNotificationResponse,\n FlannelClearNotificationRequest as __INTERNAL_FlannelClearNotificationRequest,\n FlannelClearNotificationResponse as __INTERNAL_FlannelClearNotificationResponse,\n} from './types';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface Window {\n fin: typeof import('@openfin/core').fin;\n }\n}\n\nfunction getChannelName() {\n return `${window.fin.me.uuid}-cloud-api-notifications`;\n}\n\nasync function isInViewContext(): Promise<boolean> {\n try {\n await window.fin.View.getCurrentSync().getInfo();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction extractAppUuidFromIdentity(identity: OpenFin.Identity): string {\n if (identity.name.startsWith('internal-generated')) {\n throw new Error('Cannot extract app UUID from identity');\n }\n // <uuid>/<name>\n if (/\\/[\\d,a-z-]{36}$/.test(identity.name)) {\n return identity.name.split('/')[0] || '';\n }\n\n return identity.name;\n}\n\nlet notificationsClientPromise: Promise<NotificationsClient> | null = null;\n\n/**\n * @returns A client for interacting with the OpenFin Notifications service\n *\n * @throws {Error} If the function is called outside of an OpenFin environment\n * @throws {Error} If the function is called outside of an OpenFin View context\n * @throws {Error} If the app UUID cannot be extracted from the current context\n *\n * @example **Basic Usage** Creating a notification, updating it and then clearing it\n * ```ts\n * const notificationsClient = await getNotificationsClient();\n *\n * const notification = await notificationsClient.createNotification({\n * title: 'Hello, World!',\n * body: 'This is a notification from the OpenFin Cloud API',\n * });\n *\n * // Use the `id` from the returned notification to interact with it\n * console.log(notification.id);\n *\n * // Update the notification\n * await notificationsClient.update({\n * id: notification.id,\n * body: 'This is a notification from the OpenFin Cloud API, that has been updated!',\n * })\n *\n * // Clear the notification\n * await notificationsClient.clear(notification.id);\n * ```\n *\n * @example **Advanced Usage** Listening for events\n * ```ts\n * const notificationsClient = await getNotificationsClient();\n *\n * // create the notification\n * const notification = await notificationsClient.createNotification({\n * title: `${window.fin.me.identity.name} Hello, World!`,\n * body: `This is a notification from the cloud API example created at ${new Date().toLocaleTimeString()}`,\n * buttons: [\n * {\n * title: 'Acknowledge',\n * },\n * ],\n * });\n *\n * notificationsClient.addEventListener('notification-action', (event) => {\n * console.log('Notification action:', event);\n * });\n * ```\n */\nasync function getNotificationsClient(): Promise<NotificationsClient> {\n if (!notificationsClientPromise) {\n notificationsClientPromise = getNotificationsClientInternal();\n }\n\n return notificationsClientPromise;\n}\n\nasync function getNotificationsClientInternal(): Promise<NotificationsClient> {\n if (!window.fin) {\n throw new Error(`\\`${PACKAGE_NAME}\\`: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n if ((await isInViewContext()) === false) {\n throw new Error(`${PACKAGE_NAME}: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n extractAppUuidFromIdentity(window.fin.me);\n\n const channelPromise = await getChannelClient();\n console.log(channelPromise);\n\n channelPromise.register('openfin-cloud-event', (message) => {\n for (const listener of eventListeners.get(message.type) ?? []) {\n // `Date` is serialized as a string, so we need to convert it back\n if (typeof message.payload.timestamp === 'string') {\n message.payload.timestamp = new Date(message.payload.timestamp);\n }\n\n listener(message.payload as never);\n }\n });\n\n const eventListeners = new Map<keyof NotificationEventsMap, Set<NotificationEventsMap[keyof NotificationEventsMap]>>();\n\n return {\n addEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName) || new Set();\n listeners.add(listener);\n eventListeners.set(eventName, listeners);\n },\n removeEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName);\n if (!listeners) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference or forget to add the listener?`,\n eventName,\n );\n return;\n }\n\n if (listeners.delete(listener as (args: unknown) => void) === false) {\n console.warn(`\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference?`, eventName);\n }\n },\n update: async (options: Parameters<typeof NotificationsTypes.update>[0]): ReturnType<typeof NotificationsTypes.update> => {\n const response = await channelPromise.dispatch('openfin-cloud-update-notification', {\n version: 1,\n payload: {\n notification: options,\n },\n });\n return response.payload.response;\n },\n clear: async (notificationId: Parameters<typeof NotificationsTypes.clear>[0]): ReturnType<typeof NotificationsTypes.clear> => {\n const response = await channelPromise.dispatch('openfin-cloud-clear-notification', {\n version: 1,\n payload: {\n notificationId,\n },\n });\n return response.payload.response;\n },\n createNotification: async (\n options: NotificationsTypes.NotificationOptions,\n ): Promise<NotificationsTypes.Notification<NotificationsTypes.NotificationOptions>> => {\n if (options.id) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: The \\`id\\` property is not supported and will be ignored. If you need to use the \\`id\\` property, you should use the \\`id\\` property of the returned notification object.`,\n );\n }\n const response = await channelPromise.dispatch('openfin-cloud-create-notification', {\n version: 1,\n payload: {\n notification: { ...options, id: undefined },\n },\n });\n return response.payload.response;\n },\n };\n}\n\nlet channelClientPromise: Promise<FlannelChannelClient> | null = null;\n\nasync function getChannelClient(): Promise<FlannelChannelClient> {\n if (!channelClientPromise) {\n channelClientPromise = getChannelClientInternal();\n }\n\n return channelClientPromise;\n}\n\nasync function getChannelClientInternal(): Promise<FlannelChannelClient> {\n const channel = (await window.fin.InterApplicationBus.Channel.connect(getChannelName())) as FlannelChannelClient;\n\n channel.onDisconnection((identity) => {\n console.warn(`\\`${PACKAGE_NAME}\\`: Channel Disconnected from`, identity, 'Reconnecting...');\n channelClientPromise = null;\n });\n\n return channel;\n}\n\nexport { getNotificationsClient };\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -31,14 +31,10 @@ type NotificationsClient = {
|
|
|
31
31
|
createNotification(...args: Parameters<typeof NotificationsTypes.create>): ReturnType<typeof NotificationsTypes.create>;
|
|
32
32
|
/**
|
|
33
33
|
* Updates an existing Notification.
|
|
34
|
-
*
|
|
35
|
-
* @remarks Not implemented.
|
|
36
34
|
*/
|
|
37
35
|
update(...args: Parameters<typeof NotificationsTypes.update>): ReturnType<typeof NotificationsTypes.update>;
|
|
38
36
|
/**
|
|
39
37
|
* Clears a Notification with the specified id.
|
|
40
|
-
*
|
|
41
|
-
* @remarks Not implemented.
|
|
42
38
|
*/
|
|
43
39
|
clear(...args: Parameters<typeof NotificationsTypes.clear>): ReturnType<typeof NotificationsTypes.clear>;
|
|
44
40
|
};
|
|
@@ -167,6 +163,48 @@ declare global {
|
|
|
167
163
|
* @throws {Error} If the function is called outside of an OpenFin environment
|
|
168
164
|
* @throws {Error} If the function is called outside of an OpenFin View context
|
|
169
165
|
* @throws {Error} If the app UUID cannot be extracted from the current context
|
|
166
|
+
*
|
|
167
|
+
* @example **Basic Usage** Creating a notification, updating it and then clearing it
|
|
168
|
+
* ```ts
|
|
169
|
+
* const notificationsClient = await getNotificationsClient();
|
|
170
|
+
*
|
|
171
|
+
* const notification = await notificationsClient.createNotification({
|
|
172
|
+
* title: 'Hello, World!',
|
|
173
|
+
* body: 'This is a notification from the OpenFin Cloud API',
|
|
174
|
+
* });
|
|
175
|
+
*
|
|
176
|
+
* // Use the `id` from the returned notification to interact with it
|
|
177
|
+
* console.log(notification.id);
|
|
178
|
+
*
|
|
179
|
+
* // Update the notification
|
|
180
|
+
* await notificationsClient.update({
|
|
181
|
+
* id: notification.id,
|
|
182
|
+
* body: 'This is a notification from the OpenFin Cloud API, that has been updated!',
|
|
183
|
+
* })
|
|
184
|
+
*
|
|
185
|
+
* // Clear the notification
|
|
186
|
+
* await notificationsClient.clear(notification.id);
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* @example **Advanced Usage** Listening for events
|
|
190
|
+
* ```ts
|
|
191
|
+
* const notificationsClient = await getNotificationsClient();
|
|
192
|
+
*
|
|
193
|
+
* // create the notification
|
|
194
|
+
* const notification = await notificationsClient.createNotification({
|
|
195
|
+
* title: `${window.fin.me.identity.name} Hello, World!`,
|
|
196
|
+
* body: `This is a notification from the cloud API example created at ${new Date().toLocaleTimeString()}`,
|
|
197
|
+
* buttons: [
|
|
198
|
+
* {
|
|
199
|
+
* title: 'Acknowledge',
|
|
200
|
+
* },
|
|
201
|
+
* ],
|
|
202
|
+
* });
|
|
203
|
+
*
|
|
204
|
+
* notificationsClient.addEventListener('notification-action', (event) => {
|
|
205
|
+
* console.log('Notification action:', event);
|
|
206
|
+
* });
|
|
207
|
+
* ```
|
|
170
208
|
*/
|
|
171
209
|
declare function getNotificationsClient(): Promise<NotificationsClient>;
|
|
172
210
|
|
package/dist/index.d.ts
CHANGED
|
@@ -31,14 +31,10 @@ type NotificationsClient = {
|
|
|
31
31
|
createNotification(...args: Parameters<typeof NotificationsTypes.create>): ReturnType<typeof NotificationsTypes.create>;
|
|
32
32
|
/**
|
|
33
33
|
* Updates an existing Notification.
|
|
34
|
-
*
|
|
35
|
-
* @remarks Not implemented.
|
|
36
34
|
*/
|
|
37
35
|
update(...args: Parameters<typeof NotificationsTypes.update>): ReturnType<typeof NotificationsTypes.update>;
|
|
38
36
|
/**
|
|
39
37
|
* Clears a Notification with the specified id.
|
|
40
|
-
*
|
|
41
|
-
* @remarks Not implemented.
|
|
42
38
|
*/
|
|
43
39
|
clear(...args: Parameters<typeof NotificationsTypes.clear>): ReturnType<typeof NotificationsTypes.clear>;
|
|
44
40
|
};
|
|
@@ -167,6 +163,48 @@ declare global {
|
|
|
167
163
|
* @throws {Error} If the function is called outside of an OpenFin environment
|
|
168
164
|
* @throws {Error} If the function is called outside of an OpenFin View context
|
|
169
165
|
* @throws {Error} If the app UUID cannot be extracted from the current context
|
|
166
|
+
*
|
|
167
|
+
* @example **Basic Usage** Creating a notification, updating it and then clearing it
|
|
168
|
+
* ```ts
|
|
169
|
+
* const notificationsClient = await getNotificationsClient();
|
|
170
|
+
*
|
|
171
|
+
* const notification = await notificationsClient.createNotification({
|
|
172
|
+
* title: 'Hello, World!',
|
|
173
|
+
* body: 'This is a notification from the OpenFin Cloud API',
|
|
174
|
+
* });
|
|
175
|
+
*
|
|
176
|
+
* // Use the `id` from the returned notification to interact with it
|
|
177
|
+
* console.log(notification.id);
|
|
178
|
+
*
|
|
179
|
+
* // Update the notification
|
|
180
|
+
* await notificationsClient.update({
|
|
181
|
+
* id: notification.id,
|
|
182
|
+
* body: 'This is a notification from the OpenFin Cloud API, that has been updated!',
|
|
183
|
+
* })
|
|
184
|
+
*
|
|
185
|
+
* // Clear the notification
|
|
186
|
+
* await notificationsClient.clear(notification.id);
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* @example **Advanced Usage** Listening for events
|
|
190
|
+
* ```ts
|
|
191
|
+
* const notificationsClient = await getNotificationsClient();
|
|
192
|
+
*
|
|
193
|
+
* // create the notification
|
|
194
|
+
* const notification = await notificationsClient.createNotification({
|
|
195
|
+
* title: `${window.fin.me.identity.name} Hello, World!`,
|
|
196
|
+
* body: `This is a notification from the cloud API example created at ${new Date().toLocaleTimeString()}`,
|
|
197
|
+
* buttons: [
|
|
198
|
+
* {
|
|
199
|
+
* title: 'Acknowledge',
|
|
200
|
+
* },
|
|
201
|
+
* ],
|
|
202
|
+
* });
|
|
203
|
+
*
|
|
204
|
+
* notificationsClient.addEventListener('notification-action', (event) => {
|
|
205
|
+
* console.log('Notification action:', event);
|
|
206
|
+
* });
|
|
207
|
+
* ```
|
|
170
208
|
*/
|
|
171
209
|
declare function getNotificationsClient(): Promise<NotificationsClient>;
|
|
172
210
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// eslint-disable-next-line check-file/no-index\nimport type OpenFin from '@openfin/core';\nimport type * as NotificationsTypes from 'openfin-notifications';\n\nimport type { FlannelChannelClient, NotificationEventsMap, NotificationsClient } from './types';\n\nconst PACKAGE_NAME = '@openfin/cloud-api';\n\nexport type {\n FlannelChannelProvider as __INTERNAL_FlannelChannelProvider,\n FlannelCreateNotificationRequest as __INTERNAL_FlannelCreateNotificationRequest,\n FlannelCreateNotificationResponse as __INTERNAL_FlannelCreateNotificationResponse,\n FlannelUpdateNotificationRequest as __INTERNAL_FlannelUpdateNotificationRequest,\n FlannelUpdateNotificationResponse as __INTERNAL_FlannelUpdateNotificationResponse,\n FlannelClearNotificationRequest as __INTERNAL_FlannelClearNotificationRequest,\n FlannelClearNotificationResponse as __INTERNAL_FlannelClearNotificationResponse,\n} from './types';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface Window {\n fin: typeof import('@openfin/core').fin;\n }\n}\n\nfunction getChannelName() {\n return `${window.fin.me.uuid}-cloud-api-notifications`;\n}\n\nasync function isInViewContext(): Promise<boolean> {\n try {\n await window.fin.View.getCurrentSync().getInfo();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction extractAppUuidFromIdentity(identity: OpenFin.Identity): string {\n if (identity.name.startsWith('internal-generated')) {\n throw new Error('Cannot extract app UUID from identity');\n }\n // <uuid>/<name>\n if (/\\/[\\d,a-z-]{36}$/.test(identity.name)) {\n return identity.name.split('/')[0] || '';\n }\n\n return identity.name;\n}\n\nlet notificationsClientPromise: Promise<NotificationsClient> | null = null;\n\n/**\n * @returns A client for interacting with the OpenFin Notifications service\n *\n * @throws {Error} If the function is called outside of an OpenFin environment\n * @throws {Error} If the function is called outside of an OpenFin View context\n * @throws {Error} If the app UUID cannot be extracted from the current context\n */\nasync function getNotificationsClient(): Promise<NotificationsClient> {\n if (!notificationsClientPromise) {\n notificationsClientPromise = getNotificationsClientInternal();\n }\n\n return notificationsClientPromise;\n}\n\nasync function getNotificationsClientInternal(): Promise<NotificationsClient> {\n if (!window.fin) {\n throw new Error(`\\`${PACKAGE_NAME}\\`: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n if ((await isInViewContext()) === false) {\n throw new Error(`${PACKAGE_NAME}: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n extractAppUuidFromIdentity(window.fin.me);\n\n const channelPromise = await getChannelClient();\n console.log(channelPromise);\n\n channelPromise.register('openfin-cloud-event', (message) => {\n for (const listener of eventListeners.get(message.type) ?? []) {\n // `Date` is serialized as a string, so we need to convert it back\n if (typeof message.payload.timestamp === 'string') {\n message.payload.timestamp = new Date(message.payload.timestamp);\n }\n\n listener(message.payload as never);\n }\n });\n\n const eventListeners = new Map<keyof NotificationEventsMap, Set<NotificationEventsMap[keyof NotificationEventsMap]>>();\n\n return {\n addEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName) || new Set();\n listeners.add(listener);\n eventListeners.set(eventName, listeners);\n },\n removeEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName);\n if (!listeners) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference or forget to add the listener?`,\n eventName,\n );\n return;\n }\n\n if (listeners.delete(listener as (args: unknown) => void) === false) {\n console.warn(`\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference?`, eventName);\n }\n },\n update: async (options: Parameters<typeof NotificationsTypes.update>[0]): ReturnType<typeof NotificationsTypes.update> => {\n const response = await channelPromise.dispatch('openfin-cloud-update-notification', {\n version: 1,\n payload: {\n notification: options,\n },\n });\n return response.payload.response;\n },\n clear: async (notificationId: Parameters<typeof NotificationsTypes.clear>[0]): ReturnType<typeof NotificationsTypes.clear> => {\n const response = await channelPromise.dispatch('openfin-cloud-clear-notification', {\n version: 1,\n payload: {\n notificationId,\n },\n });\n return response.payload.response;\n },\n createNotification: async (\n options: NotificationsTypes.NotificationOptions,\n ): Promise<NotificationsTypes.Notification<NotificationsTypes.NotificationOptions>> => {\n if (options.id) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: The \\`id\\` property is not supported and will be ignored. If you need to use the \\`id\\` property, you should use the \\`id\\` property of the returned notification object.`,\n );\n }\n const response = await channelPromise.dispatch('openfin-cloud-create-notification', {\n version: 1,\n payload: {\n notification: { ...options, id: undefined },\n },\n });\n return response.payload.response;\n },\n };\n}\n\nlet channelClientPromise: Promise<FlannelChannelClient> | null = null;\n\nasync function getChannelClient(): Promise<FlannelChannelClient> {\n if (!channelClientPromise) {\n channelClientPromise = getChannelClientInternal();\n }\n\n return channelClientPromise;\n}\n\nasync function getChannelClientInternal(): Promise<FlannelChannelClient> {\n const channel = (await window.fin.InterApplicationBus.Channel.connect(getChannelName())) as FlannelChannelClient;\n\n channel.onDisconnection((identity) => {\n console.warn(`\\`${PACKAGE_NAME}\\`: Channel Disconnected from`, identity, 'Reconnecting...');\n channelClientPromise = null;\n });\n\n return channel;\n}\n\nexport { getNotificationsClient };\n"],"mappings":"AAMA,IAAMA,EAAe,qBAmBrB,SAASC,GAAiB,CACtB,MAAO,GAAG,OAAO,IAAI,GAAG,IAAI,0BAChC,CAEA,eAAeC,GAAoC,CAC/C,GAAI,CACA,aAAM,OAAO,IAAI,KAAK,eAAe,EAAE,QAAQ,EACxC,EACX,MAAQ,CACJ,MAAO,EACX,CACJ,CAEA,SAASC,EAA2BC,EAAoC,CACpE,GAAIA,EAAS,KAAK,WAAW,oBAAoB,EAC7C,MAAM,IAAI,MAAM,uCAAuC,EAG3D,MAAI,mBAAmB,KAAKA,EAAS,IAAI,EAC9BA,EAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAK,GAGnCA,EAAS,IACpB,CAEA,IAAIC,EAAkE,KAStE,eAAeC,GAAuD,CAClE,OAAKD,IACDA,EAA6BE,EAA+B,GAGzDF,CACX,CAEA,eAAeE,GAA+D,CAC1E,GAAI,CAAC,OAAO,IACR,MAAM,IAAI,MAAM,KAAKP,CAAY,4EAA4E,EAGjH,GAAK,MAAME,EAAgB,IAAO,GAC9B,MAAM,IAAI,MAAM,GAAGF,CAAY,0EAA0E,EAG7GG,EAA2B,OAAO,IAAI,EAAE,EAExC,IAAMK,EAAiB,MAAMC,EAAiB,EAC9C,QAAQ,IAAID,CAAc,EAE1BA,EAAe,SAAS,sBAAwBE,GAAY,CACxD,QAAWC,KAAYC,EAAe,IAAIF,EAAQ,IAAI,GAAK,CAAC,EAEpD,OAAOA,EAAQ,QAAQ,WAAc,WACrCA,EAAQ,QAAQ,UAAY,IAAI,KAAKA,EAAQ,QAAQ,SAAS,GAGlEC,EAASD,EAAQ,OAAgB,CAEzC,CAAC,EAED,IAAME,EAAiB,IAAI,IAE3B,MAAO,CACH,iBAAkB,CAAwCC,EAAcF,IAAuC,CAC3G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,GAAK,IAAI,IACvDC,EAAU,IAAIH,CAAQ,EACtBC,EAAe,IAAIC,EAAWC,CAAS,CAC3C,EACA,oBAAqB,CAAwCD,EAAcF,IAAuC,CAC9G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,EAC9C,GAAI,CAACC,EAAW,CACZ,QAAQ,KACJ,KAAKd,CAAY,+HACjBa,CACJ,EACA,MACJ,CAEIC,EAAU,OAAOH,CAAmC,IAAM,IAC1D,QAAQ,KAAK,KAAKX,CAAY,iGAAkGa,CAAS,CAEjJ,EACA,OAAQ,MAAOE,IACM,MAAMP,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAcO,CAClB,CACJ,CAAC,GACe,QAAQ,SAE5B,MAAO,MAAOC,IACO,MAAMR,EAAe,SAAS,mCAAoC,CAC/E,QAAS,EACT,QAAS,CACL,eAAAQ,CACJ,CACJ,CAAC,GACe,QAAQ,SAE5B,mBAAoB,MAChBD,IAEIA,EAAQ,IACR,QAAQ,KACJ,KAAKf,CAAY,+KACrB,GAEa,MAAMQ,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAc,CAAE,GAAGO,EAAS,GAAI,MAAU,CAC9C,CACJ,CAAC,GACe,QAAQ,SAEhC,CACJ,CAEA,IAAIE,EAA6D,KAEjE,eAAeR,GAAkD,CAC7D,OAAKQ,IACDA,EAAuBC,EAAyB,GAG7CD,CACX,CAEA,eAAeC,GAA0D,CACrE,IAAMC,EAAW,MAAM,OAAO,IAAI,oBAAoB,QAAQ,QAAQlB,EAAe,CAAC,EAEtF,OAAAkB,EAAQ,gBAAiBf,GAAa,CAClC,QAAQ,KAAK,KAAKJ,CAAY,gCAAiCI,EAAU,iBAAiB,EAC1Fa,EAAuB,IAC3B,CAAC,EAEME,CACX","names":["PACKAGE_NAME","getChannelName","isInViewContext","extractAppUuidFromIdentity","identity","notificationsClientPromise","getNotificationsClient","getNotificationsClientInternal","channelPromise","getChannelClient","message","listener","eventListeners","eventName","listeners","options","notificationId","channelClientPromise","getChannelClientInternal","channel"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// eslint-disable-next-line check-file/no-index\nimport type OpenFin from '@openfin/core';\nimport type * as NotificationsTypes from 'openfin-notifications';\n\nimport type { FlannelChannelClient, NotificationEventsMap, NotificationsClient } from './types';\n\nconst PACKAGE_NAME = '@openfin/cloud-api';\n\nexport type {\n FlannelChannelProvider as __INTERNAL_FlannelChannelProvider,\n FlannelCreateNotificationRequest as __INTERNAL_FlannelCreateNotificationRequest,\n FlannelCreateNotificationResponse as __INTERNAL_FlannelCreateNotificationResponse,\n FlannelUpdateNotificationRequest as __INTERNAL_FlannelUpdateNotificationRequest,\n FlannelUpdateNotificationResponse as __INTERNAL_FlannelUpdateNotificationResponse,\n FlannelClearNotificationRequest as __INTERNAL_FlannelClearNotificationRequest,\n FlannelClearNotificationResponse as __INTERNAL_FlannelClearNotificationResponse,\n} from './types';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/consistent-type-definitions\n interface Window {\n fin: typeof import('@openfin/core').fin;\n }\n}\n\nfunction getChannelName() {\n return `${window.fin.me.uuid}-cloud-api-notifications`;\n}\n\nasync function isInViewContext(): Promise<boolean> {\n try {\n await window.fin.View.getCurrentSync().getInfo();\n return true;\n } catch {\n return false;\n }\n}\n\nfunction extractAppUuidFromIdentity(identity: OpenFin.Identity): string {\n if (identity.name.startsWith('internal-generated')) {\n throw new Error('Cannot extract app UUID from identity');\n }\n // <uuid>/<name>\n if (/\\/[\\d,a-z-]{36}$/.test(identity.name)) {\n return identity.name.split('/')[0] || '';\n }\n\n return identity.name;\n}\n\nlet notificationsClientPromise: Promise<NotificationsClient> | null = null;\n\n/**\n * @returns A client for interacting with the OpenFin Notifications service\n *\n * @throws {Error} If the function is called outside of an OpenFin environment\n * @throws {Error} If the function is called outside of an OpenFin View context\n * @throws {Error} If the app UUID cannot be extracted from the current context\n *\n * @example **Basic Usage** Creating a notification, updating it and then clearing it\n * ```ts\n * const notificationsClient = await getNotificationsClient();\n *\n * const notification = await notificationsClient.createNotification({\n * title: 'Hello, World!',\n * body: 'This is a notification from the OpenFin Cloud API',\n * });\n *\n * // Use the `id` from the returned notification to interact with it\n * console.log(notification.id);\n *\n * // Update the notification\n * await notificationsClient.update({\n * id: notification.id,\n * body: 'This is a notification from the OpenFin Cloud API, that has been updated!',\n * })\n *\n * // Clear the notification\n * await notificationsClient.clear(notification.id);\n * ```\n *\n * @example **Advanced Usage** Listening for events\n * ```ts\n * const notificationsClient = await getNotificationsClient();\n *\n * // create the notification\n * const notification = await notificationsClient.createNotification({\n * title: `${window.fin.me.identity.name} Hello, World!`,\n * body: `This is a notification from the cloud API example created at ${new Date().toLocaleTimeString()}`,\n * buttons: [\n * {\n * title: 'Acknowledge',\n * },\n * ],\n * });\n *\n * notificationsClient.addEventListener('notification-action', (event) => {\n * console.log('Notification action:', event);\n * });\n * ```\n */\nasync function getNotificationsClient(): Promise<NotificationsClient> {\n if (!notificationsClientPromise) {\n notificationsClientPromise = getNotificationsClientInternal();\n }\n\n return notificationsClientPromise;\n}\n\nasync function getNotificationsClientInternal(): Promise<NotificationsClient> {\n if (!window.fin) {\n throw new Error(`\\`${PACKAGE_NAME}\\`: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n if ((await isInViewContext()) === false) {\n throw new Error(`${PACKAGE_NAME}: \\`getNotificationsClient\\` cannot be used in a non-OpenFin environment`);\n }\n\n extractAppUuidFromIdentity(window.fin.me);\n\n const channelPromise = await getChannelClient();\n console.log(channelPromise);\n\n channelPromise.register('openfin-cloud-event', (message) => {\n for (const listener of eventListeners.get(message.type) ?? []) {\n // `Date` is serialized as a string, so we need to convert it back\n if (typeof message.payload.timestamp === 'string') {\n message.payload.timestamp = new Date(message.payload.timestamp);\n }\n\n listener(message.payload as never);\n }\n });\n\n const eventListeners = new Map<keyof NotificationEventsMap, Set<NotificationEventsMap[keyof NotificationEventsMap]>>();\n\n return {\n addEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName) || new Set();\n listeners.add(listener);\n eventListeners.set(eventName, listeners);\n },\n removeEventListener: <T extends keyof NotificationEventsMap>(eventName: T, listener: NotificationEventsMap[T]) => {\n const listeners = eventListeners.get(eventName);\n if (!listeners) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference or forget to add the listener?`,\n eventName,\n );\n return;\n }\n\n if (listeners.delete(listener as (args: unknown) => void) === false) {\n console.warn(`\\`${PACKAGE_NAME}\\`: Listener was not found for event. Did you pass a function directly instead of a reference?`, eventName);\n }\n },\n update: async (options: Parameters<typeof NotificationsTypes.update>[0]): ReturnType<typeof NotificationsTypes.update> => {\n const response = await channelPromise.dispatch('openfin-cloud-update-notification', {\n version: 1,\n payload: {\n notification: options,\n },\n });\n return response.payload.response;\n },\n clear: async (notificationId: Parameters<typeof NotificationsTypes.clear>[0]): ReturnType<typeof NotificationsTypes.clear> => {\n const response = await channelPromise.dispatch('openfin-cloud-clear-notification', {\n version: 1,\n payload: {\n notificationId,\n },\n });\n return response.payload.response;\n },\n createNotification: async (\n options: NotificationsTypes.NotificationOptions,\n ): Promise<NotificationsTypes.Notification<NotificationsTypes.NotificationOptions>> => {\n if (options.id) {\n console.warn(\n `\\`${PACKAGE_NAME}\\`: The \\`id\\` property is not supported and will be ignored. If you need to use the \\`id\\` property, you should use the \\`id\\` property of the returned notification object.`,\n );\n }\n const response = await channelPromise.dispatch('openfin-cloud-create-notification', {\n version: 1,\n payload: {\n notification: { ...options, id: undefined },\n },\n });\n return response.payload.response;\n },\n };\n}\n\nlet channelClientPromise: Promise<FlannelChannelClient> | null = null;\n\nasync function getChannelClient(): Promise<FlannelChannelClient> {\n if (!channelClientPromise) {\n channelClientPromise = getChannelClientInternal();\n }\n\n return channelClientPromise;\n}\n\nasync function getChannelClientInternal(): Promise<FlannelChannelClient> {\n const channel = (await window.fin.InterApplicationBus.Channel.connect(getChannelName())) as FlannelChannelClient;\n\n channel.onDisconnection((identity) => {\n console.warn(`\\`${PACKAGE_NAME}\\`: Channel Disconnected from`, identity, 'Reconnecting...');\n channelClientPromise = null;\n });\n\n return channel;\n}\n\nexport { getNotificationsClient };\n"],"mappings":"AAMA,IAAMA,EAAe,qBAmBrB,SAASC,GAAiB,CACtB,MAAO,GAAG,OAAO,IAAI,GAAG,IAAI,0BAChC,CAEA,eAAeC,GAAoC,CAC/C,GAAI,CACA,aAAM,OAAO,IAAI,KAAK,eAAe,EAAE,QAAQ,EACxC,EACX,MAAQ,CACJ,MAAO,EACX,CACJ,CAEA,SAASC,EAA2BC,EAAoC,CACpE,GAAIA,EAAS,KAAK,WAAW,oBAAoB,EAC7C,MAAM,IAAI,MAAM,uCAAuC,EAG3D,MAAI,mBAAmB,KAAKA,EAAS,IAAI,EAC9BA,EAAS,KAAK,MAAM,GAAG,EAAE,CAAC,GAAK,GAGnCA,EAAS,IACpB,CAEA,IAAIC,EAAkE,KAmDtE,eAAeC,GAAuD,CAClE,OAAKD,IACDA,EAA6BE,EAA+B,GAGzDF,CACX,CAEA,eAAeE,GAA+D,CAC1E,GAAI,CAAC,OAAO,IACR,MAAM,IAAI,MAAM,KAAKP,CAAY,4EAA4E,EAGjH,GAAK,MAAME,EAAgB,IAAO,GAC9B,MAAM,IAAI,MAAM,GAAGF,CAAY,0EAA0E,EAG7GG,EAA2B,OAAO,IAAI,EAAE,EAExC,IAAMK,EAAiB,MAAMC,EAAiB,EAC9C,QAAQ,IAAID,CAAc,EAE1BA,EAAe,SAAS,sBAAwBE,GAAY,CACxD,QAAWC,KAAYC,EAAe,IAAIF,EAAQ,IAAI,GAAK,CAAC,EAEpD,OAAOA,EAAQ,QAAQ,WAAc,WACrCA,EAAQ,QAAQ,UAAY,IAAI,KAAKA,EAAQ,QAAQ,SAAS,GAGlEC,EAASD,EAAQ,OAAgB,CAEzC,CAAC,EAED,IAAME,EAAiB,IAAI,IAE3B,MAAO,CACH,iBAAkB,CAAwCC,EAAcF,IAAuC,CAC3G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,GAAK,IAAI,IACvDC,EAAU,IAAIH,CAAQ,EACtBC,EAAe,IAAIC,EAAWC,CAAS,CAC3C,EACA,oBAAqB,CAAwCD,EAAcF,IAAuC,CAC9G,IAAMG,EAAYF,EAAe,IAAIC,CAAS,EAC9C,GAAI,CAACC,EAAW,CACZ,QAAQ,KACJ,KAAKd,CAAY,+HACjBa,CACJ,EACA,MACJ,CAEIC,EAAU,OAAOH,CAAmC,IAAM,IAC1D,QAAQ,KAAK,KAAKX,CAAY,iGAAkGa,CAAS,CAEjJ,EACA,OAAQ,MAAOE,IACM,MAAMP,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAcO,CAClB,CACJ,CAAC,GACe,QAAQ,SAE5B,MAAO,MAAOC,IACO,MAAMR,EAAe,SAAS,mCAAoC,CAC/E,QAAS,EACT,QAAS,CACL,eAAAQ,CACJ,CACJ,CAAC,GACe,QAAQ,SAE5B,mBAAoB,MAChBD,IAEIA,EAAQ,IACR,QAAQ,KACJ,KAAKf,CAAY,+KACrB,GAEa,MAAMQ,EAAe,SAAS,oCAAqC,CAChF,QAAS,EACT,QAAS,CACL,aAAc,CAAE,GAAGO,EAAS,GAAI,MAAU,CAC9C,CACJ,CAAC,GACe,QAAQ,SAEhC,CACJ,CAEA,IAAIE,EAA6D,KAEjE,eAAeR,GAAkD,CAC7D,OAAKQ,IACDA,EAAuBC,EAAyB,GAG7CD,CACX,CAEA,eAAeC,GAA0D,CACrE,IAAMC,EAAW,MAAM,OAAO,IAAI,oBAAoB,QAAQ,QAAQlB,EAAe,CAAC,EAEtF,OAAAkB,EAAQ,gBAAiBf,GAAa,CAClC,QAAQ,KAAK,KAAKJ,CAAY,gCAAiCI,EAAU,iBAAiB,EAC1Fa,EAAuB,IAC3B,CAAC,EAEME,CACX","names":["PACKAGE_NAME","getChannelName","isInViewContext","extractAppUuidFromIdentity","identity","notificationsClientPromise","getNotificationsClient","getNotificationsClientInternal","channelPromise","getChannelClient","message","listener","eventListeners","eventName","listeners","options","notificationId","channelClientPromise","getChannelClientInternal","channel"]}
|