@localizeaso/cli 0.1.0-preview.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 (58) hide show
  1. package/README.md +24 -0
  2. package/package.json +35 -0
  3. package/packages/asc-shared/dist/app-store-review.d.ts +610 -0
  4. package/packages/asc-shared/dist/app-store-review.d.ts.map +1 -0
  5. package/packages/asc-shared/dist/app-store-review.js +242 -0
  6. package/packages/asc-shared/dist/aso-keyword-map.d.ts +94 -0
  7. package/packages/asc-shared/dist/aso-keyword-map.d.ts.map +1 -0
  8. package/packages/asc-shared/dist/aso-keyword-map.js +292 -0
  9. package/packages/asc-shared/dist/constants.d.ts +15 -0
  10. package/packages/asc-shared/dist/constants.d.ts.map +1 -0
  11. package/packages/asc-shared/dist/constants.js +130 -0
  12. package/packages/asc-shared/dist/cross-localization.d.ts +29 -0
  13. package/packages/asc-shared/dist/cross-localization.d.ts.map +1 -0
  14. package/packages/asc-shared/dist/cross-localization.js +189 -0
  15. package/packages/asc-shared/dist/dedupe.d.ts +17 -0
  16. package/packages/asc-shared/dist/dedupe.d.ts.map +1 -0
  17. package/packages/asc-shared/dist/dedupe.js +104 -0
  18. package/packages/asc-shared/dist/design-tokens.d.ts +83 -0
  19. package/packages/asc-shared/dist/design-tokens.d.ts.map +1 -0
  20. package/packages/asc-shared/dist/design-tokens.js +73 -0
  21. package/packages/asc-shared/dist/index.d.ts +16 -0
  22. package/packages/asc-shared/dist/index.d.ts.map +1 -0
  23. package/packages/asc-shared/dist/index.js +16 -0
  24. package/packages/asc-shared/dist/keywords.d.ts +48 -0
  25. package/packages/asc-shared/dist/keywords.d.ts.map +1 -0
  26. package/packages/asc-shared/dist/keywords.js +376 -0
  27. package/packages/asc-shared/dist/limits.d.ts +11 -0
  28. package/packages/asc-shared/dist/limits.d.ts.map +1 -0
  29. package/packages/asc-shared/dist/limits.js +9 -0
  30. package/packages/asc-shared/dist/locales.d.ts +10 -0
  31. package/packages/asc-shared/dist/locales.d.ts.map +1 -0
  32. package/packages/asc-shared/dist/locales.js +314 -0
  33. package/packages/asc-shared/dist/monetization-boundary.d.ts +148 -0
  34. package/packages/asc-shared/dist/monetization-boundary.d.ts.map +1 -0
  35. package/packages/asc-shared/dist/monetization-boundary.js +365 -0
  36. package/packages/asc-shared/dist/post-approval-paths.d.ts +30 -0
  37. package/packages/asc-shared/dist/post-approval-paths.d.ts.map +1 -0
  38. package/packages/asc-shared/dist/post-approval-paths.js +25 -0
  39. package/packages/asc-shared/dist/review-gate-summary.d.ts +166 -0
  40. package/packages/asc-shared/dist/review-gate-summary.d.ts.map +1 -0
  41. package/packages/asc-shared/dist/review-gate-summary.js +354 -0
  42. package/packages/asc-shared/dist/reviewer-feedback.d.ts +19 -0
  43. package/packages/asc-shared/dist/reviewer-feedback.d.ts.map +1 -0
  44. package/packages/asc-shared/dist/reviewer-feedback.js +94 -0
  45. package/packages/asc-shared/dist/screenshot-review.d.ts +478 -0
  46. package/packages/asc-shared/dist/screenshot-review.d.ts.map +1 -0
  47. package/packages/asc-shared/dist/screenshot-review.js +17 -0
  48. package/packages/asc-shared/dist/supabase.types.d.ts +541 -0
  49. package/packages/asc-shared/dist/supabase.types.d.ts.map +1 -0
  50. package/packages/asc-shared/dist/supabase.types.js +5 -0
  51. package/packages/asc-shared/dist/validation.d.ts +42 -0
  52. package/packages/asc-shared/dist/validation.d.ts.map +1 -0
  53. package/packages/asc-shared/dist/validation.js +113 -0
  54. package/scripts/ensure-shared-build.mjs +76 -0
  55. package/scripts/export-astro-mcp-apps.mjs +841 -0
  56. package/scripts/localizeaso.mjs +2100 -0
  57. package/scripts/review-agent.mjs +9092 -0
  58. package/scripts/review-mcp.mjs +5931 -0
@@ -0,0 +1,314 @@
1
+ import { APP_STORE_LOCALES, ASC_LOCALE_ALIASES } from './constants.js';
2
+ export const ASC_LOCALES = [
3
+ 'ar-SA',
4
+ 'ca',
5
+ 'cs',
6
+ 'da',
7
+ 'de-DE',
8
+ 'el',
9
+ 'en-AU',
10
+ 'en-CA',
11
+ 'en-GB',
12
+ 'en-US',
13
+ 'es-ES',
14
+ 'es-MX',
15
+ 'fi',
16
+ 'fr-CA',
17
+ 'fr-FR',
18
+ 'he',
19
+ 'hi',
20
+ 'hr',
21
+ 'hu',
22
+ 'id',
23
+ 'it',
24
+ 'ja',
25
+ 'ko',
26
+ 'ms',
27
+ 'nl-NL',
28
+ 'no',
29
+ 'pl',
30
+ 'pt-BR',
31
+ 'pt-PT',
32
+ 'ro',
33
+ 'ru',
34
+ 'sk',
35
+ 'sv',
36
+ 'th',
37
+ 'tr',
38
+ 'uk',
39
+ 'vi',
40
+ 'zh-Hans',
41
+ 'zh-Hant',
42
+ ];
43
+ export const LOCALE_LABELS = {
44
+ 'ar-SA': 'Arabic (Saudi Arabia)',
45
+ ca: 'Catalan',
46
+ cs: 'Czech',
47
+ da: 'Danish',
48
+ 'de-DE': 'German (Germany)',
49
+ el: 'Greek',
50
+ 'en-AU': 'English (Australia)',
51
+ 'en-CA': 'English (Canada)',
52
+ 'en-GB': 'English (UK)',
53
+ 'en-US': 'English (US)',
54
+ 'es-ES': 'Spanish (Spain)',
55
+ 'es-MX': 'Spanish (Mexico)',
56
+ fi: 'Finnish',
57
+ 'fr-CA': 'French (Canada)',
58
+ 'fr-FR': 'French (France)',
59
+ he: 'Hebrew',
60
+ hi: 'Hindi',
61
+ hr: 'Croatian',
62
+ hu: 'Hungarian',
63
+ id: 'Indonesian',
64
+ it: 'Italian',
65
+ ja: 'Japanese',
66
+ ko: 'Korean',
67
+ ms: 'Malay',
68
+ 'nl-NL': 'Dutch',
69
+ no: 'Norwegian',
70
+ pl: 'Polish',
71
+ 'pt-BR': 'Portuguese (Brazil)',
72
+ 'pt-PT': 'Portuguese (Portugal)',
73
+ ro: 'Romanian',
74
+ ru: 'Russian',
75
+ sk: 'Slovak',
76
+ sv: 'Swedish',
77
+ th: 'Thai',
78
+ tr: 'Turkish',
79
+ uk: 'Ukrainian',
80
+ vi: 'Vietnamese',
81
+ 'zh-Hans': 'Chinese (Simplified)',
82
+ 'zh-Hant': 'Chinese (Traditional)',
83
+ };
84
+ export function normalizeLocale(input) {
85
+ const trimmed = input.trim().replace(/_/g, '-');
86
+ if (!trimmed)
87
+ return trimmed;
88
+ const parts = trimmed.split('-').filter(Boolean);
89
+ if (!parts.length)
90
+ return trimmed;
91
+ const normalized = [];
92
+ const lang = parts[0]?.toLowerCase();
93
+ if (lang)
94
+ normalized.push(lang);
95
+ for (let i = 1; i < parts.length; i += 1) {
96
+ const part = parts[i] ?? '';
97
+ if (!part)
98
+ continue;
99
+ if (part.length === 4) {
100
+ normalized.push(part[0].toUpperCase() + part.slice(1).toLowerCase());
101
+ }
102
+ else {
103
+ normalized.push(part.toUpperCase());
104
+ }
105
+ }
106
+ return normalized.join('-');
107
+ }
108
+ export function normalizeAscLocale(input) {
109
+ const normalized = normalizeLocale(input);
110
+ return ASC_LOCALE_ALIASES[normalized] ?? normalized;
111
+ }
112
+ const APP_STORE_LABELS = new Map(APP_STORE_LOCALES.map((entry) => [normalizeLocale(entry.code), entry.name]));
113
+ export function localeLabel(locale) {
114
+ const normalized = normalizeLocale(locale);
115
+ return LOCALE_LABELS[locale] ?? APP_STORE_LABELS.get(normalized) ?? locale;
116
+ }
117
+ export function sortLocales(locales) {
118
+ return [...locales].sort((a, b) => a.localeCompare(b));
119
+ }
120
+ export function sortLocalesWithPriority(locales, priority = ['en-US']) {
121
+ return [...locales].sort((a, b) => {
122
+ for (const code of priority) {
123
+ if (a === code)
124
+ return -1;
125
+ if (b === code)
126
+ return 1;
127
+ }
128
+ return a.localeCompare(b);
129
+ });
130
+ }
131
+ const APP_STORE_LOCALE_SET = new Set(APP_STORE_LOCALES.map((locale) => normalizeLocale(locale.code)));
132
+ const ASC_LOCALE_SET = new Set(ASC_LOCALES.map((locale) => normalizeLocale(locale)));
133
+ const KNOWN_LOCALE_SET = new Set([...APP_STORE_LOCALE_SET, ...ASC_LOCALE_SET]);
134
+ const LANGUAGE_DEFAULT_LOCALES = {
135
+ ar: 'ar-SA',
136
+ ca: 'ca',
137
+ cs: 'cs',
138
+ da: 'da',
139
+ de: 'de-DE',
140
+ el: 'el',
141
+ en: 'en-US',
142
+ es: 'es-ES',
143
+ fi: 'fi',
144
+ fr: 'fr-FR',
145
+ he: 'he',
146
+ hi: 'hi',
147
+ hr: 'hr',
148
+ hu: 'hu',
149
+ id: 'id',
150
+ it: 'it',
151
+ ja: 'ja',
152
+ ko: 'ko',
153
+ ms: 'ms',
154
+ nl: 'nl-NL',
155
+ no: 'no',
156
+ pl: 'pl',
157
+ pt: 'pt-PT',
158
+ ro: 'ro',
159
+ ru: 'ru',
160
+ sk: 'sk',
161
+ sv: 'sv',
162
+ th: 'th',
163
+ tr: 'tr',
164
+ uk: 'uk',
165
+ vi: 'vi',
166
+ zh: 'zh-Hans',
167
+ };
168
+ const COUNTRY_DEFAULT_LOCALES = {
169
+ us: 'en-US',
170
+ gb: 'en-GB',
171
+ uk: 'en-GB',
172
+ au: 'en-AU',
173
+ ca: 'en-CA',
174
+ fr: 'fr-FR',
175
+ de: 'de-DE',
176
+ es: 'es-ES',
177
+ mx: 'es-MX',
178
+ br: 'pt-BR',
179
+ pt: 'pt-PT',
180
+ nl: 'nl-NL',
181
+ it: 'it',
182
+ jp: 'ja',
183
+ kr: 'ko',
184
+ cn: 'zh-Hans',
185
+ tw: 'zh-Hant',
186
+ hk: 'zh-Hant',
187
+ sa: 'ar-SA',
188
+ se: 'sv',
189
+ no: 'no',
190
+ dk: 'da',
191
+ fi: 'fi',
192
+ pl: 'pl',
193
+ ro: 'ro',
194
+ ru: 'ru',
195
+ tr: 'tr',
196
+ in: 'hi',
197
+ id: 'id',
198
+ th: 'th',
199
+ vn: 'vi',
200
+ il: 'he',
201
+ cz: 'cs',
202
+ gr: 'el',
203
+ hu: 'hu',
204
+ sk: 'sk',
205
+ ua: 'uk',
206
+ hr: 'hr',
207
+ my: 'ms',
208
+ };
209
+ const COUNTRY_NAME_DEFAULT_LOCALES = {
210
+ australia: 'en-AU',
211
+ brazil: 'pt-BR',
212
+ canada: 'en-CA',
213
+ china: 'zh-Hans',
214
+ croatia: 'hr',
215
+ czechia: 'cs',
216
+ czechrepublic: 'cs',
217
+ denmark: 'da',
218
+ finland: 'fi',
219
+ france: 'fr-FR',
220
+ germany: 'de-DE',
221
+ greece: 'el',
222
+ hongkong: 'zh-Hant',
223
+ hungary: 'hu',
224
+ india: 'hi',
225
+ indonesia: 'id',
226
+ israel: 'he',
227
+ italy: 'it',
228
+ japan: 'ja',
229
+ korea: 'ko',
230
+ malaysia: 'ms',
231
+ mexico: 'es-MX',
232
+ netherlands: 'nl-NL',
233
+ norway: 'no',
234
+ poland: 'pl',
235
+ portugal: 'pt-PT',
236
+ romania: 'ro',
237
+ russia: 'ru',
238
+ saudiarabia: 'ar-SA',
239
+ slovakia: 'sk',
240
+ southkorea: 'ko',
241
+ spain: 'es-ES',
242
+ sweden: 'sv',
243
+ taiwan: 'zh-Hant',
244
+ thailand: 'th',
245
+ turkey: 'tr',
246
+ ukraine: 'uk',
247
+ unitedkingdom: 'en-GB',
248
+ unitedstates: 'en-US',
249
+ usa: 'en-US',
250
+ vietnam: 'vi',
251
+ };
252
+ const REGIONAL_INDICATOR_A = 0x1f1e6;
253
+ const REGIONAL_INDICATOR_Z = 0x1f1ff;
254
+ const REGIONAL_INDICATOR_OFFSET = 127397;
255
+ function resolveLocaleFromToken(token) {
256
+ const tokenNormalized = normalizeAscLocale(token);
257
+ if (KNOWN_LOCALE_SET.has(tokenNormalized))
258
+ return tokenNormalized;
259
+ const lower = tokenNormalized.toLowerCase();
260
+ if (LANGUAGE_DEFAULT_LOCALES[lower]) {
261
+ return LANGUAGE_DEFAULT_LOCALES[lower];
262
+ }
263
+ if (COUNTRY_DEFAULT_LOCALES[lower]) {
264
+ return COUNTRY_DEFAULT_LOCALES[lower];
265
+ }
266
+ const compact = lower.replace(/[^a-z]/g, '');
267
+ if (COUNTRY_NAME_DEFAULT_LOCALES[compact]) {
268
+ return COUNTRY_NAME_DEFAULT_LOCALES[compact];
269
+ }
270
+ return '';
271
+ }
272
+ function resolveLocaleFromFlagEmoji(input) {
273
+ const chars = [...input];
274
+ for (let i = 0; i < chars.length - 1; i += 1) {
275
+ const first = chars[i]?.codePointAt(0);
276
+ const second = chars[i + 1]?.codePointAt(0);
277
+ if (first === undefined ||
278
+ second === undefined ||
279
+ first < REGIONAL_INDICATOR_A ||
280
+ first > REGIONAL_INDICATOR_Z ||
281
+ second < REGIONAL_INDICATOR_A ||
282
+ second > REGIONAL_INDICATOR_Z) {
283
+ continue;
284
+ }
285
+ const countryCode = String.fromCharCode(first - REGIONAL_INDICATOR_OFFSET, second - REGIONAL_INDICATOR_OFFSET).toLowerCase();
286
+ return COUNTRY_DEFAULT_LOCALES[countryCode] ?? '';
287
+ }
288
+ return '';
289
+ }
290
+ export function resolveStoreLocale(input) {
291
+ const trimmed = input.trim();
292
+ if (!trimmed)
293
+ return '';
294
+ const normalized = normalizeAscLocale(trimmed);
295
+ if (KNOWN_LOCALE_SET.has(normalized))
296
+ return normalized;
297
+ const byFlag = resolveLocaleFromFlagEmoji(trimmed);
298
+ if (byFlag)
299
+ return byFlag;
300
+ const compact = trimmed.toLowerCase().replace(/[^a-z]/g, '');
301
+ if (compact && COUNTRY_NAME_DEFAULT_LOCALES[compact]) {
302
+ return COUNTRY_NAME_DEFAULT_LOCALES[compact];
303
+ }
304
+ const tokens = trimmed
305
+ .split(/[^A-Za-z-]+/)
306
+ .map((value) => value.trim())
307
+ .filter((value) => value.length >= 2 && value.length <= 32);
308
+ for (const token of tokens) {
309
+ const resolved = resolveLocaleFromToken(token);
310
+ if (resolved)
311
+ return resolved;
312
+ }
313
+ return '';
314
+ }
@@ -0,0 +1,148 @@
1
+ export type LocalizeAsoAgentPassPackagingDecision = {
2
+ defaultPaidPlan: 'agent';
3
+ defaultPaidPlanLabel: 'Agent Pass';
4
+ freeToolRole: 'acquisition_and_trust';
5
+ recommendedFreeTool: 'pricing_parity_cli';
6
+ pricingParityCliRole: string;
7
+ openSourceBoundary: string;
8
+ primaryRevenueSurface: string;
9
+ freeToolIncludes: ReadonlyArray<string>;
10
+ byoPaidIncludes: ReadonlyArray<string>;
11
+ hostedUpsellIncludes: ReadonlyArray<string>;
12
+ defaultPricingModel: 'one_time_or_lifetime_byo_agent_pass';
13
+ recommendedOneTimePrices: Readonly<Record<'agent' | 'submit' | 'launch' | 'global' | 'portfolio', string>>;
14
+ avoidPositioning: ReadonlyArray<string>;
15
+ };
16
+ export type LocalizeAsoMonetizationPackage = {
17
+ id: 'free_local_cli' | 'agent_pass' | 'submit_pass' | 'hosted_ai_pass' | 'hosted_full_pass' | 'portfolio_pass';
18
+ label: string;
19
+ distribution: 'free' | 'paid';
20
+ purchaseModel: 'free_preview' | 'one_time_or_lifetime' | 'one_time_hosted_submit_credit_or_subscription' | 'one_time_hosted_ai_credit_or_subscription' | 'one_time_hosted_credit_or_subscription';
21
+ priceAnchor?: string;
22
+ aiCostOwner: 'none' | 'customer' | 'localizeaso';
23
+ appStoreConnectCredentialMode: 'not_required' | 'local_human_after_approval' | 'hosted_after_approval';
24
+ persistentReviewJobs: boolean;
25
+ reviewHistory: boolean;
26
+ figmaApplyPlans: boolean;
27
+ appSlotsIncluded: boolean;
28
+ appSlotLimit: number | null;
29
+ hostedAi: boolean;
30
+ hostedSubmit: boolean;
31
+ localAscHandoffAfterApproval: boolean;
32
+ includes: string[];
33
+ excludes: string[];
34
+ bestFor: string;
35
+ };
36
+ export type LocalizeAsoMonetizationValueLedger = {
37
+ byoAgentOneTime: {
38
+ purchaseModel: 'cheap_one_time_or_lifetime';
39
+ aiCostOwner: 'customer';
40
+ includes: ReadonlyArray<string>;
41
+ excludes: ReadonlyArray<string>;
42
+ };
43
+ hostedConvenience: {
44
+ purchaseModel: 'paid_hosted_credit_or_subscription';
45
+ aiCostOwner: 'localizeaso_or_customer_for_submit_only';
46
+ includes: ReadonlyArray<string>;
47
+ excludes: ReadonlyArray<string>;
48
+ };
49
+ approvalGate: {
50
+ appliesBefore: 'figma_apply_or_app_store_connect_submit';
51
+ required: true;
52
+ agentCanBypass: false;
53
+ notes: ReadonlyArray<string>;
54
+ };
55
+ };
56
+ export type LocalizeAsoMonetizationBoundary = {
57
+ kind: 'localizeaso_monetization_boundary';
58
+ reviewKind: 'screenshots' | 'field' | 'workspace';
59
+ reviewSurface?: 'metadata' | 'keywords' | 'pricing';
60
+ freeLocalDistribution: {
61
+ purpose: string;
62
+ recommendedFreeTool: LocalizeAsoAgentPassPackagingDecision['recommendedFreeTool'];
63
+ pricingParityCliRole: string;
64
+ openSourceBoundary: string;
65
+ includes: string[];
66
+ excludes: string[];
67
+ };
68
+ localAgentSafe: string[];
69
+ passRequired: {
70
+ reviewJobs: string;
71
+ reviewHistory: string;
72
+ figmaPlugin: string;
73
+ pricingReview: string;
74
+ appSlots: string;
75
+ hostedAi: string;
76
+ hostedSubmit: string;
77
+ };
78
+ agentPass: {
79
+ purchaseModel: 'one_time_or_lifetime';
80
+ aiCostOwner: 'customer';
81
+ hostedAiIncluded: false;
82
+ submitMode: 'local_asc_handoff_after_human_approval';
83
+ bestFor: string;
84
+ };
85
+ hostedPass: {
86
+ purchaseModel: 'one_time_hosted_credit_or_subscription';
87
+ aiCostOwner: 'localizeaso';
88
+ hostedAiIncluded: true;
89
+ submitMode: 'hosted_submit_after_human_approval';
90
+ bestFor: string;
91
+ };
92
+ hostedSubmitPass: {
93
+ purchaseModel: 'one_time_hosted_submit_credit_or_subscription';
94
+ aiCostOwner: 'customer';
95
+ hostedAiIncluded: false;
96
+ submitMode: 'hosted_submit_after_human_approval';
97
+ bestFor: string;
98
+ };
99
+ hostedAiPass: {
100
+ purchaseModel: 'one_time_hosted_ai_credit_or_subscription';
101
+ aiCostOwner: 'localizeaso';
102
+ hostedAiIncluded: true;
103
+ submitMode: 'local_asc_or_hosted_submit_after_human_approval';
104
+ bestFor: string;
105
+ };
106
+ revenueModel: {
107
+ defaultMotion: string;
108
+ freeSurface: string;
109
+ paidSurface: string;
110
+ primaryRevenueSurface: string;
111
+ recommendedDefaultPlan: 'agent';
112
+ upsellTriggers: string[];
113
+ avoid: string[];
114
+ };
115
+ packageMatrix: LocalizeAsoMonetizationPackage[];
116
+ valueLedger: LocalizeAsoMonetizationValueLedger;
117
+ packagingDecision: LocalizeAsoAgentPassPackagingDecision;
118
+ recommendedOneTimePrices: LocalizeAsoAgentPassPackagingDecision['recommendedOneTimePrices'];
119
+ pricingGuidance: string;
120
+ appStoreConnectCredentials: string;
121
+ agentInstruction: string;
122
+ };
123
+ export declare const LOCALIZEASO_AGENT_PASS_PACKAGING_DECISION: {
124
+ readonly defaultPaidPlan: "agent";
125
+ readonly defaultPaidPlanLabel: "Agent Pass";
126
+ readonly freeToolRole: "acquisition_and_trust";
127
+ readonly recommendedFreeTool: "pricing_parity_cli";
128
+ readonly pricingParityCliRole: "Use pricing parity, Astro CSV import, keyword-context conversion, and manifest generation as the useful free/OSS CLI wedge; charge when the user creates a persistent LocalizeASO review job with consent UI, history, Figma/apply handoffs, app slots, or hosted submit.";
129
+ readonly openSourceBoundary: "Open-source local setup, keyword conversion, pricing-parity manifests, prompt/template generation, and already-approved local asc handoff helpers. Keep backend persistence, review history, consent screens, Figma apply plans, hosted AI, app slots, and hosted submit in paid LocalizeASO passes.";
130
+ readonly primaryRevenueSurface: "Human review/consent screens with current/proposed/final diffs, keyword evidence, warnings, approval receipts, review history, Figma apply plans, app slots, local asc handoffs after approval, and optional hosted AI or hosted submit convenience.";
131
+ readonly freeToolIncludes: readonly ["local setup", "Astro/CSV keyword conversion", "prompt/template generation", "pricing parity manifests"];
132
+ readonly byoPaidIncludes: readonly ["persistent review jobs", "human review/consent screens with diffs and signal evidence", "review history", "approval receipts", "reviewer feedback", "Figma apply plans", "app slots", "local asc handoffs after human approval"];
133
+ readonly hostedUpsellIncludes: readonly ["hosted submit-only pass for BYO/Codex proposals after human approval", "LocalizeASO-hosted AI proposal generation", "hosted App Store Connect upload/submit convenience after human approval", "larger app or team coverage"];
134
+ readonly defaultPricingModel: "one_time_or_lifetime_byo_agent_pass";
135
+ readonly recommendedOneTimePrices: {
136
+ readonly agent: "$29";
137
+ readonly submit: "$39";
138
+ readonly launch: "$49";
139
+ readonly global: "$149";
140
+ readonly portfolio: "$299";
141
+ };
142
+ readonly avoidPositioning: readonly ["usage-based LocalizeASO AI pricing for BYO Codex/AI runs", "promising hosted submit inside Agent Pass", "requiring App Store Connect credentials for proposal review"];
143
+ };
144
+ export declare function localizeAsoAgentPassPackagingDecision(): LocalizeAsoAgentPassPackagingDecision;
145
+ export declare function buildLocalizeAsoMonetizationBoundary(reviewKind: 'screenshots' | 'field' | 'workspace', options?: {
146
+ reviewSurface?: 'metadata' | 'keywords' | 'pricing';
147
+ }): LocalizeAsoMonetizationBoundary;
148
+ //# sourceMappingURL=monetization-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monetization-boundary.d.ts","sourceRoot":"","sources":["../src/monetization-boundary.ts"],"names":[],"mappings":"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"}