@otakit/cli 1.4.0 → 1.6.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 +41 -3
- package/dist/commands/connect.d.ts +3 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +216 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +40 -48
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +122 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/organization.d.ts +3 -0
- package/dist/commands/organization.d.ts.map +1 -0
- package/dist/commands/organization.js +44 -0
- package/dist/commands/organization.js.map +1 -0
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +71 -16
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +8 -2
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/upload.d.ts.map +1 -1
- package/dist/commands/upload.js +8 -2
- package/dist/commands/upload.js.map +1 -1
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +59 -17
- package/dist/commands/whoami.js.map +1 -1
- package/dist/index.js +4584 -21
- package/dist/index.js.map +7 -1
- package/dist/lib/api.d.ts +23 -6
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +46 -15
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/artifact-preflight.d.ts +21 -0
- package/dist/lib/artifact-preflight.d.ts.map +1 -0
- package/dist/lib/artifact-preflight.js +74 -0
- package/dist/lib/artifact-preflight.js.map +1 -0
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +18 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/login-flow.d.ts +13 -0
- package/dist/lib/login-flow.d.ts.map +1 -0
- package/dist/lib/login-flow.js +89 -0
- package/dist/lib/login-flow.js.map +1 -0
- package/dist/lib/native-deps.d.ts +2 -0
- package/dist/lib/native-deps.d.ts.map +1 -1
- package/dist/lib/native-deps.js +12 -2
- package/dist/lib/native-deps.js.map +1 -1
- package/dist/lib/organization.d.ts +27 -0
- package/dist/lib/organization.d.ts.map +1 -0
- package/dist/lib/organization.js +86 -0
- package/dist/lib/organization.js.map +1 -0
- package/dist/lib/project-inspect.d.ts +27 -0
- package/dist/lib/project-inspect.d.ts.map +1 -0
- package/dist/lib/project-inspect.js +131 -0
- package/dist/lib/project-inspect.js.map +1 -0
- package/dist/lib/token-store.d.ts +8 -2
- package/dist/lib/token-store.d.ts.map +1 -1
- package/dist/lib/token-store.js +105 -67
- package/dist/lib/token-store.js.map +1 -1
- package/dist/lib/upload-workflow.d.ts +9 -1
- package/dist/lib/upload-workflow.d.ts.map +1 -1
- package/dist/lib/upload-workflow.js +55 -13
- package/dist/lib/upload-workflow.js.map +1 -1
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +16 -5
- package/dist/lib/version.js.map +1 -1
- package/dist/lib/zip.d.ts.map +1 -1
- package/dist/lib/zip.js +3 -0
- package/dist/lib/zip.js.map +1 -1
- package/dist/mcp/local-adapter.d.ts +97 -0
- package/dist/mcp/local-adapter.d.ts.map +1 -0
- package/dist/mcp/local-adapter.js +664 -0
- package/dist/mcp/local-adapter.js.map +1 -0
- package/package.json +15 -5
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { resolveAuthToken, resolveServerUrl } from '../lib/config.js';
|
|
3
|
+
import { CliError, runCommand } from '../lib/errors.js';
|
|
4
|
+
import { fetchAccount, initialOrganizationId, organizationDisplayLabel, promptForOrganization, shellLiteral, } from '../lib/organization.js';
|
|
5
|
+
import { readStoredAuthProfile, storeSelectedOrganization } from '../lib/token-store.js';
|
|
6
|
+
const selectCommand = new Command('select')
|
|
7
|
+
.description('Choose the default organization for commands not tied to an app')
|
|
8
|
+
.option('--server <url>', 'OtaKit console URL')
|
|
9
|
+
.action(async (options) => {
|
|
10
|
+
await runCommand(async () => {
|
|
11
|
+
const serverUrl = resolveServerUrl(process.cwd(), options.server);
|
|
12
|
+
const auth = await resolveAuthToken(serverUrl);
|
|
13
|
+
if (!auth) {
|
|
14
|
+
throw new CliError('Not authenticated. Run `otakit login`, or set OTAKIT_TOKEN.');
|
|
15
|
+
}
|
|
16
|
+
if (auth.token.startsWith('otakit_sk_')) {
|
|
17
|
+
throw new CliError('Organization API keys are already bound to one organization; no selection is needed.');
|
|
18
|
+
}
|
|
19
|
+
const account = await fetchAccount(serverUrl, auth.token);
|
|
20
|
+
const storedProfile = auth.source === 'file' ? await readStoredAuthProfile(serverUrl) : null;
|
|
21
|
+
const selected = await promptForOrganization(account.memberships, {
|
|
22
|
+
initialOrganizationId: initialOrganizationId(account, storedProfile),
|
|
23
|
+
});
|
|
24
|
+
if (auth.source !== 'file') {
|
|
25
|
+
console.log('');
|
|
26
|
+
console.log(`Selected organization: ${organizationDisplayLabel(selected, account.memberships)}.`);
|
|
27
|
+
console.log('OTAKIT_TOKEN is active, so use this organization in the same environment:');
|
|
28
|
+
console.log(`export OTAKIT_ORGANIZATION_ID=${shellLiteral(selected.organizationId)}`);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const stored = await storeSelectedOrganization(serverUrl, account.user.id, selected.organizationId);
|
|
32
|
+
if (!stored.ok) {
|
|
33
|
+
throw new CliError(stored.reason ?? 'Could not store the selected organization.');
|
|
34
|
+
}
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log(`Default organization: ${organizationDisplayLabel(selected, account.memberships)}.`);
|
|
37
|
+
console.log('Restart running MCP connections to use the new default.');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
export const organizationCommand = new Command('organization')
|
|
41
|
+
.alias('org')
|
|
42
|
+
.description('Manage the CLI organization context')
|
|
43
|
+
.addCommand(selectCommand);
|
|
44
|
+
//# sourceMappingURL=organization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/commands/organization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8DpC,eAAO,MAAM,eAAe,SA8IxB,CAAC"}
|
|
@@ -1,14 +1,35 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import ora from 'ora';
|
|
3
|
-
import { resolveAuthToken, resolveServerUrl } from '../lib/config.js';
|
|
3
|
+
import { resolveAuthToken, resolveOrganizationOverride, resolveServerUrl, } from '../lib/config.js';
|
|
4
4
|
import { CliError, runCommand } from '../lib/errors.js';
|
|
5
5
|
import { fetchCli } from '../lib/http.js';
|
|
6
|
+
import { fetchAccount, initialOrganizationId, organizationById, promptForOrganization, shellLiteral, } from '../lib/organization.js';
|
|
7
|
+
import { readStoredAuthProfile, storeSelectedOrganization } from '../lib/token-store.js';
|
|
6
8
|
const APP_SLUG_REGEX = /^[A-Za-z0-9._-]{3,120}$/;
|
|
9
|
+
async function createApp(serverUrl, token, slug, organizationId) {
|
|
10
|
+
const headers = new Headers({
|
|
11
|
+
Authorization: `Bearer ${token}`,
|
|
12
|
+
'Content-Type': 'application/json',
|
|
13
|
+
});
|
|
14
|
+
if (organizationId)
|
|
15
|
+
headers.set('X-OtaKit-Organization-Id', organizationId);
|
|
16
|
+
const response = await fetchCli(`${serverUrl}/api/v1/apps`, {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
headers,
|
|
19
|
+
body: JSON.stringify({ slug }),
|
|
20
|
+
});
|
|
21
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
22
|
+
const payload = contentType.includes('application/json')
|
|
23
|
+
? (await response.json())
|
|
24
|
+
: null;
|
|
25
|
+
return { response, payload };
|
|
26
|
+
}
|
|
7
27
|
export const registerCommand = new Command('register')
|
|
8
28
|
.description('Create a new app')
|
|
9
29
|
.requiredOption('--slug <slug>', 'App slug (for example: com.example.app)')
|
|
10
30
|
.option('--server <url>', 'Server URL')
|
|
11
31
|
.option('--token <token>', 'Auth token (or set OTAKIT_TOKEN env var)')
|
|
32
|
+
.option('--secret-key <key>', 'Alias for --token')
|
|
12
33
|
.action(async (options) => {
|
|
13
34
|
await runCommand(async () => {
|
|
14
35
|
const slug = options.slug.trim();
|
|
@@ -16,9 +37,12 @@ export const registerCommand = new Command('register')
|
|
|
16
37
|
throw new CliError('Invalid slug. Use 3-120 chars: letters, numbers, dot, underscore, hyphen.');
|
|
17
38
|
}
|
|
18
39
|
const serverUrl = resolveServerUrl(process.cwd(), options.server);
|
|
19
|
-
|
|
40
|
+
if (options.token && options.secretKey) {
|
|
41
|
+
throw new CliError('Use either `--token` or `--secret-key`, not both.');
|
|
42
|
+
}
|
|
43
|
+
const explicitToken = options.token?.trim() || options.secretKey?.trim();
|
|
20
44
|
const resolvedAuth = explicitToken
|
|
21
|
-
? { token: explicitToken }
|
|
45
|
+
? { token: explicitToken, source: 'env_token' }
|
|
22
46
|
: await resolveAuthToken(serverUrl);
|
|
23
47
|
if (!resolvedAuth?.token) {
|
|
24
48
|
throw new CliError([
|
|
@@ -28,20 +52,44 @@ export const registerCommand = new Command('register')
|
|
|
28
52
|
' 3. OTAKIT_TOKEN env var',
|
|
29
53
|
].join('\n'));
|
|
30
54
|
}
|
|
55
|
+
const organizationOverride = resolveOrganizationOverride();
|
|
56
|
+
let organizationId = organizationOverride ?? resolvedAuth.organizationId;
|
|
57
|
+
let account;
|
|
58
|
+
if (!organizationOverride && resolvedAuth.source === 'file') {
|
|
59
|
+
account = await fetchAccount(serverUrl, resolvedAuth.token);
|
|
60
|
+
const current = organizationById(account.memberships, organizationId);
|
|
61
|
+
if (!current) {
|
|
62
|
+
const storedProfile = await readStoredAuthProfile(serverUrl);
|
|
63
|
+
const selected = await promptForOrganization(account.memberships, {
|
|
64
|
+
initialOrganizationId: initialOrganizationId(account, storedProfile),
|
|
65
|
+
});
|
|
66
|
+
organizationId = selected.organizationId;
|
|
67
|
+
const stored = await storeSelectedOrganization(serverUrl, account.user.id, selected.organizationId);
|
|
68
|
+
if (!stored.ok) {
|
|
69
|
+
throw new CliError(stored.reason ?? 'Could not store the selected organization.');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
31
73
|
const spinner = ora(`Creating app "${slug}"...`).start();
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
74
|
+
let { response, payload } = await createApp(serverUrl, resolvedAuth.token, slug, organizationId);
|
|
75
|
+
if (response.status === 409 &&
|
|
76
|
+
payload?.code === 'ORGANIZATION_SELECTION_REQUIRED' &&
|
|
77
|
+
!organizationId) {
|
|
78
|
+
spinner.stop();
|
|
79
|
+
account ??= await fetchAccount(serverUrl, resolvedAuth.token);
|
|
80
|
+
const selected = await promptForOrganization(account.memberships, {
|
|
81
|
+
initialOrganizationId: initialOrganizationId(account),
|
|
82
|
+
});
|
|
83
|
+
organizationId = selected.organizationId;
|
|
84
|
+
if (resolvedAuth.source === 'file') {
|
|
85
|
+
const stored = await storeSelectedOrganization(serverUrl, account.user.id, selected.organizationId);
|
|
86
|
+
if (!stored.ok) {
|
|
87
|
+
throw new CliError(stored.reason ?? 'Could not store the selected organization.');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
spinner.start();
|
|
91
|
+
({ response, payload } = await createApp(serverUrl, resolvedAuth.token, slug, organizationId));
|
|
92
|
+
}
|
|
45
93
|
if (!response.ok) {
|
|
46
94
|
spinner.fail('Failed to create app');
|
|
47
95
|
const errorMessage = typeof payload?.error === 'string' ? payload.error : `API error (${response.status})`;
|
|
@@ -73,6 +121,13 @@ export const registerCommand = new Command('register')
|
|
|
73
121
|
console.log('Next steps:');
|
|
74
122
|
console.log('1. Build your web app');
|
|
75
123
|
console.log('2. Run `otakit upload --release`');
|
|
124
|
+
if (organizationId &&
|
|
125
|
+
resolvedAuth.source !== 'file' &&
|
|
126
|
+
!resolvedAuth.token.startsWith('otakit_sk_')) {
|
|
127
|
+
console.log('');
|
|
128
|
+
console.log('For later app-less commands in this environment:');
|
|
129
|
+
console.log(`export OTAKIT_ORGANIZATION_ID=${shellLiteral(organizationId)}`);
|
|
130
|
+
}
|
|
76
131
|
});
|
|
77
132
|
});
|
|
78
133
|
//# sourceMappingURL=register.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,cAAc,SAmDvB,CAAC"}
|
package/dist/commands/release.js
CHANGED
|
@@ -24,7 +24,10 @@ export const releaseCommand = new Command('release')
|
|
|
24
24
|
const forceLabel = forceImmediate ? ' (force immediate)' : '';
|
|
25
25
|
if (bundleId) {
|
|
26
26
|
const spinner = ora(`Releasing ${bundleId} to ${targetLabel}...`).start();
|
|
27
|
-
await api.release(channel, bundleId, { forceImmediate });
|
|
27
|
+
const result = await api.release(channel, bundleId, { forceImmediate });
|
|
28
|
+
if (result.publicationStatus === 'manifest_sync_pending') {
|
|
29
|
+
throw new CliError(`Release ${result.release.id} was recorded, but manifest synchronization is pending (operation ${result.operationId}). OtaKit will retry automatically; do not publish it again with a new version.`);
|
|
30
|
+
}
|
|
28
31
|
spinner.succeed(`Released ${bundleId} to ${targetLabel}${forceLabel}.`);
|
|
29
32
|
return;
|
|
30
33
|
}
|
|
@@ -36,7 +39,10 @@ export const releaseCommand = new Command('release')
|
|
|
36
39
|
}
|
|
37
40
|
const latest = bundles[0];
|
|
38
41
|
spinner.text = `Releasing ${latest.version} to ${targetLabel}...`;
|
|
39
|
-
await api.release(channel, latest.id, { forceImmediate });
|
|
42
|
+
const result = await api.release(channel, latest.id, { forceImmediate });
|
|
43
|
+
if (result.publicationStatus === 'manifest_sync_pending') {
|
|
44
|
+
throw new CliError(`Release ${result.release.id} was recorded, but manifest synchronization is pending (operation ${result.operationId}). OtaKit will retry automatically; do not publish it again with a new version.`);
|
|
45
|
+
}
|
|
40
46
|
spinner.succeed(`Released ${latest.version} to ${targetLabel}${forceLabel}.`);
|
|
41
47
|
});
|
|
42
48
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC9C,MAAM,CAAC,eAAe,EAAE,iBAAiB,CAAC;KAC1C,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;KAC/C,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,CAAC;KACzE,MAAM,CACL,mBAAmB,EACnB,6EAA6E,CAC9E;KACA,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,OAAuB,EAAE,EAAE;IACtE,MAAM,UAAU,CAAC,KAAK,IAAI,EAAE;QAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,WAAW,GAAG,OAAO,IAAI,cAAc,CAAC;QAC9C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC;QACvD,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,QAAQ,OAAO,WAAW,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1E,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../../src/commands/release.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4EpC,eAAO,MAAM,aAAa,SA8KtB,CAAC"}
|
package/dist/commands/upload.js
CHANGED
|
@@ -40,6 +40,7 @@ export const uploadCommand = new Command('upload')
|
|
|
40
40
|
.option('--server <url>', 'Server URL override')
|
|
41
41
|
.option('--version <version>', 'Version string (default: OTAKIT_VERSION, then auto-generated)')
|
|
42
42
|
.option('--strict-version', 'Require explicit version (--version or OTAKIT_VERSION)')
|
|
43
|
+
.option('--strict-artifacts', 'Fail before uploading on large bundles or native installer artifacts')
|
|
43
44
|
.option('--release [channel]', 'Release after upload (base channel if omitted)')
|
|
44
45
|
.option('--strategy <strategy>', 'Upload strategy: "zip" (single archive, default) or "deltas" (per-file objects)')
|
|
45
46
|
.option('--fail-on-incompatible', 'Exit non-zero when native compatibility check fails')
|
|
@@ -116,7 +117,7 @@ export const uploadCommand = new Command('upload')
|
|
|
116
117
|
const autoRevertRatePercent = parseAutoRevertThreshold(options.autoRevertRate, '--auto-revert-rate', 1, 95);
|
|
117
118
|
const autoRevertMinSample = parseAutoRevertThreshold(options.autoRevertMinSample, '--auto-revert-min-sample', 10, 100000);
|
|
118
119
|
const spinner = ora(strategy === 'deltas' ? 'Hashing bundle files...' : 'Creating zip archive...').start();
|
|
119
|
-
const
|
|
120
|
+
const uploadResult = await (async () => {
|
|
120
121
|
try {
|
|
121
122
|
const result = await runUploadWorkflow({
|
|
122
123
|
api,
|
|
@@ -131,11 +132,12 @@ export const uploadCommand = new Command('upload')
|
|
|
131
132
|
autoRevertRatePercent,
|
|
132
133
|
autoRevertMinSample,
|
|
133
134
|
encrypt: options.encrypt,
|
|
135
|
+
strictArtifacts: options.strictArtifacts,
|
|
134
136
|
onStatus: (message) => {
|
|
135
137
|
spinner.text = message;
|
|
136
138
|
},
|
|
137
139
|
});
|
|
138
|
-
return result
|
|
140
|
+
return result;
|
|
139
141
|
}
|
|
140
142
|
catch (error) {
|
|
141
143
|
if (spinner.isSpinning) {
|
|
@@ -144,6 +146,10 @@ export const uploadCommand = new Command('upload')
|
|
|
144
146
|
throw error;
|
|
145
147
|
}
|
|
146
148
|
})();
|
|
149
|
+
const bundle = uploadResult.bundle;
|
|
150
|
+
if (uploadResult.release?.publicationStatus === 'manifest_sync_pending') {
|
|
151
|
+
throw new CliError(`Bundle uploaded and release ${uploadResult.release.release.id} was recorded, but manifest synchronization is pending (operation ${uploadResult.release.operationId}). OtaKit will retry automatically; do not upload or publish it again.`);
|
|
152
|
+
}
|
|
147
153
|
if (releaseChannel !== undefined) {
|
|
148
154
|
spinner.succeed(`Uploaded ${bundle.version} (${bundle.id}) and released to ${releaseChannel ?? 'base channel'}.`);
|
|
149
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAE1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,aAAa,SAiGtB,CAAC"}
|
package/dist/commands/whoami.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import {
|
|
2
|
+
import { ApiClient } from '../lib/api.js';
|
|
3
|
+
import { resolveAuthToken, resolveOrganizationOverride, resolveServerUrl } from '../lib/config.js';
|
|
3
4
|
import { CliError, runCommand } from '../lib/errors.js';
|
|
4
|
-
import {
|
|
5
|
+
import { fetchAccount, organizationById, organizationDisplayLabel } from '../lib/organization.js';
|
|
6
|
+
import { CLI_VERSION } from '../lib/version.js';
|
|
5
7
|
export const whoamiCommand = new Command('whoami')
|
|
6
8
|
.description('Show current authenticated user and organization context')
|
|
7
9
|
.option('--server <url>', 'Server URL')
|
|
10
|
+
.option('--json', 'Print machine-readable account details')
|
|
8
11
|
.action(async (options) => {
|
|
9
12
|
await runCommand(async () => {
|
|
10
13
|
const serverUrl = resolveServerUrl(process.cwd(), options.server);
|
|
@@ -12,27 +15,66 @@ export const whoamiCommand = new Command('whoami')
|
|
|
12
15
|
if (!auth) {
|
|
13
16
|
throw new CliError(['Not authenticated.', 'Run `otakit login`, or set OTAKIT_TOKEN.'].join('\n'));
|
|
14
17
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
if (auth.token.startsWith('otakit_sk_')) {
|
|
19
|
+
const client = new ApiClient({
|
|
20
|
+
appId: '00000000-0000-0000-0000-000000000000',
|
|
21
|
+
serverUrl,
|
|
22
|
+
authToken: auth.token,
|
|
23
|
+
authSource: auth.source,
|
|
24
|
+
}, CLI_VERSION);
|
|
25
|
+
const context = await client.request('/api/v1/context');
|
|
26
|
+
if (options.json) {
|
|
27
|
+
console.log(JSON.stringify({ credential: 'organization_key', organization: context.organization }, null, 2));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
console.log('Credential: organization API key');
|
|
31
|
+
console.log(`Organization: ${context.organization.name}`);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const account = await fetchAccount(serverUrl, auth.token);
|
|
35
|
+
const overrideOrganizationId = resolveOrganizationOverride();
|
|
36
|
+
const effectiveOrganizationId = overrideOrganizationId ?? auth.organizationId;
|
|
37
|
+
const effectiveOrganization = organizationById(account.memberships, effectiveOrganizationId);
|
|
38
|
+
if (options.json) {
|
|
39
|
+
console.log(JSON.stringify({
|
|
40
|
+
...account,
|
|
41
|
+
cli: {
|
|
42
|
+
authSource: auth.source,
|
|
43
|
+
organizationId: effectiveOrganizationId ?? null,
|
|
44
|
+
organizationSource: overrideOrganizationId
|
|
45
|
+
? 'environment'
|
|
46
|
+
: auth.organizationId
|
|
47
|
+
? 'stored_profile'
|
|
48
|
+
: 'none',
|
|
49
|
+
},
|
|
50
|
+
}, null, 2));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
console.log(`User: ${account.user.email}`);
|
|
27
54
|
console.log(`Auth source: ${auth.source}`);
|
|
55
|
+
if (effectiveOrganization) {
|
|
56
|
+
const prefix = overrideOrganizationId ? 'Environment organization' : 'Default organization';
|
|
57
|
+
console.log(`${prefix}: ${organizationDisplayLabel(effectiveOrganization, account.memberships)}`);
|
|
58
|
+
}
|
|
59
|
+
else if (effectiveOrganizationId) {
|
|
60
|
+
console.log('Organization selection: unavailable or no longer accessible');
|
|
61
|
+
console.log('Run `otakit organization select` to choose a current membership.');
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log('Default organization: not selected');
|
|
65
|
+
if (account.memberships.length > 1) {
|
|
66
|
+
console.log('Run `otakit organization select` to choose one.');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
28
69
|
console.log('');
|
|
29
|
-
if (
|
|
70
|
+
if (account.memberships.length === 0) {
|
|
30
71
|
console.log('Memberships: none');
|
|
31
72
|
return;
|
|
32
73
|
}
|
|
33
74
|
console.log('Memberships:');
|
|
34
|
-
for (const membership of
|
|
35
|
-
|
|
75
|
+
for (const membership of account.memberships) {
|
|
76
|
+
const marker = membership.organizationId === effectiveOrganizationId ? '*' : '-';
|
|
77
|
+
console.log(` ${marker} ${organizationDisplayLabel(membership, account.memberships)}`);
|
|
36
78
|
}
|
|
37
79
|
});
|
|
38
80
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"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"}
|