instant-cli 1.0.23-branch-codex-cli-args-combinators.25401857277.1 → 1.0.23-branch-codex-cli-args-combinators.25402833936.1

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.
@@ -1,4 +1,4 @@
1
1
 
2
- > instant-cli@1.0.23-branch-codex-cli-args-combinators.25401857277.1 build /home/runner/work/instant/instant/client/packages/cli
2
+ > instant-cli@1.0.23-branch-codex-cli-args-combinators.25402833936.1 build /home/runner/work/instant/instant/client/packages/cli
3
3
  > rm -rf dist; tsc -p tsconfig.build.json
4
4
 
@@ -30,17 +30,19 @@ const basePrompt = { prompt: 'Client ID:' } as any;
30
30
 
31
31
  describe('types', () => {
32
32
  test('required return type accounts for inactive args', () => {
33
- const requiredValue = Args.from({ 'client-id': 'abc123' })
34
- .text('client-id')
35
- .pipe(Args.required());
33
+ const requiredValue = Args.text(
34
+ { 'client-id': 'abc123' },
35
+ 'client-id',
36
+ ).pipe(Args.required());
36
37
 
37
38
  expectTypeOf(requiredValue).toEqualTypeOf<
38
39
  Effect.Effect<string, BadArgsError>
39
40
  >();
40
41
 
41
- const conditionallyRequiredValue = Args.from({})
42
- .text('client-id')
43
- .pipe(Args.availableWhen(false), Args.required());
42
+ const conditionallyRequiredValue = Args.text({}, 'client-id').pipe(
43
+ Args.availableWhen(false),
44
+ Args.required(),
45
+ );
44
46
 
45
47
  expectTypeOf(conditionallyRequiredValue).toEqualTypeOf<
46
48
  Effect.Effect<string | undefined, BadArgsError>
@@ -51,17 +53,17 @@ describe('types', () => {
51
53
  describe('availableWhen', () => {
52
54
  test('unavailable + value provided -> error', async () => {
53
55
  const err = await runFail(
54
- Args.from({
55
- 'custom-redirect-uri': 'https://mysite.com/callback',
56
- })
57
- .text('custom-redirect-uri')
58
- .pipe(
59
- Args.availableWhen(false, {
60
- message:
61
- 'Provided custom redirect URI when not using web app type.',
62
- }),
63
- Args.optional(),
64
- ),
56
+ Args.text(
57
+ {
58
+ 'custom-redirect-uri': 'https://mysite.com/callback',
59
+ },
60
+ 'custom-redirect-uri',
61
+ ).pipe(
62
+ Args.availableWhen(false, {
63
+ message: 'Provided custom redirect URI when not using web app type.',
64
+ }),
65
+ Args.optional(),
66
+ ),
65
67
  false,
66
68
  );
67
69
 
@@ -72,15 +74,12 @@ describe('availableWhen', () => {
72
74
 
73
75
  test('unavailable + empty value provided -> error', async () => {
74
76
  const err = await runFail(
75
- Args.from({ 'custom-redirect-uri': '' })
76
- .text('custom-redirect-uri')
77
- .pipe(
78
- Args.availableWhen(false, {
79
- message:
80
- 'Provided custom redirect URI when not using web app type.',
81
- }),
82
- Args.optional(),
83
- ),
77
+ Args.text({ 'custom-redirect-uri': '' }, 'custom-redirect-uri').pipe(
78
+ Args.availableWhen(false, {
79
+ message: 'Provided custom redirect URI when not using web app type.',
80
+ }),
81
+ Args.optional(),
82
+ ),
84
83
  false,
85
84
  );
86
85
 
@@ -91,9 +90,10 @@ describe('availableWhen', () => {
91
90
 
92
91
  test('unavailable + no value -> undefined', async () => {
93
92
  const result = await run(
94
- Args.from({})
95
- .text('custom-redirect-uri')
96
- .pipe(Args.availableWhen(false), Args.optional()),
93
+ Args.text({}, 'custom-redirect-uri').pipe(
94
+ Args.availableWhen(false),
95
+ Args.optional(),
96
+ ),
97
97
  false,
98
98
  );
99
99
 
@@ -104,16 +104,14 @@ describe('availableWhen', () => {
104
104
  describe('validate', () => {
105
105
  test('valid value -> passes through', async () => {
106
106
  const result = await run(
107
- Args.from({ 'project-id': 'my-project' })
108
- .text('project-id')
109
- .pipe(
110
- Args.validate((value) =>
111
- value.includes('_')
112
- ? 'Project ID cannot include underscores.'
113
- : undefined,
114
- ),
115
- Args.required(),
107
+ Args.text({ 'project-id': 'my-project' }, 'project-id').pipe(
108
+ Args.validate((value) =>
109
+ value.includes('_')
110
+ ? 'Project ID cannot include underscores.'
111
+ : undefined,
116
112
  ),
113
+ Args.required(),
114
+ ),
117
115
  true,
118
116
  );
119
117
 
@@ -122,16 +120,14 @@ describe('validate', () => {
122
120
 
123
121
  test('invalid value -> error', async () => {
124
122
  const err = await runFail(
125
- Args.from({ 'project-id': 'my_project' })
126
- .text('project-id')
127
- .pipe(
128
- Args.validate((value) =>
129
- value.includes('_')
130
- ? 'Project ID cannot include underscores.'
131
- : undefined,
132
- ),
133
- Args.required(),
123
+ Args.text({ 'project-id': 'my_project' }, 'project-id').pipe(
124
+ Args.validate((value) =>
125
+ value.includes('_')
126
+ ? 'Project ID cannot include underscores.'
127
+ : undefined,
134
128
  ),
129
+ Args.required(),
130
+ ),
135
131
  true,
136
132
  );
137
133
 
@@ -142,9 +138,7 @@ describe('validate', () => {
142
138
  describe('non-interactive', () => {
143
139
  test('required missing value -> error', async () => {
144
140
  const err = await runFail(
145
- Args.from({})
146
- .text('client-id')
147
- .pipe(Args.prompt(basePrompt), Args.required()),
141
+ Args.text({}, 'client-id').pipe(Args.prompt(basePrompt), Args.required()),
148
142
  true,
149
143
  );
150
144
 
@@ -153,7 +147,7 @@ describe('non-interactive', () => {
153
147
 
154
148
  test('number value -> stringified', async () => {
155
149
  const result = await run(
156
- Args.from({ 'client-id': 42 }).text('client-id').pipe(Args.required()),
150
+ Args.text({ 'client-id': 42 }, 'client-id').pipe(Args.required()),
157
151
  true,
158
152
  );
159
153
 
@@ -162,7 +156,7 @@ describe('non-interactive', () => {
162
156
 
163
157
  test('non-string/number value -> error', async () => {
164
158
  const err = await runFail(
165
- Args.from({ 'client-id': true }).text('client-id').pipe(Args.required()),
159
+ Args.text({ 'client-id': true }, 'client-id').pipe(Args.required()),
166
160
  true,
167
161
  );
168
162
 
@@ -171,9 +165,10 @@ describe('non-interactive', () => {
171
165
 
172
166
  test('valid string -> trimmed value', async () => {
173
167
  const result = await run(
174
- Args.from({ 'client-id': ' abc123.apps.googleusercontent.com ' })
175
- .text('client-id')
176
- .pipe(Args.required()),
168
+ Args.text(
169
+ { 'client-id': ' abc123.apps.googleusercontent.com ' },
170
+ 'client-id',
171
+ ).pipe(Args.required()),
177
172
  true,
178
173
  );
179
174
 
@@ -182,7 +177,7 @@ describe('non-interactive', () => {
182
177
 
183
178
  test('optional missing value -> undefined', async () => {
184
179
  const result = await run(
185
- Args.from({}).text('custom-redirect-uri').pipe(Args.optional()),
180
+ Args.text({}, 'custom-redirect-uri').pipe(Args.optional()),
186
181
  true,
187
182
  );
188
183
 
@@ -191,18 +186,20 @@ describe('non-interactive', () => {
191
186
 
192
187
  test('simpleName overrides display flag without changing lookup key', async () => {
193
188
  const result = await run(
194
- Args.from({ customRedirectUri: 'https://example.com/callback' })
195
- .text('customRedirectUri', { simpleName: '--custom-redirect-uri' })
196
- .pipe(Args.required()),
189
+ Args.text(
190
+ { customRedirectUri: 'https://example.com/callback' },
191
+ 'customRedirectUri',
192
+ { simpleName: '--custom-redirect-uri' },
193
+ ).pipe(Args.required()),
197
194
  true,
198
195
  );
199
196
 
200
197
  expect(result).toBe('https://example.com/callback');
201
198
 
202
199
  const err = await runFail(
203
- Args.from({})
204
- .text('customRedirectUri', { simpleName: '--custom-redirect-uri' })
205
- .pipe(Args.required()),
200
+ Args.text({}, 'customRedirectUri', {
201
+ simpleName: '--custom-redirect-uri',
202
+ }).pipe(Args.required()),
206
203
  true,
207
204
  );
208
205
 
@@ -213,9 +210,11 @@ describe('non-interactive', () => {
213
210
 
214
211
  test('does not fall back to other key shapes', async () => {
215
212
  const err = await runFail(
216
- Args.from({ 'custom-redirect-uri': 'https://example.com/callback' })
217
- .text('customRedirectUri', { simpleName: '--custom-redirect-uri' })
218
- .pipe(Args.required()),
213
+ Args.text(
214
+ { 'custom-redirect-uri': 'https://example.com/callback' },
215
+ 'customRedirectUri',
216
+ { simpleName: '--custom-redirect-uri' },
217
+ ).pipe(Args.required()),
219
218
  true,
220
219
  );
221
220
 
@@ -226,9 +225,9 @@ describe('non-interactive', () => {
226
225
 
227
226
  test('boolean value -> parsed', async () => {
228
227
  const result = await run(
229
- Args.from({ 'configure-web': true })
230
- .bool('configure-web')
231
- .pipe(Args.optional()),
228
+ Args.bool({ 'configure-web': true }, 'configure-web').pipe(
229
+ Args.optional(),
230
+ ),
232
231
  true,
233
232
  );
234
233
 
@@ -237,9 +236,9 @@ describe('non-interactive', () => {
237
236
 
238
237
  test('boolean string value -> parsed', async () => {
239
238
  const result = await run(
240
- Args.from({ 'configure-web': 'false' })
241
- .bool('configure-web')
242
- .pipe(Args.optional()),
239
+ Args.bool({ 'configure-web': 'false' }, 'configure-web').pipe(
240
+ Args.optional(),
241
+ ),
243
242
  true,
244
243
  );
245
244
 
@@ -248,9 +247,9 @@ describe('non-interactive', () => {
248
247
 
249
248
  test('invalid boolean value -> error', async () => {
250
249
  const err = await runFail(
251
- Args.from({ 'configure-web': 'sometimes' })
252
- .bool('configure-web')
253
- .pipe(Args.optional()),
250
+ Args.bool({ 'configure-web': 'sometimes' }, 'configure-web').pipe(
251
+ Args.optional(),
252
+ ),
254
253
  true,
255
254
  );
256
255
 
@@ -259,15 +258,13 @@ describe('non-interactive', () => {
259
258
 
260
259
  test('missing confirmation returns default value', async () => {
261
260
  const result = await run(
262
- Args.from({})
263
- .bool('configure-web')
264
- .pipe(
265
- Args.confirm({
266
- promptText: 'Configure web redirect flow?',
267
- defaultValue: false,
268
- }),
269
- Args.required(),
270
- ),
261
+ Args.bool({}, 'configure-web').pipe(
262
+ Args.confirm({
263
+ promptText: 'Configure web redirect flow?',
264
+ defaultValue: false,
265
+ }),
266
+ Args.required(),
267
+ ),
271
268
  true,
272
269
  );
273
270
 
@@ -278,9 +275,10 @@ describe('non-interactive', () => {
278
275
  describe('interactive', () => {
279
276
  test('value already provided -> use it directly', async () => {
280
277
  const result = await run(
281
- Args.from({ 'client-id': ' abc123.apps.googleusercontent.com ' })
282
- .text('client-id')
283
- .pipe(Args.prompt(basePrompt), Args.required()),
278
+ Args.text(
279
+ { 'client-id': ' abc123.apps.googleusercontent.com ' },
280
+ 'client-id',
281
+ ).pipe(Args.prompt(basePrompt), Args.required()),
284
282
  false,
285
283
  );
286
284
 
@@ -291,9 +289,10 @@ describe('interactive', () => {
291
289
  mockPromptReturn = ' GOCSPX-secret123 ';
292
290
 
293
291
  const result = await run(
294
- Args.from({})
295
- .text('client-secret')
296
- .pipe(Args.prompt(basePrompt), Args.required()),
292
+ Args.text({}, 'client-secret').pipe(
293
+ Args.prompt(basePrompt),
294
+ Args.required(),
295
+ ),
297
296
  false,
298
297
  );
299
298
 
@@ -304,9 +303,10 @@ describe('interactive', () => {
304
303
  mockPromptReturn = '';
305
304
 
306
305
  const err = await runFail(
307
- Args.from({})
308
- .text('client-secret')
309
- .pipe(Args.prompt(basePrompt), Args.required()),
306
+ Args.text({}, 'client-secret').pipe(
307
+ Args.prompt(basePrompt),
308
+ Args.required(),
309
+ ),
310
310
  false,
311
311
  );
312
312
 
@@ -317,9 +317,10 @@ describe('interactive', () => {
317
317
  mockPromptReturn = '';
318
318
 
319
319
  const result = await run(
320
- Args.from({})
321
- .text('custom-redirect-uri')
322
- .pipe(Args.prompt(basePrompt), Args.optional()),
320
+ Args.text({}, 'custom-redirect-uri').pipe(
321
+ Args.prompt(basePrompt),
322
+ Args.optional(),
323
+ ),
323
324
  false,
324
325
  );
325
326
 
@@ -330,15 +331,13 @@ describe('interactive', () => {
330
331
  mockPromptReturn = true;
331
332
 
332
333
  const result = await run(
333
- Args.from({})
334
- .bool('configure-web')
335
- .pipe(
336
- Args.confirm({
337
- promptText: 'Configure web redirect flow?',
338
- defaultValue: false,
339
- }),
340
- Args.optional(),
341
- ),
334
+ Args.bool({}, 'configure-web').pipe(
335
+ Args.confirm({
336
+ promptText: 'Configure web redirect flow?',
337
+ defaultValue: false,
338
+ }),
339
+ Args.optional(),
340
+ ),
342
341
  false,
343
342
  );
344
343
 
@@ -40,13 +40,12 @@ export const makeOAuthMock = (mocks: {
40
40
  providerType: string,
41
41
  opts: Record<string, unknown>,
42
42
  ) {
43
- const args = Args.from(opts);
44
43
  const { auth, provider } = yield* getOrCreateProvider(providerType);
45
44
  const used: Set<string> = new Set(
46
45
  (auth.oauth_clients ?? []).map((c: any) => c.client_name),
47
46
  );
48
47
  const suggested = findName(providerType, used);
49
- const clientName = yield* args.text('name').pipe(
48
+ const clientName = yield* Args.text(opts, 'name').pipe(
50
49
  Args.prompt({
51
50
  prompt: 'Client Name:',
52
51
  defaultValue: suggested,
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA4C5D,eAAO,MAAM,gBAAgB,gFAO5B,CAAC;AAmnBF,eAAO,MAAM,gBAAgB;;;;wgBAwD5B,CAAC"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/commands/auth/client/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAiB,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AA4C5D,eAAO,MAAM,gBAAgB,gFAO5B,CAAC;AAkmBF,eAAO,MAAM,gBAAgB;;;;wgBAwD5B,CAAC"}
@@ -70,9 +70,8 @@ const selectGoogleCredentialMode = Effect.fn(function* () {
70
70
  });
71
71
  const resolveGoogleCredentialMode = Effect.fn(function* ({ appType, opts, }) {
72
72
  const { yes } = yield* GlobalOpts;
73
- const args = Args.from(opts);
74
- const devCredentialsFlag = args.isTrue('dev-credentials');
75
- const hasProvidedSomeCustomCredentials = args.hasAny([
73
+ const devCredentialsFlag = Args.isTrue(opts, 'dev-credentials');
74
+ const hasProvidedSomeCustomCredentials = Args.hasAny(opts, [
76
75
  'client-id',
77
76
  'client-secret',
78
77
  'custom-redirect-uri',
@@ -133,7 +132,6 @@ const printGoogleCustomCredentialsClient = Effect.fn(function* ({ appType, clien
133
132
  ].join('\n'), { dimBorder: true, padding: { right: 1, left: 1 } }));
134
133
  });
135
134
  const handleGoogleClient = Effect.fn(function* (opts) {
136
- const args = Args.from(opts);
137
135
  // This one requires special logic for getting client name
138
136
  // because the suggested name includes the app type
139
137
  const appType = yield* selectGoogleAppType(opts['app-type']);
@@ -145,7 +143,7 @@ const handleGoogleClient = Effect.fn(function* (opts) {
145
143
  const { auth, provider } = yield* getOrCreateProvider('google');
146
144
  const usedClientNames = new Set((auth.oauth_clients ?? []).map((client) => client.client_name));
147
145
  const suggestedClientName = findName(`google-${appType}`, usedClientNames);
148
- const clientName = yield* args.text('name').pipe(Args.prompt({
146
+ const clientName = yield* Args.text(opts, 'name').pipe(Args.prompt({
149
147
  prompt: 'Client Name:',
150
148
  defaultValue: suggestedClientName,
151
149
  placeholder: suggestedClientName,
@@ -160,16 +158,16 @@ const handleGoogleClient = Effect.fn(function* (opts) {
160
158
  message: `The unique name '${clientName}' is already in use.`,
161
159
  });
162
160
  }
163
- const clientId = yield* args.text('client-id').pipe(Args.availableWhen(!useSharedCredentials, {
161
+ const clientId = yield* Args.text(opts, 'client-id').pipe(Args.availableWhen(!useSharedCredentials, {
164
162
  message: '--client-id is not compatible with --dev-credentials. Drop one or the other.',
165
163
  }), Args.prompt(clientIdPrompt({ providerUrl: googleConsoleUrl })), Args.required());
166
164
  const usesCustomWebCredentials = !useSharedCredentials && appType === 'web';
167
- const clientSecret = yield* args.text('client-secret').pipe(Args.availableWhen(usesCustomWebCredentials, {
165
+ const clientSecret = yield* Args.text(opts, 'client-secret').pipe(Args.availableWhen(usesCustomWebCredentials, {
168
166
  message: useSharedCredentials
169
167
  ? '--client-secret is not compatible with --dev-credentials. Drop one or the other.'
170
168
  : undefined,
171
169
  }), Args.prompt(clientSecretPrompt({ providerUrl: googleConsoleUrl })), Args.required());
172
- const customRedirectUri = yield* args.text('custom-redirect-uri').pipe(Args.availableWhen(usesCustomWebCredentials, {
170
+ const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(Args.availableWhen(usesCustomWebCredentials, {
173
171
  message: useSharedCredentials
174
172
  ? '--custom-redirect-uri is not compatible with --dev-credentials.'
175
173
  : 'Provided custom redirect URI when not using web app type.',
@@ -208,17 +206,10 @@ const handleGoogleClient = Effect.fn(function* (opts) {
208
206
  });
209
207
  });
210
208
  const handleGithubClient = Effect.fn(function* (opts) {
211
- const args = Args.from(opts);
212
209
  const { clientName, provider } = yield* getClientNameAndProvider('github', opts);
213
- const clientId = yield* args
214
- .text('client-id')
215
- .pipe(Args.prompt(clientIdPrompt({ providerUrl: githubDeveloperUrl })), Args.required());
216
- const clientSecret = yield* args
217
- .text('client-secret')
218
- .pipe(Args.prompt(clientSecretPrompt({ providerUrl: githubDeveloperUrl })), Args.required());
219
- const customRedirectUri = yield* args
220
- .text('custom-redirect-uri')
221
- .pipe(Args.prompt(optionalRedirectPrompt), Args.optional());
210
+ const clientId = yield* Args.text(opts, 'client-id').pipe(Args.prompt(clientIdPrompt({ providerUrl: githubDeveloperUrl })), Args.required());
211
+ const clientSecret = yield* Args.text(opts, 'client-secret').pipe(Args.prompt(clientSecretPrompt({ providerUrl: githubDeveloperUrl })), Args.required());
212
+ const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(Args.prompt(optionalRedirectPrompt), Args.optional());
222
213
  const redirectUri = customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;
223
214
  // The backend infers GitHub's authorization/token endpoints from
224
215
  // meta.providerName === 'github', so we don't pass them here.
@@ -243,17 +234,10 @@ const handleGithubClient = Effect.fn(function* (opts) {
243
234
  ].join('\n'), { dimBorder: true, padding: { right: 1, left: 1 } }));
244
235
  });
245
236
  const handleLinkedInClient = Effect.fn(function* (opts) {
246
- const args = Args.from(opts);
247
237
  const { clientName, provider } = yield* getClientNameAndProvider('linkedin', opts);
248
- const clientId = yield* args
249
- .text('client-id')
250
- .pipe(Args.prompt(clientIdPrompt({ providerUrl: linkedinDeveloperUrl })), Args.required());
251
- const clientSecret = yield* args
252
- .text('client-secret')
253
- .pipe(Args.prompt(clientSecretPrompt({ providerUrl: linkedinDeveloperUrl })), Args.required());
254
- const customRedirectUri = yield* args
255
- .text('custom-redirect-uri')
256
- .pipe(Args.prompt(optionalRedirectPrompt), Args.optional());
238
+ const clientId = yield* Args.text(opts, 'client-id').pipe(Args.prompt(clientIdPrompt({ providerUrl: linkedinDeveloperUrl })), Args.required());
239
+ const clientSecret = yield* Args.text(opts, 'client-secret').pipe(Args.prompt(clientSecretPrompt({ providerUrl: linkedinDeveloperUrl })), Args.required());
240
+ const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(Args.prompt(optionalRedirectPrompt), Args.optional());
257
241
  const redirectUri = customRedirectUri || DEFAULT_OAUTH_CALLBACK_URL;
258
242
  const response = yield* addOAuthClient({
259
243
  providerId: provider.id,
@@ -278,40 +262,33 @@ const handleLinkedInClient = Effect.fn(function* (opts) {
278
262
  ].join('\n'), { dimBorder: true, padding: { right: 1, left: 1 } }));
279
263
  });
280
264
  const handleAppleClient = Effect.fn(function* (opts) {
281
- const args = Args.from(opts);
282
265
  const { clientName, provider } = yield* getClientNameAndProvider('apple', opts);
283
- const servicesId = yield* args
284
- .text('services-id')
285
- .pipe(Args.prompt(appleServicesIdPrompt({})), Args.required());
266
+ const servicesId = yield* Args.text(opts, 'services-id').pipe(Args.prompt(appleServicesIdPrompt({})), Args.required());
286
267
  // If any web-flow flag is provided, enable web flow; otherwise ask
287
268
  // (non-interactively with --yes we default to native-only).
288
- const anyWebFlagProvided = args.hasAny([
269
+ const anyWebFlagProvided = Args.hasAny(opts, [
289
270
  'team-id',
290
271
  'key-id',
291
272
  'private-key-file',
292
273
  ]);
293
274
  const configureWeb = anyWebFlagProvided
294
275
  ? true
295
- : yield* args.bool('configure-web').pipe(Args.confirm({
276
+ : yield* Args.bool(opts, 'configure-web').pipe(Args.confirm({
296
277
  promptText: 'Configure web redirect flow? ' +
297
278
  chalk.dim('(requires Team ID, Key ID, and a .p8 private key from Apple)'),
298
279
  defaultValue: false,
299
280
  }), Args.required());
300
281
  const skipWeb = !configureWeb;
301
282
  const webSkipMessage = 'requires configuring the web redirect flow (also provide --team-id, --key-id, and --private-key-file).';
302
- const teamId = yield* args
303
- .text('team-id')
304
- .pipe(Args.availableWhen(!skipWeb, { message: `--team-id ${webSkipMessage}` }), Args.prompt(appleTeamIdPrompt({})), Args.required());
305
- const keyId = yield* args
306
- .text('key-id')
307
- .pipe(Args.availableWhen(!skipWeb, { message: `--key-id ${webSkipMessage}` }), Args.prompt(appleKeyIdPrompt({})), Args.required());
308
- const privateKeyPath = yield* args.text('private-key-file').pipe(Args.availableWhen(!skipWeb, {
283
+ const teamId = yield* Args.text(opts, 'team-id').pipe(Args.availableWhen(!skipWeb, { message: `--team-id ${webSkipMessage}` }), Args.prompt(appleTeamIdPrompt({})), Args.required());
284
+ const keyId = yield* Args.text(opts, 'key-id').pipe(Args.availableWhen(!skipWeb, { message: `--key-id ${webSkipMessage}` }), Args.prompt(appleKeyIdPrompt({})), Args.required());
285
+ const privateKeyPath = yield* Args.text(opts, 'private-key-file').pipe(Args.availableWhen(!skipWeb, {
309
286
  message: `--private-key-file ${webSkipMessage}`,
310
287
  }), Args.prompt(applePrivateKeyFilePrompt({})), Args.required());
311
288
  const privateKey = privateKeyPath
312
289
  ? yield* readPrivateKeyFile(privateKeyPath)
313
290
  : undefined;
314
- const customRedirectUri = yield* args.text('custom-redirect-uri').pipe(Args.availableWhen(!skipWeb, {
291
+ const customRedirectUri = yield* Args.text(opts, 'custom-redirect-uri').pipe(Args.availableWhen(!skipWeb, {
315
292
  message: `--custom-redirect-uri ${webSkipMessage}`,
316
293
  }), Args.prompt(optionalRedirectPrompt), Args.optional());
317
294
  const redirectUri = privateKey
@@ -353,11 +330,8 @@ const handleAppleClient = Effect.fn(function* (opts) {
353
330
  }));
354
331
  });
355
332
  const handleClerkClient = Effect.fn(function* (opts) {
356
- const args = Args.from(opts);
357
333
  const { clientName, provider } = yield* getClientNameAndProvider('clerk', opts);
358
- const publishableKey = yield* args
359
- .text('publishable-key')
360
- .pipe(Args.prompt(clerkPublishableKeyPrompt({})), Args.required());
334
+ const publishableKey = yield* Args.text(opts, 'publishable-key').pipe(Args.prompt(clerkPublishableKeyPrompt({})), Args.required());
361
335
  const domain = clerkDomainFromPublishableKey(publishableKey);
362
336
  if (!domain) {
363
337
  return yield* BadArgsError.make({
@@ -384,11 +358,8 @@ const handleClerkClient = Effect.fn(function* (opts) {
384
358
  }`, { borderStyle: 'none' }));
385
359
  });
386
360
  const handleFirebaseClient = Effect.fn(function* (opts) {
387
- const args = Args.from(opts);
388
361
  const { clientName, provider } = yield* getClientNameAndProvider('firebase', opts);
389
- const projectId = yield* args
390
- .text('project-id')
391
- .pipe(Args.prompt(firebaseProjectIdPrompt({})), Args.validate(validateFirebaseProjectId), Args.required());
362
+ const projectId = yield* Args.text(opts, 'project-id').pipe(Args.prompt(firebaseProjectIdPrompt({})), Args.validate(validateFirebaseProjectId), Args.required());
392
363
  const response = yield* addOAuthClient({
393
364
  providerId: provider.id,
394
365
  clientName,