@we8/cms 0.1.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/README.md +78 -0
- package/dist/auth/auth.d.ts +87 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.js +90 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/routes.admin.d.ts +22 -0
- package/dist/auth/routes.admin.d.ts.map +1 -0
- package/dist/auth/routes.admin.js +106 -0
- package/dist/auth/routes.admin.js.map +1 -0
- package/dist/auth/schema.d.ts +1395 -0
- package/dist/auth/schema.d.ts.map +1 -0
- package/dist/auth/schema.js +76 -0
- package/dist/auth/schema.js.map +1 -0
- package/dist/env.d.ts +64 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +48 -0
- package/dist/env.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +170 -0
- package/dist/index.js.map +1 -0
- package/dist/keys/middleware.d.ts +54 -0
- package/dist/keys/middleware.d.ts.map +1 -0
- package/dist/keys/middleware.js +84 -0
- package/dist/keys/middleware.js.map +1 -0
- package/dist/keys/routes.admin.d.ts +16 -0
- package/dist/keys/routes.admin.d.ts.map +1 -0
- package/dist/keys/routes.admin.js +34 -0
- package/dist/keys/routes.admin.js.map +1 -0
- package/dist/keys/service.d.ts +36 -0
- package/dist/keys/service.d.ts.map +1 -0
- package/dist/keys/service.js +120 -0
- package/dist/keys/service.js.map +1 -0
- package/dist/lib/bots.d.ts +24 -0
- package/dist/lib/bots.d.ts.map +1 -0
- package/dist/lib/bots.js +79 -0
- package/dist/lib/bots.js.map +1 -0
- package/dist/lib/email.d.ts +62 -0
- package/dist/lib/email.d.ts.map +1 -0
- package/dist/lib/email.js +64 -0
- package/dist/lib/email.js.map +1 -0
- package/dist/lib/errors.d.ts +12 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +23 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/notify.d.ts +20 -0
- package/dist/lib/notify.d.ts.map +1 -0
- package/dist/lib/notify.js +60 -0
- package/dist/lib/notify.js.map +1 -0
- package/dist/lib/retention.d.ts +15 -0
- package/dist/lib/retention.d.ts.map +1 -0
- package/dist/lib/retention.js +40 -0
- package/dist/lib/retention.js.map +1 -0
- package/dist/lib/sanitize.d.ts +14 -0
- package/dist/lib/sanitize.d.ts.map +1 -0
- package/dist/lib/sanitize.js +145 -0
- package/dist/lib/sanitize.js.map +1 -0
- package/dist/lib/turnstile.d.ts +7 -0
- package/dist/lib/turnstile.d.ts.map +1 -0
- package/dist/lib/turnstile.js +32 -0
- package/dist/lib/turnstile.js.map +1 -0
- package/dist/lib/validate.d.ts +11 -0
- package/dist/lib/validate.d.ts.map +1 -0
- package/dist/lib/validate.js +22 -0
- package/dist/lib/validate.js.map +1 -0
- package/dist/lib/word-count.d.ts +7 -0
- package/dist/lib/word-count.d.ts.map +1 -0
- package/dist/lib/word-count.js +14 -0
- package/dist/lib/word-count.js.map +1 -0
- package/dist/middleware/auth.d.ts +46 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +60 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/cors.d.ts +33 -0
- package/dist/middleware/cors.d.ts.map +1 -0
- package/dist/middleware/cors.js +55 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/module-gate.d.ts +11 -0
- package/dist/middleware/module-gate.d.ts.map +1 -0
- package/dist/middleware/module-gate.js +18 -0
- package/dist/middleware/module-gate.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +13 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +30 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/middleware/request-id.d.ts +8 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +11 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/modules/aeo/checks.d.ts +41 -0
- package/dist/modules/aeo/checks.d.ts.map +1 -0
- package/dist/modules/aeo/checks.js +127 -0
- package/dist/modules/aeo/checks.js.map +1 -0
- package/dist/modules/aeo/llms.d.ts +24 -0
- package/dist/modules/aeo/llms.d.ts.map +1 -0
- package/dist/modules/aeo/llms.js +92 -0
- package/dist/modules/aeo/llms.js.map +1 -0
- package/dist/modules/aeo/routes.admin.d.ts +12 -0
- package/dist/modules/aeo/routes.admin.d.ts.map +1 -0
- package/dist/modules/aeo/routes.admin.js +37 -0
- package/dist/modules/aeo/routes.admin.js.map +1 -0
- package/dist/modules/analytics/db.d.ts +24 -0
- package/dist/modules/analytics/db.d.ts.map +1 -0
- package/dist/modules/analytics/db.js +24 -0
- package/dist/modules/analytics/db.js.map +1 -0
- package/dist/modules/analytics/routes.admin.d.ts +6 -0
- package/dist/modules/analytics/routes.admin.d.ts.map +1 -0
- package/dist/modules/analytics/routes.admin.js +21 -0
- package/dist/modules/analytics/routes.admin.js.map +1 -0
- package/dist/modules/analytics/routes.public.d.ts +6 -0
- package/dist/modules/analytics/routes.public.d.ts.map +1 -0
- package/dist/modules/analytics/routes.public.js +33 -0
- package/dist/modules/analytics/routes.public.js.map +1 -0
- package/dist/modules/analytics/service.d.ts +16 -0
- package/dist/modules/analytics/service.d.ts.map +1 -0
- package/dist/modules/analytics/service.js +148 -0
- package/dist/modules/analytics/service.js.map +1 -0
- package/dist/modules/authors/routes.admin.d.ts +6 -0
- package/dist/modules/authors/routes.admin.d.ts.map +1 -0
- package/dist/modules/authors/routes.admin.js +29 -0
- package/dist/modules/authors/routes.admin.js.map +1 -0
- package/dist/modules/authors/routes.public.d.ts +6 -0
- package/dist/modules/authors/routes.public.d.ts.map +1 -0
- package/dist/modules/authors/routes.public.js +11 -0
- package/dist/modules/authors/routes.public.js.map +1 -0
- package/dist/modules/authors/service.d.ts +26 -0
- package/dist/modules/authors/service.d.ts.map +1 -0
- package/dist/modules/authors/service.js +116 -0
- package/dist/modules/authors/service.js.map +1 -0
- package/dist/modules/content/db.d.ts +127 -0
- package/dist/modules/content/db.d.ts.map +1 -0
- package/dist/modules/content/db.js +203 -0
- package/dist/modules/content/db.js.map +1 -0
- package/dist/modules/content/publish.d.ts +38 -0
- package/dist/modules/content/publish.d.ts.map +1 -0
- package/dist/modules/content/publish.js +184 -0
- package/dist/modules/content/publish.js.map +1 -0
- package/dist/modules/content/routes.admin.d.ts +8 -0
- package/dist/modules/content/routes.admin.d.ts.map +1 -0
- package/dist/modules/content/routes.admin.js +122 -0
- package/dist/modules/content/routes.admin.js.map +1 -0
- package/dist/modules/content/routes.public.d.ts +6 -0
- package/dist/modules/content/routes.public.d.ts.map +1 -0
- package/dist/modules/content/routes.public.js +56 -0
- package/dist/modules/content/routes.public.js.map +1 -0
- package/dist/modules/content/service.d.ts +137 -0
- package/dist/modules/content/service.d.ts.map +1 -0
- package/dist/modules/content/service.js +348 -0
- package/dist/modules/content/service.js.map +1 -0
- package/dist/modules/forms/db.d.ts +42 -0
- package/dist/modules/forms/db.d.ts.map +1 -0
- package/dist/modules/forms/db.js +62 -0
- package/dist/modules/forms/db.js.map +1 -0
- package/dist/modules/forms/forms-routes.admin.d.ts +6 -0
- package/dist/modules/forms/forms-routes.admin.d.ts.map +1 -0
- package/dist/modules/forms/forms-routes.admin.js +37 -0
- package/dist/modules/forms/forms-routes.admin.js.map +1 -0
- package/dist/modules/forms/forms-service.d.ts +18 -0
- package/dist/modules/forms/forms-service.d.ts.map +1 -0
- package/dist/modules/forms/forms-service.js +121 -0
- package/dist/modules/forms/forms-service.js.map +1 -0
- package/dist/modules/forms/routes.public.d.ts +6 -0
- package/dist/modules/forms/routes.public.d.ts.map +1 -0
- package/dist/modules/forms/routes.public.js +41 -0
- package/dist/modules/forms/routes.public.js.map +1 -0
- package/dist/modules/forms/submissions-routes.admin.d.ts +6 -0
- package/dist/modules/forms/submissions-routes.admin.d.ts.map +1 -0
- package/dist/modules/forms/submissions-routes.admin.js +46 -0
- package/dist/modules/forms/submissions-routes.admin.js.map +1 -0
- package/dist/modules/forms/submissions-service.d.ts +45 -0
- package/dist/modules/forms/submissions-service.d.ts.map +1 -0
- package/dist/modules/forms/submissions-service.js +174 -0
- package/dist/modules/forms/submissions-service.js.map +1 -0
- package/dist/modules/media/db.d.ts +15 -0
- package/dist/modules/media/db.d.ts.map +1 -0
- package/dist/modules/media/db.js +24 -0
- package/dist/modules/media/db.js.map +1 -0
- package/dist/modules/media/routes.admin.d.ts +6 -0
- package/dist/modules/media/routes.admin.d.ts.map +1 -0
- package/dist/modules/media/routes.admin.js +30 -0
- package/dist/modules/media/routes.admin.js.map +1 -0
- package/dist/modules/media/routes.public.d.ts +6 -0
- package/dist/modules/media/routes.public.d.ts.map +1 -0
- package/dist/modules/media/routes.public.js +35 -0
- package/dist/modules/media/routes.public.js.map +1 -0
- package/dist/modules/media/service.d.ts +32 -0
- package/dist/modules/media/service.d.ts.map +1 -0
- package/dist/modules/media/service.js +99 -0
- package/dist/modules/media/service.js.map +1 -0
- package/dist/modules/openapi/spec.d.ts +21 -0
- package/dist/modules/openapi/spec.d.ts.map +1 -0
- package/dist/modules/openapi/spec.js +468 -0
- package/dist/modules/openapi/spec.js.map +1 -0
- package/dist/modules/seo/jsonld.d.ts +25 -0
- package/dist/modules/seo/jsonld.d.ts.map +1 -0
- package/dist/modules/seo/jsonld.js +67 -0
- package/dist/modules/seo/jsonld.js.map +1 -0
- package/dist/modules/seo/routes.public.d.ts +6 -0
- package/dist/modules/seo/routes.public.d.ts.map +1 -0
- package/dist/modules/seo/routes.public.js +39 -0
- package/dist/modules/seo/routes.public.js.map +1 -0
- package/dist/modules/seo/sitemap.d.ts +3 -0
- package/dist/modules/seo/sitemap.d.ts.map +1 -0
- package/dist/modules/seo/sitemap.js +39 -0
- package/dist/modules/seo/sitemap.js.map +1 -0
- package/dist/modules/settings/routes.admin.d.ts +12 -0
- package/dist/modules/settings/routes.admin.d.ts.map +1 -0
- package/dist/modules/settings/routes.admin.js +27 -0
- package/dist/modules/settings/routes.admin.js.map +1 -0
- package/dist/modules/site-documents/routes.admin.d.ts +10 -0
- package/dist/modules/site-documents/routes.admin.d.ts.map +1 -0
- package/dist/modules/site-documents/routes.admin.js +29 -0
- package/dist/modules/site-documents/routes.admin.js.map +1 -0
- package/dist/modules/site-documents/routes.public.d.ts +6 -0
- package/dist/modules/site-documents/routes.public.d.ts.map +1 -0
- package/dist/modules/site-documents/routes.public.js +16 -0
- package/dist/modules/site-documents/routes.public.js.map +1 -0
- package/dist/modules/site-documents/service.d.ts +11 -0
- package/dist/modules/site-documents/service.d.ts.map +1 -0
- package/dist/modules/site-documents/service.js +42 -0
- package/dist/modules/site-documents/service.js.map +1 -0
- package/dist/modules/webhooks/dispatch.d.ts +14 -0
- package/dist/modules/webhooks/dispatch.d.ts.map +1 -0
- package/dist/modules/webhooks/dispatch.js +84 -0
- package/dist/modules/webhooks/dispatch.js.map +1 -0
- package/dist/shared/constants.d.ts +79 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +89 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/envelope.d.ts +37 -0
- package/dist/shared/envelope.d.ts.map +1 -0
- package/dist/shared/envelope.js +46 -0
- package/dist/shared/envelope.js.map +1 -0
- package/dist/shared/hash.d.ts +2 -0
- package/dist/shared/hash.d.ts.map +1 -0
- package/dist/shared/hash.js +8 -0
- package/dist/shared/hash.js.map +1 -0
- package/dist/shared/index.d.ts +13 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +13 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/schemas/aeo.d.ts +182 -0
- package/dist/shared/schemas/aeo.d.ts.map +1 -0
- package/dist/shared/schemas/aeo.js +43 -0
- package/dist/shared/schemas/aeo.js.map +1 -0
- package/dist/shared/schemas/analytics.d.ts +277 -0
- package/dist/shared/schemas/analytics.d.ts.map +1 -0
- package/dist/shared/schemas/analytics.js +74 -0
- package/dist/shared/schemas/analytics.js.map +1 -0
- package/dist/shared/schemas/api-key.d.ts +77 -0
- package/dist/shared/schemas/api-key.d.ts.map +1 -0
- package/dist/shared/schemas/api-key.js +27 -0
- package/dist/shared/schemas/api-key.js.map +1 -0
- package/dist/shared/schemas/author.d.ts +147 -0
- package/dist/shared/schemas/author.d.ts.map +1 -0
- package/dist/shared/schemas/author.js +27 -0
- package/dist/shared/schemas/author.js.map +1 -0
- package/dist/shared/schemas/form.d.ts +341 -0
- package/dist/shared/schemas/form.d.ts.map +1 -0
- package/dist/shared/schemas/form.js +117 -0
- package/dist/shared/schemas/form.js.map +1 -0
- package/dist/shared/schemas/index.d.ts +12 -0
- package/dist/shared/schemas/index.d.ts.map +1 -0
- package/dist/shared/schemas/index.js +12 -0
- package/dist/shared/schemas/index.js.map +1 -0
- package/dist/shared/schemas/media.d.ts +42 -0
- package/dist/shared/schemas/media.d.ts.map +1 -0
- package/dist/shared/schemas/media.js +16 -0
- package/dist/shared/schemas/media.js.map +1 -0
- package/dist/shared/schemas/pagination.d.ts +34 -0
- package/dist/shared/schemas/pagination.d.ts.map +1 -0
- package/dist/shared/schemas/pagination.js +21 -0
- package/dist/shared/schemas/pagination.js.map +1 -0
- package/dist/shared/schemas/post.d.ts +862 -0
- package/dist/shared/schemas/post.d.ts.map +1 -0
- package/dist/shared/schemas/post.js +187 -0
- package/dist/shared/schemas/post.js.map +1 -0
- package/dist/shared/schemas/settings.d.ts +839 -0
- package/dist/shared/schemas/settings.d.ts.map +1 -0
- package/dist/shared/schemas/settings.js +202 -0
- package/dist/shared/schemas/settings.js.map +1 -0
- package/dist/shared/schemas/site-document.d.ts +38 -0
- package/dist/shared/schemas/site-document.d.ts.map +1 -0
- package/dist/shared/schemas/site-document.js +21 -0
- package/dist/shared/schemas/site-document.js.map +1 -0
- package/dist/shared/schemas/webhook.d.ts +39 -0
- package/dist/shared/schemas/webhook.d.ts.map +1 -0
- package/dist/shared/schemas/webhook.js +20 -0
- package/dist/shared/schemas/webhook.js.map +1 -0
- package/dist/spa.d.ts +9 -0
- package/dist/spa.d.ts.map +1 -0
- package/dist/spa.js +57 -0
- package/dist/spa.js.map +1 -0
- package/migrations/0001_settings.sql +39 -0
- package/migrations/0002_content.sql +135 -0
- package/migrations/0003_forms.sql +35 -0
- package/migrations/0004_analytics.sql +42 -0
- package/migrations/0005_media.sql +17 -0
- package/migrations/0006_site_documents.sql +18 -0
- package/migrations/0007_auth.sql +81 -0
- package/migrations/0008_api_keys.sql +20 -0
- package/package.json +68 -0
- package/scripts/bundle-admin.mjs +54 -0
- package/seed/local.sql +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/shared/envelope.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,kBAAkB;IAClB,cAAc;IACd,WAAW;IACX,WAAW;IACX,UAAU;IACV,cAAc;IACd,mBAAmB;IACnB,UAAU;CACF,CAAC;AAIX;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,YAAY,EAAE,GAAG;IACjB,iBAAiB,EAAE,GAAG;IACtB,QAAQ,EAAE,GAAG;CAC+B,CAAC;AAY/C,MAAM,UAAU,EAAE,CAAmB,IAAO;IAC1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAe,EAAE,KAAa;IAChD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,IAAI,CAAmB,QAAqB;IAC1D,OAAO,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,KAAK,CAAmB,QAAqB;IAC3D,OAAO,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAe;IAC3C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"AAAA,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM9D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export async function sha256Hex(input) {
|
|
2
|
+
const data = new TextEncoder().encode(input);
|
|
3
|
+
const digest = await crypto.subtle.digest('SHA-256', data);
|
|
4
|
+
return Array.from(new Uint8Array(digest))
|
|
5
|
+
.map((byte) => byte.toString(16).padStart(2, '0'))
|
|
6
|
+
.join('');
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/shared/hash.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa;IAC3C,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACjD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The self-contained kernel this package carries instead of depending on a
|
|
3
|
+
* shared library: the response envelope, the SHA-256 helper, the platform
|
|
4
|
+
* vocabularies, and the zod schemas that define the wire contract. It is a
|
|
5
|
+
* copy of managed we8's `@we8/shared`, minus everything tenancy-shaped (the
|
|
6
|
+
* internal HMAC helpers and the control-plane schemas), plus the additions
|
|
7
|
+
* 0.1 makes for AEO and for keys validated inside this worker.
|
|
8
|
+
*/
|
|
9
|
+
export * from './envelope.js';
|
|
10
|
+
export * from './constants.js';
|
|
11
|
+
export * from './hash.js';
|
|
12
|
+
export * from './schemas/index.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The self-contained kernel this package carries instead of depending on a
|
|
3
|
+
* shared library: the response envelope, the SHA-256 helper, the platform
|
|
4
|
+
* vocabularies, and the zod schemas that define the wire contract. It is a
|
|
5
|
+
* copy of managed we8's `@we8/shared`, minus everything tenancy-shaped (the
|
|
6
|
+
* internal HMAC helpers and the control-plane schemas), plus the additions
|
|
7
|
+
* 0.1 makes for AEO and for keys validated inside this worker.
|
|
8
|
+
*/
|
|
9
|
+
export * from './envelope.js';
|
|
10
|
+
export * from './constants.js';
|
|
11
|
+
export * from './hash.js';
|
|
12
|
+
export * from './schemas/index.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const aeoFindingSchema: z.ZodEnum<["missing_description", "missing_answer_summary", "missing_question_heading", "missing_json_ld", "not_in_sitemap"]>;
|
|
3
|
+
export declare const userAgentClassSchema: z.ZodEnum<["human", "ai-crawler", "search-crawler", "social-crawler", "seo-crawler", "other-bot"]>;
|
|
4
|
+
/**
|
|
5
|
+
* One piece of content and everything the check found missing on it. `findings`
|
|
6
|
+
* is empty when the content passes; the admin renders the empty case as a pass
|
|
7
|
+
* rather than hiding the row, so a clean site still shows its coverage.
|
|
8
|
+
*/
|
|
9
|
+
export declare const aeoContentCheckSchema: z.ZodObject<{
|
|
10
|
+
id: z.ZodString;
|
|
11
|
+
slug: z.ZodString;
|
|
12
|
+
title: z.ZodString;
|
|
13
|
+
type: z.ZodEnum<["blog", "article", "news", "research", "whitepaper", "case-study"]>;
|
|
14
|
+
status: z.ZodEnum<["draft", "published", "archived"]>;
|
|
15
|
+
findings: z.ZodArray<z.ZodEnum<["missing_description", "missing_answer_summary", "missing_question_heading", "missing_json_ld", "not_in_sitemap"]>, "many">;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
type: "blog" | "article" | "news" | "research" | "whitepaper" | "case-study";
|
|
18
|
+
status: "draft" | "published" | "archived";
|
|
19
|
+
slug: string;
|
|
20
|
+
id: string;
|
|
21
|
+
title: string;
|
|
22
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
23
|
+
}, {
|
|
24
|
+
type: "blog" | "article" | "news" | "research" | "whitepaper" | "case-study";
|
|
25
|
+
status: "draft" | "published" | "archived";
|
|
26
|
+
slug: string;
|
|
27
|
+
id: string;
|
|
28
|
+
title: string;
|
|
29
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
30
|
+
}>;
|
|
31
|
+
/** The same check applied to a site document, which has a kind instead of a slug. */
|
|
32
|
+
export declare const aeoDocumentCheckSchema: z.ZodObject<{
|
|
33
|
+
kind: z.ZodEnum<["design-md", "llms-txt"]>;
|
|
34
|
+
findings: z.ZodArray<z.ZodEnum<["missing_description", "missing_answer_summary", "missing_question_heading", "missing_json_ld", "not_in_sitemap"]>, "many">;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
kind: "design-md" | "llms-txt";
|
|
37
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
38
|
+
}, {
|
|
39
|
+
kind: "design-md" | "llms-txt";
|
|
40
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
41
|
+
}>;
|
|
42
|
+
export declare const aeoReportSchema: z.ZodObject<{
|
|
43
|
+
posts: z.ZodArray<z.ZodObject<{
|
|
44
|
+
id: z.ZodString;
|
|
45
|
+
slug: z.ZodString;
|
|
46
|
+
title: z.ZodString;
|
|
47
|
+
type: z.ZodEnum<["blog", "article", "news", "research", "whitepaper", "case-study"]>;
|
|
48
|
+
status: z.ZodEnum<["draft", "published", "archived"]>;
|
|
49
|
+
findings: z.ZodArray<z.ZodEnum<["missing_description", "missing_answer_summary", "missing_question_heading", "missing_json_ld", "not_in_sitemap"]>, "many">;
|
|
50
|
+
}, "strip", z.ZodTypeAny, {
|
|
51
|
+
type: "blog" | "article" | "news" | "research" | "whitepaper" | "case-study";
|
|
52
|
+
status: "draft" | "published" | "archived";
|
|
53
|
+
slug: string;
|
|
54
|
+
id: string;
|
|
55
|
+
title: string;
|
|
56
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
57
|
+
}, {
|
|
58
|
+
type: "blog" | "article" | "news" | "research" | "whitepaper" | "case-study";
|
|
59
|
+
status: "draft" | "published" | "archived";
|
|
60
|
+
slug: string;
|
|
61
|
+
id: string;
|
|
62
|
+
title: string;
|
|
63
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
64
|
+
}>, "many">;
|
|
65
|
+
documents: z.ZodArray<z.ZodObject<{
|
|
66
|
+
kind: z.ZodEnum<["design-md", "llms-txt"]>;
|
|
67
|
+
findings: z.ZodArray<z.ZodEnum<["missing_description", "missing_answer_summary", "missing_question_heading", "missing_json_ld", "not_in_sitemap"]>, "many">;
|
|
68
|
+
}, "strip", z.ZodTypeAny, {
|
|
69
|
+
kind: "design-md" | "llms-txt";
|
|
70
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
71
|
+
}, {
|
|
72
|
+
kind: "design-md" | "llms-txt";
|
|
73
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
74
|
+
}>, "many">;
|
|
75
|
+
/** How many pieces of content carry each finding, for the admin's summary strip. */
|
|
76
|
+
totals: z.ZodRecord<z.ZodEnum<["missing_description", "missing_answer_summary", "missing_question_heading", "missing_json_ld", "not_in_sitemap"]>, z.ZodNumber>;
|
|
77
|
+
checkedAt: z.ZodString;
|
|
78
|
+
}, "strip", z.ZodTypeAny, {
|
|
79
|
+
posts: {
|
|
80
|
+
type: "blog" | "article" | "news" | "research" | "whitepaper" | "case-study";
|
|
81
|
+
status: "draft" | "published" | "archived";
|
|
82
|
+
slug: string;
|
|
83
|
+
id: string;
|
|
84
|
+
title: string;
|
|
85
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
86
|
+
}[];
|
|
87
|
+
documents: {
|
|
88
|
+
kind: "design-md" | "llms-txt";
|
|
89
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
90
|
+
}[];
|
|
91
|
+
totals: Partial<Record<"missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap", number>>;
|
|
92
|
+
checkedAt: string;
|
|
93
|
+
}, {
|
|
94
|
+
posts: {
|
|
95
|
+
type: "blog" | "article" | "news" | "research" | "whitepaper" | "case-study";
|
|
96
|
+
status: "draft" | "published" | "archived";
|
|
97
|
+
slug: string;
|
|
98
|
+
id: string;
|
|
99
|
+
title: string;
|
|
100
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
101
|
+
}[];
|
|
102
|
+
documents: {
|
|
103
|
+
kind: "design-md" | "llms-txt";
|
|
104
|
+
findings: ("missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap")[];
|
|
105
|
+
}[];
|
|
106
|
+
totals: Partial<Record<"missing_description" | "missing_answer_summary" | "missing_question_heading" | "missing_json_ld" | "not_in_sitemap", number>>;
|
|
107
|
+
checkedAt: string;
|
|
108
|
+
}>;
|
|
109
|
+
/** Crawler activity, read straight from the visit log's user-agent class. */
|
|
110
|
+
export declare const aeoCrawlerStatsSchema: z.ZodObject<{
|
|
111
|
+
byClass: z.ZodArray<z.ZodObject<{
|
|
112
|
+
userAgentClass: z.ZodEnum<["human", "ai-crawler", "search-crawler", "social-crawler", "seo-crawler", "other-bot"]>;
|
|
113
|
+
count: z.ZodNumber;
|
|
114
|
+
}, "strip", z.ZodTypeAny, {
|
|
115
|
+
count: number;
|
|
116
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
117
|
+
}, {
|
|
118
|
+
count: number;
|
|
119
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
120
|
+
}>, "many">;
|
|
121
|
+
topCrawlers: z.ZodArray<z.ZodObject<{
|
|
122
|
+
botName: z.ZodString;
|
|
123
|
+
userAgentClass: z.ZodEnum<["human", "ai-crawler", "search-crawler", "social-crawler", "seo-crawler", "other-bot"]>;
|
|
124
|
+
count: z.ZodNumber;
|
|
125
|
+
lastSeenAt: z.ZodString;
|
|
126
|
+
}, "strip", z.ZodTypeAny, {
|
|
127
|
+
count: number;
|
|
128
|
+
botName: string;
|
|
129
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
130
|
+
lastSeenAt: string;
|
|
131
|
+
}, {
|
|
132
|
+
count: number;
|
|
133
|
+
botName: string;
|
|
134
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
135
|
+
lastSeenAt: string;
|
|
136
|
+
}>, "many">;
|
|
137
|
+
daily: z.ZodArray<z.ZodObject<{
|
|
138
|
+
date: z.ZodString;
|
|
139
|
+
count: z.ZodNumber;
|
|
140
|
+
}, "strip", z.ZodTypeAny, {
|
|
141
|
+
date: string;
|
|
142
|
+
count: number;
|
|
143
|
+
}, {
|
|
144
|
+
date: string;
|
|
145
|
+
count: number;
|
|
146
|
+
}>, "many">;
|
|
147
|
+
}, "strip", z.ZodTypeAny, {
|
|
148
|
+
daily: {
|
|
149
|
+
date: string;
|
|
150
|
+
count: number;
|
|
151
|
+
}[];
|
|
152
|
+
byClass: {
|
|
153
|
+
count: number;
|
|
154
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
155
|
+
}[];
|
|
156
|
+
topCrawlers: {
|
|
157
|
+
count: number;
|
|
158
|
+
botName: string;
|
|
159
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
160
|
+
lastSeenAt: string;
|
|
161
|
+
}[];
|
|
162
|
+
}, {
|
|
163
|
+
daily: {
|
|
164
|
+
date: string;
|
|
165
|
+
count: number;
|
|
166
|
+
}[];
|
|
167
|
+
byClass: {
|
|
168
|
+
count: number;
|
|
169
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
170
|
+
}[];
|
|
171
|
+
topCrawlers: {
|
|
172
|
+
count: number;
|
|
173
|
+
botName: string;
|
|
174
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
175
|
+
lastSeenAt: string;
|
|
176
|
+
}[];
|
|
177
|
+
}>;
|
|
178
|
+
export type AeoContentCheck = z.infer<typeof aeoContentCheckSchema>;
|
|
179
|
+
export type AeoDocumentCheck = z.infer<typeof aeoDocumentCheckSchema>;
|
|
180
|
+
export type AeoReport = z.infer<typeof aeoReportSchema>;
|
|
181
|
+
export type AeoCrawlerStats = z.infer<typeof aeoCrawlerStatsSchema>;
|
|
182
|
+
//# sourceMappingURL=aeo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aeo.d.ts","sourceRoot":"","sources":["../../../src/shared/schemas/aeo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,gBAAgB,+HAAuB,CAAC;AACrD,eAAO,MAAM,oBAAoB,oGAA6B,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AAEH,qFAAqF;AACrF,eAAO,MAAM,sBAAsB;;;;;;;;;EAGjC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAG1B,oFAAoF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGpF,CAAC;AAEH,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { AEO_FINDINGS, USER_AGENT_CLASSES } from '../constants.js';
|
|
3
|
+
import { postStatusSchema, postTypeSchema } from './post.js';
|
|
4
|
+
import { siteDocumentKindSchema } from './site-document.js';
|
|
5
|
+
export const aeoFindingSchema = z.enum(AEO_FINDINGS);
|
|
6
|
+
export const userAgentClassSchema = z.enum(USER_AGENT_CLASSES);
|
|
7
|
+
/**
|
|
8
|
+
* One piece of content and everything the check found missing on it. `findings`
|
|
9
|
+
* is empty when the content passes; the admin renders the empty case as a pass
|
|
10
|
+
* rather than hiding the row, so a clean site still shows its coverage.
|
|
11
|
+
*/
|
|
12
|
+
export const aeoContentCheckSchema = z.object({
|
|
13
|
+
id: z.string(),
|
|
14
|
+
slug: z.string(),
|
|
15
|
+
title: z.string(),
|
|
16
|
+
type: postTypeSchema,
|
|
17
|
+
status: postStatusSchema,
|
|
18
|
+
findings: z.array(aeoFindingSchema),
|
|
19
|
+
});
|
|
20
|
+
/** The same check applied to a site document, which has a kind instead of a slug. */
|
|
21
|
+
export const aeoDocumentCheckSchema = z.object({
|
|
22
|
+
kind: siteDocumentKindSchema,
|
|
23
|
+
findings: z.array(aeoFindingSchema),
|
|
24
|
+
});
|
|
25
|
+
export const aeoReportSchema = z.object({
|
|
26
|
+
posts: z.array(aeoContentCheckSchema),
|
|
27
|
+
documents: z.array(aeoDocumentCheckSchema),
|
|
28
|
+
/** How many pieces of content carry each finding, for the admin's summary strip. */
|
|
29
|
+
totals: z.record(aeoFindingSchema, z.number().int()),
|
|
30
|
+
checkedAt: z.string(),
|
|
31
|
+
});
|
|
32
|
+
/** Crawler activity, read straight from the visit log's user-agent class. */
|
|
33
|
+
export const aeoCrawlerStatsSchema = z.object({
|
|
34
|
+
byClass: z.array(z.object({ userAgentClass: userAgentClassSchema, count: z.number().int() })),
|
|
35
|
+
topCrawlers: z.array(z.object({
|
|
36
|
+
botName: z.string(),
|
|
37
|
+
userAgentClass: userAgentClassSchema,
|
|
38
|
+
count: z.number().int(),
|
|
39
|
+
lastSeenAt: z.string(),
|
|
40
|
+
})),
|
|
41
|
+
daily: z.array(z.object({ date: z.string(), count: z.number().int() })),
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=aeo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aeo.js","sourceRoot":"","sources":["../../../src/shared/schemas/aeo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,gBAAgB;IACxB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;CACpC,CAAC,CAAC;AAEH,qFAAqF;AACrF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;IAC1C,oFAAoF;IACpF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,6EAA6E;AAC7E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7F,WAAW,EAAE,CAAC,CAAC,KAAK,CAClB,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,cAAc,EAAE,oBAAoB;QACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC,CACH;IACD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;CACxE,CAAC,CAAC"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const consentDecisionSchema: z.ZodEnum<["accepted", "partial", "declined"]>;
|
|
3
|
+
export declare const visitEventInputSchema: z.ZodObject<{
|
|
4
|
+
pathname: z.ZodString;
|
|
5
|
+
referrer: z.ZodOptional<z.ZodString>;
|
|
6
|
+
sessionId: z.ZodString;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
pathname: string;
|
|
9
|
+
sessionId: string;
|
|
10
|
+
referrer?: string | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
pathname: string;
|
|
13
|
+
sessionId: string;
|
|
14
|
+
referrer?: string | undefined;
|
|
15
|
+
}>;
|
|
16
|
+
export declare const consentEventInputSchema: z.ZodObject<{
|
|
17
|
+
sessionId: z.ZodString;
|
|
18
|
+
decision: z.ZodEnum<["accepted", "partial", "declined"]>;
|
|
19
|
+
analytics: z.ZodBoolean;
|
|
20
|
+
performance: z.ZodBoolean;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
sessionId: string;
|
|
23
|
+
decision: "accepted" | "partial" | "declined";
|
|
24
|
+
analytics: boolean;
|
|
25
|
+
performance: boolean;
|
|
26
|
+
}, {
|
|
27
|
+
sessionId: string;
|
|
28
|
+
decision: "accepted" | "partial" | "declined";
|
|
29
|
+
analytics: boolean;
|
|
30
|
+
performance: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
export declare const pageVisitRecordSchema: z.ZodObject<{
|
|
33
|
+
id: z.ZodString;
|
|
34
|
+
visitedAt: z.ZodString;
|
|
35
|
+
pathname: z.ZodString;
|
|
36
|
+
referrer: z.ZodNullable<z.ZodString>;
|
|
37
|
+
country: z.ZodNullable<z.ZodString>;
|
|
38
|
+
isBot: z.ZodBoolean;
|
|
39
|
+
botName: z.ZodNullable<z.ZodString>;
|
|
40
|
+
botScore: z.ZodNullable<z.ZodNumber>;
|
|
41
|
+
/** AEO (0.1): which kind of agent this was, for crawler attribution. */
|
|
42
|
+
userAgentClass: z.ZodEnum<["human", "ai-crawler", "search-crawler", "social-crawler", "seo-crawler", "other-bot"]>;
|
|
43
|
+
sessionId: z.ZodNullable<z.ZodString>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
id: string;
|
|
46
|
+
referrer: string | null;
|
|
47
|
+
pathname: string;
|
|
48
|
+
sessionId: string | null;
|
|
49
|
+
visitedAt: string;
|
|
50
|
+
country: string | null;
|
|
51
|
+
isBot: boolean;
|
|
52
|
+
botName: string | null;
|
|
53
|
+
botScore: number | null;
|
|
54
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
55
|
+
}, {
|
|
56
|
+
id: string;
|
|
57
|
+
referrer: string | null;
|
|
58
|
+
pathname: string;
|
|
59
|
+
sessionId: string | null;
|
|
60
|
+
visitedAt: string;
|
|
61
|
+
country: string | null;
|
|
62
|
+
isBot: boolean;
|
|
63
|
+
botName: string | null;
|
|
64
|
+
botScore: number | null;
|
|
65
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
66
|
+
}>;
|
|
67
|
+
export declare const visitListQuerySchema: z.ZodObject<{
|
|
68
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
69
|
+
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
70
|
+
} & {
|
|
71
|
+
isBot: z.ZodOptional<z.ZodEffects<z.ZodEnum<["true", "false", "1", "0"]>, boolean, "0" | "true" | "false" | "1">>;
|
|
72
|
+
userAgentClass: z.ZodOptional<z.ZodEnum<["human", "ai-crawler", "search-crawler", "social-crawler", "seo-crawler", "other-bot"]>>;
|
|
73
|
+
pathname: z.ZodOptional<z.ZodString>;
|
|
74
|
+
country: z.ZodOptional<z.ZodString>;
|
|
75
|
+
search: z.ZodOptional<z.ZodString>;
|
|
76
|
+
}, "strip", z.ZodTypeAny, {
|
|
77
|
+
page: number;
|
|
78
|
+
pageSize: number;
|
|
79
|
+
search?: string | undefined;
|
|
80
|
+
pathname?: string | undefined;
|
|
81
|
+
country?: string | undefined;
|
|
82
|
+
isBot?: boolean | undefined;
|
|
83
|
+
userAgentClass?: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot" | undefined;
|
|
84
|
+
}, {
|
|
85
|
+
page?: number | undefined;
|
|
86
|
+
pageSize?: number | undefined;
|
|
87
|
+
search?: string | undefined;
|
|
88
|
+
pathname?: string | undefined;
|
|
89
|
+
country?: string | undefined;
|
|
90
|
+
isBot?: "0" | "true" | "false" | "1" | undefined;
|
|
91
|
+
userAgentClass?: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot" | undefined;
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* The caps differ per endpoint: visit stats allow up to 90 days, consent stats
|
|
95
|
+
* up to 365. Each route passes its own cap.
|
|
96
|
+
*/
|
|
97
|
+
export declare function statsQuerySchema(maxDays: number): z.ZodObject<{
|
|
98
|
+
days: z.ZodDefault<z.ZodNumber>;
|
|
99
|
+
}, "strip", z.ZodTypeAny, {
|
|
100
|
+
days: number;
|
|
101
|
+
}, {
|
|
102
|
+
days?: number | undefined;
|
|
103
|
+
}>;
|
|
104
|
+
export declare const VISIT_STATS_MAX_DAYS = 90;
|
|
105
|
+
export declare const CONSENT_STATS_MAX_DAYS = 365;
|
|
106
|
+
export declare const visitStatsSchema: z.ZodObject<{
|
|
107
|
+
total: z.ZodNumber;
|
|
108
|
+
humans: z.ZodNumber;
|
|
109
|
+
bots: z.ZodNumber;
|
|
110
|
+
topPages: z.ZodArray<z.ZodObject<{
|
|
111
|
+
pathname: z.ZodString;
|
|
112
|
+
count: z.ZodNumber;
|
|
113
|
+
}, "strip", z.ZodTypeAny, {
|
|
114
|
+
count: number;
|
|
115
|
+
pathname: string;
|
|
116
|
+
}, {
|
|
117
|
+
count: number;
|
|
118
|
+
pathname: string;
|
|
119
|
+
}>, "many">;
|
|
120
|
+
topCountries: z.ZodArray<z.ZodObject<{
|
|
121
|
+
country: z.ZodString;
|
|
122
|
+
count: z.ZodNumber;
|
|
123
|
+
}, "strip", z.ZodTypeAny, {
|
|
124
|
+
count: number;
|
|
125
|
+
country: string;
|
|
126
|
+
}, {
|
|
127
|
+
count: number;
|
|
128
|
+
country: string;
|
|
129
|
+
}>, "many">;
|
|
130
|
+
topReferrers: z.ZodArray<z.ZodObject<{
|
|
131
|
+
referrer: z.ZodString;
|
|
132
|
+
count: z.ZodNumber;
|
|
133
|
+
}, "strip", z.ZodTypeAny, {
|
|
134
|
+
referrer: string;
|
|
135
|
+
count: number;
|
|
136
|
+
}, {
|
|
137
|
+
referrer: string;
|
|
138
|
+
count: number;
|
|
139
|
+
}>, "many">;
|
|
140
|
+
topBots: z.ZodArray<z.ZodObject<{
|
|
141
|
+
botName: z.ZodString;
|
|
142
|
+
count: z.ZodNumber;
|
|
143
|
+
}, "strip", z.ZodTypeAny, {
|
|
144
|
+
count: number;
|
|
145
|
+
botName: string;
|
|
146
|
+
}, {
|
|
147
|
+
count: number;
|
|
148
|
+
botName: string;
|
|
149
|
+
}>, "many">;
|
|
150
|
+
/** AEO (0.1): the same totals split by agent class, so crawler traffic reads separately. */
|
|
151
|
+
byUserAgentClass: z.ZodArray<z.ZodObject<{
|
|
152
|
+
userAgentClass: z.ZodEnum<["human", "ai-crawler", "search-crawler", "social-crawler", "seo-crawler", "other-bot"]>;
|
|
153
|
+
count: z.ZodNumber;
|
|
154
|
+
}, "strip", z.ZodTypeAny, {
|
|
155
|
+
count: number;
|
|
156
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
157
|
+
}, {
|
|
158
|
+
count: number;
|
|
159
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
160
|
+
}>, "many">;
|
|
161
|
+
daily: z.ZodArray<z.ZodObject<{
|
|
162
|
+
date: z.ZodString;
|
|
163
|
+
count: z.ZodNumber;
|
|
164
|
+
}, "strip", z.ZodTypeAny, {
|
|
165
|
+
date: string;
|
|
166
|
+
count: number;
|
|
167
|
+
}, {
|
|
168
|
+
date: string;
|
|
169
|
+
count: number;
|
|
170
|
+
}>, "many">;
|
|
171
|
+
}, "strip", z.ZodTypeAny, {
|
|
172
|
+
total: number;
|
|
173
|
+
daily: {
|
|
174
|
+
date: string;
|
|
175
|
+
count: number;
|
|
176
|
+
}[];
|
|
177
|
+
humans: number;
|
|
178
|
+
bots: number;
|
|
179
|
+
topPages: {
|
|
180
|
+
count: number;
|
|
181
|
+
pathname: string;
|
|
182
|
+
}[];
|
|
183
|
+
topCountries: {
|
|
184
|
+
count: number;
|
|
185
|
+
country: string;
|
|
186
|
+
}[];
|
|
187
|
+
topReferrers: {
|
|
188
|
+
referrer: string;
|
|
189
|
+
count: number;
|
|
190
|
+
}[];
|
|
191
|
+
topBots: {
|
|
192
|
+
count: number;
|
|
193
|
+
botName: string;
|
|
194
|
+
}[];
|
|
195
|
+
byUserAgentClass: {
|
|
196
|
+
count: number;
|
|
197
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
198
|
+
}[];
|
|
199
|
+
}, {
|
|
200
|
+
total: number;
|
|
201
|
+
daily: {
|
|
202
|
+
date: string;
|
|
203
|
+
count: number;
|
|
204
|
+
}[];
|
|
205
|
+
humans: number;
|
|
206
|
+
bots: number;
|
|
207
|
+
topPages: {
|
|
208
|
+
count: number;
|
|
209
|
+
pathname: string;
|
|
210
|
+
}[];
|
|
211
|
+
topCountries: {
|
|
212
|
+
count: number;
|
|
213
|
+
country: string;
|
|
214
|
+
}[];
|
|
215
|
+
topReferrers: {
|
|
216
|
+
referrer: string;
|
|
217
|
+
count: number;
|
|
218
|
+
}[];
|
|
219
|
+
topBots: {
|
|
220
|
+
count: number;
|
|
221
|
+
botName: string;
|
|
222
|
+
}[];
|
|
223
|
+
byUserAgentClass: {
|
|
224
|
+
count: number;
|
|
225
|
+
userAgentClass: "human" | "ai-crawler" | "search-crawler" | "social-crawler" | "seo-crawler" | "other-bot";
|
|
226
|
+
}[];
|
|
227
|
+
}>;
|
|
228
|
+
export declare const consentStatsSchema: z.ZodObject<{
|
|
229
|
+
accepted: z.ZodNumber;
|
|
230
|
+
partial: z.ZodNumber;
|
|
231
|
+
declined: z.ZodNumber;
|
|
232
|
+
analyticsOptIn: z.ZodNumber;
|
|
233
|
+
performanceOptIn: z.ZodNumber;
|
|
234
|
+
daily: z.ZodArray<z.ZodObject<{
|
|
235
|
+
date: z.ZodString;
|
|
236
|
+
decision: z.ZodEnum<["accepted", "partial", "declined"]>;
|
|
237
|
+
count: z.ZodNumber;
|
|
238
|
+
}, "strip", z.ZodTypeAny, {
|
|
239
|
+
date: string;
|
|
240
|
+
count: number;
|
|
241
|
+
decision: "accepted" | "partial" | "declined";
|
|
242
|
+
}, {
|
|
243
|
+
date: string;
|
|
244
|
+
count: number;
|
|
245
|
+
decision: "accepted" | "partial" | "declined";
|
|
246
|
+
}>, "many">;
|
|
247
|
+
}, "strip", z.ZodTypeAny, {
|
|
248
|
+
accepted: number;
|
|
249
|
+
partial: number;
|
|
250
|
+
declined: number;
|
|
251
|
+
daily: {
|
|
252
|
+
date: string;
|
|
253
|
+
count: number;
|
|
254
|
+
decision: "accepted" | "partial" | "declined";
|
|
255
|
+
}[];
|
|
256
|
+
analyticsOptIn: number;
|
|
257
|
+
performanceOptIn: number;
|
|
258
|
+
}, {
|
|
259
|
+
accepted: number;
|
|
260
|
+
partial: number;
|
|
261
|
+
declined: number;
|
|
262
|
+
daily: {
|
|
263
|
+
date: string;
|
|
264
|
+
count: number;
|
|
265
|
+
decision: "accepted" | "partial" | "declined";
|
|
266
|
+
}[];
|
|
267
|
+
analyticsOptIn: number;
|
|
268
|
+
performanceOptIn: number;
|
|
269
|
+
}>;
|
|
270
|
+
export type VisitEventInput = z.infer<typeof visitEventInputSchema>;
|
|
271
|
+
export type ConsentEventInput = z.infer<typeof consentEventInputSchema>;
|
|
272
|
+
export type PageVisitRecord = z.infer<typeof pageVisitRecordSchema>;
|
|
273
|
+
export type VisitListQuery = z.infer<typeof visitListQuerySchema>;
|
|
274
|
+
export type StatsQuery = z.infer<ReturnType<typeof statsQuerySchema>>;
|
|
275
|
+
export type VisitStats = z.infer<typeof visitStatsSchema>;
|
|
276
|
+
export type ConsentStats = z.infer<typeof consentStatsSchema>;
|
|
277
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/shared/schemas/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,qBAAqB,gDAA4B,CAAC;AAU/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;EAIhC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;IAShC,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;EAGxE,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AAEH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM;;;;;;GAI/C;AAED,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQ3B,4FAA4F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK5F,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS7B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC;AACtE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { CONSENT_DECISIONS, USER_AGENT_CLASSES } from '../constants.js';
|
|
3
|
+
import { paginationQuerySchema, queryBoolSchema } from './pagination.js';
|
|
4
|
+
export const consentDecisionSchema = z.enum(CONSENT_DECISIONS);
|
|
5
|
+
/**
|
|
6
|
+
* Duplicated from schemas/aeo.ts on purpose: analytics owns the column, AEO
|
|
7
|
+
* owns the report, and a cross-import between the two schema files for one
|
|
8
|
+
* enum would tie the visit record to the AEO surface. Both derive from the
|
|
9
|
+
* same USER_AGENT_CLASSES constant, so they cannot drift.
|
|
10
|
+
*/
|
|
11
|
+
const visitUserAgentClassSchema = z.enum(USER_AGENT_CLASSES);
|
|
12
|
+
export const visitEventInputSchema = z.object({
|
|
13
|
+
pathname: z.string().min(1).max(2000),
|
|
14
|
+
referrer: z.string().max(2000).optional(),
|
|
15
|
+
sessionId: z.string().min(1).max(200),
|
|
16
|
+
});
|
|
17
|
+
export const consentEventInputSchema = z.object({
|
|
18
|
+
sessionId: z.string().min(1).max(200),
|
|
19
|
+
decision: consentDecisionSchema,
|
|
20
|
+
analytics: z.boolean(),
|
|
21
|
+
performance: z.boolean(),
|
|
22
|
+
});
|
|
23
|
+
export const pageVisitRecordSchema = z.object({
|
|
24
|
+
id: z.string(),
|
|
25
|
+
visitedAt: z.string(),
|
|
26
|
+
pathname: z.string(),
|
|
27
|
+
referrer: z.string().nullable(),
|
|
28
|
+
country: z.string().nullable(),
|
|
29
|
+
isBot: z.boolean(),
|
|
30
|
+
botName: z.string().nullable(),
|
|
31
|
+
botScore: z.number().int().nullable(),
|
|
32
|
+
/** AEO (0.1): which kind of agent this was, for crawler attribution. */
|
|
33
|
+
userAgentClass: visitUserAgentClassSchema,
|
|
34
|
+
sessionId: z.string().nullable(),
|
|
35
|
+
});
|
|
36
|
+
export const visitListQuerySchema = paginationQuerySchema.extend({
|
|
37
|
+
isBot: queryBoolSchema.optional(),
|
|
38
|
+
userAgentClass: visitUserAgentClassSchema.optional(),
|
|
39
|
+
pathname: z.string().optional(),
|
|
40
|
+
country: z.string().optional(),
|
|
41
|
+
search: z.string().optional(),
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* The caps differ per endpoint: visit stats allow up to 90 days, consent stats
|
|
45
|
+
* up to 365. Each route passes its own cap.
|
|
46
|
+
*/
|
|
47
|
+
export function statsQuerySchema(maxDays) {
|
|
48
|
+
return z.object({
|
|
49
|
+
days: z.coerce.number().int().min(1).max(maxDays).default(30),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export const VISIT_STATS_MAX_DAYS = 90;
|
|
53
|
+
export const CONSENT_STATS_MAX_DAYS = 365;
|
|
54
|
+
export const visitStatsSchema = z.object({
|
|
55
|
+
total: z.number().int(),
|
|
56
|
+
humans: z.number().int(),
|
|
57
|
+
bots: z.number().int(),
|
|
58
|
+
topPages: z.array(z.object({ pathname: z.string(), count: z.number().int() })),
|
|
59
|
+
topCountries: z.array(z.object({ country: z.string(), count: z.number().int() })),
|
|
60
|
+
topReferrers: z.array(z.object({ referrer: z.string(), count: z.number().int() })),
|
|
61
|
+
topBots: z.array(z.object({ botName: z.string(), count: z.number().int() })),
|
|
62
|
+
/** AEO (0.1): the same totals split by agent class, so crawler traffic reads separately. */
|
|
63
|
+
byUserAgentClass: z.array(z.object({ userAgentClass: visitUserAgentClassSchema, count: z.number().int() })),
|
|
64
|
+
daily: z.array(z.object({ date: z.string(), count: z.number().int() })),
|
|
65
|
+
});
|
|
66
|
+
export const consentStatsSchema = z.object({
|
|
67
|
+
accepted: z.number().int(),
|
|
68
|
+
partial: z.number().int(),
|
|
69
|
+
declined: z.number().int(),
|
|
70
|
+
analyticsOptIn: z.number().int(),
|
|
71
|
+
performanceOptIn: z.number().int(),
|
|
72
|
+
daily: z.array(z.object({ date: z.string(), decision: consentDecisionSchema, count: z.number().int() })),
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=analytics.js.map
|