pabal-web-mcp 0.1.6 → 1.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 +21 -13
- package/dist/bin/mcp-server.js +391 -5
- package/dist/chunk-OCOFNMN2.js +1058 -0
- package/dist/index.d.ts +144 -52
- package/dist/index.js +1 -1
- package/package.json +3 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { androidpublisher_v3 } from '@googleapis/androidpublisher';
|
|
2
|
+
import { AppStoreVersionAttributes, AppStoreVersionLocalizationAttributes, AppInfoLocalizationAttributes, ScreenshotDisplayType } from 'appstore-connect-sdk/openapi';
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* Unified locale system for ASO (App Store Optimization)
|
|
3
6
|
* Consolidates App Store Connect and Google Play Console locale codes
|
|
@@ -70,21 +73,32 @@ declare function isAppStoreLocale(locale: string): locale is AppStoreLocale;
|
|
|
70
73
|
* Check if locale is supported by Google Play
|
|
71
74
|
*/
|
|
72
75
|
declare function isGooglePlayLocale(locale: string): locale is GooglePlayLocale;
|
|
76
|
+
/**
|
|
77
|
+
* Google Play Android Publisher base types
|
|
78
|
+
*/
|
|
79
|
+
type GooglePlayListing = androidpublisher_v3.Schema$Listing;
|
|
80
|
+
type GooglePlayImageType = NonNullable<androidpublisher_v3.Params$Resource$Edits$Images$List["imageType"]>;
|
|
81
|
+
type GooglePlayScreenshotType = Extract<GooglePlayImageType, "phoneScreenshots" | "sevenInchScreenshots" | "tenInchScreenshots" | "tvScreenshots" | "wearScreenshots">;
|
|
82
|
+
/**
|
|
83
|
+
* Google Play screenshots keyed by Android Publisher imageType
|
|
84
|
+
* Includes legacy aliases for existing data structures
|
|
85
|
+
*/
|
|
86
|
+
interface GooglePlayScreenshots extends Partial<Record<GooglePlayScreenshotType, string[]>> {
|
|
87
|
+
phone?: string[];
|
|
88
|
+
tablet?: string[];
|
|
89
|
+
tablet7?: string[];
|
|
90
|
+
tablet10?: string[];
|
|
91
|
+
tv?: string[];
|
|
92
|
+
wear?: string[];
|
|
93
|
+
}
|
|
73
94
|
/**
|
|
74
95
|
* Google Play Store ASO data
|
|
75
96
|
*/
|
|
76
|
-
interface GooglePlayAsoData {
|
|
77
|
-
title:
|
|
78
|
-
shortDescription:
|
|
79
|
-
fullDescription:
|
|
80
|
-
screenshots:
|
|
81
|
-
phone: string[];
|
|
82
|
-
tablet?: string[];
|
|
83
|
-
tablet7?: string[];
|
|
84
|
-
tablet10?: string[];
|
|
85
|
-
tv?: string[];
|
|
86
|
-
wear?: string[];
|
|
87
|
-
};
|
|
97
|
+
interface GooglePlayAsoData extends Pick<GooglePlayListing, "video" | "language"> {
|
|
98
|
+
title: NonNullable<GooglePlayListing["title"]>;
|
|
99
|
+
shortDescription: NonNullable<GooglePlayListing["shortDescription"]>;
|
|
100
|
+
fullDescription: NonNullable<GooglePlayListing["fullDescription"]>;
|
|
101
|
+
screenshots: GooglePlayScreenshots;
|
|
88
102
|
featureGraphic?: string;
|
|
89
103
|
promoGraphic?: string;
|
|
90
104
|
category?: string;
|
|
@@ -99,59 +113,57 @@ interface GooglePlayAsoData {
|
|
|
99
113
|
/**
|
|
100
114
|
* Google Play release notes (per version)
|
|
101
115
|
*/
|
|
102
|
-
|
|
103
|
-
versionCode: number;
|
|
104
|
-
versionName: string;
|
|
105
|
-
releaseNotes: {
|
|
106
|
-
[language: string]: string;
|
|
107
|
-
};
|
|
108
|
-
track: string;
|
|
109
|
-
status: string;
|
|
110
|
-
releaseDate?: string;
|
|
111
|
-
}
|
|
116
|
+
type GooglePlayReleaseNote = androidpublisher_v3.Schema$TrackRelease;
|
|
112
117
|
/**
|
|
113
118
|
* App Store release notes (per version)
|
|
114
119
|
*/
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
releaseNotes: {
|
|
118
|
-
[locale: string]: string;
|
|
119
|
-
};
|
|
120
|
-
platform: string;
|
|
120
|
+
type AppStoreReleaseNote = Pick<AppStoreVersionAttributes, "versionString" | "platform"> & {
|
|
121
|
+
releaseNotes: Record<string, NonNullable<AppStoreVersionLocalizationAttributes["whatsNew"]>>;
|
|
121
122
|
releaseDate?: string;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* App Store Connect base types
|
|
126
|
+
*/
|
|
127
|
+
type AppStoreInfoLocalization = AppInfoLocalizationAttributes;
|
|
128
|
+
type AppStoreVersionLocalization = AppStoreVersionLocalizationAttributes;
|
|
129
|
+
type AppStoreScreenshotDisplayType = ScreenshotDisplayType;
|
|
130
|
+
/**
|
|
131
|
+
* App Store screenshots keyed by official display type
|
|
132
|
+
* Includes legacy aliases used in existing data structures
|
|
133
|
+
*/
|
|
134
|
+
interface AppStoreScreenshots extends Partial<Record<AppStoreScreenshotDisplayType, string[]>> {
|
|
135
|
+
iphone65?: string[];
|
|
136
|
+
iphone61?: string[];
|
|
137
|
+
iphone58?: string[];
|
|
138
|
+
iphone55?: string[];
|
|
139
|
+
iphone47?: string[];
|
|
140
|
+
iphone40?: string[];
|
|
141
|
+
ipadPro129?: string[];
|
|
142
|
+
ipadPro11?: string[];
|
|
143
|
+
ipad105?: string[];
|
|
144
|
+
ipad97?: string[];
|
|
145
|
+
appleWatch?: string[];
|
|
122
146
|
}
|
|
123
147
|
/**
|
|
124
148
|
* App Store ASO data
|
|
125
149
|
*/
|
|
126
150
|
interface AppStoreAsoData {
|
|
127
|
-
name:
|
|
128
|
-
subtitle?:
|
|
129
|
-
description:
|
|
130
|
-
keywords?:
|
|
131
|
-
promotionalText?:
|
|
132
|
-
screenshots:
|
|
133
|
-
iphone65?: string[];
|
|
134
|
-
iphone61?: string[];
|
|
135
|
-
iphone58?: string[];
|
|
136
|
-
iphone55?: string[];
|
|
137
|
-
iphone47?: string[];
|
|
138
|
-
iphone40?: string[];
|
|
139
|
-
ipadPro129?: string[];
|
|
140
|
-
ipadPro11?: string[];
|
|
141
|
-
ipad105?: string[];
|
|
142
|
-
ipad97?: string[];
|
|
143
|
-
appleWatch?: string[];
|
|
144
|
-
};
|
|
151
|
+
name: NonNullable<AppStoreInfoLocalization["name"]>;
|
|
152
|
+
subtitle?: AppStoreInfoLocalization["subtitle"];
|
|
153
|
+
description: NonNullable<AppStoreVersionLocalization["description"]>;
|
|
154
|
+
keywords?: AppStoreVersionLocalization["keywords"];
|
|
155
|
+
promotionalText?: AppStoreVersionLocalization["promotionalText"];
|
|
156
|
+
screenshots: AppStoreScreenshots;
|
|
145
157
|
appPreview?: string[];
|
|
146
158
|
primaryCategory?: string;
|
|
147
159
|
secondaryCategory?: string;
|
|
148
160
|
contentRightId?: string;
|
|
149
|
-
supportUrl?:
|
|
150
|
-
marketingUrl?:
|
|
151
|
-
privacyPolicyUrl?:
|
|
161
|
+
supportUrl?: AppStoreVersionLocalization["supportUrl"];
|
|
162
|
+
marketingUrl?: AppStoreVersionLocalization["marketingUrl"];
|
|
163
|
+
privacyPolicyUrl?: AppStoreInfoLocalization["privacyPolicyUrl"];
|
|
152
164
|
bundleId: string;
|
|
153
|
-
locale:
|
|
154
|
-
whatsNew?:
|
|
165
|
+
locale: NonNullable<AppStoreVersionLocalization["locale"]>;
|
|
166
|
+
whatsNew?: AppStoreVersionLocalization["whatsNew"];
|
|
155
167
|
}
|
|
156
168
|
/**
|
|
157
169
|
* Multilingual Google Play ASO data
|
|
@@ -354,6 +366,86 @@ interface ProductLocale {
|
|
|
354
366
|
landing?: LandingPageLocale;
|
|
355
367
|
}
|
|
356
368
|
|
|
369
|
+
/**
|
|
370
|
+
* Types for the create-blog-html MCP tool
|
|
371
|
+
*/
|
|
372
|
+
interface BlogMeta {
|
|
373
|
+
title: string;
|
|
374
|
+
description: string;
|
|
375
|
+
appSlug: string;
|
|
376
|
+
slug: string;
|
|
377
|
+
locale: string;
|
|
378
|
+
publishedAt: string;
|
|
379
|
+
modifiedAt: string;
|
|
380
|
+
coverImage: string;
|
|
381
|
+
tags: string[];
|
|
382
|
+
}
|
|
383
|
+
interface CreateBlogHtmlInput {
|
|
384
|
+
/**
|
|
385
|
+
* Product/app slug used for paths and CTAs
|
|
386
|
+
*/
|
|
387
|
+
appSlug: string;
|
|
388
|
+
/**
|
|
389
|
+
* English title used for slug creation and H1
|
|
390
|
+
*/
|
|
391
|
+
title?: string;
|
|
392
|
+
/**
|
|
393
|
+
* Topic/angle to cover inside the article body
|
|
394
|
+
*/
|
|
395
|
+
topic: string;
|
|
396
|
+
/**
|
|
397
|
+
* Single locale to generate (default en-US). Ignored when locales[] is provided.
|
|
398
|
+
*/
|
|
399
|
+
locale?: string;
|
|
400
|
+
/**
|
|
401
|
+
* Optional list of locales to generate. Each gets its own HTML file.
|
|
402
|
+
*/
|
|
403
|
+
locales?: string[];
|
|
404
|
+
/**
|
|
405
|
+
* Meta description override. If absent, a locale-aware summary is generated from topic/appSlug.
|
|
406
|
+
*/
|
|
407
|
+
description?: string;
|
|
408
|
+
/**
|
|
409
|
+
* Optional tags for BLOG_META. If absent, tags are derived from topic and appSlug.
|
|
410
|
+
*/
|
|
411
|
+
tags?: string[];
|
|
412
|
+
/**
|
|
413
|
+
* Optional cover image. Relative paths are rewritten to /blogs/<app>/<slug>/...
|
|
414
|
+
*/
|
|
415
|
+
coverImage?: string;
|
|
416
|
+
/**
|
|
417
|
+
* Include a relative image example in the body (./images/hero.png by default).
|
|
418
|
+
*/
|
|
419
|
+
includeRelativeImageExample?: boolean;
|
|
420
|
+
/**
|
|
421
|
+
* Override the relative image path used when includeRelativeImageExample is true.
|
|
422
|
+
*/
|
|
423
|
+
relativeImagePath?: string;
|
|
424
|
+
/**
|
|
425
|
+
* Publish date (YYYY-MM-DD). Defaults to today.
|
|
426
|
+
*/
|
|
427
|
+
publishedAt?: string;
|
|
428
|
+
/**
|
|
429
|
+
* Last modified date (YYYY-MM-DD). Defaults to publishedAt.
|
|
430
|
+
*/
|
|
431
|
+
modifiedAt?: string;
|
|
432
|
+
/**
|
|
433
|
+
* Overwrite existing HTML files when true (default false).
|
|
434
|
+
*/
|
|
435
|
+
overwrite?: boolean;
|
|
436
|
+
}
|
|
437
|
+
interface GeneratedBlogFile {
|
|
438
|
+
locale: string;
|
|
439
|
+
path: string;
|
|
440
|
+
}
|
|
441
|
+
interface CreateBlogHtmlResult {
|
|
442
|
+
slug: string;
|
|
443
|
+
baseDir: string;
|
|
444
|
+
files: GeneratedBlogFile[];
|
|
445
|
+
coverImage: string;
|
|
446
|
+
metaByLocale: Record<string, BlogMeta>;
|
|
447
|
+
}
|
|
448
|
+
|
|
357
449
|
/**
|
|
358
450
|
* Locale conversion utilities for ASO platforms
|
|
359
451
|
* Handles conversion between unified locales and platform-specific locale codes
|
|
@@ -609,4 +701,4 @@ declare function getPublicDir(): string;
|
|
|
609
701
|
*/
|
|
610
702
|
declare function getProductsDir(): string;
|
|
611
703
|
|
|
612
|
-
export { APP_STORE_TO_UNIFIED, type AppMetaLinks, type AppPageData, type AppStoreAsoData, type AppStoreLocale, type AppStoreMultilingualAsoData, type AppStoreReleaseNote, type AsoData, type AsoLocaleContent, type AsoTemplate, DEFAULT_LOCALE, type DeepPartial, type FeatureItem, GOOGLE_PLAY_TO_UNIFIED, type GooglePlayAsoData, type GooglePlayLocale, type GooglePlayMultilingualAsoData, type GooglePlayReleaseNote, type ImageAsset, type LandingCta, type LandingFeatures, type LandingHero, type LandingPage, type LandingPageLocale, type LandingReviews, type LandingScreenshots, type LayoutColors, type ProductConfig, type ProductContent, type ProductLocale, type ProductMetadata, type ProductScreenshots, type SupportedLocale, type Testimonial, UNIFIED_LOCALES, UNIFIED_TO_APP_STORE, UNIFIED_TO_GOOGLE_PLAY, type UnifiedLocale, appStoreToGooglePlay, appStoreToUnified, appStoreToUnifiedBatch, convertObjectFromAppStore, convertObjectFromGooglePlay, convertObjectToAppStore, convertObjectToGooglePlay, getAsoDataDir, getProductsDir, getPublicDir, getPullDataDir, getPushDataDir, googlePlayToAppStore, googlePlayToUnified, googlePlayToUnifiedBatch, isAppStoreLocale, isAppStoreMultilingual, isGooglePlayLocale, isGooglePlayMultilingual, isSupportedLocale, loadAsoFromConfig, saveAsoToAsoDir, saveAsoToConfig, unifiedToAppStore, unifiedToAppStoreBatch, unifiedToBothPlatforms, unifiedToGooglePlay, unifiedToGooglePlayBatch };
|
|
704
|
+
export { APP_STORE_TO_UNIFIED, type AppMetaLinks, type AppPageData, type AppStoreAsoData, type AppStoreInfoLocalization, type AppStoreLocale, type AppStoreMultilingualAsoData, type AppStoreReleaseNote, type AppStoreScreenshotDisplayType, type AppStoreScreenshots, type AppStoreVersionLocalization, type AsoData, type AsoLocaleContent, type AsoTemplate, type BlogMeta, type CreateBlogHtmlInput, type CreateBlogHtmlResult, DEFAULT_LOCALE, type DeepPartial, type FeatureItem, GOOGLE_PLAY_TO_UNIFIED, type GeneratedBlogFile, type GooglePlayAsoData, type GooglePlayImageType, type GooglePlayListing, type GooglePlayLocale, type GooglePlayMultilingualAsoData, type GooglePlayReleaseNote, type GooglePlayScreenshotType, type GooglePlayScreenshots, type ImageAsset, type LandingCta, type LandingFeatures, type LandingHero, type LandingPage, type LandingPageLocale, type LandingReviews, type LandingScreenshots, type LayoutColors, type ProductConfig, type ProductContent, type ProductLocale, type ProductMetadata, type ProductScreenshots, type SupportedLocale, type Testimonial, UNIFIED_LOCALES, UNIFIED_TO_APP_STORE, UNIFIED_TO_GOOGLE_PLAY, type UnifiedLocale, appStoreToGooglePlay, appStoreToUnified, appStoreToUnifiedBatch, convertObjectFromAppStore, convertObjectFromGooglePlay, convertObjectToAppStore, convertObjectToGooglePlay, getAsoDataDir, getProductsDir, getPublicDir, getPullDataDir, getPushDataDir, googlePlayToAppStore, googlePlayToUnified, googlePlayToUnifiedBatch, isAppStoreLocale, isAppStoreMultilingual, isGooglePlayLocale, isGooglePlayMultilingual, isSupportedLocale, loadAsoFromConfig, saveAsoToAsoDir, saveAsoToConfig, unifiedToAppStore, unifiedToAppStoreBatch, unifiedToBothPlatforms, unifiedToGooglePlay, unifiedToGooglePlayBatch };
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pabal-web-mcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for ASO data management with shared types and utilities",
|
|
6
6
|
"author": "skyu",
|
|
@@ -39,7 +39,9 @@
|
|
|
39
39
|
"prepublishOnly": "npm run build"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
+
"@googleapis/androidpublisher": "^33.2.0",
|
|
42
43
|
"@modelcontextprotocol/sdk": "^1.22.0",
|
|
44
|
+
"appstore-connect-sdk": "^1.3.2",
|
|
43
45
|
"zod": "^3.25.76",
|
|
44
46
|
"zod-to-json-schema": "^3.25.0"
|
|
45
47
|
},
|