asc-doctor 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Spectrex
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,237 @@
1
+ <div align="center">
2
+
3
+ <img src="assets/social-preview.png" alt="ASC Doctor" width="640">
4
+
5
+ # ๐Ÿฉบ ASC Doctor
6
+
7
+ **Release readiness auditor for App Store Connect**
8
+
9
+ One command. Full diagnosis. Ship with confidence.
10
+
11
+ [![npm version](https://img.shields.io/npm/v/ascdoc?style=flat-square&color=CB3837)](https://www.npmjs.com/package/ascdoc)
12
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT)
13
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen?style=flat-square)](https://nodejs.org/)
14
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?style=flat-square)](https://www.typescriptlang.org/)
15
+
16
+ </div>
17
+
18
+ ---
19
+
20
+ > **Stop wondering "what did I forget?" before every App Store submission.**
21
+ >
22
+ > ASC Doctor connects to the App Store Connect API and audits your app's metadata across 8 modules โ€” localization, screenshots, age rating, subtitles, privacy, subscriptions, storefront coverage, and review info. Get an instant risk score, actionable findings, and a beautiful report.
23
+
24
+ ## โšก Quick Start
25
+
26
+ ```bash
27
+ # Try it instantly with demo data (no API key needed!)
28
+ npx asc-doctor --demo
29
+
30
+ # Run against your real app
31
+ npx asc-doctor --key-id YOUR_KEY_ID --issuer-id YOUR_ISSUER_ID --key ./AuthKey.p8
32
+ ```
33
+
34
+ ## ๐ŸŽฏ What It Catches
35
+
36
+ | Module | What It Checks |
37
+ |--------|---------------|
38
+ | ๐ŸŒ **Localization** | Missing descriptions, empty keywords, placeholder text ("Lorem ipsum", "TODO"), short descriptions |
39
+ | ๐Ÿ“ฑ **Screenshots** | Empty screenshot slots, missing required device types (6.9" iPhone, 13" iPad), locale coverage gaps |
40
+ | ๐Ÿ”ž **Age Rating** | Unset declarations, gambling inconsistencies, kids-band + mature content conflicts |
41
+ | ๐Ÿ’ฌ **Subtitle** | Missing subtitles, generic text ("Best App Ever"), name repetition, exceeding 30-char limit |
42
+ | ๐Ÿ”’ **Privacy** | Missing privacy policy URL, invalid/unreachable URLs, non-HTTPS links |
43
+ | ๐Ÿ’ณ **Subscriptions & IAP** | Missing display names, empty descriptions, subscription group localization gaps |
44
+ | ๐ŸŒ **Storefront Coverage** | Limited territories, missing major markets (US, JP, DE...), wasted localizations |
45
+ | ๐Ÿ“‹ **Review Info** | Missing contact info, demo account gaps, empty review notes |
46
+
47
+ ## ๐Ÿ“Š Risk Scoring
48
+
49
+ Every finding is weighted by severity and contributes to a **0-100 risk score**:
50
+
51
+ | Grade | Score | Meaning |
52
+ |-------|-------|---------|
53
+ | ๐ŸŸข **A** | 90-100 | Ship it! |
54
+ | ๐ŸŸก **B** | 75-89 | Almost ready |
55
+ | ๐ŸŸ  **C** | 50-74 | Needs attention |
56
+ | ๐Ÿ”ด **D** | 25-49 | High risk |
57
+ | โ›” **F** | 0-24 | Do not submit |
58
+
59
+ Severities: ๐Ÿ”ด Critical (โˆ’15pts) ยท ๐ŸŸ  High (โˆ’8pts) ยท ๐ŸŸก Warning (โˆ’3pts) ยท โ„น๏ธ Info (โˆ’1pt)
60
+
61
+ ## ๐Ÿ”ง Installation
62
+
63
+ ```bash
64
+ # Use directly with npx (recommended)
65
+ npx asc-doctor --demo
66
+
67
+ # Or install globally
68
+ npm install -g asc-doctor
69
+
70
+ # Or install locally
71
+ npm install --save-dev asc-doctor
72
+ ```
73
+
74
+ ## ๐Ÿ”‘ Setup
75
+
76
+ ASC Doctor uses the **App Store Connect API** (read-only). You need an API key:
77
+
78
+ 1. Go to [App Store Connect](https://appstoreconnect.apple.com) โ†’ **Users and Access** โ†’ **Integrations** โ†’ **App Store Connect API**
79
+ 2. Click **Generate API Key** with at least **App Manager** role
80
+ 3. Download the `.p8` private key file (โš ๏ธ you can only download this once!)
81
+ 4. Note your **Key ID** and **Issuer ID**
82
+
83
+ See the [full setup guide](docs/setup-guide.md) for detailed instructions.
84
+
85
+ ## ๐Ÿ“– Usage
86
+
87
+ ### Basic
88
+
89
+ ```bash
90
+ ascdoc --key-id ABC123 --issuer-id DEF456 --key ./AuthKey.p8
91
+ ```
92
+
93
+ ### Specify an App
94
+
95
+ ```bash
96
+ # Auto-detects if you have only one app
97
+ # Otherwise, specify the app ID:
98
+ ascdoc --app-id 1234567890 --key-id ABC123 --issuer-id DEF456 --key ./AuthKey.p8
99
+ ```
100
+
101
+ ### Output Formats
102
+
103
+ ```bash
104
+ # Beautiful terminal output (default)
105
+ ascdoc --format terminal
106
+
107
+ # Markdown report (great for PRs and docs)
108
+ ascdoc --format markdown --output report.md
109
+
110
+ # JSON (for CI/CD pipelines)
111
+ ascdoc --format json
112
+ ```
113
+
114
+ ### Filter Modules
115
+
116
+ ```bash
117
+ # Only run specific audits
118
+ ascdoc --only localization,screenshots
119
+
120
+ # Skip specific audits
121
+ ascdoc --skip storefront,review-info
122
+ ```
123
+
124
+ ### CI/CD Integration
125
+
126
+ ```bash
127
+ # Exit with code 1 if score is below threshold
128
+ ascdoc --ci --min-score 75 --format json
129
+
130
+ # In your GitHub Actions workflow:
131
+ # - name: Audit App Store readiness
132
+ # run: npx asc-doctor --ci --min-score 75 --format json
133
+ ```
134
+
135
+ ### Environment Variables
136
+
137
+ ```bash
138
+ export ASC_KEY_ID=ABC123
139
+ export ASC_ISSUER_ID=DEF456
140
+ export ASC_KEY_PATH=./AuthKey.p8
141
+ export ASC_APP_ID=1234567890 # optional
142
+
143
+ ascdoc # Uses env variables automatically
144
+ ```
145
+
146
+ ### Config File
147
+
148
+ Create `.ascdocrc.json` in your project root:
149
+
150
+ ```json
151
+ {
152
+ "keyId": "ABC123",
153
+ "issuerId": "DEF456",
154
+ "keyPath": "./AuthKey.p8",
155
+ "appId": "1234567890",
156
+ "minScore": 75,
157
+ "skip": ["storefront"],
158
+ "format": "terminal"
159
+ }
160
+ ```
161
+
162
+ Then just run:
163
+
164
+ ```bash
165
+ ascdoc
166
+ ```
167
+
168
+ ## ๐Ÿ”’ Security
169
+
170
+ - ASC Doctor is **read-only** โ€” it never modifies your App Store Connect data
171
+ - API keys are never stored, logged, or transmitted anywhere except to Apple's API
172
+ - Add `.p8` files to your `.gitignore` โ€” never commit private keys
173
+
174
+ ## ๐Ÿ“‹ All Options
175
+
176
+ ```
177
+ Usage: ascdoc [options]
178
+
179
+ Options:
180
+ --key-id <id> App Store Connect API Key ID
181
+ --issuer-id <id> App Store Connect API Issuer ID
182
+ --key <path> Path to .p8 private key file
183
+ --app-id <id> App ID (auto-detected if only one app)
184
+ --format <type> Output format: terminal, markdown, json (default: terminal)
185
+ --output <path> Save report to file
186
+ --only <modules> Run only these audit modules (comma-separated)
187
+ --skip <modules> Skip these audit modules (comma-separated)
188
+ --ci CI mode: exit with non-zero if score below --min-score
189
+ --min-score <score> Minimum score for CI mode (default: 75)
190
+ --demo Run with demo data (no API key required)
191
+ --list-modules List available audit modules
192
+ -V, --version Output the version number
193
+ -h, --help Display help
194
+ ```
195
+
196
+ ## ๐Ÿค Contributing
197
+
198
+ Contributions are welcome! Here's how to get started:
199
+
200
+ ```bash
201
+ # Clone the repo
202
+ git clone https://github.com/aykutbey3543/ascdoc.git
203
+ cd ascdoc
204
+
205
+ # Install dependencies
206
+ npm install
207
+
208
+ # Build
209
+ npm run build
210
+
211
+ # Run tests
212
+ npm test
213
+
214
+ # Try with demo data
215
+ node dist/index.js --demo
216
+ ```
217
+
218
+ ### Adding a New Audit Rule
219
+
220
+ 1. Add your check to the appropriate auditor in `src/auditors/`
221
+ 2. Use the existing `Finding` interface with a unique ID (e.g., `LOC-009`)
222
+ 3. Include a `remedy` field with an actionable fix suggestion
223
+ 4. Add a test in `tests/auditors/`
224
+
225
+ ## ๐Ÿ“„ License
226
+
227
+ MIT ยฉ [Spectrex](https://github.com/aykutbey3543)
228
+
229
+ ---
230
+
231
+ <div align="center">
232
+
233
+ **If ASC Doctor saved you from a rejection, consider giving it a โญ**
234
+
235
+ [Report Bug](https://github.com/aykutbey3543/ascdoc/issues) ยท [Request Feature](https://github.com/aykutbey3543/ascdoc/issues) ยท [Discussions](https://github.com/aykutbey3543/ascdoc/discussions)
236
+
237
+ </div>
@@ -0,0 +1,2 @@
1
+
2
+ export { }