@crimson-education/browser-logger 3.0.1-pinpoint-middleware.0 → 3.0.2

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.
Files changed (41) hide show
  1. package/lib/index.d.ts +12 -12
  2. package/lib/index.js +69 -69
  3. package/lib/logger/consoleTransport.d.ts +36 -36
  4. package/lib/logger/consoleTransport.js +80 -80
  5. package/lib/logger/datadogTransport.d.ts +7 -7
  6. package/lib/logger/datadogTransport.js +20 -20
  7. package/lib/logger/index.d.ts +15 -15
  8. package/lib/logger/index.js +147 -147
  9. package/lib/logger/index.test.d.ts +1 -1
  10. package/lib/logger/index.test.js +59 -59
  11. package/lib/logger/utils.d.ts +14 -14
  12. package/lib/logger/utils.js +31 -31
  13. package/lib/reporters/amplifyReporter.d.ts +83 -83
  14. package/lib/reporters/amplifyReporter.d.ts.map +1 -1
  15. package/lib/reporters/amplifyReporter.js +162 -162
  16. package/lib/reporters/amplifyReporter.js.map +1 -1
  17. package/lib/reporters/amplifyReporter.test.d.ts +1 -1
  18. package/lib/reporters/amplifyReporter.test.js +50 -50
  19. package/lib/reporters/datadogReporter.d.ts +85 -76
  20. package/lib/reporters/datadogReporter.d.ts.map +1 -1
  21. package/lib/reporters/datadogReporter.js +124 -122
  22. package/lib/reporters/datadogReporter.js.map +1 -1
  23. package/lib/reporters/gtmReporter.d.ts +8 -8
  24. package/lib/reporters/gtmReporter.js +56 -56
  25. package/lib/reporters/index.d.ts +66 -66
  26. package/lib/reporters/index.js +212 -212
  27. package/lib/reporters/logReporter.d.ts +34 -34
  28. package/lib/reporters/logReporter.js +61 -61
  29. package/lib/types/index.d.ts +2 -2
  30. package/lib/types/index.js +18 -18
  31. package/lib/types/logger.d.ts +77 -77
  32. package/lib/types/logger.js +10 -10
  33. package/lib/types/reporter.d.ts +154 -154
  34. package/lib/types/reporter.js +2 -2
  35. package/lib/utils.d.ts +9 -9
  36. package/lib/utils.js +31 -31
  37. package/lib/utils.test.d.ts +1 -1
  38. package/lib/utils.test.js +31 -31
  39. package/package.json +1 -1
  40. package/src/reporters/amplifyReporter.ts +2 -2
  41. package/src/reporters/datadogReporter.ts +12 -2
@@ -1,84 +1,84 @@
1
- import { IReporter, Metadata, ReporterConfigBase, ServiceInfo } from '../types';
2
- declare type AttributeMap = Record<string, string[] | string | null>;
3
- declare type AmplifyAutoTrackSource = 'pageView' | 'event' | 'session';
4
- export interface AmplifyReporterConfig extends ReporterConfigBase {
5
- /**
6
- * AWS Region for Amplify.
7
- */
8
- region: string;
9
- /**
10
- * The Identity Pool Id to use for reporting, if set to false, Auth.configure is not called.
11
- * This must be called manually for the reporter to work.
12
- */
13
- identityPoolId: string | false;
14
- /**
15
- * The Pinpoint App Id to report to.
16
- */
17
- analyticsAppId: string;
18
- /**
19
- * The Cognito User Pool to configure in Auth.configure.
20
- * If you are using Cognito, it is better to set identityPoolId to false and configure Auth manually.
21
- */
22
- userPoolId?: string;
23
- /**
24
- * The Cognito Web Client Id to configure in Auth.configure.
25
- * If you are using Cognito, it is better to set identityPoolId to false and configure Auth manually.
26
- */
27
- userPoolWebClientId?: string;
28
- /**
29
- * If you want to track which page/url in your webapp is the most frequently viewed one, you can use this feature.
30
- * It will automatically send events containing url information when the page is visited.
31
- */
32
- autoTrackPageViews?: boolean;
33
- /**
34
- * If you want to track user interactions with elements on the page, you can use this feature.
35
- * All you need to do is attach the specified selectors to your dom element and turn on the auto tracking.
36
- */
37
- autoTrackEvents?: boolean;
38
- /**
39
- * A web session can be defined in different ways.
40
- * To keep it simple we define that the web session is active when the page is not hidden and inactive when the page is hidden.
41
- */
42
- autoTrackSessions?: boolean;
43
- /**
44
- * Optional function to run before autotracked analytics events are sent out.
45
- * The returned metadata is attached to the event.
46
- */
47
- beforeAutoTrack?(source: AmplifyAutoTrackSource): Metadata;
48
- /**
49
- * The data tag prefix to use for attributing HTML elements. Defaults to data-analytics-
50
- */
51
- selectorPrefix?: string;
52
- /**
53
- * Modify how the reporter sends events to Amplify.
54
- */
55
- buffering?: AmplifyReporterBufferingConfig;
56
- }
57
- /**
58
- * Configuration options for the buffering behavior of Pinpoint's event tracker.
59
- *
60
- * @see https://docs.amplify.aws/lib/analytics/getting-started/q/platform/js/#set-up-existing-analytics-backend
61
- */
62
- declare type AmplifyReporterBufferingConfig = {
63
- /** Number of items to buffer for sending. */
64
- bufferSize?: number;
65
- /** Number of events sent each time Pinpoint flushes. */
66
- flushSize?: number;
67
- /** Interval Pinpoint flushes analytics events. Measured in milliseconds. */
68
- flushInterval?: number;
69
- /** The maximum number of times Pinpoint will retry to send an event. */
70
- resendLimit?: number;
71
- };
72
- export declare function amplifyReporter(info: ServiceInfo, config: AmplifyReporterConfig): IReporter;
73
- /**
74
- * Pinpoint has strict attribute name and value length limits
75
- */
76
- export declare function asAttributeMap(values: Record<string, unknown>, groupValues?: boolean): AttributeMap;
77
- /**
78
- * Pinpoint expects `endpoint.attributes` and `endpoint.userAttributes` to have
79
- * values which are string arrays. This function takes in an object and ensures
80
- * all of its values are of type `string[]` to appease Pinpoint.
81
- */
82
- export declare function buildAttributeMap(values: Record<string, any>, parentKey?: string | undefined, groupValues?: boolean): AttributeMap;
83
- export {};
1
+ import { IReporter, Metadata, ReporterConfigBase, ServiceInfo } from '../types';
2
+ declare type AttributeMap = Record<string, string[] | string | null>;
3
+ declare type AmplifyAutoTrackSource = 'pageView' | 'event' | 'session';
4
+ export interface AmplifyReporterConfig extends ReporterConfigBase {
5
+ /**
6
+ * AWS Region for Amplify.
7
+ */
8
+ region: string;
9
+ /**
10
+ * The Identity Pool Id to use for reporting, if set to false, Auth.configure is not called.
11
+ * This must be called manually for the reporter to work.
12
+ */
13
+ identityPoolId: string | false;
14
+ /**
15
+ * The Pinpoint App Id to report to.
16
+ */
17
+ analyticsAppId: string;
18
+ /**
19
+ * The Cognito User Pool to configure in Auth.configure.
20
+ * If you are using Cognito, it is better to set identityPoolId to false and configure Auth manually.
21
+ */
22
+ userPoolId?: string;
23
+ /**
24
+ * The Cognito Web Client Id to configure in Auth.configure.
25
+ * If you are using Cognito, it is better to set identityPoolId to false and configure Auth manually.
26
+ */
27
+ userPoolWebClientId?: string;
28
+ /**
29
+ * If you want to track which page/url in your webapp is the most frequently viewed one, you can use this feature.
30
+ * It will automatically send events containing url information when the page is visited.
31
+ */
32
+ autoTrackPageViews?: boolean;
33
+ /**
34
+ * If you want to track user interactions with elements on the page, you can use this feature.
35
+ * All you need to do is attach the specified selectors to your dom element and turn on the auto tracking.
36
+ */
37
+ autoTrackEvents?: boolean;
38
+ /**
39
+ * A web session can be defined in different ways.
40
+ * To keep it simple we define that the web session is active when the page is not hidden and inactive when the page is hidden.
41
+ */
42
+ autoTrackSessions?: boolean;
43
+ /**
44
+ * Optional function to run before autotracked analytics events are sent out.
45
+ * The returned metadata is attached to the event.
46
+ */
47
+ beforeAutoTrack?(source: AmplifyAutoTrackSource): Metadata | undefined;
48
+ /**
49
+ * The data tag prefix to use for attributing HTML elements. Defaults to data-analytics-
50
+ */
51
+ selectorPrefix?: string;
52
+ /**
53
+ * Modify how the reporter sends events to Amplify.
54
+ */
55
+ buffering?: AmplifyReporterBufferingConfig;
56
+ }
57
+ /**
58
+ * Configuration options for the buffering behavior of Pinpoint's event tracker.
59
+ *
60
+ * @see https://docs.amplify.aws/lib/analytics/getting-started/q/platform/js/#set-up-existing-analytics-backend
61
+ */
62
+ declare type AmplifyReporterBufferingConfig = {
63
+ /** Number of items to buffer for sending. */
64
+ bufferSize?: number;
65
+ /** Number of events sent each time Pinpoint flushes. */
66
+ flushSize?: number;
67
+ /** Interval Pinpoint flushes analytics events. Measured in milliseconds. */
68
+ flushInterval?: number;
69
+ /** The maximum number of times Pinpoint will retry to send an event. */
70
+ resendLimit?: number;
71
+ };
72
+ export declare function amplifyReporter(info: ServiceInfo, config: AmplifyReporterConfig): IReporter;
73
+ /**
74
+ * Pinpoint has strict attribute name and value length limits
75
+ */
76
+ export declare function asAttributeMap(values: Record<string, unknown>, groupValues?: boolean): AttributeMap;
77
+ /**
78
+ * Pinpoint expects `endpoint.attributes` and `endpoint.userAttributes` to have
79
+ * values which are string arrays. This function takes in an object and ensures
80
+ * all of its values are of type `string[]` to appease Pinpoint.
81
+ */
82
+ export declare function buildAttributeMap(values: Record<string, any>, parentKey?: string | undefined, groupValues?: boolean): AttributeMap;
83
+ export {};
84
84
  //# sourceMappingURL=amplifyReporter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"amplifyReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EAER,kBAAkB,EAGlB,WAAW,EACZ,MAAM,UAAU,CAAC;AAMlB,aAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAE7D,aAAK,sBAAsB,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,EAAE,MAAM,GAAG,KAAK,CAAC;IAC/B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,eAAe,CAAC,CAAC,MAAM,EAAE,sBAAsB,GAAG,QAAQ,CAAC;IAE3D;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,8BAA8B,CAAC;CAC5C;AAED;;;;GAIG;AACH,aAAK,8BAA8B,GAAG;IACpC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAiH3F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,UAAO,GAAG,YAAY,CAqBhG;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,SAAS,GAAE,MAAM,GAAG,SAAqB,EACzC,WAAW,UAAO,GACjB,YAAY,CAsBd"}
1
+ {"version":3,"file":"amplifyReporter.d.ts","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EAER,kBAAkB,EAGlB,WAAW,EACZ,MAAM,UAAU,CAAC;AAMlB,aAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;AAE7D,aAAK,sBAAsB,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,EAAE,MAAM,GAAG,KAAK,CAAC;IAC/B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,eAAe,CAAC,CAAC,MAAM,EAAE,sBAAsB,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEvE;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,8BAA8B,CAAC;CAC5C;AAED;;;;GAIG;AACH,aAAK,8BAA8B,GAAG;IACpC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,qBAAqB,GAAG,SAAS,CAiH3F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,UAAO,GAAG,YAAY,CAqBhG;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,SAAS,GAAE,MAAM,GAAG,SAAqB,EACzC,WAAW,UAAO,GACjB,YAAY,CAsBd"}
@@ -1,163 +1,163 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildAttributeMap = exports.asAttributeMap = exports.amplifyReporter = void 0;
4
- const auth_1 = require("@aws-amplify/auth");
5
- const analytics_1 = require("@aws-amplify/analytics");
6
- const logger_1 = require("../logger");
7
- function amplifyReporter(info, config) {
8
- var _a;
9
- if (config.identityPoolId !== false) {
10
- auth_1.Auth.configure({
11
- region: config.region,
12
- identityPoolId: config.identityPoolId,
13
- userPoolId: config.userPoolId,
14
- userPoolWebClientId: config.userPoolWebClientId,
15
- });
16
- }
17
- const wrapAutoTrackMiddleware = (source) => {
18
- const { beforeAutoTrack } = config;
19
- return typeof beforeAutoTrack === 'function' ? () => beforeAutoTrack(source) : undefined;
20
- };
21
- const allMetadata = asAttributeMap({
22
- appName: info.service,
23
- service: info.service,
24
- domain: window.location.host,
25
- environment: info.environment,
26
- version: info.version,
27
- });
28
- analytics_1.Analytics.configure({
29
- region: config.region,
30
- appId: config.analyticsAppId,
31
- endpoint: {
32
- attributes: allMetadata,
33
- },
34
- ...config.buffering,
35
- });
36
- // Session autotracking is enabled by default for backwards compatibility reasons, so we _must_
37
- // call this unconditionally to ensure we opt out of session tracking when `autoTrackSessions` isn't set
38
- // See: https://docs.amplify.aws/lib/analytics/autotrack/q/platform/js/#session-tracking
39
- analytics_1.Analytics.autoTrack('session', {
40
- enable: config.autoTrackSessions === true,
41
- attributes: wrapAutoTrackMiddleware('session'),
42
- });
43
- if (config.autoTrackPageViews) {
44
- analytics_1.Analytics.autoTrack('pageView', {
45
- enable: true,
46
- eventName: 'pageView',
47
- type: 'SPA',
48
- provider: 'AWSPinpoint',
49
- attributes: wrapAutoTrackMiddleware('pageView'),
50
- });
51
- }
52
- if (config.autoTrackEvents) {
53
- analytics_1.Analytics.autoTrack('event', {
54
- enable: true,
55
- selectorPrefix: (_a = config.selectorPrefix) !== null && _a !== void 0 ? _a : 'data-analytics-',
56
- attributes: wrapAutoTrackMiddleware('event'),
57
- });
58
- }
59
- const reporter = {
60
- trackEvent: function (event) {
61
- analytics_1.Analytics.record({
62
- name: event.message,
63
- attributes: asAttributeMap({
64
- ...event.metadata,
65
- ...event.tags,
66
- }, false),
67
- metrics: event.metrics,
68
- });
69
- },
70
- addBreadcrumb: function (breadcrumb) {
71
- reporter.trackEvent({
72
- message: breadcrumb.message,
73
- metadata: {
74
- category: breadcrumb.category,
75
- ...breadcrumb.metadata,
76
- },
77
- });
78
- },
79
- addMetadata: function (metadata) {
80
- Object.assign(allMetadata, asAttributeMap(metadata, true));
81
- analytics_1.Analytics.updateEndpoint({
82
- attributes: allMetadata,
83
- }).catch(() => {
84
- // Swallow; see: https://crimsonhq.slack.com/archives/G4UN6Q4KF/p1648599302847539
85
- });
86
- },
87
- setUser: function (user) {
88
- var _a, _b;
89
- analytics_1.Analytics.updateEndpoint({
90
- userId: (_a = user === null || user === void 0 ? void 0 : user.id) !== null && _a !== void 0 ? _a : '',
91
- userAttributes: user
92
- ? asAttributeMap({
93
- id: user.id,
94
- email: user.email,
95
- name: (_b = user.name) !== null && _b !== void 0 ? _b : user.email,
96
- username: user.username,
97
- })
98
- : {},
99
- }).catch(() => {
100
- // Swallow; see: https://crimsonhq.slack.com/archives/G4UN6Q4KF/p1648599302847539
101
- });
102
- },
103
- setRouteName: function (routeName) {
104
- reporter.addMetadata({ routeName });
105
- },
106
- setPageName: function (pageName) {
107
- reporter.addMetadata({ pageName });
108
- },
109
- };
110
- return reporter;
111
- }
112
- exports.amplifyReporter = amplifyReporter;
113
- /**
114
- * Pinpoint has strict attribute name and value length limits
115
- */
116
- function asAttributeMap(values, groupValues = true) {
117
- const attributeMap = buildAttributeMap(values, undefined, groupValues);
118
- const checkedEntries = Object.entries(attributeMap).map(([key, value]) => {
119
- var _a, _b;
120
- const truncatedKey = key.length > 50 ? `___${key.slice(-47)}` : key;
121
- const truncatedValue = Array.isArray(value)
122
- ? (_a = value === null || value === void 0 ? void 0 : value.map((val) => val.slice(0, 100))) !== null && _a !== void 0 ? _a : null
123
- : (_b = value === null || value === void 0 ? void 0 : value.slice(0, 100)) !== null && _b !== void 0 ? _b : null;
124
- return [truncatedKey, truncatedValue];
125
- });
126
- // Pinpoint only accepts 40 attributes
127
- if (checkedEntries.length > 40) {
128
- logger_1.logger.error(`Amplify only allows 40 attributes per event, truncating to 40 attributes`, {
129
- attributes: checkedEntries,
130
- });
131
- checkedEntries.length = 40;
132
- }
133
- return Object.fromEntries(checkedEntries);
134
- }
135
- exports.asAttributeMap = asAttributeMap;
136
- /**
137
- * Pinpoint expects `endpoint.attributes` and `endpoint.userAttributes` to have
138
- * values which are string arrays. This function takes in an object and ensures
139
- * all of its values are of type `string[]` to appease Pinpoint.
140
- */
141
- function buildAttributeMap(values, parentKey = undefined, groupValues = true) {
142
- const valuesWithStringArrays = {};
143
- Object.entries(values).forEach(([key, value]) => {
144
- const combinedKey = parentKey ? [parentKey, key].join('.') : key;
145
- if (!value) {
146
- valuesWithStringArrays[combinedKey] = null;
147
- }
148
- else if (groupValues && Array.isArray(value)) {
149
- valuesWithStringArrays[combinedKey] = value.map((element) => typeof element === 'string' ? element : JSON.stringify(element));
150
- }
151
- else if (typeof value === 'object') {
152
- const flattenedAttribute = buildAttributeMap(value, combinedKey, groupValues);
153
- Object.assign(valuesWithStringArrays, flattenedAttribute);
154
- }
155
- else {
156
- const stringValue = typeof value === 'string' ? value : JSON.stringify(value);
157
- valuesWithStringArrays[combinedKey] = groupValues ? [stringValue] : stringValue;
158
- }
159
- });
160
- return valuesWithStringArrays;
161
- }
162
- exports.buildAttributeMap = buildAttributeMap;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildAttributeMap = exports.asAttributeMap = exports.amplifyReporter = void 0;
4
+ const auth_1 = require("@aws-amplify/auth");
5
+ const analytics_1 = require("@aws-amplify/analytics");
6
+ const logger_1 = require("../logger");
7
+ function amplifyReporter(info, config) {
8
+ var _a;
9
+ if (config.identityPoolId !== false) {
10
+ auth_1.Auth.configure({
11
+ region: config.region,
12
+ identityPoolId: config.identityPoolId,
13
+ userPoolId: config.userPoolId,
14
+ userPoolWebClientId: config.userPoolWebClientId,
15
+ });
16
+ }
17
+ const wrapAutoTrackMiddleware = (source) => {
18
+ const { beforeAutoTrack } = config;
19
+ return typeof beforeAutoTrack === 'function' ? () => { var _a; return (_a = beforeAutoTrack(source)) !== null && _a !== void 0 ? _a : {}; } : undefined;
20
+ };
21
+ const allMetadata = asAttributeMap({
22
+ appName: info.service,
23
+ service: info.service,
24
+ domain: window.location.host,
25
+ environment: info.environment,
26
+ version: info.version,
27
+ });
28
+ analytics_1.Analytics.configure({
29
+ region: config.region,
30
+ appId: config.analyticsAppId,
31
+ endpoint: {
32
+ attributes: allMetadata,
33
+ },
34
+ ...config.buffering,
35
+ });
36
+ // Session autotracking is enabled by default for backwards compatibility reasons, so we _must_
37
+ // call this unconditionally to ensure we opt out of session tracking when `autoTrackSessions` isn't set
38
+ // See: https://docs.amplify.aws/lib/analytics/autotrack/q/platform/js/#session-tracking
39
+ analytics_1.Analytics.autoTrack('session', {
40
+ enable: config.autoTrackSessions === true,
41
+ attributes: wrapAutoTrackMiddleware('session'),
42
+ });
43
+ if (config.autoTrackPageViews) {
44
+ analytics_1.Analytics.autoTrack('pageView', {
45
+ enable: true,
46
+ eventName: 'pageView',
47
+ type: 'SPA',
48
+ provider: 'AWSPinpoint',
49
+ attributes: wrapAutoTrackMiddleware('pageView'),
50
+ });
51
+ }
52
+ if (config.autoTrackEvents) {
53
+ analytics_1.Analytics.autoTrack('event', {
54
+ enable: true,
55
+ selectorPrefix: (_a = config.selectorPrefix) !== null && _a !== void 0 ? _a : 'data-analytics-',
56
+ attributes: wrapAutoTrackMiddleware('event'),
57
+ });
58
+ }
59
+ const reporter = {
60
+ trackEvent: function (event) {
61
+ analytics_1.Analytics.record({
62
+ name: event.message,
63
+ attributes: asAttributeMap({
64
+ ...event.metadata,
65
+ ...event.tags,
66
+ }, false),
67
+ metrics: event.metrics,
68
+ });
69
+ },
70
+ addBreadcrumb: function (breadcrumb) {
71
+ reporter.trackEvent({
72
+ message: breadcrumb.message,
73
+ metadata: {
74
+ category: breadcrumb.category,
75
+ ...breadcrumb.metadata,
76
+ },
77
+ });
78
+ },
79
+ addMetadata: function (metadata) {
80
+ Object.assign(allMetadata, asAttributeMap(metadata, true));
81
+ analytics_1.Analytics.updateEndpoint({
82
+ attributes: allMetadata,
83
+ }).catch(() => {
84
+ // Swallow; see: https://crimsonhq.slack.com/archives/G4UN6Q4KF/p1648599302847539
85
+ });
86
+ },
87
+ setUser: function (user) {
88
+ var _a, _b;
89
+ analytics_1.Analytics.updateEndpoint({
90
+ userId: (_a = user === null || user === void 0 ? void 0 : user.id) !== null && _a !== void 0 ? _a : '',
91
+ userAttributes: user
92
+ ? asAttributeMap({
93
+ id: user.id,
94
+ email: user.email,
95
+ name: (_b = user.name) !== null && _b !== void 0 ? _b : user.email,
96
+ username: user.username,
97
+ })
98
+ : {},
99
+ }).catch(() => {
100
+ // Swallow; see: https://crimsonhq.slack.com/archives/G4UN6Q4KF/p1648599302847539
101
+ });
102
+ },
103
+ setRouteName: function (routeName) {
104
+ reporter.addMetadata({ routeName });
105
+ },
106
+ setPageName: function (pageName) {
107
+ reporter.addMetadata({ pageName });
108
+ },
109
+ };
110
+ return reporter;
111
+ }
112
+ exports.amplifyReporter = amplifyReporter;
113
+ /**
114
+ * Pinpoint has strict attribute name and value length limits
115
+ */
116
+ function asAttributeMap(values, groupValues = true) {
117
+ const attributeMap = buildAttributeMap(values, undefined, groupValues);
118
+ const checkedEntries = Object.entries(attributeMap).map(([key, value]) => {
119
+ var _a, _b;
120
+ const truncatedKey = key.length > 50 ? `___${key.slice(-47)}` : key;
121
+ const truncatedValue = Array.isArray(value)
122
+ ? (_a = value === null || value === void 0 ? void 0 : value.map((val) => val.slice(0, 100))) !== null && _a !== void 0 ? _a : null
123
+ : (_b = value === null || value === void 0 ? void 0 : value.slice(0, 100)) !== null && _b !== void 0 ? _b : null;
124
+ return [truncatedKey, truncatedValue];
125
+ });
126
+ // Pinpoint only accepts 40 attributes
127
+ if (checkedEntries.length > 40) {
128
+ logger_1.logger.error(`Amplify only allows 40 attributes per event, truncating to 40 attributes`, {
129
+ attributes: checkedEntries,
130
+ });
131
+ checkedEntries.length = 40;
132
+ }
133
+ return Object.fromEntries(checkedEntries);
134
+ }
135
+ exports.asAttributeMap = asAttributeMap;
136
+ /**
137
+ * Pinpoint expects `endpoint.attributes` and `endpoint.userAttributes` to have
138
+ * values which are string arrays. This function takes in an object and ensures
139
+ * all of its values are of type `string[]` to appease Pinpoint.
140
+ */
141
+ function buildAttributeMap(values, parentKey = undefined, groupValues = true) {
142
+ const valuesWithStringArrays = {};
143
+ Object.entries(values).forEach(([key, value]) => {
144
+ const combinedKey = parentKey ? [parentKey, key].join('.') : key;
145
+ if (!value) {
146
+ valuesWithStringArrays[combinedKey] = null;
147
+ }
148
+ else if (groupValues && Array.isArray(value)) {
149
+ valuesWithStringArrays[combinedKey] = value.map((element) => typeof element === 'string' ? element : JSON.stringify(element));
150
+ }
151
+ else if (typeof value === 'object') {
152
+ const flattenedAttribute = buildAttributeMap(value, combinedKey, groupValues);
153
+ Object.assign(valuesWithStringArrays, flattenedAttribute);
154
+ }
155
+ else {
156
+ const stringValue = typeof value === 'string' ? value : JSON.stringify(value);
157
+ valuesWithStringArrays[combinedKey] = groupValues ? [stringValue] : stringValue;
158
+ }
159
+ });
160
+ return valuesWithStringArrays;
161
+ }
162
+ exports.buildAttributeMap = buildAttributeMap;
163
163
  //# sourceMappingURL=amplifyReporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"amplifyReporter.js","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.ts"],"names":[],"mappings":";;;AASA,4CAAyC;AACzC,sDAAmD;AACnD,sCAAmC;AAgFnC,SAAgB,eAAe,CAAC,IAAiB,EAAE,MAA6B;;IAC9E,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE;QACnC,WAAI,CAAC,SAAS,CAAC;YACb,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;SAChD,CAAC,CAAC;KACJ;IAED,MAAM,uBAAuB,GAAG,CAAC,MAA8B,EAAE,EAAE;QACjE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;QACnC,OAAO,OAAO,eAAe,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;QAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;IAEH,qBAAS,CAAC,SAAS,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,cAAc;QAC5B,QAAQ,EAAE;YACR,UAAU,EAAE,WAAW;SACxB;QACD,GAAG,MAAM,CAAC,SAAS;KACpB,CAAC,CAAC;IAEH,+FAA+F;IAC/F,wGAAwG;IACxG,wFAAwF;IACxF,qBAAS,CAAC,SAAS,CAAC,SAAS,EAAE;QAC7B,MAAM,EAAE,MAAM,CAAC,iBAAiB,KAAK,IAAI;QACzC,UAAU,EAAE,uBAAuB,CAAC,SAAS,CAAC;KAC/C,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,kBAAkB,EAAE;QAC7B,qBAAS,CAAC,SAAS,CAAC,UAAU,EAAE;YAC9B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,aAAa;YACvB,UAAU,EAAE,uBAAuB,CAAC,UAAU,CAAC;SAChD,CAAC,CAAC;KACJ;IAED,IAAI,MAAM,CAAC,eAAe,EAAE;QAC1B,qBAAS,CAAC,SAAS,CAAC,OAAO,EAAE;YAC3B,MAAM,EAAE,IAAI;YACZ,cAAc,EAAE,MAAA,MAAM,CAAC,cAAc,mCAAI,iBAAiB;YAC1D,UAAU,EAAE,uBAAuB,CAAC,OAAO,CAAC;SAC7C,CAAC,CAAC;KACJ;IAED,MAAM,QAAQ,GAAc;QAC1B,UAAU,EAAE,UAAU,KAAoB;YACxC,qBAAS,CAAC,MAAM,CAAC;gBACf,IAAI,EAAE,KAAK,CAAC,OAAO;gBACnB,UAAU,EAAE,cAAc,CACxB;oBACE,GAAG,KAAK,CAAC,QAAQ;oBACjB,GAAG,KAAK,CAAC,IAAI;iBACd,EACD,KAAK,CACoB;gBAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;QACL,CAAC;QACD,aAAa,EAAE,UAAU,UAA8B;YACrD,QAAQ,CAAC,UAAU,CAAC;gBAClB,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,QAAQ,EAAE;oBACR,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,GAAG,UAAU,CAAC,QAAQ;iBACvB;aACF,CAAC,CAAC;QACL,CAAC;QACD,WAAW,EAAE,UAAU,QAAkB;YACvC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3D,qBAAS,CAAC,cAAc,CAAC;gBACvB,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,iFAAiF;YACnF,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,UAAU,IAAuB;;YACxC,qBAAS,CAAC,cAAc,CAAC;gBACvB,MAAM,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,EAAE,mCAAI,EAAE;gBACtB,cAAc,EAAE,IAAI;oBAClB,CAAC,CAAC,cAAc,CAAC;wBACb,EAAE,EAAE,IAAI,CAAC,EAAE;wBACX,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,IAAI,CAAC,KAAK;wBAC7B,QAAQ,EAAE,IAAI,CAAC,QAAQ;qBACxB,CAAC;oBACJ,CAAC,CAAC,EAAE;aACP,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACZ,iFAAiF;YACnF,CAAC,CAAC,CAAC;QACL,CAAC;QACD,YAAY,EAAE,UAAU,SAAiB;YACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,WAAW,EAAE,UAAU,QAAgB;YACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAjHD,0CAiHC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAA+B,EAAE,WAAW,GAAG,IAAI;IAChF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IAEvE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;;QACvE,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QACpE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,mCAAI,IAAI;YAChD,CAAC,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,mCAAI,IAAI,CAAC;QAEjC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE;QAC9B,eAAM,CAAC,KAAK,CAAC,0EAA0E,EAAE;YACvF,UAAU,EAAE,cAAc;SAC3B,CAAC,CAAC;QACH,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;KAC5B;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAC5C,CAAC;AArBD,wCAqBC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAC/B,MAA2B,EAC3B,YAAgC,SAAS,EACzC,WAAW,GAAG,IAAI;IAElB,MAAM,sBAAsB,GAAiB,EAAE,CAAC;IAEhD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAEjE,IAAI,CAAC,KAAK,EAAE;YACV,sBAAsB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;SAC5C;aAAM,IAAI,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC9C,sBAAsB,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAC1D,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAChE,CAAC;SACH;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YACpC,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAC9E,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;SAC3D;aAAM;YACL,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9E,sBAAsB,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;SACjF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,sBAAsB,CAAC;AAChC,CAAC;AA1BD,8CA0BC"}
1
+ {"version":3,"file":"amplifyReporter.js","sourceRoot":"","sources":["../../src/reporters/amplifyReporter.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=amplifyReporter.test.d.ts.map
@@ -1,51 +1,51 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const amplifyReporter_1 = require("./amplifyReporter");
4
- describe('amplifyReporter', () => {
5
- it('should convert all attribute values to arrays of strings', () => {
6
- const testMetadata = { a: 'a', d: ['e', 'f'] };
7
- const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
8
- expect(attributeMap.a).toEqual(['a']);
9
- expect(attributeMap.d).toEqual(['e', 'f']);
10
- });
11
- it('should handle undefined / null attributes', () => {
12
- const testMetadata = { a: null, d: undefined };
13
- const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
14
- expect(attributeMap.a).toBeNull();
15
- expect(attributeMap.d).toBeNull();
16
- });
17
- it('should flatten hierarchies', () => {
18
- const testMetadata = { foo: { bar: 'baz' } };
19
- const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
20
- expect(attributeMap['foo.bar']).toEqual(['baz']);
21
- });
22
- it('should stringify non-string array members', () => {
23
- var _a;
24
- const testMetadata = { foo: 5, bar: [{ baz: 'maz' }] };
25
- const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
26
- expect(attributeMap.foo).toEqual(['5']);
27
- expect(typeof ((_a = attributeMap.bar) === null || _a === void 0 ? void 0 : _a[0])).toEqual('string');
28
- });
29
- it('should truncate attribute names', () => {
30
- const testMetadata = { thisIsAVeryVeryLongAttributeNameThatNeedsToBeTruncated: 5 };
31
- const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
32
- expect(attributeMap.___VeryVeryLongAttributeNameThatNeedsToBeTruncated).toEqual(['5']);
33
- });
34
- it('should truncate attribute values', () => {
35
- const testMetadata = {
36
- a: 'ThisIsAVeryLongStringThatNeedsToBeTruncatedTo100CharsOrElseThereWillBeAProblemWithSendingTheBeautifulDataToPinpoint',
37
- };
38
- const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
39
- expect(attributeMap.a).toEqual([
40
- 'ThisIsAVeryLongStringThatNeedsToBeTruncatedTo100CharsOrElseThereWillBeAProblemWithSendingTheBeautifu',
41
- ]);
42
- });
43
- it('should not group values into arrays when groupValues===false', () => {
44
- const testMetadata = {
45
- a: '5',
46
- };
47
- const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata, false);
48
- expect(attributeMap.a).toEqual('5');
49
- });
50
- });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const amplifyReporter_1 = require("./amplifyReporter");
4
+ describe('amplifyReporter', () => {
5
+ it('should convert all attribute values to arrays of strings', () => {
6
+ const testMetadata = { a: 'a', d: ['e', 'f'] };
7
+ const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
8
+ expect(attributeMap.a).toEqual(['a']);
9
+ expect(attributeMap.d).toEqual(['e', 'f']);
10
+ });
11
+ it('should handle undefined / null attributes', () => {
12
+ const testMetadata = { a: null, d: undefined };
13
+ const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
14
+ expect(attributeMap.a).toBeNull();
15
+ expect(attributeMap.d).toBeNull();
16
+ });
17
+ it('should flatten hierarchies', () => {
18
+ const testMetadata = { foo: { bar: 'baz' } };
19
+ const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
20
+ expect(attributeMap['foo.bar']).toEqual(['baz']);
21
+ });
22
+ it('should stringify non-string array members', () => {
23
+ var _a;
24
+ const testMetadata = { foo: 5, bar: [{ baz: 'maz' }] };
25
+ const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
26
+ expect(attributeMap.foo).toEqual(['5']);
27
+ expect(typeof ((_a = attributeMap.bar) === null || _a === void 0 ? void 0 : _a[0])).toEqual('string');
28
+ });
29
+ it('should truncate attribute names', () => {
30
+ const testMetadata = { thisIsAVeryVeryLongAttributeNameThatNeedsToBeTruncated: 5 };
31
+ const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
32
+ expect(attributeMap.___VeryVeryLongAttributeNameThatNeedsToBeTruncated).toEqual(['5']);
33
+ });
34
+ it('should truncate attribute values', () => {
35
+ const testMetadata = {
36
+ a: 'ThisIsAVeryLongStringThatNeedsToBeTruncatedTo100CharsOrElseThereWillBeAProblemWithSendingTheBeautifulDataToPinpoint',
37
+ };
38
+ const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata);
39
+ expect(attributeMap.a).toEqual([
40
+ 'ThisIsAVeryLongStringThatNeedsToBeTruncatedTo100CharsOrElseThereWillBeAProblemWithSendingTheBeautifu',
41
+ ]);
42
+ });
43
+ it('should not group values into arrays when groupValues===false', () => {
44
+ const testMetadata = {
45
+ a: '5',
46
+ };
47
+ const attributeMap = (0, amplifyReporter_1.asAttributeMap)(testMetadata, false);
48
+ expect(attributeMap.a).toEqual('5');
49
+ });
50
+ });
51
51
  //# sourceMappingURL=amplifyReporter.test.js.map