{"version":3,"file":"index.mjs","sources":["../../../../src/internals/events/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { amplifyUuid } from '@aws-amplify/core/internals/utils';\nimport { AppSyncEventProvider as eventProvider } from '../../Providers/AWSAppSyncEventsProvider';\nimport { appsyncRequest } from './appsyncRequest';\nimport { configure, normalizeAuth, serializeEvents } from './utils';\n// Keeps a list of open channels in the websocket\nconst openChannels = new Set();\n/**\n * @experimental API may change in future versions\n *\n * Establish a WebSocket connection to an Events channel\n *\n * @example\n * const channel = await events.connect(\"default/channel\")\n *\n * channel.subscribe({\n *   next: (data) => { console.log(data) },\n *   error: (err) => { console.error(err) },\n * })\n *\n * @example // authMode override\n * const channel = await events.connect(\"default/channel\", { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param options - request overrides: `authMode`, `authToken`\n *\n */\nasync function connect(channel, options) {\n    const providerOptions = configure();\n    providerOptions.authenticationType = normalizeAuth(options?.authMode, providerOptions.authenticationType);\n    providerOptions.apiKey = options?.apiKey || providerOptions.apiKey;\n    providerOptions.authToken = options?.authToken || providerOptions.authToken;\n    await eventProvider.connect(providerOptions);\n    const channelId = amplifyUuid();\n    openChannels.add(channelId);\n    let _subscription;\n    const sub = (observer, subOptions) => {\n        if (!openChannels.has(channelId)) {\n            throw new Error('Channel is closed');\n        }\n        const subscribeOptions = { ...providerOptions, query: channel };\n        subscribeOptions.authenticationType = normalizeAuth(subOptions?.authMode, subscribeOptions.authenticationType);\n        subscribeOptions.apiKey = subOptions?.apiKey || subscribeOptions.apiKey;\n        subscribeOptions.authToken =\n            subOptions?.authToken || subscribeOptions.authToken;\n        _subscription = eventProvider\n            .subscribe(subscribeOptions)\n            .subscribe(observer);\n        return _subscription;\n    };\n    const pub = async (event, pubOptions) => {\n        if (!openChannels.has(channelId)) {\n            throw new Error('Channel is closed');\n        }\n        const publishOptions = {\n            ...providerOptions,\n            query: channel,\n            variables: event,\n        };\n        publishOptions.authenticationType = normalizeAuth(pubOptions?.authMode, publishOptions.authenticationType);\n        publishOptions.apiKey = pubOptions?.apiKey || publishOptions.apiKey;\n        publishOptions.authToken =\n            pubOptions?.authToken || publishOptions.authToken;\n        return eventProvider.publish(publishOptions);\n    };\n    const close = async () => {\n        _subscription && _subscription.unsubscribe();\n        openChannels.delete(channelId);\n        setTimeout(() => {\n            if (openChannels.size === 0) {\n                eventProvider.closeIfNoActiveSubscription();\n            }\n        }, 1000);\n    };\n    return {\n        subscribe: sub,\n        close,\n        publish: pub,\n    };\n}\n/**\n * @experimental API may change in future versions\n *\n * Publish events to a channel via HTTP request\n *\n * @example\n * await events.post(\"default/channel\", { some: \"event\" })\n *\n * @example // event batching\n * await events.post(\"default/channel\", [{ some: \"event\" }, { some: \"event2\" }])\n *\n * @example // authMode override\n * await events.post(\"default/channel\", { some: \"event\" }, { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param event - JSON-serializable value or an array of values\n * @param options - request overrides: `authMode`, `authToken`\n *\n * @returns void on success\n * @throws on error\n */\nasync function post(channel, event, options) {\n    const providerOptions = configure();\n    providerOptions.authenticationType = normalizeAuth(options?.authMode, providerOptions.authenticationType);\n    providerOptions.apiKey = options?.apiKey || providerOptions.apiKey;\n    providerOptions.authToken = options?.authToken || providerOptions.authToken;\n    // trailing slash required in publish\n    const normalizedChannelName = channel[0] === '/' ? channel : `/${channel}`;\n    const publishOptions = {\n        ...providerOptions,\n        query: normalizedChannelName,\n        variables: serializeEvents(event),\n    };\n    const abortController = new AbortController();\n    const res = await appsyncRequest(Amplify, publishOptions, {}, abortController);\n    if (res.failed?.length > 0) {\n        return res.failed;\n    }\n}\n/**\n * @experimental API may change in future versions\n *\n * Close WebSocket connection, disconnect listeners and reconnect observers\n *\n * @example\n * await events.closeAll()\n *\n * @returns void on success\n * @throws on error\n */\nasync function closeAll() {\n    await eventProvider.close();\n}\nexport { connect, post, closeAll };\n"],"names":["eventProvider"],"mappings":"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"}