instant-cli 1.0.19 → 1.0.20

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.
@@ -0,0 +1,52 @@
1
+ import chalk from 'chalk';
2
+ import { Effect, Schema } from 'effect';
3
+ import { AuthorizedOrigin, getAppsAuth } from "../../../lib/oauth.js";
4
+ export const originSource = (origin) => {
5
+ switch (origin.service) {
6
+ case 'generic':
7
+ return 'Website';
8
+ case 'netlify':
9
+ return 'Netlify site';
10
+ case 'vercel':
11
+ if (origin.params[0] !== 'vercel.app') {
12
+ return `Vercel project (${origin.params[0]})`;
13
+ }
14
+ return 'Vercel project';
15
+ case 'custom-scheme':
16
+ return 'Native app';
17
+ default:
18
+ return origin.service;
19
+ }
20
+ };
21
+ export const originDisplay = (origin) => {
22
+ switch (origin.service) {
23
+ case 'generic':
24
+ return origin.params[0];
25
+ case 'netlify':
26
+ return origin.params[0];
27
+ case 'vercel':
28
+ return origin.params[1];
29
+ case 'custom-scheme':
30
+ return `${origin.params[0]}://`;
31
+ default:
32
+ return origin.params[0];
33
+ }
34
+ };
35
+ export const authOriginListCmd = Effect.fn(function* (_opts) {
36
+ const info = yield* getAppsAuth();
37
+ if (_opts.json) {
38
+ yield* Effect.log(JSON.stringify(info.authorized_redirect_origins, null, 2));
39
+ return;
40
+ }
41
+ const origins = info.authorized_redirect_origins ?? [];
42
+ if (origins.length === 0) {
43
+ yield* Effect.log('No authorized redirect origins configured.');
44
+ return;
45
+ }
46
+ for (const origin of origins) {
47
+ yield* Effect.log(chalk.cyan(originDisplay(origin)));
48
+ yield* Effect.log(` Type: ${originSource(origin)}`);
49
+ yield* Effect.log(` ID: ${origin.id}`);
50
+ }
51
+ });
52
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/auth/origin/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAmD,EACnD,EAAE;IACF,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS;YACZ,OAAO,cAAc,CAAC;QACxB,KAAK,QAAQ;YACX,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;gBACtC,OAAO,mBAAmB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;YAChD,CAAC;YACD,OAAO,gBAAgB,CAAC;QAC1B,KAAK,eAAe;YAClB,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC1B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAmD,EACnD,EAAE;IACF,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,eAAe;YAClB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAClC;YACE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAClD,KAAgD;IAEhD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,EAAE,CAAC,CAAC,CAC1D,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC;IAEvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["import chalk from 'chalk';\nimport { Effect, Schema } from 'effect';\nimport type { authOriginListDef, OptsFromCommand } from '../../../index.ts';\nimport { AuthorizedOrigin, getAppsAuth } from '../../../lib/oauth.ts';\n\nexport const originSource = (\n origin: Schema.Schema.Type<typeof AuthorizedOrigin>,\n) => {\n switch (origin.service) {\n case 'generic':\n return 'Website';\n case 'netlify':\n return 'Netlify site';\n case 'vercel':\n if (origin.params[0] !== 'vercel.app') {\n return `Vercel project (${origin.params[0]})`;\n }\n return 'Vercel project';\n case 'custom-scheme':\n return 'Native app';\n default:\n return origin.service;\n }\n};\n\nexport const originDisplay = (\n origin: Schema.Schema.Type<typeof AuthorizedOrigin>,\n) => {\n switch (origin.service) {\n case 'generic':\n return origin.params[0];\n case 'netlify':\n return origin.params[0];\n case 'vercel':\n return origin.params[1];\n case 'custom-scheme':\n return `${origin.params[0]}://`;\n default:\n return origin.params[0];\n }\n};\n\nexport const authOriginListCmd = Effect.fn(function* (\n _opts: OptsFromCommand<typeof authOriginListDef>,\n) {\n const info = yield* getAppsAuth();\n if (_opts.json) {\n yield* Effect.log(\n JSON.stringify(info.authorized_redirect_origins, null, 2),\n );\n return;\n }\n\n const origins = info.authorized_redirect_origins ?? [];\n\n if (origins.length === 0) {\n yield* Effect.log('No authorized redirect origins configured.');\n return;\n }\n\n for (const origin of origins) {\n yield* Effect.log(chalk.cyan(originDisplay(origin)));\n yield* Effect.log(` Type: ${originSource(origin)}`);\n yield* Effect.log(` ID: ${origin.id}`);\n }\n});\n"]}
package/dist/index.d.ts CHANGED
@@ -20,6 +20,22 @@ export declare const authClientDeleteDef: Command<[], {
20
20
  name?: string | undefined;
21
21
  app?: string | undefined;
22
22
  }, {}>;
23
+ export declare const authOriginListDef: Command<[], {
24
+ app?: string | undefined;
25
+ json?: true | undefined;
26
+ }, {}>;
27
+ export declare const authOriginAddDef: Command<[], {
28
+ type?: string | undefined;
29
+ url?: string | undefined;
30
+ project?: string | undefined;
31
+ site?: string | undefined;
32
+ scheme?: string | undefined;
33
+ app?: string | undefined;
34
+ }, {}>;
35
+ export declare const authOriginDeleteDef: Command<[], {
36
+ id?: string | undefined;
37
+ app?: string | undefined;
38
+ }, {}>;
23
39
  export declare const initWithoutFilesDef: Command<[], {
24
40
  title?: string | undefined;
25
41
  orgId?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAU,MAAM,6BAA6B,CAAC;AA4B9D,MAAM,MAAM,eAAe,CAAC,CAAC,IAC3B,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAiBnD,eAAO,MAAM,OAAO;;;;;MAgChB,CAAC;AAIL,eAAO,MAAM,gBAAgB;;;;MA8DzB,CAAC;AACL,eAAO,MAAM,iBAAiB;;;MAsB1B,CAAC;AAEL,eAAO,MAAM,mBAAmB;;;;MAoB5B,CAAC;AAEL,eAAO,MAAM,mBAAmB;;;;MAgB5B,CAAC;AAEL,eAAO,MAAM,QAAQ;;;MAYjB,CAAC;AAWL,eAAO,MAAM,OAAO,qBAchB,CAAC;AAEL,eAAO,MAAM,WAAW;;MAmBpB,CAAC;AAEL,eAAO,MAAM,QAAQ;;;;;;MAiBjB,CAAC;AAEL,eAAO,MAAM,OAAO;;;;MA4ChB,CAAC;AAEL,eAAO,MAAM,OAAO;;;;;MAgDhB,CAAC;AAEL,eAAO,MAAM,QAAQ;;MAoBjB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAU,MAAM,6BAA6B,CAAC;AA+B9D,MAAM,MAAM,eAAe,CAAC,CAAC,IAC3B,CAAC,SAAS,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAiBnD,eAAO,MAAM,OAAO;;;;;MAgChB,CAAC;AAIL,eAAO,MAAM,gBAAgB;;;;MA8DzB,CAAC;AACL,eAAO,MAAM,iBAAiB;;;MAsB1B,CAAC;AAEL,eAAO,MAAM,mBAAmB;;;;MAoB5B,CAAC;AAGL,eAAO,MAAM,iBAAiB;;;MAoB1B,CAAC;AAEL,eAAO,MAAM,gBAAgB;;;;;;;MA2CzB,CAAC;AAEL,eAAO,MAAM,mBAAmB;;;MAmB5B,CAAC;AAEL,eAAO,MAAM,mBAAmB;;;;MAgB5B,CAAC;AAEL,eAAO,MAAM,QAAQ;;;MAYjB,CAAC;AAWL,eAAO,MAAM,OAAO,qBAchB,CAAC;AAEL,eAAO,MAAM,WAAW;;MAmBpB,CAAC;AAEL,eAAO,MAAM,QAAQ;;;;;;MAiBjB,CAAC;AAEL,eAAO,MAAM,OAAO;;;;MA4ChB,CAAC;AAEL,eAAO,MAAM,OAAO;;;;;MAgDhB,CAAC;AAEL,eAAO,MAAM,QAAQ;;MAoBjB,CAAC"}
package/dist/index.js CHANGED
@@ -21,6 +21,9 @@ import { PACKAGE_ALIAS_AND_FULL_NAMES } from "./context/projectInfo.js";
21
21
  import { authClientAddCmd } from "./commands/auth/client/add.js";
22
22
  import { authClientListCmd } from "./commands/auth/client/list.js";
23
23
  import { authClientDeleteCmd } from "./commands/auth/client/delete.js";
24
+ import { authOriginListCmd } from "./commands/auth/origin/list.js";
25
+ import { authOriginDeleteCmd } from "./commands/auth/origin/delete.js";
26
+ import { authOriginAddCmd } from "./commands/auth/origin/add.js";
24
27
  import { link } from "./logging.js";
25
28
  program
26
29
  .name('instant-cli')
@@ -125,6 +128,53 @@ export const authClientDeleteDef = authClient
125
128
  allowAdminToken: true,
126
129
  }))));
127
130
  });
131
+ const authOrigin = auth.command('origin');
132
+ export const authOriginListDef = authOrigin
133
+ .command('list')
134
+ .option('-a --app <app-id>', 'App ID to list origins for. Defaults to *_INSTANT_APP_ID in .env')
135
+ .option('--json', 'Enable JSON output')
136
+ .action((opts) => {
137
+ return runCommandEffect(authOriginListCmd(opts).pipe(Effect.provide(WithAppLayer({
138
+ coerce: false,
139
+ coerceAuth: false,
140
+ appId: opts.app,
141
+ allowAdminToken: true,
142
+ }).pipe(Layer.annotateLogs('silent', !!opts.json)))));
143
+ });
144
+ export const authOriginAddDef = authOrigin
145
+ .command('add')
146
+ .option('--type <website|vercel|netlify|custom-scheme>', 'Type of origin to add.')
147
+ .option('--url <url>', 'Website URL (for website type, e.g. example.com)')
148
+ .option('--project <name>', 'Vercel project name (for vercel type, e.g. my-project)')
149
+ .option('--site <name>', 'Netlify site name (for netlify type, e.g. my-site)')
150
+ .option('--scheme <scheme>', 'App scheme (for custom-scheme type, e.g. myapp://)')
151
+ .option('-a --app <app-id>', 'App ID to add an origin to. Defaults to *_INSTANT_APP_ID in .env')
152
+ .addHelpText('after', `
153
+ Origin Types:
154
+ website A standard website origin (e.g. example.com)
155
+ vercel Vercel preview deployments (project name)
156
+ netlify Netlify preview deployments (site name)
157
+ custom-scheme Native app scheme (e.g. your-app-scheme://)
158
+ `)
159
+ .action((opts) => {
160
+ return runCommandEffect(authOriginAddCmd(opts).pipe(Effect.provide(WithAppLayer({
161
+ coerce: false,
162
+ coerceAuth: false,
163
+ appId: opts.app,
164
+ allowAdminToken: true,
165
+ }))));
166
+ });
167
+ export const authOriginDeleteDef = authOrigin
168
+ .command('delete')
169
+ .option('--id <origin-id>', 'Origin ID to delete')
170
+ .option('-a --app <app-id>', 'App ID to delete an origin from. Defaults to *_INSTANT_APP_ID in .env')
171
+ .action((opts) => {
172
+ return runCommandEffect(authOriginDeleteCmd(opts).pipe(Effect.provide(WithAppLayer({
173
+ coerce: false,
174
+ appId: opts.app,
175
+ allowAdminToken: true,
176
+ }))));
177
+ });
128
178
  export const initWithoutFilesDef = program
129
179
  .command('init-without-files')
130
180
  .description('Generate a new app id and admin token pair without any files.')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { loadEnv } from './util/loadEnv.ts';\n\nloadEnv();\n\nimport minimist from 'minimist';\nimport { Command, Option } from '@commander-js/extra-typings';\nimport chalk from 'chalk';\nimport { Effect, Layer } from 'effect';\nimport version from './version.js';\nimport { initCommand } from './commands/init.ts';\nimport { initWithoutFilesCommand } from './commands/initWithoutFiles.ts';\nimport { loginCommand } from './commands/login.ts';\nimport { logoutCommand } from './commands/logout.ts';\nimport {\n AuthLayerLive,\n BaseLayerLive,\n runCommandEffect,\n WithAppLayer,\n} from './layer.ts';\nimport { infoCommand } from './commands/info.ts';\nimport { pullCommand } from './commands/pull.ts';\nimport type { SchemaPermsOrBoth } from './commands/pull.ts';\nimport { claimCommand } from './commands/claim.ts';\nimport { pushCommand } from './commands/push.ts';\nimport { explorerCmd } from './commands/explorer.ts';\nimport { queryCmd } from './commands/query.ts';\nimport { program } from './program.ts';\nimport { PACKAGE_ALIAS_AND_FULL_NAMES } from './context/projectInfo.ts';\nimport { authClientAddCmd } from './commands/auth/client/add.ts';\nimport { authClientListCmd } from './commands/auth/client/list.ts';\nimport { authClientDeleteCmd } from './commands/auth/client/delete.ts';\nimport { link } from './logging.ts';\n\nexport type OptsFromCommand<C> =\n C extends Command<any, infer R, any> ? R : never;\n\nprogram\n .name('instant-cli')\n .addOption(globalOption('-t --token <token>', 'Auth token override'))\n .addOption(globalOption('-y --yes', \"Answer 'yes' to all prompts\"))\n .addOption(globalOption('--env <file>', 'Use a specific .env file'))\n .addOption(\n globalOption('-v --version', 'Print the version number', () => {\n console.log(version);\n process.exit(0);\n }),\n )\n .addHelpOption(globalOption('-h --help', 'Print the help text for a command'))\n .usage(`<command> ${chalk.dim('[options] [args]')}`);\n\n// Command List\nexport const initDef = program\n .command('init')\n .description('Set up a new project.')\n .option(\n '-a --app <app-id>',\n 'If you have an existing app ID, we can pull schema and perms from there.',\n )\n .option(\n '-p --package <react|react-native|core|admin|solid|svelte>',\n 'Which package to automatically install if there is not one installed already.',\n )\n .option('--title <title>', 'Title for the created app')\n .option(\n '--temp',\n 'Create a temporary app which will automatically delete itself after >24 hours.',\n )\n .action((options) => {\n return runCommandEffect(\n initCommand(options).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: true,\n coerceAuth: true,\n title: options.title,\n appId: options.app,\n packageName: options.package as any,\n applyEnv: true,\n temp: options.temp,\n }),\n ),\n ),\n );\n });\n\nconst auth = program.command('auth');\nconst authClient = auth.command('client');\nexport const authClientAddDef = authClient\n .command('add')\n .allowExcessArguments(true)\n .allowUnknownOption(true)\n .option(\n '--type <google|github|apple|linkedin>',\n 'Type of oauth client to add',\n )\n .option(\n '--name <client name>',\n 'Custom name to identify the OAuth client (ex: google-web)',\n )\n .option(\n '-a --app <app-id>',\n 'App ID to modify. Defaults to *_INSTANT_APP_ID in .env',\n )\n .addHelpText(\n 'after',\n `\nProvider Specific Options:\n Google:\n --app-type web|ios|android|button-for-web\n --client-id\n --client-secret (web only)\n --custom-redirect-uri (optional, web only)\n GitHub:\n --client-id\n --client-secret\n --custom-redirect-uri (optional)\n Apple:\n --services-id (Services ID from ${link('https://developer.apple.com', 'developer.apple.com')})\n --team-id (optional, required for web redirect flow)\n --key-id (optional, required for web redirect flow)\n --private-key-file (optional, path to .p8 PEM; required for web redirect flow)\n --custom-redirect-uri (optional, web redirect flow only)\n LinkedIn:\n --client-id\n --client-secret\n --custom-redirect-uri (optional)\n Clerk:\n --publishable-key (Publishable Key from ${link('https://dashboard.clerk.com', 'dashboard.clerk.com')})\n Firebase:\n --project-id (Project ID from ${link('https://console.firebase.google.com', 'console.firebase.google.com')})\n`,\n )\n .action((opts) => {\n opts = {\n ...opts,\n ...minimist(process.argv),\n };\n return runCommandEffect(\n authClientAddCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n coerceAuth: false,\n appId: opts.app,\n allowAdminToken: true,\n }),\n ),\n ),\n );\n });\nexport const authClientListDef = authClient\n .command('list')\n .option(\n '-a --app <app-id>',\n 'App ID to list clients for. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option('--json', 'Enable JSON output')\n .allowUnknownOption(true)\n .action((opts) => {\n return runCommandEffect(\n authClientListCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n coerceAuth: false,\n appId: opts.app,\n allowAdminToken: true,\n // Silence \"searching for instant sdk.. logs for json output\"\n }).pipe(Layer.annotateLogs('silent', !!opts.json)),\n ),\n ),\n );\n });\n\nexport const authClientDeleteDef = authClient\n .command('delete')\n .option('--id <client-id>', 'Client ID to delete')\n .option('--name <client-name>', 'Client name to delete')\n .option(\n '-a --app <app-id>',\n 'App ID to delete a client from. Defaults to *_INSTANT_APP_ID in .env',\n )\n .action((opts) => {\n return runCommandEffect(\n authClientDeleteCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n appId: opts.app,\n allowAdminToken: true,\n }),\n ),\n ),\n );\n });\n\nexport const initWithoutFilesDef = program\n .command('init-without-files')\n .description('Generate a new app id and admin token pair without any files.')\n .option('--title <title>', 'Title for the created app.')\n .option(\n '--org-id <org-id>',\n 'Organization id for app. Cannot be used with --temp flag.',\n )\n .option(\n '--temp',\n 'Create a temporary app which will automatically delete itself after >24 hours.',\n )\n .action((opts) => {\n return runCommandEffect(\n initWithoutFilesCommand(opts).pipe(Effect.provide(BaseLayerLive)),\n );\n });\n\nexport const loginDef = program\n .command('login')\n .description('Log into your account')\n .option('-p --print', 'Prints the auth token into the console.')\n .option(\n '--headless',\n 'Print the login URL instead of trying to open the browser',\n )\n .action(async (opts) => {\n await runCommandEffect(\n loginCommand(opts).pipe(Effect.provide(BaseLayerLive)),\n );\n });\n\nprogram\n .command('logout')\n .description('Log out of your Instant account')\n .action(async () => {\n return runCommandEffect(\n logoutCommand().pipe(Effect.provide(BaseLayerLive)),\n );\n });\n\nexport const infoDef = program\n .command('info')\n .description('Display CLI version and login status')\n .action(async () => {\n return runCommandEffect(\n infoCommand().pipe(\n Effect.provide(\n AuthLayerLive({\n coerce: false,\n allowAdminToken: false,\n }).pipe(Layer.catchAll(() => Layer.empty)), // make the auth layer optional\n ),\n ),\n );\n });\n\nexport const explorerDef = program\n .command('explorer')\n .description('Opens the Explorer in your browser')\n .option(\n '-a --app <app-id>',\n 'App ID to open the explorer to. Defaults to *_INSTANT_APP_ID in .env',\n )\n .action(async (opts) => {\n return runCommandEffect(\n explorerCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: true,\n coerceAuth: true,\n appId: opts.app,\n }),\n ),\n ),\n );\n });\n\nexport const queryDef = program\n .command('query')\n .argument('<query>', 'InstaQL query as JSON/JSON5')\n .option(\n '-a --app <app-id>',\n 'App ID to query. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option('--admin', 'Run the query as admin (bypasses permissions)')\n .option('--as-email <email>', 'Run the query as a specific user by email')\n .option('--as-guest', 'Run the query as an unauthenticated guest')\n .option(\n '--as-token <refresh-token>',\n 'Run the query as a user identified by refresh token',\n )\n .description('Run an InstaQL query against your app.')\n .action(async function (queryArg, opts) {\n return runCommandEffect(queryCmd(queryArg, opts));\n });\n\nexport const pullDef = program\n .command('pull')\n .argument(\n '[schema|perms|all]',\n 'Which configuration to pull. Defaults to `all`',\n )\n .option(\n '-a --app <app-id>',\n 'App ID to pull to. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option(\n '-p --package <react|react-native|core|admin|solid|svelte>',\n 'Which package to automatically install if there is not one installed already.',\n )\n .option(\n '--experimental-type-preservation',\n \"[Experimental] Preserve manual type changes like `status: i.json<'online' | 'offline'>()` when doing `instant-cli pull schema`\",\n )\n .description('Pull schema and perm files from production.')\n .addHelpText(\n 'after',\n `\nEnvironment Variables:\n INSTANT_SCHEMA_FILE_PATH Override schema file location (default: instant.schema.ts)\n INSTANT_PERMS_FILE_PATH Override perms file location (default: instant.perms.ts)\n`,\n )\n .action(async function (arg, inputOpts) {\n return runCommandEffect(\n pullCommand(arg as SchemaPermsOrBoth, inputOpts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: true,\n packageName: inputOpts.package as\n | 'react'\n | 'react-native'\n | 'core'\n | 'admin'\n | undefined,\n appId: inputOpts.app,\n }),\n ),\n ),\n );\n });\n\nexport const pushDef = program\n .command('push')\n .argument(\n '[schema|perms|all]',\n 'Which configuration to push. Defaults to `all`',\n )\n .option(\n '-a --app <app-id>',\n 'App ID to push to. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option(\n '--skip-check-types',\n \"Don't check types on the server when pushing schema\",\n )\n .option(\n '--rename [renames...]',\n 'List of full attribute names separated by a \":\"\\n Example:`push --rename posts.author:posts.creator stores.owner:stores.manager`',\n )\n .option(\n '-p --package <react|react-native|core|admin|solid|svelte>',\n 'Which package to automatically install if there is not one installed already.',\n )\n .description('Push schema and perm files to production.')\n .addHelpText(\n 'after',\n `\nEnvironment Variables:\n INSTANT_SCHEMA_FILE_PATH Override schema file location (default: instant.schema.ts)\n INSTANT_PERMS_FILE_PATH Override perms file location (default: instant.perms.ts)\n`,\n )\n .action(async function (arg, inputOpts) {\n return runCommandEffect(\n pushCommand(arg, inputOpts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n appId: inputOpts.app,\n coerceLibraryInstall: true,\n coerceAuth: false,\n allowAdminToken: true,\n applyEnv: true,\n packageName:\n inputOpts.package as keyof typeof PACKAGE_ALIAS_AND_FULL_NAMES,\n }),\n ),\n ),\n );\n });\n\nexport const claimDef = program\n .command('claim')\n .description('Transfer a temporary app into your Instant account')\n .option(\n '-a --app <app-id>',\n 'App to claim. Defaults to *_INSTANT_APP_ID in .env',\n )\n .action(async function (opts) {\n return runCommandEffect(\n claimCommand.pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n allowAdminToken: false,\n appId: opts.app,\n applyEnv: false,\n }),\n ),\n ),\n );\n });\n//// Program setup /////\n\nfunction globalOption(\n flags: string,\n description?: string,\n argParser?: (value: string, prev?: unknown) => unknown,\n) {\n const opt = new Option(flags, description);\n if (argParser) {\n opt.argParser(argParser);\n }\n // @ts-ignore\n // __global does not exist on `Option`,\n // but we use it in `getLocalAndGlobalOptions`, to produce\n // our own custom list of local and global options.\n // For more info, see the original PR:\n // https://github.com/instantdb/instant/pull/505\n opt.__global = true;\n return opt;\n}\n\nfunction getLocalAndGlobalOptions(cmd: any, helper: any) {\n const mixOfLocalAndGlobal = helper.visibleOptions(cmd);\n const localOptionsFromMix = mixOfLocalAndGlobal.filter(\n (option: any) => !option.__global,\n );\n const globalOptionsFromMix = mixOfLocalAndGlobal.filter(\n (option: any) => option.__global,\n );\n const globalOptions = helper.visibleGlobalOptions(cmd);\n\n return [localOptionsFromMix, globalOptionsFromMix.concat(globalOptions)];\n}\n\nfunction formatHelp(\n this: { showGlobalOptions: boolean },\n cmd: any,\n helper: any,\n) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n const itemIndentWidth = 2;\n const itemSeparatorWidth = 2; // between term and description\n function formatItem(term: string, description: string | undefined) {\n if (description) {\n const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n return helper.boxWrap(\n fullText,\n helpWidth - itemIndentWidth,\n termWidth + itemSeparatorWidth,\n );\n }\n return term;\n }\n function formatList(textArray: string[]) {\n return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n }\n\n // Usage\n let output = [`${helper.commandUsage(cmd)}`, ''];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([\n helper.boxWrap(commandDescription, helpWidth, 0),\n '',\n ]);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument: any) => {\n return formatItem(\n helper.argumentTerm(argument),\n helper.argumentDescription(argument),\n );\n });\n if (argumentList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Arguments'),\n formatList(argumentList),\n '',\n ]);\n }\n const [visibleOptions, visibleGlobalOptions] = getLocalAndGlobalOptions(\n cmd,\n helper,\n );\n\n // Options\n const optionList = visibleOptions.map((option: any) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (optionList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Options'),\n formatList(optionList),\n '',\n ]);\n }\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd: any) => {\n return formatItem(\n helper.subcommandTerm(cmd),\n helper.subcommandDescription(cmd),\n );\n });\n if (commandList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Commands'),\n formatList(commandList),\n '',\n ]);\n }\n\n if (this.showGlobalOptions) {\n const globalOptionList = visibleGlobalOptions.map((option: any) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (globalOptionList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Global Options'),\n formatList(globalOptionList),\n '',\n ]);\n }\n }\n\n return output.join('\\n');\n}\n\nprogram.configureHelp({\n showGlobalOptions: true,\n formatHelp,\n});\n\nprogram.parse(process.argv);\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { loadEnv } from './util/loadEnv.ts';\n\nloadEnv();\n\nimport minimist from 'minimist';\nimport { Command, Option } from '@commander-js/extra-typings';\nimport chalk from 'chalk';\nimport { Effect, Layer } from 'effect';\nimport version from './version.js';\nimport { initCommand } from './commands/init.ts';\nimport { initWithoutFilesCommand } from './commands/initWithoutFiles.ts';\nimport { loginCommand } from './commands/login.ts';\nimport { logoutCommand } from './commands/logout.ts';\nimport {\n AuthLayerLive,\n BaseLayerLive,\n runCommandEffect,\n WithAppLayer,\n} from './layer.ts';\nimport { infoCommand } from './commands/info.ts';\nimport { pullCommand } from './commands/pull.ts';\nimport type { SchemaPermsOrBoth } from './commands/pull.ts';\nimport { claimCommand } from './commands/claim.ts';\nimport { pushCommand } from './commands/push.ts';\nimport { explorerCmd } from './commands/explorer.ts';\nimport { queryCmd } from './commands/query.ts';\nimport { program } from './program.ts';\nimport { PACKAGE_ALIAS_AND_FULL_NAMES } from './context/projectInfo.ts';\nimport { authClientAddCmd } from './commands/auth/client/add.ts';\nimport { authClientListCmd } from './commands/auth/client/list.ts';\nimport { authClientDeleteCmd } from './commands/auth/client/delete.ts';\nimport { authOriginListCmd } from './commands/auth/origin/list.ts';\nimport { authOriginDeleteCmd } from './commands/auth/origin/delete.ts';\nimport { authOriginAddCmd } from './commands/auth/origin/add.ts';\nimport { link } from './logging.ts';\n\nexport type OptsFromCommand<C> =\n C extends Command<any, infer R, any> ? R : never;\n\nprogram\n .name('instant-cli')\n .addOption(globalOption('-t --token <token>', 'Auth token override'))\n .addOption(globalOption('-y --yes', \"Answer 'yes' to all prompts\"))\n .addOption(globalOption('--env <file>', 'Use a specific .env file'))\n .addOption(\n globalOption('-v --version', 'Print the version number', () => {\n console.log(version);\n process.exit(0);\n }),\n )\n .addHelpOption(globalOption('-h --help', 'Print the help text for a command'))\n .usage(`<command> ${chalk.dim('[options] [args]')}`);\n\n// Command List\nexport const initDef = program\n .command('init')\n .description('Set up a new project.')\n .option(\n '-a --app <app-id>',\n 'If you have an existing app ID, we can pull schema and perms from there.',\n )\n .option(\n '-p --package <react|react-native|core|admin|solid|svelte>',\n 'Which package to automatically install if there is not one installed already.',\n )\n .option('--title <title>', 'Title for the created app')\n .option(\n '--temp',\n 'Create a temporary app which will automatically delete itself after >24 hours.',\n )\n .action((options) => {\n return runCommandEffect(\n initCommand(options).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: true,\n coerceAuth: true,\n title: options.title,\n appId: options.app,\n packageName: options.package as any,\n applyEnv: true,\n temp: options.temp,\n }),\n ),\n ),\n );\n });\n\nconst auth = program.command('auth');\nconst authClient = auth.command('client');\nexport const authClientAddDef = authClient\n .command('add')\n .allowExcessArguments(true)\n .allowUnknownOption(true)\n .option(\n '--type <google|github|apple|linkedin>',\n 'Type of oauth client to add',\n )\n .option(\n '--name <client name>',\n 'Custom name to identify the OAuth client (ex: google-web)',\n )\n .option(\n '-a --app <app-id>',\n 'App ID to modify. Defaults to *_INSTANT_APP_ID in .env',\n )\n .addHelpText(\n 'after',\n `\nProvider Specific Options:\n Google:\n --app-type web|ios|android|button-for-web\n --client-id\n --client-secret (web only)\n --custom-redirect-uri (optional, web only)\n GitHub:\n --client-id\n --client-secret\n --custom-redirect-uri (optional)\n Apple:\n --services-id (Services ID from ${link('https://developer.apple.com', 'developer.apple.com')})\n --team-id (optional, required for web redirect flow)\n --key-id (optional, required for web redirect flow)\n --private-key-file (optional, path to .p8 PEM; required for web redirect flow)\n --custom-redirect-uri (optional, web redirect flow only)\n LinkedIn:\n --client-id\n --client-secret\n --custom-redirect-uri (optional)\n Clerk:\n --publishable-key (Publishable Key from ${link('https://dashboard.clerk.com', 'dashboard.clerk.com')})\n Firebase:\n --project-id (Project ID from ${link('https://console.firebase.google.com', 'console.firebase.google.com')})\n`,\n )\n .action((opts) => {\n opts = {\n ...opts,\n ...minimist(process.argv),\n };\n return runCommandEffect(\n authClientAddCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n coerceAuth: false,\n appId: opts.app,\n allowAdminToken: true,\n }),\n ),\n ),\n );\n });\nexport const authClientListDef = authClient\n .command('list')\n .option(\n '-a --app <app-id>',\n 'App ID to list clients for. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option('--json', 'Enable JSON output')\n .allowUnknownOption(true)\n .action((opts) => {\n return runCommandEffect(\n authClientListCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n coerceAuth: false,\n appId: opts.app,\n allowAdminToken: true,\n // Silence \"searching for instant sdk.. logs for json output\"\n }).pipe(Layer.annotateLogs('silent', !!opts.json)),\n ),\n ),\n );\n });\n\nexport const authClientDeleteDef = authClient\n .command('delete')\n .option('--id <client-id>', 'Client ID to delete')\n .option('--name <client-name>', 'Client name to delete')\n .option(\n '-a --app <app-id>',\n 'App ID to delete a client from. Defaults to *_INSTANT_APP_ID in .env',\n )\n .action((opts) => {\n return runCommandEffect(\n authClientDeleteCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n appId: opts.app,\n allowAdminToken: true,\n }),\n ),\n ),\n );\n });\n\nconst authOrigin = auth.command('origin');\nexport const authOriginListDef = authOrigin\n .command('list')\n .option(\n '-a --app <app-id>',\n 'App ID to list origins for. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option('--json', 'Enable JSON output')\n .action((opts) => {\n return runCommandEffect(\n authOriginListCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n coerceAuth: false,\n appId: opts.app,\n allowAdminToken: true,\n }).pipe(Layer.annotateLogs('silent', !!opts.json)),\n ),\n ),\n );\n });\n\nexport const authOriginAddDef = authOrigin\n .command('add')\n .option(\n '--type <website|vercel|netlify|custom-scheme>',\n 'Type of origin to add.',\n )\n .option('--url <url>', 'Website URL (for website type, e.g. example.com)')\n .option(\n '--project <name>',\n 'Vercel project name (for vercel type, e.g. my-project)',\n )\n .option('--site <name>', 'Netlify site name (for netlify type, e.g. my-site)')\n .option(\n '--scheme <scheme>',\n 'App scheme (for custom-scheme type, e.g. myapp://)',\n )\n .option(\n '-a --app <app-id>',\n 'App ID to add an origin to. Defaults to *_INSTANT_APP_ID in .env',\n )\n .addHelpText(\n 'after',\n `\nOrigin Types:\n website A standard website origin (e.g. example.com)\n vercel Vercel preview deployments (project name)\n netlify Netlify preview deployments (site name)\n custom-scheme Native app scheme (e.g. your-app-scheme://)\n`,\n )\n .action((opts) => {\n return runCommandEffect(\n authOriginAddCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n coerceAuth: false,\n appId: opts.app,\n allowAdminToken: true,\n }),\n ),\n ),\n );\n });\n\nexport const authOriginDeleteDef = authOrigin\n .command('delete')\n .option('--id <origin-id>', 'Origin ID to delete')\n .option(\n '-a --app <app-id>',\n 'App ID to delete an origin from. Defaults to *_INSTANT_APP_ID in .env',\n )\n .action((opts) => {\n return runCommandEffect(\n authOriginDeleteCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n appId: opts.app,\n allowAdminToken: true,\n }),\n ),\n ),\n );\n });\n\nexport const initWithoutFilesDef = program\n .command('init-without-files')\n .description('Generate a new app id and admin token pair without any files.')\n .option('--title <title>', 'Title for the created app.')\n .option(\n '--org-id <org-id>',\n 'Organization id for app. Cannot be used with --temp flag.',\n )\n .option(\n '--temp',\n 'Create a temporary app which will automatically delete itself after >24 hours.',\n )\n .action((opts) => {\n return runCommandEffect(\n initWithoutFilesCommand(opts).pipe(Effect.provide(BaseLayerLive)),\n );\n });\n\nexport const loginDef = program\n .command('login')\n .description('Log into your account')\n .option('-p --print', 'Prints the auth token into the console.')\n .option(\n '--headless',\n 'Print the login URL instead of trying to open the browser',\n )\n .action(async (opts) => {\n await runCommandEffect(\n loginCommand(opts).pipe(Effect.provide(BaseLayerLive)),\n );\n });\n\nprogram\n .command('logout')\n .description('Log out of your Instant account')\n .action(async () => {\n return runCommandEffect(\n logoutCommand().pipe(Effect.provide(BaseLayerLive)),\n );\n });\n\nexport const infoDef = program\n .command('info')\n .description('Display CLI version and login status')\n .action(async () => {\n return runCommandEffect(\n infoCommand().pipe(\n Effect.provide(\n AuthLayerLive({\n coerce: false,\n allowAdminToken: false,\n }).pipe(Layer.catchAll(() => Layer.empty)), // make the auth layer optional\n ),\n ),\n );\n });\n\nexport const explorerDef = program\n .command('explorer')\n .description('Opens the Explorer in your browser')\n .option(\n '-a --app <app-id>',\n 'App ID to open the explorer to. Defaults to *_INSTANT_APP_ID in .env',\n )\n .action(async (opts) => {\n return runCommandEffect(\n explorerCmd(opts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: true,\n coerceAuth: true,\n appId: opts.app,\n }),\n ),\n ),\n );\n });\n\nexport const queryDef = program\n .command('query')\n .argument('<query>', 'InstaQL query as JSON/JSON5')\n .option(\n '-a --app <app-id>',\n 'App ID to query. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option('--admin', 'Run the query as admin (bypasses permissions)')\n .option('--as-email <email>', 'Run the query as a specific user by email')\n .option('--as-guest', 'Run the query as an unauthenticated guest')\n .option(\n '--as-token <refresh-token>',\n 'Run the query as a user identified by refresh token',\n )\n .description('Run an InstaQL query against your app.')\n .action(async function (queryArg, opts) {\n return runCommandEffect(queryCmd(queryArg, opts));\n });\n\nexport const pullDef = program\n .command('pull')\n .argument(\n '[schema|perms|all]',\n 'Which configuration to pull. Defaults to `all`',\n )\n .option(\n '-a --app <app-id>',\n 'App ID to pull to. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option(\n '-p --package <react|react-native|core|admin|solid|svelte>',\n 'Which package to automatically install if there is not one installed already.',\n )\n .option(\n '--experimental-type-preservation',\n \"[Experimental] Preserve manual type changes like `status: i.json<'online' | 'offline'>()` when doing `instant-cli pull schema`\",\n )\n .description('Pull schema and perm files from production.')\n .addHelpText(\n 'after',\n `\nEnvironment Variables:\n INSTANT_SCHEMA_FILE_PATH Override schema file location (default: instant.schema.ts)\n INSTANT_PERMS_FILE_PATH Override perms file location (default: instant.perms.ts)\n`,\n )\n .action(async function (arg, inputOpts) {\n return runCommandEffect(\n pullCommand(arg as SchemaPermsOrBoth, inputOpts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: true,\n packageName: inputOpts.package as\n | 'react'\n | 'react-native'\n | 'core'\n | 'admin'\n | undefined,\n appId: inputOpts.app,\n }),\n ),\n ),\n );\n });\n\nexport const pushDef = program\n .command('push')\n .argument(\n '[schema|perms|all]',\n 'Which configuration to push. Defaults to `all`',\n )\n .option(\n '-a --app <app-id>',\n 'App ID to push to. Defaults to *_INSTANT_APP_ID in .env',\n )\n .option(\n '--skip-check-types',\n \"Don't check types on the server when pushing schema\",\n )\n .option(\n '--rename [renames...]',\n 'List of full attribute names separated by a \":\"\\n Example:`push --rename posts.author:posts.creator stores.owner:stores.manager`',\n )\n .option(\n '-p --package <react|react-native|core|admin|solid|svelte>',\n 'Which package to automatically install if there is not one installed already.',\n )\n .description('Push schema and perm files to production.')\n .addHelpText(\n 'after',\n `\nEnvironment Variables:\n INSTANT_SCHEMA_FILE_PATH Override schema file location (default: instant.schema.ts)\n INSTANT_PERMS_FILE_PATH Override perms file location (default: instant.perms.ts)\n`,\n )\n .action(async function (arg, inputOpts) {\n return runCommandEffect(\n pushCommand(arg, inputOpts).pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n appId: inputOpts.app,\n coerceLibraryInstall: true,\n coerceAuth: false,\n allowAdminToken: true,\n applyEnv: true,\n packageName:\n inputOpts.package as keyof typeof PACKAGE_ALIAS_AND_FULL_NAMES,\n }),\n ),\n ),\n );\n });\n\nexport const claimDef = program\n .command('claim')\n .description('Transfer a temporary app into your Instant account')\n .option(\n '-a --app <app-id>',\n 'App to claim. Defaults to *_INSTANT_APP_ID in .env',\n )\n .action(async function (opts) {\n return runCommandEffect(\n claimCommand.pipe(\n Effect.provide(\n WithAppLayer({\n coerce: false,\n allowAdminToken: false,\n appId: opts.app,\n applyEnv: false,\n }),\n ),\n ),\n );\n });\n//// Program setup /////\n\nfunction globalOption(\n flags: string,\n description?: string,\n argParser?: (value: string, prev?: unknown) => unknown,\n) {\n const opt = new Option(flags, description);\n if (argParser) {\n opt.argParser(argParser);\n }\n // @ts-ignore\n // __global does not exist on `Option`,\n // but we use it in `getLocalAndGlobalOptions`, to produce\n // our own custom list of local and global options.\n // For more info, see the original PR:\n // https://github.com/instantdb/instant/pull/505\n opt.__global = true;\n return opt;\n}\n\nfunction getLocalAndGlobalOptions(cmd: any, helper: any) {\n const mixOfLocalAndGlobal = helper.visibleOptions(cmd);\n const localOptionsFromMix = mixOfLocalAndGlobal.filter(\n (option: any) => !option.__global,\n );\n const globalOptionsFromMix = mixOfLocalAndGlobal.filter(\n (option: any) => option.__global,\n );\n const globalOptions = helper.visibleGlobalOptions(cmd);\n\n return [localOptionsFromMix, globalOptionsFromMix.concat(globalOptions)];\n}\n\nfunction formatHelp(\n this: { showGlobalOptions: boolean },\n cmd: any,\n helper: any,\n) {\n const termWidth = helper.padWidth(cmd, helper);\n const helpWidth = helper.helpWidth || 80;\n const itemIndentWidth = 2;\n const itemSeparatorWidth = 2; // between term and description\n function formatItem(term: string, description: string | undefined) {\n if (description) {\n const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;\n return helper.boxWrap(\n fullText,\n helpWidth - itemIndentWidth,\n termWidth + itemSeparatorWidth,\n );\n }\n return term;\n }\n function formatList(textArray: string[]) {\n return textArray.join('\\n').replace(/^/gm, ' '.repeat(itemIndentWidth));\n }\n\n // Usage\n let output = [`${helper.commandUsage(cmd)}`, ''];\n\n // Description\n const commandDescription = helper.commandDescription(cmd);\n if (commandDescription.length > 0) {\n output = output.concat([\n helper.boxWrap(commandDescription, helpWidth, 0),\n '',\n ]);\n }\n\n // Arguments\n const argumentList = helper.visibleArguments(cmd).map((argument: any) => {\n return formatItem(\n helper.argumentTerm(argument),\n helper.argumentDescription(argument),\n );\n });\n if (argumentList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Arguments'),\n formatList(argumentList),\n '',\n ]);\n }\n const [visibleOptions, visibleGlobalOptions] = getLocalAndGlobalOptions(\n cmd,\n helper,\n );\n\n // Options\n const optionList = visibleOptions.map((option: any) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (optionList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Options'),\n formatList(optionList),\n '',\n ]);\n }\n // Commands\n const commandList = helper.visibleCommands(cmd).map((cmd: any) => {\n return formatItem(\n helper.subcommandTerm(cmd),\n helper.subcommandDescription(cmd),\n );\n });\n if (commandList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Commands'),\n formatList(commandList),\n '',\n ]);\n }\n\n if (this.showGlobalOptions) {\n const globalOptionList = visibleGlobalOptions.map((option: any) => {\n return formatItem(\n helper.optionTerm(option),\n helper.optionDescription(option),\n );\n });\n if (globalOptionList.length > 0) {\n output = output.concat([\n chalk.dim.bold('Global Options'),\n formatList(globalOptionList),\n '',\n ]);\n }\n }\n\n return output.join('\\n');\n}\n\nprogram.configureHelp({\n showGlobalOptions: true,\n formatHelp,\n});\n\nprogram.parse(process.argv);\n"]}
@@ -42,6 +42,13 @@ export declare const AddOAuthClientResponse: Schema.Struct<{
42
42
  meta: Schema.optional<typeof Schema.Any>;
43
43
  }>;
44
44
  }>;
45
+ export declare const AuthorizedOriginResponse: Schema.Struct<{
46
+ origin: Schema.Struct<{
47
+ id: typeof Schema.String;
48
+ service: Schema.Literal<["generic", "vercel", "netlify", "custom-scheme"]>;
49
+ params: Schema.mutable<Schema.Array$<typeof Schema.String>>;
50
+ }>;
51
+ }>;
45
52
  export declare const AppsAuthResponse: Schema.Struct<{
46
53
  authorized_redirect_origins: Schema.optional<Schema.Union<[Schema.mutable<Schema.Array$<Schema.Schema<{
47
54
  readonly id: string;
@@ -173,4 +180,21 @@ export declare const getClientNameAndProvider: (providerType: "google" | "github
173
180
  };
174
181
  clientName: string | undefined;
175
182
  }, BadArgsError | import("./ui.ts").UIError | import("./http.ts").InstantHttpError | import("effect/Cause").TimeoutException | import("@effect/platform/HttpClientError").RequestError | import("effect/ParseResult").ParseError | import("@effect/platform/HttpClientError").ResponseError, import("../context/globalOpts.ts").GlobalOpts | InstantHttpAuthed | CurrentApp>;
183
+ export declare const removeAuthorizedOrigin: (originId: string) => Effect.Effect<{
184
+ readonly origin: {
185
+ readonly id: string;
186
+ readonly service: "generic" | "vercel" | "netlify" | "custom-scheme";
187
+ readonly params: string[];
188
+ };
189
+ }, import("./http.ts").InstantHttpError | import("effect/Cause").TimeoutException | import("@effect/platform/HttpClientError").RequestError | import("effect/ParseResult").ParseError | import("@effect/platform/HttpClientError").ResponseError, InstantHttpAuthed | CurrentApp>;
190
+ export declare const addAuthorizedOrigin: (params: {
191
+ service: Schema.Schema.Type<typeof AuthorizedOriginService>;
192
+ params: string[];
193
+ }) => Effect.Effect<{
194
+ readonly origin: {
195
+ readonly id: string;
196
+ readonly service: "generic" | "vercel" | "netlify" | "custom-scheme";
197
+ readonly params: string[];
198
+ };
199
+ }, import("./http.ts").InstantHttpError | import("effect/Cause").TimeoutException | import("@effect/platform/HttpClientError").RequestError | import("effect/ParseResult").ParseError | import("@effect/platform/HttpClientError").ResponseError, InstantHttpAuthed | CurrentApp>;
176
200
  //# sourceMappingURL=oauth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAe,MAAM,WAAW,CAAC;AAS3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C,eAAO,MAAM,uBAAuB,mEAKnC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;EAG/B,CAAC;AAMH,eAAO,MAAM,WAAW;;;;;;;;;;EAUtB,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;EAEnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAEjC,CAAC;AAOH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;iRAOtB,CAAC;AAEH,eAAO,MAAM,gBAAgB;YACnB,MAAM;kBACA,MAAM;;;;;;iRAgBpB,CAAC;AAEH,eAAO,MAAM,cAAc;YACjB,MAAM;gBACF,MAAM;gBACN,MAAM;eACP,MAAM;mBACF,MAAM;4BACG,MAAM;oBACd,MAAM;wBACF,MAAM;iBACb,MAAM;WACZ,OAAO;;;;;;;;;;;;;iRAsBd,CAAC;AAIH,eAAO,MAAM,oBAAoB,gGAiC/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;iRAc9B,CAAC;AAIH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,WAWzD,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;4WAgCnC,CAAC"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAe,MAAM,WAAW,CAAC;AAS3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C,eAAO,MAAM,uBAAuB,mEAKnC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;EAG/B,CAAC;AAMH,eAAO,MAAM,WAAW;;;;;;;;;;EAUtB,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;EAEnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAEjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AAOH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;iRAOtB,CAAC;AAEH,eAAO,MAAM,gBAAgB;YACnB,MAAM;kBACA,MAAM;;;;;;iRAgBpB,CAAC;AAEH,eAAO,MAAM,cAAc;YACjB,MAAM;gBACF,MAAM;gBACN,MAAM;eACP,MAAM;mBACF,MAAM;4BACG,MAAM;oBACd,MAAM;wBACF,MAAM;iBACb,MAAM;WACZ,OAAO;;;;;;;;;;;;;iRAsBd,CAAC;AAIH,eAAO,MAAM,oBAAoB,gGAiC/B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;iRAc9B,CAAC;AAIH,eAAO,MAAM,QAAQ,GAAI,QAAQ,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,WAWzD,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;;;4WAgCnC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;iRAajC,CAAC;AAEH,eAAO,MAAM,mBAAmB;aACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,uBAAuB,CAAC;YACnD,MAAM,EAAE;;;;;;;iRAiBhB,CAAC"}
package/dist/lib/oauth.js CHANGED
@@ -35,6 +35,9 @@ export const AddOAuthProviderResponse = Schema.Struct({
35
35
  export const AddOAuthClientResponse = Schema.Struct({
36
36
  client: OAuthClient,
37
37
  });
38
+ export const AuthorizedOriginResponse = Schema.Struct({
39
+ origin: AuthorizedOrigin,
40
+ });
38
41
  const NullableArray = (schema) => Schema.Union(Schema.Array(schema).pipe(Schema.mutable), Schema.Null).pipe(Schema.optional);
39
42
  export const AppsAuthResponse = Schema.Struct({
40
43
  authorized_redirect_origins: NullableArray(AuthorizedOrigin),
@@ -151,4 +154,23 @@ export const getClientNameAndProvider = Effect.fn(function* (providerType, opts)
151
154
  }
152
155
  return { provider, clientName };
153
156
  });
157
+ export const removeAuthorizedOrigin = Effect.fn(function* (originId) {
158
+ const http = (yield* InstantHttpAuthed).pipe(withCommand('auth origin delete'));
159
+ const { appId } = yield* CurrentApp;
160
+ return yield* http
161
+ .del(`/dash/apps/${appId}/authorized_redirect_origins/${originId}`)
162
+ .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse)));
163
+ });
164
+ export const addAuthorizedOrigin = Effect.fn(function* (params) {
165
+ const http = (yield* InstantHttpAuthed).pipe(withCommand('auth origin add'));
166
+ const { appId } = yield* CurrentApp;
167
+ return yield* http
168
+ .post(`/dash/apps/${appId}/authorized_redirect_origins`, {
169
+ body: HttpBody.unsafeJson({
170
+ service: params.service,
171
+ params: params.params,
172
+ }),
173
+ })
174
+ .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse)));
175
+ });
154
176
  //# sourceMappingURL=oauth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from './http.ts';\nimport chalk from 'chalk';\nimport {\n optOrPrompt,\n runUIEffect,\n stripFirstBlankLine,\n validateRequired,\n} from './ui.ts';\nimport { UI } from '../ui/index.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { link } from '../logging.ts';\nimport type { ClientTypeSchema } from '../commands/auth/client/add.ts';\n\nexport const AuthorizedOriginService = Schema.Literal(\n 'generic',\n 'vercel',\n 'netlify',\n 'custom-scheme',\n);\n\nexport const AuthorizedOrigin = Schema.Struct({\n id: Schema.String,\n service: AuthorizedOriginService,\n params: Schema.Array(Schema.String).pipe(Schema.mutable),\n});\n\nexport const OAuthServiceProvider = Schema.Struct({\n id: Schema.String,\n provider_name: Schema.String,\n});\n\nconst NullableString = Schema.Union(Schema.String, Schema.Null).pipe(\n Schema.optional,\n);\n\nexport const OAuthClient = Schema.Struct({\n id: Schema.String,\n client_name: Schema.String,\n client_id: NullableString,\n provider_id: Schema.String,\n authorization_endpoint: NullableString,\n token_endpoint: NullableString,\n discovery_endpoint: NullableString,\n redirect_to: NullableString,\n meta: Schema.Any.pipe(Schema.optional),\n});\n\nexport const AddOAuthProviderResponse = Schema.Struct({\n provider: OAuthServiceProvider,\n});\n\nexport const AddOAuthClientResponse = Schema.Struct({\n client: OAuthClient,\n});\n\nconst NullableArray = <A, I, R>(schema: Schema.Schema<A, I, R>) =>\n Schema.Union(Schema.Array(schema).pipe(Schema.mutable), Schema.Null).pipe(\n Schema.optional,\n );\n\nexport const AppsAuthResponse = Schema.Struct({\n authorized_redirect_origins: NullableArray(AuthorizedOrigin),\n oauth_service_providers: NullableArray(OAuthServiceProvider),\n oauth_clients: NullableArray(OAuthClient),\n});\n\nexport const getAppsAuth = Effect.fn(function* () {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .get(`/dash/apps/${targetAppId}/auth`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AppsAuthResponse)));\n});\n\nexport const addOAuthProvider = Effect.fn(function* (params: {\n appId?: string;\n providerName: string;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_service_providers`, {\n body: HttpBody.unsafeJson({\n provider_name: params.providerName,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AddOAuthProviderResponse),\n ),\n );\n});\n\nexport const addOAuthClient = Effect.fn(function* (params: {\n appId?: string;\n providerId: string;\n clientName: string;\n clientId?: string;\n clientSecret?: string;\n authorizationEndpoint?: string;\n tokenEndpoint?: string;\n discoveryEndpoint?: string;\n redirectTo?: string;\n meta?: unknown;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients`, {\n body: HttpBody.unsafeJson({\n provider_id: params.providerId,\n client_name: params.clientName,\n client_id: params.clientId,\n client_secret: params.clientSecret,\n authorization_endpoint: params.authorizationEndpoint,\n token_endpoint: params.tokenEndpoint,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\n// Due to the long prompt text, we use modifiers to manually create the prompt so we can\n// change it after submission.\nexport const promptForRedirectURI = Effect.fn(function* (\n existingValue?: string,\n) {\n if (existingValue) return existingValue;\n\n const result = yield* runUIEffect(\n new UI.TextInput({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URL (optional):\n${chalk.dim('With a custom redirect URL, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URL must forward to ${link('https://api.instantdb.com/runtime/oauth/callback')} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\nCustom redirect URL (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({\n message: `UI error for redirect URI: ${e.message}`,\n }),\n ),\n );\n\n return result === '' ? undefined : result;\n});\n\nexport const getOrCreateProvider = Effect.fn(function* (\n type: typeof ClientTypeSchema.Type,\n) {\n const auth = yield* getAppsAuth();\n const provider = auth.oauth_service_providers?.find(\n (entry) => entry.provider_name === type,\n );\n\n if (provider) {\n return { auth, provider };\n }\n\n const created = yield* addOAuthProvider({ providerName: type });\n return { auth, provider: created.provider };\n});\n\n// Returns prefix if unused; otherwise appends integers starting at 2.\n// e.g. findName('google', new Set(['google', 'google2'])) returns 'google3'.\nexport const findName = (prefix: string, used: Set<string>) => {\n if (!used.has(prefix)) {\n return prefix;\n }\n\n for (let i = 2; ; i++) {\n const candidate = `${prefix}${i}`;\n if (!used.has(candidate)) {\n return candidate;\n }\n }\n};\n\nexport const getClientNameAndProvider = Effect.fn(function* (\n providerType: typeof ClientTypeSchema.Type,\n opts: Record<string, unknown>,\n) {\n const { auth, provider } = yield* getOrCreateProvider(providerType);\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(providerType, usedClientNames);\n\n const clientName = yield* optOrPrompt(opts.name, {\n simpleName: '--name',\n required: true,\n skipIf: false,\n prompt: {\n prompt: 'Client Name:',\n defaultValue: suggestedClientName,\n placeholder: suggestedClientName,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n if (usedClientNames.has(clientName || '')) {\n return yield* BadArgsError.make({\n message: `The unique name '${clientName}' is already in use.`,\n });\n }\n return { provider, clientName };\n});\n"]}
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/lib/oauth.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpBody, HttpClientResponse } from '@effect/platform';\nimport { Effect, Schema } from 'effect';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { InstantHttpAuthed, withCommand } from './http.ts';\nimport chalk from 'chalk';\nimport {\n optOrPrompt,\n runUIEffect,\n stripFirstBlankLine,\n validateRequired,\n} from './ui.ts';\nimport { UI } from '../ui/index.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { link } from '../logging.ts';\nimport type { ClientTypeSchema } from '../commands/auth/client/add.ts';\n\nexport const AuthorizedOriginService = Schema.Literal(\n 'generic',\n 'vercel',\n 'netlify',\n 'custom-scheme',\n);\n\nexport const AuthorizedOrigin = Schema.Struct({\n id: Schema.String,\n service: AuthorizedOriginService,\n params: Schema.Array(Schema.String).pipe(Schema.mutable),\n});\n\nexport const OAuthServiceProvider = Schema.Struct({\n id: Schema.String,\n provider_name: Schema.String,\n});\n\nconst NullableString = Schema.Union(Schema.String, Schema.Null).pipe(\n Schema.optional,\n);\n\nexport const OAuthClient = Schema.Struct({\n id: Schema.String,\n client_name: Schema.String,\n client_id: NullableString,\n provider_id: Schema.String,\n authorization_endpoint: NullableString,\n token_endpoint: NullableString,\n discovery_endpoint: NullableString,\n redirect_to: NullableString,\n meta: Schema.Any.pipe(Schema.optional),\n});\n\nexport const AddOAuthProviderResponse = Schema.Struct({\n provider: OAuthServiceProvider,\n});\n\nexport const AddOAuthClientResponse = Schema.Struct({\n client: OAuthClient,\n});\n\nexport const AuthorizedOriginResponse = Schema.Struct({\n origin: AuthorizedOrigin,\n});\n\nconst NullableArray = <A, I, R>(schema: Schema.Schema<A, I, R>) =>\n Schema.Union(Schema.Array(schema).pipe(Schema.mutable), Schema.Null).pipe(\n Schema.optional,\n );\n\nexport const AppsAuthResponse = Schema.Struct({\n authorized_redirect_origins: NullableArray(AuthorizedOrigin),\n oauth_service_providers: NullableArray(OAuthServiceProvider),\n oauth_clients: NullableArray(OAuthClient),\n});\n\nexport const getAppsAuth = Effect.fn(function* () {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = (yield* CurrentApp).appId;\n\n return yield* http\n .get(`/dash/apps/${targetAppId}/auth`)\n .pipe(Effect.flatMap(HttpClientResponse.schemaBodyJson(AppsAuthResponse)));\n});\n\nexport const addOAuthProvider = Effect.fn(function* (params: {\n appId?: string;\n providerName: string;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_service_providers`, {\n body: HttpBody.unsafeJson({\n provider_name: params.providerName,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AddOAuthProviderResponse),\n ),\n );\n});\n\nexport const addOAuthClient = Effect.fn(function* (params: {\n appId?: string;\n providerId: string;\n clientName: string;\n clientId?: string;\n clientSecret?: string;\n authorizationEndpoint?: string;\n tokenEndpoint?: string;\n discoveryEndpoint?: string;\n redirectTo?: string;\n meta?: unknown;\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth'));\n const targetAppId = params.appId ?? (yield* CurrentApp).appId;\n\n return yield* http\n .post(`/dash/apps/${targetAppId}/oauth_clients`, {\n body: HttpBody.unsafeJson({\n provider_id: params.providerId,\n client_name: params.clientName,\n client_id: params.clientId,\n client_secret: params.clientSecret,\n authorization_endpoint: params.authorizationEndpoint,\n token_endpoint: params.tokenEndpoint,\n discovery_endpoint: params.discoveryEndpoint,\n redirect_to: params.redirectTo,\n meta: params.meta,\n }),\n })\n .pipe(\n Effect.flatMap(HttpClientResponse.schemaBodyJson(AddOAuthClientResponse)),\n );\n});\n\n// Due to the long prompt text, we use modifiers to manually create the prompt so we can\n// change it after submission.\nexport const promptForRedirectURI = Effect.fn(function* (\n existingValue?: string,\n) {\n if (existingValue) return existingValue;\n\n const result = yield* runUIEffect(\n new UI.TextInput({\n prompt: '',\n placeholder: 'https://yoursite.com/oauth/callback',\n modifyOutput: UI.modifiers.piped([\n (output, status) => {\n if (status === 'idle') {\n return (\n `\\nCustom redirect URL (optional):\n${chalk.dim('With a custom redirect URL, users will see \"Redirecting to yoursite.com...\" for a more branded experience.')}\n${chalk.dim(`Your URL must forward to ${link('https://api.instantdb.com/runtime/oauth/callback')} with all query parameters preserved.`)}\\n\\n` +\n stripFirstBlankLine(output)\n );\n }\n return `\\nCustom redirect URL (optional):\\n${stripFirstBlankLine(output)}`;\n },\n UI.modifiers.dimOnComplete,\n ]),\n }),\n ).pipe(\n Effect.catchTag('UIError', (e) =>\n BadArgsError.make({\n message: `UI error for redirect URI: ${e.message}`,\n }),\n ),\n );\n\n return result === '' ? undefined : result;\n});\n\nexport const getOrCreateProvider = Effect.fn(function* (\n type: typeof ClientTypeSchema.Type,\n) {\n const auth = yield* getAppsAuth();\n const provider = auth.oauth_service_providers?.find(\n (entry) => entry.provider_name === type,\n );\n\n if (provider) {\n return { auth, provider };\n }\n\n const created = yield* addOAuthProvider({ providerName: type });\n return { auth, provider: created.provider };\n});\n\n// Returns prefix if unused; otherwise appends integers starting at 2.\n// e.g. findName('google', new Set(['google', 'google2'])) returns 'google3'.\nexport const findName = (prefix: string, used: Set<string>) => {\n if (!used.has(prefix)) {\n return prefix;\n }\n\n for (let i = 2; ; i++) {\n const candidate = `${prefix}${i}`;\n if (!used.has(candidate)) {\n return candidate;\n }\n }\n};\n\nexport const getClientNameAndProvider = Effect.fn(function* (\n providerType: typeof ClientTypeSchema.Type,\n opts: Record<string, unknown>,\n) {\n const { auth, provider } = yield* getOrCreateProvider(providerType);\n const usedClientNames = new Set(\n (auth.oauth_clients ?? []).map((client) => client.client_name),\n );\n const suggestedClientName = findName(providerType, usedClientNames);\n\n const clientName = yield* optOrPrompt(opts.name, {\n simpleName: '--name',\n required: true,\n skipIf: false,\n prompt: {\n prompt: 'Client Name:',\n defaultValue: suggestedClientName,\n placeholder: suggestedClientName,\n validate: validateRequired,\n modifyOutput: UI.modifiers.piped([\n UI.modifiers.topPadding,\n UI.modifiers.dimOnComplete,\n ]),\n },\n });\n\n if (usedClientNames.has(clientName || '')) {\n return yield* BadArgsError.make({\n message: `The unique name '${clientName}' is already in use.`,\n });\n }\n return { provider, clientName };\n});\n\nexport const removeAuthorizedOrigin = Effect.fn(function* (originId: string) {\n const http = (yield* InstantHttpAuthed).pipe(\n withCommand('auth origin delete'),\n );\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .del(`/dash/apps/${appId}/authorized_redirect_origins/${originId}`)\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n\nexport const addAuthorizedOrigin = Effect.fn(function* (params: {\n service: Schema.Schema.Type<typeof AuthorizedOriginService>;\n params: string[];\n}) {\n const http = (yield* InstantHttpAuthed).pipe(withCommand('auth origin add'));\n const { appId } = yield* CurrentApp;\n\n return yield* http\n .post(`/dash/apps/${appId}/authorized_redirect_origins`, {\n body: HttpBody.unsafeJson({\n service: params.service,\n params: params.params,\n }),\n })\n .pipe(\n Effect.flatMap(\n HttpClientResponse.schemaBodyJson(AuthorizedOriginResponse),\n ),\n );\n});\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "instant-cli",
3
3
  "type": "module",
4
- "version": "1.0.19",
4
+ "version": "1.0.20",
5
5
  "description": "Instant's CLI",
6
6
  "license": "Apache-2.0",
7
7
  "homepage": "https://github.com/instantdb/instant/tree/main/client/packages/cli",
@@ -50,9 +50,9 @@
50
50
  "strip-ansi": "^7.1.2",
51
51
  "supports-hyperlinks": "^4.4.0",
52
52
  "unconfig": "^0.5.5",
53
- "@instantdb/core": "1.0.19",
54
- "@instantdb/platform": "1.0.19",
55
- "@instantdb/version": "1.0.19"
53
+ "@instantdb/core": "1.0.20",
54
+ "@instantdb/platform": "1.0.20",
55
+ "@instantdb/version": "1.0.20"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@babel/core": "^7.17.9",