@stackable-labs/cli-app-extension 3.3.0 → 3.5.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.
Files changed (2) hide show
  1. package/dist/index.js +53 -51
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3,8 +3,8 @@ import { createRequire } from 'module';
3
3
  import { program, InvalidArgumentError } from 'commander';
4
4
  import { render, useApp, Box, Text, useInput, useFocus, useFocusManager } from 'ink';
5
5
  import { SURFACE_TARGET, TEMPLATE_FLAVORS } from '@stackable-labs/sdk-extension-contracts';
6
- import { join, dirname, relative } from 'path';
7
6
  import { unlink, readFile, mkdir, writeFile, rm, readdir, rmdir } from 'fs/promises';
7
+ import { join, dirname, relative } from 'path';
8
8
  import { homedir } from 'os';
9
9
  import Spinner5 from 'ink-spinner';
10
10
  import { useState, useCallback, useEffect, useRef, useMemo } from 'react';
@@ -22,51 +22,6 @@ import { createServer } from 'http';
22
22
  import open from 'open';
23
23
  import https from 'https';
24
24
 
25
- // ../../lib/utils-js/src/crypto.ts
26
- var getCrypto = () => {
27
- if (typeof globalThis !== "undefined" && globalThis.crypto) {
28
- return globalThis.crypto;
29
- }
30
- throw new Error("Web Crypto API not available \u2014 requires Node.js 22+ or a modern browser");
31
- };
32
- var getSubtle = () => {
33
- const crypto = getCrypto();
34
- if (crypto.subtle) {
35
- return crypto.subtle;
36
- }
37
- throw new Error("SubtleCrypto not available \u2014 requires a secure context (HTTPS) or Node.js 22+");
38
- };
39
- var encodeBytes = (bytes, encoding) => {
40
- if (encoding === "hex") {
41
- return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
42
- }
43
- const base64 = btoa(String.fromCharCode(...bytes));
44
- if (encoding === "base64url") {
45
- return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
46
- }
47
- return base64;
48
- };
49
- var getRandomBytes = (length, encoding = "base64") => {
50
- const bytes = new Uint8Array(length);
51
- getCrypto().getRandomValues(bytes);
52
- return encodeBytes(bytes, encoding);
53
- };
54
- var getDigest = async (input, encoding = "hex") => {
55
- const digest = await getSubtle().digest(
56
- "SHA-256",
57
- new TextEncoder().encode(input)
58
- );
59
- return encodeBytes(new Uint8Array(digest), encoding);
60
- };
61
- var getNonce = () => getRandomBytes(16, "base64url");
62
- var getVerifier = () => getRandomBytes(32, "base64url");
63
-
64
- // ../../lib/utils-js/src/format.ts
65
- var toKebabCase = (value) => value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
66
-
67
- // ../../lib/utils-js/src/promise.ts
68
- var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
69
-
70
25
  // ../../lib/utils-auth/src/constants.ts
71
26
  var STANDALONE_CLIENT_DATA = {
72
27
  STACKABLE_LABS: {
@@ -86,7 +41,11 @@ var projectField = (field) => Object.fromEntries(
86
41
  var STANDALONE_CLIENT = projectField("name");
87
42
  var STANDALONE_CLIENT_AUTH_FILE = projectField("authFile");
88
43
  Object.values(STANDALONE_CLIENT_DATA).flatMap((roles) => Object.values(roles).map((entry) => entry.name));
44
+
45
+ // ../../lib/utils-auth/src/cli/shared.ts
89
46
  var AUTH_DIR = join(homedir(), ".stackable");
47
+ join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.STACKABLE_LABS.CLI);
48
+ join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.STACKABLE_LABS.MCP);
90
49
  var resolveAuthFile = (filename) => join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.STACKABLE_LABS.CLI);
91
50
  var readAuthState = async (filename) => {
92
51
  try {
@@ -154,11 +113,50 @@ var SECUREABLE_FIELD_TYPE = {
154
113
  var typeAllowsSecret = (fieldType) => Object.values(SECUREABLE_FIELD_TYPE).includes(fieldType);
155
114
  var allowsSecret = (field) => typeAllowsSecret(field.type);
156
115
 
157
- // ../../lib/utils-auth/src/index.ts
158
- var deriveDcrClientId = async (clientName) => (await getDigest(clientName)).slice(0, 32);
159
- var deriveClientId = async (clientName) => deriveDcrClientId(clientName);
160
- join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.STACKABLE_LABS.CLI);
161
- join(AUTH_DIR, STANDALONE_CLIENT_AUTH_FILE.STACKABLE_LABS.MCP);
116
+ // ../../lib/utils-js/src/crypto.ts
117
+ var getCrypto = () => {
118
+ if (typeof globalThis !== "undefined" && globalThis.crypto) {
119
+ return globalThis.crypto;
120
+ }
121
+ throw new Error("Web Crypto API not available \u2014 requires Node.js 22+ or a modern browser");
122
+ };
123
+ var getSubtle = () => {
124
+ const crypto = getCrypto();
125
+ if (crypto.subtle) {
126
+ return crypto.subtle;
127
+ }
128
+ throw new Error("SubtleCrypto not available \u2014 requires a secure context (HTTPS) or Node.js 22+");
129
+ };
130
+ var encodeBytes = (bytes, encoding) => {
131
+ if (encoding === "hex") {
132
+ return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
133
+ }
134
+ const base64 = btoa(String.fromCharCode(...bytes));
135
+ if (encoding === "base64url") {
136
+ return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
137
+ }
138
+ return base64;
139
+ };
140
+ var getRandomBytes = (length, encoding = "base64") => {
141
+ const bytes = new Uint8Array(length);
142
+ getCrypto().getRandomValues(bytes);
143
+ return encodeBytes(bytes, encoding);
144
+ };
145
+ var getDigest = async (input, encoding = "hex") => {
146
+ const digest = await getSubtle().digest(
147
+ "SHA-256",
148
+ new TextEncoder().encode(input)
149
+ );
150
+ return encodeBytes(new Uint8Array(digest), encoding);
151
+ };
152
+ var getNonce = () => getRandomBytes(16, "base64url");
153
+ var getVerifier = () => getRandomBytes(32, "base64url");
154
+
155
+ // ../../lib/utils-js/src/format.ts
156
+ var toKebabCase = (value) => value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
157
+
158
+ // ../../lib/utils-js/src/promise.ts
159
+ var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
162
160
  var WORDMARK = [
163
161
  " _ _ _ _ ",
164
162
  " ___| |_ __ _ ___| | ____ _| |__ | | ___",
@@ -1270,6 +1268,10 @@ var TemplateSelect = ({ onSubmit, onBack }) => {
1270
1268
  );
1271
1269
  };
1272
1270
 
1271
+ // ../../lib/utils-auth/src/index.ts
1272
+ var deriveDcrClientId = async (clientName) => (await getDigest(clientName)).slice(0, 32);
1273
+ var deriveClientId = async (clientName) => deriveDcrClientId(clientName);
1274
+
1273
1275
  // src/lib/api.ts
1274
1276
  var DEFAULT_ADMIN_LABS_API_URL = "https://api-x.stackablelabs.io/admin";
1275
1277
  var DEFAULT_PUBLIC_API_URL = "https://api.stackablelabs.io/app-extension/latest";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackable-labs/cli-app-extension",
3
- "version": "3.3.0",
3
+ "version": "3.5.0",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "bin": {