playcademy 0.14.33 → 0.14.34
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/cli.js +4 -2
- package/dist/constants/src/domains.ts +7 -0
- package/dist/index.d.ts +162 -122
- package/dist/index.js +303 -105
- package/dist/utils.js +4 -2
- package/dist/version.js +4 -2
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -712,6 +712,7 @@ var GAME_WORKER_DOMAINS = {
|
|
|
712
712
|
production: "playcademy.gg",
|
|
713
713
|
staging: "staging.playcademy.gg"
|
|
714
714
|
};
|
|
715
|
+
var LOG_COLLECTOR_URL = "https://logs.playcademy.gg";
|
|
715
716
|
|
|
716
717
|
// ../constants/src/overworld.ts
|
|
717
718
|
var ITEM_SLUGS = {
|
|
@@ -3959,7 +3960,7 @@ import { join as join12 } from "path";
|
|
|
3959
3960
|
// package.json with { type: 'json' }
|
|
3960
3961
|
var package_default2 = {
|
|
3961
3962
|
name: "playcademy",
|
|
3962
|
-
version: "0.14.
|
|
3963
|
+
version: "0.14.33",
|
|
3963
3964
|
type: "module",
|
|
3964
3965
|
exports: {
|
|
3965
3966
|
".": {
|
|
@@ -4022,7 +4023,8 @@ var package_default2 = {
|
|
|
4022
4023
|
"json-colorizer": "^3.0.1",
|
|
4023
4024
|
jszip: "^3.10.1",
|
|
4024
4025
|
miniflare: "^4.20251008.0",
|
|
4025
|
-
open: "^10.2.0"
|
|
4026
|
+
open: "^10.2.0",
|
|
4027
|
+
ws: "^8.18.3"
|
|
4026
4028
|
},
|
|
4027
4029
|
devDependencies: {
|
|
4028
4030
|
"@cloudflare/workers-types": "^4.20251011.0",
|
|
@@ -4032,6 +4034,7 @@ var package_default2 = {
|
|
|
4032
4034
|
"@playcademy/timeback": "workspace:*",
|
|
4033
4035
|
"@playcademy/utils": "workspace:*",
|
|
4034
4036
|
"@types/bun": "latest",
|
|
4037
|
+
"@types/ws": "^8.18.1",
|
|
4035
4038
|
bumpp: "^10.2.3",
|
|
4036
4039
|
rollup: "^4.50.2",
|
|
4037
4040
|
"rollup-plugin-dts": "^6.2.3"
|
|
@@ -9421,8 +9424,155 @@ async function uploadFilesLocal(files, prefix, uploadFn) {
|
|
|
9421
9424
|
return files.length;
|
|
9422
9425
|
}
|
|
9423
9426
|
|
|
9427
|
+
// src/lib/logs/display.ts
|
|
9428
|
+
import { blue as blue3, bold as bold7, cyan as cyan7, dim as dim9, gray as gray2, green as green7, red as red5, yellow as yellow5 } from "colorette";
|
|
9429
|
+
var LEVEL_COLORS = {
|
|
9430
|
+
log: gray2,
|
|
9431
|
+
info: blue3,
|
|
9432
|
+
warn: yellow5,
|
|
9433
|
+
error: red5,
|
|
9434
|
+
debug: dim9
|
|
9435
|
+
};
|
|
9436
|
+
var OUTCOME_COLORS = {
|
|
9437
|
+
ok: green7,
|
|
9438
|
+
exception: red5,
|
|
9439
|
+
exceededCpu: red5,
|
|
9440
|
+
exceededMemory: red5,
|
|
9441
|
+
canceled: yellow5,
|
|
9442
|
+
scriptNotFound: red5,
|
|
9443
|
+
unknown: gray2
|
|
9444
|
+
};
|
|
9445
|
+
function formatTime2(timestamp5) {
|
|
9446
|
+
const date = new Date(timestamp5);
|
|
9447
|
+
return date.toLocaleTimeString("en-US", {
|
|
9448
|
+
hour: "numeric",
|
|
9449
|
+
minute: "2-digit",
|
|
9450
|
+
second: "2-digit",
|
|
9451
|
+
hour12: true
|
|
9452
|
+
});
|
|
9453
|
+
}
|
|
9454
|
+
var HTTP_STATUS_TEXT = {
|
|
9455
|
+
200: "OK",
|
|
9456
|
+
201: "Created",
|
|
9457
|
+
204: "No Content",
|
|
9458
|
+
301: "Moved Permanently",
|
|
9459
|
+
302: "Found",
|
|
9460
|
+
304: "Not Modified",
|
|
9461
|
+
400: "Bad Request",
|
|
9462
|
+
401: "Unauthorized",
|
|
9463
|
+
403: "Forbidden",
|
|
9464
|
+
404: "Not Found",
|
|
9465
|
+
405: "Method Not Allowed",
|
|
9466
|
+
409: "Conflict",
|
|
9467
|
+
422: "Unprocessable Entity",
|
|
9468
|
+
429: "Too Many Requests",
|
|
9469
|
+
500: "Internal Server Error",
|
|
9470
|
+
502: "Bad Gateway",
|
|
9471
|
+
503: "Service Unavailable",
|
|
9472
|
+
504: "Gateway Timeout"
|
|
9473
|
+
};
|
|
9474
|
+
function formatStatus(status) {
|
|
9475
|
+
const text5 = HTTP_STATUS_TEXT[status] ?? "";
|
|
9476
|
+
const colorFn = status >= 500 ? red5 : status >= 400 ? yellow5 : status >= 300 ? blue3 : status >= 200 ? green7 : gray2;
|
|
9477
|
+
const boldCode = colorFn(bold7(String(status)));
|
|
9478
|
+
return text5 ? `${boldCode} ${colorFn(text5)}` : boldCode;
|
|
9479
|
+
}
|
|
9480
|
+
function stripLogPrefix(message) {
|
|
9481
|
+
const prefixPattern = /^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z?\s*)?(LOG|INFO|WARN|ERROR|DEBUG)\s*/i;
|
|
9482
|
+
return message.replace(prefixPattern, "");
|
|
9483
|
+
}
|
|
9484
|
+
function formatValue(value) {
|
|
9485
|
+
if (typeof value === "string") return stripLogPrefix(value);
|
|
9486
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
9487
|
+
if (value === null) return "null";
|
|
9488
|
+
if (value === void 0) return "undefined";
|
|
9489
|
+
try {
|
|
9490
|
+
return JSON.stringify(value, null, 2);
|
|
9491
|
+
} catch {
|
|
9492
|
+
return String(value);
|
|
9493
|
+
}
|
|
9494
|
+
}
|
|
9495
|
+
function displayLogEntry(entry) {
|
|
9496
|
+
const time = dim9(formatTime2(entry.timestamp));
|
|
9497
|
+
const outcomeColor = OUTCOME_COLORS[entry.outcome] ?? gray2;
|
|
9498
|
+
const outcome = outcomeColor(entry.outcome.toUpperCase());
|
|
9499
|
+
if (entry.request) {
|
|
9500
|
+
const method = cyan7(bold7(entry.request.method));
|
|
9501
|
+
const urlObj = new URL(entry.request.url);
|
|
9502
|
+
const url = urlObj.pathname + urlObj.search;
|
|
9503
|
+
const status = entry.response?.status;
|
|
9504
|
+
let statusPart = "";
|
|
9505
|
+
if (status) {
|
|
9506
|
+
statusPart = formatStatus(status);
|
|
9507
|
+
if (entry.outcome !== "ok") {
|
|
9508
|
+
statusPart += ` ${outcome}`;
|
|
9509
|
+
}
|
|
9510
|
+
} else {
|
|
9511
|
+
statusPart = outcome;
|
|
9512
|
+
}
|
|
9513
|
+
logger.raw(`${time} ${method} ${url} ${statusPart}`);
|
|
9514
|
+
}
|
|
9515
|
+
for (const log2 of entry.logs) {
|
|
9516
|
+
const levelColor = LEVEL_COLORS[log2.level] ?? gray2;
|
|
9517
|
+
const level = levelColor(bold7(log2.level.toUpperCase()));
|
|
9518
|
+
const message = log2.message.map(formatValue).join(" ");
|
|
9519
|
+
logger.raw(`${time} ${level} ${message}`);
|
|
9520
|
+
}
|
|
9521
|
+
for (const exception of entry.exceptions) {
|
|
9522
|
+
const level = red5(bold7("ERROR"));
|
|
9523
|
+
logger.raw(`${time} ${level} ${exception.name}: ${exception.message}`);
|
|
9524
|
+
}
|
|
9525
|
+
}
|
|
9526
|
+
|
|
9527
|
+
// src/lib/logs/stream.ts
|
|
9528
|
+
import WebSocket from "ws";
|
|
9529
|
+
function buildLogStreamUrl(options) {
|
|
9530
|
+
const { workerId, token, history } = options;
|
|
9531
|
+
const wsBaseUrl = LOG_COLLECTOR_URL.replace("https://", "wss://");
|
|
9532
|
+
const url = new URL(`${wsBaseUrl}/logs/${workerId}/stream`);
|
|
9533
|
+
url.searchParams.set("token", token);
|
|
9534
|
+
if (history) url.searchParams.set("history", "true");
|
|
9535
|
+
return url.toString();
|
|
9536
|
+
}
|
|
9537
|
+
async function connectToLogStream(config) {
|
|
9538
|
+
const { url, slug, environment } = config;
|
|
9539
|
+
const ws = new WebSocket(url);
|
|
9540
|
+
ws.on("open", () => {
|
|
9541
|
+
logger.success(`Connected to ${environment} logs for "${slug}"`);
|
|
9542
|
+
logger.newLine();
|
|
9543
|
+
logger.dim("Press ctrl+c to stop", 1);
|
|
9544
|
+
logger.newLine();
|
|
9545
|
+
});
|
|
9546
|
+
ws.on("message", (data) => {
|
|
9547
|
+
try {
|
|
9548
|
+
const entry = JSON.parse(data.toString());
|
|
9549
|
+
displayLogEntry(entry);
|
|
9550
|
+
} catch {
|
|
9551
|
+
logger.raw(data.toString());
|
|
9552
|
+
}
|
|
9553
|
+
});
|
|
9554
|
+
ws.on("error", (error) => {
|
|
9555
|
+
logger.newLine();
|
|
9556
|
+
logger.error(`WebSocket error: ${error.message}`);
|
|
9557
|
+
process.exit(1);
|
|
9558
|
+
});
|
|
9559
|
+
ws.on("close", (code, reason) => {
|
|
9560
|
+
logger.newLine();
|
|
9561
|
+
if (code !== 1e3) {
|
|
9562
|
+
logger.warn(`Connection closed: ${code} ${reason.toString()}`);
|
|
9563
|
+
}
|
|
9564
|
+
process.exit(0);
|
|
9565
|
+
});
|
|
9566
|
+
process.on("SIGINT", () => {
|
|
9567
|
+
logger.newLine();
|
|
9568
|
+
ws.close(1e3, "User interrupted");
|
|
9569
|
+
});
|
|
9570
|
+
await new Promise(() => {
|
|
9571
|
+
});
|
|
9572
|
+
}
|
|
9573
|
+
|
|
9424
9574
|
// src/lib/timeback/display.ts
|
|
9425
|
-
import { bold as
|
|
9575
|
+
import { bold as bold8, greenBright as greenBright2, redBright as redBright2 } from "colorette";
|
|
9426
9576
|
function displayIntegrationDetails(integration) {
|
|
9427
9577
|
logger.highlight("Verified Course");
|
|
9428
9578
|
logger.newLine();
|
|
@@ -9459,9 +9609,9 @@ function displayIntegrationList(integrations, statusByCourseId, options) {
|
|
|
9459
9609
|
if (showStatusColumn) {
|
|
9460
9610
|
if (options?.staticLabel) {
|
|
9461
9611
|
const coloredLabel = options.staticLabelColor ? options.staticLabelColor(options.staticLabel) : greenBright2(options.staticLabel);
|
|
9462
|
-
statusText =
|
|
9612
|
+
statusText = bold8(coloredLabel);
|
|
9463
9613
|
} else if (statusByCourseId && integration.courseId in statusByCourseId) {
|
|
9464
|
-
statusText = statusByCourseId[integration.courseId] ?
|
|
9614
|
+
statusText = statusByCourseId[integration.courseId] ? bold8(greenBright2(successLabel)) : bold8(redBright2(failureLabel));
|
|
9465
9615
|
}
|
|
9466
9616
|
}
|
|
9467
9617
|
const row = {
|
|
@@ -9495,7 +9645,7 @@ function displayCleanupWarning(integrations, gameName, logger2) {
|
|
|
9495
9645
|
}
|
|
9496
9646
|
|
|
9497
9647
|
// src/lib/timeback/setup.ts
|
|
9498
|
-
import { bold as
|
|
9648
|
+
import { bold as bold9 } from "colorette";
|
|
9499
9649
|
function displaySetupDryRun(derivedRequest, env, logger2) {
|
|
9500
9650
|
logger2.highlight("TimeBack Setup [DRY RUN]");
|
|
9501
9651
|
logger2.newLine();
|
|
@@ -9525,7 +9675,7 @@ function displaySetupDryRun(derivedRequest, env, logger2) {
|
|
|
9525
9675
|
logger2.admonition("tip", "Ready for setup", [
|
|
9526
9676
|
"Your Timeback configuration has been validated!",
|
|
9527
9677
|
"",
|
|
9528
|
-
`Run without \`--dry-run\` to create ${
|
|
9678
|
+
`Run without \`--dry-run\` to create ${bold9(`${derivedRequest.courses.length} course(s)`)} in ${bold9(env || "staging")}`
|
|
9529
9679
|
]);
|
|
9530
9680
|
logger2.newLine();
|
|
9531
9681
|
}
|
|
@@ -9631,7 +9781,7 @@ function displayVerificationSummary(result, options) {
|
|
|
9631
9781
|
}
|
|
9632
9782
|
|
|
9633
9783
|
// src/lib/domains/display.ts
|
|
9634
|
-
import { cyanBright, gray as
|
|
9784
|
+
import { cyanBright, gray as gray3, greenBright as greenBright3, redBright as redBright3, yellowBright as yellowBright2 } from "colorette";
|
|
9635
9785
|
function colorizeStatus(status) {
|
|
9636
9786
|
switch (status) {
|
|
9637
9787
|
case "active":
|
|
@@ -9648,7 +9798,7 @@ function colorizeStatus(status) {
|
|
|
9648
9798
|
case "pending_deletion":
|
|
9649
9799
|
return redBright3(status);
|
|
9650
9800
|
default:
|
|
9651
|
-
return
|
|
9801
|
+
return gray3(status);
|
|
9652
9802
|
}
|
|
9653
9803
|
}
|
|
9654
9804
|
function displayDomainStatus(hostname, domain) {
|
|
@@ -9906,7 +10056,7 @@ initCommand.addCommand(configCommand);
|
|
|
9906
10056
|
// src/commands/login.ts
|
|
9907
10057
|
import { userInfo } from "os";
|
|
9908
10058
|
import { input as input4, password, select as select6 } from "@inquirer/prompts";
|
|
9909
|
-
import { bold as
|
|
10059
|
+
import { bold as bold10, dim as dim10, whiteBright } from "colorette";
|
|
9910
10060
|
import { Command as Command3 } from "commander";
|
|
9911
10061
|
import open from "open";
|
|
9912
10062
|
var loginCommand = new Command3("login").description("Authenticate with Playcademy").option("-e, --email <email>", "Email address (for email/password auth)").option("-p, --password <password>", "Password (for email/password auth)").option("--sso", "Use Timeback SSO authentication").option("--env <environment>", "Environment to login to (staging or production)").action(async (options) => {
|
|
@@ -9920,12 +10070,12 @@ var loginCommand = new Command3("login").description("Authenticate with Playcade
|
|
|
9920
10070
|
const otherEnv = environment === "staging" ? "production" : "staging";
|
|
9921
10071
|
const otherProfile = await getProfile(otherEnv, profileName);
|
|
9922
10072
|
logger.admonition("note", "Hello again", [
|
|
9923
|
-
|
|
10073
|
+
bold10("You're already logged in"),
|
|
9924
10074
|
"",
|
|
9925
|
-
|
|
9926
|
-
|
|
9927
|
-
|
|
9928
|
-
...otherProfile ? [
|
|
10075
|
+
dim10("Email: ") + bold10(email2),
|
|
10076
|
+
dim10("Environment: ") + bold10(environment),
|
|
10077
|
+
dim10("Profile: ") + bold10(profileName),
|
|
10078
|
+
...otherProfile ? [dim10("Other Profile: ") + bold10(otherEnv)] : []
|
|
9929
10079
|
]);
|
|
9930
10080
|
logger.newLine();
|
|
9931
10081
|
return;
|
|
@@ -10057,7 +10207,7 @@ async function handleSsoLogin(environment, profileName) {
|
|
|
10057
10207
|
logger.admonition("warning", "Your API Key", [
|
|
10058
10208
|
"Save this key securely - it will not be shown again!",
|
|
10059
10209
|
"",
|
|
10060
|
-
whiteBright(
|
|
10210
|
+
whiteBright(bold10(apiKeyResult.apiKey))
|
|
10061
10211
|
]);
|
|
10062
10212
|
logger.newLine();
|
|
10063
10213
|
await runStep(
|
|
@@ -10123,9 +10273,53 @@ var logoutCommand = new Command4("logout").description("Log out from Playcademy"
|
|
|
10123
10273
|
}
|
|
10124
10274
|
});
|
|
10125
10275
|
|
|
10126
|
-
// src/commands/
|
|
10276
|
+
// src/commands/logs/index.ts
|
|
10127
10277
|
import { Command as Command5 } from "commander";
|
|
10128
|
-
|
|
10278
|
+
import { ApiError as ApiError4 } from "@playcademy/sdk/internal";
|
|
10279
|
+
async function runLogs(slugArg, options) {
|
|
10280
|
+
try {
|
|
10281
|
+
logger.newLine();
|
|
10282
|
+
const environment = ensureEnvironment(options.env);
|
|
10283
|
+
let slug;
|
|
10284
|
+
if (slugArg) {
|
|
10285
|
+
slug = slugArg;
|
|
10286
|
+
} else {
|
|
10287
|
+
try {
|
|
10288
|
+
await findConfigPath();
|
|
10289
|
+
const config = await loadConfig();
|
|
10290
|
+
slug = getSlugFromConfig(config);
|
|
10291
|
+
} catch {
|
|
10292
|
+
logger.error("No slug provided and no config file found");
|
|
10293
|
+
logger.newLine();
|
|
10294
|
+
process.exit(1);
|
|
10295
|
+
}
|
|
10296
|
+
}
|
|
10297
|
+
const client = await requireAuthenticatedClient();
|
|
10298
|
+
let token;
|
|
10299
|
+
let workerId;
|
|
10300
|
+
try {
|
|
10301
|
+
const result = await client.dev.games.logs.getToken(slug, environment);
|
|
10302
|
+
token = result.token;
|
|
10303
|
+
workerId = result.workerId;
|
|
10304
|
+
} catch (error) {
|
|
10305
|
+
if (error instanceof ApiError4 && error.status === 404) {
|
|
10306
|
+
logger.error(`Project not found: "${slug}"`);
|
|
10307
|
+
logger.newLine();
|
|
10308
|
+
process.exit(1);
|
|
10309
|
+
}
|
|
10310
|
+
throw error;
|
|
10311
|
+
}
|
|
10312
|
+
const url = buildLogStreamUrl({ workerId, token, history: options.history });
|
|
10313
|
+
await connectToLogStream({ url, slug, environment });
|
|
10314
|
+
} catch (error) {
|
|
10315
|
+
logAndExit(error, { prefix: "Failed to stream logs" });
|
|
10316
|
+
}
|
|
10317
|
+
}
|
|
10318
|
+
var logsCommand = new Command5("logs").description("Stream real-time logs from a deployed app").argument("[slug]", "Game slug (uses config file if not provided)").option("--env <environment>", "Environment (production or staging)").option("--history", "Include recent log history (default: false)").action(runLogs);
|
|
10319
|
+
|
|
10320
|
+
// src/commands/me/index.ts
|
|
10321
|
+
import { Command as Command6 } from "commander";
|
|
10322
|
+
var meCommand = new Command6("me").description("Display current user information").option(
|
|
10129
10323
|
"--env <environment>",
|
|
10130
10324
|
"Environment to check user information from (staging or production)"
|
|
10131
10325
|
).action(async (options) => {
|
|
@@ -10165,21 +10359,21 @@ var meCommand = new Command5("me").description("Display current user information
|
|
|
10165
10359
|
|
|
10166
10360
|
// src/commands/update/index.ts
|
|
10167
10361
|
import { execSync as execSync8 } from "child_process";
|
|
10168
|
-
import { bold as
|
|
10169
|
-
import { Command as
|
|
10362
|
+
import { bold as bold11 } from "colorette";
|
|
10363
|
+
import { Command as Command7 } from "commander";
|
|
10170
10364
|
var updateCommands = {
|
|
10171
10365
|
bun: "bun install -g playcademy@latest",
|
|
10172
10366
|
npm: "npm install -g playcademy@latest",
|
|
10173
10367
|
pnpm: "pnpm add -g playcademy@latest",
|
|
10174
10368
|
yarn: "yarn global add playcademy@latest"
|
|
10175
10369
|
};
|
|
10176
|
-
var updateCommand = new
|
|
10370
|
+
var updateCommand = new Command7("update").description("Update the Playcademy CLI to the latest version").action(async () => {
|
|
10177
10371
|
const runnerPath = executorIsPackageRunner();
|
|
10178
10372
|
if (runnerPath) {
|
|
10179
10373
|
const runnerName = getPackageRunnerName(runnerPath);
|
|
10180
10374
|
logger.newLine();
|
|
10181
10375
|
logger.admonition("info", "Package Runner Detected", [
|
|
10182
|
-
`You are running the CLI via package runner (${
|
|
10376
|
+
`You are running the CLI via package runner (${bold11(runnerName)}).`,
|
|
10183
10377
|
"",
|
|
10184
10378
|
"Package runners use the latest version of the CLI by default, but may cache older versions.",
|
|
10185
10379
|
`To ensure you run the package's latest version: \`${runnerName} playcademy@latest\``
|
|
@@ -10205,7 +10399,7 @@ var updateCommand = new Command6("update").description("Update the Playcademy CL
|
|
|
10205
10399
|
});
|
|
10206
10400
|
|
|
10207
10401
|
// src/commands/deploy/index.ts
|
|
10208
|
-
import { Command as
|
|
10402
|
+
import { Command as Command8 } from "commander";
|
|
10209
10403
|
async function executeDeployment(plan, context2, environment) {
|
|
10210
10404
|
const result = await deployGame(context2, plan.shouldUploadBuild, plan.shouldDeployBackend);
|
|
10211
10405
|
const game = result.game;
|
|
@@ -10267,7 +10461,7 @@ async function runDeployment(options) {
|
|
|
10267
10461
|
reportDeploymentSuccess(result, context2);
|
|
10268
10462
|
}
|
|
10269
10463
|
}
|
|
10270
|
-
var deployCommand = new
|
|
10464
|
+
var deployCommand = new Command8("deploy").description("Deploy your project to Playcademy").option("-c, --config <path>", "Path to configuration file").option("-n, --name <name>", "Display name").option("-d, --description <desc>", "App description").option("-e, --emoji <emoji>", "App emoji").option("-b, --build <path>", "Path to zip file").option("--env <environment>", "Deployment environment (production or staging)").option("--backend", "Deploy backend (API routes + database + integrations)").option("--no-backend", "Skip backend deployment").option("--force-backend", "Force backend deployment even if no changes detected").option("--dry-run", "Validate configuration without deploying").option("-v, --verbose", "Show verbose output").option("--debug", "Show debug information (change detection, hashes, etc.)").action(async (options) => {
|
|
10271
10465
|
try {
|
|
10272
10466
|
await runDeployment(options);
|
|
10273
10467
|
} catch (error) {
|
|
@@ -10281,12 +10475,12 @@ var deployCommand = new Command7("deploy").description("Deploy your project to P
|
|
|
10281
10475
|
});
|
|
10282
10476
|
|
|
10283
10477
|
// src/commands/projects/index.ts
|
|
10284
|
-
import { Command as
|
|
10478
|
+
import { Command as Command11 } from "commander";
|
|
10285
10479
|
|
|
10286
10480
|
// src/commands/projects/delete.ts
|
|
10287
10481
|
import { confirm as confirm7, input as input5, select as select7 } from "@inquirer/prompts";
|
|
10288
|
-
import { Command as
|
|
10289
|
-
var deleteCommand = new
|
|
10482
|
+
import { Command as Command9 } from "commander";
|
|
10483
|
+
var deleteCommand = new Command9("delete").alias("rm").alias("remove").description("Delete a project").argument("[slug]", "Project slug to delete").option("-f, --force", "Skip confirmation prompt").option("--env <environment>", "Environment to delete project from (staging or production)").action(async (slug, options) => {
|
|
10290
10484
|
const { env } = options;
|
|
10291
10485
|
try {
|
|
10292
10486
|
const environment = ensureEnvironment(env);
|
|
@@ -10378,8 +10572,8 @@ var deleteCommand = new Command8("delete").alias("rm").alias("remove").descripti
|
|
|
10378
10572
|
});
|
|
10379
10573
|
|
|
10380
10574
|
// src/commands/projects/list.ts
|
|
10381
|
-
import { Command as
|
|
10382
|
-
var listCommand = new
|
|
10575
|
+
import { Command as Command10 } from "commander";
|
|
10576
|
+
var listCommand = new Command10("list").alias("ls").description("List your projects").option("--env <environment>", "Environment to list projects from (staging or production)").action(async (options) => {
|
|
10383
10577
|
const { env } = options;
|
|
10384
10578
|
try {
|
|
10385
10579
|
const environment = ensureEnvironment(env);
|
|
@@ -10413,16 +10607,16 @@ var listCommand = new Command9("list").alias("ls").description("List your projec
|
|
|
10413
10607
|
});
|
|
10414
10608
|
|
|
10415
10609
|
// src/commands/projects/index.ts
|
|
10416
|
-
var projectsCommand = new
|
|
10610
|
+
var projectsCommand = new Command11("projects").description("Manage deployed projects");
|
|
10417
10611
|
projectsCommand.addCommand(listCommand);
|
|
10418
10612
|
projectsCommand.addCommand(deleteCommand);
|
|
10419
10613
|
|
|
10420
10614
|
// src/commands/dev/index.ts
|
|
10421
|
-
import { Command as
|
|
10615
|
+
import { Command as Command14 } from "commander";
|
|
10422
10616
|
|
|
10423
10617
|
// src/commands/dev/apply.ts
|
|
10424
|
-
import { Command as
|
|
10425
|
-
var applyCommand = new
|
|
10618
|
+
import { Command as Command12 } from "commander";
|
|
10619
|
+
var applyCommand = new Command12("apply").description("Apply for developer status").option(
|
|
10426
10620
|
"--env <environment>",
|
|
10427
10621
|
"Environment to apply for developer status in (staging or production)"
|
|
10428
10622
|
).action(async (options) => {
|
|
@@ -10473,8 +10667,8 @@ var applyCommand = new Command11("apply").description("Apply for developer statu
|
|
|
10473
10667
|
});
|
|
10474
10668
|
|
|
10475
10669
|
// src/commands/dev/get-status.ts
|
|
10476
|
-
import { Command as
|
|
10477
|
-
var getStatusCommand = new
|
|
10670
|
+
import { Command as Command13 } from "commander";
|
|
10671
|
+
var getStatusCommand = new Command13("status").description("Check your developer status").option(
|
|
10478
10672
|
"--env <environment>",
|
|
10479
10673
|
"Environment to check developer status from (staging or production)"
|
|
10480
10674
|
).action(async (options) => {
|
|
@@ -10517,7 +10711,7 @@ var getStatusCommand = new Command12("status").description("Check your developer
|
|
|
10517
10711
|
});
|
|
10518
10712
|
|
|
10519
10713
|
// package.json
|
|
10520
|
-
var version2 = "0.14.
|
|
10714
|
+
var version2 = "0.14.33";
|
|
10521
10715
|
|
|
10522
10716
|
// src/commands/dev/server.ts
|
|
10523
10717
|
function setupCleanupHandlers(workspace, getServer) {
|
|
@@ -10603,12 +10797,12 @@ async function runDevServer(options) {
|
|
|
10603
10797
|
}
|
|
10604
10798
|
|
|
10605
10799
|
// src/commands/dev/index.ts
|
|
10606
|
-
var devCommand = new
|
|
10800
|
+
var devCommand = new Command14("dev").description("Start local backend development server").option("-p, --port <port>", "Backend server port", String(DEFAULT_PORTS.BACKEND)).option("--no-reload", "Disable hot reload").option("--no-logger", "Disable HTTP request logging").option("-q, --quiet", "Quiet mode").action(runDevServer);
|
|
10607
10801
|
devCommand.addCommand(applyCommand);
|
|
10608
10802
|
devCommand.addCommand(getStatusCommand);
|
|
10609
10803
|
|
|
10610
10804
|
// src/commands/api/index.ts
|
|
10611
|
-
import { Command as
|
|
10805
|
+
import { Command as Command15 } from "commander";
|
|
10612
10806
|
|
|
10613
10807
|
// src/commands/api/init.ts
|
|
10614
10808
|
import { input as input6 } from "@inquirer/prompts";
|
|
@@ -10697,19 +10891,19 @@ async function runApiInit() {
|
|
|
10697
10891
|
}
|
|
10698
10892
|
|
|
10699
10893
|
// src/commands/api/index.ts
|
|
10700
|
-
var apiCommand = new
|
|
10894
|
+
var apiCommand = new Command15("api").description("Custom API routes management");
|
|
10701
10895
|
apiCommand.command("init").description("Add custom API routes to your project").action(runApiInit);
|
|
10702
10896
|
|
|
10703
10897
|
// src/commands/auth/index.ts
|
|
10704
|
-
import { Command as
|
|
10898
|
+
import { Command as Command18 } from "commander";
|
|
10705
10899
|
|
|
10706
10900
|
// src/commands/auth/add.ts
|
|
10707
10901
|
init_file_loader();
|
|
10708
10902
|
import { writeFileSync as writeFileSync14 } from "fs";
|
|
10709
10903
|
import { join as join35 } from "path";
|
|
10710
|
-
import { bold as
|
|
10711
|
-
import { Command as
|
|
10712
|
-
var addAuthCommand = new
|
|
10904
|
+
import { bold as bold12 } from "colorette";
|
|
10905
|
+
import { Command as Command16 } from "commander";
|
|
10906
|
+
var addAuthCommand = new Command16("add").description("Add an authentication provider to your project").argument("<provider>", "Provider to add: email | github | google").addHelpText(
|
|
10713
10907
|
"after",
|
|
10714
10908
|
`
|
|
10715
10909
|
Examples:
|
|
@@ -10775,16 +10969,16 @@ Examples:
|
|
|
10775
10969
|
PLACEHOLDER_APP_URL
|
|
10776
10970
|
).replace("{provider}", provider);
|
|
10777
10971
|
logger.admonition("tip", "Next Steps", [
|
|
10778
|
-
|
|
10972
|
+
bold12(`1. Add callback URL to your ${providerDisplayName} OAuth app:`),
|
|
10779
10973
|
"",
|
|
10780
10974
|
` <${callbackUrl}>`,
|
|
10781
10975
|
"",
|
|
10782
|
-
|
|
10976
|
+
bold12("2. Add credentials to <.env> (for local development):"),
|
|
10783
10977
|
"",
|
|
10784
10978
|
` \`${provider.toUpperCase()}_CLIENT_ID=[your-id]\``,
|
|
10785
10979
|
` \`${provider.toUpperCase()}_CLIENT_SECRET=[your-secret]\``,
|
|
10786
10980
|
"",
|
|
10787
|
-
|
|
10981
|
+
bold12("3. Set production secrets (for deployment):"),
|
|
10788
10982
|
"",
|
|
10789
10983
|
` \`playcademy secret set ${provider.toUpperCase()}_CLIENT_ID=[your-id]\``,
|
|
10790
10984
|
` \`playcademy secret set ${provider.toUpperCase()}_CLIENT_SECRET=[your-secret]\``
|
|
@@ -10799,9 +10993,9 @@ Examples:
|
|
|
10799
10993
|
|
|
10800
10994
|
// src/commands/auth/init.ts
|
|
10801
10995
|
import { confirm as confirm8 } from "@inquirer/prompts";
|
|
10802
|
-
import { Command as
|
|
10996
|
+
import { Command as Command17 } from "commander";
|
|
10803
10997
|
var sampleCustomRouteTemplate2 = loadTemplateString("api/sample-custom.ts");
|
|
10804
|
-
var initAuthCommand = new
|
|
10998
|
+
var initAuthCommand = new Command17("init").description("Add authentication to your project").action(async () => {
|
|
10805
10999
|
try {
|
|
10806
11000
|
logger.newLine();
|
|
10807
11001
|
const configPath = await requireConfigFile();
|
|
@@ -10903,14 +11097,14 @@ var initAuthCommand = new Command16("init").description("Add authentication to y
|
|
|
10903
11097
|
});
|
|
10904
11098
|
|
|
10905
11099
|
// src/commands/auth/index.ts
|
|
10906
|
-
var authCommand = new
|
|
11100
|
+
var authCommand = new Command18("auth").description("Manage authentication for your project").action(() => {
|
|
10907
11101
|
authCommand.help();
|
|
10908
11102
|
});
|
|
10909
11103
|
authCommand.addCommand(initAuthCommand);
|
|
10910
11104
|
authCommand.addCommand(addAuthCommand);
|
|
10911
11105
|
|
|
10912
11106
|
// src/commands/db/index.ts
|
|
10913
|
-
import { Command as
|
|
11107
|
+
import { Command as Command19 } from "commander";
|
|
10914
11108
|
|
|
10915
11109
|
// src/commands/db/diff.ts
|
|
10916
11110
|
async function runDbDiff() {
|
|
@@ -11028,7 +11222,7 @@ async function runDbInit() {
|
|
|
11028
11222
|
import { existsSync as existsSync25 } from "fs";
|
|
11029
11223
|
import { join as join36 } from "path";
|
|
11030
11224
|
import { confirm as confirm9, input as input8 } from "@inquirer/prompts";
|
|
11031
|
-
import { bold as
|
|
11225
|
+
import { bold as bold13, redBright as redBright4, underline as underline3 } from "colorette";
|
|
11032
11226
|
import { Miniflare as Miniflare2 } from "miniflare";
|
|
11033
11227
|
async function runDbResetRemote(options) {
|
|
11034
11228
|
const environment = ensureEnvironment(options.env);
|
|
@@ -11046,9 +11240,9 @@ async function runDbResetRemote(options) {
|
|
|
11046
11240
|
const game = await client.games.fetch(deployedGame.gameId);
|
|
11047
11241
|
logger.newLine();
|
|
11048
11242
|
logger.admonition("warning", "DESTRUCTIVE OPERATION", [
|
|
11049
|
-
`Are you sure you want to ${redBright4(underline3(
|
|
11243
|
+
`Are you sure you want to ${redBright4(underline3(bold13("DELETE ALL DATA")))} in your ${environment} database?`,
|
|
11050
11244
|
`All tables will be dropped and recreated from schema.`,
|
|
11051
|
-
`This action is irreversible and ${underline3(
|
|
11245
|
+
`This action is irreversible and ${underline3(bold13("cannot be undone"))}.`
|
|
11052
11246
|
]);
|
|
11053
11247
|
logger.newLine();
|
|
11054
11248
|
const confirmed = await confirm9({
|
|
@@ -11215,7 +11409,7 @@ async function runDbSchema(options = {}) {
|
|
|
11215
11409
|
import { existsSync as existsSync26 } from "fs";
|
|
11216
11410
|
import { join as join37 } from "path";
|
|
11217
11411
|
import { confirm as confirm10, input as input9 } from "@inquirer/prompts";
|
|
11218
|
-
import { bold as
|
|
11412
|
+
import { bold as bold14, dim as dim11, redBright as redBright5, underline as underline4 } from "colorette";
|
|
11219
11413
|
import { Miniflare as Miniflare3 } from "miniflare";
|
|
11220
11414
|
async function runDbResetRemote2(gameSlug, environment) {
|
|
11221
11415
|
const client = await requireAuthenticatedClient();
|
|
@@ -11259,8 +11453,8 @@ async function runDbSeedRemote(seedFile, options) {
|
|
|
11259
11453
|
logger.newLine();
|
|
11260
11454
|
if (willReset) {
|
|
11261
11455
|
logger.admonition("warning", "Remote Database Seeding", [
|
|
11262
|
-
`Are you sure you want to ${redBright5(underline4(
|
|
11263
|
-
`This action is irreversible and ${underline4(
|
|
11456
|
+
`Are you sure you want to ${redBright5(underline4(bold14("DELETE ALL DATA")))} in your ${environment} database?`,
|
|
11457
|
+
`This action is irreversible and ${underline4(bold14("cannot be undone"))}.`,
|
|
11264
11458
|
`Run this command with \`--no-reset\` if you want to seed without resetting.`
|
|
11265
11459
|
]);
|
|
11266
11460
|
} else {
|
|
@@ -11345,7 +11539,7 @@ async function runDbSeedRemote(seedFile, options) {
|
|
|
11345
11539
|
displaySeedLogs(seedResult.logs, "error");
|
|
11346
11540
|
}
|
|
11347
11541
|
logger.newLine();
|
|
11348
|
-
logger.error(`Seeding failed ${
|
|
11542
|
+
logger.error(`Seeding failed ${dim11(`[${Math.round(duration)}ms]`)}`);
|
|
11349
11543
|
logger.newLine();
|
|
11350
11544
|
process.exit(1);
|
|
11351
11545
|
}
|
|
@@ -11355,7 +11549,7 @@ async function runDbSeedRemote(seedFile, options) {
|
|
|
11355
11549
|
}
|
|
11356
11550
|
logger.newLine();
|
|
11357
11551
|
logger.success(
|
|
11358
|
-
`${capitalize(environment)} database seeded ${
|
|
11552
|
+
`${capitalize(environment)} database seeded ${dim11(`[${Math.round(duration)}ms]`)}`
|
|
11359
11553
|
);
|
|
11360
11554
|
logger.newLine();
|
|
11361
11555
|
}
|
|
@@ -11440,7 +11634,7 @@ async function runDbSeed(options = {}) {
|
|
|
11440
11634
|
}
|
|
11441
11635
|
|
|
11442
11636
|
// src/commands/db/index.ts
|
|
11443
|
-
var dbCommand = new
|
|
11637
|
+
var dbCommand = new Command19("db").description("Database management commands");
|
|
11444
11638
|
dbCommand.command("init").description("Add database to your project").action(runDbInit);
|
|
11445
11639
|
dbCommand.command("reset").description("Reset database").option("--remote", "Reset remote deployed database").option("--env <environment>", "Environment: staging (default) or production").option("-f, --force", "Skip confirmation prompt (local only)").option("--debug", "Enable debug mode").action(
|
|
11446
11640
|
(options) => runDbReset({
|
|
@@ -11463,7 +11657,7 @@ dbCommand.command("diff").description("Show schema changes since last deployment
|
|
|
11463
11657
|
dbCommand.command("schema").description("Print full schema SQL that would be pushed after reset").option("--raw", "Output raw SQL only (for piping to files)").option("--full", "Show full schema hash").action((options) => runDbSchema({ raw: options.raw, full: options.full }));
|
|
11464
11658
|
|
|
11465
11659
|
// src/commands/kv/index.ts
|
|
11466
|
-
import { Command as
|
|
11660
|
+
import { Command as Command20 } from "commander";
|
|
11467
11661
|
|
|
11468
11662
|
// src/commands/kv/clear.ts
|
|
11469
11663
|
import { join as join38 } from "path";
|
|
@@ -12400,7 +12594,7 @@ async function runKVStats(options = {}) {
|
|
|
12400
12594
|
}
|
|
12401
12595
|
|
|
12402
12596
|
// src/commands/kv/index.ts
|
|
12403
|
-
var kvCommand = new
|
|
12597
|
+
var kvCommand = new Command20("kv").description("Manage KV storage integration").action(() => {
|
|
12404
12598
|
kvCommand.help();
|
|
12405
12599
|
});
|
|
12406
12600
|
kvCommand.command("init").description("Add KV storage integration to your project").action(runKVInit);
|
|
@@ -12438,7 +12632,7 @@ kvCommand.command("seed <file>").description("Seed KV namespace with key-value p
|
|
|
12438
12632
|
).action(runKVSeed);
|
|
12439
12633
|
|
|
12440
12634
|
// src/commands/bucket/index.ts
|
|
12441
|
-
import { Command as
|
|
12635
|
+
import { Command as Command21 } from "commander";
|
|
12442
12636
|
|
|
12443
12637
|
// src/commands/bucket/bulk.ts
|
|
12444
12638
|
import { existsSync as existsSync27, statSync as statSync3 } from "fs";
|
|
@@ -13250,7 +13444,7 @@ async function runBucketPut(key, filePath, options = {}) {
|
|
|
13250
13444
|
}
|
|
13251
13445
|
|
|
13252
13446
|
// src/commands/bucket/index.ts
|
|
13253
|
-
var bucketCommand = new
|
|
13447
|
+
var bucketCommand = new Command21("bucket").description("Manage bucket storage integration").action(() => {
|
|
13254
13448
|
bucketCommand.help();
|
|
13255
13449
|
});
|
|
13256
13450
|
bucketCommand.command("init").description("Add bucket storage integration to your project").action(runBucketInit);
|
|
@@ -13284,7 +13478,7 @@ bucketCommand.command("bulk <directory>").description(
|
|
|
13284
13478
|
).action(runBucketBulk);
|
|
13285
13479
|
|
|
13286
13480
|
// src/commands/domain/index.ts
|
|
13287
|
-
import { Command as
|
|
13481
|
+
import { Command as Command22 } from "commander";
|
|
13288
13482
|
|
|
13289
13483
|
// src/commands/domain/add.ts
|
|
13290
13484
|
import { underline as underline5 } from "colorette";
|
|
@@ -13480,19 +13674,19 @@ async function runDomainVerify(hostname, options) {
|
|
|
13480
13674
|
}
|
|
13481
13675
|
|
|
13482
13676
|
// src/commands/domain/index.ts
|
|
13483
|
-
var domainCommand = new
|
|
13677
|
+
var domainCommand = new Command22("domain").description("Custom domain management");
|
|
13484
13678
|
domainCommand.command("add <hostname>").description("Add a custom domain to your project").option("--env <env>", "Environment (staging or production)", "staging").action(runDomainAdd);
|
|
13485
13679
|
domainCommand.command("list").description("List custom domains for your project").option("--env <env>", "Environment (staging or production)", "staging").option("--json", "Output as JSON").option("--raw", "Output hostnames only").alias("ls").action(runDomainList);
|
|
13486
13680
|
domainCommand.command("verify <hostname>").description("Check custom domain validation status").option("--env <env>", "Environment (staging or production)", "staging").option("--json", "Output as JSON").option("--refresh", "Re-trigger domain validation", false).alias("status").action(runDomainVerify);
|
|
13487
13681
|
domainCommand.command("delete <hostname>").description("Remove a custom domain").option("--env <env>", "Environment (staging or production)", "staging").option("-f, --force", "Skip confirmation prompt").alias("rm").alias("remove").action(runDomainDelete);
|
|
13488
13682
|
|
|
13489
13683
|
// src/commands/secret/index.ts
|
|
13490
|
-
import { Command as
|
|
13684
|
+
import { Command as Command26 } from "commander";
|
|
13491
13685
|
|
|
13492
13686
|
// src/commands/secret/delete.ts
|
|
13493
13687
|
import { confirm as confirm14 } from "@inquirer/prompts";
|
|
13494
|
-
import { Command as
|
|
13495
|
-
var deleteCommand2 = new
|
|
13688
|
+
import { Command as Command23 } from "commander";
|
|
13689
|
+
var deleteCommand2 = new Command23("delete").description("Delete a project secret").argument("<key>", "Secret key to delete").option("--env <environment>", "Environment (staging or production)").option("-f, --force", "Skip confirmation").option("--no-deploy", "Skip deployment prompt").action(async (key, options) => {
|
|
13496
13690
|
const { env, deploy: shouldPromptDeploy = true } = options;
|
|
13497
13691
|
try {
|
|
13498
13692
|
const environment = ensureEnvironment(env);
|
|
@@ -13564,8 +13758,8 @@ var deleteCommand2 = new Command22("delete").description("Delete a project secre
|
|
|
13564
13758
|
});
|
|
13565
13759
|
|
|
13566
13760
|
// src/commands/secret/list.ts
|
|
13567
|
-
import { Command as
|
|
13568
|
-
var listCommand2 = new
|
|
13761
|
+
import { Command as Command24 } from "commander";
|
|
13762
|
+
var listCommand2 = new Command24("list").description("List project secret keys").option("--env <environment>", "Environment (staging or production)").action(async (options) => {
|
|
13569
13763
|
const { env } = options;
|
|
13570
13764
|
try {
|
|
13571
13765
|
const environment = ensureEnvironment(env);
|
|
@@ -13613,8 +13807,8 @@ var listCommand2 = new Command23("list").description("List project secret keys")
|
|
|
13613
13807
|
|
|
13614
13808
|
// src/commands/secret/set.ts
|
|
13615
13809
|
import { confirm as confirm15 } from "@inquirer/prompts";
|
|
13616
|
-
import { Command as
|
|
13617
|
-
var setCommand = new
|
|
13810
|
+
import { Command as Command25 } from "commander";
|
|
13811
|
+
var setCommand = new Command25("set").description("Set or update a project secret").argument("<key>", "Secret key (e.g., STRIPE_KEY)").argument("<value>", "Secret value").option("--env <environment>", "Environment (staging or production)").option("--no-deploy", "Skip deployment prompt").action(async (key, value, options) => {
|
|
13618
13812
|
const { env, deploy: shouldPromptDeploy = true } = options;
|
|
13619
13813
|
try {
|
|
13620
13814
|
const environment = ensureEnvironment(env);
|
|
@@ -13674,11 +13868,11 @@ var setCommand = new Command24("set").description("Set or update a project secre
|
|
|
13674
13868
|
});
|
|
13675
13869
|
|
|
13676
13870
|
// src/commands/secret/index.ts
|
|
13677
|
-
var secretCommand = new
|
|
13871
|
+
var secretCommand = new Command26("secrets").description("Manage project secrets").addCommand(setCommand).addCommand(listCommand2).addCommand(deleteCommand2);
|
|
13678
13872
|
|
|
13679
13873
|
// src/commands/types/index.ts
|
|
13680
|
-
import { Command as
|
|
13681
|
-
var typesCommand = new
|
|
13874
|
+
import { Command as Command27 } from "commander";
|
|
13875
|
+
var typesCommand = new Command27("types").description("Generate TypeScript type definitions").action(async () => {
|
|
13682
13876
|
try {
|
|
13683
13877
|
logger.newLine();
|
|
13684
13878
|
await runStep(
|
|
@@ -13693,10 +13887,10 @@ var typesCommand = new Command26("types").description("Generate TypeScript type
|
|
|
13693
13887
|
});
|
|
13694
13888
|
|
|
13695
13889
|
// src/commands/profiles/index.ts
|
|
13696
|
-
import { Command as
|
|
13890
|
+
import { Command as Command31 } from "commander";
|
|
13697
13891
|
|
|
13698
13892
|
// src/commands/profiles/list.ts
|
|
13699
|
-
import { Command as
|
|
13893
|
+
import { Command as Command28 } from "commander";
|
|
13700
13894
|
async function listProfilesAction() {
|
|
13701
13895
|
try {
|
|
13702
13896
|
const profilesMap = await listProfiles();
|
|
@@ -13738,12 +13932,12 @@ async function listProfilesAction() {
|
|
|
13738
13932
|
process.exit(1);
|
|
13739
13933
|
}
|
|
13740
13934
|
}
|
|
13741
|
-
var listCommand3 = new
|
|
13935
|
+
var listCommand3 = new Command28("list").alias("ls").description("List all stored authentication profiles").action(listProfilesAction);
|
|
13742
13936
|
|
|
13743
13937
|
// src/commands/profiles/remove.ts
|
|
13744
|
-
import { bold as
|
|
13745
|
-
import { Command as
|
|
13746
|
-
var removeCommand = new
|
|
13938
|
+
import { bold as bold15 } from "colorette";
|
|
13939
|
+
import { Command as Command29 } from "commander";
|
|
13940
|
+
var removeCommand = new Command29("remove").alias("rm").description('Remove an authentication profile (defaults to "default")').argument("[name]", "Profile name to remove", "default").option("--env <environment>", "Environment to remove profile from (staging or production)").action(async (name, options) => {
|
|
13747
13941
|
const { env } = options;
|
|
13748
13942
|
const environment = ensureEnvironment(env);
|
|
13749
13943
|
try {
|
|
@@ -13757,7 +13951,7 @@ var removeCommand = new Command28("remove").alias("rm").description('Remove an a
|
|
|
13757
13951
|
}
|
|
13758
13952
|
await removeProfile(environment, name);
|
|
13759
13953
|
logger.admonition("note", "Removed!", [
|
|
13760
|
-
`Profile ${
|
|
13954
|
+
`Profile ${bold15(name)} removed from ${environment}`,
|
|
13761
13955
|
environment === "production" ? `To re-authenticate run \`playcademy login --env ${environment}\`` : "To re-authenticate run `playcademy login`"
|
|
13762
13956
|
]);
|
|
13763
13957
|
logger.newLine();
|
|
@@ -13768,8 +13962,8 @@ var removeCommand = new Command28("remove").alias("rm").description('Remove an a
|
|
|
13768
13962
|
|
|
13769
13963
|
// src/commands/profiles/reset.ts
|
|
13770
13964
|
import { confirm as confirm16 } from "@inquirer/prompts";
|
|
13771
|
-
import { Command as
|
|
13772
|
-
var resetCommand = new
|
|
13965
|
+
import { Command as Command30 } from "commander";
|
|
13966
|
+
var resetCommand = new Command30("reset").description(
|
|
13773
13967
|
"Remove all authentication profiles across all environments (requires confirmation)"
|
|
13774
13968
|
).alias("clear").action(async () => {
|
|
13775
13969
|
try {
|
|
@@ -13845,18 +14039,18 @@ var resetCommand = new Command29("reset").description(
|
|
|
13845
14039
|
});
|
|
13846
14040
|
|
|
13847
14041
|
// src/commands/profiles/index.ts
|
|
13848
|
-
var profilesCommand = new
|
|
14042
|
+
var profilesCommand = new Command31("profiles").description("Manage authentication profiles").action(listProfilesAction);
|
|
13849
14043
|
profilesCommand.addCommand(listCommand3);
|
|
13850
14044
|
profilesCommand.addCommand(removeCommand);
|
|
13851
14045
|
profilesCommand.addCommand(resetCommand);
|
|
13852
14046
|
|
|
13853
14047
|
// src/commands/timeback/index.ts
|
|
13854
|
-
import { Command as
|
|
14048
|
+
import { Command as Command37 } from "commander";
|
|
13855
14049
|
|
|
13856
14050
|
// src/commands/timeback/cleanup.ts
|
|
13857
14051
|
import { confirm as confirm17 } from "@inquirer/prompts";
|
|
13858
|
-
import { Command as
|
|
13859
|
-
var cleanupCommand = new
|
|
14052
|
+
import { Command as Command32 } from "commander";
|
|
14053
|
+
var cleanupCommand = new Command32("cleanup").description("Remove TimeBack integration from your project").option(
|
|
13860
14054
|
"--env <environment>",
|
|
13861
14055
|
"Environment to remove TimeBack integration from (staging or production)"
|
|
13862
14056
|
).action(async (options) => {
|
|
@@ -13908,8 +14102,8 @@ var cleanupCommand = new Command31("cleanup").description("Remove TimeBack integ
|
|
|
13908
14102
|
});
|
|
13909
14103
|
|
|
13910
14104
|
// src/commands/timeback/init.ts
|
|
13911
|
-
import { Command as
|
|
13912
|
-
var initCommand2 = new
|
|
14105
|
+
import { Command as Command33 } from "commander";
|
|
14106
|
+
var initCommand2 = new Command33("init").description("Add TimeBack integration to your project").action(async () => {
|
|
13913
14107
|
try {
|
|
13914
14108
|
logger.newLine();
|
|
13915
14109
|
const configPath = await requireConfigFile();
|
|
@@ -13958,8 +14152,8 @@ var initCommand2 = new Command32("init").description("Add TimeBack integration t
|
|
|
13958
14152
|
});
|
|
13959
14153
|
|
|
13960
14154
|
// src/commands/timeback/setup.ts
|
|
13961
|
-
import { Command as
|
|
13962
|
-
var setupCommand = new
|
|
14155
|
+
import { Command as Command34 } from "commander";
|
|
14156
|
+
var setupCommand = new Command34("setup").description("Set up TimeBack integration for your project").option("--dry-run", "Validate configuration without creating resources").option("--verbose, -v", "Output detailed information").option(
|
|
13963
14157
|
"--env <environment>",
|
|
13964
14158
|
"Environment to set up TimeBack integration in (staging or production)"
|
|
13965
14159
|
).action(async (options) => {
|
|
@@ -14043,8 +14237,8 @@ var setupCommand = new Command33("setup").description("Set up TimeBack integrati
|
|
|
14043
14237
|
});
|
|
14044
14238
|
|
|
14045
14239
|
// src/commands/timeback/update.ts
|
|
14046
|
-
import { Command as
|
|
14047
|
-
var updateCommand2 = new
|
|
14240
|
+
import { Command as Command35 } from "commander";
|
|
14241
|
+
var updateCommand2 = new Command35("update").description("Update TimeBack integration configuration for your project").option("--verbose, -v", "Output detailed information").option(
|
|
14048
14242
|
"--env <environment>",
|
|
14049
14243
|
"Environment to update TimeBack integration in (staging or production)"
|
|
14050
14244
|
).action(async (options) => {
|
|
@@ -14104,8 +14298,8 @@ var updateCommand2 = new Command34("update").description("Update TimeBack integr
|
|
|
14104
14298
|
});
|
|
14105
14299
|
|
|
14106
14300
|
// src/commands/timeback/verify.ts
|
|
14107
|
-
import { Command as
|
|
14108
|
-
var verifyCommand = new
|
|
14301
|
+
import { Command as Command36 } from "commander";
|
|
14302
|
+
var verifyCommand = new Command36("verify").description("Verify TimeBack integration for your project").option("--verbose, -v", "Output detailed resource information").option(
|
|
14109
14303
|
"--env <environment>",
|
|
14110
14304
|
"Environment to verify TimeBack integration in (staging or production)"
|
|
14111
14305
|
).action(async (options) => {
|
|
@@ -14150,7 +14344,7 @@ var verifyCommand = new Command35("verify").description("Verify TimeBack integra
|
|
|
14150
14344
|
});
|
|
14151
14345
|
|
|
14152
14346
|
// src/commands/timeback/index.ts
|
|
14153
|
-
var timebackCommand = new
|
|
14347
|
+
var timebackCommand = new Command37("timeback").description(
|
|
14154
14348
|
"TimeBack integration management"
|
|
14155
14349
|
);
|
|
14156
14350
|
timebackCommand.addCommand(initCommand2);
|
|
@@ -14160,13 +14354,13 @@ timebackCommand.addCommand(verifyCommand);
|
|
|
14160
14354
|
timebackCommand.addCommand(cleanupCommand);
|
|
14161
14355
|
|
|
14162
14356
|
// src/commands/debug/index.ts
|
|
14163
|
-
import { Command as
|
|
14357
|
+
import { Command as Command39 } from "commander";
|
|
14164
14358
|
|
|
14165
14359
|
// src/commands/debug/bundle.ts
|
|
14166
14360
|
import { writeFileSync as writeFileSync16 } from "fs";
|
|
14167
14361
|
import { join as join51 } from "path";
|
|
14168
|
-
import { Command as
|
|
14169
|
-
var bundleCommand = new
|
|
14362
|
+
import { Command as Command38 } from "commander";
|
|
14363
|
+
var bundleCommand = new Command38("bundle").description("Bundle and inspect the project backend worker code (for debugging)").option("-o, --output <path>", "Output file path", CLI_DEFAULT_OUTPUTS.WORKER_BUNDLE).option("--minify", "Minify the output").option("--sourcemap", "Include source maps").action(async (options) => {
|
|
14170
14364
|
try {
|
|
14171
14365
|
const workspace = getWorkspace();
|
|
14172
14366
|
logger.newLine();
|
|
@@ -14235,15 +14429,15 @@ var bundleCommand = new Command37("bundle").description("Bundle and inspect the
|
|
|
14235
14429
|
});
|
|
14236
14430
|
|
|
14237
14431
|
// src/commands/debug/index.ts
|
|
14238
|
-
var debugCommand = new
|
|
14432
|
+
var debugCommand = new Command39("debug").description("Debug and inspect project builds").addCommand(bundleCommand);
|
|
14239
14433
|
|
|
14240
14434
|
// src/commands/vite/index.ts
|
|
14241
|
-
import { Command as
|
|
14435
|
+
import { Command as Command40 } from "commander";
|
|
14242
14436
|
|
|
14243
14437
|
// src/commands/vite/config.ts
|
|
14244
14438
|
import path3 from "node:path";
|
|
14245
14439
|
import { confirm as confirm18 } from "@inquirer/prompts";
|
|
14246
|
-
import { dim as
|
|
14440
|
+
import { dim as dim12 } from "colorette";
|
|
14247
14441
|
async function runViteConfig() {
|
|
14248
14442
|
try {
|
|
14249
14443
|
logger.newLine();
|
|
@@ -14285,7 +14479,7 @@ async function runViteConfig() {
|
|
|
14285
14479
|
const devCommand2 = getRunCommand(pm, "dev");
|
|
14286
14480
|
const buildCommand = getRunCommand(pm, "build");
|
|
14287
14481
|
logger.admonition("tip", "Next Steps", [
|
|
14288
|
-
`1. Configure options in <vite.config.ts> ${
|
|
14482
|
+
`1. Configure options in <vite.config.ts> ${dim12("(optional)")}`,
|
|
14289
14483
|
`2. Run \`${devCommand2}\` to start development`,
|
|
14290
14484
|
`3. Run \`${buildCommand}\` to build your project`,
|
|
14291
14485
|
"",
|
|
@@ -14302,7 +14496,7 @@ async function runViteConfig() {
|
|
|
14302
14496
|
}
|
|
14303
14497
|
|
|
14304
14498
|
// src/commands/vite/index.ts
|
|
14305
|
-
var viteCommand = new
|
|
14499
|
+
var viteCommand = new Command40("vite").description("Vite plugin management");
|
|
14306
14500
|
viteCommand.command("config").description("Add Vite plugin to your project").action(runViteConfig);
|
|
14307
14501
|
|
|
14308
14502
|
// src/index.ts
|
|
@@ -14332,6 +14526,7 @@ program.addCommand(typesCommand);
|
|
|
14332
14526
|
program.addCommand(viteCommand);
|
|
14333
14527
|
program.addCommand(projectsCommand);
|
|
14334
14528
|
program.addCommand(deployCommand);
|
|
14529
|
+
program.addCommand(logsCommand);
|
|
14335
14530
|
program.addCommand(timebackCommand);
|
|
14336
14531
|
program.addCommand(debugCommand);
|
|
14337
14532
|
program.addCommand(updateCommand);
|
|
@@ -14350,6 +14545,7 @@ export {
|
|
|
14350
14545
|
analyzeChanges,
|
|
14351
14546
|
applyEngineSelection,
|
|
14352
14547
|
buildCustomRouteImportStatements,
|
|
14548
|
+
buildLogStreamUrl,
|
|
14353
14549
|
buildStatusByCourseId,
|
|
14354
14550
|
bundleBackend,
|
|
14355
14551
|
bundleSeedWorker,
|
|
@@ -14360,6 +14556,7 @@ export {
|
|
|
14360
14556
|
collectFiles,
|
|
14361
14557
|
compareIntegrationKeys,
|
|
14362
14558
|
confirmDeploymentPlan,
|
|
14559
|
+
connectToLogStream,
|
|
14363
14560
|
createClient,
|
|
14364
14561
|
createProjectDirectory,
|
|
14365
14562
|
createSeedWorkerEntry,
|
|
@@ -14377,6 +14574,7 @@ export {
|
|
|
14377
14574
|
displayDomainValidationRecords,
|
|
14378
14575
|
displayIntegrationDetails,
|
|
14379
14576
|
displayIntegrationList,
|
|
14577
|
+
displayLogEntry,
|
|
14380
14578
|
displayMissingCourseRequirementsAndExit,
|
|
14381
14579
|
displayResourcesStatus,
|
|
14382
14580
|
displaySeedLogs,
|