slowlane 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 +106 -0
- package/build/src/appstoreconnect.d.ts +155 -0
- package/build/src/appstoreconnect.js +417 -0
- package/build/src/appstoreconnect.js.map +1 -0
- package/build/src/config.d.ts +5 -0
- package/build/src/config.js +66 -0
- package/build/src/config.js.map +1 -0
- package/build/src/googleplay.d.ts +31 -0
- package/build/src/googleplay.js +175 -0
- package/build/src/googleplay.js.map +1 -0
- package/build/src/index.d.ts +2 -0
- package/build/src/index.js +249 -0
- package/build/src/index.js.map +1 -0
- package/build/src/output.d.ts +39 -0
- package/build/src/output.js +269 -0
- package/build/src/output.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.AppStoreConnectClient = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const jwt = __importStar(require("jsonwebtoken"));
|
|
40
|
+
// API Client
|
|
41
|
+
class AppStoreConnectClient {
|
|
42
|
+
issuerId;
|
|
43
|
+
keyId;
|
|
44
|
+
privateKey;
|
|
45
|
+
baseUrl = 'https://api.appstoreconnect.apple.com/v1';
|
|
46
|
+
constructor(config, configDir) {
|
|
47
|
+
this.issuerId = config.issuer_id;
|
|
48
|
+
this.keyId = config.key_id;
|
|
49
|
+
const keyPath = path.isAbsolute(config.private_key_path)
|
|
50
|
+
? config.private_key_path
|
|
51
|
+
: path.join(configDir, config.private_key_path);
|
|
52
|
+
this.privateKey = fs.readFileSync(keyPath, 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
generateToken() {
|
|
55
|
+
const now = Math.floor(Date.now() / 1000);
|
|
56
|
+
const payload = {
|
|
57
|
+
iss: this.issuerId,
|
|
58
|
+
iat: now,
|
|
59
|
+
exp: now + 20 * 60, // 20 minutes
|
|
60
|
+
aud: 'appstoreconnect-v1',
|
|
61
|
+
};
|
|
62
|
+
return jwt.sign(payload, this.privateKey, {
|
|
63
|
+
algorithm: 'ES256',
|
|
64
|
+
keyid: this.keyId,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async request(endpoint, options) {
|
|
68
|
+
const token = this.generateToken();
|
|
69
|
+
const url = `${this.baseUrl}${endpoint}`;
|
|
70
|
+
const response = await fetch(url, {
|
|
71
|
+
method: options?.method ?? 'GET',
|
|
72
|
+
headers: {
|
|
73
|
+
Authorization: `Bearer ${token}`,
|
|
74
|
+
'Content-Type': 'application/json',
|
|
75
|
+
},
|
|
76
|
+
body: options?.body ? JSON.stringify(options.body) : undefined,
|
|
77
|
+
});
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
const errorText = await response.text();
|
|
80
|
+
throw new Error(`App Store Connect API error: ${response.status} ${response.statusText}\n${errorText}`);
|
|
81
|
+
}
|
|
82
|
+
return response.json();
|
|
83
|
+
}
|
|
84
|
+
async listApps() {
|
|
85
|
+
const apps = [];
|
|
86
|
+
let nextUrl = '/apps';
|
|
87
|
+
while (nextUrl !== undefined) {
|
|
88
|
+
const currentUrl = nextUrl;
|
|
89
|
+
const endpoint = currentUrl.startsWith('http')
|
|
90
|
+
? currentUrl.replace(this.baseUrl, '')
|
|
91
|
+
: currentUrl;
|
|
92
|
+
const response = await this.request(endpoint);
|
|
93
|
+
apps.push(...response.data);
|
|
94
|
+
nextUrl = response.links.next;
|
|
95
|
+
}
|
|
96
|
+
return apps;
|
|
97
|
+
}
|
|
98
|
+
async getAppByBundleId(bundleId) {
|
|
99
|
+
const response = await this.request(`/apps?filter[bundleId]=${encodeURIComponent(bundleId)}`);
|
|
100
|
+
return response.data[0] ?? null;
|
|
101
|
+
}
|
|
102
|
+
async getAppMetadata(bundleId, fromVersion = 'editable') {
|
|
103
|
+
const app = await this.getAppByBundleId(bundleId);
|
|
104
|
+
if (!app) {
|
|
105
|
+
throw new Error(`App not found with bundle ID: ${bundleId}`);
|
|
106
|
+
}
|
|
107
|
+
// Get app infos (contains state and age rating info)
|
|
108
|
+
const appInfosResponse = await this.request(`/apps/${app.id}/appInfos`);
|
|
109
|
+
// Find live and editable appInfos
|
|
110
|
+
const liveAppInfo = appInfosResponse.data.find(info => info.attributes.appStoreState === 'READY_FOR_SALE');
|
|
111
|
+
const editableAppInfo = appInfosResponse.data.find(info => info.attributes.appStoreState !== 'READY_FOR_SALE');
|
|
112
|
+
const appInfo = fromVersion === 'live'
|
|
113
|
+
? (liveAppInfo ?? editableAppInfo)
|
|
114
|
+
: (editableAppInfo ?? liveAppInfo);
|
|
115
|
+
if (!appInfo) {
|
|
116
|
+
throw new Error(`No app info found for app: ${bundleId}`);
|
|
117
|
+
}
|
|
118
|
+
// Get app info localizations (name, subtitle, privacy policy)
|
|
119
|
+
const appInfoLocalizationsResponse = await this.request(`/appInfos/${appInfo.id}/appInfoLocalizations?limit=200`);
|
|
120
|
+
// Get app store versions to find live and editable versions
|
|
121
|
+
const versionsResponse = await this.request(`/apps/${app.id}/appStoreVersions?limit=10`);
|
|
122
|
+
// Find live version (READY_FOR_SALE) and editable version (PREPARE_FOR_SUBMISSION, etc.)
|
|
123
|
+
const liveVersion = versionsResponse.data.find(v => v.attributes.appStoreState === 'READY_FOR_SALE');
|
|
124
|
+
const editableVersion = versionsResponse.data.find(v => [
|
|
125
|
+
'PREPARE_FOR_SUBMISSION',
|
|
126
|
+
'WAITING_FOR_REVIEW',
|
|
127
|
+
'IN_REVIEW',
|
|
128
|
+
'PENDING_DEVELOPER_RELEASE',
|
|
129
|
+
].includes(v.attributes.appStoreState));
|
|
130
|
+
// Get version localizations from the requested version
|
|
131
|
+
const versionForLocalizations = fromVersion === 'live'
|
|
132
|
+
? (liveVersion ?? editableVersion)
|
|
133
|
+
: (editableVersion ?? liveVersion);
|
|
134
|
+
let versionLocalizations = [];
|
|
135
|
+
if (versionForLocalizations) {
|
|
136
|
+
const versionLocalizationsResponse = await this.request(`/appStoreVersions/${versionForLocalizations.id}/appStoreVersionLocalizations`);
|
|
137
|
+
versionLocalizations = versionLocalizationsResponse.data;
|
|
138
|
+
}
|
|
139
|
+
// Merge localizations by locale
|
|
140
|
+
const localeMap = new Map();
|
|
141
|
+
for (const loc of appInfoLocalizationsResponse.data) {
|
|
142
|
+
const locale = loc.attributes.locale;
|
|
143
|
+
localeMap.set(locale, {
|
|
144
|
+
locale,
|
|
145
|
+
name: loc.attributes.name,
|
|
146
|
+
subtitle: loc.attributes.subtitle,
|
|
147
|
+
privacyPolicyUrl: loc.attributes.privacyPolicyUrl,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
for (const loc of versionLocalizations) {
|
|
151
|
+
const locale = loc.attributes.locale;
|
|
152
|
+
const existing = localeMap.get(locale) ?? { locale };
|
|
153
|
+
localeMap.set(locale, {
|
|
154
|
+
...existing,
|
|
155
|
+
description: loc.attributes.description,
|
|
156
|
+
keywords: loc.attributes.keywords,
|
|
157
|
+
whatsNew: loc.attributes.whatsNew,
|
|
158
|
+
promotionalText: loc.attributes.promotionalText,
|
|
159
|
+
marketingUrl: loc.attributes.marketingUrl,
|
|
160
|
+
supportUrl: loc.attributes.supportUrl,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
const localizations = Array.from(localeMap.values()).sort((a, b) => a.locale.localeCompare(b.locale));
|
|
164
|
+
return {
|
|
165
|
+
app,
|
|
166
|
+
appInfo,
|
|
167
|
+
liveVersion,
|
|
168
|
+
editableVersion,
|
|
169
|
+
localizations,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
async getLatestVersion(bundleId) {
|
|
173
|
+
const app = await this.getAppByBundleId(bundleId);
|
|
174
|
+
if (!app) {
|
|
175
|
+
throw new Error(`App not found with bundle ID: ${bundleId}`);
|
|
176
|
+
}
|
|
177
|
+
// Get most recent version (sorted by createdDate desc by default)
|
|
178
|
+
const response = await this.request(`/apps/${app.id}/appStoreVersions?limit=1`);
|
|
179
|
+
return response.data[0] ?? null;
|
|
180
|
+
}
|
|
181
|
+
async createVersion(bundleId, versionString, platform) {
|
|
182
|
+
const app = await this.getAppByBundleId(bundleId);
|
|
183
|
+
if (!app) {
|
|
184
|
+
throw new Error(`App not found with bundle ID: ${bundleId}`);
|
|
185
|
+
}
|
|
186
|
+
// If no platform specified, copy from latest version
|
|
187
|
+
let targetPlatform = platform ?? 'IOS';
|
|
188
|
+
if (!platform) {
|
|
189
|
+
const latestVersion = await this.getLatestVersion(bundleId);
|
|
190
|
+
if (latestVersion) {
|
|
191
|
+
targetPlatform = latestVersion.attributes.platform;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
const body = {
|
|
195
|
+
data: {
|
|
196
|
+
type: 'appStoreVersions',
|
|
197
|
+
attributes: {
|
|
198
|
+
platform: targetPlatform,
|
|
199
|
+
versionString,
|
|
200
|
+
},
|
|
201
|
+
relationships: {
|
|
202
|
+
app: {
|
|
203
|
+
data: { type: 'apps', id: app.id },
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
const response = await this.request('/appStoreVersions', { method: 'POST', body });
|
|
209
|
+
return response.data;
|
|
210
|
+
}
|
|
211
|
+
async setMetadata(bundleId, localizations) {
|
|
212
|
+
// Validate field lengths before making any API calls
|
|
213
|
+
const validationErrors = [];
|
|
214
|
+
for (const loc of localizations) {
|
|
215
|
+
if (loc.name && loc.name.length > 30) {
|
|
216
|
+
validationErrors.push(`${loc.locale}: name exceeds 30 characters (${loc.name.length})`);
|
|
217
|
+
}
|
|
218
|
+
if (loc.subtitle && loc.subtitle.length > 30) {
|
|
219
|
+
validationErrors.push(`${loc.locale}: subtitle exceeds 30 characters (${loc.subtitle.length})`);
|
|
220
|
+
}
|
|
221
|
+
if (loc.keywords && loc.keywords.length > 100) {
|
|
222
|
+
validationErrors.push(`${loc.locale}: keywords exceeds 100 characters (${loc.keywords.length})`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (validationErrors.length > 0) {
|
|
226
|
+
throw new Error(`Validation failed:\n ${validationErrors.join('\n ')}`);
|
|
227
|
+
}
|
|
228
|
+
const app = await this.getAppByBundleId(bundleId);
|
|
229
|
+
if (!app) {
|
|
230
|
+
throw new Error(`App not found with bundle ID: ${bundleId}`);
|
|
231
|
+
}
|
|
232
|
+
// Get app info for app-level localizations - find the editable one
|
|
233
|
+
const appInfosResponse = await this.request(`/apps/${app.id}/appInfos`);
|
|
234
|
+
// Find editable appInfo (not READY_FOR_SALE)
|
|
235
|
+
const editableAppInfo = appInfosResponse.data.find(info => info.attributes.appStoreState !== 'READY_FOR_SALE');
|
|
236
|
+
if (!editableAppInfo) {
|
|
237
|
+
throw new Error('No editable app info found. Create a new version first with create-version.');
|
|
238
|
+
}
|
|
239
|
+
const appInfo = editableAppInfo;
|
|
240
|
+
// Get existing app info localizations (limit=200 to avoid pagination issues)
|
|
241
|
+
const appInfoLocResponse = await this.request(`/appInfos/${appInfo.id}/appInfoLocalizations?limit=200`);
|
|
242
|
+
const existingAppInfoLocs = new Map(appInfoLocResponse.data.map(l => [l.attributes.locale, l]));
|
|
243
|
+
// Get editable version for version-level localizations
|
|
244
|
+
const versionsResponse = await this.request(`/apps/${app.id}/appStoreVersions?limit=10`);
|
|
245
|
+
const editableVersion = versionsResponse.data.find(v => [
|
|
246
|
+
'PREPARE_FOR_SUBMISSION',
|
|
247
|
+
'WAITING_FOR_REVIEW',
|
|
248
|
+
'IN_REVIEW',
|
|
249
|
+
'PENDING_DEVELOPER_RELEASE',
|
|
250
|
+
].includes(v.attributes.appStoreState));
|
|
251
|
+
if (!editableVersion) {
|
|
252
|
+
throw new Error('No editable version found. Create a new version first with create-version.');
|
|
253
|
+
}
|
|
254
|
+
// Get existing version localizations (limit=200 to avoid pagination issues)
|
|
255
|
+
const versionLocResponse = await this.request(`/appStoreVersions/${editableVersion.id}/appStoreVersionLocalizations?limit=200`);
|
|
256
|
+
const existingVersionLocs = new Map(versionLocResponse.data.map(l => [l.attributes.locale, l]));
|
|
257
|
+
const results = {
|
|
258
|
+
appInfoLocalizationsUpdated: [],
|
|
259
|
+
appInfoLocalizationsCreated: [],
|
|
260
|
+
versionLocalizationsUpdated: [],
|
|
261
|
+
versionLocalizationsCreated: [],
|
|
262
|
+
};
|
|
263
|
+
for (const loc of localizations) {
|
|
264
|
+
// Update or create app info localization (name, subtitle, privacyPolicyUrl)
|
|
265
|
+
const appInfoAttrs = {};
|
|
266
|
+
if ('name' in loc)
|
|
267
|
+
appInfoAttrs.name = loc.name ?? null;
|
|
268
|
+
if ('subtitle' in loc)
|
|
269
|
+
appInfoAttrs.subtitle = loc.subtitle ?? null;
|
|
270
|
+
if ('privacyPolicyUrl' in loc)
|
|
271
|
+
appInfoAttrs.privacyPolicyUrl = loc.privacyPolicyUrl ?? null;
|
|
272
|
+
const hasAppInfoFields = Object.keys(appInfoAttrs).length > 0;
|
|
273
|
+
if (hasAppInfoFields) {
|
|
274
|
+
const existingAppInfoLoc = existingAppInfoLocs.get(loc.locale);
|
|
275
|
+
if (existingAppInfoLoc) {
|
|
276
|
+
await this.request(`/appInfoLocalizations/${existingAppInfoLoc.id}`, {
|
|
277
|
+
method: 'PATCH',
|
|
278
|
+
body: {
|
|
279
|
+
data: {
|
|
280
|
+
type: 'appInfoLocalizations',
|
|
281
|
+
id: existingAppInfoLoc.id,
|
|
282
|
+
attributes: appInfoAttrs,
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
});
|
|
286
|
+
results.appInfoLocalizationsUpdated.push(loc.locale);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// Try to create, but handle duplicate error by falling back to PATCH
|
|
290
|
+
try {
|
|
291
|
+
await this.request('/appInfoLocalizations', {
|
|
292
|
+
method: 'POST',
|
|
293
|
+
body: {
|
|
294
|
+
data: {
|
|
295
|
+
type: 'appInfoLocalizations',
|
|
296
|
+
attributes: { locale: loc.locale, ...appInfoAttrs },
|
|
297
|
+
relationships: {
|
|
298
|
+
appInfo: { data: { type: 'appInfos', id: appInfo.id } },
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
results.appInfoLocalizationsCreated.push(loc.locale);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
// If duplicate error, fetch and PATCH instead
|
|
307
|
+
if (error instanceof Error &&
|
|
308
|
+
error.message.includes('DUPLICATE')) {
|
|
309
|
+
const refetch = await this.request(`/appInfos/${appInfo.id}/appInfoLocalizations?filter[locale]=${loc.locale}`);
|
|
310
|
+
const existing = refetch.data[0];
|
|
311
|
+
if (existing) {
|
|
312
|
+
await this.request(`/appInfoLocalizations/${existing.id}`, {
|
|
313
|
+
method: 'PATCH',
|
|
314
|
+
body: {
|
|
315
|
+
data: {
|
|
316
|
+
type: 'appInfoLocalizations',
|
|
317
|
+
id: existing.id,
|
|
318
|
+
attributes: appInfoAttrs,
|
|
319
|
+
},
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
results.appInfoLocalizationsUpdated.push(loc.locale);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
throw error;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
throw error;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Update or create version localization
|
|
335
|
+
const versionAttrs = {};
|
|
336
|
+
if ('description' in loc)
|
|
337
|
+
versionAttrs.description = loc.description ?? null;
|
|
338
|
+
if ('keywords' in loc)
|
|
339
|
+
versionAttrs.keywords = loc.keywords ?? null;
|
|
340
|
+
if ('whatsNew' in loc)
|
|
341
|
+
versionAttrs.whatsNew = loc.whatsNew ?? null;
|
|
342
|
+
if ('promotionalText' in loc)
|
|
343
|
+
versionAttrs.promotionalText = loc.promotionalText ?? null;
|
|
344
|
+
if ('marketingUrl' in loc)
|
|
345
|
+
versionAttrs.marketingUrl = loc.marketingUrl ?? null;
|
|
346
|
+
if ('supportUrl' in loc)
|
|
347
|
+
versionAttrs.supportUrl = loc.supportUrl ?? null;
|
|
348
|
+
const hasVersionFields = Object.keys(versionAttrs).length > 0;
|
|
349
|
+
if (hasVersionFields) {
|
|
350
|
+
const existingVersionLoc = existingVersionLocs.get(loc.locale);
|
|
351
|
+
if (existingVersionLoc) {
|
|
352
|
+
await this.request(`/appStoreVersionLocalizations/${existingVersionLoc.id}`, {
|
|
353
|
+
method: 'PATCH',
|
|
354
|
+
body: {
|
|
355
|
+
data: {
|
|
356
|
+
type: 'appStoreVersionLocalizations',
|
|
357
|
+
id: existingVersionLoc.id,
|
|
358
|
+
attributes: versionAttrs,
|
|
359
|
+
},
|
|
360
|
+
},
|
|
361
|
+
});
|
|
362
|
+
results.versionLocalizationsUpdated.push(loc.locale);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
// Try to create, but handle duplicate error by falling back to PATCH
|
|
366
|
+
try {
|
|
367
|
+
await this.request('/appStoreVersionLocalizations', {
|
|
368
|
+
method: 'POST',
|
|
369
|
+
body: {
|
|
370
|
+
data: {
|
|
371
|
+
type: 'appStoreVersionLocalizations',
|
|
372
|
+
attributes: { locale: loc.locale, ...versionAttrs },
|
|
373
|
+
relationships: {
|
|
374
|
+
appStoreVersion: {
|
|
375
|
+
data: { type: 'appStoreVersions', id: editableVersion.id },
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
},
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
results.versionLocalizationsCreated.push(loc.locale);
|
|
382
|
+
}
|
|
383
|
+
catch (error) {
|
|
384
|
+
// If duplicate error, fetch and PATCH instead
|
|
385
|
+
if (error instanceof Error &&
|
|
386
|
+
error.message.includes('DUPLICATE')) {
|
|
387
|
+
const refetch = await this.request(`/appStoreVersions/${editableVersion.id}/appStoreVersionLocalizations?filter[locale]=${loc.locale}`);
|
|
388
|
+
const existing = refetch.data[0];
|
|
389
|
+
if (existing) {
|
|
390
|
+
await this.request(`/appStoreVersionLocalizations/${existing.id}`, {
|
|
391
|
+
method: 'PATCH',
|
|
392
|
+
body: {
|
|
393
|
+
data: {
|
|
394
|
+
type: 'appStoreVersionLocalizations',
|
|
395
|
+
id: existing.id,
|
|
396
|
+
attributes: versionAttrs,
|
|
397
|
+
},
|
|
398
|
+
},
|
|
399
|
+
});
|
|
400
|
+
results.versionLocalizationsUpdated.push(loc.locale);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
throw error;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
throw error;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
return results;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
exports.AppStoreConnectClient = AppStoreConnectClient;
|
|
417
|
+
//# sourceMappingURL=appstoreconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appstoreconnect.js","sourceRoot":"","sources":["../../src/appstoreconnect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadConfig = loadConfig;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const toml = __importStar(require("toml"));
|
|
40
|
+
function loadConfig(configPath) {
|
|
41
|
+
const resolvedPath = configPath ?? path.join(process.cwd(), 'slowlane.toml');
|
|
42
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
43
|
+
throw new Error(`Config file not found: ${resolvedPath}`);
|
|
44
|
+
}
|
|
45
|
+
const content = fs.readFileSync(resolvedPath, 'utf-8');
|
|
46
|
+
const parsed = toml.parse(content);
|
|
47
|
+
const config = {};
|
|
48
|
+
if (parsed.appstore_connect) {
|
|
49
|
+
config.appstore_connect = {
|
|
50
|
+
issuer_id: parsed.appstore_connect.issuer_id,
|
|
51
|
+
key_id: parsed.appstore_connect.key_id,
|
|
52
|
+
private_key_path: parsed.appstore_connect.private_key_path,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (parsed.google_play) {
|
|
56
|
+
config.google_play = {
|
|
57
|
+
service_account_path: parsed.google_play.service_account_path,
|
|
58
|
+
packages: parsed.google_play.packages,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
config,
|
|
63
|
+
configDir: path.dirname(resolvedPath),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,gCAkCC;AAvDD,uCAAyB;AACzB,2CAA6B;AAC7B,2CAA6B;AAmB7B,SAAgB,UAAU,CAAC,UAAmB;IAI5C,MAAM,YAAY,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAE7E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA0B,CAAC;IAE5D,MAAM,MAAM,GAAmB,EAAE,CAAC;IAElC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,MAAM,CAAC,gBAAgB,GAAG;YACxB,SAAS,EAAE,MAAM,CAAC,gBAAgB,CAAC,SAAS;YAC5C,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM;YACtC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,gBAAgB;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,CAAC,WAAW,GAAG;YACnB,oBAAoB,EAAE,MAAM,CAAC,WAAW,CAAC,oBAAoB;YAC7D,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;SACtC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;KACtC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { GooglePlayConfig } from './appstoreconnect.js';
|
|
2
|
+
export interface GooglePlayApp {
|
|
3
|
+
packageName: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
}
|
|
6
|
+
export interface GooglePlayListing {
|
|
7
|
+
language: string;
|
|
8
|
+
title?: string;
|
|
9
|
+
shortDescription?: string;
|
|
10
|
+
fullDescription?: string;
|
|
11
|
+
video?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface GooglePlayMetadata {
|
|
14
|
+
packageName: string;
|
|
15
|
+
defaultLanguage?: string;
|
|
16
|
+
listings: GooglePlayListing[];
|
|
17
|
+
}
|
|
18
|
+
export interface GooglePlaySetMetadataResult {
|
|
19
|
+
listingsUpdated: string[];
|
|
20
|
+
listingsCreated: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare class GooglePlayClient {
|
|
23
|
+
private readonly auth;
|
|
24
|
+
private readonly publisher;
|
|
25
|
+
constructor(config: GooglePlayConfig, configDir: string);
|
|
26
|
+
listApps(): Promise<GooglePlayApp[]>;
|
|
27
|
+
getMetadata(packageName: string): Promise<GooglePlayMetadata>;
|
|
28
|
+
setMetadata(packageName: string, listings: GooglePlayListing[], options?: {
|
|
29
|
+
sendForReview?: boolean;
|
|
30
|
+
}): Promise<GooglePlaySetMetadataResult>;
|
|
31
|
+
}
|