@memberjunction/connector-ga4 0.2.0 → 0.2.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.
- package/dist/GA4Rows.d.ts +6 -0
- package/dist/GA4Rows.js +18 -0
- package/dist/GA4Rows.js.map +1 -1
- package/package.json +2 -2
package/dist/GA4Rows.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ import type { GA4Row } from './GA4Report.js';
|
|
|
13
13
|
export declare const MAX_EXTERNAL_ID_LENGTH = 700;
|
|
14
14
|
/** GA4's sentinel for rows collapsed together once a dimension exceeds its cardinality limit. */
|
|
15
15
|
export declare const OTHER_ROW_SENTINEL = "(other)";
|
|
16
|
+
/**
|
|
17
|
+
* GA4's own literal for a dimension that has no value on a row. Used to fill empty primary-key
|
|
18
|
+
* components — see `projectRow`. This is the vendor's spelling, not ours, so a consumer joining
|
|
19
|
+
* these rows to anything else in GA4 sees the same token they would in the GA4 UI.
|
|
20
|
+
*/
|
|
21
|
+
export declare const GA4_UNSET_DIMENSION = "(not set)";
|
|
16
22
|
/**
|
|
17
23
|
* Build the `ExternalID` from the declared key values.
|
|
18
24
|
*
|
package/dist/GA4Rows.js
CHANGED
|
@@ -18,6 +18,12 @@ import { createHash } from 'node:crypto';
|
|
|
18
18
|
export const MAX_EXTERNAL_ID_LENGTH = 700;
|
|
19
19
|
/** GA4's sentinel for rows collapsed together once a dimension exceeds its cardinality limit. */
|
|
20
20
|
export const OTHER_ROW_SENTINEL = '(other)';
|
|
21
|
+
/**
|
|
22
|
+
* GA4's own literal for a dimension that has no value on a row. Used to fill empty primary-key
|
|
23
|
+
* components — see `projectRow`. This is the vendor's spelling, not ours, so a consumer joining
|
|
24
|
+
* these rows to anything else in GA4 sees the same token they would in the GA4 UI.
|
|
25
|
+
*/
|
|
26
|
+
export const GA4_UNSET_DIMENSION = '(not set)';
|
|
21
27
|
/**
|
|
22
28
|
* Build the `ExternalID` from the declared key values.
|
|
23
29
|
*
|
|
@@ -104,6 +110,18 @@ export function projectRow(obj, row, propertyId) {
|
|
|
104
110
|
fields[obj.Metrics[i]] = parseMetric(valueAt(row.metricValues, i));
|
|
105
111
|
}
|
|
106
112
|
fields.propertyId = propertyId;
|
|
113
|
+
// A primary-key component must never be empty. GA4 reports untagged traffic with an empty
|
|
114
|
+
// `sessionCampaignName` / `sessionMedium` (direct visits, email-signature links, anything with
|
|
115
|
+
// no UTM tagging), and an empty component does not survive the write: MJ's generated
|
|
116
|
+
// `spCreate` inserts the row and then re-selects it by primary key, an empty string is stored
|
|
117
|
+
// as NULL for a nullable column, and `= NULL` matches nothing — so the create comes back as
|
|
118
|
+
// "no rows returned from SQL" and the row is dropped. GA4's own convention for a dimension
|
|
119
|
+
// with no value is the literal `(not set)`, so use that rather than inventing a sentinel.
|
|
120
|
+
for (const f of obj.Fields) {
|
|
121
|
+
if (f.IsPrimaryKey && f.Name !== 'date' && fields[f.Name] === '') {
|
|
122
|
+
fields[f.Name] = GA4_UNSET_DIMENSION;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
107
125
|
const keyValues = obj.Fields.filter((f) => f.IsPrimaryKey).map((f) => String(fields[f.Name] ?? ''));
|
|
108
126
|
return {
|
|
109
127
|
Record: {
|
package/dist/GA4Rows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GA4Rows.js","sourceRoot":"","sources":["../src/GA4Rows.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GA4Rows.js","sourceRoot":"","sources":["../src/GA4Rows.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/connector-ga4",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "MemberJunction Google Analytics 4 connector (Data API v1beta).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"test": "vitest run"
|
|
14
14
|
},
|
|
15
15
|
"author": "MemberJunction.com",
|
|
16
|
-
"license": "
|
|
16
|
+
"license": "BUSL-1.1",
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"@memberjunction/core": ">=5.43.0 <6.0.0",
|
|
19
19
|
"@memberjunction/core-entities": ">=5.43.0 <6.0.0",
|