@extenshi/mcp 0.11.0 → 0.13.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 +5 -3
- package/dist/bff.d.ts +15 -0
- package/dist/bff.d.ts.map +1 -1
- package/dist/bff.js +2 -0
- package/dist/bff.js.map +1 -1
- package/dist/development-guide.d.ts +17 -17
- package/dist/development-guide.d.ts.map +1 -1
- package/dist/development-guide.js +3 -1
- package/dist/development-guide.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/json-ld.d.ts +43 -5
- package/dist/json-ld.d.ts.map +1 -1
- package/dist/json-ld.js +53 -1
- package/dist/json-ld.js.map +1 -1
- package/dist/landing-read.d.ts +72 -0
- package/dist/landing-read.d.ts.map +1 -0
- package/dist/landing-read.js +136 -0
- package/dist/landing-read.js.map +1 -0
- package/dist/landing-sections.d.ts +21 -3
- package/dist/landing-sections.d.ts.map +1 -1
- package/dist/landing-sections.js +63 -17
- package/dist/landing-sections.js.map +1 -1
- package/dist/landing-workflow.d.ts +10 -4
- package/dist/landing-workflow.d.ts.map +1 -1
- package/dist/landing-workflow.js +30 -10
- package/dist/landing-workflow.js.map +1 -1
- package/dist/license-terms-tools.d.ts +17 -0
- package/dist/license-terms-tools.d.ts.map +1 -0
- package/dist/license-terms-tools.js +56 -0
- package/dist/license-terms-tools.js.map +1 -0
- package/dist/mcp-analytics.d.ts +41 -0
- package/dist/mcp-analytics.d.ts.map +1 -0
- package/dist/mcp-analytics.js +91 -0
- package/dist/mcp-analytics.js.map +1 -0
- package/dist/pay.d.ts +3 -3
- package/dist/pay.d.ts.map +1 -1
- package/dist/pay.js +2 -1
- package/dist/pay.js.map +1 -1
- package/dist/scan.d.ts +1 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/telemetry.d.ts +7 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +8 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +37 -10
- package/dist/tools.js.map +1 -1
- package/package.json +6 -1
package/dist/json-ld.d.ts
CHANGED
|
@@ -30,6 +30,11 @@ export interface JsonLdInput {
|
|
|
30
30
|
privacyPolicyUrl?: string;
|
|
31
31
|
/** Free (default) vs paid. Paid still omits a number — we are not the store. */
|
|
32
32
|
offersPrice?: '0' | 'paid';
|
|
33
|
+
/**
|
|
34
|
+
* Real prices (an Extenshi Pay offer bound to the page). When non-empty they
|
|
35
|
+
* replace the free offer: one Offer, or an AggregateOffer for several plans.
|
|
36
|
+
*/
|
|
37
|
+
paidOffers?: JsonLdPriceInput[];
|
|
33
38
|
capabilities?: string[];
|
|
34
39
|
/** ISO date; omitted when blank. */
|
|
35
40
|
datePublished?: string;
|
|
@@ -48,17 +53,46 @@ export interface SoftwareApplicationJsonLd {
|
|
|
48
53
|
'@type': 'Organization';
|
|
49
54
|
name: string;
|
|
50
55
|
};
|
|
51
|
-
offers?:
|
|
52
|
-
'@type': 'Offer';
|
|
53
|
-
price: string;
|
|
54
|
-
priceCurrency: 'USD';
|
|
55
|
-
};
|
|
56
|
+
offers?: JsonLdOffer | JsonLdAggregateOffer | JsonLdOffer[];
|
|
56
57
|
installUrl?: string;
|
|
57
58
|
sameAs?: string[];
|
|
58
59
|
featureList?: string[];
|
|
59
60
|
privacyPolicy?: string;
|
|
60
61
|
screenshot?: string[];
|
|
61
62
|
}
|
|
63
|
+
export interface JsonLdPriceInput {
|
|
64
|
+
name?: string;
|
|
65
|
+
/** Decimal amount in major units ("4.99"). */
|
|
66
|
+
price: string;
|
|
67
|
+
/** ISO 4217 code, any case. */
|
|
68
|
+
currency: string;
|
|
69
|
+
period?: 'month' | 'year' | 'one-time' | 'lifetime';
|
|
70
|
+
}
|
|
71
|
+
export interface JsonLdOffer {
|
|
72
|
+
'@type': 'Offer';
|
|
73
|
+
name?: string;
|
|
74
|
+
price: string;
|
|
75
|
+
priceCurrency: string;
|
|
76
|
+
priceSpecification?: {
|
|
77
|
+
'@type': 'UnitPriceSpecification';
|
|
78
|
+
price: string;
|
|
79
|
+
priceCurrency: string;
|
|
80
|
+
billingDuration: 'P1M' | 'P1Y';
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export interface JsonLdAggregateOffer {
|
|
84
|
+
'@type': 'AggregateOffer';
|
|
85
|
+
lowPrice: string;
|
|
86
|
+
highPrice: string;
|
|
87
|
+
priceCurrency: string;
|
|
88
|
+
offerCount: number;
|
|
89
|
+
offers: JsonLdOffer[];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Offers for real prices: one Offer, an AggregateOffer when every plan is in
|
|
93
|
+
* one currency, else a list. Malformed entries are dropped; null when none is left.
|
|
94
|
+
*/
|
|
95
|
+
export declare function jsonLdOffers(list: readonly JsonLdPriceInput[]): JsonLdOffer | JsonLdAggregateOffer | JsonLdOffer[] | null;
|
|
62
96
|
/**
|
|
63
97
|
* Schema.org SoftwareApplication. Only fields we have evidence for are emitted —
|
|
64
98
|
* empty author / URL / install links are omitted rather than faked.
|
|
@@ -85,5 +119,9 @@ export declare function jsonLdFromLanding(input: {
|
|
|
85
119
|
homepageUrl?: string;
|
|
86
120
|
/** Absolute https screenshot URLs (JSON-LD `screenshot`). */
|
|
87
121
|
screenshots?: string[];
|
|
122
|
+
/** `paid` drops the free offer when no real price is known. Default free. */
|
|
123
|
+
offersPrice?: '0' | 'paid';
|
|
124
|
+
/** Prices of the plans the page shows (bound Pay offers). */
|
|
125
|
+
paidOffers?: JsonLdPriceInput[];
|
|
88
126
|
}): JsonLdInput;
|
|
89
127
|
//# sourceMappingURL=json-ld.d.ts.map
|
package/dist/json-ld.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-ld.d.ts","sourceRoot":"","sources":["../src/json-ld.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,WAAW;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,WAAW,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,oBAAoB,CAAA;IAChC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mBAAmB,EAAE,oBAAoB,CAAA;IACzC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,MAAM,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"json-ld.d.ts","sourceRoot":"","sources":["../src/json-ld.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,WAAW;IAC3B,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gFAAgF;IAChF,WAAW,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,oCAAoC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,oBAAoB,CAAA;IAChC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mBAAmB,EAAE,oBAAoB,CAAA;IACzC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,cAAc,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAClD,MAAM,CAAC,EAAE,WAAW,GAAG,oBAAoB,GAAG,WAAW,EAAE,CAAA;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAA;CACnD;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,CAAC,EAAE;QACpB,OAAO,EAAE,wBAAwB,CAAA;QACjC,KAAK,EAAE,MAAM,CAAA;QACb,aAAa,EAAE,MAAM,CAAA;QACrB,eAAe,EAAE,KAAK,GAAG,KAAK,CAAA;KAC9B,CAAA;CACD;AAED,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,gBAAgB,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,WAAW,EAAE,CAAA;CACrB;AAKD;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,IAAI,EAAE,SAAS,gBAAgB,EAAE,GAC/B,WAAW,GAAG,oBAAoB,GAAG,WAAW,EAAE,GAAG,IAAI,CAiC3D;AAaD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,yBAAyB,CAuC5E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAG1D;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjE,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAClD,gBAAgB,EAAE,MAAM,CAAA;IACxB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,GAAG,GAAG,MAAM,CAAA;IAC1B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAC/B,GAAG,WAAW,CAuBd"}
|
package/dist/json-ld.js
CHANGED
|
@@ -19,6 +19,51 @@
|
|
|
19
19
|
* `shared-types/ai-visibility.ts` re-exports everything here, so existing
|
|
20
20
|
* `shared-types/ai-visibility.js` imports keep working.
|
|
21
21
|
*/
|
|
22
|
+
const PRICE_RE = /^\d{1,9}(\.\d{1,4})?$/;
|
|
23
|
+
const CURRENCY_RE = /^[A-Za-z]{3}$/;
|
|
24
|
+
/**
|
|
25
|
+
* Offers for real prices: one Offer, an AggregateOffer when every plan is in
|
|
26
|
+
* one currency, else a list. Malformed entries are dropped; null when none is left.
|
|
27
|
+
*/
|
|
28
|
+
export function jsonLdOffers(list) {
|
|
29
|
+
const offers = [];
|
|
30
|
+
for (const p of list) {
|
|
31
|
+
const price = p.price.trim();
|
|
32
|
+
const currency = p.currency.trim().toUpperCase();
|
|
33
|
+
if (!PRICE_RE.test(price) || !CURRENCY_RE.test(currency))
|
|
34
|
+
continue;
|
|
35
|
+
const offer = { '@type': 'Offer', price, priceCurrency: currency };
|
|
36
|
+
const name = (p.name ?? '').trim();
|
|
37
|
+
if (name)
|
|
38
|
+
offer.name = name;
|
|
39
|
+
if (p.period === 'month' || p.period === 'year') {
|
|
40
|
+
offer.priceSpecification = {
|
|
41
|
+
'@type': 'UnitPriceSpecification',
|
|
42
|
+
price,
|
|
43
|
+
priceCurrency: currency,
|
|
44
|
+
billingDuration: p.period === 'month' ? 'P1M' : 'P1Y',
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
offers.push(offer);
|
|
48
|
+
}
|
|
49
|
+
const [first] = offers;
|
|
50
|
+
if (!first)
|
|
51
|
+
return null;
|
|
52
|
+
if (offers.length === 1)
|
|
53
|
+
return first;
|
|
54
|
+
if (offers.some((o) => o.priceCurrency !== first.priceCurrency))
|
|
55
|
+
return offers;
|
|
56
|
+
const prices = offers.map((o) => Number(o.price));
|
|
57
|
+
const at = (n) => offers[prices.indexOf(n)]?.price ?? first.price;
|
|
58
|
+
return {
|
|
59
|
+
'@type': 'AggregateOffer',
|
|
60
|
+
lowPrice: at(Math.min(...prices)),
|
|
61
|
+
highPrice: at(Math.max(...prices)),
|
|
62
|
+
priceCurrency: first.priceCurrency,
|
|
63
|
+
offerCount: offers.length,
|
|
64
|
+
offers,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
22
67
|
function httpUrl(raw) {
|
|
23
68
|
const u = (raw ?? '').trim();
|
|
24
69
|
return /^https?:\/\//i.test(u) ? u : null;
|
|
@@ -63,7 +108,10 @@ export function generateJsonLd(input) {
|
|
|
63
108
|
json.operatingSystem = os.join(', ');
|
|
64
109
|
if (author)
|
|
65
110
|
json.author = { '@type': 'Organization', name: author };
|
|
66
|
-
|
|
111
|
+
const paid = jsonLdOffers(input.paidOffers ?? []);
|
|
112
|
+
if (paid)
|
|
113
|
+
json.offers = paid;
|
|
114
|
+
else if (input.offersPrice !== 'paid') {
|
|
67
115
|
json.offers = { '@type': 'Offer', price: '0', priceCurrency: 'USD' };
|
|
68
116
|
}
|
|
69
117
|
if (sameAs[0])
|
|
@@ -113,6 +161,10 @@ export function jsonLdFromLanding(input) {
|
|
|
113
161
|
out.websiteUrl = input.homepageUrl;
|
|
114
162
|
if (input.screenshots && input.screenshots.length > 0)
|
|
115
163
|
out.screenshots = input.screenshots;
|
|
164
|
+
if (input.offersPrice)
|
|
165
|
+
out.offersPrice = input.offersPrice;
|
|
166
|
+
if (input.paidOffers && input.paidOffers.length > 0)
|
|
167
|
+
out.paidOffers = input.paidOffers;
|
|
116
168
|
return out;
|
|
117
169
|
}
|
|
118
170
|
//# sourceMappingURL=json-ld.js.map
|
package/dist/json-ld.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-ld.js","sourceRoot":"","sources":["../src/json-ld.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"json-ld.js","sourceRoot":"","sources":["../src/json-ld.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact reads of the hosted landing page (DX report 2026-10-10 §2 row 15).
|
|
3
|
+
*
|
|
4
|
+
* `get_landing_page` returns the form the live version was rendered from. With
|
|
5
|
+
* eleven locales and an inline logo that form is ~80 KB — more than an MCP
|
|
6
|
+
* response carries. So the tool answers with a summary by default (what is
|
|
7
|
+
* live, which locales and sections exist, how big each part is) and returns
|
|
8
|
+
* the form only on request, optionally narrowed to some top-level fields and
|
|
9
|
+
* some translations.
|
|
10
|
+
*
|
|
11
|
+
* Shaped here, from the response the BFF already sends, rather than in the BFF:
|
|
12
|
+
* every BFF version returns the same full form, so this works against an old
|
|
13
|
+
* BFF and a new one alike, and the BFF contract does not change.
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
export declare const LANDING_READ_VIEWS: readonly ["summary", "full"];
|
|
17
|
+
export type LandingReadView = (typeof LANDING_READ_VIEWS)[number];
|
|
18
|
+
/** get_landing_page parameters besides projectId. */
|
|
19
|
+
export declare const LANDING_READ_SHAPE: {
|
|
20
|
+
view: z.ZodOptional<z.ZodEnum<["summary", "full"]>>;
|
|
21
|
+
fields: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
22
|
+
locales: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
23
|
+
};
|
|
24
|
+
export interface LandingReadOptions {
|
|
25
|
+
view?: LandingReadView;
|
|
26
|
+
/** Top-level form keys to keep in a full read (e.g. `sections`, `seo`). */
|
|
27
|
+
fields?: readonly string[];
|
|
28
|
+
/** Translations to keep in `form.locales` in a full read (`de`, `pt-BR`). The base content is always kept. */
|
|
29
|
+
locales?: readonly string[];
|
|
30
|
+
}
|
|
31
|
+
type Json = Record<string, unknown>;
|
|
32
|
+
/** What an agent decides from before asking for the form itself. */
|
|
33
|
+
export declare function summarizeLandingForm(form: Json): {
|
|
34
|
+
bytes: number;
|
|
35
|
+
schemaVersion: {};
|
|
36
|
+
extensionName: unknown;
|
|
37
|
+
tagline: unknown;
|
|
38
|
+
theme: unknown;
|
|
39
|
+
accentColor: unknown;
|
|
40
|
+
defaultLocale: string;
|
|
41
|
+
translations: {
|
|
42
|
+
locale: string;
|
|
43
|
+
bytes: number;
|
|
44
|
+
}[];
|
|
45
|
+
sections: {
|
|
46
|
+
bytes: number;
|
|
47
|
+
hidden?: boolean | undefined;
|
|
48
|
+
index: number;
|
|
49
|
+
id: unknown;
|
|
50
|
+
type: unknown;
|
|
51
|
+
}[];
|
|
52
|
+
links: {
|
|
53
|
+
[k: string]: string;
|
|
54
|
+
};
|
|
55
|
+
logo: {
|
|
56
|
+
kind: "svg" | "data-url" | "url" | "none";
|
|
57
|
+
bytes: number;
|
|
58
|
+
};
|
|
59
|
+
features: number;
|
|
60
|
+
screenshots: number;
|
|
61
|
+
fields: {
|
|
62
|
+
field: string;
|
|
63
|
+
bytes: number;
|
|
64
|
+
}[];
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Shape a `getLandingPage` response for the agent. Anything that is not the
|
|
68
|
+
* expected `{ page, url, form }` object passes through untouched.
|
|
69
|
+
*/
|
|
70
|
+
export declare function shapeLandingRead(result: unknown, options?: LandingReadOptions): unknown;
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=landing-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"landing-read.d.ts","sourceRoot":"","sources":["../src/landing-read.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,kBAAkB,8BAA+B,CAAA;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEjE,qDAAqD;AACrD,eAAO,MAAM,kBAAkB;;;;CAqB9B,CAAA;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,8GAA8G;IAC9G,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC3B;AAED,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AA2BnC,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI;;;;;;;;;;;;;;;;;;;;;;;cARV,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM;eAAS,MAAM;;;;;;;;EA0CtF;AA0BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAwB3F"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact reads of the hosted landing page (DX report 2026-10-10 §2 row 15).
|
|
3
|
+
*
|
|
4
|
+
* `get_landing_page` returns the form the live version was rendered from. With
|
|
5
|
+
* eleven locales and an inline logo that form is ~80 KB — more than an MCP
|
|
6
|
+
* response carries. So the tool answers with a summary by default (what is
|
|
7
|
+
* live, which locales and sections exist, how big each part is) and returns
|
|
8
|
+
* the form only on request, optionally narrowed to some top-level fields and
|
|
9
|
+
* some translations.
|
|
10
|
+
*
|
|
11
|
+
* Shaped here, from the response the BFF already sends, rather than in the BFF:
|
|
12
|
+
* every BFF version returns the same full form, so this works against an old
|
|
13
|
+
* BFF and a new one alike, and the BFF contract does not change.
|
|
14
|
+
*/
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
import { normalizeLandingLocale } from './landing-sections.js';
|
|
17
|
+
export const LANDING_READ_VIEWS = ['summary', 'full'];
|
|
18
|
+
/** get_landing_page parameters besides projectId. */
|
|
19
|
+
export const LANDING_READ_SHAPE = {
|
|
20
|
+
view: z
|
|
21
|
+
.enum(LANDING_READ_VIEWS)
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('"summary" (default): what is live and how big each part of the form is. "full": the form itself.'),
|
|
24
|
+
fields: z
|
|
25
|
+
.array(z.string().max(40))
|
|
26
|
+
.max(40)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe('With view "full": top-level form keys to return, e.g. ["sections", "seo"] (names and sizes are in formSummary.fields). Default: all.'),
|
|
29
|
+
locales: z
|
|
30
|
+
.array(z.string().max(35))
|
|
31
|
+
.max(100)
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('With view "full": translations to keep in form.locales, e.g. ["de"]; [] drops them all. The base content is part of every full read.'),
|
|
34
|
+
};
|
|
35
|
+
const isObject = (value) => Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
36
|
+
const bytesOf = (value) => value === undefined ? 0 : new TextEncoder().encode(JSON.stringify(value)).length;
|
|
37
|
+
const LINK_FIELDS = [
|
|
38
|
+
'homepageUrl',
|
|
39
|
+
'chromeUrl',
|
|
40
|
+
'firefoxUrl',
|
|
41
|
+
'edgeUrl',
|
|
42
|
+
'privacyPolicyUrl',
|
|
43
|
+
'supportUrl',
|
|
44
|
+
'uninstallUrl',
|
|
45
|
+
'termsUrl',
|
|
46
|
+
];
|
|
47
|
+
/** `bytes` is measured like every other size here: the field as JSON (quotes included). */
|
|
48
|
+
function logoOf(form) {
|
|
49
|
+
if (typeof form.logoSvg === 'string' && form.logoSvg)
|
|
50
|
+
return { kind: 'svg', bytes: bytesOf(form.logoSvg) };
|
|
51
|
+
if (typeof form.logoUrl === 'string' && form.logoUrl)
|
|
52
|
+
return { kind: form.logoUrl.startsWith('data:') ? 'data-url' : 'url', bytes: bytesOf(form.logoUrl) };
|
|
53
|
+
return { kind: 'none', bytes: 0 };
|
|
54
|
+
}
|
|
55
|
+
/** What an agent decides from before asking for the form itself. */
|
|
56
|
+
export function summarizeLandingForm(form) {
|
|
57
|
+
const sections = Array.isArray(form.sections) ? form.sections : [];
|
|
58
|
+
const locales = isObject(form.locales) ? form.locales : {};
|
|
59
|
+
const links = Object.fromEntries(LINK_FIELDS.flatMap((key) => (typeof form[key] === 'string' && form[key] ? [[key, form[key]]] : [])));
|
|
60
|
+
return {
|
|
61
|
+
bytes: bytesOf(form),
|
|
62
|
+
schemaVersion: form.schemaVersion ?? 1,
|
|
63
|
+
extensionName: form.extensionName,
|
|
64
|
+
tagline: form.tagline,
|
|
65
|
+
theme: form.theme,
|
|
66
|
+
accentColor: form.accentColor,
|
|
67
|
+
defaultLocale: normalizeLandingLocale(form.defaultLocale) ?? 'en',
|
|
68
|
+
translations: Object.entries(locales).map(([locale, content]) => ({ locale, bytes: bytesOf(content) })),
|
|
69
|
+
sections: sections.map((section, index) => {
|
|
70
|
+
const s = isObject(section) ? section : {};
|
|
71
|
+
return {
|
|
72
|
+
index,
|
|
73
|
+
id: s.id,
|
|
74
|
+
type: s.type,
|
|
75
|
+
...(s.hidden ? { hidden: true } : {}),
|
|
76
|
+
bytes: bytesOf(section),
|
|
77
|
+
};
|
|
78
|
+
}),
|
|
79
|
+
links,
|
|
80
|
+
logo: logoOf(form),
|
|
81
|
+
features: Array.isArray(form.features) ? form.features.length : 0,
|
|
82
|
+
screenshots: Array.isArray(form.screenshots) ? form.screenshots.length : 0,
|
|
83
|
+
// Largest first: the parts worth leaving out of a full read.
|
|
84
|
+
fields: Object.keys(form)
|
|
85
|
+
.map((field) => ({ field, bytes: bytesOf(form[field]) }))
|
|
86
|
+
.sort((a, b) => b.bytes - a.bytes),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function narrowForm(form, fields, locales) {
|
|
90
|
+
let out = form;
|
|
91
|
+
if (fields?.length) {
|
|
92
|
+
// schemaVersion decides how the rest reads, so it always comes along; asking
|
|
93
|
+
// for translations by `locales` keeps `locales` even when `fields` omits it.
|
|
94
|
+
const keep = new Set([...fields, 'schemaVersion', ...(locales ? ['locales'] : [])]);
|
|
95
|
+
out = Object.fromEntries(Object.entries(out).filter(([key]) => keep.has(key)));
|
|
96
|
+
}
|
|
97
|
+
if (locales && isObject(out.locales)) {
|
|
98
|
+
const wanted = new Set(locales.map((l) => normalizeLandingLocale(l) ?? l));
|
|
99
|
+
out = {
|
|
100
|
+
...out,
|
|
101
|
+
locales: Object.fromEntries(Object.entries(out.locales).filter(([key]) => wanted.has(normalizeLandingLocale(key) ?? key))),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Shape a `getLandingPage` response for the agent. Anything that is not the
|
|
108
|
+
* expected `{ page, url, form }` object passes through untouched.
|
|
109
|
+
*/
|
|
110
|
+
export function shapeLandingRead(result, options = {}) {
|
|
111
|
+
if (!isObject(result) || !('form' in result))
|
|
112
|
+
return result;
|
|
113
|
+
const form = isObject(result.form) ? result.form : null;
|
|
114
|
+
if ((options.view ?? 'summary') === 'full') {
|
|
115
|
+
const narrowed = form ? narrowForm(form, options.fields, options.locales) : result.form;
|
|
116
|
+
return {
|
|
117
|
+
...result,
|
|
118
|
+
form: narrowed,
|
|
119
|
+
...(form && narrowed !== form
|
|
120
|
+
? { formBytes: { full: bytesOf(form), returned: bytesOf(narrowed) } }
|
|
121
|
+
: {}),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
const { form: _form, ...rest } = result;
|
|
125
|
+
return {
|
|
126
|
+
...rest,
|
|
127
|
+
view: 'summary',
|
|
128
|
+
formSummary: form ? summarizeLandingForm(form) : null,
|
|
129
|
+
...(form
|
|
130
|
+
? {
|
|
131
|
+
next: 'Pass view "full" for the form; add fields (top-level keys from formSummary.fields) and locales to read only part of it.',
|
|
132
|
+
}
|
|
133
|
+
: {}),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=landing-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"landing-read.js","sourceRoot":"","sources":["../src/landing-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
* - theme tokens: palette per light/dark (or `auto` = both, by
|
|
14
14
|
* prefers-color-scheme), fonts from LANDING_FONTS, radius, width;
|
|
15
15
|
* - per-locale content (`locales`) rendered as one page per locale with
|
|
16
|
-
* hreflang alternates;
|
|
17
|
-
* - SEO / Open Graph fields and JSON-LD (SoftwareApplication + FAQPage)
|
|
16
|
+
* hreflang alternates and `dir="rtl"` for right-to-left languages;
|
|
17
|
+
* - SEO / Open Graph fields and JSON-LD (SoftwareApplication + FAQPage),
|
|
18
|
+
* whose `offers` carry the real prices of plans bound to Pay offers.
|
|
18
19
|
*
|
|
19
20
|
* Output rules are the v1 rules: no JavaScript, every string HTML-escaped,
|
|
20
21
|
* links scheme-clamped (safeHref), images clamped (safeImageSrc), CSS built
|
|
@@ -245,6 +246,8 @@ export declare const LANDING_UI_DEFAULTS: {
|
|
|
245
246
|
readonly lifetime: "lifetime";
|
|
246
247
|
readonly source: "Source";
|
|
247
248
|
readonly languages: "Languages";
|
|
249
|
+
/** Alt text of the hero logo; `{name}` is replaced by the extension name. */
|
|
250
|
+
readonly logoAlt: "{name} logo";
|
|
248
251
|
};
|
|
249
252
|
export type LandingUiKey = keyof typeof LANDING_UI_DEFAULTS;
|
|
250
253
|
export interface LandingLocaleContent {
|
|
@@ -293,6 +296,8 @@ export interface LandingProblem {
|
|
|
293
296
|
* workflow. Null when the value is not a language tag.
|
|
294
297
|
*/
|
|
295
298
|
export declare function normalizeLandingLocale(raw: unknown): string | null;
|
|
299
|
+
/** `<html dir>` for a locale page: `rtl` for Arabic, Hebrew, Persian, Urdu and other RTL scripts. */
|
|
300
|
+
export declare function landingLocaleDir(locale: string): 'ltr' | 'rtl';
|
|
296
301
|
/** URL path segment for a locale: lowercase BCP 47 (`pt-br`). */
|
|
297
302
|
export declare function landingLocaleSlug(locale: string): string;
|
|
298
303
|
export declare function landingDefaultLocale(form: LandingForm): string;
|
|
@@ -311,9 +316,22 @@ export declare function contrastRatio(a: string, b: string): number | null;
|
|
|
311
316
|
* landingPageWarnings() as warnings — v1 validation is unchanged.
|
|
312
317
|
*/
|
|
313
318
|
export declare function landingFormProblems(form: LandingForm): LandingProblem[];
|
|
319
|
+
/** A live Extenshi Pay offer as the renderer needs it (the BFF's LandingPayOffer fits). */
|
|
320
|
+
export interface LandingRenderOffer {
|
|
321
|
+
sku: string;
|
|
322
|
+
/** Minor units, as stored on the offer (formatLandingPrice divides by 100). */
|
|
323
|
+
amountMinor: number;
|
|
324
|
+
currency: string;
|
|
325
|
+
}
|
|
314
326
|
export interface RenderLandingOptions {
|
|
315
327
|
/** Locale to render; default the form's default locale. */
|
|
316
328
|
locale?: string;
|
|
329
|
+
/**
|
|
330
|
+
* The project's active Pay offers (hosted rendering only). Plans bound to
|
|
331
|
+
* one by offerSku get a JSON-LD Offer with its real price; without them a
|
|
332
|
+
* page that sells something claims no price rather than a free one.
|
|
333
|
+
*/
|
|
334
|
+
payOffers?: readonly LandingRenderOffer[];
|
|
317
335
|
}
|
|
318
336
|
/**
|
|
319
337
|
* The one entry point every surface calls (dojo preview, BFF hosting, MCP and
|
|
@@ -321,7 +339,7 @@ export interface RenderLandingOptions {
|
|
|
321
339
|
*/
|
|
322
340
|
export declare function renderLandingForm(form: LandingForm, opts?: RenderLandingOptions): string;
|
|
323
341
|
/** Every locale's page: `[{ locale, path, html }]`, default locale first (path ''). */
|
|
324
|
-
export declare function renderLandingLocales(form: LandingForm): {
|
|
342
|
+
export declare function renderLandingLocales(form: LandingForm, opts?: Omit<RenderLandingOptions, 'locale'>): {
|
|
325
343
|
locale: string;
|
|
326
344
|
slug: string;
|
|
327
345
|
html: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"landing-sections.d.ts","sourceRoot":"","sources":["../src/landing-sections.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"landing-sections.d.ts","sourceRoot":"","sources":["../src/landing-sections.ts"],"names":[],"mappings":"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"}
|