@seamapi/cli 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -0
- package/bin/cli.js +19 -3
- package/bin/cli.js.map +1 -1
- package/lib/env.d.ts +29 -0
- package/lib/env.js +41 -0
- package/lib/env.js.map +1 -0
- package/lib/get-credentials.d.ts +15 -0
- package/lib/get-credentials.js +35 -0
- package/lib/get-credentials.js.map +1 -0
- package/lib/get-current-workspace-id.js +3 -4
- package/lib/get-current-workspace-id.js.map +1 -1
- package/lib/get-seam.js +21 -9
- package/lib/get-seam.js.map +1 -1
- package/lib/get-server.d.ts +5 -0
- package/lib/get-server.js +11 -1
- package/lib/get-server.js.map +1 -1
- package/lib/interact-for-login.js +2 -0
- package/lib/interact-for-login.js.map +1 -1
- package/lib/interact-for-server-selection.js +3 -0
- package/lib/interact-for-server-selection.js.map +1 -1
- package/lib/interact-for-workspace-id.js +2 -0
- package/lib/interact-for-workspace-id.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/bin/cli.ts +37 -3
- package/src/lib/env.d.ts +12 -0
- package/src/lib/env.ts +63 -0
- package/src/lib/get-credentials.ts +38 -0
- package/src/lib/get-current-workspace-id.ts +3 -5
- package/src/lib/get-seam.ts +39 -11
- package/src/lib/get-server.ts +12 -1
- package/src/lib/interact-for-login.ts +3 -0
- package/src/lib/interact-for-server-selection.ts +10 -0
- package/src/lib/interact-for-workspace-id.ts +12 -0
- package/src/lib/version.ts +1 -1
package/README.md
CHANGED
|
@@ -179,6 +179,46 @@ Missing required parameter for /locks/unlock_door: --device-id
|
|
|
179
179
|
An error exits non-zero. A request that fails reports its `error` on stdout,
|
|
180
180
|
so it can be inspected from a pipe; anything else is written to stderr only.
|
|
181
181
|
|
|
182
|
+
### Environment variables
|
|
183
|
+
|
|
184
|
+
Everything `seam login`, `seam select workspace`, and `seam select server`
|
|
185
|
+
store may be given in the environment instead:
|
|
186
|
+
|
|
187
|
+
- `SEAM_CLI_TOKEN`: a Personal Access Token or API Key,
|
|
188
|
+
- `SEAM_CLI_WORKSPACE_ID`: the workspace requests are made against,
|
|
189
|
+
- `SEAM_CLI_ENDPOINT`: the Seam API server requests are made to.
|
|
190
|
+
|
|
191
|
+
Any of them, all of them, or none of them may be set. Each one wins over the
|
|
192
|
+
corresponding stored value, which makes them useful for CI, for a single
|
|
193
|
+
command, or for working against another workspace in one shell.
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# One command against another workspace
|
|
197
|
+
SEAM_CLI_WORKSPACE_ID=$OTHER_WORKSPACE seam devices list
|
|
198
|
+
|
|
199
|
+
# No login needed: authenticate from the environment
|
|
200
|
+
export SEAM_CLI_TOKEN=$SEAM_API_KEY
|
|
201
|
+
seam devices list
|
|
202
|
+
|
|
203
|
+
# Work against a local Seam Connect instance
|
|
204
|
+
SEAM_CLI_ENDPOINT=http://localhost:3020 seam devices list
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
An API Key is scoped to a single workspace, so it needs no workspace id. A
|
|
208
|
+
Personal Access Token works across workspaces, so it needs one from either
|
|
209
|
+
`SEAM_CLI_WORKSPACE_ID` or `seam select workspace`.
|
|
210
|
+
|
|
211
|
+
The command that would store an overridden value fails rather than storing
|
|
212
|
+
something the environment ignores: `seam login` and `seam logout` while
|
|
213
|
+
`SEAM_CLI_TOKEN` is set, `seam select workspace` while
|
|
214
|
+
`SEAM_CLI_WORKSPACE_ID` is set, and `seam select server` while
|
|
215
|
+
`SEAM_CLI_ENDPOINT` is set. Unset the variable to use those commands.
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
$ SEAM_CLI_TOKEN=$SEAM_API_KEY seam login
|
|
219
|
+
Cannot log in while SEAM_CLI_TOKEN is set: it overrides what would be stored. Unset SEAM_CLI_TOKEN to log in.
|
|
220
|
+
```
|
|
221
|
+
|
|
182
222
|
## Help
|
|
183
223
|
|
|
184
224
|
Pass `--help` to any command to see what it accepts. Without a command, it
|
package/bin/cli.js
CHANGED
|
@@ -5,8 +5,10 @@ import chalk from 'chalk';
|
|
|
5
5
|
import { findLocalCommand, getCommandSpec } from '../lib/command-spec.js';
|
|
6
6
|
import { completionShells, isCompletionShell, renderCompletion, } from '../lib/completion/index.js';
|
|
7
7
|
import { getConfigStore } from '../lib/config/index.js';
|
|
8
|
+
import { assertEnvVarUnset, endpointEnvVar, EnvVarOverrideError, getEndpointFromEnv, getTokenFromEnv, getWorkspaceIdFromEnv, tokenEnvVar, workspaceIdEnvVar, } from '../lib/env.js';
|
|
8
9
|
import { getApiBlueprint } from '../lib/get-api-blueprint.js';
|
|
9
10
|
import { getCommandBlueprintDef } from '../lib/get-command-blueprint-def.js';
|
|
11
|
+
import { getToken } from '../lib/get-credentials.js';
|
|
10
12
|
import { getResponseKey } from '../lib/get-response-key.js';
|
|
11
13
|
import { getServer } from '../lib/get-server.js';
|
|
12
14
|
import { interactForActionAttemptPoll } from '../lib/interact-for-action-attempt-poll.js';
|
|
@@ -96,6 +98,8 @@ async function cli(args) {
|
|
|
96
98
|
if (args._[0] === 'config' &&
|
|
97
99
|
args._[1] === 'set' &&
|
|
98
100
|
args._[2] === 'fake-server') {
|
|
101
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server');
|
|
102
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in');
|
|
99
103
|
const randomstring = randomBytes(5).toString('hex');
|
|
100
104
|
const fakeApiUrl = `https://${randomstring}.fakeseamconnect.seam.vc`;
|
|
101
105
|
config.set('server', fakeApiUrl);
|
|
@@ -104,10 +108,10 @@ async function cli(args) {
|
|
|
104
108
|
output.info(`PAT set to use fakeseamconnect with "seam_apikey1_token"`);
|
|
105
109
|
return;
|
|
106
110
|
}
|
|
107
|
-
if (
|
|
111
|
+
if (getToken() == null &&
|
|
108
112
|
args._[0] !== 'login' &&
|
|
109
113
|
!isEqual(args._, ['select', 'server'])) {
|
|
110
|
-
output.error(`Not logged in. Please run "seam login"`);
|
|
114
|
+
output.error(`Not logged in. Please run "seam login" or set ${tokenEnvVar}`);
|
|
111
115
|
process.exitCode = 1;
|
|
112
116
|
return;
|
|
113
117
|
}
|
|
@@ -136,6 +140,15 @@ async function cli(args) {
|
|
|
136
140
|
// is reported rather than half applied.
|
|
137
141
|
assertKnownArgs(argParams, selectedCommand, ctx);
|
|
138
142
|
if (isEqual(selectedCommand, ['login'])) {
|
|
143
|
+
// Nothing is stored while the environment overrides it, so refuse before
|
|
144
|
+
// storing anything rather than part way through.
|
|
145
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in');
|
|
146
|
+
if (args['server']) {
|
|
147
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server');
|
|
148
|
+
}
|
|
149
|
+
if (args['workspace_id']) {
|
|
150
|
+
assertEnvVarUnset(workspaceIdEnvVar, getWorkspaceIdFromEnv(), 'select a workspace');
|
|
151
|
+
}
|
|
139
152
|
if (args['server']) {
|
|
140
153
|
config.set('server', args['server']);
|
|
141
154
|
config.delete('current_workspace_id');
|
|
@@ -159,6 +172,7 @@ async function cli(args) {
|
|
|
159
172
|
return;
|
|
160
173
|
}
|
|
161
174
|
else if (isEqual(selectedCommand, ['logout'])) {
|
|
175
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log out');
|
|
162
176
|
config.delete('pat');
|
|
163
177
|
output.info('Logged out!');
|
|
164
178
|
return;
|
|
@@ -175,6 +189,7 @@ async function cli(args) {
|
|
|
175
189
|
return;
|
|
176
190
|
}
|
|
177
191
|
else if (isEqual(selectedCommand, ['select', 'workspace'])) {
|
|
192
|
+
assertEnvVarUnset(workspaceIdEnvVar, getWorkspaceIdFromEnv(), 'select a workspace');
|
|
178
193
|
if (isNonInteractive) {
|
|
179
194
|
throw new NonInteractiveError('Cannot select a workspace in non-interactive mode: pass --workspace-id to "seam login"');
|
|
180
195
|
}
|
|
@@ -189,6 +204,7 @@ async function cli(args) {
|
|
|
189
204
|
}
|
|
190
205
|
}
|
|
191
206
|
else if (isEqual(selectedCommand, ['select', 'server'])) {
|
|
207
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server');
|
|
192
208
|
if (args['server']) {
|
|
193
209
|
config.set('server', args['server']);
|
|
194
210
|
config.delete('current_workspace_id');
|
|
@@ -316,7 +332,7 @@ run(process.argv.slice(2)).catch((e) => {
|
|
|
316
332
|
output.error(e.hint);
|
|
317
333
|
return;
|
|
318
334
|
}
|
|
319
|
-
if (e instanceof NonInteractiveError) {
|
|
335
|
+
if (e instanceof NonInteractiveError || e instanceof EnvVarOverrideError) {
|
|
320
336
|
output.error(chalk.red(e.message));
|
|
321
337
|
return;
|
|
322
338
|
}
|
package/bin/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/bin/cli.ts"],"names":[],"mappings":"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"}
|
package/lib/env.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credentials and the server may be given in the environment.
|
|
3
|
+
*
|
|
4
|
+
* Each variable overrides the corresponding stored value for as long as it
|
|
5
|
+
* is set, so any of them may be used per command or per shell. Commands that
|
|
6
|
+
* would store an overridden value fail instead: see {@link assertEnvVarUnset}.
|
|
7
|
+
*/
|
|
8
|
+
/** Overrides the token stored by `seam login`. */
|
|
9
|
+
export declare const tokenEnvVar = "SEAM_CLI_TOKEN";
|
|
10
|
+
/** Overrides the workspace stored by `seam select workspace`. */
|
|
11
|
+
export declare const workspaceIdEnvVar = "SEAM_CLI_WORKSPACE_ID";
|
|
12
|
+
/** Overrides the server stored by `seam select server`. */
|
|
13
|
+
export declare const endpointEnvVar = "SEAM_CLI_ENDPOINT";
|
|
14
|
+
export declare const getTokenFromEnv: () => string | null;
|
|
15
|
+
export declare const getWorkspaceIdFromEnv: () => string | null;
|
|
16
|
+
export declare const getEndpointFromEnv: () => string | null;
|
|
17
|
+
/** Reported without a stack trace: the environment is at fault, not the CLI. */
|
|
18
|
+
export declare class EnvVarOverrideError extends Error {
|
|
19
|
+
name: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Refuse to store a value the environment overrides.
|
|
23
|
+
*
|
|
24
|
+
* Storing it would have no effect while the variable is set, so a command
|
|
25
|
+
* that appears to succeed would leave the CLI using something else.
|
|
26
|
+
*
|
|
27
|
+
* @param action What the command does, e.g., `log in`.
|
|
28
|
+
*/
|
|
29
|
+
export declare const assertEnvVarUnset: (envVar: string, envValue: string | null, action: string) => void;
|
package/lib/env.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credentials and the server may be given in the environment.
|
|
3
|
+
*
|
|
4
|
+
* Each variable overrides the corresponding stored value for as long as it
|
|
5
|
+
* is set, so any of them may be used per command or per shell. Commands that
|
|
6
|
+
* would store an overridden value fail instead: see {@link assertEnvVarUnset}.
|
|
7
|
+
*/
|
|
8
|
+
/** Overrides the token stored by `seam login`. */
|
|
9
|
+
export const tokenEnvVar = 'SEAM_CLI_TOKEN';
|
|
10
|
+
/** Overrides the workspace stored by `seam select workspace`. */
|
|
11
|
+
export const workspaceIdEnvVar = 'SEAM_CLI_WORKSPACE_ID';
|
|
12
|
+
/** Overrides the server stored by `seam select server`. */
|
|
13
|
+
export const endpointEnvVar = 'SEAM_CLI_ENDPOINT';
|
|
14
|
+
export const getTokenFromEnv = () => readEnvVar(tokenEnvVar);
|
|
15
|
+
export const getWorkspaceIdFromEnv = () => readEnvVar(workspaceIdEnvVar);
|
|
16
|
+
export const getEndpointFromEnv = () => readEnvVar(endpointEnvVar);
|
|
17
|
+
/** Reported without a stack trace: the environment is at fault, not the CLI. */
|
|
18
|
+
export class EnvVarOverrideError extends Error {
|
|
19
|
+
name = 'EnvVarOverrideError';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Refuse to store a value the environment overrides.
|
|
23
|
+
*
|
|
24
|
+
* Storing it would have no effect while the variable is set, so a command
|
|
25
|
+
* that appears to succeed would leave the CLI using something else.
|
|
26
|
+
*
|
|
27
|
+
* @param action What the command does, e.g., `log in`.
|
|
28
|
+
*/
|
|
29
|
+
export const assertEnvVarUnset = (envVar, envValue, action) => {
|
|
30
|
+
if (envValue == null)
|
|
31
|
+
return;
|
|
32
|
+
throw new EnvVarOverrideError(`Cannot ${action} while ${envVar} is set: it overrides what would be stored. Unset ${envVar} to ${action}.`);
|
|
33
|
+
};
|
|
34
|
+
const readEnvVar = (envVar) => {
|
|
35
|
+
const value = process.env[envVar];
|
|
36
|
+
if (value == null)
|
|
37
|
+
return null;
|
|
38
|
+
const trimmedValue = value.trim();
|
|
39
|
+
return trimmedValue === '' ? null : trimmedValue;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=env.js.map
|
package/lib/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/lib/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAA;AAE3C,iEAAiE;AACjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AAExD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAA;AAMjD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAkB,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AAE3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAkB,EAAE,CACvD,UAAU,CAAC,iBAAiB,CAAC,CAAA;AAE/B,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAkB,EAAE,CACpD,UAAU,CAAC,cAAc,CAAC,CAAA;AAE5B,gFAAgF;AAChF,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,GAAG,qBAAqB,CAAA;CACtC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAAc,EACd,QAAuB,EACvB,MAAc,EACR,EAAE;IACR,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAM;IAE5B,MAAM,IAAI,mBAAmB,CAC3B,UAAU,MAAM,UAAU,MAAM,qDAAqD,MAAM,OAAO,MAAM,GAAG,CAC5G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,MAAqB,EAAiB,EAAE;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAEjC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAA;IAE9B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAEjC,OAAO,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAA;AAClD,CAAC,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The token used to authenticate requests.
|
|
3
|
+
*
|
|
4
|
+
* `SEAM_CLI_TOKEN` wins over the token stored by `seam login`,
|
|
5
|
+
* so a token may be given per command or per shell without logging in.
|
|
6
|
+
*/
|
|
7
|
+
export declare const getToken: () => string | null;
|
|
8
|
+
/**
|
|
9
|
+
* The workspace requests are made against.
|
|
10
|
+
*
|
|
11
|
+
* `SEAM_CLI_WORKSPACE_ID` wins over the workspace stored by
|
|
12
|
+
* `seam select workspace`. Returns `null` when neither is set: a token
|
|
13
|
+
* scoped to a single workspace does not need one.
|
|
14
|
+
*/
|
|
15
|
+
export declare const getWorkspaceId: () => string | null;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { getConfigStore } from './config/index.js';
|
|
2
|
+
import { getTokenFromEnv, getWorkspaceIdFromEnv } from './env.js';
|
|
3
|
+
import { getServer } from './get-server.js';
|
|
4
|
+
/**
|
|
5
|
+
* The token used to authenticate requests.
|
|
6
|
+
*
|
|
7
|
+
* `SEAM_CLI_TOKEN` wins over the token stored by `seam login`,
|
|
8
|
+
* so a token may be given per command or per shell without logging in.
|
|
9
|
+
*/
|
|
10
|
+
export const getToken = () => {
|
|
11
|
+
const token = getTokenFromEnv();
|
|
12
|
+
if (token != null)
|
|
13
|
+
return token;
|
|
14
|
+
return readString(getConfigStore().get(`${getServer()}.pat`));
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The workspace requests are made against.
|
|
18
|
+
*
|
|
19
|
+
* `SEAM_CLI_WORKSPACE_ID` wins over the workspace stored by
|
|
20
|
+
* `seam select workspace`. Returns `null` when neither is set: a token
|
|
21
|
+
* scoped to a single workspace does not need one.
|
|
22
|
+
*/
|
|
23
|
+
export const getWorkspaceId = () => {
|
|
24
|
+
const workspaceId = getWorkspaceIdFromEnv();
|
|
25
|
+
if (workspaceId != null)
|
|
26
|
+
return workspaceId;
|
|
27
|
+
return readString(getConfigStore().get('current_workspace_id'));
|
|
28
|
+
};
|
|
29
|
+
const readString = (value) => {
|
|
30
|
+
if (typeof value !== 'string')
|
|
31
|
+
return null;
|
|
32
|
+
const trimmedValue = value.trim();
|
|
33
|
+
return trimmedValue === '' ? null : trimmedValue;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=get-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-credentials.js","sourceRoot":"","sources":["../src/lib/get-credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAkB,EAAE;IAC1C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAA;IAC/B,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAA;IAE/B,OAAO,UAAU,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;AAC/D,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAkB,EAAE;IAChD,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAA;IAC3C,IAAI,WAAW,IAAI,IAAI;QAAE,OAAO,WAAW,CAAA;IAE3C,OAAO,UAAU,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;AACjE,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,KAAc,EAAiB,EAAE;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAEjC,OAAO,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAA;AAClD,CAAC,CAAA"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getWorkspaceId } from './get-credentials.js';
|
|
2
2
|
import { interactForWorkspaceId } from './interact-for-workspace-id.js';
|
|
3
3
|
export const getCurrentWorkspaceId = async () => {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
if (typeof currentWorkspaceId === 'string')
|
|
4
|
+
const currentWorkspaceId = getWorkspaceId();
|
|
5
|
+
if (currentWorkspaceId != null)
|
|
7
6
|
return currentWorkspaceId;
|
|
8
7
|
return await interactForWorkspaceId();
|
|
9
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-current-workspace-id.js","sourceRoot":"","sources":["../src/lib/get-current-workspace-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"get-current-workspace-id.js","sourceRoot":"","sources":["../src/lib/get-current-workspace-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAAqB,EAAE;IAC/D,MAAM,kBAAkB,GAAG,cAAc,EAAE,CAAA;IAC3C,IAAI,kBAAkB,IAAI,IAAI;QAAE,OAAO,kBAAkB,CAAA;IAEzD,OAAO,MAAM,sBAAsB,EAAE,CAAA;AACvC,CAAC,CAAA"}
|
package/lib/get-seam.js
CHANGED
|
@@ -1,26 +1,38 @@
|
|
|
1
1
|
import { isConsoleSessionToken, isPersonalAccessToken, SeamHttp, SeamHttpWithoutWorkspace, } from '@seamapi/http/connect';
|
|
2
|
-
import {
|
|
2
|
+
import { tokenEnvVar, workspaceIdEnvVar } from './env.js';
|
|
3
|
+
import { getToken, getWorkspaceId } from './get-credentials.js';
|
|
3
4
|
import { getServer } from './get-server.js';
|
|
4
5
|
export const getSeam = async () => {
|
|
5
|
-
const
|
|
6
|
-
const token = config.get(`${getServer()}.pat`);
|
|
7
|
-
const workspaceId = config.get('current_workspace_id');
|
|
6
|
+
const token = getRequiredToken();
|
|
8
7
|
const options = { endpoint: getServer() };
|
|
9
8
|
if (isPersonalAccessToken(token)) {
|
|
10
|
-
return SeamHttp.fromPersonalAccessToken(token,
|
|
9
|
+
return SeamHttp.fromPersonalAccessToken(token, getRequiredWorkspaceId(), options);
|
|
11
10
|
}
|
|
12
11
|
if (isConsoleSessionToken(token)) {
|
|
13
|
-
return SeamHttp.fromConsoleSessionToken(token,
|
|
12
|
+
return SeamHttp.fromConsoleSessionToken(token, getRequiredWorkspaceId(), options);
|
|
14
13
|
}
|
|
15
14
|
return SeamHttp.fromApiKey(token, options);
|
|
16
15
|
};
|
|
17
16
|
export const getSeamMultiWorkspace = async () => {
|
|
18
|
-
const
|
|
19
|
-
const token = config.get(`${getServer()}.pat`);
|
|
17
|
+
const token = getRequiredToken();
|
|
20
18
|
const options = { endpoint: getServer() };
|
|
21
19
|
if (isPersonalAccessToken(token)) {
|
|
22
20
|
return SeamHttpWithoutWorkspace.fromPersonalAccessToken(token, options);
|
|
23
21
|
}
|
|
24
|
-
return getSeam();
|
|
22
|
+
return await getSeam();
|
|
23
|
+
};
|
|
24
|
+
const getRequiredToken = () => {
|
|
25
|
+
const token = getToken();
|
|
26
|
+
if (token == null) {
|
|
27
|
+
throw new Error(`Not logged in: run "seam login" or set the ${tokenEnvVar} environment variable`);
|
|
28
|
+
}
|
|
29
|
+
return token;
|
|
30
|
+
};
|
|
31
|
+
const getRequiredWorkspaceId = () => {
|
|
32
|
+
const workspaceId = getWorkspaceId();
|
|
33
|
+
if (workspaceId == null) {
|
|
34
|
+
throw new Error(`No workspace selected: run "seam select workspace" or set the ${workspaceIdEnvVar} environment variable`);
|
|
35
|
+
}
|
|
36
|
+
return workspaceId;
|
|
25
37
|
};
|
|
26
38
|
//# sourceMappingURL=get-seam.js.map
|
package/lib/get-seam.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-seam.js","sourceRoot":"","sources":["../src/lib/get-seam.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACR,wBAAwB,GACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"get-seam.js","sourceRoot":"","sources":["../src/lib/get-seam.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,QAAQ,EACR,wBAAwB,GACzB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,IAAuB,EAAE;IACnD,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAA;IAEhC,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAA;IAEzC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,uBAAuB,CACrC,KAAK,EACL,sBAAsB,EAAE,EACxB,OAAO,CACR,CAAA;IACH,CAAC;IAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,uBAAuB,CACrC,KAAK,EACL,sBAAsB,EAAE,EACxB,OAAO,CACR,CAAA;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAExC,EAAE;IACF,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAA;IAChC,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAA;IAEzC,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,wBAAwB,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,MAAM,OAAO,EAAE,CAAA;AACxB,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,GAAW,EAAE;IACpC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,8CAA8C,WAAW,uBAAuB,CACjF,CAAA;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,sBAAsB,GAAG,GAAW,EAAE;IAC1C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,iEAAiE,iBAAiB,uBAAuB,CAC1G,CAAA;IACH,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA"}
|
package/lib/get-server.d.ts
CHANGED
package/lib/get-server.js
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { getConfigStore } from './config/index.js';
|
|
2
|
+
import { getEndpointFromEnv } from './env.js';
|
|
3
|
+
const defaultServer = 'https://connect.getseam.com';
|
|
4
|
+
/**
|
|
5
|
+
* The Seam API server requests are made against.
|
|
6
|
+
*
|
|
7
|
+
* `SEAM_CLI_ENDPOINT` wins over the server stored by `seam select server`.
|
|
8
|
+
*/
|
|
2
9
|
export const getServer = () => {
|
|
10
|
+
const endpoint = getEndpointFromEnv();
|
|
11
|
+
if (endpoint != null)
|
|
12
|
+
return endpoint;
|
|
3
13
|
const config = getConfigStore();
|
|
4
14
|
const server = config.get('server');
|
|
5
|
-
return typeof server === 'string' ? server :
|
|
15
|
+
return typeof server === 'string' ? server : defaultServer;
|
|
6
16
|
};
|
|
7
17
|
//# sourceMappingURL=get-server.js.map
|
package/lib/get-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-server.js","sourceRoot":"","sources":["../src/lib/get-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"get-server.js","sourceRoot":"","sources":["../src/lib/get-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,aAAa,GAAG,6BAA6B,CAAA;AAEnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAW,EAAE;IACpC,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAA;IACrC,IAAI,QAAQ,IAAI,IAAI;QAAE,OAAO,QAAQ,CAAA;IAErC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAEnC,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAA;AAC5D,CAAC,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isApiKey, isPersonalAccessToken } from '@seamapi/http/connect';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { getConfigStore } from './config/index.js';
|
|
4
|
+
import { assertEnvVarUnset, getTokenFromEnv, tokenEnvVar } from './env.js';
|
|
4
5
|
import { getServer } from './get-server.js';
|
|
5
6
|
import { interactForWorkspaceId } from './interact-for-workspace-id.js';
|
|
6
7
|
import { getOutput } from './output/get-output.js';
|
|
@@ -10,6 +11,7 @@ import { validateToken } from './validate-token.js';
|
|
|
10
11
|
export const interactForLogin = async () => {
|
|
11
12
|
const config = await getConfigStore();
|
|
12
13
|
const output = getOutput();
|
|
14
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in');
|
|
13
15
|
if (getServer().includes('localhost')) {
|
|
14
16
|
output.info(`You're using a local Seam Connect instance, you can enter the API Key to your local user, you can create a new user from:\n\n${getServer()}/admin/create_user_with_api_key`);
|
|
15
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interact-for-login.js","sourceRoot":"","sources":["../src/lib/interact-for-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,IAAI,SAAS,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CACT,gIAAgI,SAAS,EAAE,iCAAiC,CAC7K,CAAA;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CACT,+KAA+K,CAChL,CAAA;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,IAAI,CACR,mEAAmE,CACpE,CACF,CAAA;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC;QAC3B,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,wBAAwB;KAClC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,CAAA;IAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACvC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;AAC1D,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"interact-for-login.js","sourceRoot":"","sources":["../src/lib/interact-for-login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACvE,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IACzC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,iBAAiB,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAA;IAE3D,IAAI,SAAS,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CACT,gIAAgI,SAAS,EAAE,iCAAiC,CAC7K,CAAA;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CACT,+KAA+K,CAChL,CAAA;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,IAAI,CACR,mEAAmE,CACpE,CACF,CAAA;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC;QAC3B,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,wBAAwB;KAClC,CAAC,CAAA;IACF,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,CAAA;IAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;IAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;SAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IACxE,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACvC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;AAC1D,CAAC,CAAA"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { randomBytes } from 'node:crypto';
|
|
2
2
|
import { getConfigStore } from './config/index.js';
|
|
3
|
+
import { assertEnvVarUnset, endpointEnvVar, getEndpointFromEnv, getTokenFromEnv, tokenEnvVar, } from './env.js';
|
|
3
4
|
import { getServer } from './get-server.js';
|
|
4
5
|
import { getOutput } from './output/get-output.js';
|
|
5
6
|
import { prompt } from './util/prompt.js';
|
|
6
7
|
export async function interactForServerSelection() {
|
|
8
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server');
|
|
7
9
|
const servers = [
|
|
8
10
|
'http://localhost:3020',
|
|
9
11
|
'https://connect.getseam.com',
|
|
@@ -30,6 +32,7 @@ export async function interactForServerSelection() {
|
|
|
30
32
|
if (userUrlSeed.trim().length === 0) {
|
|
31
33
|
userUrlSeed = randomBytes(5).toString('hex');
|
|
32
34
|
}
|
|
35
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in');
|
|
33
36
|
config.set('server', `https://${userUrlSeed}.fakeseamconnect.seam.vc`);
|
|
34
37
|
config.set(`${getServer()}.pat`, `seam_apikey1_token`);
|
|
35
38
|
output.info(`PAT set to use fakeseamconnect with "seam_apikey1_token"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interact-for-server-selection.js","sourceRoot":"","sources":["../src/lib/interact-for-server-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,MAAM,OAAO,GAAG;QACd,uBAAuB;QACvB,6BAA6B;QAC7B,iCAAiC;KAClC,CAAA;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;QAC9B;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SACrE;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC;YACjC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EACL,sFAAsF;aACzF;SACF,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,WAAW,0BAA0B,CAAC,CAAA;QACtE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAA;QACtD,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACzE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9B,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;IACrC,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;AACxC,CAAC"}
|
|
1
|
+
{"version":3,"file":"interact-for-server-selection.js","sourceRoot":"","sources":["../src/lib/interact-for-server-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,WAAW,GACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,CAAC,CAAA;IAE1E,MAAM,OAAO,GAAG;QACd,uBAAuB;QACvB,6BAA6B;QAC7B,iCAAiC;KAClC,CAAA;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;QAC9B;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SACrE;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC;YACjC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EACL,sFAAsF;aACzF;SACF,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QACD,iBAAiB,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,WAAW,0BAA0B,CAAC,CAAA;QACtE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAA;QACtD,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACzE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9B,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;IACrC,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { SeamHttpWithoutWorkspace } from '@seamapi/http/connect';
|
|
2
2
|
import { getConfigStore } from './config/index.js';
|
|
3
|
+
import { assertEnvVarUnset, getWorkspaceIdFromEnv, workspaceIdEnvVar, } from './env.js';
|
|
3
4
|
import { getSeamMultiWorkspace } from './get-seam.js';
|
|
4
5
|
import { getServer } from './get-server.js';
|
|
5
6
|
import { prompt } from './util/prompt.js';
|
|
6
7
|
import { withLoading } from './util/with-loading.js';
|
|
7
8
|
export const interactForWorkspaceId = async (personalAccessToken) => {
|
|
8
9
|
const config = getConfigStore();
|
|
10
|
+
assertEnvVarUnset(workspaceIdEnvVar, getWorkspaceIdFromEnv(), 'select a workspace');
|
|
9
11
|
const seam = personalAccessToken
|
|
10
12
|
? SeamHttpWithoutWorkspace.fromPersonalAccessToken(personalAccessToken, {
|
|
11
13
|
endpoint: getServer(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interact-for-workspace-id.js","sourceRoot":"","sources":["../src/lib/interact-for-workspace-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,mBAA4B,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"interact-for-workspace-id.js","sourceRoot":"","sources":["../src/lib/interact-for-workspace-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,mBAA4B,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,iBAAiB,CACf,iBAAiB,EACjB,qBAAqB,EAAE,EACvB,oBAAoB,CACrB,CAAA;IAED,MAAM,IAAI,GAAG,mBAAmB;QAC9B,CAAC,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,mBAAmB,EAAE;YACpE,QAAQ,EAAE,SAAS,EAAE;SACtB,CAAC;QACJ,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAA;IAEjC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAClE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CACvB,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC;QACnC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,CAAC;YAC3C,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,KAAK,EAAE,SAAS,CAAC,YAAY;YAC7B,WAAW,EAAE,SAAS,CAAC,YAAY;SACpC,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAA;QAC/C,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC3B,CAAC,CAAA"}
|
package/lib/version.d.ts
CHANGED
package/lib/version.js
CHANGED
package/package.json
CHANGED
package/src/bin/cli.ts
CHANGED
|
@@ -12,8 +12,19 @@ import {
|
|
|
12
12
|
renderCompletion,
|
|
13
13
|
} from 'lib/completion/index.js'
|
|
14
14
|
import { getConfigStore } from 'lib/config/index.js'
|
|
15
|
+
import {
|
|
16
|
+
assertEnvVarUnset,
|
|
17
|
+
endpointEnvVar,
|
|
18
|
+
EnvVarOverrideError,
|
|
19
|
+
getEndpointFromEnv,
|
|
20
|
+
getTokenFromEnv,
|
|
21
|
+
getWorkspaceIdFromEnv,
|
|
22
|
+
tokenEnvVar,
|
|
23
|
+
workspaceIdEnvVar,
|
|
24
|
+
} from 'lib/env.js'
|
|
15
25
|
import { getApiBlueprint } from 'lib/get-api-blueprint.js'
|
|
16
26
|
import { getCommandBlueprintDef } from 'lib/get-command-blueprint-def.js'
|
|
27
|
+
import { getToken } from 'lib/get-credentials.js'
|
|
17
28
|
import { getResponseKey } from 'lib/get-response-key.js'
|
|
18
29
|
import { getServer } from 'lib/get-server.js'
|
|
19
30
|
import { interactForActionAttemptPoll } from 'lib/interact-for-action-attempt-poll.js'
|
|
@@ -129,6 +140,9 @@ async function cli(args: ParsedArgs) {
|
|
|
129
140
|
args._[1] === 'set' &&
|
|
130
141
|
args._[2] === 'fake-server'
|
|
131
142
|
) {
|
|
143
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server')
|
|
144
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in')
|
|
145
|
+
|
|
132
146
|
const randomstring = randomBytes(5).toString('hex')
|
|
133
147
|
const fakeApiUrl = `https://${randomstring}.fakeseamconnect.seam.vc`
|
|
134
148
|
|
|
@@ -141,11 +155,11 @@ async function cli(args: ParsedArgs) {
|
|
|
141
155
|
}
|
|
142
156
|
|
|
143
157
|
if (
|
|
144
|
-
|
|
158
|
+
getToken() == null &&
|
|
145
159
|
args._[0] !== 'login' &&
|
|
146
160
|
!isEqual(args._, ['select', 'server'])
|
|
147
161
|
) {
|
|
148
|
-
output.error(`Not logged in. Please run "seam login"`)
|
|
162
|
+
output.error(`Not logged in. Please run "seam login" or set ${tokenEnvVar}`)
|
|
149
163
|
process.exitCode = 1
|
|
150
164
|
return
|
|
151
165
|
}
|
|
@@ -185,6 +199,19 @@ async function cli(args: ParsedArgs) {
|
|
|
185
199
|
assertKnownArgs(argParams, selectedCommand, ctx)
|
|
186
200
|
|
|
187
201
|
if (isEqual(selectedCommand, ['login'])) {
|
|
202
|
+
// Nothing is stored while the environment overrides it, so refuse before
|
|
203
|
+
// storing anything rather than part way through.
|
|
204
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in')
|
|
205
|
+
if (args['server']) {
|
|
206
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server')
|
|
207
|
+
}
|
|
208
|
+
if (args['workspace_id']) {
|
|
209
|
+
assertEnvVarUnset(
|
|
210
|
+
workspaceIdEnvVar,
|
|
211
|
+
getWorkspaceIdFromEnv(),
|
|
212
|
+
'select a workspace',
|
|
213
|
+
)
|
|
214
|
+
}
|
|
188
215
|
if (args['server']) {
|
|
189
216
|
config.set('server', args['server'])
|
|
190
217
|
config.delete('current_workspace_id')
|
|
@@ -209,6 +236,7 @@ async function cli(args: ParsedArgs) {
|
|
|
209
236
|
await interactForLogin()
|
|
210
237
|
return
|
|
211
238
|
} else if (isEqual(selectedCommand, ['logout'])) {
|
|
239
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log out')
|
|
212
240
|
config.delete('pat')
|
|
213
241
|
output.info('Logged out!')
|
|
214
242
|
return
|
|
@@ -224,6 +252,11 @@ async function cli(args: ParsedArgs) {
|
|
|
224
252
|
await interactForUseRemoteApiDefs()
|
|
225
253
|
return
|
|
226
254
|
} else if (isEqual(selectedCommand, ['select', 'workspace'])) {
|
|
255
|
+
assertEnvVarUnset(
|
|
256
|
+
workspaceIdEnvVar,
|
|
257
|
+
getWorkspaceIdFromEnv(),
|
|
258
|
+
'select a workspace',
|
|
259
|
+
)
|
|
227
260
|
if (isNonInteractive) {
|
|
228
261
|
throw new NonInteractiveError(
|
|
229
262
|
'Cannot select a workspace in non-interactive mode: pass --workspace-id to "seam login"',
|
|
@@ -238,6 +271,7 @@ async function cli(args: ParsedArgs) {
|
|
|
238
271
|
commandParams['since'] = date.toISOString()
|
|
239
272
|
}
|
|
240
273
|
} else if (isEqual(selectedCommand, ['select', 'server'])) {
|
|
274
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server')
|
|
241
275
|
if (args['server']) {
|
|
242
276
|
config.set('server', args['server'])
|
|
243
277
|
config.delete('current_workspace_id')
|
|
@@ -419,7 +453,7 @@ run(process.argv.slice(2)).catch((e: unknown) => {
|
|
|
419
453
|
return
|
|
420
454
|
}
|
|
421
455
|
|
|
422
|
-
if (e instanceof NonInteractiveError) {
|
|
456
|
+
if (e instanceof NonInteractiveError || e instanceof EnvVarOverrideError) {
|
|
423
457
|
output.error(chalk.red(e.message))
|
|
424
458
|
return
|
|
425
459
|
}
|
package/src/lib/env.d.ts
ADDED
package/src/lib/env.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credentials and the server may be given in the environment.
|
|
3
|
+
*
|
|
4
|
+
* Each variable overrides the corresponding stored value for as long as it
|
|
5
|
+
* is set, so any of them may be used per command or per shell. Commands that
|
|
6
|
+
* would store an overridden value fail instead: see {@link assertEnvVarUnset}.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Overrides the token stored by `seam login`. */
|
|
10
|
+
export const tokenEnvVar = 'SEAM_CLI_TOKEN'
|
|
11
|
+
|
|
12
|
+
/** Overrides the workspace stored by `seam select workspace`. */
|
|
13
|
+
export const workspaceIdEnvVar = 'SEAM_CLI_WORKSPACE_ID'
|
|
14
|
+
|
|
15
|
+
/** Overrides the server stored by `seam select server`. */
|
|
16
|
+
export const endpointEnvVar = 'SEAM_CLI_ENDPOINT'
|
|
17
|
+
|
|
18
|
+
/** Every variable read here is declared on `ProcessEnv` in `env.d.ts`. */
|
|
19
|
+
type SeamCliEnvVar =
|
|
20
|
+
typeof endpointEnvVar | typeof tokenEnvVar | typeof workspaceIdEnvVar
|
|
21
|
+
|
|
22
|
+
export const getTokenFromEnv = (): string | null => readEnvVar(tokenEnvVar)
|
|
23
|
+
|
|
24
|
+
export const getWorkspaceIdFromEnv = (): string | null =>
|
|
25
|
+
readEnvVar(workspaceIdEnvVar)
|
|
26
|
+
|
|
27
|
+
export const getEndpointFromEnv = (): string | null =>
|
|
28
|
+
readEnvVar(endpointEnvVar)
|
|
29
|
+
|
|
30
|
+
/** Reported without a stack trace: the environment is at fault, not the CLI. */
|
|
31
|
+
export class EnvVarOverrideError extends Error {
|
|
32
|
+
override name = 'EnvVarOverrideError'
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Refuse to store a value the environment overrides.
|
|
37
|
+
*
|
|
38
|
+
* Storing it would have no effect while the variable is set, so a command
|
|
39
|
+
* that appears to succeed would leave the CLI using something else.
|
|
40
|
+
*
|
|
41
|
+
* @param action What the command does, e.g., `log in`.
|
|
42
|
+
*/
|
|
43
|
+
export const assertEnvVarUnset = (
|
|
44
|
+
envVar: string,
|
|
45
|
+
envValue: string | null,
|
|
46
|
+
action: string,
|
|
47
|
+
): void => {
|
|
48
|
+
if (envValue == null) return
|
|
49
|
+
|
|
50
|
+
throw new EnvVarOverrideError(
|
|
51
|
+
`Cannot ${action} while ${envVar} is set: it overrides what would be stored. Unset ${envVar} to ${action}.`,
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const readEnvVar = (envVar: SeamCliEnvVar): string | null => {
|
|
56
|
+
const value = process.env[envVar]
|
|
57
|
+
|
|
58
|
+
if (value == null) return null
|
|
59
|
+
|
|
60
|
+
const trimmedValue = value.trim()
|
|
61
|
+
|
|
62
|
+
return trimmedValue === '' ? null : trimmedValue
|
|
63
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { getConfigStore } from './config/index.js'
|
|
2
|
+
import { getTokenFromEnv, getWorkspaceIdFromEnv } from './env.js'
|
|
3
|
+
import { getServer } from './get-server.js'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The token used to authenticate requests.
|
|
7
|
+
*
|
|
8
|
+
* `SEAM_CLI_TOKEN` wins over the token stored by `seam login`,
|
|
9
|
+
* so a token may be given per command or per shell without logging in.
|
|
10
|
+
*/
|
|
11
|
+
export const getToken = (): string | null => {
|
|
12
|
+
const token = getTokenFromEnv()
|
|
13
|
+
if (token != null) return token
|
|
14
|
+
|
|
15
|
+
return readString(getConfigStore().get(`${getServer()}.pat`))
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The workspace requests are made against.
|
|
20
|
+
*
|
|
21
|
+
* `SEAM_CLI_WORKSPACE_ID` wins over the workspace stored by
|
|
22
|
+
* `seam select workspace`. Returns `null` when neither is set: a token
|
|
23
|
+
* scoped to a single workspace does not need one.
|
|
24
|
+
*/
|
|
25
|
+
export const getWorkspaceId = (): string | null => {
|
|
26
|
+
const workspaceId = getWorkspaceIdFromEnv()
|
|
27
|
+
if (workspaceId != null) return workspaceId
|
|
28
|
+
|
|
29
|
+
return readString(getConfigStore().get('current_workspace_id'))
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const readString = (value: unknown): string | null => {
|
|
33
|
+
if (typeof value !== 'string') return null
|
|
34
|
+
|
|
35
|
+
const trimmedValue = value.trim()
|
|
36
|
+
|
|
37
|
+
return trimmedValue === '' ? null : trimmedValue
|
|
38
|
+
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getWorkspaceId } from './get-credentials.js'
|
|
2
2
|
import { interactForWorkspaceId } from './interact-for-workspace-id.js'
|
|
3
3
|
|
|
4
4
|
export const getCurrentWorkspaceId = async (): Promise<string> => {
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const currentWorkspaceId = configStore.get('current_workspace_id')
|
|
8
|
-
if (typeof currentWorkspaceId === 'string') return currentWorkspaceId
|
|
5
|
+
const currentWorkspaceId = getWorkspaceId()
|
|
6
|
+
if (currentWorkspaceId != null) return currentWorkspaceId
|
|
9
7
|
|
|
10
8
|
return await interactForWorkspaceId()
|
|
11
9
|
}
|
package/src/lib/get-seam.ts
CHANGED
|
@@ -5,24 +5,29 @@ import {
|
|
|
5
5
|
SeamHttpWithoutWorkspace,
|
|
6
6
|
} from '@seamapi/http/connect'
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { tokenEnvVar, workspaceIdEnvVar } from './env.js'
|
|
9
|
+
import { getToken, getWorkspaceId } from './get-credentials.js'
|
|
9
10
|
import { getServer } from './get-server.js'
|
|
10
11
|
|
|
11
12
|
export const getSeam = async (): Promise<SeamHttp> => {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
const token = config.get(`${getServer()}.pat`) as string
|
|
15
|
-
|
|
16
|
-
const workspaceId = config.get('current_workspace_id') as string
|
|
13
|
+
const token = getRequiredToken()
|
|
17
14
|
|
|
18
15
|
const options = { endpoint: getServer() }
|
|
19
16
|
|
|
20
17
|
if (isPersonalAccessToken(token)) {
|
|
21
|
-
return SeamHttp.fromPersonalAccessToken(
|
|
18
|
+
return SeamHttp.fromPersonalAccessToken(
|
|
19
|
+
token,
|
|
20
|
+
getRequiredWorkspaceId(),
|
|
21
|
+
options,
|
|
22
|
+
)
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
if (isConsoleSessionToken(token)) {
|
|
25
|
-
return SeamHttp.fromConsoleSessionToken(
|
|
26
|
+
return SeamHttp.fromConsoleSessionToken(
|
|
27
|
+
token,
|
|
28
|
+
getRequiredWorkspaceId(),
|
|
29
|
+
options,
|
|
30
|
+
)
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
return SeamHttp.fromApiKey(token, options)
|
|
@@ -31,13 +36,36 @@ export const getSeam = async (): Promise<SeamHttp> => {
|
|
|
31
36
|
export const getSeamMultiWorkspace = async (): Promise<
|
|
32
37
|
SeamHttpWithoutWorkspace | SeamHttp
|
|
33
38
|
> => {
|
|
34
|
-
const
|
|
35
|
-
const token = config.get(`${getServer()}.pat`) as string
|
|
39
|
+
const token = getRequiredToken()
|
|
36
40
|
const options = { endpoint: getServer() }
|
|
37
41
|
|
|
38
42
|
if (isPersonalAccessToken(token)) {
|
|
39
43
|
return SeamHttpWithoutWorkspace.fromPersonalAccessToken(token, options)
|
|
40
44
|
}
|
|
41
45
|
|
|
42
|
-
return getSeam()
|
|
46
|
+
return await getSeam()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const getRequiredToken = (): string => {
|
|
50
|
+
const token = getToken()
|
|
51
|
+
|
|
52
|
+
if (token == null) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
`Not logged in: run "seam login" or set the ${tokenEnvVar} environment variable`,
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return token
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const getRequiredWorkspaceId = (): string => {
|
|
62
|
+
const workspaceId = getWorkspaceId()
|
|
63
|
+
|
|
64
|
+
if (workspaceId == null) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
`No workspace selected: run "seam select workspace" or set the ${workspaceIdEnvVar} environment variable`,
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return workspaceId
|
|
43
71
|
}
|
package/src/lib/get-server.ts
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
1
|
import { getConfigStore } from './config/index.js'
|
|
2
|
+
import { getEndpointFromEnv } from './env.js'
|
|
2
3
|
|
|
4
|
+
const defaultServer = 'https://connect.getseam.com'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The Seam API server requests are made against.
|
|
8
|
+
*
|
|
9
|
+
* `SEAM_CLI_ENDPOINT` wins over the server stored by `seam select server`.
|
|
10
|
+
*/
|
|
3
11
|
export const getServer = (): string => {
|
|
12
|
+
const endpoint = getEndpointFromEnv()
|
|
13
|
+
if (endpoint != null) return endpoint
|
|
14
|
+
|
|
4
15
|
const config = getConfigStore()
|
|
5
16
|
|
|
6
17
|
const server = config.get('server')
|
|
7
18
|
|
|
8
|
-
return typeof server === 'string' ? server :
|
|
19
|
+
return typeof server === 'string' ? server : defaultServer
|
|
9
20
|
}
|
|
@@ -2,6 +2,7 @@ import { isApiKey, isPersonalAccessToken } from '@seamapi/http/connect'
|
|
|
2
2
|
import chalk from 'chalk'
|
|
3
3
|
|
|
4
4
|
import { getConfigStore } from './config/index.js'
|
|
5
|
+
import { assertEnvVarUnset, getTokenFromEnv, tokenEnvVar } from './env.js'
|
|
5
6
|
import { getServer } from './get-server.js'
|
|
6
7
|
import { interactForWorkspaceId } from './interact-for-workspace-id.js'
|
|
7
8
|
import { getOutput } from './output/get-output.js'
|
|
@@ -13,6 +14,8 @@ export const interactForLogin = async () => {
|
|
|
13
14
|
const config = await getConfigStore()
|
|
14
15
|
const output = getOutput()
|
|
15
16
|
|
|
17
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in')
|
|
18
|
+
|
|
16
19
|
if (getServer().includes('localhost')) {
|
|
17
20
|
output.info(
|
|
18
21
|
`You're using a local Seam Connect instance, you can enter the API Key to your local user, you can create a new user from:\n\n${getServer()}/admin/create_user_with_api_key`,
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { randomBytes } from 'node:crypto'
|
|
2
2
|
|
|
3
3
|
import { getConfigStore } from './config/index.js'
|
|
4
|
+
import {
|
|
5
|
+
assertEnvVarUnset,
|
|
6
|
+
endpointEnvVar,
|
|
7
|
+
getEndpointFromEnv,
|
|
8
|
+
getTokenFromEnv,
|
|
9
|
+
tokenEnvVar,
|
|
10
|
+
} from './env.js'
|
|
4
11
|
import { getServer } from './get-server.js'
|
|
5
12
|
import { getOutput } from './output/get-output.js'
|
|
6
13
|
import { prompt } from './util/prompt.js'
|
|
7
14
|
|
|
8
15
|
export async function interactForServerSelection() {
|
|
16
|
+
assertEnvVarUnset(endpointEnvVar, getEndpointFromEnv(), 'select a server')
|
|
17
|
+
|
|
9
18
|
const servers = [
|
|
10
19
|
'http://localhost:3020',
|
|
11
20
|
'https://connect.getseam.com',
|
|
@@ -36,6 +45,7 @@ export async function interactForServerSelection() {
|
|
|
36
45
|
if (userUrlSeed.trim().length === 0) {
|
|
37
46
|
userUrlSeed = randomBytes(5).toString('hex')
|
|
38
47
|
}
|
|
48
|
+
assertEnvVarUnset(tokenEnvVar, getTokenFromEnv(), 'log in')
|
|
39
49
|
config.set('server', `https://${userUrlSeed}.fakeseamconnect.seam.vc`)
|
|
40
50
|
config.set(`${getServer()}.pat`, `seam_apikey1_token`)
|
|
41
51
|
output.info(`PAT set to use fakeseamconnect with "seam_apikey1_token"`)
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { SeamHttpWithoutWorkspace } from '@seamapi/http/connect'
|
|
2
2
|
|
|
3
3
|
import { getConfigStore } from './config/index.js'
|
|
4
|
+
import {
|
|
5
|
+
assertEnvVarUnset,
|
|
6
|
+
getWorkspaceIdFromEnv,
|
|
7
|
+
workspaceIdEnvVar,
|
|
8
|
+
} from './env.js'
|
|
4
9
|
import { getSeamMultiWorkspace } from './get-seam.js'
|
|
5
10
|
import { getServer } from './get-server.js'
|
|
6
11
|
import { prompt } from './util/prompt.js'
|
|
@@ -8,6 +13,13 @@ import { withLoading } from './util/with-loading.js'
|
|
|
8
13
|
|
|
9
14
|
export const interactForWorkspaceId = async (personalAccessToken?: string) => {
|
|
10
15
|
const config = getConfigStore()
|
|
16
|
+
|
|
17
|
+
assertEnvVarUnset(
|
|
18
|
+
workspaceIdEnvVar,
|
|
19
|
+
getWorkspaceIdFromEnv(),
|
|
20
|
+
'select a workspace',
|
|
21
|
+
)
|
|
22
|
+
|
|
11
23
|
const seam = personalAccessToken
|
|
12
24
|
? SeamHttpWithoutWorkspace.fromPersonalAccessToken(personalAccessToken, {
|
|
13
25
|
endpoint: getServer(),
|
package/src/lib/version.ts
CHANGED