@armco/analytics 0.3.1 → 0.3.3

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.
package/core/analytics.js CHANGED
@@ -9,6 +9,7 @@ import { UserPlugin } from "../plugins/enrichment/user";
9
9
  import { validateConfig, sanitizeEventData } from "../utils/validation";
10
10
  import { createLogger } from "../utils/logging";
11
11
  import { getEnvironmentType, isDoNotTrackEnabled, getTimestamp, deepMerge, } from "../utils/helpers";
12
+ import { ensureRegion } from "../utils/region";
12
13
  import { resolveEndpoint, detectEnvironment } from "../utils/config-loader";
13
14
  export class AnalyticsBuilder {
14
15
  constructor() {
@@ -197,7 +198,7 @@ export class Analytics {
197
198
  eventType,
198
199
  timestamp: getTimestamp(),
199
200
  eventId: uuidv4(),
200
- data: sanitizeEventData(data || {}),
201
+ data: ensureRegion(sanitizeEventData(data || {})),
201
202
  };
202
203
  for (const plugin of this.plugins) {
203
204
  if (plugin.processEvent) {
package/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export { validateConfig, validateUser, validatePageView, validateClickEvent, val
19
19
  export { Logger, getLogger, createLogger } from "./utils/logging";
20
20
  export { generateId, getEnvironmentType, getEnvironment, isDoNotTrackEnabled, isBrowser, areCookiesAvailable, isLocalStorageAvailable, debounce, throttle, deepClone, deepMerge, } from "./utils/helpers";
21
21
  export { loadConfigFromFile, loadConfig, detectEnvironment, checkEndpointHealth, resolveEndpoint } from "./utils/config-loader";
22
+ export { getRegionFallback, ensureRegion } from "./utils/region";
22
23
  import { AnalyticsBuilder as Builder } from "./core/analytics";
23
24
  export declare function createAnalytics(): Builder;
24
25
  export default Builder;
package/index.js CHANGED
@@ -17,6 +17,7 @@ export { validateConfig, validateUser, validatePageView, validateClickEvent, val
17
17
  export { Logger, getLogger, createLogger } from "./utils/logging";
18
18
  export { generateId, getEnvironmentType, getEnvironment, isDoNotTrackEnabled, isBrowser, areCookiesAvailable, isLocalStorageAvailable, debounce, throttle, deepClone, deepMerge, } from "./utils/helpers";
19
19
  export { loadConfigFromFile, loadConfig, detectEnvironment, checkEndpointHealth, resolveEndpoint } from "./utils/config-loader";
20
+ export { getRegionFallback, ensureRegion } from "./utils/region";
20
21
  import { AnalyticsBuilder as Builder } from "./core/analytics";
21
22
  export function createAnalytics() {
22
23
  return new Builder();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@armco/analytics",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Universal Analytics Library for Browser and Node.js",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -0,0 +1,2 @@
1
+ export declare function getRegionFallback(): string;
2
+ export declare function ensureRegion<T extends Record<string, unknown>>(data: T): T;
@@ -0,0 +1,34 @@
1
+ import { getEnvironmentType } from "./helpers";
2
+ import { detectEnvironment } from "./config-loader";
3
+ export function getRegionFallback() {
4
+ const envType = getEnvironmentType();
5
+ if (envType === "node") {
6
+ const explicit = process.env.ANALYTICS_REGION ||
7
+ process.env.REGION ||
8
+ process.env.AWS_REGION ||
9
+ process.env.AWS_DEFAULT_REGION;
10
+ if (explicit && explicit.trim().length > 0) {
11
+ return explicit.trim();
12
+ }
13
+ const currentEnv = detectEnvironment();
14
+ return currentEnv === "development" || currentEnv === "local"
15
+ ? "local"
16
+ : "unknown";
17
+ }
18
+ if (envType === "browser") {
19
+ const win = window;
20
+ if (win.__ANALYTICS_REGION__ && typeof win.__ANALYTICS_REGION__ === "string") {
21
+ return win.__ANALYTICS_REGION__;
22
+ }
23
+ }
24
+ return "unknown";
25
+ }
26
+ export function ensureRegion(data) {
27
+ if (data.region && typeof data.region === "string" && data.region.trim().length > 0) {
28
+ return data;
29
+ }
30
+ return {
31
+ ...data,
32
+ region: getRegionFallback(),
33
+ };
34
+ }
@@ -1,8 +1,9 @@
1
1
  import { z } from "zod";
2
2
  import { ValidationError } from "../core/errors";
3
+ const endpointConfigSchema = z.record(z.string(), z.string().url());
3
4
  const configSchema = z.object({
4
5
  apiKey: z.string().optional(),
5
- endpoint: z.string().url().optional(),
6
+ endpoint: z.union([z.string().url(), endpointConfigSchema]).optional(),
6
7
  hostProjectName: z.string().optional(),
7
8
  trackEvents: z.array(z.string()).optional(),
8
9
  submissionStrategy: z.enum(["ONEVENT", "DEFER"]).optional(),