app-store-scraper-bun 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.
package/README.md ADDED
@@ -0,0 +1,212 @@
1
+ # app-store-scraper-bun
2
+
3
+ A modern, fully-typed TypeScript library for scraping public data from the Apple App Store.
4
+
5
+ [![Tests](https://img.shields.io/badge/tests-44%20passed-brightgreen)](#test-coverage)
6
+ [![Coverage](https://img.shields.io/badge/coverage-85%25-green)](#test-coverage)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue)](https://www.typescriptlang.org/)
8
+ [![Bun](https://img.shields.io/badge/Bun-1.0+-black)](https://bun.sh/)
9
+
10
+ ## Why This Rewrite?
11
+
12
+ This is a complete TypeScript rewrite of the original [app-store-scraper](https://github.com/facundoolano/app-store-scraper) library. The original library served the community well, but needed modernization:
13
+
14
+ | Aspect | Original Library | This Rewrite |
15
+ |--------|------------------|--------------|
16
+ | **Language** | JavaScript | TypeScript with full type definitions |
17
+ | **HTTP Client** | `request` (deprecated) | Native `fetch` API |
18
+ | **XML Parsing** | `xml2js` (heavy) | Lightweight custom plist parser |
19
+ | **HTML Parsing** | `cheerio` | `cheerio` (minimal usage) |
20
+ | **Runtime** | Node.js | Bun (also works with Node.js) |
21
+ | **Type Safety** | None | Comprehensive types for all APIs |
22
+ | **Dependencies** | Multiple legacy packages | Minimal modern dependencies |
23
+
24
+ ### Key Benefits
25
+
26
+ - **Type Safety**: Full TypeScript support with comprehensive type definitions for all methods, options, and return types
27
+ - **Zero Legacy Dependencies**: No deprecated packages—uses native `fetch` and minimal modern dependencies
28
+ - **Faster Runtime**: Optimized for Bun with native TypeScript execution
29
+ - **Modern Async/Await**: Consistent Promise-based API throughout
30
+ - **Easy Migration**: API-compatible with the original library
31
+
32
+ ## Installation
33
+
34
+ ```bash
35
+ bun add app-store-scraper-bun
36
+ # or
37
+ npm install app-store-scraper-bun
38
+ ```
39
+
40
+ ## Quick Start
41
+
42
+ ```typescript
43
+ import { app, search, list, collection, category } from 'app-store-scraper-bun';
44
+
45
+ // Fetch app by ID
46
+ const candyCrush = await app({ id: '553834731' });
47
+ console.log(candyCrush.title); // "Candy Crush Saga"
48
+
49
+ // Fetch app by bundle ID
50
+ const appByBundle = await app({ appId: 'com.midasplayer.apps.candycrushsaga' });
51
+
52
+ // Search for apps
53
+ const apps = await search({ term: 'puzzle games', num: 10 });
54
+
55
+ // Get top free games
56
+ const topGames = await list({
57
+ collection: collection.TOP_FREE_IOS,
58
+ category: category.GAMES,
59
+ num: 50
60
+ });
61
+ ```
62
+
63
+ ## API Reference
64
+
65
+ ### Methods
66
+
67
+ | Method | Description |
68
+ |--------|-------------|
69
+ | `app(options)` | Fetch detailed information about a single app by ID or bundle ID |
70
+ | `list(options)` | Fetch lists of apps (top free, top paid, new apps, etc.) |
71
+ | `search(options)` | Search for apps by keyword |
72
+ | `developer(options)` | Fetch all apps by a specific developer |
73
+ | `similar(options)` | Find apps similar to a given app |
74
+ | `reviews(options)` | Fetch user reviews for an app |
75
+ | `ratings(options)` | Fetch rating breakdown (histogram) for an app |
76
+ | `suggest(options)` | Get search suggestions for a term |
77
+ | `privacy(options)` | Fetch app privacy details (App Privacy labels) |
78
+ | `versionHistory(options)` | Fetch version history for an app |
79
+
80
+ ### Constants
81
+
82
+ - **Collections**: `TOP_FREE_IOS`, `TOP_PAID_IOS`, `TOP_GROSSING_IOS`, `NEW_IOS`, etc.
83
+ - **Categories**: `GAMES`, `BUSINESS`, `EDUCATION`, `ENTERTAINMENT`, etc.
84
+ - **Devices**: `IPAD`, `MAC`, `ALL`
85
+ - **Sort Options**: `RECENT`, `HELPFUL`
86
+
87
+ ## Advanced Usage
88
+
89
+ ### Memoization (Caching)
90
+
91
+ ```typescript
92
+ import { memoized } from 'app-store-scraper-bun';
93
+
94
+ // Create memoized instance with 5-minute cache
95
+ const store = memoized({ maxAge: 1000 * 60 * 5 });
96
+
97
+ // Subsequent calls with same params will use cache
98
+ const app1 = await store.app({ id: '553834731' });
99
+ const app2 = await store.app({ id: '553834731' }); // Uses cache
100
+ ```
101
+
102
+ ### Rate Limiting
103
+
104
+ ```typescript
105
+ import { search } from 'app-store-scraper-bun';
106
+
107
+ // Limit to 2 requests per second
108
+ const results = await search({
109
+ term: 'game',
110
+ throttle: 2
111
+ });
112
+ ```
113
+
114
+ ### Fetching with Ratings
115
+
116
+ ```typescript
117
+ import { app } from 'app-store-scraper-bun';
118
+
119
+ // Include ratings histogram
120
+ const result = await app({ id: '553834731', ratings: true });
121
+ console.log(result.ratings); // Total number of ratings
122
+ console.log(result.histogram); // { '1': 1000, '2': 500, ... }
123
+ ```
124
+
125
+ ## Type Definitions
126
+
127
+ All methods are fully typed. Key types include:
128
+
129
+ | Type | Description |
130
+ |------|-------------|
131
+ | `App` | Full app details from lookup |
132
+ | `ListApp` | Simplified app info from list/RSS feeds |
133
+ | `AppWithRatings` | App with ratings histogram |
134
+ | `Review` | User review data |
135
+ | `Suggestion` | Search suggestion |
136
+ | `VersionHistoryEntry` | Version history entry |
137
+ | `PrivacyDetails` | App privacy information |
138
+
139
+ ## Project Structure
140
+
141
+ ```
142
+ src/
143
+ ├── index.ts # Main entry point with all exports
144
+ ├── types.ts # TypeScript type definitions
145
+ ├── constants.ts # App Store constants
146
+ ├── common.ts # Shared utilities
147
+ ├── app.ts # App details method
148
+ ├── list.ts # App list method
149
+ ├── search.ts # Search method
150
+ ├── developer.ts # Developer apps method
151
+ ├── similar.ts # Similar apps method
152
+ ├── reviews.ts # Reviews method
153
+ ├── ratings.ts # Ratings method
154
+ ├── suggest.ts # Search suggestions method
155
+ ├── privacy.ts # Privacy details method
156
+ └── version-history.ts # Version history method
157
+ ```
158
+
159
+ ## Test Coverage
160
+
161
+ ```
162
+ bun test --coverage
163
+ ```
164
+
165
+ | Metric | Coverage |
166
+ |--------|----------|
167
+ | **Functions** | 95.02% |
168
+ | **Lines** | 84.98% |
169
+ | **Tests** | 44 passed |
170
+ | **Assertions** | 1,616 |
171
+
172
+ ### Per-File Coverage
173
+
174
+ | File | Functions | Lines |
175
+ |------|-----------|-------|
176
+ | src/app.ts | 100% | 100% |
177
+ | src/search.ts | 100% | 100% |
178
+ | src/constants.ts | 100% | 100% |
179
+ | src/developer.ts | 100% | 100% |
180
+ | src/list.ts | 100% | 97% |
181
+ | src/ratings.ts | 100% | 97% |
182
+ | src/similar.ts | 100% | 93% |
183
+ | src/reviews.ts | 100% | 87% |
184
+ | src/suggest.ts | 67% | 84% |
185
+ | src/common.ts | 64% | 76% |
186
+
187
+ ## Running Tests
188
+
189
+ ```bash
190
+ # Run all tests
191
+ bun test
192
+
193
+ # Run specific test file
194
+ bun test tests/app.test.ts
195
+
196
+ # Run with coverage
197
+ bun test --coverage
198
+ ```
199
+
200
+ ## Known Limitations
201
+
202
+ 1. **Privacy & Version History**: These endpoints require extracting authentication tokens from Apple's web pages, which may break if Apple changes their page structure
203
+ 2. **Rate Limits**: Apple may rate-limit or block requests if too many are made in a short period
204
+ 3. **Data Accuracy**: Data comes from public App Store pages and APIs; some information may be region-specific
205
+
206
+ ## Dependencies
207
+
208
+ - **cheerio**: HTML parsing for ratings extraction
209
+
210
+ ## License
211
+
212
+ MIT
package/dist/app.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Fetch app details by ID or bundle ID
3
+ */
4
+ import type { App, AppOptions, AppWithRatings } from './types';
5
+ export declare function app(opts: AppOptions): Promise<App | AppWithRatings>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Common utilities for App Store Scraper
3
+ */
4
+ import type { App, ITunesApp, RequestOptions } from './types';
5
+ /**
6
+ * Clean and normalize app data from iTunes API response
7
+ */
8
+ export declare function cleanApp(app: ITunesApp): App;
9
+ /**
10
+ * Make an HTTP request with optional throttling
11
+ */
12
+ export declare function request(url: string, headers?: Record<string, string>, requestOptions?: RequestOptions, limit?: number): Promise<string>;
13
+ /**
14
+ * Lookup apps by ID or bundle ID
15
+ */
16
+ export declare function lookup(ids: (string | number)[], idField?: 'id' | 'bundleId', country?: string, lang?: string, requestOptions?: RequestOptions, limit?: number): Promise<App[]>;
17
+ /**
18
+ * Get the store ID for a country code
19
+ */
20
+ export declare function storeId(countryCode?: string): number;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * App Store Scraper Constants
3
+ */
4
+ import type { MarketId, CountryCode } from './types.ts';
5
+ export declare const collection: {
6
+ readonly TOP_MAC: "topmacapps";
7
+ readonly TOP_FREE_MAC: "topfreemacapps";
8
+ readonly TOP_GROSSING_MAC: "topgrossingmacapps";
9
+ readonly TOP_PAID_MAC: "toppaidmacapps";
10
+ readonly NEW_IOS: "newapplications";
11
+ readonly NEW_FREE_IOS: "newfreeapplications";
12
+ readonly NEW_PAID_IOS: "newpaidapplications";
13
+ readonly TOP_FREE_IOS: "topfreeapplications";
14
+ readonly TOP_FREE_IPAD: "topfreeipadapplications";
15
+ readonly TOP_GROSSING_IOS: "topgrossingapplications";
16
+ readonly TOP_GROSSING_IPAD: "topgrossingipadapplications";
17
+ readonly TOP_PAID_IOS: "toppaidapplications";
18
+ readonly TOP_PAID_IPAD: "toppaidipadapplications";
19
+ };
20
+ export declare const category: {
21
+ readonly BOOKS: 6018;
22
+ readonly BUSINESS: 6000;
23
+ readonly CATALOGS: 6022;
24
+ readonly EDUCATION: 6017;
25
+ readonly ENTERTAINMENT: 6016;
26
+ readonly FINANCE: 6015;
27
+ readonly FOOD_AND_DRINK: 6023;
28
+ readonly GAMES: 6014;
29
+ readonly GAMES_ACTION: 7001;
30
+ readonly GAMES_ADVENTURE: 7002;
31
+ readonly GAMES_ARCADE: 7003;
32
+ readonly GAMES_BOARD: 7004;
33
+ readonly GAMES_CARD: 7005;
34
+ readonly GAMES_CASINO: 7006;
35
+ readonly GAMES_DICE: 7007;
36
+ readonly GAMES_EDUCATIONAL: 7008;
37
+ readonly GAMES_FAMILY: 7009;
38
+ readonly GAMES_MUSIC: 7011;
39
+ readonly GAMES_PUZZLE: 7012;
40
+ readonly GAMES_RACING: 7013;
41
+ readonly GAMES_ROLE_PLAYING: 7014;
42
+ readonly GAMES_SIMULATION: 7015;
43
+ readonly GAMES_SPORTS: 7016;
44
+ readonly GAMES_STRATEGY: 7017;
45
+ readonly GAMES_TRIVIA: 7018;
46
+ readonly GAMES_WORD: 7019;
47
+ readonly HEALTH_AND_FITNESS: 6013;
48
+ readonly LIFESTYLE: 6012;
49
+ readonly MAGAZINES_AND_NEWSPAPERS: 6021;
50
+ readonly MAGAZINES_ARTS: 13007;
51
+ readonly MAGAZINES_AUTOMOTIVE: 13006;
52
+ readonly MAGAZINES_WEDDINGS: 13008;
53
+ readonly MAGAZINES_BUSINESS: 13009;
54
+ readonly MAGAZINES_CHILDREN: 13010;
55
+ readonly MAGAZINES_COMPUTER: 13011;
56
+ readonly MAGAZINES_FOOD: 13012;
57
+ readonly MAGAZINES_CRAFTS: 13013;
58
+ readonly MAGAZINES_ELECTRONICS: 13014;
59
+ readonly MAGAZINES_ENTERTAINMENT: 13015;
60
+ readonly MAGAZINES_FASHION: 13002;
61
+ readonly MAGAZINES_HEALTH: 13017;
62
+ readonly MAGAZINES_HISTORY: 13018;
63
+ readonly MAGAZINES_HOME: 13003;
64
+ readonly MAGAZINES_LITERARY: 13019;
65
+ readonly MAGAZINES_MEN: 13020;
66
+ readonly MAGAZINES_MOVIES_AND_MUSIC: 13021;
67
+ readonly MAGAZINES_POLITICS: 13001;
68
+ readonly MAGAZINES_OUTDOORS: 13004;
69
+ readonly MAGAZINES_FAMILY: 13023;
70
+ readonly MAGAZINES_PETS: 13024;
71
+ readonly MAGAZINES_PROFESSIONAL: 13025;
72
+ readonly MAGAZINES_REGIONAL: 13026;
73
+ readonly MAGAZINES_SCIENCE: 13027;
74
+ readonly MAGAZINES_SPORTS: 13005;
75
+ readonly MAGAZINES_TEENS: 13028;
76
+ readonly MAGAZINES_TRAVEL: 13029;
77
+ readonly MAGAZINES_WOMEN: 13030;
78
+ readonly MEDICAL: 6020;
79
+ readonly MUSIC: 6011;
80
+ readonly NAVIGATION: 6010;
81
+ readonly NEWS: 6009;
82
+ readonly PHOTO_AND_VIDEO: 6008;
83
+ readonly PRODUCTIVITY: 6007;
84
+ readonly REFERENCE: 6006;
85
+ readonly SHOPPING: 6024;
86
+ readonly SOCIAL_NETWORKING: 6005;
87
+ readonly SPORTS: 6004;
88
+ readonly TRAVEL: 6003;
89
+ readonly UTILITIES: 6002;
90
+ readonly WEATHER: 6001;
91
+ };
92
+ export type Category = (typeof category)[keyof typeof category];
93
+ export declare const device: {
94
+ readonly IPAD: "iPadSoftware";
95
+ readonly MAC: "macSoftware";
96
+ readonly ALL: "software";
97
+ };
98
+ export declare const sort: {
99
+ readonly RECENT: "mostRecent";
100
+ readonly HELPFUL: "mostHelpful";
101
+ };
102
+ export declare const markets: Record<CountryCode, MarketId>;
103
+ export declare const DEFAULT_STORE_ID = 143441;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Fetch apps by developer ID
3
+ */
4
+ import type { App, DeveloperOptions } from './types';
5
+ export declare function developer(opts: DeveloperOptions): Promise<App[]>;
@@ -0,0 +1,251 @@
1
+ /**
2
+ * App Store Scraper - TypeScript Edition
3
+ *
4
+ * A strongly-typed TypeScript library for scraping app data from the iTunes App Store.
5
+ */
6
+ export { app } from './app';
7
+ export { list } from './list';
8
+ export { search } from './search';
9
+ export { developer } from './developer';
10
+ export { privacy } from './privacy';
11
+ export { suggest } from './suggest';
12
+ export { similar } from './similar';
13
+ export { reviews } from './reviews';
14
+ export { ratings } from './ratings';
15
+ export { versionHistory } from './version-history';
16
+ export { collection, category, device, sort, markets } from './constants';
17
+ export type { App, AppWithRatings, ListApp, Review, RatingsResult, RatingsHistogram, PrivacyDetails, VersionHistoryEntry, Suggestion, Collection, Device, Sort, CountryCode, MarketId, AppOptions, ListOptions, SearchOptions, DeveloperOptions, PrivacyOptions, SuggestOptions, SimilarOptions, ReviewsOptions, RatingsOptions, VersionHistoryOptions, RequestOptions, MemoizedOptions, } from './types';
18
+ import { app } from './app';
19
+ import { list } from './list';
20
+ import { search } from './search';
21
+ import { developer } from './developer';
22
+ import { privacy } from './privacy';
23
+ import { suggest } from './suggest';
24
+ import { similar } from './similar';
25
+ import { reviews } from './reviews';
26
+ import { ratings } from './ratings';
27
+ import { versionHistory } from './version-history';
28
+ import type { MemoizedOptions } from './types';
29
+ /**
30
+ * Create a memoized version of all scraper methods
31
+ */
32
+ export declare function memoized(opts?: MemoizedOptions): {
33
+ collection: {
34
+ readonly TOP_MAC: "topmacapps";
35
+ readonly TOP_FREE_MAC: "topfreemacapps";
36
+ readonly TOP_GROSSING_MAC: "topgrossingmacapps";
37
+ readonly TOP_PAID_MAC: "toppaidmacapps";
38
+ readonly NEW_IOS: "newapplications";
39
+ readonly NEW_FREE_IOS: "newfreeapplications";
40
+ readonly NEW_PAID_IOS: "newpaidapplications";
41
+ readonly TOP_FREE_IOS: "topfreeapplications";
42
+ readonly TOP_FREE_IPAD: "topfreeipadapplications";
43
+ readonly TOP_GROSSING_IOS: "topgrossingapplications";
44
+ readonly TOP_GROSSING_IPAD: "topgrossingipadapplications";
45
+ readonly TOP_PAID_IOS: "toppaidapplications";
46
+ readonly TOP_PAID_IPAD: "toppaidipadapplications";
47
+ };
48
+ category: {
49
+ readonly BOOKS: 6018;
50
+ readonly BUSINESS: 6000;
51
+ readonly CATALOGS: 6022;
52
+ readonly EDUCATION: 6017;
53
+ readonly ENTERTAINMENT: 6016;
54
+ readonly FINANCE: 6015;
55
+ readonly FOOD_AND_DRINK: 6023;
56
+ readonly GAMES: 6014;
57
+ readonly GAMES_ACTION: 7001;
58
+ readonly GAMES_ADVENTURE: 7002;
59
+ readonly GAMES_ARCADE: 7003;
60
+ readonly GAMES_BOARD: 7004;
61
+ readonly GAMES_CARD: 7005;
62
+ readonly GAMES_CASINO: 7006;
63
+ readonly GAMES_DICE: 7007;
64
+ readonly GAMES_EDUCATIONAL: 7008;
65
+ readonly GAMES_FAMILY: 7009;
66
+ readonly GAMES_MUSIC: 7011;
67
+ readonly GAMES_PUZZLE: 7012;
68
+ readonly GAMES_RACING: 7013;
69
+ readonly GAMES_ROLE_PLAYING: 7014;
70
+ readonly GAMES_SIMULATION: 7015;
71
+ readonly GAMES_SPORTS: 7016;
72
+ readonly GAMES_STRATEGY: 7017;
73
+ readonly GAMES_TRIVIA: 7018;
74
+ readonly GAMES_WORD: 7019;
75
+ readonly HEALTH_AND_FITNESS: 6013;
76
+ readonly LIFESTYLE: 6012;
77
+ readonly MAGAZINES_AND_NEWSPAPERS: 6021;
78
+ readonly MAGAZINES_ARTS: 13007;
79
+ readonly MAGAZINES_AUTOMOTIVE: 13006;
80
+ readonly MAGAZINES_WEDDINGS: 13008;
81
+ readonly MAGAZINES_BUSINESS: 13009;
82
+ readonly MAGAZINES_CHILDREN: 13010;
83
+ readonly MAGAZINES_COMPUTER: 13011;
84
+ readonly MAGAZINES_FOOD: 13012;
85
+ readonly MAGAZINES_CRAFTS: 13013;
86
+ readonly MAGAZINES_ELECTRONICS: 13014;
87
+ readonly MAGAZINES_ENTERTAINMENT: 13015;
88
+ readonly MAGAZINES_FASHION: 13002;
89
+ readonly MAGAZINES_HEALTH: 13017;
90
+ readonly MAGAZINES_HISTORY: 13018;
91
+ readonly MAGAZINES_HOME: 13003;
92
+ readonly MAGAZINES_LITERARY: 13019;
93
+ readonly MAGAZINES_MEN: 13020;
94
+ readonly MAGAZINES_MOVIES_AND_MUSIC: 13021;
95
+ readonly MAGAZINES_POLITICS: 13001;
96
+ readonly MAGAZINES_OUTDOORS: 13004;
97
+ readonly MAGAZINES_FAMILY: 13023;
98
+ readonly MAGAZINES_PETS: 13024;
99
+ readonly MAGAZINES_PROFESSIONAL: 13025;
100
+ readonly MAGAZINES_REGIONAL: 13026;
101
+ readonly MAGAZINES_SCIENCE: 13027;
102
+ readonly MAGAZINES_SPORTS: 13005;
103
+ readonly MAGAZINES_TEENS: 13028;
104
+ readonly MAGAZINES_TRAVEL: 13029;
105
+ readonly MAGAZINES_WOMEN: 13030;
106
+ readonly MEDICAL: 6020;
107
+ readonly MUSIC: 6011;
108
+ readonly NAVIGATION: 6010;
109
+ readonly NEWS: 6009;
110
+ readonly PHOTO_AND_VIDEO: 6008;
111
+ readonly PRODUCTIVITY: 6007;
112
+ readonly REFERENCE: 6006;
113
+ readonly SHOPPING: 6024;
114
+ readonly SOCIAL_NETWORKING: 6005;
115
+ readonly SPORTS: 6004;
116
+ readonly TRAVEL: 6003;
117
+ readonly UTILITIES: 6002;
118
+ readonly WEATHER: 6001;
119
+ };
120
+ device: {
121
+ readonly IPAD: "iPadSoftware";
122
+ readonly MAC: "macSoftware";
123
+ readonly ALL: "software";
124
+ };
125
+ sort: {
126
+ readonly RECENT: "mostRecent";
127
+ readonly HELPFUL: "mostHelpful";
128
+ };
129
+ markets: Record<string, number>;
130
+ app: (opts: import("./types").AppOptions) => Promise<import("./types").App | import("./types").AppWithRatings>;
131
+ list: (opts?: import("./types").ListOptions | undefined) => Promise<import("./types").App[] | import("./types").ListApp[]>;
132
+ search: (opts: import("./types").SearchOptions) => Promise<string[] | import("./types").App[]>;
133
+ developer: (opts: import("./types").DeveloperOptions) => Promise<import("./types").App[]>;
134
+ privacy: (opts: import("./types").PrivacyOptions) => Promise<import("./types").PrivacyDetails>;
135
+ suggest: (opts: import("./types").SuggestOptions) => Promise<import("./types").Suggestion[]>;
136
+ similar: (opts: import("./types").SimilarOptions) => Promise<import("./types").App[]>;
137
+ reviews: (opts: import("./types").ReviewsOptions) => Promise<import("./types").Review[]>;
138
+ ratings: (opts: import("./types").RatingsOptions) => Promise<import("./types").RatingsResult>;
139
+ versionHistory: (opts: import("./types").VersionHistoryOptions) => Promise<import("./types").VersionHistoryEntry[]>;
140
+ };
141
+ declare const _default: {
142
+ app: typeof app;
143
+ list: typeof list;
144
+ search: typeof search;
145
+ developer: typeof developer;
146
+ privacy: typeof privacy;
147
+ suggest: typeof suggest;
148
+ similar: typeof similar;
149
+ reviews: typeof reviews;
150
+ ratings: typeof ratings;
151
+ versionHistory: typeof versionHistory;
152
+ collection: {
153
+ readonly TOP_MAC: "topmacapps";
154
+ readonly TOP_FREE_MAC: "topfreemacapps";
155
+ readonly TOP_GROSSING_MAC: "topgrossingmacapps";
156
+ readonly TOP_PAID_MAC: "toppaidmacapps";
157
+ readonly NEW_IOS: "newapplications";
158
+ readonly NEW_FREE_IOS: "newfreeapplications";
159
+ readonly NEW_PAID_IOS: "newpaidapplications";
160
+ readonly TOP_FREE_IOS: "topfreeapplications";
161
+ readonly TOP_FREE_IPAD: "topfreeipadapplications";
162
+ readonly TOP_GROSSING_IOS: "topgrossingapplications";
163
+ readonly TOP_GROSSING_IPAD: "topgrossingipadapplications";
164
+ readonly TOP_PAID_IOS: "toppaidapplications";
165
+ readonly TOP_PAID_IPAD: "toppaidipadapplications";
166
+ };
167
+ category: {
168
+ readonly BOOKS: 6018;
169
+ readonly BUSINESS: 6000;
170
+ readonly CATALOGS: 6022;
171
+ readonly EDUCATION: 6017;
172
+ readonly ENTERTAINMENT: 6016;
173
+ readonly FINANCE: 6015;
174
+ readonly FOOD_AND_DRINK: 6023;
175
+ readonly GAMES: 6014;
176
+ readonly GAMES_ACTION: 7001;
177
+ readonly GAMES_ADVENTURE: 7002;
178
+ readonly GAMES_ARCADE: 7003;
179
+ readonly GAMES_BOARD: 7004;
180
+ readonly GAMES_CARD: 7005;
181
+ readonly GAMES_CASINO: 7006;
182
+ readonly GAMES_DICE: 7007;
183
+ readonly GAMES_EDUCATIONAL: 7008;
184
+ readonly GAMES_FAMILY: 7009;
185
+ readonly GAMES_MUSIC: 7011;
186
+ readonly GAMES_PUZZLE: 7012;
187
+ readonly GAMES_RACING: 7013;
188
+ readonly GAMES_ROLE_PLAYING: 7014;
189
+ readonly GAMES_SIMULATION: 7015;
190
+ readonly GAMES_SPORTS: 7016;
191
+ readonly GAMES_STRATEGY: 7017;
192
+ readonly GAMES_TRIVIA: 7018;
193
+ readonly GAMES_WORD: 7019;
194
+ readonly HEALTH_AND_FITNESS: 6013;
195
+ readonly LIFESTYLE: 6012;
196
+ readonly MAGAZINES_AND_NEWSPAPERS: 6021;
197
+ readonly MAGAZINES_ARTS: 13007;
198
+ readonly MAGAZINES_AUTOMOTIVE: 13006;
199
+ readonly MAGAZINES_WEDDINGS: 13008;
200
+ readonly MAGAZINES_BUSINESS: 13009;
201
+ readonly MAGAZINES_CHILDREN: 13010;
202
+ readonly MAGAZINES_COMPUTER: 13011;
203
+ readonly MAGAZINES_FOOD: 13012;
204
+ readonly MAGAZINES_CRAFTS: 13013;
205
+ readonly MAGAZINES_ELECTRONICS: 13014;
206
+ readonly MAGAZINES_ENTERTAINMENT: 13015;
207
+ readonly MAGAZINES_FASHION: 13002;
208
+ readonly MAGAZINES_HEALTH: 13017;
209
+ readonly MAGAZINES_HISTORY: 13018;
210
+ readonly MAGAZINES_HOME: 13003;
211
+ readonly MAGAZINES_LITERARY: 13019;
212
+ readonly MAGAZINES_MEN: 13020;
213
+ readonly MAGAZINES_MOVIES_AND_MUSIC: 13021;
214
+ readonly MAGAZINES_POLITICS: 13001;
215
+ readonly MAGAZINES_OUTDOORS: 13004;
216
+ readonly MAGAZINES_FAMILY: 13023;
217
+ readonly MAGAZINES_PETS: 13024;
218
+ readonly MAGAZINES_PROFESSIONAL: 13025;
219
+ readonly MAGAZINES_REGIONAL: 13026;
220
+ readonly MAGAZINES_SCIENCE: 13027;
221
+ readonly MAGAZINES_SPORTS: 13005;
222
+ readonly MAGAZINES_TEENS: 13028;
223
+ readonly MAGAZINES_TRAVEL: 13029;
224
+ readonly MAGAZINES_WOMEN: 13030;
225
+ readonly MEDICAL: 6020;
226
+ readonly MUSIC: 6011;
227
+ readonly NAVIGATION: 6010;
228
+ readonly NEWS: 6009;
229
+ readonly PHOTO_AND_VIDEO: 6008;
230
+ readonly PRODUCTIVITY: 6007;
231
+ readonly REFERENCE: 6006;
232
+ readonly SHOPPING: 6024;
233
+ readonly SOCIAL_NETWORKING: 6005;
234
+ readonly SPORTS: 6004;
235
+ readonly TRAVEL: 6003;
236
+ readonly UTILITIES: 6002;
237
+ readonly WEATHER: 6001;
238
+ };
239
+ device: {
240
+ readonly IPAD: "iPadSoftware";
241
+ readonly MAC: "macSoftware";
242
+ readonly ALL: "software";
243
+ };
244
+ sort: {
245
+ readonly RECENT: "mostRecent";
246
+ readonly HELPFUL: "mostHelpful";
247
+ };
248
+ markets: Record<string, number>;
249
+ memoized: typeof memoized;
250
+ };
251
+ export default _default;