adapty 0.10.0 → 0.11.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.
|
@@ -18,6 +18,10 @@ export default class PlacementsCreate extends Command {
|
|
|
18
18
|
description: 'JSON array of audience entries. Every entry needs an explicit content_type. '
|
|
19
19
|
+ 'Paywall: {content_type:"paywall", segment_ids, paywall_id, priority}. '
|
|
20
20
|
+ 'Flow: {content_type:"flow", segment_ids, flow_id, priority}. '
|
|
21
|
+
+ 'A/B test (as `placements get` shows it): {content_type:"ab_test" | "flow_ab_test", ab_test_id, segment_ids, priority}; '
|
|
22
|
+
+ 'crossplacement entries ("cross_ab_test", "flow_cross_ab_test") are read-only, the API keeps the stored ones. '
|
|
23
|
+
+ 'Write the entries of `placements get` back unchanged to keep a running test: a write that removes or replaces '
|
|
24
|
+
+ 'an A/B test entry stops that test with no winner. '
|
|
21
25
|
+ 'A flow must be published first (flows publish) — attaching a draft flow returns 400.',
|
|
22
26
|
exactlyOne: ['paywall-id', 'audiences'],
|
|
23
27
|
}),
|
|
@@ -22,6 +22,10 @@ export default class PlacementsUpdate extends Command {
|
|
|
22
22
|
description: 'JSON array of audience entries. Every entry needs an explicit content_type. '
|
|
23
23
|
+ 'Paywall: {content_type:"paywall", segment_ids, paywall_id, priority}. '
|
|
24
24
|
+ 'Flow: {content_type:"flow", segment_ids, flow_id, priority}. '
|
|
25
|
+
+ 'A/B test (as `placements get` shows it): {content_type:"ab_test" | "flow_ab_test", ab_test_id, segment_ids, priority}; '
|
|
26
|
+
+ 'crossplacement entries ("cross_ab_test", "flow_cross_ab_test") are read-only, the API keeps the stored ones. '
|
|
27
|
+
+ 'Write the entries of `placements get` back unchanged to keep a running test: a write that removes or replaces '
|
|
28
|
+
+ 'an A/B test entry stops that test with no winner. '
|
|
25
29
|
+ 'A flow must be published first (flows publish) — attaching a draft flow returns 400.',
|
|
26
30
|
exactlyOne: ['paywall-id', 'audiences'],
|
|
27
31
|
}),
|
|
@@ -173,7 +173,30 @@ export type PlacementFlowAudienceEntryDTO = {
|
|
|
173
173
|
priority: number;
|
|
174
174
|
segment_ids?: string[];
|
|
175
175
|
};
|
|
176
|
-
|
|
176
|
+
/**
|
|
177
|
+
* An audience that runs a regular A/B test: the running content of the audience is the test.
|
|
178
|
+
* `ab_test_title` is read-only: the API ignores it on a write. Writing the same `ab_test_id` back
|
|
179
|
+
* on the same segments keeps the test running; any other id or segment set starts or stops a test.
|
|
180
|
+
*/
|
|
181
|
+
export type PlacementABTestAudienceEntryDTO = {
|
|
182
|
+
ab_test_id: string;
|
|
183
|
+
ab_test_title?: string;
|
|
184
|
+
content_type: 'ab_test' | 'flow_ab_test';
|
|
185
|
+
priority: number;
|
|
186
|
+
segment_ids?: string[];
|
|
187
|
+
};
|
|
188
|
+
/**
|
|
189
|
+
* An audience that shows a crossplacement A/B test (`ab_test_id` is the parent test). Read-only:
|
|
190
|
+
* the API ignores these entries on a write and keeps the stored ones.
|
|
191
|
+
*/
|
|
192
|
+
export type PlacementCrossABTestAudienceEntryDTO = {
|
|
193
|
+
ab_test_id: string;
|
|
194
|
+
ab_test_title?: string;
|
|
195
|
+
content_type: 'cross_ab_test' | 'flow_cross_ab_test';
|
|
196
|
+
priority: number;
|
|
197
|
+
segment_ids?: string[];
|
|
198
|
+
};
|
|
199
|
+
export type PlacementAudienceEntryDTO = PlacementABTestAudienceEntryDTO | PlacementCrossABTestAudienceEntryDTO | PlacementFlowAudienceEntryDTO | PlacementPaywallAudienceEntryDTO;
|
|
177
200
|
export type PlacementSummaryDTO = {
|
|
178
201
|
developer_id: string;
|
|
179
202
|
id: string;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Returns a human-readable problem string when `entry` is not a valid placement
|
|
3
3
|
* audience entry, or `null` when it is well-formed. Every entry must carry an
|
|
4
|
-
* explicit `content_type
|
|
4
|
+
* explicit `content_type`; there is no implicit paywall. A kind that this CLI does
|
|
5
|
+
* not know is refused with an "update the CLI" text, never with a text that invites
|
|
6
|
+
* deleting the entry: a write without a running A/B test entry stops that test.
|
|
5
7
|
*/
|
|
6
8
|
export declare function audienceEntryProblem(entry: unknown): null | string;
|
|
@@ -2,24 +2,31 @@
|
|
|
2
2
|
// The DTO union in api-schemas.ts requires content_type, but a JSON.parse gives
|
|
3
3
|
// back `unknown`, so the type alone cannot enforce it — this does, the same way
|
|
4
4
|
// for humans and agents (no prompting).
|
|
5
|
+
/** The A/B test audience kinds: regular and crossplacement, paywall and flow. Each needs `ab_test_id`. */
|
|
6
|
+
const A_B_TEST_KINDS = new Set(['ab_test', 'cross_ab_test', 'flow_ab_test', 'flow_cross_ab_test']);
|
|
5
7
|
/**
|
|
6
8
|
* Returns a human-readable problem string when `entry` is not a valid placement
|
|
7
9
|
* audience entry, or `null` when it is well-formed. Every entry must carry an
|
|
8
|
-
* explicit `content_type
|
|
10
|
+
* explicit `content_type`; there is no implicit paywall. A kind that this CLI does
|
|
11
|
+
* not know is refused with an "update the CLI" text, never with a text that invites
|
|
12
|
+
* deleting the entry: a write without a running A/B test entry stops that test.
|
|
9
13
|
*/
|
|
10
14
|
export function audienceEntryProblem(entry) {
|
|
11
15
|
if (typeof entry !== 'object' || entry === null) {
|
|
12
16
|
return 'each entry must be a JSON object';
|
|
13
17
|
}
|
|
14
|
-
const { content_type: contentType, flow_id: flowId, paywall_id: paywallId } = entry;
|
|
15
|
-
if (
|
|
16
|
-
return 'content_type is required
|
|
18
|
+
const { ab_test_id: abTestId, content_type: contentType, flow_id: flowId, paywall_id: paywallId, } = entry;
|
|
19
|
+
if (typeof contentType !== 'string') {
|
|
20
|
+
return 'content_type is required: "paywall", "flow", "ab_test", "flow_ab_test", "cross_ab_test" or "flow_cross_ab_test"';
|
|
17
21
|
}
|
|
18
|
-
if (contentType === 'paywall'
|
|
19
|
-
return 'a paywall entry requires paywall_id';
|
|
22
|
+
if (contentType === 'paywall') {
|
|
23
|
+
return typeof paywallId === 'string' ? null : 'a paywall entry requires paywall_id';
|
|
20
24
|
}
|
|
21
|
-
if (contentType === 'flow'
|
|
22
|
-
return 'a flow entry requires flow_id';
|
|
25
|
+
if (contentType === 'flow') {
|
|
26
|
+
return typeof flowId === 'string' ? null : 'a flow entry requires flow_id';
|
|
23
27
|
}
|
|
24
|
-
|
|
28
|
+
if (!A_B_TEST_KINDS.has(contentType)) {
|
|
29
|
+
return 'this CLI does not know this audience kind; update the CLI';
|
|
30
|
+
}
|
|
31
|
+
return typeof abTestId === 'string' ? null : `an entry with content_type "${contentType}" requires ab_test_id`;
|
|
25
32
|
}
|
package/oclif.manifest.json
CHANGED
|
@@ -66,13 +66,12 @@
|
|
|
66
66
|
"feedback.js"
|
|
67
67
|
]
|
|
68
68
|
},
|
|
69
|
-
"
|
|
69
|
+
"access-levels:create": {
|
|
70
70
|
"aliases": [],
|
|
71
71
|
"args": {},
|
|
72
|
-
"description": "Create a
|
|
72
|
+
"description": "Create a custom access level",
|
|
73
73
|
"examples": [
|
|
74
|
-
"<%= config.bin %>
|
|
75
|
-
"<%= config.bin %> apps create --title \"My App\" --platform ios --platform android --apple-bundle-id com.example.app --google-bundle-id com.example.app"
|
|
74
|
+
"<%= config.bin %> access-levels create --app 550e8400-... --sdk-id vip --title \"VIP Access\""
|
|
76
75
|
],
|
|
77
76
|
"flags": {
|
|
78
77
|
"json": {
|
|
@@ -82,36 +81,26 @@
|
|
|
82
81
|
"allowNo": false,
|
|
83
82
|
"type": "boolean"
|
|
84
83
|
},
|
|
85
|
-
"
|
|
86
|
-
"description": "App
|
|
87
|
-
"name": "
|
|
84
|
+
"app": {
|
|
85
|
+
"description": "App ID (UUID)",
|
|
86
|
+
"name": "app",
|
|
88
87
|
"required": true,
|
|
89
88
|
"hasDynamicHelp": false,
|
|
90
89
|
"multiple": false,
|
|
91
90
|
"type": "option"
|
|
92
91
|
},
|
|
93
|
-
"
|
|
94
|
-
"description": "
|
|
95
|
-
"name": "
|
|
92
|
+
"sdk-id": {
|
|
93
|
+
"description": "Access level SDK identifier",
|
|
94
|
+
"name": "sdk-id",
|
|
96
95
|
"required": true,
|
|
97
96
|
"hasDynamicHelp": false,
|
|
98
|
-
"multiple": true,
|
|
99
|
-
"options": [
|
|
100
|
-
"ios",
|
|
101
|
-
"android"
|
|
102
|
-
],
|
|
103
|
-
"type": "option"
|
|
104
|
-
},
|
|
105
|
-
"apple-bundle-id": {
|
|
106
|
-
"description": "Apple bundle ID (required with --platform ios)",
|
|
107
|
-
"name": "apple-bundle-id",
|
|
108
|
-
"hasDynamicHelp": false,
|
|
109
97
|
"multiple": false,
|
|
110
98
|
"type": "option"
|
|
111
99
|
},
|
|
112
|
-
"
|
|
113
|
-
"description": "
|
|
114
|
-
"name": "
|
|
100
|
+
"title": {
|
|
101
|
+
"description": "Access level title",
|
|
102
|
+
"name": "title",
|
|
103
|
+
"required": true,
|
|
115
104
|
"hasDynamicHelp": false,
|
|
116
105
|
"multiple": false,
|
|
117
106
|
"type": "option"
|
|
@@ -119,31 +108,32 @@
|
|
|
119
108
|
},
|
|
120
109
|
"hasDynamicHelp": false,
|
|
121
110
|
"hiddenAliases": [],
|
|
122
|
-
"id": "
|
|
111
|
+
"id": "access-levels:create",
|
|
123
112
|
"pluginAlias": "adapty",
|
|
124
113
|
"pluginName": "adapty",
|
|
125
114
|
"pluginType": "core",
|
|
126
115
|
"strict": true,
|
|
116
|
+
"enableJsonFlag": true,
|
|
127
117
|
"isESM": true,
|
|
128
118
|
"relativePath": [
|
|
129
119
|
"dist",
|
|
130
120
|
"commands",
|
|
131
|
-
"
|
|
121
|
+
"access-levels",
|
|
132
122
|
"create.js"
|
|
133
123
|
]
|
|
134
124
|
},
|
|
135
|
-
"
|
|
125
|
+
"access-levels:get": {
|
|
136
126
|
"aliases": [],
|
|
137
127
|
"args": {
|
|
138
|
-
"
|
|
139
|
-
"description": "
|
|
140
|
-
"name": "
|
|
128
|
+
"access_level_id": {
|
|
129
|
+
"description": "Access Level ID (UUID)",
|
|
130
|
+
"name": "access_level_id",
|
|
141
131
|
"required": true
|
|
142
132
|
}
|
|
143
133
|
},
|
|
144
|
-
"description": "Get
|
|
134
|
+
"description": "Get access level details",
|
|
145
135
|
"examples": [
|
|
146
|
-
"<%= config.bin %>
|
|
136
|
+
"<%= config.bin %> access-levels get --app UUID 550e8400-e29b-41d4-a716-446655440000"
|
|
147
137
|
],
|
|
148
138
|
"flags": {
|
|
149
139
|
"json": {
|
|
@@ -152,30 +142,38 @@
|
|
|
152
142
|
"name": "json",
|
|
153
143
|
"allowNo": false,
|
|
154
144
|
"type": "boolean"
|
|
145
|
+
},
|
|
146
|
+
"app": {
|
|
147
|
+
"description": "App ID (UUID)",
|
|
148
|
+
"name": "app",
|
|
149
|
+
"required": true,
|
|
150
|
+
"hasDynamicHelp": false,
|
|
151
|
+
"multiple": false,
|
|
152
|
+
"type": "option"
|
|
155
153
|
}
|
|
156
154
|
},
|
|
157
155
|
"hasDynamicHelp": false,
|
|
158
156
|
"hiddenAliases": [],
|
|
159
|
-
"id": "
|
|
157
|
+
"id": "access-levels:get",
|
|
160
158
|
"pluginAlias": "adapty",
|
|
161
159
|
"pluginName": "adapty",
|
|
162
160
|
"pluginType": "core",
|
|
163
161
|
"strict": true,
|
|
162
|
+
"enableJsonFlag": true,
|
|
164
163
|
"isESM": true,
|
|
165
164
|
"relativePath": [
|
|
166
165
|
"dist",
|
|
167
166
|
"commands",
|
|
168
|
-
"
|
|
167
|
+
"access-levels",
|
|
169
168
|
"get.js"
|
|
170
169
|
]
|
|
171
170
|
},
|
|
172
|
-
"
|
|
171
|
+
"access-levels:list": {
|
|
173
172
|
"aliases": [],
|
|
174
173
|
"args": {},
|
|
175
|
-
"description": "List
|
|
174
|
+
"description": "List access levels for an app",
|
|
176
175
|
"examples": [
|
|
177
|
-
"<%= config.bin %>
|
|
178
|
-
"<%= config.bin %> apps list --page 2 --page-size 10"
|
|
176
|
+
"<%= config.bin %> access-levels list --app 550e8400-e29b-41d4-a716-446655440000"
|
|
179
177
|
],
|
|
180
178
|
"flags": {
|
|
181
179
|
"json": {
|
|
@@ -185,6 +183,14 @@
|
|
|
185
183
|
"allowNo": false,
|
|
186
184
|
"type": "boolean"
|
|
187
185
|
},
|
|
186
|
+
"app": {
|
|
187
|
+
"description": "App ID (UUID)",
|
|
188
|
+
"name": "app",
|
|
189
|
+
"required": true,
|
|
190
|
+
"hasDynamicHelp": false,
|
|
191
|
+
"multiple": false,
|
|
192
|
+
"type": "option"
|
|
193
|
+
},
|
|
188
194
|
"page": {
|
|
189
195
|
"description": "Page number",
|
|
190
196
|
"name": "page",
|
|
@@ -204,31 +210,32 @@
|
|
|
204
210
|
},
|
|
205
211
|
"hasDynamicHelp": false,
|
|
206
212
|
"hiddenAliases": [],
|
|
207
|
-
"id": "
|
|
213
|
+
"id": "access-levels:list",
|
|
208
214
|
"pluginAlias": "adapty",
|
|
209
215
|
"pluginName": "adapty",
|
|
210
216
|
"pluginType": "core",
|
|
211
217
|
"strict": true,
|
|
218
|
+
"enableJsonFlag": true,
|
|
212
219
|
"isESM": true,
|
|
213
220
|
"relativePath": [
|
|
214
221
|
"dist",
|
|
215
222
|
"commands",
|
|
216
|
-
"
|
|
223
|
+
"access-levels",
|
|
217
224
|
"list.js"
|
|
218
225
|
]
|
|
219
226
|
},
|
|
220
|
-
"
|
|
227
|
+
"access-levels:update": {
|
|
221
228
|
"aliases": [],
|
|
222
229
|
"args": {
|
|
223
|
-
"
|
|
224
|
-
"description": "
|
|
225
|
-
"name": "
|
|
230
|
+
"access_level_id": {
|
|
231
|
+
"description": "Access Level ID (UUID)",
|
|
232
|
+
"name": "access_level_id",
|
|
226
233
|
"required": true
|
|
227
234
|
}
|
|
228
235
|
},
|
|
229
|
-
"description": "Update an
|
|
236
|
+
"description": "Update an access level",
|
|
230
237
|
"examples": [
|
|
231
|
-
"<%= config.bin %>
|
|
238
|
+
"<%= config.bin %> access-levels update --app UUID 550e8400-... --title \"VIP Access\""
|
|
232
239
|
],
|
|
233
240
|
"flags": {
|
|
234
241
|
"json": {
|
|
@@ -238,23 +245,18 @@
|
|
|
238
245
|
"allowNo": false,
|
|
239
246
|
"type": "boolean"
|
|
240
247
|
},
|
|
241
|
-
"
|
|
242
|
-
"description": "App
|
|
243
|
-
"name": "
|
|
244
|
-
"
|
|
245
|
-
"multiple": false,
|
|
246
|
-
"type": "option"
|
|
247
|
-
},
|
|
248
|
-
"apple-bundle-id": {
|
|
249
|
-
"description": "Apple bundle ID",
|
|
250
|
-
"name": "apple-bundle-id",
|
|
248
|
+
"app": {
|
|
249
|
+
"description": "App ID (UUID)",
|
|
250
|
+
"name": "app",
|
|
251
|
+
"required": true,
|
|
251
252
|
"hasDynamicHelp": false,
|
|
252
253
|
"multiple": false,
|
|
253
254
|
"type": "option"
|
|
254
255
|
},
|
|
255
|
-
"
|
|
256
|
-
"description": "
|
|
257
|
-
"name": "
|
|
256
|
+
"title": {
|
|
257
|
+
"description": "Access level title",
|
|
258
|
+
"name": "title",
|
|
259
|
+
"required": true,
|
|
258
260
|
"hasDynamicHelp": false,
|
|
259
261
|
"multiple": false,
|
|
260
262
|
"type": "option"
|
|
@@ -262,25 +264,27 @@
|
|
|
262
264
|
},
|
|
263
265
|
"hasDynamicHelp": false,
|
|
264
266
|
"hiddenAliases": [],
|
|
265
|
-
"id": "
|
|
267
|
+
"id": "access-levels:update",
|
|
266
268
|
"pluginAlias": "adapty",
|
|
267
269
|
"pluginName": "adapty",
|
|
268
270
|
"pluginType": "core",
|
|
269
271
|
"strict": true,
|
|
272
|
+
"enableJsonFlag": true,
|
|
270
273
|
"isESM": true,
|
|
271
274
|
"relativePath": [
|
|
272
275
|
"dist",
|
|
273
276
|
"commands",
|
|
274
|
-
"
|
|
277
|
+
"access-levels",
|
|
275
278
|
"update.js"
|
|
276
279
|
]
|
|
277
280
|
},
|
|
278
|
-
"
|
|
281
|
+
"apps:create": {
|
|
279
282
|
"aliases": [],
|
|
280
283
|
"args": {},
|
|
281
|
-
"description": "Create a
|
|
284
|
+
"description": "Create a new Adapty app",
|
|
282
285
|
"examples": [
|
|
283
|
-
"<%= config.bin %>
|
|
286
|
+
"<%= config.bin %> apps create --title \"My App\" --platform ios --apple-bundle-id com.example.app",
|
|
287
|
+
"<%= config.bin %> apps create --title \"My App\" --platform ios --platform android --apple-bundle-id com.example.app --google-bundle-id com.example.app"
|
|
284
288
|
],
|
|
285
289
|
"flags": {
|
|
286
290
|
"json": {
|
|
@@ -290,26 +294,36 @@
|
|
|
290
294
|
"allowNo": false,
|
|
291
295
|
"type": "boolean"
|
|
292
296
|
},
|
|
293
|
-
"
|
|
294
|
-
"description": "App
|
|
295
|
-
"name": "
|
|
297
|
+
"title": {
|
|
298
|
+
"description": "App title",
|
|
299
|
+
"name": "title",
|
|
296
300
|
"required": true,
|
|
297
301
|
"hasDynamicHelp": false,
|
|
298
302
|
"multiple": false,
|
|
299
303
|
"type": "option"
|
|
300
304
|
},
|
|
301
|
-
"
|
|
302
|
-
"description": "
|
|
303
|
-
"name": "
|
|
305
|
+
"platform": {
|
|
306
|
+
"description": "Platform (ios, android). Repeat for multiple.",
|
|
307
|
+
"name": "platform",
|
|
304
308
|
"required": true,
|
|
305
309
|
"hasDynamicHelp": false,
|
|
310
|
+
"multiple": true,
|
|
311
|
+
"options": [
|
|
312
|
+
"ios",
|
|
313
|
+
"android"
|
|
314
|
+
],
|
|
315
|
+
"type": "option"
|
|
316
|
+
},
|
|
317
|
+
"apple-bundle-id": {
|
|
318
|
+
"description": "Apple bundle ID (required with --platform ios)",
|
|
319
|
+
"name": "apple-bundle-id",
|
|
320
|
+
"hasDynamicHelp": false,
|
|
306
321
|
"multiple": false,
|
|
307
322
|
"type": "option"
|
|
308
323
|
},
|
|
309
|
-
"
|
|
310
|
-
"description": "
|
|
311
|
-
"name": "
|
|
312
|
-
"required": true,
|
|
324
|
+
"google-bundle-id": {
|
|
325
|
+
"description": "Google bundle ID (required with --platform android)",
|
|
326
|
+
"name": "google-bundle-id",
|
|
313
327
|
"hasDynamicHelp": false,
|
|
314
328
|
"multiple": false,
|
|
315
329
|
"type": "option"
|
|
@@ -317,32 +331,31 @@
|
|
|
317
331
|
},
|
|
318
332
|
"hasDynamicHelp": false,
|
|
319
333
|
"hiddenAliases": [],
|
|
320
|
-
"id": "
|
|
334
|
+
"id": "apps:create",
|
|
321
335
|
"pluginAlias": "adapty",
|
|
322
336
|
"pluginName": "adapty",
|
|
323
337
|
"pluginType": "core",
|
|
324
338
|
"strict": true,
|
|
325
|
-
"enableJsonFlag": true,
|
|
326
339
|
"isESM": true,
|
|
327
340
|
"relativePath": [
|
|
328
341
|
"dist",
|
|
329
342
|
"commands",
|
|
330
|
-
"
|
|
343
|
+
"apps",
|
|
331
344
|
"create.js"
|
|
332
345
|
]
|
|
333
346
|
},
|
|
334
|
-
"
|
|
347
|
+
"apps:get": {
|
|
335
348
|
"aliases": [],
|
|
336
349
|
"args": {
|
|
337
|
-
"
|
|
338
|
-
"description": "
|
|
339
|
-
"name": "
|
|
350
|
+
"app_id": {
|
|
351
|
+
"description": "App ID (UUID)",
|
|
352
|
+
"name": "app_id",
|
|
340
353
|
"required": true
|
|
341
354
|
}
|
|
342
355
|
},
|
|
343
|
-
"description": "Get
|
|
356
|
+
"description": "Get app details",
|
|
344
357
|
"examples": [
|
|
345
|
-
"<%= config.bin %>
|
|
358
|
+
"<%= config.bin %> apps get 550e8400-e29b-41d4-a716-446655440000"
|
|
346
359
|
],
|
|
347
360
|
"flags": {
|
|
348
361
|
"json": {
|
|
@@ -351,38 +364,30 @@
|
|
|
351
364
|
"name": "json",
|
|
352
365
|
"allowNo": false,
|
|
353
366
|
"type": "boolean"
|
|
354
|
-
},
|
|
355
|
-
"app": {
|
|
356
|
-
"description": "App ID (UUID)",
|
|
357
|
-
"name": "app",
|
|
358
|
-
"required": true,
|
|
359
|
-
"hasDynamicHelp": false,
|
|
360
|
-
"multiple": false,
|
|
361
|
-
"type": "option"
|
|
362
367
|
}
|
|
363
368
|
},
|
|
364
369
|
"hasDynamicHelp": false,
|
|
365
370
|
"hiddenAliases": [],
|
|
366
|
-
"id": "
|
|
371
|
+
"id": "apps:get",
|
|
367
372
|
"pluginAlias": "adapty",
|
|
368
373
|
"pluginName": "adapty",
|
|
369
374
|
"pluginType": "core",
|
|
370
375
|
"strict": true,
|
|
371
|
-
"enableJsonFlag": true,
|
|
372
376
|
"isESM": true,
|
|
373
377
|
"relativePath": [
|
|
374
378
|
"dist",
|
|
375
379
|
"commands",
|
|
376
|
-
"
|
|
380
|
+
"apps",
|
|
377
381
|
"get.js"
|
|
378
382
|
]
|
|
379
383
|
},
|
|
380
|
-
"
|
|
384
|
+
"apps:list": {
|
|
381
385
|
"aliases": [],
|
|
382
386
|
"args": {},
|
|
383
|
-
"description": "List
|
|
387
|
+
"description": "List Adapty apps",
|
|
384
388
|
"examples": [
|
|
385
|
-
"<%= config.bin %>
|
|
389
|
+
"<%= config.bin %> apps list",
|
|
390
|
+
"<%= config.bin %> apps list --page 2 --page-size 10"
|
|
386
391
|
],
|
|
387
392
|
"flags": {
|
|
388
393
|
"json": {
|
|
@@ -392,14 +397,6 @@
|
|
|
392
397
|
"allowNo": false,
|
|
393
398
|
"type": "boolean"
|
|
394
399
|
},
|
|
395
|
-
"app": {
|
|
396
|
-
"description": "App ID (UUID)",
|
|
397
|
-
"name": "app",
|
|
398
|
-
"required": true,
|
|
399
|
-
"hasDynamicHelp": false,
|
|
400
|
-
"multiple": false,
|
|
401
|
-
"type": "option"
|
|
402
|
-
},
|
|
403
400
|
"page": {
|
|
404
401
|
"description": "Page number",
|
|
405
402
|
"name": "page",
|
|
@@ -419,32 +416,31 @@
|
|
|
419
416
|
},
|
|
420
417
|
"hasDynamicHelp": false,
|
|
421
418
|
"hiddenAliases": [],
|
|
422
|
-
"id": "
|
|
419
|
+
"id": "apps:list",
|
|
423
420
|
"pluginAlias": "adapty",
|
|
424
421
|
"pluginName": "adapty",
|
|
425
422
|
"pluginType": "core",
|
|
426
423
|
"strict": true,
|
|
427
|
-
"enableJsonFlag": true,
|
|
428
424
|
"isESM": true,
|
|
429
425
|
"relativePath": [
|
|
430
426
|
"dist",
|
|
431
427
|
"commands",
|
|
432
|
-
"
|
|
428
|
+
"apps",
|
|
433
429
|
"list.js"
|
|
434
430
|
]
|
|
435
431
|
},
|
|
436
|
-
"
|
|
432
|
+
"apps:update": {
|
|
437
433
|
"aliases": [],
|
|
438
434
|
"args": {
|
|
439
|
-
"
|
|
440
|
-
"description": "
|
|
441
|
-
"name": "
|
|
435
|
+
"app_id": {
|
|
436
|
+
"description": "App ID (UUID)",
|
|
437
|
+
"name": "app_id",
|
|
442
438
|
"required": true
|
|
443
439
|
}
|
|
444
440
|
},
|
|
445
|
-
"description": "Update an
|
|
441
|
+
"description": "Update an app",
|
|
446
442
|
"examples": [
|
|
447
|
-
"<%= config.bin %>
|
|
443
|
+
"<%= config.bin %> apps update 550e8400-... --title \"My App\""
|
|
448
444
|
],
|
|
449
445
|
"flags": {
|
|
450
446
|
"json": {
|
|
@@ -454,18 +450,23 @@
|
|
|
454
450
|
"allowNo": false,
|
|
455
451
|
"type": "boolean"
|
|
456
452
|
},
|
|
457
|
-
"
|
|
458
|
-
"description": "App
|
|
459
|
-
"name": "
|
|
460
|
-
"required": true,
|
|
453
|
+
"title": {
|
|
454
|
+
"description": "App title",
|
|
455
|
+
"name": "title",
|
|
461
456
|
"hasDynamicHelp": false,
|
|
462
457
|
"multiple": false,
|
|
463
458
|
"type": "option"
|
|
464
459
|
},
|
|
465
|
-
"
|
|
466
|
-
"description": "
|
|
467
|
-
"name": "
|
|
468
|
-
"
|
|
460
|
+
"apple-bundle-id": {
|
|
461
|
+
"description": "Apple bundle ID",
|
|
462
|
+
"name": "apple-bundle-id",
|
|
463
|
+
"hasDynamicHelp": false,
|
|
464
|
+
"multiple": false,
|
|
465
|
+
"type": "option"
|
|
466
|
+
},
|
|
467
|
+
"google-bundle-id": {
|
|
468
|
+
"description": "Google bundle ID",
|
|
469
|
+
"name": "google-bundle-id",
|
|
469
470
|
"hasDynamicHelp": false,
|
|
470
471
|
"multiple": false,
|
|
471
472
|
"type": "option"
|
|
@@ -473,17 +474,16 @@
|
|
|
473
474
|
},
|
|
474
475
|
"hasDynamicHelp": false,
|
|
475
476
|
"hiddenAliases": [],
|
|
476
|
-
"id": "
|
|
477
|
+
"id": "apps:update",
|
|
477
478
|
"pluginAlias": "adapty",
|
|
478
479
|
"pluginName": "adapty",
|
|
479
480
|
"pluginType": "core",
|
|
480
481
|
"strict": true,
|
|
481
|
-
"enableJsonFlag": true,
|
|
482
482
|
"isESM": true,
|
|
483
483
|
"relativePath": [
|
|
484
484
|
"dist",
|
|
485
485
|
"commands",
|
|
486
|
-
"
|
|
486
|
+
"apps",
|
|
487
487
|
"update.js"
|
|
488
488
|
]
|
|
489
489
|
},
|
|
@@ -2145,7 +2145,7 @@
|
|
|
2145
2145
|
"type": "option"
|
|
2146
2146
|
},
|
|
2147
2147
|
"audiences": {
|
|
2148
|
-
"description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
|
|
2148
|
+
"description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A/B test (as `placements get` shows it): {content_type:\"ab_test\" | \"flow_ab_test\", ab_test_id, segment_ids, priority}; crossplacement entries (\"cross_ab_test\", \"flow_cross_ab_test\") are read-only, the API keeps the stored ones. Write the entries of `placements get` back unchanged to keep a running test: a write that removes or replaces an A/B test entry stops that test with no winner. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
|
|
2149
2149
|
"name": "audiences",
|
|
2150
2150
|
"hasDynamicHelp": false,
|
|
2151
2151
|
"multiple": false,
|
|
@@ -2325,7 +2325,7 @@
|
|
|
2325
2325
|
"type": "option"
|
|
2326
2326
|
},
|
|
2327
2327
|
"audiences": {
|
|
2328
|
-
"description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
|
|
2328
|
+
"description": "JSON array of audience entries. Every entry needs an explicit content_type. Paywall: {content_type:\"paywall\", segment_ids, paywall_id, priority}. Flow: {content_type:\"flow\", segment_ids, flow_id, priority}. A/B test (as `placements get` shows it): {content_type:\"ab_test\" | \"flow_ab_test\", ab_test_id, segment_ids, priority}; crossplacement entries (\"cross_ab_test\", \"flow_cross_ab_test\") are read-only, the API keeps the stored ones. Write the entries of `placements get` back unchanged to keep a running test: a write that removes or replaces an A/B test entry stops that test with no winner. A flow must be published first (flows publish) — attaching a draft flow returns 400.",
|
|
2329
2329
|
"name": "audiences",
|
|
2330
2330
|
"hasDynamicHelp": false,
|
|
2331
2331
|
"multiple": false,
|
|
@@ -6037,125 +6037,6 @@
|
|
|
6037
6037
|
"list.js"
|
|
6038
6038
|
]
|
|
6039
6039
|
},
|
|
6040
|
-
"asa:product-pages:list": {
|
|
6041
|
-
"aliases": [],
|
|
6042
|
-
"args": {},
|
|
6043
|
-
"description": "List custom product pages (read-only; authoring stays in App Store Connect)",
|
|
6044
|
-
"examples": [
|
|
6045
|
-
"<%= config.bin %> asa product-pages list",
|
|
6046
|
-
"<%= config.bin %> asa product-pages list --app APP_UUID"
|
|
6047
|
-
],
|
|
6048
|
-
"flags": {
|
|
6049
|
-
"json": {
|
|
6050
|
-
"description": "Format output as json.",
|
|
6051
|
-
"helpGroup": "GLOBAL",
|
|
6052
|
-
"name": "json",
|
|
6053
|
-
"allowNo": false,
|
|
6054
|
-
"type": "boolean"
|
|
6055
|
-
},
|
|
6056
|
-
"page": {
|
|
6057
|
-
"description": "Page number",
|
|
6058
|
-
"name": "page",
|
|
6059
|
-
"default": 1,
|
|
6060
|
-
"hasDynamicHelp": false,
|
|
6061
|
-
"multiple": false,
|
|
6062
|
-
"type": "option"
|
|
6063
|
-
},
|
|
6064
|
-
"page-size": {
|
|
6065
|
-
"description": "Items per page (max 1000); prefer one big page over a pagination loop",
|
|
6066
|
-
"name": "page-size",
|
|
6067
|
-
"default": 100,
|
|
6068
|
-
"hasDynamicHelp": false,
|
|
6069
|
-
"multiple": false,
|
|
6070
|
-
"type": "option"
|
|
6071
|
-
},
|
|
6072
|
-
"app": {
|
|
6073
|
-
"description": "Keep only rows in this app; repeatable",
|
|
6074
|
-
"name": "app",
|
|
6075
|
-
"hasDynamicHelp": false,
|
|
6076
|
-
"multiple": true,
|
|
6077
|
-
"type": "option"
|
|
6078
|
-
},
|
|
6079
|
-
"campaign-group": {
|
|
6080
|
-
"description": "Keep only rows in this campaign group; repeatable",
|
|
6081
|
-
"name": "campaign-group",
|
|
6082
|
-
"hasDynamicHelp": false,
|
|
6083
|
-
"multiple": true,
|
|
6084
|
-
"type": "option"
|
|
6085
|
-
}
|
|
6086
|
-
},
|
|
6087
|
-
"hasDynamicHelp": false,
|
|
6088
|
-
"hiddenAliases": [],
|
|
6089
|
-
"id": "asa:product-pages:list",
|
|
6090
|
-
"pluginAlias": "adapty",
|
|
6091
|
-
"pluginName": "adapty",
|
|
6092
|
-
"pluginType": "core",
|
|
6093
|
-
"strict": true,
|
|
6094
|
-
"enableJsonFlag": true,
|
|
6095
|
-
"isESM": true,
|
|
6096
|
-
"relativePath": [
|
|
6097
|
-
"dist",
|
|
6098
|
-
"commands",
|
|
6099
|
-
"asa",
|
|
6100
|
-
"product-pages",
|
|
6101
|
-
"list.js"
|
|
6102
|
-
]
|
|
6103
|
-
},
|
|
6104
|
-
"asa:product-pages:sync": {
|
|
6105
|
-
"aliases": [],
|
|
6106
|
-
"args": {},
|
|
6107
|
-
"description": "Refresh custom product pages from Apple",
|
|
6108
|
-
"examples": [
|
|
6109
|
-
"<%= config.bin %> asa product-pages sync",
|
|
6110
|
-
"<%= config.bin %> asa product-pages sync --adam-id 123456"
|
|
6111
|
-
],
|
|
6112
|
-
"flags": {
|
|
6113
|
-
"json": {
|
|
6114
|
-
"description": "Format output as json.",
|
|
6115
|
-
"helpGroup": "GLOBAL",
|
|
6116
|
-
"name": "json",
|
|
6117
|
-
"allowNo": false,
|
|
6118
|
-
"type": "boolean"
|
|
6119
|
-
},
|
|
6120
|
-
"yes": {
|
|
6121
|
-
"char": "y",
|
|
6122
|
-
"description": "Apply without asking; required when the output is piped or --json is used",
|
|
6123
|
-
"name": "yes",
|
|
6124
|
-
"allowNo": false,
|
|
6125
|
-
"type": "boolean"
|
|
6126
|
-
},
|
|
6127
|
-
"idempotency-key": {
|
|
6128
|
-
"description": "Idempotency key for this write; re-running with the same key replays the stored result instead of applying twice",
|
|
6129
|
-
"name": "idempotency-key",
|
|
6130
|
-
"hasDynamicHelp": false,
|
|
6131
|
-
"multiple": false,
|
|
6132
|
-
"type": "option"
|
|
6133
|
-
},
|
|
6134
|
-
"adam-id": {
|
|
6135
|
-
"description": "Limit the refresh to one app; omit to cover every app",
|
|
6136
|
-
"name": "adam-id",
|
|
6137
|
-
"hasDynamicHelp": false,
|
|
6138
|
-
"multiple": false,
|
|
6139
|
-
"type": "option"
|
|
6140
|
-
}
|
|
6141
|
-
},
|
|
6142
|
-
"hasDynamicHelp": false,
|
|
6143
|
-
"hiddenAliases": [],
|
|
6144
|
-
"id": "asa:product-pages:sync",
|
|
6145
|
-
"pluginAlias": "adapty",
|
|
6146
|
-
"pluginName": "adapty",
|
|
6147
|
-
"pluginType": "core",
|
|
6148
|
-
"strict": true,
|
|
6149
|
-
"enableJsonFlag": true,
|
|
6150
|
-
"isESM": true,
|
|
6151
|
-
"relativePath": [
|
|
6152
|
-
"dist",
|
|
6153
|
-
"commands",
|
|
6154
|
-
"asa",
|
|
6155
|
-
"product-pages",
|
|
6156
|
-
"sync.js"
|
|
6157
|
-
]
|
|
6158
|
-
},
|
|
6159
6040
|
"asa:search-terms:list": {
|
|
6160
6041
|
"aliases": [],
|
|
6161
6042
|
"args": {},
|
|
@@ -6486,6 +6367,125 @@
|
|
|
6486
6367
|
"update.js"
|
|
6487
6368
|
]
|
|
6488
6369
|
},
|
|
6370
|
+
"asa:product-pages:list": {
|
|
6371
|
+
"aliases": [],
|
|
6372
|
+
"args": {},
|
|
6373
|
+
"description": "List custom product pages (read-only; authoring stays in App Store Connect)",
|
|
6374
|
+
"examples": [
|
|
6375
|
+
"<%= config.bin %> asa product-pages list",
|
|
6376
|
+
"<%= config.bin %> asa product-pages list --app APP_UUID"
|
|
6377
|
+
],
|
|
6378
|
+
"flags": {
|
|
6379
|
+
"json": {
|
|
6380
|
+
"description": "Format output as json.",
|
|
6381
|
+
"helpGroup": "GLOBAL",
|
|
6382
|
+
"name": "json",
|
|
6383
|
+
"allowNo": false,
|
|
6384
|
+
"type": "boolean"
|
|
6385
|
+
},
|
|
6386
|
+
"page": {
|
|
6387
|
+
"description": "Page number",
|
|
6388
|
+
"name": "page",
|
|
6389
|
+
"default": 1,
|
|
6390
|
+
"hasDynamicHelp": false,
|
|
6391
|
+
"multiple": false,
|
|
6392
|
+
"type": "option"
|
|
6393
|
+
},
|
|
6394
|
+
"page-size": {
|
|
6395
|
+
"description": "Items per page (max 1000); prefer one big page over a pagination loop",
|
|
6396
|
+
"name": "page-size",
|
|
6397
|
+
"default": 100,
|
|
6398
|
+
"hasDynamicHelp": false,
|
|
6399
|
+
"multiple": false,
|
|
6400
|
+
"type": "option"
|
|
6401
|
+
},
|
|
6402
|
+
"app": {
|
|
6403
|
+
"description": "Keep only rows in this app; repeatable",
|
|
6404
|
+
"name": "app",
|
|
6405
|
+
"hasDynamicHelp": false,
|
|
6406
|
+
"multiple": true,
|
|
6407
|
+
"type": "option"
|
|
6408
|
+
},
|
|
6409
|
+
"campaign-group": {
|
|
6410
|
+
"description": "Keep only rows in this campaign group; repeatable",
|
|
6411
|
+
"name": "campaign-group",
|
|
6412
|
+
"hasDynamicHelp": false,
|
|
6413
|
+
"multiple": true,
|
|
6414
|
+
"type": "option"
|
|
6415
|
+
}
|
|
6416
|
+
},
|
|
6417
|
+
"hasDynamicHelp": false,
|
|
6418
|
+
"hiddenAliases": [],
|
|
6419
|
+
"id": "asa:product-pages:list",
|
|
6420
|
+
"pluginAlias": "adapty",
|
|
6421
|
+
"pluginName": "adapty",
|
|
6422
|
+
"pluginType": "core",
|
|
6423
|
+
"strict": true,
|
|
6424
|
+
"enableJsonFlag": true,
|
|
6425
|
+
"isESM": true,
|
|
6426
|
+
"relativePath": [
|
|
6427
|
+
"dist",
|
|
6428
|
+
"commands",
|
|
6429
|
+
"asa",
|
|
6430
|
+
"product-pages",
|
|
6431
|
+
"list.js"
|
|
6432
|
+
]
|
|
6433
|
+
},
|
|
6434
|
+
"asa:product-pages:sync": {
|
|
6435
|
+
"aliases": [],
|
|
6436
|
+
"args": {},
|
|
6437
|
+
"description": "Refresh custom product pages from Apple",
|
|
6438
|
+
"examples": [
|
|
6439
|
+
"<%= config.bin %> asa product-pages sync",
|
|
6440
|
+
"<%= config.bin %> asa product-pages sync --adam-id 123456"
|
|
6441
|
+
],
|
|
6442
|
+
"flags": {
|
|
6443
|
+
"json": {
|
|
6444
|
+
"description": "Format output as json.",
|
|
6445
|
+
"helpGroup": "GLOBAL",
|
|
6446
|
+
"name": "json",
|
|
6447
|
+
"allowNo": false,
|
|
6448
|
+
"type": "boolean"
|
|
6449
|
+
},
|
|
6450
|
+
"yes": {
|
|
6451
|
+
"char": "y",
|
|
6452
|
+
"description": "Apply without asking; required when the output is piped or --json is used",
|
|
6453
|
+
"name": "yes",
|
|
6454
|
+
"allowNo": false,
|
|
6455
|
+
"type": "boolean"
|
|
6456
|
+
},
|
|
6457
|
+
"idempotency-key": {
|
|
6458
|
+
"description": "Idempotency key for this write; re-running with the same key replays the stored result instead of applying twice",
|
|
6459
|
+
"name": "idempotency-key",
|
|
6460
|
+
"hasDynamicHelp": false,
|
|
6461
|
+
"multiple": false,
|
|
6462
|
+
"type": "option"
|
|
6463
|
+
},
|
|
6464
|
+
"adam-id": {
|
|
6465
|
+
"description": "Limit the refresh to one app; omit to cover every app",
|
|
6466
|
+
"name": "adam-id",
|
|
6467
|
+
"hasDynamicHelp": false,
|
|
6468
|
+
"multiple": false,
|
|
6469
|
+
"type": "option"
|
|
6470
|
+
}
|
|
6471
|
+
},
|
|
6472
|
+
"hasDynamicHelp": false,
|
|
6473
|
+
"hiddenAliases": [],
|
|
6474
|
+
"id": "asa:product-pages:sync",
|
|
6475
|
+
"pluginAlias": "adapty",
|
|
6476
|
+
"pluginName": "adapty",
|
|
6477
|
+
"pluginType": "core",
|
|
6478
|
+
"strict": true,
|
|
6479
|
+
"enableJsonFlag": true,
|
|
6480
|
+
"isESM": true,
|
|
6481
|
+
"relativePath": [
|
|
6482
|
+
"dist",
|
|
6483
|
+
"commands",
|
|
6484
|
+
"asa",
|
|
6485
|
+
"product-pages",
|
|
6486
|
+
"sync.js"
|
|
6487
|
+
]
|
|
6488
|
+
},
|
|
6489
6489
|
"flows:config:get": {
|
|
6490
6490
|
"aliases": [],
|
|
6491
6491
|
"args": {
|
|
@@ -6790,5 +6790,5 @@
|
|
|
6790
6790
|
]
|
|
6791
6791
|
}
|
|
6792
6792
|
},
|
|
6793
|
-
"version": "0.
|
|
6793
|
+
"version": "0.11.0"
|
|
6794
6794
|
}
|