UNPKG

@aws-amplify/analytics

Version:

Analytics category of aws-amplify

1 lines 6.47 kB
{"version":3,"file":"getEventBuffer.mjs","sources":["../../../../../src/providers/personalize/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 { PersonalizeEventsClient, PutEventsCommand, } from '@aws-sdk/client-personalize-events';\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 DELIMITER = '#';\nconst createPutEventsCommand = (ids, events) => {\n const [trackingId, sessionId, userId] = ids.split(DELIMITER);\n return new PutEventsCommand({\n trackingId,\n sessionId,\n userId,\n eventList: events.map(event => ({\n eventId: event.event.eventId,\n eventType: event.event.eventType,\n properties: JSON.stringify(event.event.properties),\n sentAt: new Date(event.timestamp),\n })),\n });\n};\nconst submitEvents = async (events, client) => {\n const groupedByIds = Object.entries(groupBy(event => [event.trackingId, event.sessionId, event.userId]\n .filter(id => !!id)\n .join(DELIMITER), events));\n const requests = groupedByIds\n .map(([ids, groupedEvents]) => createPutEventsCommand(ids, groupedEvents))\n .map(command => client.send(command));\n await Promise.allSettled(requests);\n return Promise.resolve([]);\n};\nexport const getEventBuffer = ({ region, flushSize, flushInterval, bufferSize, credentials, identityId, userAgentValue, }) => {\n const sessionIdentityKey = [region, identityId].filter(x => !!x).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 PersonalizeEventsClient({\n region,\n credentials,\n customUserAgent: userAgentValue,\n }),\n credentials,\n ];\n }\n const [personalizeClient] = cachedClients[sessionIdentityKey];\n return events => submitEvents(events, personalizeClient);\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":";;;;;;;;;;AAAA;AACA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,EAAE;AACzB,MAAM,aAAa,GAAG,EAAE;AACxB,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK;AAChD,IAAI,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;AAChE,IAAI,OAAO,IAAI,gBAAgB,CAAC;AAChC,QAAQ,UAAU;AAClB,QAAQ,SAAS;AACjB,QAAQ,MAAM;AACd,QAAQ,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK;AACxC,YAAY,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;AACxC,YAAY,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS;AAC5C,YAAY,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;AAC9D,YAAY,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;AAC7C,SAAS,CAAC,CAAC;AACX,KAAK,CAAC;AACN,CAAC;AACD,MAAM,YAAY,GAAG,OAAO,MAAM,EAAE,MAAM,KAAK;AAC/C,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM;AACzG,SAAS,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;AAC1B,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAG;AACrB,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC;AACjF,SAAS,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7C,IAAI,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;AACtC,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;AAC9B,CAAC;AACW,MAAC,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,GAAG,KAAK;AAC9H,IAAI,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9E,IAAI,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC,IAAI,EAAE;AACrF,IAAI,IAAI,sBAAsB,GAAG,KAAK;AACtC;AACA,IAAI,IAAI,YAAY,EAAE;AACtB,QAAQ,sBAAsB,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,WAAW,CAAC;AACvF,IAAI;AACJ,IAAI,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,IAAI,sBAAsB,EAAE;AACvE,QAAQ,MAAM,SAAS,GAAG,MAAM;AAChC,YAAY,IAAI,CAAC,YAAY,IAAI,sBAAsB,EAAE;AACzD,gBAAgB,aAAa,CAAC,kBAAkB,CAAC,GAAG;AACpD,oBAAoB,IAAI,uBAAuB,CAAC;AAChD,wBAAwB,MAAM;AAC9B,wBAAwB,WAAW;AACnC,wBAAwB,eAAe,EAAE,cAAc;AACvD,qBAAqB,CAAC;AACtB,oBAAoB,WAAW;AAC/B,iBAAiB;AACjB,YAAY;AACZ,YAAY,MAAM,CAAC,iBAAiB,CAAC,GAAG,aAAa,CAAC,kBAAkB,CAAC;AACzE,YAAY,OAAO,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC;AACpE,QAAQ,CAAC;AACT,QAAQ,cAAc,CAAC,kBAAkB,CAAC;AAC1C,YAAY,IAAI,WAAW,CAAC;AAC5B,gBAAgB,UAAU;AAC1B,gBAAgB,SAAS;AACzB,gBAAgB,aAAa;AAC7B,aAAa,EAAE,SAAS,CAAC;AACzB,QAAQ,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,kBAAkB,CAAC;AACxG,QAAQ,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE;AAC5D,YAAY,cAAc,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM;AACvE,gBAAgB,cAAc,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE;AAC3D,gBAAgB,OAAO,cAAc,CAAC,iBAAiB,CAAC;AACxD,gBAAgB,OAAO,aAAa,CAAC,iBAAiB,CAAC;AACvD,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,cAAc,CAAC,kBAAkB,CAAC;AAC7C;;;;"}