appstore-mcp 1.0.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.
Files changed (61) hide show
  1. package/.claude/CLAUDE.md +29 -0
  2. package/.claude/settings.local.json +24 -0
  3. package/.prettierrc +7 -0
  4. package/README.md +170 -0
  5. package/dist/app-store-service.d.ts +21 -0
  6. package/dist/app-store-service.d.ts.map +1 -0
  7. package/dist/app-store-service.js +146 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +22 -0
  11. package/dist/mcp/resources/countries.d.ts +5 -0
  12. package/dist/mcp/resources/countries.d.ts.map +1 -0
  13. package/dist/mcp/resources/countries.js +236 -0
  14. package/dist/mcp/resources/index.d.ts +3 -0
  15. package/dist/mcp/resources/index.d.ts.map +1 -0
  16. package/dist/mcp/resources/index.js +80 -0
  17. package/dist/mcp/tools/get-app-details.d.ts +3 -0
  18. package/dist/mcp/tools/get-app-details.d.ts.map +1 -0
  19. package/dist/mcp/tools/get-app-details.js +84 -0
  20. package/dist/mcp/tools/get-app-info.d.ts +3 -0
  21. package/dist/mcp/tools/get-app-info.d.ts.map +1 -0
  22. package/dist/mcp/tools/get-app-info.js +156 -0
  23. package/dist/mcp/tools/get-app-release-info.d.ts +3 -0
  24. package/dist/mcp/tools/get-app-release-info.d.ts.map +1 -0
  25. package/dist/mcp/tools/get-app-release-info.js +80 -0
  26. package/dist/mcp/tools/get-app-screenshots.d.ts +3 -0
  27. package/dist/mcp/tools/get-app-screenshots.d.ts.map +1 -0
  28. package/dist/mcp/tools/get-app-screenshots.js +71 -0
  29. package/dist/mcp/tools/get-trending-apps.d.ts +3 -0
  30. package/dist/mcp/tools/get-trending-apps.d.ts.map +1 -0
  31. package/dist/mcp/tools/get-trending-apps.js +89 -0
  32. package/dist/mcp/tools/index.d.ts +3 -0
  33. package/dist/mcp/tools/index.d.ts.map +1 -0
  34. package/dist/mcp/tools/index.js +12 -0
  35. package/dist/mcp/tools/list-categories.d.ts +3 -0
  36. package/dist/mcp/tools/list-categories.d.ts.map +1 -0
  37. package/dist/mcp/tools/list-categories.js +38 -0
  38. package/dist/mcp/tools/list-countries.d.ts +3 -0
  39. package/dist/mcp/tools/list-countries.d.ts.map +1 -0
  40. package/dist/mcp/tools/list-countries.js +40 -0
  41. package/dist/mcp/tools/search-apps.d.ts +3 -0
  42. package/dist/mcp/tools/search-apps.d.ts.map +1 -0
  43. package/dist/mcp/tools/search-apps.js +67 -0
  44. package/dist/services/app-store-service.d.ts +21 -0
  45. package/dist/services/app-store-service.d.ts.map +1 -0
  46. package/dist/services/app-store-service.js +146 -0
  47. package/dist/types.d.ts +46 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +41 -0
  50. package/eslint.config.js +9 -0
  51. package/package.json +46 -0
  52. package/src/index.ts +24 -0
  53. package/src/mcp/resources/countries.ts +234 -0
  54. package/src/mcp/resources/index.ts +117 -0
  55. package/src/mcp/tools/get-app-info.ts +183 -0
  56. package/src/mcp/tools/get-trending-apps.ts +108 -0
  57. package/src/mcp/tools/index.ts +10 -0
  58. package/src/mcp/tools/search-apps.ts +74 -0
  59. package/src/services/app-store-service.ts +236 -0
  60. package/src/types.ts +77 -0
  61. package/tsconfig.json +21 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerGetAppReleaseInfo = registerGetAppReleaseInfo;
4
+ const zod_1 = require("zod");
5
+ const app_store_service_1 = require("../../app-store-service");
6
+ function registerGetAppReleaseInfo(server) {
7
+ server.registerTool('get_app_release_info', {
8
+ description: 'Get release and update information for a specific app, including original release date, latest update date, and current version',
9
+ inputSchema: {
10
+ appId: zod_1.z.string().describe('The App Store ID of the app (numeric ID from the App Store URL)'),
11
+ country: zod_1.z
12
+ .string()
13
+ .optional()
14
+ .describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
15
+ },
16
+ }, async ({ appId, country }) => {
17
+ const countryCode = country || 'US';
18
+ try {
19
+ const releaseInfo = await app_store_service_1.AppStoreService.getAppReleaseInfo(appId, countryCode);
20
+ if (!releaseInfo) {
21
+ return {
22
+ content: [
23
+ {
24
+ type: 'text',
25
+ text: JSON.stringify({
26
+ success: false,
27
+ error: `App with ID ${appId} not found`,
28
+ }, null, 2),
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ const formatDate = (dateString) => {
34
+ if (!dateString)
35
+ return null;
36
+ const date = new Date(dateString);
37
+ return date.toLocaleDateString('en-US', {
38
+ year: 'numeric',
39
+ month: 'long',
40
+ day: 'numeric',
41
+ });
42
+ };
43
+ const result = {
44
+ success: true,
45
+ appId: appId,
46
+ country: countryCode,
47
+ releaseInfo: {
48
+ originalReleaseDate: releaseInfo.releaseDate,
49
+ originalReleaseDateFormatted: formatDate(releaseInfo.releaseDate),
50
+ currentVersionReleaseDate: releaseInfo.currentVersionReleaseDate,
51
+ currentVersionReleaseDateFormatted: formatDate(releaseInfo.currentVersionReleaseDate),
52
+ currentVersion: releaseInfo.version,
53
+ },
54
+ };
55
+ return {
56
+ content: [
57
+ {
58
+ type: 'text',
59
+ text: JSON.stringify(result, null, 2),
60
+ },
61
+ ],
62
+ };
63
+ }
64
+ catch (error) {
65
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
66
+ return {
67
+ content: [
68
+ {
69
+ type: 'text',
70
+ text: JSON.stringify({
71
+ success: false,
72
+ error: errorMessage,
73
+ }, null, 2),
74
+ },
75
+ ],
76
+ };
77
+ }
78
+ });
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFwcC1yZWxlYXNlLWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2dldC1hcHAtcmVsZWFzZS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsOERBeUZDO0FBNUZELDZCQUF3QjtBQUN4QiwrREFBMEQ7QUFFMUQsU0FBZ0IseUJBQXlCLENBQUMsTUFBaUI7SUFDdkQsTUFBTSxDQUFDLFlBQVksQ0FDZixzQkFBc0IsRUFDdEI7UUFDSSxXQUFXLEVBQUUsaUlBQWlJO1FBQzlJLFdBQVcsRUFBRTtZQUNULEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGlFQUFpRSxDQUFDO1lBQzdGLE9BQU8sRUFBRSxPQUFDO2lCQUNMLE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLG1FQUFtRSxDQUFDO1NBQ3JGO0tBQ0osRUFDRCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUN6QixNQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sbUNBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFaEYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNmLE9BQU87b0JBQ0gsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFlOzRCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDaEI7Z0NBQ0ksT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsS0FBSyxFQUFFLGVBQWUsS0FBSyxZQUFZOzZCQUMxQyxFQUNELElBQUksRUFDSixDQUFDLENBQ0o7eUJBQ0o7cUJBQ0o7aUJBQ0osQ0FBQztZQUNOLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQW1CLEVBQWlCLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxVQUFVO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO29CQUNwQyxJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsTUFBTTtvQkFDYixHQUFHLEVBQUUsU0FBUztpQkFDakIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUc7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFdBQVcsRUFBRTtvQkFDVCxtQkFBbUIsRUFBRSxXQUFXLENBQUMsV0FBVztvQkFDNUMsNEJBQTRCLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7b0JBQ2pFLHlCQUF5QixFQUFFLFdBQVcsQ0FBQyx5QkFBeUI7b0JBQ2hFLGtDQUFrQyxFQUFFLFVBQVUsQ0FDMUMsV0FBVyxDQUFDLHlCQUF5QixDQUN4QztvQkFDRCxjQUFjLEVBQUUsV0FBVyxDQUFDLE9BQU87aUJBQ3RDO2FBQ0osQ0FBQztZQUVGLE9BQU87Z0JBQ0gsT0FBTyxFQUFFO29CQUNMO3dCQUNJLElBQUksRUFBRSxNQUFlO3dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDeEM7aUJBQ0o7YUFDSixDQUFDO1FBQ04sQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDOUUsT0FBTztnQkFDSCxPQUFPLEVBQUU7b0JBQ0w7d0JBQ0ksSUFBSSxFQUFFLE1BQWU7d0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUNoQjs0QkFDSSxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsWUFBWTt5QkFDdEIsRUFDRCxJQUFJLEVBQ0osQ0FBQyxDQUNKO3FCQUNKO2lCQUNKO2FBQ0osQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDLENBQ0osQ0FBQztBQUNOLENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGetAppScreenshots(server: McpServer): void;
3
+ //# sourceMappingURL=get-app-screenshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-app-screenshots.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-app-screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QA8E1D"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerGetAppScreenshots = registerGetAppScreenshots;
4
+ const zod_1 = require("zod");
5
+ const app_store_service_1 = require("../../app-store-service");
6
+ function registerGetAppScreenshots(server) {
7
+ server.registerTool('get_app_screenshots', {
8
+ description: 'Get screenshot URLs for a specific app. Useful for downloading or displaying app screenshots',
9
+ inputSchema: {
10
+ appId: zod_1.z.string().describe('The App Store ID of the app (numeric ID from the App Store URL)'),
11
+ country: zod_1.z
12
+ .string()
13
+ .optional()
14
+ .describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
15
+ },
16
+ }, async ({ appId, country }) => {
17
+ const countryCode = country || 'US';
18
+ try {
19
+ const screenshots = await app_store_service_1.AppStoreService.getAppScreenshots(appId, countryCode);
20
+ if (!screenshots) {
21
+ return {
22
+ content: [
23
+ {
24
+ type: 'text',
25
+ text: JSON.stringify({
26
+ success: false,
27
+ error: `App with ID ${appId} not found`,
28
+ }, null, 2),
29
+ },
30
+ ],
31
+ };
32
+ }
33
+ const result = {
34
+ success: true,
35
+ appId: appId,
36
+ country: countryCode,
37
+ iphone: {
38
+ count: screenshots.screenshotUrls.length,
39
+ urls: screenshots.screenshotUrls,
40
+ },
41
+ ipad: {
42
+ count: screenshots.ipadScreenshotUrls.length,
43
+ urls: screenshots.ipadScreenshotUrls,
44
+ },
45
+ };
46
+ return {
47
+ content: [
48
+ {
49
+ type: 'text',
50
+ text: JSON.stringify(result, null, 2),
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ catch (error) {
56
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: JSON.stringify({
62
+ success: false,
63
+ error: errorMessage,
64
+ }, null, 2),
65
+ },
66
+ ],
67
+ };
68
+ }
69
+ });
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFwcC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AvdG9vbHMvZ2V0LWFwcC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLDhEQThFQztBQWpGRCw2QkFBd0I7QUFDeEIsK0RBQTBEO0FBRTFELFNBQWdCLHlCQUF5QixDQUFDLE1BQWlCO0lBQ3ZELE1BQU0sQ0FBQyxZQUFZLENBQ2YscUJBQXFCLEVBQ3JCO1FBQ0ksV0FBVyxFQUFFLDhGQUE4RjtRQUMzRyxXQUFXLEVBQUU7WUFDVCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpRUFBaUUsQ0FBQztZQUM3RixPQUFPLEVBQUUsT0FBQztpQkFDTCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyxtRUFBbUUsQ0FBQztTQUNyRjtLQUNKLEVBQ0QsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7UUFDekIsTUFBTSxXQUFXLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLG1DQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRWhGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDZixPQUFPO29CQUNILE9BQU8sRUFBRTt3QkFDTDs0QkFDSSxJQUFJLEVBQUUsTUFBZTs0QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQ2hCO2dDQUNJLE9BQU8sRUFBRSxLQUFLO2dDQUNkLEtBQUssRUFBRSxlQUFlLEtBQUssWUFBWTs2QkFDMUMsRUFDRCxJQUFJLEVBQ0osQ0FBQyxDQUNKO3lCQUNKO3FCQUNKO2lCQUNKLENBQUM7WUFDTixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUc7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLE1BQU0sRUFBRTtvQkFDSixLQUFLLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNO29CQUN4QyxJQUFJLEVBQUUsV0FBVyxDQUFDLGNBQWM7aUJBQ25DO2dCQUNELElBQUksRUFBRTtvQkFDRixLQUFLLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE1BQU07b0JBQzVDLElBQUksRUFBRSxXQUFXLENBQUMsa0JBQWtCO2lCQUN2QzthQUNKLENBQUM7WUFFRixPQUFPO2dCQUNILE9BQU8sRUFBRTtvQkFDTDt3QkFDSSxJQUFJLEVBQUUsTUFBZTt3QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQ3hDO2lCQUNKO2FBQ0osQ0FBQztRQUNOLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsTUFBTSxZQUFZLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQzlFLE9BQU87Z0JBQ0gsT0FBTyxFQUFFO29CQUNMO3dCQUNJLElBQUksRUFBRSxNQUFlO3dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDaEI7NEJBQ0ksT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLFlBQVk7eUJBQ3RCLEVBQ0QsSUFBSSxFQUNKLENBQUMsQ0FDSjtxQkFDSjtpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQyxDQUNKLENBQUM7QUFDTixDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerGetTrendingApps(server: McpServer): void;
3
+ //# sourceMappingURL=get-trending-apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-trending-apps.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-trending-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAsGxD"}
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerGetTrendingApps = registerGetTrendingApps;
4
+ const zod_1 = require("zod");
5
+ const app_store_service_1 = require("../../services/app-store-service");
6
+ const types_1 = require("../../types");
7
+ function registerGetTrendingApps(server) {
8
+ server.registerTool('get_trending_apps', {
9
+ description: 'Get top/trending apps from the App Store by category, platform, and pricing type',
10
+ inputSchema: {
11
+ platform: zod_1.z
12
+ .string()
13
+ .optional()
14
+ .describe('Platform to get apps for: iphone, ipad, mac, or tv. Defaults to iphone'),
15
+ pricingType: zod_1.z
16
+ .string()
17
+ .optional()
18
+ .describe('Pricing type: free (top free apps), paid (top paid apps), or grossing (top grossing apps). Defaults to free'),
19
+ country: zod_1.z
20
+ .string()
21
+ .optional()
22
+ .describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
23
+ categoryId: zod_1.z
24
+ .string()
25
+ .optional()
26
+ .describe('Optional category ID to filter by (e.g., 6014 for Games, 6007 for Productivity)'),
27
+ limit: zod_1.z
28
+ .number()
29
+ .optional()
30
+ .describe('Maximum number of results to return (1-100). Defaults to 25'),
31
+ },
32
+ }, async ({ platform, pricingType, country, categoryId, limit }) => {
33
+ const platformValue = (platform || 'iphone');
34
+ const pricingValue = (pricingType || 'free');
35
+ const countryCode = country || 'US';
36
+ const resultLimit = limit || 25;
37
+ try {
38
+ const apps = await app_store_service_1.AppStoreService.getTrendingApps(platformValue, pricingValue, countryCode, categoryId, resultLimit);
39
+ const categoryInfo = categoryId
40
+ ? types_1.APP_STORE_CATEGORIES.find((c) => c.id === categoryId)
41
+ : null;
42
+ const result = {
43
+ success: true,
44
+ count: apps.length,
45
+ filters: {
46
+ platform: platformValue,
47
+ pricingType: pricingValue,
48
+ country: countryCode,
49
+ category: categoryInfo
50
+ ? { id: categoryInfo.id, name: categoryInfo.name }
51
+ : 'All Categories',
52
+ },
53
+ apps: apps.map((app, index) => ({
54
+ rank: index + 1,
55
+ id: app.id,
56
+ name: app.name,
57
+ artistName: app.artistName,
58
+ url: app.url,
59
+ iconUrl: app.iconUrl,
60
+ price: app.formattedPrice || 'Free',
61
+ primaryGenre: app.primaryGenreName,
62
+ })),
63
+ };
64
+ return {
65
+ content: [
66
+ {
67
+ type: 'text',
68
+ text: JSON.stringify(result, null, 2),
69
+ },
70
+ ],
71
+ };
72
+ }
73
+ catch (error) {
74
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
75
+ return {
76
+ content: [
77
+ {
78
+ type: 'text',
79
+ text: JSON.stringify({
80
+ success: false,
81
+ error: errorMessage,
82
+ }, null, 2),
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ });
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRyZW5kaW5nLWFwcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2dldC10cmVuZGluZy1hcHBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsMERBc0dDO0FBMUdELDZCQUF3QjtBQUN4Qix3RUFBbUU7QUFDbkUsdUNBQTBFO0FBRTFFLFNBQWdCLHVCQUF1QixDQUFDLE1BQWlCO0lBQ3JELE1BQU0sQ0FBQyxZQUFZLENBQ2YsbUJBQW1CLEVBQ25CO1FBQ0ksV0FBVyxFQUFFLGtGQUFrRjtRQUMvRixXQUFXLEVBQUU7WUFDVCxRQUFRLEVBQUUsT0FBQztpQkFDTixNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyx3RUFBd0UsQ0FBQztZQUN2RixXQUFXLEVBQUUsT0FBQztpQkFDVCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FDTCw2R0FBNkcsQ0FDaEg7WUFDTCxPQUFPLEVBQUUsT0FBQztpQkFDTCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyxtRUFBbUUsQ0FBQztZQUNsRixVQUFVLEVBQUUsT0FBQztpQkFDUixNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FDTCxpRkFBaUYsQ0FDcEY7WUFDTCxLQUFLLEVBQUUsT0FBQztpQkFDSCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyw2REFBNkQsQ0FBQztTQUMvRTtLQUNKLEVBQ0QsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDNUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFhLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFnQixDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVoQyxJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLG1DQUFlLENBQUMsZUFBZSxDQUM5QyxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsV0FBVyxDQUNkLENBQUM7WUFFRixNQUFNLFlBQVksR0FBRyxVQUFVO2dCQUMzQixDQUFDLENBQUMsNEJBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUVYLE1BQU0sTUFBTSxHQUFHO2dCQUNYLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxFQUFFO29CQUNMLFFBQVEsRUFBRSxhQUFhO29CQUN2QixXQUFXLEVBQUUsWUFBWTtvQkFDekIsT0FBTyxFQUFFLFdBQVc7b0JBQ3BCLFFBQVEsRUFBRSxZQUFZO3dCQUNsQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRTt3QkFDbEQsQ0FBQyxDQUFDLGdCQUFnQjtpQkFDekI7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUM7b0JBQ2YsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNWLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7b0JBQzFCLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztvQkFDWixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87b0JBQ3BCLEtBQUssRUFBRSxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU07b0JBQ25DLFlBQVksRUFBRSxHQUFHLENBQUMsZ0JBQWdCO2lCQUNyQyxDQUFDLENBQUM7YUFDTixDQUFDO1lBRUYsT0FBTztnQkFDSCxPQUFPLEVBQUU7b0JBQ0w7d0JBQ0ksSUFBSSxFQUFFLE1BQWU7d0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN4QztpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUM5RSxPQUFPO2dCQUNILE9BQU8sRUFBRTtvQkFDTDt3QkFDSSxJQUFJLEVBQUUsTUFBZTt3QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQ2hCOzRCQUNJLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxZQUFZO3lCQUN0QixFQUNELElBQUksRUFDSixDQUFDLENBQ0o7cUJBQ0o7aUJBQ0o7YUFDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUMsQ0FDSixDQUFDO0FBQ04sQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerAllTools(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAIjD"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAllTools = registerAllTools;
4
+ const search_apps_1 = require("./search-apps");
5
+ const get_app_info_1 = require("./get-app-info");
6
+ const get_trending_apps_1 = require("./get-trending-apps");
7
+ function registerAllTools(server) {
8
+ (0, search_apps_1.registerSearchApps)(server);
9
+ (0, get_app_info_1.registerGetAppInfo)(server);
10
+ (0, get_trending_apps_1.registerGetTrendingApps)(server);
11
+ }
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsNENBSUM7QUFSRCwrQ0FBbUQ7QUFDbkQsaURBQW9EO0FBQ3BELDJEQUE4RDtBQUU5RCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFpQjtJQUM5QyxJQUFBLGdDQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLElBQUEsaUNBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBQSwyQ0FBdUIsRUFBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerListCategories(server: McpServer): void;
3
+ //# sourceMappingURL=list-categories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-categories.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QAqCvD"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerListCategories = registerListCategories;
4
+ const types_1 = require("../../types");
5
+ function registerListCategories(server) {
6
+ server.registerTool('list_categories', {
7
+ description: 'List all available App Store categories, platforms, and pricing types. Useful for getting category IDs to use with get_trending_apps',
8
+ inputSchema: {},
9
+ }, async () => {
10
+ const result = {
11
+ success: true,
12
+ categories: types_1.APP_STORE_CATEGORIES.map((category) => ({
13
+ id: category.id,
14
+ name: category.name,
15
+ emoji: category.emoji,
16
+ })),
17
+ platforms: types_1.PLATFORMS.map((platform) => ({
18
+ value: platform.value,
19
+ label: platform.label,
20
+ emoji: platform.emoji,
21
+ })),
22
+ pricingTypes: types_1.PRICING_TYPES.map((pricing) => ({
23
+ value: pricing.value,
24
+ label: pricing.label,
25
+ emoji: pricing.emoji,
26
+ })),
27
+ };
28
+ return {
29
+ content: [
30
+ {
31
+ type: 'text',
32
+ text: JSON.stringify(result, null, 2),
33
+ },
34
+ ],
35
+ };
36
+ });
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jYXRlZ29yaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21jcC90b29scy9saXN0LWNhdGVnb3JpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSx3REFxQ0M7QUF2Q0QsdUNBQTZFO0FBRTdFLFNBQWdCLHNCQUFzQixDQUFDLE1BQWlCO0lBQ3BELE1BQU0sQ0FBQyxZQUFZLENBQ2YsaUJBQWlCLEVBQ2pCO1FBQ0ksV0FBVyxFQUFFLHNJQUFzSTtRQUNuSixXQUFXLEVBQUUsRUFBRTtLQUNsQixFQUNELEtBQUssSUFBSSxFQUFFO1FBQ1AsTUFBTSxNQUFNLEdBQUc7WUFDWCxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSw0QkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSzthQUN4QixDQUFDLENBQUM7WUFDSCxTQUFTLEVBQUUsaUJBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxFQUFFLHFCQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2FBQ3ZCLENBQUMsQ0FBQztTQUNOLENBQUM7UUFFRixPQUFPO1lBQ0gsT0FBTyxFQUFFO2dCQUNMO29CQUNJLElBQUksRUFBRSxNQUFlO29CQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDeEM7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDLENBQ0osQ0FBQztBQUNOLENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerListCountries(server: McpServer): void;
3
+ //# sourceMappingURL=list-countries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-countries.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-countries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA0CtD"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerListCountries = registerListCountries;
4
+ const zod_1 = require("zod");
5
+ const countries_1 = require("../resources/countries");
6
+ function registerListCountries(server) {
7
+ server.registerTool('list_countries', {
8
+ description: 'List all available App Store countries or search for a specific country. Returns country codes that can be used with other tools',
9
+ inputSchema: {
10
+ search: zod_1.z
11
+ .string()
12
+ .optional()
13
+ .describe('Optional search term to filter countries by name'),
14
+ },
15
+ }, async ({ search }) => {
16
+ let countries = countries_1.COUNTRIES;
17
+ if (search) {
18
+ const searchLower = search.toLowerCase();
19
+ countries = countries_1.COUNTRIES.filter((country) => country.name.toLowerCase().includes(searchLower));
20
+ }
21
+ const result = {
22
+ success: true,
23
+ count: countries.length,
24
+ searchTerm: search || null,
25
+ countries: countries.map((country) => ({
26
+ code: country.code,
27
+ name: country.name,
28
+ })),
29
+ };
30
+ return {
31
+ content: [
32
+ {
33
+ type: 'text',
34
+ text: JSON.stringify(result, null, 2),
35
+ },
36
+ ],
37
+ };
38
+ });
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb3VudHJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2xpc3QtY291bnRyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsc0RBMENDO0FBN0NELDZCQUF3QjtBQUN4QixzREFBbUQ7QUFFbkQsU0FBZ0IscUJBQXFCLENBQUMsTUFBaUI7SUFDbkQsTUFBTSxDQUFDLFlBQVksQ0FDZixnQkFBZ0IsRUFDaEI7UUFDSSxXQUFXLEVBQUUsa0lBQWtJO1FBQy9JLFdBQVcsRUFBRTtZQUNULE1BQU0sRUFBRSxPQUFDO2lCQUNKLE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLGtEQUFrRCxDQUFDO1NBQ3BFO0tBQ0osRUFDRCxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ2pCLElBQUksU0FBUyxHQUFHLHFCQUFTLENBQUM7UUFFMUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxTQUFTLEdBQUcscUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDbkQsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRztZQUNYLE9BQU8sRUFBRSxJQUFJO1lBQ2IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1lBQ3ZCLFVBQVUsRUFBRSxNQUFNLElBQUksSUFBSTtZQUMxQixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7YUFDckIsQ0FBQyxDQUFDO1NBQ04sQ0FBQztRQUVGLE9BQU87WUFDSCxPQUFPLEVBQUU7Z0JBQ0w7b0JBQ0ksSUFBSSxFQUFFLE1BQWU7b0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUN4QzthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUMsQ0FDSixDQUFDO0FBQ04sQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerSearchApps(server: McpServer): void;
3
+ //# sourceMappingURL=search-apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-apps.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QAqEnD"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerSearchApps = registerSearchApps;
4
+ const zod_1 = require("zod");
5
+ const app_store_service_1 = require("../../services/app-store-service");
6
+ function registerSearchApps(server) {
7
+ server.registerTool('search_apps', {
8
+ description: 'Search for apps on the App Store by name or keyword',
9
+ inputSchema: {
10
+ query: zod_1.z.string().describe('The search term to find apps'),
11
+ country: zod_1.z
12
+ .string()
13
+ .optional()
14
+ .describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
15
+ limit: zod_1.z
16
+ .number()
17
+ .optional()
18
+ .describe('Maximum number of results to return (1-200). Defaults to 25'),
19
+ },
20
+ }, async ({ query, country, limit }) => {
21
+ const countryCode = country || 'US';
22
+ const resultLimit = limit || 25;
23
+ try {
24
+ const apps = await app_store_service_1.AppStoreService.searchApps(query, countryCode, resultLimit);
25
+ const result = {
26
+ success: true,
27
+ count: apps.length,
28
+ country: countryCode,
29
+ query: query,
30
+ apps: apps.map((app) => ({
31
+ id: app.id,
32
+ name: app.name,
33
+ artistName: app.artistName,
34
+ url: app.url,
35
+ iconUrl: app.iconUrl,
36
+ price: app.formattedPrice || 'Free',
37
+ rating: app.averageUserRating?.toFixed(1) || 'N/A',
38
+ ratingCount: app.userRatingCount || 0,
39
+ primaryGenre: app.primaryGenreName,
40
+ })),
41
+ };
42
+ return {
43
+ content: [
44
+ {
45
+ type: 'text',
46
+ text: JSON.stringify(result, null, 2),
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ catch (error) {
52
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
53
+ return {
54
+ content: [
55
+ {
56
+ type: 'text',
57
+ text: JSON.stringify({
58
+ success: false,
59
+ error: errorMessage,
60
+ }, null, 2),
61
+ },
62
+ ],
63
+ };
64
+ }
65
+ });
66
+ }
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWFwcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL3NlYXJjaC1hcHBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsZ0RBcUVDO0FBeEVELDZCQUF3QjtBQUN4Qix3RUFBbUU7QUFFbkUsU0FBZ0Isa0JBQWtCLENBQUMsTUFBaUI7SUFDaEQsTUFBTSxDQUFDLFlBQVksQ0FDZixhQUFhLEVBQ2I7UUFDSSxXQUFXLEVBQUUscURBQXFEO1FBQ2xFLFdBQVcsRUFBRTtZQUNULEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDO1lBQzFELE9BQU8sRUFBRSxPQUFDO2lCQUNMLE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLG1FQUFtRSxDQUFDO1lBQ2xGLEtBQUssRUFBRSxPQUFDO2lCQUNILE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLDZEQUE2RCxDQUFDO1NBQy9FO0tBQ0osRUFDRCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sbUNBQWUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUUvRSxNQUFNLE1BQU0sR0FBRztnQkFDWCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ2xCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixLQUFLLEVBQUUsS0FBSztnQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDckIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNWLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7b0JBQzFCLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztvQkFDWixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87b0JBQ3BCLEtBQUssRUFBRSxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU07b0JBQ25DLE1BQU0sRUFBRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUs7b0JBQ2xELFdBQVcsRUFBRSxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUM7b0JBQ3JDLFlBQVksRUFBRSxHQUFHLENBQUMsZ0JBQWdCO2lCQUNyQyxDQUFDLENBQUM7YUFDTixDQUFDO1lBRUYsT0FBTztnQkFDSCxPQUFPLEVBQUU7b0JBQ0w7d0JBQ0ksSUFBSSxFQUFFLE1BQWU7d0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN4QztpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUM5RSxPQUFPO2dCQUNILE9BQU8sRUFBRTtvQkFDTDt3QkFDSSxJQUFJLEVBQUUsTUFBZTt3QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQ2hCOzRCQUNJLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxZQUFZO3lCQUN0QixFQUNELElBQUksRUFDSixDQUFDLENBQ0o7cUJBQ0o7aUJBQ0o7YUFDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUMsQ0FDSixDQUFDO0FBQ04sQ0FBQyJ9
@@ -0,0 +1,21 @@
1
+ import { App, Platform, PricingType } from '../types';
2
+ export declare class AppStoreService {
3
+ private static getFeedName;
4
+ private static buildRssUrl;
5
+ private static parseSearchResult;
6
+ private static parseRssEntry;
7
+ static searchApps(query: string, country?: string, limit?: number): Promise<App[]>;
8
+ static getAppDetails(appId: string, country?: string): Promise<App | null>;
9
+ static lookupMultipleApps(appIds: string[], country?: string): Promise<Map<string, App>>;
10
+ static getTrendingApps(platform?: Platform, pricingType?: PricingType, country?: string, categoryId?: string, limit?: number): Promise<App[]>;
11
+ static getAppReleaseInfo(appId: string, country?: string): Promise<{
12
+ releaseDate?: string;
13
+ currentVersionReleaseDate?: string;
14
+ version?: string;
15
+ } | null>;
16
+ static getAppScreenshots(appId: string, country?: string): Promise<{
17
+ screenshotUrls: string[];
18
+ ipadScreenshotUrls: string[];
19
+ } | null>;
20
+ }
21
+ //# sourceMappingURL=app-store-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-store-service.d.ts","sourceRoot":"","sources":["../../src/services/app-store-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAyDtD,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAC,WAAW;IA2B1B,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA0BhC,OAAO,CAAC,MAAM,CAAC,aAAa;WAiBf,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAa,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;WAarF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;WAezE,kBAAkB,CAC3B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,MAAa,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;WAiBf,eAAe,CACxB,QAAQ,GAAE,QAAmB,EAC7B,WAAW,GAAE,WAAoB,EACjC,OAAO,GAAE,MAAa,EACtB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,MAAW,GACnB,OAAO,CAAC,GAAG,EAAE,CAAC;WAUJ,iBAAiB,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAa,GACvB,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;WAcpF,iBAAiB,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAa,GACvB,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CAYhF"}