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 +21 -0
- package/README.md +237 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2014 -0
- package/dist/index.js.map +1 -0
- package/package.json +53 -0
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
|
+
[](https://www.npmjs.com/package/ascdoc)
|
|
12
|
+
[](https://opensource.org/licenses/MIT)
|
|
13
|
+
[](https://nodejs.org/)
|
|
14
|
+
[](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>
|
package/dist/index.d.ts
ADDED