@positronic/cli 0.0.57 → 0.0.58

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/src/cli.js CHANGED
@@ -986,6 +986,15 @@ export function buildCli(options) {
986
986
  }).command('list', 'List available SSH keys\n', function() {}, function() {
987
987
  var element = authCommand.list();
988
988
  render(element);
989
+ }).command('format-jwk-key', 'Convert an SSH public key to JWK format for ROOT_PUBLIC_KEY\n', function(yargsFormatJwkKey) {
990
+ return yargsFormatJwkKey.option('pubkey', {
991
+ describe: 'Path to SSH public key file',
992
+ type: 'string',
993
+ alias: 'p'
994
+ }).example('$0 auth format-jwk-key', 'Interactive public key selection').example('$0 auth format-jwk-key --pubkey ~/.ssh/id_ed25519.pub', 'Convert specific key');
995
+ }, function(argv) {
996
+ var element = authCommand.formatJwkKey(argv);
997
+ render(element);
989
998
  }).command('$0', false, function() {}, function() {
990
999
  // Default to status when just 'px auth' is run
991
1000
  var element = authCommand.status();
@@ -35,6 +35,7 @@ import { AuthStatus } from '../components/auth-status.js';
35
35
  import { AuthLogin } from '../components/auth-login.js';
36
36
  import { AuthLogout } from '../components/auth-logout.js';
37
37
  import { AuthList } from '../components/auth-list.js';
38
+ import { AuthFormatJwkKey } from '../components/auth-format-jwk-key.js';
38
39
  import { ProjectConfigManager } from './project-config-manager.js';
39
40
  export var AuthCommand = /*#__PURE__*/ function() {
40
41
  "use strict";
@@ -92,6 +93,18 @@ export var AuthCommand = /*#__PURE__*/ function() {
92
93
  configManager: this.configManager
93
94
  });
94
95
  }
96
+ },
97
+ {
98
+ /**
99
+ * Handles the 'px auth format-jwk-key' command.
100
+ * Convert an SSH public key to JWK format for ROOT_PUBLIC_KEY configuration.
101
+ */ key: "formatJwkKey",
102
+ value: function formatJwkKey(param) {
103
+ var pubkey = param.pubkey;
104
+ return React.createElement(AuthFormatJwkKey, {
105
+ pubkeyPath: pubkey
106
+ });
107
+ }
95
108
  }
96
109
  ]);
97
110
  return AuthCommand;
@@ -307,6 +307,28 @@ export var apiClient = {
307
307
  ];
308
308
  });
309
309
  })();
310
+ },
311
+ /**
312
+ * Fetch without authentication - used for unauthenticated endpoints like /auth/setup
313
+ */ fetchUnauthenticated: function(apiPath, options) {
314
+ return _async_to_generator(function() {
315
+ var baseUrl, port, fullUrl;
316
+ return _ts_generator(this, function(_state) {
317
+ if (apiBaseUrl) {
318
+ baseUrl = apiBaseUrl;
319
+ } else {
320
+ // Fallback to localhost (for backwards compatibility and testing)
321
+ port = process.env.POSITRONIC_PORT || '8787';
322
+ baseUrl = "http://localhost:".concat(port);
323
+ }
324
+ fullUrl = "".concat(baseUrl).concat(apiPath.startsWith('/') ? apiPath : '/' + apiPath);
325
+ // Don't sign the request - this is for unauthenticated endpoints
326
+ return [
327
+ 2,
328
+ fetch(fullUrl, options)
329
+ ];
330
+ });
331
+ })();
310
332
  }
311
333
  };
312
334
  export function generateProject(projectName, projectDir) {
@@ -0,0 +1,457 @@
1
+ function _array_like_to_array(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _array_with_holes(arr) {
7
+ if (Array.isArray(arr)) return arr;
8
+ }
9
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
10
+ try {
11
+ var info = gen[key](arg);
12
+ var value = info.value;
13
+ } catch (error) {
14
+ reject(error);
15
+ return;
16
+ }
17
+ if (info.done) {
18
+ resolve(value);
19
+ } else {
20
+ Promise.resolve(value).then(_next, _throw);
21
+ }
22
+ }
23
+ function _async_to_generator(fn) {
24
+ return function() {
25
+ var self = this, args = arguments;
26
+ return new Promise(function(resolve, reject) {
27
+ var gen = fn.apply(self, args);
28
+ function _next(value) {
29
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
30
+ }
31
+ function _throw(err) {
32
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
33
+ }
34
+ _next(undefined);
35
+ });
36
+ };
37
+ }
38
+ function _iterable_to_array_limit(arr, i) {
39
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
40
+ if (_i == null) return;
41
+ var _arr = [];
42
+ var _n = true;
43
+ var _d = false;
44
+ var _s, _e;
45
+ try {
46
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
47
+ _arr.push(_s.value);
48
+ if (i && _arr.length === i) break;
49
+ }
50
+ } catch (err) {
51
+ _d = true;
52
+ _e = err;
53
+ } finally{
54
+ try {
55
+ if (!_n && _i["return"] != null) _i["return"]();
56
+ } finally{
57
+ if (_d) throw _e;
58
+ }
59
+ }
60
+ return _arr;
61
+ }
62
+ function _non_iterable_rest() {
63
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
64
+ }
65
+ function _sliced_to_array(arr, i) {
66
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
67
+ }
68
+ function _unsupported_iterable_to_array(o, minLen) {
69
+ if (!o) return;
70
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
71
+ var n = Object.prototype.toString.call(o).slice(8, -1);
72
+ if (n === "Object" && o.constructor) n = o.constructor.name;
73
+ if (n === "Map" || n === "Set") return Array.from(n);
74
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
75
+ }
76
+ function _ts_generator(thisArg, body) {
77
+ var f, y, t, _ = {
78
+ label: 0,
79
+ sent: function() {
80
+ if (t[0] & 1) throw t[1];
81
+ return t[1];
82
+ },
83
+ trys: [],
84
+ ops: []
85
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
86
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
87
+ return this;
88
+ }), g;
89
+ function verb(n) {
90
+ return function(v) {
91
+ return step([
92
+ n,
93
+ v
94
+ ]);
95
+ };
96
+ }
97
+ function step(op) {
98
+ if (f) throw new TypeError("Generator is already executing.");
99
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
100
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
101
+ if (y = 0, t) op = [
102
+ op[0] & 2,
103
+ t.value
104
+ ];
105
+ switch(op[0]){
106
+ case 0:
107
+ case 1:
108
+ t = op;
109
+ break;
110
+ case 4:
111
+ _.label++;
112
+ return {
113
+ value: op[1],
114
+ done: false
115
+ };
116
+ case 5:
117
+ _.label++;
118
+ y = op[1];
119
+ op = [
120
+ 0
121
+ ];
122
+ continue;
123
+ case 7:
124
+ op = _.ops.pop();
125
+ _.trys.pop();
126
+ continue;
127
+ default:
128
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
129
+ _ = 0;
130
+ continue;
131
+ }
132
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
133
+ _.label = op[1];
134
+ break;
135
+ }
136
+ if (op[0] === 6 && _.label < t[1]) {
137
+ _.label = t[1];
138
+ t = op;
139
+ break;
140
+ }
141
+ if (t && _.label < t[2]) {
142
+ _.label = t[2];
143
+ _.ops.push(op);
144
+ break;
145
+ }
146
+ if (t[2]) _.ops.pop();
147
+ _.trys.pop();
148
+ continue;
149
+ }
150
+ op = body.call(thisArg, _);
151
+ } catch (e) {
152
+ op = [
153
+ 6,
154
+ e
155
+ ];
156
+ y = 0;
157
+ } finally{
158
+ f = t = 0;
159
+ }
160
+ if (op[0] & 5) throw op[1];
161
+ return {
162
+ value: op[0] ? op[1] : void 0,
163
+ done: true
164
+ };
165
+ }
166
+ }
167
+ import React, { useState, useEffect } from 'react';
168
+ import { Box, Text, useApp } from 'ink';
169
+ import { existsSync, readdirSync } from 'fs';
170
+ import { homedir } from 'os';
171
+ import { join } from 'path';
172
+ import { convertSSHPubKeyToJWK, expandPath } from '../lib/ssh-key-utils.js';
173
+ import { SelectList } from './select-list.js';
174
+ /**
175
+ * Discover available SSH public keys in ~/.ssh
176
+ */ function discoverSSHPubKeys() {
177
+ var sshDir = join(homedir(), '.ssh');
178
+ if (!existsSync(sshDir)) {
179
+ return [];
180
+ }
181
+ var pubKeys = [];
182
+ try {
183
+ var files = readdirSync(sshDir);
184
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
185
+ try {
186
+ for(var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
187
+ var file = _step.value;
188
+ if (file.endsWith('.pub')) {
189
+ var fullPath = join(sshDir, file);
190
+ pubKeys.push({
191
+ path: fullPath,
192
+ displayPath: "~/.ssh/".concat(file)
193
+ });
194
+ }
195
+ }
196
+ } catch (err) {
197
+ _didIteratorError = true;
198
+ _iteratorError = err;
199
+ } finally{
200
+ try {
201
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
202
+ _iterator.return();
203
+ }
204
+ } finally{
205
+ if (_didIteratorError) {
206
+ throw _iteratorError;
207
+ }
208
+ }
209
+ }
210
+ } catch (e) {
211
+ return [];
212
+ }
213
+ return pubKeys;
214
+ }
215
+ /**
216
+ * Copy text to clipboard using pbcopy (macOS) or xclip (Linux)
217
+ */ function copyToClipboard(text) {
218
+ return _async_to_generator(function() {
219
+ var spawn;
220
+ return _ts_generator(this, function(_state) {
221
+ switch(_state.label){
222
+ case 0:
223
+ return [
224
+ 4,
225
+ import('child_process')
226
+ ];
227
+ case 1:
228
+ spawn = _state.sent().spawn;
229
+ return [
230
+ 2,
231
+ new Promise(function(resolve) {
232
+ var _proc_stdin, _proc_stdin1;
233
+ // Try pbcopy first (macOS)
234
+ var proc = spawn('pbcopy', [], {
235
+ stdio: [
236
+ 'pipe',
237
+ 'ignore',
238
+ 'ignore'
239
+ ]
240
+ });
241
+ proc.on('error', function() {
242
+ var _proc_stdin, _proc_stdin1;
243
+ // Try xclip (Linux)
244
+ proc = spawn('xclip', [
245
+ '-selection',
246
+ 'clipboard'
247
+ ], {
248
+ stdio: [
249
+ 'pipe',
250
+ 'ignore',
251
+ 'ignore'
252
+ ]
253
+ });
254
+ proc.on('error', function() {
255
+ resolve(false);
256
+ });
257
+ proc.on('close', function(code) {
258
+ resolve(code === 0);
259
+ });
260
+ (_proc_stdin = proc.stdin) === null || _proc_stdin === void 0 ? void 0 : _proc_stdin.write(text);
261
+ (_proc_stdin1 = proc.stdin) === null || _proc_stdin1 === void 0 ? void 0 : _proc_stdin1.end();
262
+ });
263
+ proc.on('close', function(code) {
264
+ resolve(code === 0);
265
+ });
266
+ (_proc_stdin = proc.stdin) === null || _proc_stdin === void 0 ? void 0 : _proc_stdin.write(text);
267
+ (_proc_stdin1 = proc.stdin) === null || _proc_stdin1 === void 0 ? void 0 : _proc_stdin1.end();
268
+ })
269
+ ];
270
+ }
271
+ });
272
+ })();
273
+ }
274
+ export var AuthFormatJwkKey = function(param) {
275
+ var pubkeyPath = param.pubkeyPath;
276
+ var exit = useApp().exit;
277
+ var _useState = _sliced_to_array(useState(pubkeyPath ? 'success' : 'selecting'), 2), state = _useState[0], setState = _useState[1];
278
+ var _useState1 = _sliced_to_array(useState(null), 2), error = _useState1[0], setError = _useState1[1];
279
+ var _useState2 = _sliced_to_array(useState(null), 2), jwkOutput = _useState2[0], setJwkOutput = _useState2[1];
280
+ var _useState3 = _sliced_to_array(useState(null), 2), fingerprint = _useState3[0], setFingerprint = _useState3[1];
281
+ var _useState4 = _sliced_to_array(useState(false), 2), copiedToClipboard = _useState4[0], setCopiedToClipboard = _useState4[1];
282
+ var _useState5 = _sliced_to_array(useState(pubkeyPath || null), 2), selectedPath = _useState5[0], setSelectedPath = _useState5[1];
283
+ // Handle direct path provided via --pubkey
284
+ useEffect(function() {
285
+ if (pubkeyPath && state === 'success' && !jwkOutput) {
286
+ processKey(pubkeyPath);
287
+ }
288
+ }, [
289
+ pubkeyPath,
290
+ state,
291
+ jwkOutput
292
+ ]);
293
+ var processKey = function(keyPath) {
294
+ return _async_to_generator(function() {
295
+ var expandedPath, keyInfo, jwkString, copied, err;
296
+ return _ts_generator(this, function(_state) {
297
+ switch(_state.label){
298
+ case 0:
299
+ _state.trys.push([
300
+ 0,
301
+ 2,
302
+ ,
303
+ 3
304
+ ]);
305
+ expandedPath = expandPath(keyPath);
306
+ if (!existsSync(expandedPath)) {
307
+ setError("Public key file not found: ".concat(keyPath));
308
+ setState('error');
309
+ return [
310
+ 2
311
+ ];
312
+ }
313
+ keyInfo = convertSSHPubKeyToJWK(expandedPath);
314
+ jwkString = JSON.stringify(keyInfo.jwk, null, 2);
315
+ setJwkOutput(jwkString);
316
+ setFingerprint(keyInfo.fingerprint);
317
+ setSelectedPath(keyPath);
318
+ return [
319
+ 4,
320
+ copyToClipboard(jwkString)
321
+ ];
322
+ case 1:
323
+ copied = _state.sent();
324
+ setCopiedToClipboard(copied);
325
+ setState('success');
326
+ return [
327
+ 3,
328
+ 3
329
+ ];
330
+ case 2:
331
+ err = _state.sent();
332
+ setError(err.message || 'Failed to convert key');
333
+ setState('error');
334
+ return [
335
+ 3,
336
+ 3
337
+ ];
338
+ case 3:
339
+ return [
340
+ 2
341
+ ];
342
+ }
343
+ });
344
+ })();
345
+ };
346
+ // Check for available keys when in selecting state
347
+ var pubKeys = discoverSSHPubKeys();
348
+ if (state === 'selecting' && pubKeys.length === 0) {
349
+ return /*#__PURE__*/ React.createElement(Box, {
350
+ flexDirection: "column",
351
+ paddingTop: 1,
352
+ paddingBottom: 1
353
+ }, /*#__PURE__*/ React.createElement(Text, {
354
+ color: "yellow"
355
+ }, "No SSH public keys found in ~/.ssh/"), /*#__PURE__*/ React.createElement(Box, {
356
+ marginTop: 1,
357
+ flexDirection: "column"
358
+ }, /*#__PURE__*/ React.createElement(Text, {
359
+ dimColor: true
360
+ }, "Generate a new SSH key with:"), /*#__PURE__*/ React.createElement(Box, {
361
+ marginLeft: 2,
362
+ marginTop: 1
363
+ }, /*#__PURE__*/ React.createElement(Text, {
364
+ color: "cyan"
365
+ }, 'ssh-keygen -t ed25519 -C "your-email@example.com"'))), /*#__PURE__*/ React.createElement(Box, {
366
+ marginTop: 1
367
+ }, /*#__PURE__*/ React.createElement(Text, {
368
+ dimColor: true
369
+ }, "Or specify a public key path with: px auth format-jwk-key --pubkey /path/to/key.pub")));
370
+ }
371
+ if (state === 'selecting') {
372
+ var items = pubKeys.map(function(key) {
373
+ return {
374
+ id: key.path,
375
+ label: key.displayPath,
376
+ description: ''
377
+ };
378
+ });
379
+ var handleSelect = function(item) {
380
+ return _async_to_generator(function() {
381
+ return _ts_generator(this, function(_state) {
382
+ switch(_state.label){
383
+ case 0:
384
+ return [
385
+ 4,
386
+ processKey(item.id)
387
+ ];
388
+ case 1:
389
+ _state.sent();
390
+ return [
391
+ 2
392
+ ];
393
+ }
394
+ });
395
+ })();
396
+ };
397
+ var handleCancel = function() {
398
+ exit();
399
+ };
400
+ return /*#__PURE__*/ React.createElement(SelectList, {
401
+ items: items,
402
+ header: "Select an SSH public key to convert to JWK format",
403
+ onSelect: handleSelect,
404
+ onCancel: handleCancel,
405
+ footer: "Use arrow keys to navigate, Enter to select, q to cancel"
406
+ });
407
+ }
408
+ if (state === 'error') {
409
+ return /*#__PURE__*/ React.createElement(Box, {
410
+ flexDirection: "column",
411
+ paddingTop: 1,
412
+ paddingBottom: 1
413
+ }, /*#__PURE__*/ React.createElement(Text, {
414
+ color: "red"
415
+ }, "Error: ", error));
416
+ }
417
+ if (state === 'success' && jwkOutput) {
418
+ var displayPath = (selectedPath === null || selectedPath === void 0 ? void 0 : selectedPath.startsWith(homedir())) ? selectedPath.replace(homedir(), '~') : selectedPath;
419
+ return /*#__PURE__*/ React.createElement(Box, {
420
+ flexDirection: "column",
421
+ paddingTop: 1,
422
+ paddingBottom: 1
423
+ }, /*#__PURE__*/ React.createElement(Text, {
424
+ bold: true,
425
+ color: "green"
426
+ }, "JWK Public Key"), /*#__PURE__*/ React.createElement(Box, {
427
+ marginTop: 1
428
+ }, /*#__PURE__*/ React.createElement(Text, {
429
+ dimColor: true
430
+ }, "Source: ", displayPath)), fingerprint && /*#__PURE__*/ React.createElement(Box, null, /*#__PURE__*/ React.createElement(Text, {
431
+ dimColor: true
432
+ }, "Fingerprint: ", fingerprint)), /*#__PURE__*/ React.createElement(Box, {
433
+ marginTop: 1,
434
+ flexDirection: "column"
435
+ }, /*#__PURE__*/ React.createElement(Text, {
436
+ color: "cyan"
437
+ }, jwkOutput)), /*#__PURE__*/ React.createElement(Box, {
438
+ marginTop: 1
439
+ }, copiedToClipboard ? /*#__PURE__*/ React.createElement(Text, {
440
+ color: "green"
441
+ }, "Copied to clipboard.") : /*#__PURE__*/ React.createElement(Text, {
442
+ color: "yellow"
443
+ }, "Could not copy to clipboard - copy the value above manually.")), /*#__PURE__*/ React.createElement(Box, {
444
+ marginTop: 1,
445
+ flexDirection: "column"
446
+ }, /*#__PURE__*/ React.createElement(Text, {
447
+ bold: true
448
+ }, "Next steps:"), /*#__PURE__*/ React.createElement(Box, {
449
+ marginLeft: 2,
450
+ marginTop: 1,
451
+ flexDirection: "column"
452
+ }, /*#__PURE__*/ React.createElement(Text, null, "1. Go to Cloudflare dashboard"), /*#__PURE__*/ React.createElement(Text, null, "2. Navigate to Workers & Pages ", '>', " Your project ", '>', " Settings ", '>', " Variables and Secrets"), /*#__PURE__*/ React.createElement(Text, null, "3. Add a new secret named ", /*#__PURE__*/ React.createElement(Text, {
453
+ color: "cyan"
454
+ }, "ROOT_PUBLIC_KEY")), /*#__PURE__*/ React.createElement(Text, null, "4. Paste the JWK value above"))));
455
+ }
456
+ return null;
457
+ };
@@ -218,6 +218,16 @@ function _ts_generator(thisArg, body) {
218
218
  }
219
219
  import { useState, useEffect, useCallback } from 'react';
220
220
  import { apiClient, isApiLocalDevMode } from '../commands/helpers.js';
221
+ var ROOT_KEY_NOT_CONFIGURED_ERROR = {
222
+ title: 'Root Key Not Configured',
223
+ message: 'The server does not have a root authentication key configured.',
224
+ details: "Run 'px auth format-jwk-key' to generate the key, then add ROOT_PUBLIC_KEY as a secret in your server configuration."
225
+ };
226
+ var AUTH_REQUIRED_ERROR = {
227
+ title: 'Authentication Required',
228
+ message: 'Your request could not be authenticated.',
229
+ details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
230
+ };
221
231
  function getConnectionErrorMessage() {
222
232
  if (isApiLocalDevMode()) {
223
233
  return {
@@ -233,6 +243,125 @@ function getConnectionErrorMessage() {
233
243
  };
234
244
  }
235
245
  }
246
+ /**
247
+ * Fetch auth setup instructions from the server
248
+ */ function fetchAuthSetupInstructions() {
249
+ return _async_to_generator(function() {
250
+ var response;
251
+ return _ts_generator(this, function(_state) {
252
+ switch(_state.label){
253
+ case 0:
254
+ return [
255
+ 4,
256
+ apiClient.fetchUnauthenticated('/auth/setup')
257
+ ];
258
+ case 1:
259
+ response = _state.sent();
260
+ if (!response.ok) return [
261
+ 3,
262
+ 3
263
+ ];
264
+ return [
265
+ 4,
266
+ response.json()
267
+ ];
268
+ case 2:
269
+ return [
270
+ 2,
271
+ _state.sent()
272
+ ];
273
+ case 3:
274
+ return [
275
+ 2,
276
+ null
277
+ ];
278
+ }
279
+ });
280
+ })();
281
+ }
282
+ /**
283
+ * Check if the error response indicates ROOT_KEY_NOT_CONFIGURED
284
+ */ function isRootKeyNotConfiguredError(response) {
285
+ return _async_to_generator(function() {
286
+ var clonedResponse, data, e;
287
+ return _ts_generator(this, function(_state) {
288
+ switch(_state.label){
289
+ case 0:
290
+ _state.trys.push([
291
+ 0,
292
+ 2,
293
+ ,
294
+ 3
295
+ ]);
296
+ clonedResponse = response.clone();
297
+ return [
298
+ 4,
299
+ clonedResponse.json()
300
+ ];
301
+ case 1:
302
+ data = _state.sent();
303
+ return [
304
+ 2,
305
+ data.error === 'ROOT_KEY_NOT_CONFIGURED'
306
+ ];
307
+ case 2:
308
+ e = _state.sent();
309
+ return [
310
+ 2,
311
+ false
312
+ ];
313
+ case 3:
314
+ return [
315
+ 2
316
+ ];
317
+ }
318
+ });
319
+ })();
320
+ }
321
+ /**
322
+ * Build the appropriate auth error based on the response
323
+ */ function buildAuthError(response) {
324
+ return _async_to_generator(function() {
325
+ var setupInfo;
326
+ return _ts_generator(this, function(_state) {
327
+ switch(_state.label){
328
+ case 0:
329
+ return [
330
+ 4,
331
+ isRootKeyNotConfiguredError(response)
332
+ ];
333
+ case 1:
334
+ if (!_state.sent()) return [
335
+ 3,
336
+ 3
337
+ ];
338
+ return [
339
+ 4,
340
+ fetchAuthSetupInstructions()
341
+ ];
342
+ case 2:
343
+ setupInfo = _state.sent();
344
+ if (setupInfo) {
345
+ return [
346
+ 2,
347
+ _object_spread_props(_object_spread({}, ROOT_KEY_NOT_CONFIGURED_ERROR), {
348
+ details: setupInfo.instructions
349
+ })
350
+ ];
351
+ }
352
+ return [
353
+ 2,
354
+ ROOT_KEY_NOT_CONFIGURED_ERROR
355
+ ];
356
+ case 3:
357
+ return [
358
+ 2,
359
+ AUTH_REQUIRED_ERROR
360
+ ];
361
+ }
362
+ });
363
+ })();
364
+ }
236
365
  export function useApiGet(endpoint, options) {
237
366
  var _useState = _sliced_to_array(useState(null), 2), data = _useState[0], setData = _useState[1];
238
367
  var _useState1 = _sliced_to_array(useState(true), 2), loading = _useState1[0], setLoading = _useState1[1];
@@ -246,9 +375,9 @@ export function useApiGet(endpoint, options) {
246
375
  case 0:
247
376
  _state.trys.push([
248
377
  0,
249
- 7,
250
378
  8,
251
- 9
379
+ 9,
380
+ 10
252
381
  ]);
253
382
  setLoading(true);
254
383
  setError(null);
@@ -273,41 +402,44 @@ export function useApiGet(endpoint, options) {
273
402
  setData(result);
274
403
  return [
275
404
  3,
276
- 6
405
+ 7
277
406
  ];
278
407
  case 3:
279
408
  if (!(response.status === 401)) return [
280
409
  3,
281
- 4
410
+ 5
282
411
  ];
283
- setError({
284
- title: 'Authentication Required',
285
- message: 'Your request could not be authenticated.',
286
- details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
287
- });
288
412
  return [
289
- 3,
290
- 6
413
+ 4,
414
+ buildAuthError(response)
291
415
  ];
292
416
  case 4:
417
+ setError.apply(void 0, [
418
+ _state.sent()
419
+ ]);
420
+ return [
421
+ 3,
422
+ 7
423
+ ];
424
+ case 5:
293
425
  return [
294
426
  4,
295
427
  response.text()
296
428
  ];
297
- case 5:
429
+ case 6:
298
430
  errorText = _state.sent();
299
431
  setError({
300
432
  title: 'Server Error',
301
433
  message: "Error fetching ".concat(endpoint, ": ").concat(response.status, " ").concat(response.statusText),
302
434
  details: "Server response: ".concat(errorText)
303
435
  });
304
- _state.label = 6;
305
- case 6:
436
+ _state.label = 7;
437
+ case 7:
306
438
  return [
307
439
  3,
308
- 9
440
+ 10
309
441
  ];
310
- case 7:
442
+ case 8:
311
443
  err = _state.sent();
312
444
  baseError = getConnectionErrorMessage();
313
445
  errorDetails = err.message;
@@ -319,14 +451,14 @@ export function useApiGet(endpoint, options) {
319
451
  }));
320
452
  return [
321
453
  3,
322
- 9
454
+ 10
323
455
  ];
324
- case 8:
456
+ case 9:
325
457
  setLoading(false);
326
458
  return [
327
459
  7
328
460
  ];
329
- case 9:
461
+ case 10:
330
462
  return [
331
463
  2
332
464
  ];
@@ -356,9 +488,9 @@ export function useApiPost(endpoint, defaultOptions) {
356
488
  case 0:
357
489
  _state.trys.push([
358
490
  0,
359
- 7,
360
491
  8,
361
- 9
492
+ 9,
493
+ 10
362
494
  ]);
363
495
  setLoading(true);
364
496
  setError(null);
@@ -390,21 +522,22 @@ export function useApiPost(endpoint, defaultOptions) {
390
522
  case 3:
391
523
  if (!(response.status === 401)) return [
392
524
  3,
393
- 4
525
+ 5
394
526
  ];
395
- errorObj = {
396
- title: 'Authentication Required',
397
- message: 'Your request could not be authenticated.',
398
- details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
399
- };
527
+ return [
528
+ 4,
529
+ buildAuthError(response)
530
+ ];
531
+ case 4:
532
+ errorObj = _state.sent();
400
533
  setError(errorObj);
401
534
  throw errorObj;
402
- case 4:
535
+ case 5:
403
536
  return [
404
537
  4,
405
538
  response.text()
406
539
  ];
407
- case 5:
540
+ case 6:
408
541
  errorText = _state.sent();
409
542
  errorObj1 = {
410
543
  title: 'Server Error',
@@ -413,12 +546,12 @@ export function useApiPost(endpoint, defaultOptions) {
413
546
  };
414
547
  setError(errorObj1);
415
548
  throw errorObj1;
416
- case 6:
549
+ case 7:
417
550
  return [
418
551
  3,
419
- 9
552
+ 10
420
553
  ];
421
- case 7:
554
+ case 8:
422
555
  err = _state.sent();
423
556
  // If it's already our error object, don't wrap it again
424
557
  if (err.title && err.message) {
@@ -435,12 +568,12 @@ export function useApiPost(endpoint, defaultOptions) {
435
568
  });
436
569
  setError(errorObj2);
437
570
  throw errorObj2;
438
- case 8:
571
+ case 9:
439
572
  setLoading(false);
440
573
  return [
441
574
  7
442
575
  ];
443
- case 9:
576
+ case 10:
444
577
  return [
445
578
  2
446
579
  ];
@@ -469,9 +602,9 @@ export function useApiDelete(resourceType) {
469
602
  case 0:
470
603
  _state.trys.push([
471
604
  0,
472
- 6,
473
605
  7,
474
- 8
606
+ 8,
607
+ 9
475
608
  ]);
476
609
  setLoading(true);
477
610
  setError(null);
@@ -494,21 +627,22 @@ export function useApiDelete(resourceType) {
494
627
  case 2:
495
628
  if (!(response.status === 401)) return [
496
629
  3,
497
- 3
630
+ 4
498
631
  ];
499
- errorObj = {
500
- title: 'Authentication Required',
501
- message: 'Your request could not be authenticated.',
502
- details: "Run 'px auth login' to configure your SSH key, or check that your key is registered on the server."
503
- };
632
+ return [
633
+ 4,
634
+ buildAuthError(response)
635
+ ];
636
+ case 3:
637
+ errorObj = _state.sent();
504
638
  setError(errorObj);
505
639
  throw errorObj;
506
- case 3:
640
+ case 4:
507
641
  return [
508
642
  4,
509
643
  response.text()
510
644
  ];
511
- case 4:
645
+ case 5:
512
646
  errorText = _state.sent();
513
647
  errorObj1 = {
514
648
  title: 'Server Error',
@@ -517,12 +651,12 @@ export function useApiDelete(resourceType) {
517
651
  };
518
652
  setError(errorObj1);
519
653
  throw errorObj1;
520
- case 5:
654
+ case 6:
521
655
  return [
522
656
  3,
523
- 8
657
+ 9
524
658
  ];
525
- case 6:
659
+ case 7:
526
660
  err = _state.sent();
527
661
  // If it's already our error object, don't wrap it again
528
662
  if (err.title && err.message) {
@@ -539,12 +673,12 @@ export function useApiDelete(resourceType) {
539
673
  });
540
674
  setError(errorObj2);
541
675
  throw errorObj2;
542
- case 7:
676
+ case 8:
543
677
  setLoading(false);
544
678
  return [
545
679
  7
546
680
  ];
547
- case 8:
681
+ case 9:
548
682
  return [
549
683
  2
550
684
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAK5D,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,KAAK,GAAG,CAAC;CAC9C;AAoBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,4BA+3C3C"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAK5D,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,KAAK,GAAG,CAAC;CAC9C;AAoBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,4BAu5C3C"}
@@ -8,6 +8,9 @@ interface LoginArgs {
8
8
  interface LogoutArgs {
9
9
  project?: boolean;
10
10
  }
11
+ interface FormatJwkKeyArgs {
12
+ pubkey?: string;
13
+ }
11
14
  export declare class AuthCommand {
12
15
  private configManager;
13
16
  constructor(configManager?: ProjectConfigManager);
@@ -31,6 +34,11 @@ export declare class AuthCommand {
31
34
  * List available SSH keys.
32
35
  */
33
36
  list(): React.ReactElement;
37
+ /**
38
+ * Handles the 'px auth format-jwk-key' command.
39
+ * Convert an SSH public key to JWK format for ROOT_PUBLIC_KEY configuration.
40
+ */
41
+ formatJwkKey({ pubkey }: ArgumentsCamelCase<FormatJwkKeyArgs>): React.ReactElement;
34
42
  }
35
43
  export {};
36
44
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAuB;gBAEhC,aAAa,CAAC,EAAE,oBAAoB;IAIhD;;;OAGG;IACH,MAAM,IAAI,KAAK,CAAC,YAAY;IAM5B;;;OAGG;IACH,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,YAAY;IAQ3E;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,YAAY;IAOvE;;;OAGG;IACH,IAAI,IAAI,KAAK,CAAC,YAAY;CAK3B"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,UAAU;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAAuB;gBAEhC,aAAa,CAAC,EAAE,oBAAoB;IAIhD;;;OAGG;IACH,MAAM,IAAI,KAAK,CAAC,YAAY;IAM5B;;;OAGG;IACH,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,YAAY;IAQ3E;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,kBAAkB,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,YAAY;IAOvE;;;OAGG;IACH,IAAI,IAAI,KAAK,CAAC,YAAY;IAM1B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,YAAY;CAKnF"}
@@ -24,6 +24,10 @@ export declare function isApiLocalDevMode(): boolean;
24
24
  export declare function getApiBaseUrl(): string;
25
25
  export declare const apiClient: {
26
26
  fetch: (apiPath: string, options?: RequestInit) => Promise<Response>;
27
+ /**
28
+ * Fetch without authentication - used for unauthenticated endpoints like /auth/setup
29
+ */
30
+ fetchUnauthenticated: (apiPath: string, options?: RequestInit) => Promise<Response>;
27
31
  };
28
32
  export declare function generateProject(projectName: string, projectDir: string): Promise<void>;
29
33
  export declare function scanLocalResources(resourcesDir: string): ResourceEntry[];
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;AAGhE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAMzC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc,GAAG,IAAI,CAGtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAGD,eAAO,MAAM,SAAS;qBACG,MAAM,YAAY,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC;CAgDzE,CAAC;AAEF,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAsF5E;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAsCxE;AAeD,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5B,KAAK,IAAI,CAAC;AAEX;;GAEG;AACH,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,SAAqB,EAC7B,UAAU,CAAC,EAAE,oBAAoB,GAChC,OAAO,CAAC,UAAU,CAAC,CA+KrB;AAqKD;;GAEG;AACH,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,SAAqB,mBAoB9B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAwCnE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAO3E;AAsCD;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAO,GACf,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,SAAqB,EAC7B,UAAU,CAAC,EAAE,gBAAgB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA2If"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/commands/helpers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAUtD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;AAGhE,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAMzC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc,GAAG,IAAI,CAGtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAGD,eAAO,MAAM,SAAS;qBACG,MAAM,YAAY,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC;IAiDxE;;OAEG;oCACmC,MAAM,YAAY,WAAW,KAAG,OAAO,CAAC,QAAQ,CAAC;CAkBxF,CAAC;AAEF,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAsF5E;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE,CAsCxE;AAeD,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,UAAU,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5B,KAAK,IAAI,CAAC;AAEX;;GAEG;AACH,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,SAAqB,EAC7B,UAAU,CAAC,EAAE,oBAAoB,GAChC,OAAO,CAAC,UAAU,CAAC,CA+KrB;AAqKD;;GAEG;AACH,wBAAsB,aAAa,CACjC,eAAe,EAAE,MAAM,EACvB,MAAM,GAAE,SAAqB,mBAoB9B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAwCnE;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAO3E;AAsCD;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,CAAC,EAAE,MAAM,EACb,SAAS,SAAO,GACf,OAAO,CAAC,OAAO,CAAC,CAsBlB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,SAAqB,EAC7B,UAAU,CAAC,EAAE,gBAAgB,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA2If"}
@@ -0,0 +1,6 @@
1
+ interface AuthFormatJwkKeyProps {
2
+ pubkeyPath?: string;
3
+ }
4
+ export declare const AuthFormatJwkKey: ({ pubkeyPath }: AuthFormatJwkKeyProps) => import("react/jsx-runtime").JSX.Element | null;
5
+ export {};
6
+ //# sourceMappingURL=auth-format-jwk-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-format-jwk-key.d.ts","sourceRoot":"","sources":["../../../src/components/auth-format-jwk-key.tsx"],"names":[],"mappings":"AAQA,UAAU,qBAAqB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAoED,eAAO,MAAM,gBAAgB,GAAI,gBAAgB,qBAAqB,mDAgJrE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../../src/hooks/useApi.ts"],"names":[],"mappings":"AAmBA,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;;;;eAIjD,MAAM;iBACJ,MAAM;kBACL,MAAM;;EAoDnB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG;;;;eAIzD,MAAM;iBACJ,MAAM;kBACL,MAAM;;qBAIF,GAAG,YAAY,GAAG;EA8DnC;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM;;;eAGtC,MAAM;iBACJ,MAAM;kBACL,MAAM;;wBAIC,MAAM,YAAY,GAAG;EA0DzC"}
1
+ {"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../../src/hooks/useApi.ts"],"names":[],"mappings":"AA2EA,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;;;;eAIjD,MAAM;iBACJ,MAAM;kBACL,MAAM;;EAgDnB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,GAAG;;;;eAIzD,MAAM;iBACJ,MAAM;kBACL,MAAM;;qBAIF,GAAG,YAAY,GAAG;EA0DnC;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM;;;eAGtC,MAAM;iBACJ,MAAM;kBACL,MAAM;;wBAIC,MAAM,YAAY,GAAG;EAsDzC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@positronic/cli",
3
- "version": "0.0.57",
3
+ "version": "0.0.58",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -23,9 +23,9 @@
23
23
  "clean": "rm -rf tsconfig.tsbuildinfo dist node_modules"
24
24
  },
25
25
  "dependencies": {
26
- "@positronic/core": "^0.0.57",
27
- "@positronic/spec": "^0.0.57",
28
- "@positronic/template-new-project": "^0.0.57",
26
+ "@positronic/core": "^0.0.58",
27
+ "@positronic/spec": "^0.0.58",
28
+ "@positronic/template-new-project": "^0.0.58",
29
29
  "caz": "^2.0.0",
30
30
  "chokidar": "^3.6.0",
31
31
  "dotenv": "^16.4.7",