@agentsean/google 1.0.0

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 (112) hide show
  1. package/LICENSE +661 -0
  2. package/dist/audit-extras.d.ts +21 -0
  3. package/dist/audit-extras.d.ts.map +1 -0
  4. package/dist/audit-extras.js +62 -0
  5. package/dist/audit-extras.js.map +1 -0
  6. package/dist/broker.d.ts +47 -0
  7. package/dist/broker.d.ts.map +1 -0
  8. package/dist/broker.js +146 -0
  9. package/dist/broker.js.map +1 -0
  10. package/dist/causes.d.ts +157 -0
  11. package/dist/causes.d.ts.map +1 -0
  12. package/dist/causes.js +175 -0
  13. package/dist/causes.js.map +1 -0
  14. package/dist/connect-flow.d.ts +63 -0
  15. package/dist/connect-flow.d.ts.map +1 -0
  16. package/dist/connect-flow.js +150 -0
  17. package/dist/connect-flow.js.map +1 -0
  18. package/dist/crux.d.ts +37 -0
  19. package/dist/crux.d.ts.map +1 -0
  20. package/dist/crux.js +112 -0
  21. package/dist/crux.js.map +1 -0
  22. package/dist/data/changepoints.json +174 -0
  23. package/dist/data/quotas.json +17 -0
  24. package/dist/errors.d.ts +46 -0
  25. package/dist/errors.d.ts.map +1 -0
  26. package/dist/errors.js +110 -0
  27. package/dist/errors.js.map +1 -0
  28. package/dist/ga4.d.ts +46 -0
  29. package/dist/ga4.d.ts.map +1 -0
  30. package/dist/ga4.js +126 -0
  31. package/dist/ga4.js.map +1 -0
  32. package/dist/gsc.d.ts +98 -0
  33. package/dist/gsc.d.ts.map +1 -0
  34. package/dist/gsc.js +141 -0
  35. package/dist/gsc.js.map +1 -0
  36. package/dist/http.d.ts +14 -0
  37. package/dist/http.d.ts.map +1 -0
  38. package/dist/http.js +47 -0
  39. package/dist/http.js.map +1 -0
  40. package/dist/incidents.d.ts +51 -0
  41. package/dist/incidents.d.ts.map +1 -0
  42. package/dist/incidents.js +221 -0
  43. package/dist/incidents.js.map +1 -0
  44. package/dist/index.d.ts +27 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +27 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/integrity.d.ts +32 -0
  49. package/dist/integrity.d.ts.map +1 -0
  50. package/dist/integrity.js +52 -0
  51. package/dist/integrity.js.map +1 -0
  52. package/dist/oauth-broker.d.ts +38 -0
  53. package/dist/oauth-broker.d.ts.map +1 -0
  54. package/dist/oauth-broker.js +81 -0
  55. package/dist/oauth-broker.js.map +1 -0
  56. package/dist/oauth-config.d.ts +16 -0
  57. package/dist/oauth-config.d.ts.map +1 -0
  58. package/dist/oauth-config.js +24 -0
  59. package/dist/oauth-config.js.map +1 -0
  60. package/dist/oauth-desktop.d.ts +29 -0
  61. package/dist/oauth-desktop.d.ts.map +1 -0
  62. package/dist/oauth-desktop.js +76 -0
  63. package/dist/oauth-desktop.js.map +1 -0
  64. package/dist/pending.d.ts +18 -0
  65. package/dist/pending.d.ts.map +1 -0
  66. package/dist/pending.js +29 -0
  67. package/dist/pending.js.map +1 -0
  68. package/dist/persist.d.ts +48 -0
  69. package/dist/persist.d.ts.map +1 -0
  70. package/dist/persist.js +298 -0
  71. package/dist/persist.js.map +1 -0
  72. package/dist/pkce.d.ts +9 -0
  73. package/dist/pkce.d.ts.map +1 -0
  74. package/dist/pkce.js +13 -0
  75. package/dist/pkce.js.map +1 -0
  76. package/dist/psi.d.ts +19 -0
  77. package/dist/psi.d.ts.map +1 -0
  78. package/dist/psi.js +47 -0
  79. package/dist/psi.js.map +1 -0
  80. package/dist/quota.d.ts +22 -0
  81. package/dist/quota.d.ts.map +1 -0
  82. package/dist/quota.js +136 -0
  83. package/dist/quota.js.map +1 -0
  84. package/dist/reconcile.d.ts +19 -0
  85. package/dist/reconcile.d.ts.map +1 -0
  86. package/dist/reconcile.js +89 -0
  87. package/dist/reconcile.js.map +1 -0
  88. package/dist/scopes.d.ts +25 -0
  89. package/dist/scopes.d.ts.map +1 -0
  90. package/dist/scopes.js +49 -0
  91. package/dist/scopes.js.map +1 -0
  92. package/dist/seal.d.ts +4 -0
  93. package/dist/seal.d.ts.map +1 -0
  94. package/dist/seal.js +27 -0
  95. package/dist/seal.js.map +1 -0
  96. package/dist/sync.d.ts +29 -0
  97. package/dist/sync.d.ts.map +1 -0
  98. package/dist/sync.js +266 -0
  99. package/dist/sync.js.map +1 -0
  100. package/dist/tokens.d.ts +57 -0
  101. package/dist/tokens.d.ts.map +1 -0
  102. package/dist/tokens.js +122 -0
  103. package/dist/tokens.js.map +1 -0
  104. package/dist/verification.d.ts +17 -0
  105. package/dist/verification.d.ts.map +1 -0
  106. package/dist/verification.js +51 -0
  107. package/dist/verification.js.map +1 -0
  108. package/dist/waterfall.d.ts +39 -0
  109. package/dist/waterfall.d.ts.map +1 -0
  110. package/dist/waterfall.js +167 -0
  111. package/dist/waterfall.js.map +1 -0
  112. package/package.json +52 -0
@@ -0,0 +1,167 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { and, eq } from "drizzle-orm";
3
+ import { ga4Connections, ga4Daily, gscDaily, gscQueryDaily, reconciliationWaterfall, } from "@agentsean/db";
4
+ import { DISCREPANCY_CAUSES, EU_GA4_INVISIBLE_HIGH, EU_GA4_INVISIBLE_LOW, GSC_ANONYMIZED_SHARE, isEuTimeZone, } from "./causes.js";
5
+ import { computeResidual } from "./reconcile.js";
6
+ function clamp01(n) {
7
+ if (!Number.isFinite(n))
8
+ return 0;
9
+ if (n < 0)
10
+ return 0;
11
+ if (n > 1)
12
+ return 1;
13
+ return n;
14
+ }
15
+ /**
16
+ * Named 17-cause waterfall. It explains the residual; it does not force
17
+ * GA4 and GSC to match. The leftover is the honest number.
18
+ */
19
+ export function buildWaterfall(input) {
20
+ const gscClicks = Math.max(0, input.gscClicks);
21
+ const queryClicks = Math.max(0, input.queryDimensionClicks);
22
+ const ga4 = Math.max(0, input.ga4OrganicSessions);
23
+ const anonymized = gscClicks > 0 ? clamp01(1 - queryClicks / gscClicks) : GSC_ANONYMIZED_SHARE;
24
+ const eu = isEuTimeZone(input.timeZone ?? null);
25
+ const euShare = eu ? (EU_GA4_INVISIBLE_LOW + EU_GA4_INVISIBLE_HIGH) / 2 : null;
26
+ const residualRow = computeResidual(gscClicks, ga4);
27
+ const windowDays = daySpan(input.windowStart, input.windowEnd);
28
+ const steps = DISCREPANCY_CAUSES.map((cause) => {
29
+ switch (cause.code) {
30
+ case "GSC_ANONYMIZED_QUERY":
31
+ return step(cause, true, anonymized, `Query view covers ${pct(1 - anonymized)} of clicks.`);
32
+ case "GA4_CONSENT_DENIED":
33
+ return step(cause, eu, euShare, eu
34
+ ? `EU/UK property: ${pct(EU_GA4_INVISIBLE_LOW)}–${pct(EU_GA4_INVISIBLE_HIGH)} of organic is permanently invisible in GA4.`
35
+ : "Not flagged as an EU property timezone.");
36
+ case "DEF_TIMEZONE":
37
+ return step(cause, true, windowDays >= 7 ? 0 : null, windowDays >= 7
38
+ ? "Compared on a ≥7-day window; single-day timezone skew collapses."
39
+ : "Window shorter than 7 days — timezone skew can dominate a single day.");
40
+ case "GA4_SAMPLING":
41
+ return step(cause, Boolean(input.sampled), null, input.sampled
42
+ ? "Sampled GA4 number — do not report without a warning."
43
+ : "No sampling flag.");
44
+ case "GA4_THRESHOLDING":
45
+ return step(cause, Boolean(input.thresholded), null, input.thresholded
46
+ ? "Thresholded GA4 number — hard gate."
47
+ : "No thresholding flag.");
48
+ default:
49
+ return step(cause, cause.alwaysPresent, null, cause.notes);
50
+ }
51
+ });
52
+ const notes = [
53
+ residualRow.notes,
54
+ `Anonymized GSC queries ≈ ${pct(anonymized)} of clicks (industry 46.8%).`,
55
+ eu
56
+ ? `EU property: ${pct(EU_GA4_INVISIBLE_LOW)}–${pct(EU_GA4_INVISIBLE_HIGH)} of organic traffic is permanently invisible in GA4.`
57
+ : "GA4 consent loss is the dominant extra gap on EU properties.",
58
+ "The residual is the leftover after naming every structural cause. It is not a bug to fix.",
59
+ ].join(" ");
60
+ return {
61
+ windowStart: input.windowStart,
62
+ windowEnd: input.windowEnd,
63
+ gscClicks,
64
+ queryDimensionClicks: queryClicks,
65
+ ga4OrganicSessions: ga4,
66
+ residual: residualRow.residual,
67
+ residualPct: residualRow.residualPct,
68
+ anonymizedQueryShare: anonymized,
69
+ euInvisibleShare: euShare,
70
+ euProperty: eu,
71
+ steps,
72
+ notes,
73
+ };
74
+ }
75
+ function step(cause, applies, estimatedShare, detail) {
76
+ return Object.assign({}, cause, { applies, estimatedShare, detail });
77
+ }
78
+ function pct(n) {
79
+ return `${Math.round(n * 1000) / 10}%`;
80
+ }
81
+ function daySpan(start, end) {
82
+ const a = Date.parse(`${start}T00:00:00Z`);
83
+ const b = Date.parse(`${end}T00:00:00Z`);
84
+ if (!Number.isFinite(a) || !Number.isFinite(b))
85
+ return 0;
86
+ return Math.round((b - a) / 86_400_000) + 1;
87
+ }
88
+ export function waterfallFromSite(db, siteId, windowStart, windowEnd) {
89
+ const gsc = db.select().from(gscDaily).where(eq(gscDaily.siteId, siteId)).all();
90
+ const queries = db
91
+ .select()
92
+ .from(gscQueryDaily)
93
+ .where(eq(gscQueryDaily.siteId, siteId))
94
+ .all();
95
+ const ga4 = db.select().from(ga4Daily).where(eq(ga4Daily.siteId, siteId)).all();
96
+ const conn = db
97
+ .select()
98
+ .from(ga4Connections)
99
+ .where(eq(ga4Connections.siteId, siteId))
100
+ .get();
101
+ let gscClicks = 0;
102
+ for (const row of gsc) {
103
+ if (row.searchType !== "web")
104
+ continue;
105
+ if (row.date < windowStart || row.date > windowEnd)
106
+ continue;
107
+ gscClicks += row.clicks;
108
+ }
109
+ let queryClicks = 0;
110
+ for (const row of queries) {
111
+ if (row.searchType !== "web")
112
+ continue;
113
+ if (row.date < windowStart || row.date > windowEnd)
114
+ continue;
115
+ queryClicks += row.clicks;
116
+ }
117
+ let ga4Sessions = 0;
118
+ for (const row of ga4) {
119
+ if (row.date < windowStart || row.date > windowEnd)
120
+ continue;
121
+ ga4Sessions += row.organicSessions;
122
+ }
123
+ return buildWaterfall({
124
+ gscClicks,
125
+ queryDimensionClicks: queryClicks,
126
+ ga4OrganicSessions: ga4Sessions,
127
+ windowStart,
128
+ windowEnd,
129
+ timeZone: conn?.timeZone ?? null,
130
+ });
131
+ }
132
+ export function persistWaterfall(db, siteId, result, now = new Date()) {
133
+ const existing = db
134
+ .select()
135
+ .from(reconciliationWaterfall)
136
+ .where(and(eq(reconciliationWaterfall.siteId, siteId), eq(reconciliationWaterfall.windowStart, result.windowStart), eq(reconciliationWaterfall.windowEnd, result.windowEnd)))
137
+ .get();
138
+ const values = {
139
+ date: result.windowEnd,
140
+ gscClicks: result.gscClicks,
141
+ ga4OrganicSessions: result.ga4OrganicSessions,
142
+ residual: result.residual,
143
+ residualPct: result.residualPct,
144
+ causesJson: JSON.stringify(result.steps),
145
+ anonymizedQueryShare: result.anonymizedQueryShare,
146
+ euInvisibleShare: result.euInvisibleShare,
147
+ notes: result.notes,
148
+ createdAt: now.toISOString(),
149
+ };
150
+ if (existing) {
151
+ db.update(reconciliationWaterfall)
152
+ .set(values)
153
+ .where(eq(reconciliationWaterfall.id, existing.id))
154
+ .run();
155
+ return;
156
+ }
157
+ db.insert(reconciliationWaterfall)
158
+ .values({
159
+ id: randomUUID(),
160
+ siteId,
161
+ windowStart: result.windowStart,
162
+ windowEnd: result.windowEnd,
163
+ ...values,
164
+ })
165
+ .run();
166
+ }
167
+ //# sourceMappingURL=waterfall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waterfall.js","sourceRoot":"","sources":["../src/waterfall.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@agentsean/google",
3
+ "version": "1.0.0",
4
+ "license": "AGPL-3.0-only",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "import": "./dist/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "engines": {
16
+ "node": ">=22.19.0"
17
+ },
18
+ "dependencies": {
19
+ "drizzle-orm": "0.45.2",
20
+ "@agentsean/db": "1.0.0",
21
+ "@agentsean/credentials": "1.0.0"
22
+ },
23
+ "devDependencies": {
24
+ "typescript": "~5.9.3",
25
+ "vitest": "^4.1.11"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "git+https://github.com/seziro-team/agentsean.git",
33
+ "directory": "packages/google"
34
+ },
35
+ "homepage": "https://github.com/seziro-team/agentsean#readme",
36
+ "bugs": {
37
+ "url": "https://github.com/seziro-team/agentsean/issues"
38
+ },
39
+ "author": "Seziro (https://seziro.com)",
40
+ "description": "Agent Sean — google module",
41
+ "keywords": [
42
+ "seo",
43
+ "agent",
44
+ "agentsean",
45
+ "seo-automation"
46
+ ],
47
+ "scripts": {
48
+ "build": "tsc -p tsconfig.json && node -e \"require('fs').cpSync('src/data','dist/data',{recursive:true})\"",
49
+ "typecheck": "tsc -p tsconfig.json --noEmit",
50
+ "test": "vitest run --config ../../vitest.config.ts"
51
+ }
52
+ }