@stackable-labs/cli-app-extension 1.92.0 → 1.92.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +88 -25
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2,14 +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 { readFile, writeFile, mkdir, readdir, rm } from 'fs/promises';
|
|
5
|
+
import { unlink, 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_TARGET } from '@stackable-labs/sdk-extension-contracts';
|
|
12
|
-
import {
|
|
12
|
+
import { homedir } from 'os';
|
|
13
13
|
import { execFile, spawn } from 'child_process';
|
|
14
14
|
import { promisify } from 'util';
|
|
15
15
|
import { installDependencies } from 'nypm';
|
|
@@ -1166,6 +1166,92 @@ var TemplateSelect = ({ onSubmit, onBack }) => {
|
|
|
1166
1166
|
}
|
|
1167
1167
|
);
|
|
1168
1168
|
};
|
|
1169
|
+
|
|
1170
|
+
// ../../lib/contracts/src/base.ts
|
|
1171
|
+
var asClerkUserId = (value) => value;
|
|
1172
|
+
var asClerkOrgId = (value) => value;
|
|
1173
|
+
|
|
1174
|
+
// ../../lib/contracts/src/permissions.ts
|
|
1175
|
+
var SUPER_ROLE = {
|
|
1176
|
+
ADMIN: "org:super_admin"
|
|
1177
|
+
};
|
|
1178
|
+
var ORG_ROLE = {
|
|
1179
|
+
ADMIN: "org:admin",
|
|
1180
|
+
OWNER: "org:owner"};
|
|
1181
|
+
var EDITOR_ROLES = [
|
|
1182
|
+
SUPER_ROLE.ADMIN,
|
|
1183
|
+
ORG_ROLE.ADMIN,
|
|
1184
|
+
ORG_ROLE.OWNER
|
|
1185
|
+
];
|
|
1186
|
+
[
|
|
1187
|
+
...Object.values(SUPER_ROLE),
|
|
1188
|
+
...Object.values(EDITOR_ROLES)
|
|
1189
|
+
];
|
|
1190
|
+
|
|
1191
|
+
// ../../lib/utils-auth/src/constants.ts
|
|
1192
|
+
var STANDALONE_CLIENT_DATA = {
|
|
1193
|
+
CLI: { name: "@stackable-labs/cli-app-extension", authFile: "cli-auth.json" },
|
|
1194
|
+
MCP: { name: "@stackable-labs/mcp-app-extension", authFile: "mcp-auth.json" }
|
|
1195
|
+
};
|
|
1196
|
+
var STANDALONE_CLIENT = Object.fromEntries(
|
|
1197
|
+
Object.entries(STANDALONE_CLIENT_DATA).map(([k, v]) => [k, v.name])
|
|
1198
|
+
);
|
|
1199
|
+
var STANDALONE_CLIENT_AUTH_FILE = Object.fromEntries(
|
|
1200
|
+
Object.entries(STANDALONE_CLIENT_DATA).map(([k, v]) => [k, v.authFile])
|
|
1201
|
+
);
|
|
1202
|
+
Object.values(STANDALONE_CLIENT);
|
|
1203
|
+
|
|
1204
|
+
// ../../lib/utils-auth/src/index.ts
|
|
1205
|
+
var deriveClientId = async (clientName) => (await getDigest(clientName)).slice(0, 32);
|
|
1206
|
+
var AUTH_DIR = join(homedir(), ".stackable");
|
|
1207
|
+
join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.CLI);
|
|
1208
|
+
join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.MCP);
|
|
1209
|
+
var resolveAuthFile = (filename) => join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.CLI);
|
|
1210
|
+
var readAuthState = async (filename) => {
|
|
1211
|
+
try {
|
|
1212
|
+
const content = await readFile(resolveAuthFile(filename), "utf8");
|
|
1213
|
+
return JSON.parse(content);
|
|
1214
|
+
} catch {
|
|
1215
|
+
return null;
|
|
1216
|
+
}
|
|
1217
|
+
};
|
|
1218
|
+
var writeAuthState = async (state, filename) => {
|
|
1219
|
+
await mkdir(AUTH_DIR, { recursive: true, mode: 448 });
|
|
1220
|
+
await writeFile(resolveAuthFile(), JSON.stringify(state, null, 2), { mode: 384 });
|
|
1221
|
+
};
|
|
1222
|
+
var clearAuthState = async (filename) => {
|
|
1223
|
+
try {
|
|
1224
|
+
await unlink(resolveAuthFile(filename));
|
|
1225
|
+
} catch {
|
|
1226
|
+
}
|
|
1227
|
+
};
|
|
1228
|
+
var decodeJwtPayload = (token) => {
|
|
1229
|
+
try {
|
|
1230
|
+
const [, payload] = token.split(".");
|
|
1231
|
+
if (!payload) {
|
|
1232
|
+
return null;
|
|
1233
|
+
}
|
|
1234
|
+
const json = Buffer.from(payload, "base64url").toString("utf8");
|
|
1235
|
+
return JSON.parse(json);
|
|
1236
|
+
} catch {
|
|
1237
|
+
return null;
|
|
1238
|
+
}
|
|
1239
|
+
};
|
|
1240
|
+
var getToken = async (filename) => {
|
|
1241
|
+
const state = await readAuthState(filename);
|
|
1242
|
+
if (!state) {
|
|
1243
|
+
throw new Error("Not authenticated. Run `stackable-app-extension auth login` first.");
|
|
1244
|
+
}
|
|
1245
|
+
const payload = decodeJwtPayload(state.token);
|
|
1246
|
+
if (payload?.exp && typeof payload.exp === "number") {
|
|
1247
|
+
if (Date.now() >= payload.exp * 1e3) {
|
|
1248
|
+
throw new Error("Session expired. Run `stackable-app-extension auth login` to re-authenticate.");
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
return state.token;
|
|
1252
|
+
};
|
|
1253
|
+
|
|
1254
|
+
// src/lib/api.ts
|
|
1169
1255
|
var DEFAULT_ADMIN_API_URL = "https://api-use1.stackablelabs.io/admin";
|
|
1170
1256
|
var DEFAULT_PUBLIC_API_URL = "https://api.stackablelabs.io/app-extension/latest";
|
|
1171
1257
|
var getAdminApiBaseUrl = () => process.env.ADMIN_API_BASE_URL ?? DEFAULT_ADMIN_API_URL;
|
|
@@ -1702,29 +1788,6 @@ export function createFetchApi(fetch: FetchFn) {
|
|
|
1702
1788
|
}`
|
|
1703
1789
|
}
|
|
1704
1790
|
];
|
|
1705
|
-
|
|
1706
|
-
// ../../lib/contracts/src/base.ts
|
|
1707
|
-
var asClerkUserId = (value) => value;
|
|
1708
|
-
var asClerkOrgId = (value) => value;
|
|
1709
|
-
|
|
1710
|
-
// ../../lib/contracts/src/permissions.ts
|
|
1711
|
-
var SUPER_ROLE = {
|
|
1712
|
-
ADMIN: "org:super_admin"
|
|
1713
|
-
};
|
|
1714
|
-
var ORG_ROLE = {
|
|
1715
|
-
ADMIN: "org:admin",
|
|
1716
|
-
OWNER: "org:owner"};
|
|
1717
|
-
var EDITOR_ROLES = [
|
|
1718
|
-
SUPER_ROLE.ADMIN,
|
|
1719
|
-
ORG_ROLE.ADMIN,
|
|
1720
|
-
ORG_ROLE.OWNER
|
|
1721
|
-
];
|
|
1722
|
-
[
|
|
1723
|
-
...Object.values(SUPER_ROLE),
|
|
1724
|
-
...Object.values(EDITOR_ROLES)
|
|
1725
|
-
];
|
|
1726
|
-
|
|
1727
|
-
// src/lib/devContext.ts
|
|
1728
1791
|
var parseEnvFile = (content) => {
|
|
1729
1792
|
const lines = content.split("\n");
|
|
1730
1793
|
const env = {};
|