@ucptools/validator 1.0.1 → 1.2.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.
- package/dist/auth/config.d.ts +20 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +114 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +17 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +45 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +170 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/service.d.ts +80 -0
- package/dist/auth/service.d.ts.map +1 -0
- package/dist/auth/service.js +298 -0
- package/dist/auth/service.js.map +1 -0
- package/dist/cli/index.js +96 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mock-server.d.ts +20 -0
- package/dist/cli/mock-server.d.ts.map +1 -0
- package/dist/cli/mock-server.js +261 -0
- package/dist/cli/mock-server.js.map +1 -0
- package/dist/db/index.d.ts +8 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +22 -5
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema.d.ts +3570 -128
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +377 -17
- package/dist/db/schema.js.map +1 -1
- package/dist/db/utils.d.ts +252 -0
- package/dist/db/utils.d.ts.map +1 -0
- package/dist/db/utils.js +295 -0
- package/dist/db/utils.js.map +1 -0
- package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -1
- package/dist/feed-analyzer/feed-analyzer.js +218 -4
- package/dist/feed-analyzer/feed-analyzer.js.map +1 -1
- package/dist/feed-analyzer/types.d.ts +82 -1
- package/dist/feed-analyzer/types.d.ts.map +1 -1
- package/dist/feed-analyzer/types.js +13 -0
- package/dist/feed-analyzer/types.js.map +1 -1
- package/dist/generator/profile-builder.d.ts.map +1 -1
- package/dist/generator/profile-builder.js +158 -115
- package/dist/generator/profile-builder.js.map +1 -1
- package/dist/lib/analytics.d.ts +349 -0
- package/dist/lib/analytics.d.ts.map +1 -0
- package/dist/lib/analytics.js +198 -0
- package/dist/lib/analytics.js.map +1 -0
- package/dist/security/security-scanner.d.ts.map +1 -1
- package/dist/security/security-scanner.js +130 -2
- package/dist/security/security-scanner.js.map +1 -1
- package/dist/security/types.d.ts +32 -0
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/types.js.map +1 -1
- package/dist/services/analytics.d.ts +114 -0
- package/dist/services/analytics.d.ts.map +1 -0
- package/dist/services/analytics.js +862 -0
- package/dist/services/analytics.js.map +1 -0
- package/dist/services/badge.d.ts +31 -0
- package/dist/services/badge.d.ts.map +1 -0
- package/dist/services/badge.js +152 -0
- package/dist/services/badge.js.map +1 -0
- package/dist/services/cron.d.ts +127 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +693 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/directory.d.ts +2 -0
- package/dist/services/directory.d.ts.map +1 -1
- package/dist/services/directory.js +45 -27
- package/dist/services/directory.js.map +1 -1
- package/dist/services/email.d.ts +127 -0
- package/dist/services/email.d.ts.map +1 -0
- package/dist/services/email.js +876 -0
- package/dist/services/email.js.map +1 -0
- package/dist/services/hosted-profiles.d.ts +77 -0
- package/dist/services/hosted-profiles.d.ts.map +1 -0
- package/dist/services/hosted-profiles.js +433 -0
- package/dist/services/hosted-profiles.js.map +1 -0
- package/dist/services/latency.d.ts +67 -0
- package/dist/services/latency.d.ts.map +1 -0
- package/dist/services/latency.js +274 -0
- package/dist/services/latency.js.map +1 -0
- package/dist/services/manifest-compliance.d.ts +64 -0
- package/dist/services/manifest-compliance.d.ts.map +1 -0
- package/dist/services/manifest-compliance.js +271 -0
- package/dist/services/manifest-compliance.js.map +1 -0
- package/dist/services/monitoring-diff.d.ts +31 -0
- package/dist/services/monitoring-diff.d.ts.map +1 -0
- package/dist/services/monitoring-diff.js +189 -0
- package/dist/services/monitoring-diff.js.map +1 -0
- package/dist/services/notifications.d.ts +46 -0
- package/dist/services/notifications.d.ts.map +1 -0
- package/dist/services/notifications.js +88 -0
- package/dist/services/notifications.js.map +1 -0
- package/dist/services/posthog.d.ts +43 -0
- package/dist/services/posthog.d.ts.map +1 -0
- package/dist/services/posthog.js +110 -0
- package/dist/services/posthog.js.map +1 -0
- package/dist/services/stripe.d.ts +93 -0
- package/dist/services/stripe.d.ts.map +1 -0
- package/dist/services/stripe.js +490 -0
- package/dist/services/stripe.js.map +1 -0
- package/dist/services/validation-history.d.ts +99 -0
- package/dist/services/validation-history.d.ts.map +1 -0
- package/dist/services/validation-history.js +344 -0
- package/dist/services/validation-history.js.map +1 -0
- package/dist/services/validation-logging.d.ts +103 -0
- package/dist/services/validation-logging.d.ts.map +1 -0
- package/dist/services/validation-logging.js +210 -0
- package/dist/services/validation-logging.js.map +1 -0
- package/dist/services/validation.d.ts +119 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +1185 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/simulator/agent-simulator.d.ts.map +1 -1
- package/dist/simulator/agent-simulator.js +229 -9
- package/dist/simulator/agent-simulator.js.map +1 -1
- package/dist/simulator/types.d.ts +26 -0
- package/dist/simulator/types.d.ts.map +1 -1
- package/dist/simulator/types.js.map +1 -1
- package/dist/types/acp-validation.d.ts +87 -0
- package/dist/types/acp-validation.d.ts.map +1 -0
- package/dist/types/acp-validation.js +40 -0
- package/dist/types/acp-validation.js.map +1 -0
- package/dist/types/analytics.d.ts +182 -0
- package/dist/types/analytics.d.ts.map +1 -0
- package/dist/types/analytics.js +7 -0
- package/dist/types/analytics.js.map +1 -0
- package/dist/types/generator.d.ts +4 -0
- package/dist/types/generator.d.ts.map +1 -1
- package/dist/types/ucp-profile.d.ts +32 -2
- package/dist/types/ucp-profile.d.ts.map +1 -1
- package/dist/types/ucp-profile.js +31 -1
- package/dist/types/ucp-profile.js.map +1 -1
- package/dist/types/validation.d.ts +14 -0
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +19 -0
- package/dist/types/validation.js.map +1 -1
- package/dist/validator/acp/index.d.ts +31 -0
- package/dist/validator/acp/index.d.ts.map +1 -0
- package/dist/validator/acp/index.js +574 -0
- package/dist/validator/acp/index.js.map +1 -0
- package/dist/validator/network-validator.d.ts.map +1 -1
- package/dist/validator/network-validator.js +23 -13
- package/dist/validator/network-validator.js.map +1 -1
- package/dist/validator/rules-validator.d.ts +8 -0
- package/dist/validator/rules-validator.d.ts.map +1 -1
- package/dist/validator/rules-validator.js +159 -43
- package/dist/validator/rules-validator.js.map +1 -1
- package/dist/validator/structural-validator.d.ts.map +1 -1
- package/dist/validator/structural-validator.js +283 -53
- package/dist/validator/structural-validator.js.map +1 -1
- package/dist/validator/utils.d.ts +62 -0
- package/dist/validator/utils.d.ts.map +1 -0
- package/dist/validator/utils.js +151 -0
- package/dist/validator/utils.js.map +1 -0
- package/package.json +45 -12
- package/.claude/settings.local.json +0 -60
- package/.vercel/README.txt +0 -11
- package/.vercel/project.json +0 -1
- package/publish-output.txt +0 -0
- package/tsconfig.json +0 -20
|
@@ -16,7 +16,7 @@ async function buildProfile(input) {
|
|
|
16
16
|
// Build services
|
|
17
17
|
const services = buildServices(input.transport, ucpVersion);
|
|
18
18
|
// Build capabilities
|
|
19
|
-
const capabilities = buildCapabilities(input.capabilities, ucpVersion);
|
|
19
|
+
const capabilities = buildCapabilities(input.capabilities, ucpVersion, input.merchant.primaryDomain);
|
|
20
20
|
// Build the UCP object
|
|
21
21
|
const ucpObject = {
|
|
22
22
|
version: ucpVersion,
|
|
@@ -27,6 +27,7 @@ async function buildProfile(input) {
|
|
|
27
27
|
const profile = {
|
|
28
28
|
ucp: ucpObject,
|
|
29
29
|
};
|
|
30
|
+
// Identity Linking is added as a capability (not profile root) - handled in buildCapabilities()
|
|
30
31
|
// Handle signing keys if Order capability is enabled
|
|
31
32
|
let signingKeyPair;
|
|
32
33
|
if (input.capabilities.order) {
|
|
@@ -95,7 +96,7 @@ function buildServices(transport, ucpVersion) {
|
|
|
95
96
|
/**
|
|
96
97
|
* Build capabilities array based on selection
|
|
97
98
|
*/
|
|
98
|
-
function buildCapabilities(selection, ucpVersion) {
|
|
99
|
+
function buildCapabilities(selection, ucpVersion, merchantDomain) {
|
|
99
100
|
const capabilities = [];
|
|
100
101
|
// Checkout capability (default ON)
|
|
101
102
|
if (selection.checkout !== false) {
|
|
@@ -134,6 +135,48 @@ function buildCapabilities(selection, ucpVersion) {
|
|
|
134
135
|
schema: ucp_profile_js_1.UCP_DEFAULTS.DISCOUNT_SCHEMA,
|
|
135
136
|
});
|
|
136
137
|
}
|
|
138
|
+
// Cart capability (draft)
|
|
139
|
+
if (selection.cart) {
|
|
140
|
+
capabilities.push({
|
|
141
|
+
name: ucp_profile_js_1.KNOWN_CAPABILITIES.CART,
|
|
142
|
+
version: ucpVersion,
|
|
143
|
+
spec: ucp_profile_js_1.UCP_DEFAULTS.CART_SPEC,
|
|
144
|
+
schema: ucp_profile_js_1.UCP_DEFAULTS.CART_SCHEMA,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// Catalog Search capability (draft)
|
|
148
|
+
if (selection.catalogSearch) {
|
|
149
|
+
capabilities.push({
|
|
150
|
+
name: ucp_profile_js_1.KNOWN_CAPABILITIES.CATALOG_SEARCH,
|
|
151
|
+
version: ucpVersion,
|
|
152
|
+
spec: ucp_profile_js_1.UCP_DEFAULTS.CATALOG_SPEC,
|
|
153
|
+
schema: ucp_profile_js_1.UCP_DEFAULTS.CATALOG_SEARCH_SCHEMA,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
// Catalog Lookup capability (draft)
|
|
157
|
+
if (selection.catalogLookup) {
|
|
158
|
+
capabilities.push({
|
|
159
|
+
name: ucp_profile_js_1.KNOWN_CAPABILITIES.CATALOG_LOOKUP,
|
|
160
|
+
version: ucpVersion,
|
|
161
|
+
spec: ucp_profile_js_1.UCP_DEFAULTS.CATALOG_SPEC,
|
|
162
|
+
schema: ucp_profile_js_1.UCP_DEFAULTS.CATALOG_LOOKUP_SCHEMA,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// Identity Linking capability (stable, dev.ucp.common.identity_linking)
|
|
166
|
+
if (selection.identityLinking) {
|
|
167
|
+
capabilities.push({
|
|
168
|
+
name: ucp_profile_js_1.KNOWN_CAPABILITIES.IDENTITY_LINKING,
|
|
169
|
+
version: ucpVersion,
|
|
170
|
+
spec: ucp_profile_js_1.UCP_DEFAULTS.IDENTITY_LINKING_SPEC,
|
|
171
|
+
schema: ucp_profile_js_1.UCP_DEFAULTS.IDENTITY_LINKING_SCHEMA,
|
|
172
|
+
config: {
|
|
173
|
+
supported_mechanisms: [{
|
|
174
|
+
type: 'oauth2',
|
|
175
|
+
issuer: `https://${merchantDomain || 'example.com'}`,
|
|
176
|
+
}],
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
137
180
|
// Custom capabilities
|
|
138
181
|
if (selection.customCapabilities) {
|
|
139
182
|
for (const custom of selection.customCapabilities) {
|
|
@@ -192,119 +235,119 @@ function parsePublicKey(keyData) {
|
|
|
192
235
|
* Generate installation instructions markdown
|
|
193
236
|
*/
|
|
194
237
|
function generateInstallInstructions(merchantDomain, merchantId) {
|
|
195
|
-
return `# UCP Profile Installation Instructions
|
|
196
|
-
|
|
197
|
-
## Profile Location
|
|
198
|
-
|
|
199
|
-
Your UCP Business Profile must be accessible at:
|
|
200
|
-
\`\`\`
|
|
201
|
-
https://${merchantDomain}/.well-known/ucp
|
|
202
|
-
\`\`\`
|
|
203
|
-
|
|
204
|
-
## Installation Options
|
|
205
|
-
|
|
206
|
-
### Option 1: Static File (Recommended for most setups)
|
|
207
|
-
|
|
208
|
-
1. Save the \`ucp.json\` file to your web server
|
|
209
|
-
2. Configure your server to serve it at \`/.well-known/ucp\`
|
|
210
|
-
|
|
211
|
-
#### Nginx Configuration
|
|
212
|
-
\`\`\`nginx
|
|
213
|
-
location = /.well-known/ucp {
|
|
214
|
-
alias /path/to/ucp.json;
|
|
215
|
-
default_type application/json;
|
|
216
|
-
add_header Access-Control-Allow-Origin "*";
|
|
217
|
-
add_header Cache-Control "public, max-age=3600";
|
|
218
|
-
}
|
|
219
|
-
\`\`\`
|
|
220
|
-
|
|
221
|
-
#### Apache Configuration
|
|
222
|
-
\`\`\`apache
|
|
223
|
-
<Directory "/path/to/.well-known">
|
|
224
|
-
Options -Indexes
|
|
225
|
-
AllowOverride None
|
|
226
|
-
Require all granted
|
|
227
|
-
</Directory>
|
|
228
|
-
|
|
229
|
-
<Files "ucp">
|
|
230
|
-
ForceType application/json
|
|
231
|
-
Header set Access-Control-Allow-Origin "*"
|
|
232
|
-
Header set Cache-Control "public, max-age=3600"
|
|
233
|
-
</Files>
|
|
234
|
-
\`\`\`
|
|
235
|
-
|
|
236
|
-
#### Vercel (vercel.json)
|
|
237
|
-
\`\`\`json
|
|
238
|
-
{
|
|
239
|
-
"rewrites": [
|
|
240
|
-
{ "source": "/.well-known/ucp", "destination": "/ucp.json" }
|
|
241
|
-
],
|
|
242
|
-
"headers": [
|
|
243
|
-
{
|
|
244
|
-
"source": "/.well-known/ucp",
|
|
245
|
-
"headers": [
|
|
246
|
-
{ "key": "Content-Type", "value": "application/json" },
|
|
247
|
-
{ "key": "Access-Control-Allow-Origin", "value": "*" }
|
|
248
|
-
]
|
|
249
|
-
}
|
|
250
|
-
]
|
|
251
|
-
}
|
|
252
|
-
\`\`\`
|
|
253
|
-
|
|
254
|
-
#### Netlify (_redirects)
|
|
255
|
-
\`\`\`
|
|
256
|
-
/.well-known/ucp /ucp.json 200
|
|
257
|
-
\`\`\`
|
|
258
|
-
|
|
259
|
-
### Option 2: Edge Worker (Cloudflare)
|
|
260
|
-
|
|
261
|
-
This approach proxies the profile from our hosted service.
|
|
262
|
-
|
|
263
|
-
\`\`\`javascript
|
|
264
|
-
// Cloudflare Worker
|
|
265
|
-
export default {
|
|
266
|
-
async fetch(request, env) {
|
|
267
|
-
const profileUrl = 'https://profiles.ucp.tools/${merchantId}/ucp.json';
|
|
268
|
-
|
|
269
|
-
const response = await fetch(profileUrl, {
|
|
270
|
-
cf: { cacheTtl: 3600, cacheEverything: true }
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
return new Response(response.body, {
|
|
274
|
-
headers: {
|
|
275
|
-
'Content-Type': 'application/json',
|
|
276
|
-
'Access-Control-Allow-Origin': '*',
|
|
277
|
-
'Cache-Control': 'public, max-age=3600'
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
};
|
|
282
|
-
\`\`\`
|
|
283
|
-
|
|
284
|
-
Route: \`${merchantDomain}/.well-known/ucp*\`
|
|
285
|
-
|
|
286
|
-
### Option 3: Reverse Proxy (Nginx)
|
|
287
|
-
|
|
288
|
-
\`\`\`nginx
|
|
289
|
-
location = /.well-known/ucp {
|
|
290
|
-
proxy_pass https://profiles.ucp.tools/${merchantId}/ucp.json;
|
|
291
|
-
proxy_set_header Host profiles.ucp.tools;
|
|
292
|
-
proxy_cache_valid 200 1h;
|
|
293
|
-
add_header Access-Control-Allow-Origin "*";
|
|
294
|
-
}
|
|
295
|
-
\`\`\`
|
|
296
|
-
|
|
297
|
-
## Verification
|
|
298
|
-
|
|
299
|
-
After installation, verify your profile:
|
|
300
|
-
|
|
301
|
-
1. Open: https://${merchantDomain}/.well-known/ucp
|
|
302
|
-
2. Confirm JSON response with correct structure
|
|
303
|
-
3. Run validation: \`ucp-validate --remote https://${merchantDomain}\`
|
|
304
|
-
|
|
305
|
-
## Support
|
|
306
|
-
|
|
307
|
-
For help, visit: https://ucp.tools
|
|
238
|
+
return `# UCP Profile Installation Instructions
|
|
239
|
+
|
|
240
|
+
## Profile Location
|
|
241
|
+
|
|
242
|
+
Your UCP Business Profile must be accessible at:
|
|
243
|
+
\`\`\`
|
|
244
|
+
https://${merchantDomain}/.well-known/ucp
|
|
245
|
+
\`\`\`
|
|
246
|
+
|
|
247
|
+
## Installation Options
|
|
248
|
+
|
|
249
|
+
### Option 1: Static File (Recommended for most setups)
|
|
250
|
+
|
|
251
|
+
1. Save the \`ucp.json\` file to your web server
|
|
252
|
+
2. Configure your server to serve it at \`/.well-known/ucp\`
|
|
253
|
+
|
|
254
|
+
#### Nginx Configuration
|
|
255
|
+
\`\`\`nginx
|
|
256
|
+
location = /.well-known/ucp {
|
|
257
|
+
alias /path/to/ucp.json;
|
|
258
|
+
default_type application/json;
|
|
259
|
+
add_header Access-Control-Allow-Origin "*";
|
|
260
|
+
add_header Cache-Control "public, max-age=3600";
|
|
261
|
+
}
|
|
262
|
+
\`\`\`
|
|
263
|
+
|
|
264
|
+
#### Apache Configuration
|
|
265
|
+
\`\`\`apache
|
|
266
|
+
<Directory "/path/to/.well-known">
|
|
267
|
+
Options -Indexes
|
|
268
|
+
AllowOverride None
|
|
269
|
+
Require all granted
|
|
270
|
+
</Directory>
|
|
271
|
+
|
|
272
|
+
<Files "ucp">
|
|
273
|
+
ForceType application/json
|
|
274
|
+
Header set Access-Control-Allow-Origin "*"
|
|
275
|
+
Header set Cache-Control "public, max-age=3600"
|
|
276
|
+
</Files>
|
|
277
|
+
\`\`\`
|
|
278
|
+
|
|
279
|
+
#### Vercel (vercel.json)
|
|
280
|
+
\`\`\`json
|
|
281
|
+
{
|
|
282
|
+
"rewrites": [
|
|
283
|
+
{ "source": "/.well-known/ucp", "destination": "/ucp.json" }
|
|
284
|
+
],
|
|
285
|
+
"headers": [
|
|
286
|
+
{
|
|
287
|
+
"source": "/.well-known/ucp",
|
|
288
|
+
"headers": [
|
|
289
|
+
{ "key": "Content-Type", "value": "application/json" },
|
|
290
|
+
{ "key": "Access-Control-Allow-Origin", "value": "*" }
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
}
|
|
295
|
+
\`\`\`
|
|
296
|
+
|
|
297
|
+
#### Netlify (_redirects)
|
|
298
|
+
\`\`\`
|
|
299
|
+
/.well-known/ucp /ucp.json 200
|
|
300
|
+
\`\`\`
|
|
301
|
+
|
|
302
|
+
### Option 2: Edge Worker (Cloudflare)
|
|
303
|
+
|
|
304
|
+
This approach proxies the profile from our hosted service.
|
|
305
|
+
|
|
306
|
+
\`\`\`javascript
|
|
307
|
+
// Cloudflare Worker
|
|
308
|
+
export default {
|
|
309
|
+
async fetch(request, env) {
|
|
310
|
+
const profileUrl = 'https://profiles.ucp.tools/${merchantId}/ucp.json';
|
|
311
|
+
|
|
312
|
+
const response = await fetch(profileUrl, {
|
|
313
|
+
cf: { cacheTtl: 3600, cacheEverything: true }
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
return new Response(response.body, {
|
|
317
|
+
headers: {
|
|
318
|
+
'Content-Type': 'application/json',
|
|
319
|
+
'Access-Control-Allow-Origin': '*',
|
|
320
|
+
'Cache-Control': 'public, max-age=3600'
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
};
|
|
325
|
+
\`\`\`
|
|
326
|
+
|
|
327
|
+
Route: \`${merchantDomain}/.well-known/ucp*\`
|
|
328
|
+
|
|
329
|
+
### Option 3: Reverse Proxy (Nginx)
|
|
330
|
+
|
|
331
|
+
\`\`\`nginx
|
|
332
|
+
location = /.well-known/ucp {
|
|
333
|
+
proxy_pass https://profiles.ucp.tools/${merchantId}/ucp.json;
|
|
334
|
+
proxy_set_header Host profiles.ucp.tools;
|
|
335
|
+
proxy_cache_valid 200 1h;
|
|
336
|
+
add_header Access-Control-Allow-Origin "*";
|
|
337
|
+
}
|
|
338
|
+
\`\`\`
|
|
339
|
+
|
|
340
|
+
## Verification
|
|
341
|
+
|
|
342
|
+
After installation, verify your profile:
|
|
343
|
+
|
|
344
|
+
1. Open: https://${merchantDomain}/.well-known/ucp
|
|
345
|
+
2. Confirm JSON response with correct structure
|
|
346
|
+
3. Run validation: \`ucp-validate --remote https://${merchantDomain}\`
|
|
347
|
+
|
|
348
|
+
## Support
|
|
349
|
+
|
|
350
|
+
For help, visit: https://ucp.tools
|
|
308
351
|
`;
|
|
309
352
|
}
|
|
310
353
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile-builder.js","sourceRoot":"","sources":["../../src/generator/profile-builder.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA2BH,
|
|
1
|
+
{"version":3,"file":"profile-builder.js","sourceRoot":"","sources":["../../src/generator/profile-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics Utility
|
|
3
|
+
*
|
|
4
|
+
* Unified analytics interface for tracking events across:
|
|
5
|
+
* - Google Analytics 4 (GA4)
|
|
6
|
+
* - PostHog
|
|
7
|
+
*
|
|
8
|
+
* This ensures consistent event tracking and makes it easy to
|
|
9
|
+
* add or remove analytics platforms in the future.
|
|
10
|
+
*/
|
|
11
|
+
export interface ProfileValidatedEvent {
|
|
12
|
+
event: 'profile_validated';
|
|
13
|
+
url?: string;
|
|
14
|
+
validationLevel?: 'quick' | 'full' | 'remote' | 'sdk';
|
|
15
|
+
issuesFound?: number;
|
|
16
|
+
severity?: 'error' | 'warning' | 'info';
|
|
17
|
+
}
|
|
18
|
+
export interface ProfileGeneratedEvent {
|
|
19
|
+
event: 'profile_generated';
|
|
20
|
+
profileType?: 'full' | 'minimal';
|
|
21
|
+
platform?: string;
|
|
22
|
+
includesSigningKeys?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface SimulatorRunEvent {
|
|
25
|
+
event: 'simulator_run';
|
|
26
|
+
url?: string;
|
|
27
|
+
success?: boolean;
|
|
28
|
+
stepsCompleted?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface SecurityScanEvent {
|
|
31
|
+
event: 'security_scan';
|
|
32
|
+
url?: string;
|
|
33
|
+
vulnerabilitiesFound?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface PdfDownloadedEvent {
|
|
36
|
+
event: 'pdf_downloaded';
|
|
37
|
+
reportType?: 'validation' | 'security' | 'benchmark';
|
|
38
|
+
}
|
|
39
|
+
export interface BadgeEmbeddedEvent {
|
|
40
|
+
event: 'badge_embedded';
|
|
41
|
+
badgeType?: 'ucp-compliant' | 'security-verified';
|
|
42
|
+
}
|
|
43
|
+
export interface PlatformSelectedEvent {
|
|
44
|
+
event: 'platform_selected';
|
|
45
|
+
platform: string;
|
|
46
|
+
}
|
|
47
|
+
export interface SubscriptionViewedEvent {
|
|
48
|
+
event: 'subscription_viewed';
|
|
49
|
+
plan?: 'free' | 'starter' | 'pro' | 'enterprise' | 'all';
|
|
50
|
+
}
|
|
51
|
+
export interface PricingCtaClickedEvent {
|
|
52
|
+
event: 'pricing_cta_clicked';
|
|
53
|
+
plan: string;
|
|
54
|
+
billingPeriod?: 'monthly' | 'annual';
|
|
55
|
+
}
|
|
56
|
+
export interface TrialStartedEvent {
|
|
57
|
+
event: 'trial_started';
|
|
58
|
+
method: 'email' | 'google';
|
|
59
|
+
}
|
|
60
|
+
export interface HeroFormSubmittedEvent {
|
|
61
|
+
event: 'hero_form_submitted';
|
|
62
|
+
domain: string;
|
|
63
|
+
hero_button_variant?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface SignupCompletedEvent {
|
|
66
|
+
event: 'signup_completed';
|
|
67
|
+
method: 'email' | 'google';
|
|
68
|
+
}
|
|
69
|
+
export interface SignupErrorEvent {
|
|
70
|
+
event: 'signup_error';
|
|
71
|
+
method: 'email' | 'google';
|
|
72
|
+
error: string;
|
|
73
|
+
}
|
|
74
|
+
export interface SigninCompletedEvent {
|
|
75
|
+
event: 'signin_completed';
|
|
76
|
+
method: 'email' | 'google';
|
|
77
|
+
}
|
|
78
|
+
export interface SigninErrorEvent {
|
|
79
|
+
event: 'signin_error';
|
|
80
|
+
method: 'email' | 'google';
|
|
81
|
+
error: string;
|
|
82
|
+
}
|
|
83
|
+
export interface PdfGateShownEvent {
|
|
84
|
+
event: 'pdf_gate_shown';
|
|
85
|
+
domain?: string;
|
|
86
|
+
}
|
|
87
|
+
export interface PdfGateCompletedEvent {
|
|
88
|
+
event: 'pdf_gate_completed';
|
|
89
|
+
domain?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface PdfGateBypassedEvent {
|
|
92
|
+
event: 'pdf_gate_bypassed';
|
|
93
|
+
reason: 'authenticated' | 'stored_email';
|
|
94
|
+
}
|
|
95
|
+
export interface FeedAnalyzedEvent {
|
|
96
|
+
event: 'feed_analyzed';
|
|
97
|
+
url?: string;
|
|
98
|
+
productsFound?: number;
|
|
99
|
+
overallScore?: number;
|
|
100
|
+
grade?: string;
|
|
101
|
+
}
|
|
102
|
+
export interface SchemaGeneratedEvent {
|
|
103
|
+
event: 'schema_generated';
|
|
104
|
+
returnTemplate?: string;
|
|
105
|
+
shippingTemplate?: string;
|
|
106
|
+
}
|
|
107
|
+
export interface ComplianceGeneratedEvent {
|
|
108
|
+
event: 'compliance_generated';
|
|
109
|
+
regions?: string[];
|
|
110
|
+
platforms?: string[];
|
|
111
|
+
lawfulBasis?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface AcpCheckEvent {
|
|
114
|
+
event: 'acp_check';
|
|
115
|
+
url?: string;
|
|
116
|
+
score?: number;
|
|
117
|
+
grade?: string;
|
|
118
|
+
platformDetected?: string;
|
|
119
|
+
stripeDetected?: boolean;
|
|
120
|
+
}
|
|
121
|
+
export interface TabSwitchedEvent {
|
|
122
|
+
event: 'tab_switched';
|
|
123
|
+
tab: string;
|
|
124
|
+
previousTab?: string;
|
|
125
|
+
}
|
|
126
|
+
export interface ToolDiscoveredEvent {
|
|
127
|
+
event: 'tool_discovered';
|
|
128
|
+
tool: string;
|
|
129
|
+
click_source: 'results_fix' | 'go_deeper' | 'bottom_section' | 'header_nav';
|
|
130
|
+
}
|
|
131
|
+
export interface TrialCtaClickedEvent {
|
|
132
|
+
event: 'trial_cta_clicked';
|
|
133
|
+
click_source: 'results_dashboard' | 'tool_page';
|
|
134
|
+
score?: number;
|
|
135
|
+
domain?: string;
|
|
136
|
+
}
|
|
137
|
+
export interface PaywallViewedEvent {
|
|
138
|
+
event: 'paywall_viewed';
|
|
139
|
+
page: string;
|
|
140
|
+
type: 'blurred' | 'lock';
|
|
141
|
+
subscription_tier?: string;
|
|
142
|
+
subscription_status?: string;
|
|
143
|
+
}
|
|
144
|
+
export interface PaywallCtaClickedEvent {
|
|
145
|
+
event: 'paywall_cta_clicked';
|
|
146
|
+
page: string;
|
|
147
|
+
plan?: 'monthly' | 'annual';
|
|
148
|
+
}
|
|
149
|
+
export interface DomainAddedEvent {
|
|
150
|
+
event: 'domain_added';
|
|
151
|
+
domain: string;
|
|
152
|
+
}
|
|
153
|
+
export interface DomainRemovedEvent {
|
|
154
|
+
event: 'domain_removed';
|
|
155
|
+
domain: string;
|
|
156
|
+
}
|
|
157
|
+
export interface DomainValidatedEvent {
|
|
158
|
+
event: 'domain_validated';
|
|
159
|
+
domain: string;
|
|
160
|
+
click_source: 'dashboard' | 'domain_detail';
|
|
161
|
+
score?: number;
|
|
162
|
+
grade?: string;
|
|
163
|
+
}
|
|
164
|
+
export interface DomainSettingsSavedEvent {
|
|
165
|
+
event: 'domain_settings_saved';
|
|
166
|
+
domain: string;
|
|
167
|
+
monitoring_frequency?: string;
|
|
168
|
+
webhook_enabled?: boolean;
|
|
169
|
+
alerts_enabled?: boolean;
|
|
170
|
+
}
|
|
171
|
+
export interface AnalyticsViewedEvent {
|
|
172
|
+
event: 'analytics_viewed';
|
|
173
|
+
domain?: string;
|
|
174
|
+
time_range?: string;
|
|
175
|
+
}
|
|
176
|
+
export interface AnalyticsKeyCreatedEvent {
|
|
177
|
+
event: 'analytics_key_created';
|
|
178
|
+
domain?: string;
|
|
179
|
+
}
|
|
180
|
+
export interface AnalyticsKeyCopiedEvent {
|
|
181
|
+
event: 'analytics_key_copied';
|
|
182
|
+
}
|
|
183
|
+
export interface AnalyticsCodeCopiedEvent {
|
|
184
|
+
event: 'analytics_code_copied';
|
|
185
|
+
platform?: string;
|
|
186
|
+
}
|
|
187
|
+
export interface AnalyticsInstallVerifiedEvent {
|
|
188
|
+
event: 'analytics_install_verified';
|
|
189
|
+
domain?: string;
|
|
190
|
+
success: boolean;
|
|
191
|
+
}
|
|
192
|
+
export interface SimulatorOpenedEvent {
|
|
193
|
+
event: 'simulator_opened';
|
|
194
|
+
domain?: string;
|
|
195
|
+
}
|
|
196
|
+
export interface SimulatorMessageSentEvent {
|
|
197
|
+
event: 'simulator_message_sent';
|
|
198
|
+
agent_type?: string;
|
|
199
|
+
}
|
|
200
|
+
export interface HostingSetupStartedEvent {
|
|
201
|
+
event: 'hosting_setup_started';
|
|
202
|
+
domain: string;
|
|
203
|
+
}
|
|
204
|
+
export interface HostingProfileCreatedEvent {
|
|
205
|
+
event: 'hosting_profile_created';
|
|
206
|
+
domain: string;
|
|
207
|
+
mode?: 'generate' | 'paste';
|
|
208
|
+
}
|
|
209
|
+
export interface HostingDomainVerifiedEvent {
|
|
210
|
+
event: 'hosting_domain_verified';
|
|
211
|
+
domain: string;
|
|
212
|
+
success: boolean;
|
|
213
|
+
}
|
|
214
|
+
export interface HostingActivatedEvent {
|
|
215
|
+
event: 'hosting_activated';
|
|
216
|
+
domain: string;
|
|
217
|
+
}
|
|
218
|
+
export interface HostingDeactivatedEvent {
|
|
219
|
+
event: 'hosting_deactivated';
|
|
220
|
+
domain: string;
|
|
221
|
+
}
|
|
222
|
+
export interface HostingProfileDeletedEvent {
|
|
223
|
+
event: 'hosting_profile_deleted';
|
|
224
|
+
domain: string;
|
|
225
|
+
}
|
|
226
|
+
export interface HostingUrlCopiedEvent {
|
|
227
|
+
event: 'hosting_url_copied';
|
|
228
|
+
domain?: string;
|
|
229
|
+
}
|
|
230
|
+
export interface CheckoutStartedEvent {
|
|
231
|
+
event: 'checkout_started';
|
|
232
|
+
page: string;
|
|
233
|
+
plan?: 'monthly' | 'annual';
|
|
234
|
+
trial_expired?: boolean;
|
|
235
|
+
}
|
|
236
|
+
export interface CheckoutCompletedEvent {
|
|
237
|
+
event: 'checkout_completed';
|
|
238
|
+
session_id?: string;
|
|
239
|
+
}
|
|
240
|
+
export interface UpgradeClickedEvent {
|
|
241
|
+
event: 'upgrade_clicked';
|
|
242
|
+
click_source: 'subscription_page' | 'paywall' | 'banner';
|
|
243
|
+
plan?: 'monthly' | 'annual';
|
|
244
|
+
}
|
|
245
|
+
export interface SubscriptionCanceledEvent {
|
|
246
|
+
event: 'subscription_canceled';
|
|
247
|
+
}
|
|
248
|
+
export interface SubscriptionResumedEvent {
|
|
249
|
+
event: 'subscription_resumed';
|
|
250
|
+
}
|
|
251
|
+
export interface BillingManagedEvent {
|
|
252
|
+
event: 'billing_managed';
|
|
253
|
+
}
|
|
254
|
+
export interface AccountDeletedEvent {
|
|
255
|
+
event: 'account_deleted';
|
|
256
|
+
}
|
|
257
|
+
export interface BadgeCopiedEvent {
|
|
258
|
+
event: 'badge_copied';
|
|
259
|
+
domain?: string;
|
|
260
|
+
format: 'markdown' | 'html';
|
|
261
|
+
}
|
|
262
|
+
export type AnalyticsEvent = ProfileValidatedEvent | ProfileGeneratedEvent | SimulatorRunEvent | SecurityScanEvent | PdfDownloadedEvent | BadgeEmbeddedEvent | PlatformSelectedEvent | SubscriptionViewedEvent | PricingCtaClickedEvent | TrialStartedEvent | HeroFormSubmittedEvent | SignupCompletedEvent | SignupErrorEvent | SigninCompletedEvent | SigninErrorEvent | PdfGateShownEvent | PdfGateCompletedEvent | PdfGateBypassedEvent | FeedAnalyzedEvent | SchemaGeneratedEvent | ComplianceGeneratedEvent | TabSwitchedEvent | ToolDiscoveredEvent | AcpCheckEvent | TrialCtaClickedEvent | PaywallViewedEvent | PaywallCtaClickedEvent | DomainAddedEvent | DomainRemovedEvent | DomainValidatedEvent | DomainSettingsSavedEvent | AnalyticsViewedEvent | AnalyticsKeyCreatedEvent | AnalyticsKeyCopiedEvent | AnalyticsCodeCopiedEvent | AnalyticsInstallVerifiedEvent | SimulatorOpenedEvent | SimulatorMessageSentEvent | HostingSetupStartedEvent | HostingProfileCreatedEvent | HostingDomainVerifiedEvent | HostingActivatedEvent | HostingDeactivatedEvent | HostingProfileDeletedEvent | HostingUrlCopiedEvent | CheckoutStartedEvent | CheckoutCompletedEvent | UpgradeClickedEvent | SubscriptionCanceledEvent | SubscriptionResumedEvent | BillingManagedEvent | AccountDeletedEvent | BadgeCopiedEvent;
|
|
263
|
+
/**
|
|
264
|
+
* Track an event across all analytics platforms
|
|
265
|
+
*/
|
|
266
|
+
export declare function trackEvent(eventData: AnalyticsEvent): void;
|
|
267
|
+
/**
|
|
268
|
+
* Identify a user (for authenticated sessions)
|
|
269
|
+
*/
|
|
270
|
+
export declare function identifyUser(userId: string, traits?: Record<string, any>): void;
|
|
271
|
+
/**
|
|
272
|
+
* Reset user identification (for logout)
|
|
273
|
+
*/
|
|
274
|
+
export declare function resetUser(): void;
|
|
275
|
+
/**
|
|
276
|
+
* Track page view (already handled by PostHogProvider, but available for manual tracking)
|
|
277
|
+
*/
|
|
278
|
+
export declare function trackPageView(url: string): void;
|
|
279
|
+
/**
|
|
280
|
+
* Feature flag check (PostHog only)
|
|
281
|
+
*/
|
|
282
|
+
export declare function isFeatureEnabled(flagKey: string): boolean;
|
|
283
|
+
/**
|
|
284
|
+
* Get multivariate feature flag value (PostHog only)
|
|
285
|
+
*/
|
|
286
|
+
export declare function getFeatureFlagVariant(flagKey: string): string | null;
|
|
287
|
+
/**
|
|
288
|
+
* Convenience functions for common events
|
|
289
|
+
*/
|
|
290
|
+
export declare const analytics: {
|
|
291
|
+
profileValidated: (data: Omit<ProfileValidatedEvent, "event">) => void;
|
|
292
|
+
profileGenerated: (data: Omit<ProfileGeneratedEvent, "event">) => void;
|
|
293
|
+
simulatorRun: (data: Omit<SimulatorRunEvent, "event">) => void;
|
|
294
|
+
securityScan: (data: Omit<SecurityScanEvent, "event">) => void;
|
|
295
|
+
pdfDownloaded: (data: Omit<PdfDownloadedEvent, "event">) => void;
|
|
296
|
+
badgeEmbedded: (data: Omit<BadgeEmbeddedEvent, "event">) => void;
|
|
297
|
+
platformSelected: (data: Omit<PlatformSelectedEvent, "event">) => void;
|
|
298
|
+
subscriptionViewed: (data: Omit<SubscriptionViewedEvent, "event">) => void;
|
|
299
|
+
pricingCtaClicked: (data: Omit<PricingCtaClickedEvent, "event">) => void;
|
|
300
|
+
trialStarted: (data: Omit<TrialStartedEvent, "event">) => void;
|
|
301
|
+
heroFormSubmitted: (data: Omit<HeroFormSubmittedEvent, "event">) => void;
|
|
302
|
+
signupCompleted: (data: Omit<SignupCompletedEvent, "event">) => void;
|
|
303
|
+
signupError: (data: Omit<SignupErrorEvent, "event">) => void;
|
|
304
|
+
signinCompleted: (data: Omit<SigninCompletedEvent, "event">) => void;
|
|
305
|
+
signinError: (data: Omit<SigninErrorEvent, "event">) => void;
|
|
306
|
+
pdfGateShown: (data: Omit<PdfGateShownEvent, "event">) => void;
|
|
307
|
+
pdfGateCompleted: (data: Omit<PdfGateCompletedEvent, "event">) => void;
|
|
308
|
+
pdfGateBypassed: (data: Omit<PdfGateBypassedEvent, "event">) => void;
|
|
309
|
+
feedAnalyzed: (data: Omit<FeedAnalyzedEvent, "event">) => void;
|
|
310
|
+
schemaGenerated: (data: Omit<SchemaGeneratedEvent, "event">) => void;
|
|
311
|
+
complianceGenerated: (data: Omit<ComplianceGeneratedEvent, "event">) => void;
|
|
312
|
+
tabSwitched: (data: Omit<TabSwitchedEvent, "event">) => void;
|
|
313
|
+
toolDiscovered: (data: Omit<ToolDiscoveredEvent, "event">) => void;
|
|
314
|
+
acpCheck: (data: Omit<AcpCheckEvent, "event">) => void;
|
|
315
|
+
trialCtaClicked: (data: Omit<TrialCtaClickedEvent, "event">) => void;
|
|
316
|
+
paywallViewed: (data: Omit<PaywallViewedEvent, "event">) => void;
|
|
317
|
+
paywallCtaClicked: (data: Omit<PaywallCtaClickedEvent, "event">) => void;
|
|
318
|
+
domainAdded: (data: Omit<DomainAddedEvent, "event">) => void;
|
|
319
|
+
domainRemoved: (data: Omit<DomainRemovedEvent, "event">) => void;
|
|
320
|
+
domainValidated: (data: Omit<DomainValidatedEvent, "event">) => void;
|
|
321
|
+
domainSettingsSaved: (data: Omit<DomainSettingsSavedEvent, "event">) => void;
|
|
322
|
+
analyticsViewed: (data: Omit<AnalyticsViewedEvent, "event">) => void;
|
|
323
|
+
analyticsKeyCreated: (data: Omit<AnalyticsKeyCreatedEvent, "event">) => void;
|
|
324
|
+
analyticsKeyCopied: () => void;
|
|
325
|
+
analyticsCodeCopied: (data: Omit<AnalyticsCodeCopiedEvent, "event">) => void;
|
|
326
|
+
analyticsInstallVerified: (data: Omit<AnalyticsInstallVerifiedEvent, "event">) => void;
|
|
327
|
+
simulatorOpened: (data: Omit<SimulatorOpenedEvent, "event">) => void;
|
|
328
|
+
simulatorMessageSent: (data: Omit<SimulatorMessageSentEvent, "event">) => void;
|
|
329
|
+
hostingSetupStarted: (data: Omit<HostingSetupStartedEvent, "event">) => void;
|
|
330
|
+
hostingProfileCreated: (data: Omit<HostingProfileCreatedEvent, "event">) => void;
|
|
331
|
+
hostingDomainVerified: (data: Omit<HostingDomainVerifiedEvent, "event">) => void;
|
|
332
|
+
hostingActivated: (data: Omit<HostingActivatedEvent, "event">) => void;
|
|
333
|
+
hostingDeactivated: (data: Omit<HostingDeactivatedEvent, "event">) => void;
|
|
334
|
+
hostingProfileDeleted: (data: Omit<HostingProfileDeletedEvent, "event">) => void;
|
|
335
|
+
hostingUrlCopied: (data: Omit<HostingUrlCopiedEvent, "event">) => void;
|
|
336
|
+
checkoutStarted: (data: Omit<CheckoutStartedEvent, "event">) => void;
|
|
337
|
+
checkoutCompleted: (data: Omit<CheckoutCompletedEvent, "event">) => void;
|
|
338
|
+
upgradeClicked: (data: Omit<UpgradeClickedEvent, "event">) => void;
|
|
339
|
+
subscriptionCanceled: () => void;
|
|
340
|
+
subscriptionResumed: () => void;
|
|
341
|
+
billingManaged: () => void;
|
|
342
|
+
accountDeleted: () => void;
|
|
343
|
+
badgeCopied: (data: Omit<BadgeCopiedEvent, "event">) => void;
|
|
344
|
+
identify: typeof identifyUser;
|
|
345
|
+
reset: typeof resetUser;
|
|
346
|
+
pageView: typeof trackPageView;
|
|
347
|
+
isFeatureEnabled: typeof isFeatureEnabled;
|
|
348
|
+
};
|
|
349
|
+
//# sourceMappingURL=analytics.d.ts.map
|