UNPKG

@aws-amplify/analytics

Version:

Analytics category of aws-amplify

87 lines (77 loc) • 2.42 kB
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { fromUtf8 } from '@smithy/util-utf8'; import { AnalyticsAction, resolveCtxArgs, } from '@aws-amplify/core/internals/utils'; import { AmplifyContext, ConsoleLogger } from '@aws-amplify/core'; import { RecordInput } from '../types'; import { getEventBuffer } from '../utils/getEventBuffer'; import { resolveConfig } from '../utils/resolveConfig'; import { getAnalyticsUserAgentString, isAnalyticsEnabled, resolveCredentials, } from '../../../utils'; import { AnalyticsValidationErrorCode } from '../../../errors'; const logger = new ConsoleLogger('Kinesis'); export function record(ctx: AmplifyContext, input: RecordInput): void; /** * Record one analytic event and send it to Kinesis. Events will be buffered and periodically sent to * Kinesis. * * @param params The input object used to construct the request. * * @throws validation: {@link AnalyticsValidationErrorCode} - Thrown when the provided parameters or library * configuration is incorrect. * * @example * ```ts * record({ * streamName: 'myKinesisStream', * partitionKey: 'myPartitionKey', * data: { } // The data blob to put into the record * }); * ``` * @param input - The event to record. * * @returns void */ export function record(input: RecordInput): void; export function record(...args: any[]): void { const [ctx, input] = resolveCtxArgs<[RecordInput]>(args); const { streamName, partitionKey, data } = input; if (!isAnalyticsEnabled()) { logger.debug('Analytics is disabled, event will not be recorded.'); return; } const timestamp = Date.now(); const { region, bufferSize, flushSize, flushInterval, resendLimit } = resolveConfig(ctx); resolveCredentials(ctx) .then(({ credentials, identityId }) => { const buffer = getEventBuffer({ region, bufferSize, flushSize, flushInterval, credentials, identityId, resendLimit, userAgentValue: getAnalyticsUserAgentString(AnalyticsAction.Record), }); buffer.append({ region, streamName, partitionKey, event: ArrayBuffer.isView(data) ? data : fromUtf8(JSON.stringify(data)), timestamp, retryCount: 0, }); }) .catch(e => { // An error occurred while fetching credentials or persisting the event to the buffer logger.warn('Failed to record event.', e); }); }