@stackable-labs/cli-app-extension 1.84.0 → 1.85.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/dist/index.js +26 -75
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
import { createRequire } from 'module';
|
|
3
3
|
import { program } from 'commander';
|
|
4
4
|
import { render, useApp, Box, Text, useInput, useFocus, useFocusManager } from 'ink';
|
|
5
|
-
import {
|
|
5
|
+
import { readFile, writeFile, mkdir, readdir, rm } from 'fs/promises';
|
|
6
6
|
import { join, dirname } from 'path';
|
|
7
7
|
import Spinner5 from 'ink-spinner';
|
|
8
8
|
import { useState, useCallback, useEffect, useRef, useMemo } from 'react';
|
|
9
9
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
10
10
|
import TextInput from 'ink-text-input';
|
|
11
11
|
import { SURFACE_TARGETS } from '@stackable-labs/sdk-extension-contracts';
|
|
12
|
+
import { clearAuthState, readAuthState, getToken, STANDALONE_CLIENT, writeAuthState } from '@stackable-labs/utils-auth';
|
|
12
13
|
import { execFile, spawn } from 'child_process';
|
|
13
14
|
import { promisify } from 'util';
|
|
14
15
|
import { installDependencies } from 'nypm';
|
|
@@ -19,7 +20,6 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
19
20
|
import AdmZip from 'adm-zip';
|
|
20
21
|
import { createServer } from 'http';
|
|
21
22
|
import open from 'open';
|
|
22
|
-
import { homedir } from 'os';
|
|
23
23
|
import https from 'https';
|
|
24
24
|
|
|
25
25
|
// ../../lib/utils-js/src/format.ts
|
|
@@ -1059,33 +1059,6 @@ var TemplateSelect = ({ onSubmit, onBack }) => {
|
|
|
1059
1059
|
}
|
|
1060
1060
|
);
|
|
1061
1061
|
};
|
|
1062
|
-
|
|
1063
|
-
// ../../lib/contracts/src/base.ts
|
|
1064
|
-
var asClerkUserId = (value) => value;
|
|
1065
|
-
var asClerkOrgId = (value) => value;
|
|
1066
|
-
|
|
1067
|
-
// ../../lib/contracts/src/permissions.ts
|
|
1068
|
-
var SUPER_ROLE = {
|
|
1069
|
-
ADMIN: "org:super_admin"
|
|
1070
|
-
};
|
|
1071
|
-
var ORG_ROLE = {
|
|
1072
|
-
ADMIN: "org:admin",
|
|
1073
|
-
OWNER: "org:owner"};
|
|
1074
|
-
var EDITOR_ROLES = [
|
|
1075
|
-
SUPER_ROLE.ADMIN,
|
|
1076
|
-
ORG_ROLE.ADMIN,
|
|
1077
|
-
ORG_ROLE.OWNER
|
|
1078
|
-
];
|
|
1079
|
-
[
|
|
1080
|
-
...Object.values(SUPER_ROLE),
|
|
1081
|
-
...Object.values(EDITOR_ROLES)
|
|
1082
|
-
];
|
|
1083
|
-
|
|
1084
|
-
// ../../lib/utils-services/src/auth/index.ts
|
|
1085
|
-
var STANDALONE_CLIENT = {
|
|
1086
|
-
CLI: "@stackable-labs/cli-app-extension"};
|
|
1087
|
-
|
|
1088
|
-
// src/lib/api.ts
|
|
1089
1062
|
var DEFAULT_ADMIN_API_URL = "https://api-use1.stackablelabs.io/admin";
|
|
1090
1063
|
var DEFAULT_PUBLIC_API_URL = "https://api.stackablelabs.io/app-extension/latest";
|
|
1091
1064
|
var getAdminApiBaseUrl = () => process.env.ADMIN_API_BASE_URL ?? DEFAULT_ADMIN_API_URL;
|
|
@@ -1605,6 +1578,29 @@ export function createFetchApi(fetch: FetchFn) {
|
|
|
1605
1578
|
}`
|
|
1606
1579
|
}
|
|
1607
1580
|
];
|
|
1581
|
+
|
|
1582
|
+
// ../../lib/contracts/src/base.ts
|
|
1583
|
+
var asClerkUserId = (value) => value;
|
|
1584
|
+
var asClerkOrgId = (value) => value;
|
|
1585
|
+
|
|
1586
|
+
// ../../lib/contracts/src/permissions.ts
|
|
1587
|
+
var SUPER_ROLE = {
|
|
1588
|
+
ADMIN: "org:super_admin"
|
|
1589
|
+
};
|
|
1590
|
+
var ORG_ROLE = {
|
|
1591
|
+
ADMIN: "org:admin",
|
|
1592
|
+
OWNER: "org:owner"};
|
|
1593
|
+
var EDITOR_ROLES = [
|
|
1594
|
+
SUPER_ROLE.ADMIN,
|
|
1595
|
+
ORG_ROLE.ADMIN,
|
|
1596
|
+
ORG_ROLE.OWNER
|
|
1597
|
+
];
|
|
1598
|
+
[
|
|
1599
|
+
...Object.values(SUPER_ROLE),
|
|
1600
|
+
...Object.values(EDITOR_ROLES)
|
|
1601
|
+
];
|
|
1602
|
+
|
|
1603
|
+
// src/lib/devContext.ts
|
|
1608
1604
|
var parseEnvFile = (content) => {
|
|
1609
1605
|
const lines = content.split("\n");
|
|
1610
1606
|
const env = {};
|
|
@@ -3291,51 +3287,6 @@ var AIMcp = ({ version: version2, dir }) => {
|
|
|
3291
3287
|
] })
|
|
3292
3288
|
] });
|
|
3293
3289
|
};
|
|
3294
|
-
var AUTH_DIR = join(homedir(), ".stackable");
|
|
3295
|
-
var AUTH_FILE = join(AUTH_DIR, "auth.json");
|
|
3296
|
-
var readAuthState = async () => {
|
|
3297
|
-
try {
|
|
3298
|
-
const content = await readFile(AUTH_FILE, "utf8");
|
|
3299
|
-
return JSON.parse(content);
|
|
3300
|
-
} catch {
|
|
3301
|
-
return null;
|
|
3302
|
-
}
|
|
3303
|
-
};
|
|
3304
|
-
var writeAuthState = async (state) => {
|
|
3305
|
-
await mkdir(AUTH_DIR, { recursive: true, mode: 448 });
|
|
3306
|
-
await writeFile(AUTH_FILE, JSON.stringify(state, null, 2), { mode: 384 });
|
|
3307
|
-
};
|
|
3308
|
-
var clearAuthState = async () => {
|
|
3309
|
-
try {
|
|
3310
|
-
await unlink(AUTH_FILE);
|
|
3311
|
-
} catch {
|
|
3312
|
-
}
|
|
3313
|
-
};
|
|
3314
|
-
var decodeJwtPayload = (token) => {
|
|
3315
|
-
try {
|
|
3316
|
-
const [, payload] = token.split(".");
|
|
3317
|
-
if (!payload) {
|
|
3318
|
-
return null;
|
|
3319
|
-
}
|
|
3320
|
-
const json = Buffer.from(payload, "base64url").toString("utf8");
|
|
3321
|
-
return JSON.parse(json);
|
|
3322
|
-
} catch {
|
|
3323
|
-
return null;
|
|
3324
|
-
}
|
|
3325
|
-
};
|
|
3326
|
-
var getToken = async () => {
|
|
3327
|
-
const state = await readAuthState();
|
|
3328
|
-
if (!state) {
|
|
3329
|
-
throw new Error("Not authenticated. Run `stackable-app-extension auth login` first.");
|
|
3330
|
-
}
|
|
3331
|
-
const payload = decodeJwtPayload(state.token);
|
|
3332
|
-
if (payload?.exp && typeof payload.exp === "number") {
|
|
3333
|
-
if (Date.now() >= payload.exp * 1e3) {
|
|
3334
|
-
throw new Error("Session expired. Run `stackable-app-extension auth login` to re-authenticate.");
|
|
3335
|
-
}
|
|
3336
|
-
}
|
|
3337
|
-
return state.token;
|
|
3338
|
-
};
|
|
3339
3290
|
var LOGIN_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
3340
3291
|
var callbackPage = (heading, sub, redirectUrl) => `<!DOCTYPE html>
|
|
3341
3292
|
<html><head><meta charset="utf-8"><title>Stackable CLI</title>
|
|
@@ -3668,7 +3619,7 @@ program.command("dev" /* DEV */).description("Start dev servers with a public tu
|
|
|
3668
3619
|
{ exitOnCtrlC: false }
|
|
3669
3620
|
);
|
|
3670
3621
|
});
|
|
3671
|
-
var DASHBOARD_URL = process.env.ADMIN_DASHBOARD_URL ?? "https://admin.stackablelabs.
|
|
3622
|
+
var DASHBOARD_URL = process.env.ADMIN_DASHBOARD_URL ?? "https://admin.stackablelabs.com";
|
|
3672
3623
|
var auth = program.command("auth").description("Manage CLI authentication");
|
|
3673
3624
|
auth.command("login").description("Authenticate with Stackable via browser").action(async () => {
|
|
3674
3625
|
render(/* @__PURE__ */ jsx(AuthLogin, { dashboardUrl: DASHBOARD_URL }));
|