instant-cli 1.0.21-branch-cli-codex.25190871505.1 → 1.0.21-branch-cli-codex-update.25190875900.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.
- package/.turbo/turbo-build.log +1 -1
- package/__tests__/authClientAddGoogle.test.ts +1 -2
- package/__tests__/authClientUpdate.test.ts +442 -0
- package/dist/commands/auth/client/add.d.ts.map +1 -1
- package/dist/commands/auth/client/add.js +2 -1
- package/dist/commands/auth/client/add.js.map +1 -1
- package/dist/commands/auth/client/update.d.ts +10 -0
- package/dist/commands/auth/client/update.d.ts.map +1 -0
- package/dist/commands/auth/client/update.js +587 -0
- package/dist/commands/auth/client/update.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/oauth.d.ts +63 -0
- package/dist/lib/oauth.d.ts.map +1 -1
- package/dist/lib/oauth.js +40 -0
- package/dist/lib/oauth.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/auth/client/add.ts +2 -1
- package/src/commands/auth/client/update.ts +806 -0
- package/src/index.ts +63 -0
- package/src/lib/oauth.ts +60 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> instant-cli@1.0.21-branch-cli-codex.
|
|
2
|
+
> instant-cli@1.0.21-branch-cli-codex-update.25190875900.1 build /home/runner/work/instant/instant/client/packages/cli
|
|
3
3
|
> rm -rf dist; tsc -p tsconfig.build.json
|
|
4
4
|
|
|
@@ -265,9 +265,8 @@ describe('web: dev credentials', () => {
|
|
|
265
265
|
expect(output).toContain('Credentials: Instant dev credentials');
|
|
266
266
|
expect(output).toContain('No Google Console setup required');
|
|
267
267
|
expect(output).toContain(
|
|
268
|
-
'
|
|
268
|
+
'instant-cli auth client update --name google-web',
|
|
269
269
|
);
|
|
270
|
-
expect(output).not.toContain('instant-cli auth client update');
|
|
271
270
|
expect(output).not.toContain('Add this redirect URI in Google Console');
|
|
272
271
|
});
|
|
273
272
|
|
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import { test, expect, describe, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { Effect, Layer, Logger } from 'effect';
|
|
3
|
+
import { NodeContext } from '@effect/platform-node';
|
|
4
|
+
import { GlobalOpts } from '../src/context/globalOpts.ts';
|
|
5
|
+
import { CurrentApp } from '../src/context/currentApp.ts';
|
|
6
|
+
import { InstantHttpAuthed } from '../src/lib/http.ts';
|
|
7
|
+
import { BadArgsError } from '../src/errors.ts';
|
|
8
|
+
|
|
9
|
+
// Prevent src/index.ts side-effect (program.parse) from running.
|
|
10
|
+
vi.mock('../src/index.ts', () => ({}));
|
|
11
|
+
|
|
12
|
+
let prompts: any[] = [];
|
|
13
|
+
let mockPromptReturn: any = '';
|
|
14
|
+
|
|
15
|
+
vi.mock('../src/ui/lib.ts', async (importOriginal) => {
|
|
16
|
+
const orig: any = await importOriginal();
|
|
17
|
+
return {
|
|
18
|
+
...orig,
|
|
19
|
+
renderUnwrap: (prompt: any) => {
|
|
20
|
+
prompts.push(prompt);
|
|
21
|
+
const value = Array.isArray(mockPromptReturn)
|
|
22
|
+
? mockPromptReturn.shift()
|
|
23
|
+
: mockPromptReturn;
|
|
24
|
+
return Promise.resolve(value);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
let updatedClients: any[] = [];
|
|
30
|
+
let mockClients: any[] = [];
|
|
31
|
+
const providers = [
|
|
32
|
+
{ id: 'prov-google', provider_name: 'google' },
|
|
33
|
+
{ id: 'prov-github', provider_name: 'github' },
|
|
34
|
+
{ id: 'prov-apple', provider_name: 'apple' },
|
|
35
|
+
{ id: 'prov-clerk', provider_name: 'clerk' },
|
|
36
|
+
{ id: 'prov-firebase', provider_name: 'firebase' },
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
vi.mock('../src/lib/oauth.ts', () => ({
|
|
40
|
+
getAppsAuth: () =>
|
|
41
|
+
Effect.succeed({
|
|
42
|
+
oauth_service_providers: providers,
|
|
43
|
+
oauth_clients: mockClients,
|
|
44
|
+
}),
|
|
45
|
+
findClientByIdOrName: ({ id, name }: { id?: string; name?: string }) =>
|
|
46
|
+
Effect.gen(function* () {
|
|
47
|
+
if (id && name) {
|
|
48
|
+
return yield* BadArgsError.make({
|
|
49
|
+
message: 'Cannot specify both --id and --name',
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (!id && !name) {
|
|
53
|
+
return yield* BadArgsError.make({
|
|
54
|
+
message: 'Must specify --id or --name',
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const client = id
|
|
58
|
+
? mockClients.find((entry) => entry.id === id)
|
|
59
|
+
: mockClients.find((entry) => entry.client_name === name);
|
|
60
|
+
if (!client) {
|
|
61
|
+
return yield* BadArgsError.make({
|
|
62
|
+
message: `OAuth client not found: ${id ?? name}`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
client,
|
|
67
|
+
auth: {
|
|
68
|
+
oauth_service_providers: providers,
|
|
69
|
+
oauth_clients: mockClients,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}),
|
|
73
|
+
updateOAuthClient: (params: any) => {
|
|
74
|
+
updatedClients.push(params);
|
|
75
|
+
const client = mockClients.find((c) => c.id === params.oauthClientId);
|
|
76
|
+
return Effect.succeed({
|
|
77
|
+
client: {
|
|
78
|
+
id: params.oauthClientId,
|
|
79
|
+
client_name: client?.client_name ?? 'unknown',
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
}));
|
|
84
|
+
|
|
85
|
+
const { authClientUpdateCmd } = await import(
|
|
86
|
+
'../src/commands/auth/client/update.ts'
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
let logs: string[] = [];
|
|
90
|
+
|
|
91
|
+
const run = (flags: Record<string, any>, { yes }: { yes: boolean }) =>
|
|
92
|
+
Effect.runPromise(
|
|
93
|
+
authClientUpdateCmd(flags as any).pipe(
|
|
94
|
+
Effect.provide(
|
|
95
|
+
Layer.mergeAll(
|
|
96
|
+
Layer.succeed(GlobalOpts, { yes }),
|
|
97
|
+
Layer.succeed(CurrentApp, { appId: 'test-app', source: 'env' }),
|
|
98
|
+
Layer.succeed(InstantHttpAuthed, {} as any),
|
|
99
|
+
NodeContext.layer,
|
|
100
|
+
Logger.replace(
|
|
101
|
+
Logger.defaultLogger,
|
|
102
|
+
Logger.make(({ message }) => {
|
|
103
|
+
logs.push(String(message));
|
|
104
|
+
}),
|
|
105
|
+
),
|
|
106
|
+
),
|
|
107
|
+
),
|
|
108
|
+
),
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
beforeEach(() => {
|
|
112
|
+
prompts = [];
|
|
113
|
+
updatedClients = [];
|
|
114
|
+
logs = [];
|
|
115
|
+
mockPromptReturn = '';
|
|
116
|
+
mockClients = [
|
|
117
|
+
{
|
|
118
|
+
id: 'google-shared',
|
|
119
|
+
provider_id: 'prov-google',
|
|
120
|
+
client_name: 'google-shared',
|
|
121
|
+
meta: { appType: 'web' },
|
|
122
|
+
use_shared_credentials: true,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: 'google-web',
|
|
126
|
+
provider_id: 'prov-google',
|
|
127
|
+
client_name: 'google-web',
|
|
128
|
+
client_id: 'old-google-id',
|
|
129
|
+
redirect_to: 'https://api.instantdb.com/runtime/oauth/callback',
|
|
130
|
+
meta: { appType: 'web' },
|
|
131
|
+
use_shared_credentials: false,
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
id: 'google-ios',
|
|
135
|
+
provider_id: 'prov-google',
|
|
136
|
+
client_name: 'google-ios',
|
|
137
|
+
meta: { appType: 'ios' },
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
id: 'github',
|
|
141
|
+
provider_id: 'prov-github',
|
|
142
|
+
client_name: 'github',
|
|
143
|
+
client_id: 'old-gh-id',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: 'apple',
|
|
147
|
+
provider_id: 'prov-apple',
|
|
148
|
+
client_name: 'apple',
|
|
149
|
+
client_id: 'old.apple.service',
|
|
150
|
+
meta: {
|
|
151
|
+
teamId: 'OLDTEAM',
|
|
152
|
+
keyId: 'OLDKEY',
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
id: 'clerk',
|
|
157
|
+
provider_id: 'prov-clerk',
|
|
158
|
+
client_name: 'clerk',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
id: 'firebase',
|
|
162
|
+
provider_id: 'prov-firebase',
|
|
163
|
+
client_name: 'firebase',
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
describe('google', () => {
|
|
169
|
+
test('upgrades shared dev credentials to custom credentials', async () => {
|
|
170
|
+
await run(
|
|
171
|
+
{
|
|
172
|
+
name: 'google-shared',
|
|
173
|
+
'client-id': 'new-google-id',
|
|
174
|
+
'client-secret': 'new-google-secret',
|
|
175
|
+
},
|
|
176
|
+
{ yes: true },
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
expect(updatedClients).toHaveLength(1);
|
|
180
|
+
expect(updatedClients[0]).toMatchObject({
|
|
181
|
+
oauthClientId: 'google-shared',
|
|
182
|
+
clientId: 'new-google-id',
|
|
183
|
+
clientSecret: 'new-google-secret',
|
|
184
|
+
redirectTo: 'https://api.instantdb.com/runtime/oauth/callback',
|
|
185
|
+
useSharedCredentials: false,
|
|
186
|
+
});
|
|
187
|
+
expect(logs.join('\n')).toContain(
|
|
188
|
+
'This client no longer uses Instant dev credentials.',
|
|
189
|
+
);
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
test('switches custom Google web client back to dev credentials', async () => {
|
|
193
|
+
await run(
|
|
194
|
+
{
|
|
195
|
+
name: 'google-web',
|
|
196
|
+
'dev-credentials': true,
|
|
197
|
+
},
|
|
198
|
+
{ yes: true },
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
expect(updatedClients).toHaveLength(1);
|
|
202
|
+
expect(updatedClients[0]).toMatchObject({
|
|
203
|
+
oauthClientId: 'google-web',
|
|
204
|
+
useSharedCredentials: true,
|
|
205
|
+
redirectTo: null,
|
|
206
|
+
});
|
|
207
|
+
expect(updatedClients[0].clientId).toBeUndefined();
|
|
208
|
+
expect(logs.join('\n')).toContain('Credentials: Instant dev credentials');
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
test('rejects dev credentials with custom credential flags', async () => {
|
|
212
|
+
await run(
|
|
213
|
+
{
|
|
214
|
+
name: 'google-web',
|
|
215
|
+
'dev-credentials': true,
|
|
216
|
+
'client-id': 'new-google-id',
|
|
217
|
+
},
|
|
218
|
+
{ yes: true },
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
expect(logs.join('\n')).toContain(
|
|
222
|
+
'--dev-credentials cannot be combined with --client-id',
|
|
223
|
+
);
|
|
224
|
+
expect(updatedClients).toHaveLength(0);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
test('updates redirect URI only', async () => {
|
|
228
|
+
await run(
|
|
229
|
+
{
|
|
230
|
+
name: 'google-web',
|
|
231
|
+
'custom-redirect-uri': 'https://example.com/oauth/callback',
|
|
232
|
+
},
|
|
233
|
+
{ yes: true },
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
expect(updatedClients).toHaveLength(1);
|
|
237
|
+
expect(updatedClients[0]).toMatchObject({
|
|
238
|
+
oauthClientId: 'google-web',
|
|
239
|
+
redirectTo: 'https://example.com/oauth/callback',
|
|
240
|
+
});
|
|
241
|
+
expect(updatedClients[0].clientId).toBeUndefined();
|
|
242
|
+
expect(updatedClients[0].clientSecret).toBeUndefined();
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
test('interactive Google web update can select dev credentials', async () => {
|
|
246
|
+
mockPromptReturn = 'dev-credentials';
|
|
247
|
+
await run({ name: 'google-web' }, { yes: false });
|
|
248
|
+
|
|
249
|
+
expect(prompts).toHaveLength(1);
|
|
250
|
+
expect((prompts[0] as any).params.promptText).toBe(
|
|
251
|
+
'What do you want to update?',
|
|
252
|
+
);
|
|
253
|
+
expect(updatedClients[0]).toMatchObject({
|
|
254
|
+
oauthClientId: 'google-web',
|
|
255
|
+
useSharedCredentials: true,
|
|
256
|
+
redirectTo: null,
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
test('rejects dev credentials for native Google clients', async () => {
|
|
261
|
+
await run(
|
|
262
|
+
{
|
|
263
|
+
name: 'google-ios',
|
|
264
|
+
'dev-credentials': true,
|
|
265
|
+
},
|
|
266
|
+
{ yes: true },
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
expect(logs.join('\n')).toContain(
|
|
270
|
+
'--dev-credentials is only supported for Google web clients',
|
|
271
|
+
);
|
|
272
|
+
expect(updatedClients).toHaveLength(0);
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
describe('provider credential updates', () => {
|
|
277
|
+
test('updates GitHub client secret without requiring a new client ID', async () => {
|
|
278
|
+
await run(
|
|
279
|
+
{
|
|
280
|
+
name: 'github',
|
|
281
|
+
'client-secret': 'new-gh-secret',
|
|
282
|
+
},
|
|
283
|
+
{ yes: true },
|
|
284
|
+
);
|
|
285
|
+
|
|
286
|
+
expect(updatedClients).toHaveLength(1);
|
|
287
|
+
expect(updatedClients[0]).toMatchObject({
|
|
288
|
+
oauthClientId: 'github',
|
|
289
|
+
clientSecret: 'new-gh-secret',
|
|
290
|
+
});
|
|
291
|
+
expect(updatedClients[0].clientId).toBeUndefined();
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
test('interactive GitHub update can select redirect URI', async () => {
|
|
295
|
+
mockPromptReturn = ['redirect', 'https://example.com/oauth/callback'];
|
|
296
|
+
|
|
297
|
+
await run({ name: 'github' }, { yes: false });
|
|
298
|
+
|
|
299
|
+
expect(prompts).toHaveLength(2);
|
|
300
|
+
expect((prompts[0] as any).params.promptText).toBe(
|
|
301
|
+
'What do you want to update?',
|
|
302
|
+
);
|
|
303
|
+
expect(updatedClients).toHaveLength(1);
|
|
304
|
+
expect(updatedClients[0]).toMatchObject({
|
|
305
|
+
oauthClientId: 'github',
|
|
306
|
+
redirectTo: 'https://example.com/oauth/callback',
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
test('updates Apple Services ID only', async () => {
|
|
311
|
+
await run(
|
|
312
|
+
{
|
|
313
|
+
name: 'apple',
|
|
314
|
+
'services-id': 'new.apple.service',
|
|
315
|
+
},
|
|
316
|
+
{ yes: true },
|
|
317
|
+
);
|
|
318
|
+
|
|
319
|
+
expect(updatedClients).toHaveLength(1);
|
|
320
|
+
expect(updatedClients[0]).toMatchObject({
|
|
321
|
+
oauthClientId: 'apple',
|
|
322
|
+
clientId: 'new.apple.service',
|
|
323
|
+
});
|
|
324
|
+
expect(updatedClients[0].meta).toBeUndefined();
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
test('updates Apple team and key metadata', async () => {
|
|
328
|
+
await run(
|
|
329
|
+
{
|
|
330
|
+
name: 'apple',
|
|
331
|
+
'team-id': 'TEAM123',
|
|
332
|
+
'key-id': 'KEY456',
|
|
333
|
+
},
|
|
334
|
+
{ yes: true },
|
|
335
|
+
);
|
|
336
|
+
|
|
337
|
+
expect(updatedClients).toHaveLength(1);
|
|
338
|
+
expect(updatedClients[0]).toMatchObject({
|
|
339
|
+
oauthClientId: 'apple',
|
|
340
|
+
meta: {
|
|
341
|
+
teamId: 'TEAM123',
|
|
342
|
+
keyId: 'KEY456',
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
expect(updatedClients[0].clientId).toBeUndefined();
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
test('updates Clerk publishable key and discovery endpoint', async () => {
|
|
349
|
+
await run(
|
|
350
|
+
{
|
|
351
|
+
name: 'clerk',
|
|
352
|
+
'publishable-key':
|
|
353
|
+
'pk_test_Z3VpZGluZy1wZWdhc3VzLTkzLmNsZXJrLmFjY291bnRzLmRldiQ',
|
|
354
|
+
},
|
|
355
|
+
{ yes: true },
|
|
356
|
+
);
|
|
357
|
+
|
|
358
|
+
expect(updatedClients).toHaveLength(1);
|
|
359
|
+
expect(updatedClients[0]).toMatchObject({
|
|
360
|
+
oauthClientId: 'clerk',
|
|
361
|
+
discoveryEndpoint:
|
|
362
|
+
'https://guiding-pegasus-93.clerk.accounts.dev/.well-known/openid-configuration',
|
|
363
|
+
meta: {
|
|
364
|
+
clerkPublishableKey:
|
|
365
|
+
'pk_test_Z3VpZGluZy1wZWdhc3VzLTkzLmNsZXJrLmFjY291bnRzLmRldiQ',
|
|
366
|
+
},
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
test('updates Firebase project ID and discovery endpoint', async () => {
|
|
371
|
+
await run(
|
|
372
|
+
{
|
|
373
|
+
name: 'firebase',
|
|
374
|
+
'project-id': 'my-app-123',
|
|
375
|
+
},
|
|
376
|
+
{ yes: true },
|
|
377
|
+
);
|
|
378
|
+
|
|
379
|
+
expect(updatedClients).toHaveLength(1);
|
|
380
|
+
expect(updatedClients[0]).toMatchObject({
|
|
381
|
+
oauthClientId: 'firebase',
|
|
382
|
+
discoveryEndpoint:
|
|
383
|
+
'https://securetoken.google.com/my-app-123/.well-known/openid-configuration',
|
|
384
|
+
});
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
test('rejects invalid Firebase project ID', async () => {
|
|
388
|
+
await run(
|
|
389
|
+
{
|
|
390
|
+
name: 'firebase',
|
|
391
|
+
'project-id': 'BAD',
|
|
392
|
+
},
|
|
393
|
+
{ yes: true },
|
|
394
|
+
);
|
|
395
|
+
|
|
396
|
+
expect(logs.join('\n')).toContain('Invalid Firebase project ID');
|
|
397
|
+
expect(updatedClients).toHaveLength(0);
|
|
398
|
+
});
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
describe('--yes validation', () => {
|
|
402
|
+
test('requires an identifier', async () => {
|
|
403
|
+
await run({ 'client-id': 'new-id' }, { yes: true });
|
|
404
|
+
expect(logs.join('\n')).toContain('Must specify --id or --name');
|
|
405
|
+
expect(updatedClients).toHaveLength(0);
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
test('requires at least one update field', async () => {
|
|
409
|
+
await run({ name: 'github' }, { yes: true });
|
|
410
|
+
expect(logs.join('\n')).toContain(
|
|
411
|
+
'Must specify at least one of --client-id, --client-secret, or --custom-redirect-uri.',
|
|
412
|
+
);
|
|
413
|
+
expect(updatedClients).toHaveLength(0);
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
test('rejects both id and name', async () => {
|
|
417
|
+
await run(
|
|
418
|
+
{
|
|
419
|
+
id: 'github',
|
|
420
|
+
name: 'github',
|
|
421
|
+
'client-secret': 'new-gh-secret',
|
|
422
|
+
},
|
|
423
|
+
{ yes: true },
|
|
424
|
+
);
|
|
425
|
+
|
|
426
|
+
expect(logs.join('\n')).toContain('Cannot specify both --id and --name');
|
|
427
|
+
expect(updatedClients).toHaveLength(0);
|
|
428
|
+
});
|
|
429
|
+
|
|
430
|
+
test('rejects unknown client name', async () => {
|
|
431
|
+
await run(
|
|
432
|
+
{
|
|
433
|
+
name: 'unknown',
|
|
434
|
+
'client-secret': 'new-gh-secret',
|
|
435
|
+
},
|
|
436
|
+
{ yes: true },
|
|
437
|
+
);
|
|
438
|
+
|
|
439
|
+
expect(logs.join('\n')).toContain('OAuth client not found');
|
|
440
|
+
expect(updatedClients).toHaveLength(0);
|
|
441
|
+
});
|
|
442
|
+
});
|
|
@@ -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;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAgC5D,eAAO,MAAM,gBAAgB,gFAO5B,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;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAgC5D,eAAO,MAAM,gBAAgB,gFAO5B,CAAC;AAq4BF,eAAO,MAAM,gBAAgB;;;;6eAwD5B,CAAC"}
|
|
@@ -100,7 +100,8 @@ const printGoogleDevCredentialsClient = Effect.fn(function* ({ appType, client,
|
|
|
100
100
|
'No Google Console setup required.',
|
|
101
101
|
'Works on localhost and Expo during development.',
|
|
102
102
|
'',
|
|
103
|
-
'
|
|
103
|
+
'Ready for production? Run:',
|
|
104
|
+
` instant-cli auth client update --name ${client.client_name} --client-id <id> --client-secret <secret>`,
|
|
104
105
|
].join('\n'), { dimBorder: true, padding: { right: 1, left: 1 } }));
|
|
105
106
|
});
|
|
106
107
|
const printGoogleCustomCredentialsClient = Effect.fn(function* ({ appType, client, clientId, customRedirectUri, redirectUri, }) {
|