@extenshi/cli 0.23.1 → 0.25.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 +1 -1
- package/dist/amo-source.d.ts +88 -17
- package/dist/amo-source.d.ts.map +1 -1
- package/dist/amo-source.js +442 -116
- package/dist/amo-source.js.map +1 -1
- package/dist/amowebstore-md.d.ts +26 -0
- package/dist/amowebstore-md.d.ts.map +1 -1
- package/dist/amowebstore-md.js +32 -3
- package/dist/amowebstore-md.js.map +1 -1
- package/dist/auto-update.d.ts +46 -3
- package/dist/auto-update.d.ts.map +1 -1
- package/dist/auto-update.js +94 -19
- package/dist/auto-update.js.map +1 -1
- package/dist/chromewebstore-md.d.ts +7 -0
- package/dist/chromewebstore-md.d.ts.map +1 -1
- package/dist/chromewebstore-md.js +20 -3
- package/dist/chromewebstore-md.js.map +1 -1
- package/dist/cli.js +73 -20
- package/dist/cli.js.map +1 -1
- package/dist/compliance-review.d.ts +5 -1
- package/dist/compliance-review.d.ts.map +1 -1
- package/dist/compliance-review.js +10 -5
- package/dist/compliance-review.js.map +1 -1
- package/dist/cws-policies.d.ts.map +1 -1
- package/dist/cws-policies.js +4 -0
- package/dist/cws-policies.js.map +1 -1
- package/dist/edgewebstore-md.d.ts +14 -0
- package/dist/edgewebstore-md.d.ts.map +1 -1
- package/dist/edgewebstore-md.js +20 -5
- package/dist/edgewebstore-md.js.map +1 -1
- package/dist/evidence-ingest.d.ts +67 -5
- package/dist/evidence-ingest.d.ts.map +1 -1
- package/dist/evidence-ingest.js +146 -21
- package/dist/evidence-ingest.js.map +1 -1
- package/dist/generate-listing.d.ts +18 -6
- package/dist/generate-listing.d.ts.map +1 -1
- package/dist/generate-listing.js +62 -19
- package/dist/generate-listing.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-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/listing-checks.d.ts +15 -9
- package/dist/listing-checks.d.ts.map +1 -1
- package/dist/listing-checks.js +54 -46
- package/dist/listing-checks.js.map +1 -1
- package/dist/listing-data-flows.d.ts +140 -0
- package/dist/listing-data-flows.d.ts.map +1 -0
- package/dist/listing-data-flows.js +454 -0
- package/dist/listing-data-flows.js.map +1 -0
- package/dist/listing.d.ts +48 -0
- package/dist/listing.d.ts.map +1 -1
- package/dist/listing.js +201 -23
- package/dist/listing.js.map +1 -1
- package/dist/localize-parity.d.ts +26 -0
- package/dist/localize-parity.d.ts.map +1 -0
- package/dist/localize-parity.js +227 -0
- package/dist/localize-parity.js.map +1 -0
- package/dist/localize.d.ts +6 -0
- package/dist/localize.d.ts.map +1 -1
- package/dist/localize.js +4 -4
- package/dist/localize.js.map +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/media.js +1 -2
- package/dist/media.js.map +1 -1
- package/dist/package.d.ts +13 -0
- package/dist/package.d.ts.map +1 -1
- package/dist/package.js +1 -1
- package/dist/package.js.map +1 -1
- package/dist/page.d.ts +16 -0
- package/dist/page.d.ts.map +1 -1
- package/dist/page.js +49 -4
- package/dist/page.js.map +1 -1
- package/dist/permission-justifications.d.ts +19 -1
- package/dist/permission-justifications.d.ts.map +1 -1
- package/dist/permission-justifications.js +129 -0
- package/dist/permission-justifications.js.map +1 -1
- package/dist/png.d.ts +40 -0
- package/dist/png.d.ts.map +1 -0
- package/dist/png.js +266 -0
- package/dist/png.js.map +1 -0
- package/dist/review-checks.d.ts +54 -13
- package/dist/review-checks.d.ts.map +1 -1
- package/dist/review-checks.js +367 -56
- package/dist/review-checks.js.map +1 -1
- package/dist/review-risk.d.ts +8 -3
- package/dist/review-risk.d.ts.map +1 -1
- package/dist/review-risk.js +14 -4
- package/dist/review-risk.js.map +1 -1
- package/dist/review-stores.d.ts +63 -0
- package/dist/review-stores.d.ts.map +1 -0
- package/dist/review-stores.js +92 -0
- package/dist/review-stores.js.map +1 -0
- package/dist/screenshots-scenes.d.ts +13 -0
- package/dist/screenshots-scenes.d.ts.map +1 -1
- package/dist/screenshots-scenes.js +20 -2
- package/dist/screenshots-scenes.js.map +1 -1
- package/dist/screenshots.d.ts +6 -4
- package/dist/screenshots.d.ts.map +1 -1
- package/dist/screenshots.js +31 -11
- package/dist/screenshots.js.map +1 -1
- package/dist/smoke.d.ts +54 -6
- package/dist/smoke.d.ts.map +1 -1
- package/dist/smoke.js +302 -26
- package/dist/smoke.js.map +1 -1
- package/dist/store-assets.d.ts +20 -3
- package/dist/store-assets.d.ts.map +1 -1
- package/dist/store-assets.js +17 -7
- package/dist/store-assets.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-listing.js","sourceRoot":"","sources":["../src/generate-listing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"generate-listing.js","sourceRoot":"","sources":["../src/generate-listing.ts"],"names":[],"mappings":"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"}
|
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":"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"}
|
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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"}
|
|
@@ -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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"}
|
package/dist/landing-sections.js
CHANGED
|
@@ -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
|
|
@@ -120,6 +121,8 @@ export const LANDING_UI_DEFAULTS = {
|
|
|
120
121
|
lifetime: 'lifetime',
|
|
121
122
|
source: 'Source',
|
|
122
123
|
languages: 'Languages',
|
|
124
|
+
/** Alt text of the hero logo; `{name}` is replaced by the extension name. */
|
|
125
|
+
logoAlt: '{name} logo',
|
|
123
126
|
};
|
|
124
127
|
// ─── Locales ────────────────────────────────────────────────────────────────
|
|
125
128
|
const LOCALE_RE = /^([a-zA-Z]{2,3})(?:[-_]([a-zA-Z]{4}))?(?:[-_]([a-zA-Z]{2}|\d{3}))?$/;
|
|
@@ -140,6 +143,14 @@ export function normalizeLandingLocale(raw) {
|
|
|
140
143
|
tag += `-${region.toUpperCase()}`;
|
|
141
144
|
return tag;
|
|
142
145
|
}
|
|
146
|
+
// Same set as RTL_LANGUAGES in shared-types/end-user-locale.ts (this file is
|
|
147
|
+
// copied into the CLI and MCP packages, so it cannot import it; a test pins them).
|
|
148
|
+
const RTL_LANGUAGES = new Set(['ar', 'he', 'fa', 'ur', 'ps', 'sd', 'ug', 'yi', 'dv']);
|
|
149
|
+
/** `<html dir>` for a locale page: `rtl` for Arabic, Hebrew, Persian, Urdu and other RTL scripts. */
|
|
150
|
+
export function landingLocaleDir(locale) {
|
|
151
|
+
const lang = normalizeLandingLocale(locale)?.split('-')[0];
|
|
152
|
+
return lang && RTL_LANGUAGES.has(lang) ? 'rtl' : 'ltr';
|
|
153
|
+
}
|
|
143
154
|
/** URL path segment for a locale: lowercase BCP 47 (`pt-br`). */
|
|
144
155
|
export function landingLocaleSlug(locale) {
|
|
145
156
|
return (normalizeLandingLocale(locale) ?? locale).toLowerCase();
|
|
@@ -530,10 +541,12 @@ function uiProblems(out, path, ui) {
|
|
|
530
541
|
}
|
|
531
542
|
for (const [key, value] of Object.entries(ui)) {
|
|
532
543
|
if (!hasOwn(LANDING_UI_DEFAULTS, key)) {
|
|
544
|
+
// A warning, not an error: the renderer ignores unknown keys, and a form drafted by a
|
|
545
|
+
// newer BFF (with a key added since) must still publish on an older replica mid-rollout.
|
|
533
546
|
out.push({
|
|
534
547
|
path: `${path}.${key}`,
|
|
535
|
-
severity: '
|
|
536
|
-
message: `unknown ui string "${key}"`,
|
|
548
|
+
severity: 'warning',
|
|
549
|
+
message: `unknown ui string "${key}" is ignored`,
|
|
537
550
|
fix: `Use one of: ${Object.keys(LANDING_UI_DEFAULTS).join(', ')}.`,
|
|
538
551
|
});
|
|
539
552
|
}
|
|
@@ -720,9 +733,37 @@ export function renderLandingForm(form, opts = {}) {
|
|
|
720
733
|
const locales = landingLocales(form);
|
|
721
734
|
const requested = normalizeLandingLocale(opts.locale);
|
|
722
735
|
const locale = requested && locales.includes(requested) ? requested : def;
|
|
723
|
-
return renderV2(localizeLandingForm(form, locale), form, locale, locales, def);
|
|
736
|
+
return renderV2(localizeLandingForm(form, locale), form, locale, locales, def, opts.payOffers ?? []);
|
|
737
|
+
}
|
|
738
|
+
/**
|
|
739
|
+
* JSON-LD prices: one per visible plan bound to a live Pay offer. `paid` is
|
|
740
|
+
* set whenever the page sells something it cannot price exactly (an unbound
|
|
741
|
+
* or unresolved plan, or offers with no pricing section), so the free default
|
|
742
|
+
* offer is dropped instead of claiming price 0.
|
|
743
|
+
*/
|
|
744
|
+
function landingJsonLdPrices(sections, payOffers) {
|
|
745
|
+
const bySku = new Map(payOffers.map((o) => [o.sku, o]));
|
|
746
|
+
const plans = sections.flatMap((s) => s.type === 'pricing' ? arr(s.plans, LANDING_V2_LIMITS.plans) : []);
|
|
747
|
+
const paidOffers = [];
|
|
748
|
+
let sells = payOffers.length > 0;
|
|
749
|
+
for (const plan of plans) {
|
|
750
|
+
if (!plan || typeof plan !== 'object')
|
|
751
|
+
continue;
|
|
752
|
+
const offer = bySku.get(str(plan.offerSku));
|
|
753
|
+
if (offer && Number.isFinite(offer.amountMinor) && offer.amountMinor >= 0) {
|
|
754
|
+
paidOffers.push({
|
|
755
|
+
name: str(plan.name),
|
|
756
|
+
price: (offer.amountMinor / 100).toFixed(2),
|
|
757
|
+
currency: offer.currency,
|
|
758
|
+
...(plan.period ? { period: plan.period } : {}),
|
|
759
|
+
});
|
|
760
|
+
}
|
|
761
|
+
if (str(plan.offerSku) || (str(plan.name) && str(plan.price)))
|
|
762
|
+
sells = true;
|
|
763
|
+
}
|
|
764
|
+
return { paidOffers, paid: sells };
|
|
724
765
|
}
|
|
725
|
-
function renderV2(form, base, locale, locales, def) {
|
|
766
|
+
function renderV2(form, base, locale, locales, def, payOffers) {
|
|
726
767
|
const ui = (key) => str(form.ui?.[key]) || LANDING_UI_DEFAULTS[key];
|
|
727
768
|
const rawName = str(form.extensionName) || 'My Extension';
|
|
728
769
|
const name = esc(rawName);
|
|
@@ -748,8 +789,9 @@ function renderV2(form, base, locale, locales, def) {
|
|
|
748
789
|
const logoSrc = svg && !landingLogoSvgProblem(svg)
|
|
749
790
|
? `data:image/svg+xml,${encodeURIComponent(svg)}`
|
|
750
791
|
: safeImageSrc(form.logoUrl);
|
|
792
|
+
const logoAlt = ui('logoAlt').replace(/\{name\}/g, rawName);
|
|
751
793
|
const logo = logoSrc
|
|
752
|
-
? `<div class="logo"><img src="${logoSrc}" alt="${
|
|
794
|
+
? `<div class="logo"><img src="${logoSrc}" alt="${esc(logoAlt)}" width="64" height="64" /></div>`
|
|
753
795
|
: `<div class="logo monogram" aria-hidden="true">${esc(rawName.charAt(0).toUpperCase() || 'E')}</div>`;
|
|
754
796
|
const heading = (s, key) => {
|
|
755
797
|
const title = str(s.title) || (key ? ui(key) : '');
|
|
@@ -902,6 +944,7 @@ function renderV2(form, base, locale, locales, def) {
|
|
|
902
944
|
`<link rel="alternate" hreflang="x-default" href="${esc(homeBase)}" />`,
|
|
903
945
|
]
|
|
904
946
|
: [];
|
|
947
|
+
const prices = landingJsonLdPrices(sections, payOffers);
|
|
905
948
|
const app = generateJsonLd(jsonLdFromLanding({
|
|
906
949
|
extensionName: rawName,
|
|
907
950
|
tagline,
|
|
@@ -913,6 +956,8 @@ function renderV2(form, base, locale, locales, def) {
|
|
|
913
956
|
privacyPolicyUrl: str(form.privacyPolicyUrl),
|
|
914
957
|
homepageUrl: pageUrl || undefined,
|
|
915
958
|
screenshots: shotUrls,
|
|
959
|
+
offersPrice: prices.paid ? 'paid' : '0',
|
|
960
|
+
paidOffers: prices.paidOffers,
|
|
916
961
|
}));
|
|
917
962
|
if (str(seo.authorName))
|
|
918
963
|
app.author = { '@type': 'Organization', name: str(seo.authorName) };
|
|
@@ -957,8 +1002,9 @@ function renderV2(form, base, locale, locales, def) {
|
|
|
957
1002
|
const footer = projectLinks(form, ui);
|
|
958
1003
|
const bodyFont = font(t.bodyFont);
|
|
959
1004
|
const headingFont = t.headingFont ? font(t.headingFont) : bodyFont;
|
|
1005
|
+
const dir = landingLocaleDir(locale);
|
|
960
1006
|
return `<!doctype html>
|
|
961
|
-
<html lang="${esc(locale)}">
|
|
1007
|
+
<html lang="${esc(locale)}"${dir === 'rtl' ? ' dir="rtl"' : ''}>
|
|
962
1008
|
<head>
|
|
963
1009
|
<meta charset="utf-8" />
|
|
964
1010
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
@@ -971,8 +1017,8 @@ ${head}
|
|
|
971
1017
|
h1, h2, h3 { font-family: var(--font-heading); line-height: 1.2; }
|
|
972
1018
|
a { color: var(--accent); }
|
|
973
1019
|
.wrap { max-width: var(--width); margin: 0 auto; padding: 0 24px; }
|
|
974
|
-
.langs { padding: 16px 0 0; text-align:
|
|
975
|
-
.langs a, .langs span { margin-
|
|
1020
|
+
.langs { padding: 16px 0 0; text-align: end; font-size: 0.85rem; color: var(--muted); }
|
|
1021
|
+
.langs a, .langs span { margin-inline-start: 10px; }
|
|
976
1022
|
.hero { padding: 88px 0 56px; text-align: center; }
|
|
977
1023
|
.logo { width: 88px; height: 88px; margin: 0 auto 28px; border-radius: calc(var(--radius) * 1.8); display: flex; align-items: center; justify-content: center; background: var(--surface); border: 1px solid var(--border); overflow: hidden; }
|
|
978
1024
|
.logo img { width: 64px; height: 64px; object-fit: contain; }
|
|
@@ -995,15 +1041,15 @@ ${head}
|
|
|
995
1041
|
.shot img { display: block; width: 100%; height: auto; border-radius: var(--radius); border: 1px solid var(--border); }
|
|
996
1042
|
.shot figcaption { margin-top: 8px; font-size: 0.85rem; color: var(--muted); text-align: center; }
|
|
997
1043
|
.step-list { list-style: none; counter-reset: step; display: grid; gap: 14px; max-width: 680px; margin: 0 auto; }
|
|
998
|
-
.step-list li { counter-increment: step; position: relative; padding: 18px
|
|
999
|
-
.step-list li::before { content: counter(step); position: absolute;
|
|
1044
|
+
.step-list li { counter-increment: step; position: relative; padding: 18px; padding-inline-start: 64px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); }
|
|
1045
|
+
.step-list li::before { content: counter(step); position: absolute; inset-inline-start: 18px; top: 18px; width: 30px; height: 30px; border-radius: 50%; background: var(--accent); color: var(--accent-text); font-weight: 700; display: flex; align-items: center; justify-content: center; }
|
|
1000
1046
|
.step-list p { color: var(--muted); font-size: 0.92rem; }
|
|
1001
1047
|
.plan { display: flex; flex-direction: column; gap: 10px; }
|
|
1002
1048
|
.plan.highlighted { border-color: var(--accent); }
|
|
1003
1049
|
.plan .badge { font-size: 0.75rem; font-weight: 700; color: var(--accent); text-transform: uppercase; letter-spacing: 0.04em; }
|
|
1004
1050
|
.plan .price { font-size: 1.6rem; font-weight: 700; color: var(--fg); }
|
|
1005
1051
|
.plan .period { font-size: 0.9rem; font-weight: 400; color: var(--muted); }
|
|
1006
|
-
.plan ul { padding-
|
|
1052
|
+
.plan ul { padding-inline-start: 18px; }
|
|
1007
1053
|
.plan .cta { margin-top: auto; }
|
|
1008
1054
|
.note { margin-top: 16px; text-align: center; font-size: 0.85rem; color: var(--muted); }
|
|
1009
1055
|
.faq details { max-width: 720px; margin: 0 auto 10px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 14px 18px; }
|
|
@@ -1013,8 +1059,8 @@ ${head}
|
|
|
1013
1059
|
.quote figcaption { margin-top: 12px; font-size: 0.85rem; color: var(--muted); }
|
|
1014
1060
|
.releases { list-style: none; max-width: 720px; margin: 0 auto; }
|
|
1015
1061
|
.releases > li { padding: 14px 0; border-bottom: 1px solid var(--border); }
|
|
1016
|
-
.releases time { font-size: 0.85rem; font-weight: 400; color: var(--muted); margin-
|
|
1017
|
-
.releases ul { padding-
|
|
1062
|
+
.releases time { font-size: 0.85rem; font-weight: 400; color: var(--muted); margin-inline-start: 8px; }
|
|
1063
|
+
.releases ul { padding-inline-start: 18px; color: var(--muted); }
|
|
1018
1064
|
.link-list { list-style: none; display: flex; flex-wrap: wrap; gap: 10px 22px; justify-content: center; }
|
|
1019
1065
|
footer { border-top: 1px solid var(--border); margin-top: 24px; padding: 28px 0 48px; text-align: center; font-size: 0.85rem; color: var(--muted); }
|
|
1020
1066
|
footer a { color: var(--muted); margin: 0 10px; }
|
|
@@ -1051,12 +1097,12 @@ function projectLinks(form, ui) {
|
|
|
1051
1097
|
return out;
|
|
1052
1098
|
}
|
|
1053
1099
|
/** Every locale's page: `[{ locale, path, html }]`, default locale first (path ''). */
|
|
1054
|
-
export function renderLandingLocales(form) {
|
|
1100
|
+
export function renderLandingLocales(form, opts = {}) {
|
|
1055
1101
|
const def = landingDefaultLocale(form);
|
|
1056
1102
|
return landingLocales(form).map((locale) => ({
|
|
1057
1103
|
locale,
|
|
1058
1104
|
slug: locale === def ? '' : landingLocaleSlug(locale),
|
|
1059
|
-
html: renderLandingForm(form, { locale }),
|
|
1105
|
+
html: renderLandingForm(form, { ...opts, locale }),
|
|
1060
1106
|
}));
|
|
1061
1107
|
}
|
|
1062
1108
|
/** Format a Pay offer amount for a pricing card ("$4.99", "4,99 €"). */
|