@codeandink/payload-ink 0.0.7-alpha.1
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/LICENSE +21 -0
- package/README.md +64 -0
- package/dist/audits/freshness.d.ts +11 -0
- package/dist/audits/freshness.d.ts.map +1 -0
- package/dist/audits/freshness.js +89 -0
- package/dist/audits/freshness.js.map +1 -0
- package/dist/audits/seo.d.ts +4 -0
- package/dist/audits/seo.d.ts.map +1 -0
- package/dist/audits/seo.js +128 -0
- package/dist/audits/seo.js.map +1 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +18 -0
- package/dist/client.js.map +1 -0
- package/dist/collections/Actions.d.ts +3 -0
- package/dist/collections/Actions.d.ts.map +1 -0
- package/dist/collections/Actions.js +56 -0
- package/dist/collections/Actions.js.map +1 -0
- package/dist/collections/Audits.d.ts +3 -0
- package/dist/collections/Audits.d.ts.map +1 -0
- package/dist/collections/Audits.js +69 -0
- package/dist/collections/Audits.js.map +1 -0
- package/dist/collections/Insights.d.ts +3 -0
- package/dist/collections/Insights.d.ts.map +1 -0
- package/dist/collections/Insights.js +99 -0
- package/dist/collections/Insights.js.map +1 -0
- package/dist/collections/OnboardingProfile.d.ts +3 -0
- package/dist/collections/OnboardingProfile.d.ts.map +1 -0
- package/dist/collections/OnboardingProfile.js +174 -0
- package/dist/collections/OnboardingProfile.js.map +1 -0
- package/dist/components/AnalyticsPanel.d.ts +2 -0
- package/dist/components/AnalyticsPanel.d.ts.map +1 -0
- package/dist/components/AnalyticsPanel.js +151 -0
- package/dist/components/AnalyticsPanel.js.map +1 -0
- package/dist/components/AuditPanel.d.ts +4 -0
- package/dist/components/AuditPanel.d.ts.map +1 -0
- package/dist/components/AuditPanel.js +463 -0
- package/dist/components/AuditPanel.js.map +1 -0
- package/dist/components/AuditsPanel.d.ts +2 -0
- package/dist/components/AuditsPanel.d.ts.map +1 -0
- package/dist/components/AuditsPanel.js +229 -0
- package/dist/components/AuditsPanel.js.map +1 -0
- package/dist/components/DigestPanel.d.ts +2 -0
- package/dist/components/DigestPanel.d.ts.map +1 -0
- package/dist/components/DigestPanel.js +320 -0
- package/dist/components/DigestPanel.js.map +1 -0
- package/dist/components/FreshnessPanel.d.ts +4 -0
- package/dist/components/FreshnessPanel.d.ts.map +1 -0
- package/dist/components/FreshnessPanel.js +224 -0
- package/dist/components/FreshnessPanel.js.map +1 -0
- package/dist/components/InkGradeCell.d.ts +4 -0
- package/dist/components/InkGradeCell.d.ts.map +1 -0
- package/dist/components/InkGradeCell.js +32 -0
- package/dist/components/InkGradeCell.js.map +1 -0
- package/dist/components/OnboardingFlow.d.ts +2 -0
- package/dist/components/OnboardingFlow.d.ts.map +1 -0
- package/dist/components/OnboardingFlow.js +406 -0
- package/dist/components/OnboardingFlow.js.map +1 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +18 -0
- package/dist/components/index.js.map +1 -0
- package/dist/endpoints/analytics.d.ts +9 -0
- package/dist/endpoints/analytics.d.ts.map +1 -0
- package/dist/endpoints/analytics.js +68 -0
- package/dist/endpoints/analytics.js.map +1 -0
- package/dist/endpoints/auditChanges.d.ts +9 -0
- package/dist/endpoints/auditChanges.d.ts.map +1 -0
- package/dist/endpoints/auditChanges.js +52 -0
- package/dist/endpoints/auditChanges.js.map +1 -0
- package/dist/endpoints/auditStatus.d.ts +6 -0
- package/dist/endpoints/auditStatus.d.ts.map +1 -0
- package/dist/endpoints/auditStatus.js +24 -0
- package/dist/endpoints/auditStatus.js.map +1 -0
- package/dist/endpoints/config.d.ts +8 -0
- package/dist/endpoints/config.d.ts.map +1 -0
- package/dist/endpoints/config.js +12 -0
- package/dist/endpoints/config.js.map +1 -0
- package/dist/endpoints/digestPreflight.d.ts +8 -0
- package/dist/endpoints/digestPreflight.d.ts.map +1 -0
- package/dist/endpoints/digestPreflight.js +79 -0
- package/dist/endpoints/digestPreflight.js.map +1 -0
- package/dist/endpoints/ga4Test.d.ts +8 -0
- package/dist/endpoints/ga4Test.d.ts.map +1 -0
- package/dist/endpoints/ga4Test.js +38 -0
- package/dist/endpoints/ga4Test.js.map +1 -0
- package/dist/endpoints/insights.d.ts +8 -0
- package/dist/endpoints/insights.d.ts.map +1 -0
- package/dist/endpoints/insights.js +53 -0
- package/dist/endpoints/insights.js.map +1 -0
- package/dist/endpoints/onboarding.d.ts +4 -0
- package/dist/endpoints/onboarding.d.ts.map +1 -0
- package/dist/endpoints/onboarding.js +64 -0
- package/dist/endpoints/onboarding.js.map +1 -0
- package/dist/endpoints/runAudit.d.ts +12 -0
- package/dist/endpoints/runAudit.d.ts.map +1 -0
- package/dist/endpoints/runAudit.js +174 -0
- package/dist/endpoints/runAudit.js.map +1 -0
- package/dist/endpoints/runFreshnessAudit.d.ts +13 -0
- package/dist/endpoints/runFreshnessAudit.d.ts.map +1 -0
- package/dist/endpoints/runFreshnessAudit.js +143 -0
- package/dist/endpoints/runFreshnessAudit.js.map +1 -0
- package/dist/endpoints/sendDigest.d.ts +10 -0
- package/dist/endpoints/sendDigest.d.ts.map +1 -0
- package/dist/endpoints/sendDigest.js +259 -0
- package/dist/endpoints/sendDigest.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/computeGrade.d.ts +8 -0
- package/dist/lib/computeGrade.d.ts.map +1 -0
- package/dist/lib/computeGrade.js +48 -0
- package/dist/lib/computeGrade.js.map +1 -0
- package/dist/plugin.d.ts +28 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +168 -0
- package/dist/plugin.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.OnboardingFlow = OnboardingFlow;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
const react_1 = __importStar(require("react"));
|
|
40
|
+
const initialState = {
|
|
41
|
+
siteName: '',
|
|
42
|
+
audiences: [{ segment: '', description: '' }],
|
|
43
|
+
objectives: [{ objective: '' }],
|
|
44
|
+
conversionEvents: [],
|
|
45
|
+
brandVoice: '',
|
|
46
|
+
cadence: 'weekly',
|
|
47
|
+
competitors: [],
|
|
48
|
+
digestRecipients: [{ email: '' }],
|
|
49
|
+
guardrails: [],
|
|
50
|
+
ga4PropertyId: '',
|
|
51
|
+
gaConnectionVerifiedAt: '',
|
|
52
|
+
};
|
|
53
|
+
const voicePresets = [
|
|
54
|
+
'Warm, plain-spoken, encouraging — sounds like a friend who knows the subject.',
|
|
55
|
+
'Editorial and considered — confident phrasing, full sentences, no slang.',
|
|
56
|
+
'Direct and pragmatic — short sentences, active verbs, no fluff.',
|
|
57
|
+
'Playful and curious — wry humour welcome, never sarcastic.',
|
|
58
|
+
];
|
|
59
|
+
const stepTitles = [
|
|
60
|
+
{ title: 'Welcome to INK', help: 'A few questions so every recommendation we surface is scored against your goals — not generic SEO checklists.' },
|
|
61
|
+
{ title: 'Who are you serving?', help: 'Name your audience segments. The first one should be the most important.' },
|
|
62
|
+
{ title: 'What are your top objectives?', help: 'Up to three. Everything INK suggests will be ranked against these.' },
|
|
63
|
+
{ title: 'What counts as a conversion?', help: 'Optional. List the events that signal real success — sign-ups, ticket sales, enquiries.' },
|
|
64
|
+
{ title: 'How do you sound?', help: 'INK rewrites copy in your voice. Describe it, or pick a starting point.' },
|
|
65
|
+
{ title: 'When and where do digests land?', help: 'Weekly is the default and what we recommend for most teams.' },
|
|
66
|
+
{ title: 'Anything we should know?', help: 'Optional. Competitor URLs help with context. Guardrails are rules INK must never break.' },
|
|
67
|
+
{ title: 'Connect Google Analytics', help: 'INK pulls traffic data from your GA4 property to rank pages and write the weekly digest. Add the email below as a Viewer on your property.' },
|
|
68
|
+
{ title: 'Review and save', help: 'You can edit any of this later in the INK → Onboarding Profile collection.' },
|
|
69
|
+
];
|
|
70
|
+
const colors = {
|
|
71
|
+
bg: '#0a0a0a',
|
|
72
|
+
card: '#141414',
|
|
73
|
+
border: '#262626',
|
|
74
|
+
borderStrong: '#3a3a3a',
|
|
75
|
+
text: '#fafafa',
|
|
76
|
+
textMuted: '#a3a3a3',
|
|
77
|
+
textSubtle: '#737373',
|
|
78
|
+
accent: '#fafafa',
|
|
79
|
+
accentText: '#0a0a0a',
|
|
80
|
+
danger: '#f87171',
|
|
81
|
+
success: '#a3e635',
|
|
82
|
+
progress: '#fafafa',
|
|
83
|
+
progressBg: '#262626',
|
|
84
|
+
};
|
|
85
|
+
const mono = "'JetBrains Mono', 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
86
|
+
function OnboardingFlow() {
|
|
87
|
+
const [status, setStatus] = (0, react_1.useState)('loading');
|
|
88
|
+
const [step, setStep] = (0, react_1.useState)(0);
|
|
89
|
+
const [form, setForm] = (0, react_1.useState)(initialState);
|
|
90
|
+
const [submitting, setSubmitting] = (0, react_1.useState)(false);
|
|
91
|
+
const [submitError, setSubmitError] = (0, react_1.useState)(null);
|
|
92
|
+
(0, react_1.useEffect)(() => {
|
|
93
|
+
let cancelled = false;
|
|
94
|
+
fetch('/api/ink/onboarding/status')
|
|
95
|
+
.then((r) => r.json())
|
|
96
|
+
.then((data) => {
|
|
97
|
+
if (cancelled)
|
|
98
|
+
return;
|
|
99
|
+
setStatus(data.configured ? 'complete' : 'pending');
|
|
100
|
+
})
|
|
101
|
+
.catch(() => {
|
|
102
|
+
if (!cancelled)
|
|
103
|
+
setStatus('pending');
|
|
104
|
+
});
|
|
105
|
+
return () => {
|
|
106
|
+
cancelled = true;
|
|
107
|
+
};
|
|
108
|
+
}, []);
|
|
109
|
+
if (status === 'loading' || status === 'complete')
|
|
110
|
+
return null;
|
|
111
|
+
const totalSteps = stepTitles.length;
|
|
112
|
+
const { title, help } = stepTitles[step];
|
|
113
|
+
function update(key, value) {
|
|
114
|
+
setForm((prev) => ({ ...prev, [key]: value }));
|
|
115
|
+
}
|
|
116
|
+
function canAdvance() {
|
|
117
|
+
switch (step) {
|
|
118
|
+
case 0:
|
|
119
|
+
return form.siteName.trim().length > 0;
|
|
120
|
+
case 1:
|
|
121
|
+
return form.audiences.some((a) => a.segment.trim().length > 0);
|
|
122
|
+
case 2:
|
|
123
|
+
return form.objectives.some((o) => o.objective.trim().length > 0);
|
|
124
|
+
case 3:
|
|
125
|
+
return true;
|
|
126
|
+
case 4:
|
|
127
|
+
return form.brandVoice.trim().length > 0;
|
|
128
|
+
case 5:
|
|
129
|
+
return form.digestRecipients.some((r) => /.+@.+\..+/.test(r.email));
|
|
130
|
+
case 6:
|
|
131
|
+
return true;
|
|
132
|
+
case 7:
|
|
133
|
+
return /^\d{6,}$/.test(form.ga4PropertyId.trim());
|
|
134
|
+
case 8:
|
|
135
|
+
return true;
|
|
136
|
+
default:
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function submit() {
|
|
141
|
+
setSubmitting(true);
|
|
142
|
+
setSubmitError(null);
|
|
143
|
+
try {
|
|
144
|
+
const cleaned = {
|
|
145
|
+
...form,
|
|
146
|
+
audiences: form.audiences.filter((a) => a.segment.trim()),
|
|
147
|
+
objectives: form.objectives.filter((o) => o.objective.trim()),
|
|
148
|
+
conversionEvents: form.conversionEvents.filter((e) => e.eventName.trim()),
|
|
149
|
+
competitors: form.competitors.filter((c) => c.url.trim()),
|
|
150
|
+
digestRecipients: form.digestRecipients.filter((r) => /.+@.+\..+/.test(r.email)),
|
|
151
|
+
guardrails: form.guardrails.filter((g) => g.rule.trim()),
|
|
152
|
+
ga4PropertyId: form.ga4PropertyId.trim(),
|
|
153
|
+
};
|
|
154
|
+
if (!form.gaConnectionVerifiedAt) {
|
|
155
|
+
delete cleaned.gaConnectionVerifiedAt;
|
|
156
|
+
}
|
|
157
|
+
const res = await fetch('/api/ink/onboarding', {
|
|
158
|
+
method: 'POST',
|
|
159
|
+
headers: { 'Content-Type': 'application/json' },
|
|
160
|
+
body: JSON.stringify(cleaned),
|
|
161
|
+
});
|
|
162
|
+
const data = await res.json();
|
|
163
|
+
if (!res.ok)
|
|
164
|
+
throw new Error(data.error ?? 'Save failed');
|
|
165
|
+
setStatus('complete');
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
setSubmitError(err instanceof Error ? err.message : 'Save failed');
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
setSubmitting(false);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: { background: colors.bg, padding: '32px 0', marginBottom: '24px', fontFamily: mono }, children: (0, jsx_runtime_1.jsxs)("div", { style: {
|
|
175
|
+
maxWidth: '640px',
|
|
176
|
+
margin: '0 auto',
|
|
177
|
+
background: colors.card,
|
|
178
|
+
border: `1px solid ${colors.border}`,
|
|
179
|
+
overflow: 'hidden',
|
|
180
|
+
}, children: [(0, jsx_runtime_1.jsx)(Progress, { step: step, total: totalSteps }), (0, jsx_runtime_1.jsxs)("div", { style: { padding: '32px' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: { marginBottom: '28px' }, children: [(0, jsx_runtime_1.jsxs)("p", { style: { margin: 0, fontSize: '10px', letterSpacing: '0.15em', textTransform: 'uppercase', color: colors.textSubtle, fontWeight: 700 }, children: ["INK / STEP ", String(step + 1).padStart(2, '0'), " OF ", String(totalSteps).padStart(2, '0')] }), (0, jsx_runtime_1.jsx)("h2", { style: { margin: '10px 0 8px', fontSize: '22px', fontWeight: 700, color: colors.text, lineHeight: 1.25, fontFamily: mono }, children: title }), (0, jsx_runtime_1.jsx)("p", { style: { margin: 0, fontSize: '13px', color: colors.textMuted, lineHeight: 1.6 }, children: help })] }), (0, jsx_runtime_1.jsx)("div", { style: { minHeight: '180px' }, children: renderStep(step, form, update) }), submitError && ((0, jsx_runtime_1.jsx)("p", { style: { color: colors.danger, fontSize: '13px', marginTop: '16px' }, children: submitError })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginTop: '32px', paddingTop: '20px', borderTop: `1px solid ${colors.border}` }, children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => setStep((s) => Math.max(0, s - 1)), disabled: step === 0 || submitting, style: {
|
|
181
|
+
background: 'transparent',
|
|
182
|
+
color: step === 0 ? colors.textSubtle : colors.text,
|
|
183
|
+
border: 'none',
|
|
184
|
+
fontSize: '14px',
|
|
185
|
+
fontWeight: 500,
|
|
186
|
+
cursor: step === 0 ? 'not-allowed' : 'pointer',
|
|
187
|
+
padding: '8px 4px',
|
|
188
|
+
}, children: "\u2190 Back" }), step < totalSteps - 1 ? ((0, jsx_runtime_1.jsx)("button", { onClick: () => setStep((s) => Math.min(totalSteps - 1, s + 1)), disabled: !canAdvance() || submitting, style: primaryButtonStyle(!canAdvance() || submitting), children: "CONTINUE \u2192" })) : ((0, jsx_runtime_1.jsx)("button", { onClick: submit, disabled: submitting, style: primaryButtonStyle(submitting), children: submitting ? 'SAVING…' : 'FINISH SETUP' }))] })] })] }) }));
|
|
189
|
+
}
|
|
190
|
+
function Progress({ step, total }) {
|
|
191
|
+
const pct = ((step + 1) / total) * 100;
|
|
192
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: { height: '4px', background: colors.progressBg, width: '100%' }, children: (0, jsx_runtime_1.jsx)("div", { style: { height: '100%', width: `${pct}%`, background: colors.progress, transition: 'width 200ms ease' } }) }));
|
|
193
|
+
}
|
|
194
|
+
function renderStep(step, form, update) {
|
|
195
|
+
switch (step) {
|
|
196
|
+
case 0:
|
|
197
|
+
return ((0, jsx_runtime_1.jsx)(Field, { label: "Site name", children: (0, jsx_runtime_1.jsx)("input", { type: "text", value: form.siteName, onChange: (e) => update('siteName', e.target.value), placeholder: "e.g. Sister Manchester", style: inputStyle, autoFocus: true }) }));
|
|
198
|
+
case 1:
|
|
199
|
+
return ((0, jsx_runtime_1.jsx)(ArrayField, { items: form.audiences, onChange: (items) => update('audiences', items), addLabel: "Add another audience", empty: { segment: '', description: '' }, renderRow: (item, set) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("input", { type: "text", value: item.segment, onChange: (e) => set({ ...item, segment: e.target.value }), placeholder: "Audience segment", style: inputStyle }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: item.description, onChange: (e) => set({ ...item, description: e.target.value }), placeholder: "One-line description (optional)", style: { ...inputStyle, marginTop: '8px' } })] })) }));
|
|
200
|
+
case 2:
|
|
201
|
+
return ((0, jsx_runtime_1.jsx)(ArrayField, { items: form.objectives, onChange: (items) => update('objectives', items.slice(0, 3)), addLabel: form.objectives.length < 3 ? 'Add another objective' : null, empty: { objective: '' }, renderRow: (item, set) => ((0, jsx_runtime_1.jsx)("input", { type: "text", value: item.objective, onChange: (e) => set({ ...item, objective: e.target.value }), placeholder: "e.g. Drive event-space hire enquiries", style: inputStyle })), hint: "Maximum three. The first should be your most important." }));
|
|
202
|
+
case 3:
|
|
203
|
+
return ((0, jsx_runtime_1.jsx)(ArrayField, { items: form.conversionEvents, onChange: (items) => update('conversionEvents', items), addLabel: "Add a conversion event", empty: { eventName: '', description: '' }, emptyState: "No conversion events yet. Add one, or skip this step.", hint: "The event name must match exactly what your site fires to GA4 (case-sensitive). Description is for context \u2014 INK uses it when writing about conversions.", renderRow: (item, set) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("input", { type: "text", value: item.eventName, onChange: (e) => set({ ...item, eventName: e.target.value }), placeholder: "GA4 event name \u2014 e.g. member_join_click", style: inputStyle }), (0, jsx_runtime_1.jsx)("input", { type: "text", value: item.description, onChange: (e) => set({ ...item, description: e.target.value }), placeholder: "What this conversion means (optional)", style: { ...inputStyle, marginTop: '8px' } })] })) }));
|
|
204
|
+
case 4:
|
|
205
|
+
return ((0, jsx_runtime_1.jsxs)(Field, { label: "Brand voice", children: [(0, jsx_runtime_1.jsx)("textarea", { value: form.brandVoice, onChange: (e) => update('brandVoice', e.target.value), placeholder: "Describe how the brand sounds. Tone, sentence length, formality, words to avoid.", rows: 4, style: { ...inputStyle, resize: 'vertical', minHeight: '110px' } }), (0, jsx_runtime_1.jsxs)("div", { style: { marginTop: '12px' }, children: [(0, jsx_runtime_1.jsx)("p", { style: { margin: '0 0 8px', fontSize: '12px', color: colors.textSubtle, fontWeight: 600, letterSpacing: '0.04em', textTransform: 'uppercase' }, children: "Starting points" }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', gap: '6px' }, children: voicePresets.map((preset) => ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => update('brandVoice', preset), style: {
|
|
206
|
+
textAlign: 'left',
|
|
207
|
+
background: form.brandVoice === preset ? '#1c1c1c' : 'transparent',
|
|
208
|
+
border: `1px solid ${form.brandVoice === preset ? colors.borderStrong : colors.border}`,
|
|
209
|
+
borderRadius: 0,
|
|
210
|
+
padding: '10px 12px',
|
|
211
|
+
fontSize: '12px',
|
|
212
|
+
color: colors.text,
|
|
213
|
+
cursor: 'pointer',
|
|
214
|
+
lineHeight: 1.5,
|
|
215
|
+
fontFamily: mono,
|
|
216
|
+
}, children: preset }, preset))) })] })] }));
|
|
217
|
+
case 5:
|
|
218
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Field, { label: "Digest cadence", children: (0, jsx_runtime_1.jsx)("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '8px' }, children: ['weekly', 'fortnightly', 'monthly'].map((c) => {
|
|
219
|
+
const active = form.cadence === c;
|
|
220
|
+
return ((0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => update('cadence', c), style: {
|
|
221
|
+
background: active ? colors.accent : 'transparent',
|
|
222
|
+
color: active ? colors.accentText : colors.text,
|
|
223
|
+
border: `1px solid ${active ? colors.accent : colors.border}`,
|
|
224
|
+
borderRadius: 0,
|
|
225
|
+
padding: '10px 12px',
|
|
226
|
+
fontSize: '11px',
|
|
227
|
+
fontWeight: 700,
|
|
228
|
+
letterSpacing: '0.1em',
|
|
229
|
+
cursor: 'pointer',
|
|
230
|
+
textTransform: 'uppercase',
|
|
231
|
+
fontFamily: mono,
|
|
232
|
+
}, children: c }, c));
|
|
233
|
+
}) }) }), (0, jsx_runtime_1.jsx)("div", { style: { marginTop: '20px' }, children: (0, jsx_runtime_1.jsx)(ArrayField, { label: "Digest recipients", items: form.digestRecipients, onChange: (items) => update('digestRecipients', items), addLabel: "Add another recipient", empty: { email: '' }, renderRow: (item, set) => ((0, jsx_runtime_1.jsx)("input", { type: "email", value: item.email, onChange: (e) => set({ ...item, email: e.target.value }), placeholder: "name@example.com", style: inputStyle })) }) })] }));
|
|
234
|
+
case 6:
|
|
235
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ArrayField, { label: "Competitors", items: form.competitors, onChange: (items) => update('competitors', items), addLabel: "Add a competitor", empty: { url: '' }, emptyState: "None yet. Skip if you'd rather not say.", renderRow: (item, set) => ((0, jsx_runtime_1.jsx)("input", { type: "url", value: item.url, onChange: (e) => set({ ...item, url: e.target.value }), placeholder: "https://example.com", style: inputStyle })) }), (0, jsx_runtime_1.jsx)("div", { style: { marginTop: '24px' }, children: (0, jsx_runtime_1.jsx)(ArrayField, { label: "Guardrails", items: form.guardrails, onChange: (items) => update('guardrails', items), addLabel: "Add a guardrail", empty: { rule: '' }, emptyState: "Optional. e.g. \u2018Never use the word synergy.\u2019", renderRow: (item, set) => ((0, jsx_runtime_1.jsx)("input", { type: "text", value: item.rule, onChange: (e) => set({ ...item, rule: e.target.value }), placeholder: "A rule INK must never break", style: inputStyle })) }) })] }));
|
|
236
|
+
case 7:
|
|
237
|
+
return ((0, jsx_runtime_1.jsx)(GaConnectStep, { propertyId: form.ga4PropertyId, verifiedAt: form.gaConnectionVerifiedAt, onChange: (propertyId, verifiedAt) => {
|
|
238
|
+
update('ga4PropertyId', propertyId);
|
|
239
|
+
if (verifiedAt !== undefined)
|
|
240
|
+
update('gaConnectionVerifiedAt', verifiedAt);
|
|
241
|
+
} }));
|
|
242
|
+
case 8:
|
|
243
|
+
return (0, jsx_runtime_1.jsx)(ReviewStep, { form: form });
|
|
244
|
+
default:
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
function GaConnectStep({ propertyId, verifiedAt, onChange, }) {
|
|
249
|
+
const [accessEmail, setAccessEmail] = react_1.default.useState(null);
|
|
250
|
+
const [testState, setTestState] = react_1.default.useState(verifiedAt ? 'ok' : 'idle');
|
|
251
|
+
const [testMessage, setTestMessage] = react_1.default.useState(null);
|
|
252
|
+
const [copied, setCopied] = react_1.default.useState(false);
|
|
253
|
+
react_1.default.useEffect(() => {
|
|
254
|
+
fetch('/api/ink/config')
|
|
255
|
+
.then((r) => (r.ok ? r.json() : null))
|
|
256
|
+
.then((data) => {
|
|
257
|
+
if (data?.gaAccessEmail)
|
|
258
|
+
setAccessEmail(data.gaAccessEmail);
|
|
259
|
+
})
|
|
260
|
+
.catch(() => { });
|
|
261
|
+
}, []);
|
|
262
|
+
async function copyEmail() {
|
|
263
|
+
if (!accessEmail)
|
|
264
|
+
return;
|
|
265
|
+
try {
|
|
266
|
+
await navigator.clipboard.writeText(accessEmail);
|
|
267
|
+
setCopied(true);
|
|
268
|
+
setTimeout(() => setCopied(false), 1800);
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
// ignore
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
async function test() {
|
|
275
|
+
setTestState('testing');
|
|
276
|
+
setTestMessage(null);
|
|
277
|
+
try {
|
|
278
|
+
const res = await fetch(`/api/ink/ga4-test?propertyId=${encodeURIComponent(propertyId.trim())}`);
|
|
279
|
+
const data = await res.json();
|
|
280
|
+
if (data?.ok) {
|
|
281
|
+
setTestState('ok');
|
|
282
|
+
setTestMessage(`Connected — ${data.sessions?.toLocaleString?.() ?? data.sessions} sessions in last 7d.`);
|
|
283
|
+
onChange(propertyId, new Date().toISOString());
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
setTestState('error');
|
|
287
|
+
setTestMessage(data?.error ?? 'Connection failed.');
|
|
288
|
+
onChange(propertyId, '');
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
setTestState('error');
|
|
293
|
+
setTestMessage(err instanceof Error ? err.message : 'Connection failed.');
|
|
294
|
+
onChange(propertyId, '');
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: '20px' }, children: [(0, jsx_runtime_1.jsxs)(Field, { label: "Step 1 \u2014 Add this email to your GA4 property", children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
298
|
+
background: '#1c1c1c',
|
|
299
|
+
border: `1px solid ${colors.border}`,
|
|
300
|
+
padding: '12px 14px',
|
|
301
|
+
display: 'flex',
|
|
302
|
+
alignItems: 'center',
|
|
303
|
+
gap: '12px',
|
|
304
|
+
justifyContent: 'space-between',
|
|
305
|
+
}, children: [(0, jsx_runtime_1.jsx)("code", { style: { fontFamily: mono, fontSize: '13px', color: colors.text }, children: accessEmail ?? 'loading…' }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: copyEmail, disabled: !accessEmail, style: {
|
|
306
|
+
background: 'transparent',
|
|
307
|
+
border: `1px solid ${colors.borderStrong}`,
|
|
308
|
+
borderRadius: 0,
|
|
309
|
+
padding: '6px 12px',
|
|
310
|
+
fontSize: '10px',
|
|
311
|
+
fontWeight: 700,
|
|
312
|
+
letterSpacing: '0.1em',
|
|
313
|
+
textTransform: 'uppercase',
|
|
314
|
+
color: colors.text,
|
|
315
|
+
fontFamily: mono,
|
|
316
|
+
cursor: accessEmail ? 'pointer' : 'not-allowed',
|
|
317
|
+
}, children: copied ? '✓ Copied' : 'Copy' })] }), (0, jsx_runtime_1.jsxs)("p", { style: { margin: '10px 0 0', fontSize: '12px', color: colors.textMuted, lineHeight: 1.55 }, children: ["In GA4: ", (0, jsx_runtime_1.jsx)("span", { style: { color: colors.text }, children: "Admin \u2192 Property Access Management \u2192 + Add users" }), ' ', "\u2192 paste this email \u2192 role ", (0, jsx_runtime_1.jsx)("span", { style: { color: colors.text }, children: "Viewer" }), " \u2192 uncheck \"Notify by email\" \u2192 Add."] })] }), (0, jsx_runtime_1.jsxs)(Field, { label: "Step 2 \u2014 Paste your GA4 property ID", children: [(0, jsx_runtime_1.jsx)("input", { type: "text", value: propertyId, onChange: (e) => {
|
|
318
|
+
onChange(e.target.value, '');
|
|
319
|
+
setTestState('idle');
|
|
320
|
+
setTestMessage(null);
|
|
321
|
+
}, placeholder: "e.g. 337097713", inputMode: "numeric", style: inputStyle }), (0, jsx_runtime_1.jsx)("p", { style: { margin: '8px 0 0', fontSize: '12px', color: colors.textSubtle, lineHeight: 1.55 }, children: "Numeric only \u2014 find it in GA4 \u2192 Admin \u2192 Property settings. Not the G-prefixed Measurement ID." })] }), (0, jsx_runtime_1.jsx)(Field, { label: "Step 3 \u2014 Test the connection", children: (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', gap: '12px', alignItems: 'center', flexWrap: 'wrap' }, children: [(0, jsx_runtime_1.jsx)("button", { type: "button", onClick: test, disabled: testState === 'testing' || !/^\d{6,}$/.test(propertyId.trim()), style: {
|
|
322
|
+
background: testState === 'ok' ? 'transparent' : colors.accent,
|
|
323
|
+
color: testState === 'ok' ? colors.success : colors.accentText,
|
|
324
|
+
border: testState === 'ok' ? `1px solid ${colors.success}` : 'none',
|
|
325
|
+
padding: '9px 18px',
|
|
326
|
+
fontSize: '11px',
|
|
327
|
+
fontWeight: 700,
|
|
328
|
+
letterSpacing: '0.1em',
|
|
329
|
+
textTransform: 'uppercase',
|
|
330
|
+
fontFamily: mono,
|
|
331
|
+
cursor: testState === 'testing' || !/^\d{6,}$/.test(propertyId.trim()) ? 'not-allowed' : 'pointer',
|
|
332
|
+
}, children: testState === 'testing'
|
|
333
|
+
? 'Testing…'
|
|
334
|
+
: testState === 'ok'
|
|
335
|
+
? '✓ Connected'
|
|
336
|
+
: 'Test connection' }), testMessage && ((0, jsx_runtime_1.jsx)("span", { style: {
|
|
337
|
+
fontSize: '12px',
|
|
338
|
+
color: testState === 'ok' ? colors.success : colors.danger,
|
|
339
|
+
flex: 1,
|
|
340
|
+
}, children: testMessage }))] }) })] }));
|
|
341
|
+
}
|
|
342
|
+
function Field({ label, children }) {
|
|
343
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { style: { display: 'block', fontSize: '10px', fontWeight: 700, letterSpacing: '0.15em', textTransform: 'uppercase', color: colors.textMuted, marginBottom: '10px', fontFamily: mono }, children: label }), children] }));
|
|
344
|
+
}
|
|
345
|
+
function ArrayField(props) {
|
|
346
|
+
const { items, onChange, empty, renderRow, addLabel, label, hint, emptyState } = props;
|
|
347
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [label && ((0, jsx_runtime_1.jsx)("label", { style: { display: 'block', fontSize: '10px', fontWeight: 700, letterSpacing: '0.15em', textTransform: 'uppercase', color: colors.textMuted, marginBottom: '10px', fontFamily: mono }, children: label })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: '12px' }, children: [items.length === 0 && emptyState && ((0, jsx_runtime_1.jsx)("p", { style: { margin: 0, fontSize: '13px', color: colors.textSubtle, fontStyle: 'italic' }, children: emptyState })), items.map((item, i) => ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'flex-start', gap: '8px' }, children: [(0, jsx_runtime_1.jsx)("div", { style: { flex: 1 }, children: renderRow(item, (next) => {
|
|
348
|
+
const copy = [...items];
|
|
349
|
+
copy[i] = next;
|
|
350
|
+
onChange(copy);
|
|
351
|
+
}) }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: () => onChange(items.filter((_, idx) => idx !== i)), "aria-label": "Remove", style: {
|
|
352
|
+
background: 'transparent',
|
|
353
|
+
border: 'none',
|
|
354
|
+
color: colors.textSubtle,
|
|
355
|
+
fontSize: '18px',
|
|
356
|
+
cursor: 'pointer',
|
|
357
|
+
lineHeight: 1,
|
|
358
|
+
padding: '8px',
|
|
359
|
+
}, children: "\u00D7" })] }, i)))] }), addLabel && ((0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: () => onChange([...items, { ...empty }]), style: {
|
|
360
|
+
marginTop: '12px',
|
|
361
|
+
background: 'transparent',
|
|
362
|
+
border: `1px dashed ${colors.borderStrong}`,
|
|
363
|
+
borderRadius: 0,
|
|
364
|
+
color: colors.textMuted,
|
|
365
|
+
fontSize: '11px',
|
|
366
|
+
letterSpacing: '0.08em',
|
|
367
|
+
padding: '10px 12px',
|
|
368
|
+
cursor: 'pointer',
|
|
369
|
+
width: '100%',
|
|
370
|
+
fontFamily: mono,
|
|
371
|
+
textTransform: 'uppercase',
|
|
372
|
+
}, children: ["+ ", addLabel] })), hint && (0, jsx_runtime_1.jsx)("p", { style: { margin: '10px 0 0', fontSize: '12px', color: colors.textSubtle }, children: hint })] }));
|
|
373
|
+
}
|
|
374
|
+
function ReviewStep({ form }) {
|
|
375
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: '14px', fontSize: '13px' }, children: [(0, jsx_runtime_1.jsx)(ReviewRow, { label: "Site", value: form.siteName }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Audiences", value: form.audiences.filter((a) => a.segment).map((a) => a.segment).join(', ') }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Objectives", value: form.objectives.filter((o) => o.objective).map((o) => o.objective).join(' · ') }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Conversions", value: form.conversionEvents.map((e) => e.eventName).filter(Boolean).join(', ') || '—' }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Voice", value: form.brandVoice, multiline: true }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Cadence", value: form.cadence, capitalize: true }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Digest to", value: form.digestRecipients.map((r) => r.email).filter(Boolean).join(', ') }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Competitors", value: form.competitors.map((c) => c.url).filter(Boolean).join(', ') || '—' }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "Guardrails", value: form.guardrails.map((g) => g.rule).filter(Boolean).join(' · ') || '—' }), (0, jsx_runtime_1.jsx)(ReviewRow, { label: "GA4 property", value: form.gaConnectionVerifiedAt ? `${form.ga4PropertyId} ✓ verified` : form.ga4PropertyId || '— not set' })] }));
|
|
376
|
+
}
|
|
377
|
+
function ReviewRow({ label, value, multiline, capitalize }) {
|
|
378
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'grid', gridTemplateColumns: '110px 1fr', gap: '12px', alignItems: multiline ? 'flex-start' : 'center' }, children: [(0, jsx_runtime_1.jsx)("span", { style: { color: colors.textSubtle, fontSize: '10px', textTransform: 'uppercase', letterSpacing: '0.15em', fontWeight: 700, fontFamily: mono }, children: label }), (0, jsx_runtime_1.jsx)("span", { style: { color: colors.text, lineHeight: 1.55, textTransform: capitalize ? 'capitalize' : 'none', fontSize: '13px', fontFamily: mono }, children: value || '—' })] }));
|
|
379
|
+
}
|
|
380
|
+
const inputStyle = {
|
|
381
|
+
width: '100%',
|
|
382
|
+
border: `1px solid ${colors.border}`,
|
|
383
|
+
borderRadius: 0,
|
|
384
|
+
padding: '10px 12px',
|
|
385
|
+
fontSize: '13px',
|
|
386
|
+
color: colors.text,
|
|
387
|
+
background: '#0a0a0a',
|
|
388
|
+
boxSizing: 'border-box',
|
|
389
|
+
outline: 'none',
|
|
390
|
+
fontFamily: mono,
|
|
391
|
+
};
|
|
392
|
+
function primaryButtonStyle(disabled) {
|
|
393
|
+
return {
|
|
394
|
+
background: disabled ? colors.borderStrong : colors.accent,
|
|
395
|
+
color: disabled ? colors.textSubtle : colors.accentText,
|
|
396
|
+
border: 'none',
|
|
397
|
+
borderRadius: 0,
|
|
398
|
+
padding: '10px 20px',
|
|
399
|
+
fontSize: '11px',
|
|
400
|
+
fontWeight: 700,
|
|
401
|
+
letterSpacing: '0.1em',
|
|
402
|
+
fontFamily: mono,
|
|
403
|
+
cursor: disabled ? 'not-allowed' : 'pointer',
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
//# sourceMappingURL=OnboardingFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnboardingFlow.js","sourceRoot":"","sources":["../../src/components/OnboardingFlow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { AuditPanel } from './AuditPanel.js';
|
|
2
|
+
export { OnboardingFlow } from './OnboardingFlow.js';
|
|
3
|
+
export { AnalyticsPanel } from './AnalyticsPanel.js';
|
|
4
|
+
export { FreshnessPanel } from './FreshnessPanel.js';
|
|
5
|
+
export { AuditsPanel } from './AuditsPanel.js';
|
|
6
|
+
export { DigestPanel } from './DigestPanel.js';
|
|
7
|
+
export { InkGradeCell } from './InkGradeCell.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InkGradeCell = exports.DigestPanel = exports.AuditsPanel = exports.FreshnessPanel = exports.AnalyticsPanel = exports.OnboardingFlow = exports.AuditPanel = void 0;
|
|
4
|
+
var AuditPanel_js_1 = require("./AuditPanel.js");
|
|
5
|
+
Object.defineProperty(exports, "AuditPanel", { enumerable: true, get: function () { return AuditPanel_js_1.AuditPanel; } });
|
|
6
|
+
var OnboardingFlow_js_1 = require("./OnboardingFlow.js");
|
|
7
|
+
Object.defineProperty(exports, "OnboardingFlow", { enumerable: true, get: function () { return OnboardingFlow_js_1.OnboardingFlow; } });
|
|
8
|
+
var AnalyticsPanel_js_1 = require("./AnalyticsPanel.js");
|
|
9
|
+
Object.defineProperty(exports, "AnalyticsPanel", { enumerable: true, get: function () { return AnalyticsPanel_js_1.AnalyticsPanel; } });
|
|
10
|
+
var FreshnessPanel_js_1 = require("./FreshnessPanel.js");
|
|
11
|
+
Object.defineProperty(exports, "FreshnessPanel", { enumerable: true, get: function () { return FreshnessPanel_js_1.FreshnessPanel; } });
|
|
12
|
+
var AuditsPanel_js_1 = require("./AuditsPanel.js");
|
|
13
|
+
Object.defineProperty(exports, "AuditsPanel", { enumerable: true, get: function () { return AuditsPanel_js_1.AuditsPanel; } });
|
|
14
|
+
var DigestPanel_js_1 = require("./DigestPanel.js");
|
|
15
|
+
Object.defineProperty(exports, "DigestPanel", { enumerable: true, get: function () { return DigestPanel_js_1.DigestPanel; } });
|
|
16
|
+
var InkGradeCell_js_1 = require("./InkGradeCell.js");
|
|
17
|
+
Object.defineProperty(exports, "InkGradeCell", { enumerable: true, get: function () { return InkGradeCell_js_1.InkGradeCell; } });
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":";;;AAAA,iDAA4C;AAAnC,2GAAA,UAAU,OAAA;AACnB,yDAAoD;AAA3C,mHAAA,cAAc,OAAA;AACvB,yDAAoD;AAA3C,mHAAA,cAAc,OAAA;AACvB,yDAAoD;AAA3C,mHAAA,cAAc,OAAA;AACvB,mDAA8C;AAArC,6GAAA,WAAW,OAAA;AACpB,mDAA8C;AAArC,6GAAA,WAAW,OAAA;AACpB,qDAAgD;AAAvC,+GAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PayloadHandler } from 'payload';
|
|
2
|
+
type Options = {
|
|
3
|
+
serviceUrl: string;
|
|
4
|
+
apiKey: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function makeRealtimeHandler(options: Options): PayloadHandler;
|
|
7
|
+
export declare function makeAnalyticsHandler(options: Options): PayloadHandler;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/endpoints/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAQD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAsBpE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAyCrE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeRealtimeHandler = makeRealtimeHandler;
|
|
4
|
+
exports.makeAnalyticsHandler = makeAnalyticsHandler;
|
|
5
|
+
async function getPropertyId(payload) {
|
|
6
|
+
const r = await payload.find({ collection: 'ink-onboarding-profile', limit: 1, depth: 0 });
|
|
7
|
+
const profile = r.docs[0];
|
|
8
|
+
return profile?.ga4PropertyId ?? process.env.INK_GA4_PROPERTY_ID ?? null;
|
|
9
|
+
}
|
|
10
|
+
function makeRealtimeHandler(options) {
|
|
11
|
+
return async (req) => {
|
|
12
|
+
const propertyId = await getPropertyId(req.payload);
|
|
13
|
+
if (!propertyId) {
|
|
14
|
+
return Response.json({ error: 'No GA4 property ID configured.' }, { status: 400 });
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const res = await fetch(`${options.serviceUrl}/v1/analytics/realtime`, {
|
|
18
|
+
method: 'POST',
|
|
19
|
+
headers: { 'Content-Type': 'application/json', 'x-api-key': options.apiKey },
|
|
20
|
+
body: JSON.stringify({ propertyId }),
|
|
21
|
+
});
|
|
22
|
+
const data = await res.json();
|
|
23
|
+
if (!res.ok)
|
|
24
|
+
return Response.json(data, { status: res.status });
|
|
25
|
+
return Response.json(data);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
return Response.json({ error: err instanceof Error ? err.message : 'Realtime call failed' }, { status: 500 });
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function makeAnalyticsHandler(options) {
|
|
33
|
+
return async (req) => {
|
|
34
|
+
const { payload } = req;
|
|
35
|
+
const profileResult = await payload.find({
|
|
36
|
+
collection: 'ink-onboarding-profile',
|
|
37
|
+
limit: 1,
|
|
38
|
+
depth: 0,
|
|
39
|
+
});
|
|
40
|
+
const profile = profileResult.docs[0];
|
|
41
|
+
const propertyId = profile?.ga4PropertyId ?? process.env.INK_GA4_PROPERTY_ID;
|
|
42
|
+
if (!propertyId) {
|
|
43
|
+
return Response.json({ error: 'No GA4 property ID configured. Add it in INK → Onboarding Profile.' }, { status: 400 });
|
|
44
|
+
}
|
|
45
|
+
const url = new URL(req.url ?? 'http://localhost');
|
|
46
|
+
const days = Number(url.searchParams.get('days') ?? '7');
|
|
47
|
+
try {
|
|
48
|
+
const res = await fetch(`${options.serviceUrl}/v1/analytics/summary`, {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers: {
|
|
51
|
+
'Content-Type': 'application/json',
|
|
52
|
+
'x-api-key': options.apiKey,
|
|
53
|
+
},
|
|
54
|
+
body: JSON.stringify({ propertyId, days }),
|
|
55
|
+
});
|
|
56
|
+
const data = await res.json();
|
|
57
|
+
if (!res.ok) {
|
|
58
|
+
return Response.json(data, { status: res.status });
|
|
59
|
+
}
|
|
60
|
+
return Response.json(data);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const message = err instanceof Error ? err.message : 'Analytics call failed';
|
|
64
|
+
return Response.json({ error: message }, { status: 500 });
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/endpoints/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PayloadHandler } from 'payload';
|
|
2
|
+
import type { AuditTarget } from '../types.js';
|
|
3
|
+
type Options = {
|
|
4
|
+
auditTargets: AuditTarget[];
|
|
5
|
+
type: 'seo' | 'freshness';
|
|
6
|
+
};
|
|
7
|
+
export declare function makeAuditChangesHandler(options: Options): PayloadHandler;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=auditChanges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auditChanges.d.ts","sourceRoot":"","sources":["../../src/endpoints/auditChanges.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,KAAK,OAAO,GAAG;IACb,YAAY,EAAE,WAAW,EAAE,CAAA;IAC3B,IAAI,EAAE,KAAK,GAAG,WAAW,CAAA;CAC1B,CAAA;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAqDxE"}
|