UNPKG

@aws-amplify/analytics

Version:

Analytics category of aws-amplify

1 lines 6.5 kB
{"version":3,"file":"getEventBuffer.mjs","sources":["../../../../../src/providers/kinesis-firehose/utils/getEventBuffer.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { haveCredentialsChanged, } from '@aws-amplify/core/internals/utils';\nimport { FirehoseClient, PutRecordBatchCommand, } from '@aws-sdk/client-firehose';\nimport { EventBuffer, groupBy } from '../../../utils';\n/**\n * These Records hold cached event buffers and AWS clients.\n * The hash key is determined by the region and session,\n * consisting of a combined value comprising [region, sessionToken, identityId].\n *\n * Only one active session should exist at any given moment.\n * When a new session is initiated, the previous ones should be released.\n * */\nconst eventBufferMap = {};\nconst cachedClients = {};\nconst createPutRecordsBatchCommand = (streamName, events) => new PutRecordBatchCommand({\n DeliveryStreamName: streamName,\n Records: events.map(event => ({\n Data: event.event,\n })),\n});\nconst submitEvents = async (events, client, resendLimit) => {\n const groupedByStreamName = Object.entries(groupBy(event => event.streamName, events));\n const requests = groupedByStreamName\n .map(([streamName, groupedEvents]) => createPutRecordsBatchCommand(streamName, groupedEvents))\n .map(command => client.send(command));\n const responses = await Promise.allSettled(requests);\n const failedEvents = responses\n .map((response, i) => response.status === 'rejected' ? groupedByStreamName[i][1] : [])\n .flat();\n return resendLimit\n ? failedEvents\n .filter(event => event.retryCount < resendLimit)\n .map(event => ({ ...event, retryCount: event.retryCount + 1 }))\n .sort((a, b) => a.timestamp - b.timestamp)\n : [];\n};\nexport const getEventBuffer = ({ region, credentials, identityId, bufferSize, flushSize, flushInterval, resendLimit, userAgentValue, }) => {\n const sessionIdentityKey = [region, identityId].filter(id => !!id).join('-');\n const [cachedClient, cachedCredentials] = cachedClients[sessionIdentityKey] ?? [];\n let credentialsHaveChanged = false;\n // Check if credentials have changed for the cached client\n if (cachedClient) {\n credentialsHaveChanged = haveCredentialsChanged(cachedCredentials, credentials);\n }\n if (!eventBufferMap[sessionIdentityKey] || credentialsHaveChanged) {\n const getClient = () => {\n if (!cachedClient || credentialsHaveChanged) {\n cachedClients[sessionIdentityKey] = [\n new FirehoseClient({\n region,\n credentials,\n customUserAgent: userAgentValue,\n }),\n credentials,\n ];\n }\n const [firehoseClient] = cachedClients[sessionIdentityKey];\n return events => submitEvents(events, firehoseClient, resendLimit);\n };\n eventBufferMap[sessionIdentityKey] =\n new EventBuffer({\n bufferSize,\n flushSize,\n flushInterval,\n }, getClient);\n const releaseSessionKeys = Object.keys(eventBufferMap).filter(key => key !== sessionIdentityKey);\n for (const releaseSessionKey of releaseSessionKeys) {\n eventBufferMap[releaseSessionKey].flushAll().finally(() => {\n eventBufferMap[releaseSessionKey].release();\n delete eventBufferMap[releaseSessionKey];\n delete cachedClients[releaseSessionKey];\n });\n }\n }\n return eventBufferMap[sessionIdentityKey];\n};\n"],"names":[],"mappings":"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"}