playcademy 0.33.0 → 0.33.1-beta.2
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/README.md +39 -24
- package/dist/bucket.js +1 -1
- package/dist/cli.js +2 -2
- package/dist/constants.js +1 -1
- package/dist/db.d.ts +11 -0
- package/dist/db.js +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +10 -7
- package/dist/runtime/dashboard-runtime/manifest.json +4 -4
- package/dist/runtime/game-runtime/index.js +3 -3
- package/dist/runtime/game-runtime/manifest.json +4 -4
- package/dist/utils.js +2 -2
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ Remove stored credentials.
|
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
54
|
playcademy logout
|
|
55
|
-
playcademy logout
|
|
55
|
+
playcademy logout work
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
#### `me`
|
|
@@ -91,24 +91,24 @@ Check your current developer status.
|
|
|
91
91
|
playcademy dev status
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
###
|
|
94
|
+
### Projects
|
|
95
95
|
|
|
96
|
-
#### `
|
|
96
|
+
#### `projects list`
|
|
97
97
|
|
|
98
|
-
List
|
|
98
|
+
List your deployed projects.
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
playcademy
|
|
101
|
+
playcademy projects list
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
#### `
|
|
104
|
+
#### `projects delete`
|
|
105
105
|
|
|
106
|
-
Delete a
|
|
106
|
+
Delete a project.
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
|
-
playcademy
|
|
110
|
-
playcademy
|
|
111
|
-
playcademy
|
|
109
|
+
playcademy projects delete <slug>
|
|
110
|
+
playcademy projects delete # Interactive selection
|
|
111
|
+
playcademy projects delete my-game -f # Skip confirmation
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
### Deployment
|
|
@@ -144,7 +144,7 @@ playcademy deploy --debug # Show debug info
|
|
|
144
144
|
- `-d, --description <desc>` - Description
|
|
145
145
|
- `-e, --emoji <emoji>` - Emoji icon
|
|
146
146
|
- `-b, --build <path>` - Path to frontend zip file
|
|
147
|
-
- `--env <env>` - Environment (`
|
|
147
|
+
- `--env <env>` - Environment (`local`, `staging`, or `production`)
|
|
148
148
|
- `--backend` - Deploy API routes
|
|
149
149
|
- `--no-backend` - Skip API routes
|
|
150
150
|
- `--dry-run` - Validate only
|
|
@@ -178,38 +178,53 @@ Or `playcademy.config.json`:
|
|
|
178
178
|
|
|
179
179
|
**Backend API Routes:**
|
|
180
180
|
|
|
181
|
-
Add custom API routes by creating
|
|
181
|
+
Add custom API routes by creating a `server/api/` directory:
|
|
182
182
|
|
|
183
183
|
```
|
|
184
184
|
my-game/
|
|
185
185
|
├── playcademy.config.js
|
|
186
186
|
├── dist/
|
|
187
187
|
│ └── game.zip
|
|
188
|
-
└──
|
|
189
|
-
└──
|
|
188
|
+
└── server/
|
|
189
|
+
└── api/
|
|
190
|
+
└── hello.ts # GET /api/hello
|
|
190
191
|
```
|
|
191
192
|
|
|
193
|
+
Set `integrations.customRoutes.directory` in your config to use a different routes directory.
|
|
194
|
+
|
|
192
195
|
Backend routes are automatically deployed with hosted games.
|
|
193
196
|
|
|
194
197
|
### Credential Storage
|
|
195
198
|
|
|
196
|
-
Credentials are stored in `~/.playcademy/auth.json
|
|
199
|
+
Credentials are stored in `~/.playcademy/auth.json`, separately for each environment:
|
|
197
200
|
|
|
198
201
|
```json
|
|
199
202
|
{
|
|
200
|
-
"
|
|
201
|
-
"
|
|
202
|
-
"
|
|
203
|
-
"email": "user@example.com",
|
|
204
|
-
"expiresAt": "2024-12-31T23:59:59Z"
|
|
203
|
+
"local": {
|
|
204
|
+
"default": null,
|
|
205
|
+
"profiles": {}
|
|
205
206
|
},
|
|
206
|
-
"
|
|
207
|
-
"
|
|
208
|
-
"token": "
|
|
207
|
+
"staging": {
|
|
208
|
+
"default": {
|
|
209
|
+
"token": "YOUR_TOKEN",
|
|
210
|
+
"tokenType": "session",
|
|
209
211
|
"userId": "user_123",
|
|
210
212
|
"email": "user@example.com",
|
|
211
213
|
"expiresAt": "2024-12-31T23:59:59Z"
|
|
214
|
+
},
|
|
215
|
+
"profiles": {
|
|
216
|
+
"work": {
|
|
217
|
+
"token": "WORK_TOKEN",
|
|
218
|
+
"tokenType": "session",
|
|
219
|
+
"userId": "user_123",
|
|
220
|
+
"email": "user@example.com",
|
|
221
|
+
"expiresAt": "2024-12-31T23:59:59Z"
|
|
222
|
+
}
|
|
212
223
|
}
|
|
224
|
+
},
|
|
225
|
+
"production": {
|
|
226
|
+
"default": null,
|
|
227
|
+
"profiles": {}
|
|
213
228
|
}
|
|
214
229
|
}
|
|
215
230
|
```
|
|
@@ -301,7 +316,7 @@ another object.
|
|
|
301
316
|
|
|
302
317
|
- `CI` - Set to `1` or `true` to disable interactive prompts
|
|
303
318
|
- `PLAYCADEMY_API_TOKEN` - API token for non-interactive authentication
|
|
304
|
-
- `PLAYCADEMY_ENV` - Environment: `staging
|
|
319
|
+
- `PLAYCADEMY_ENV` - Environment: `local`, `staging`, or `production` (default: `staging`)
|
|
305
320
|
- `PLAYCADEMY_BASE_URL` - Override API endpoint (default: based on `PLAYCADEMY_ENV`)
|
|
306
321
|
- `PLAYCADEMY_PROFILE` - Authentication profile to use (default: `default`)
|
|
307
322
|
- `PLAYCADEMY_CONFIG_PATH` - Path to a config file
|
package/dist/bucket.js
CHANGED
|
@@ -42,7 +42,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
42
42
|
// ../better-auth/package.json
|
|
43
43
|
var package_default = {
|
|
44
44
|
name: "@playcademy/better-auth",
|
|
45
|
-
version: "0.0.
|
|
45
|
+
version: "0.0.26-beta.2",
|
|
46
46
|
type: "module",
|
|
47
47
|
exports: {
|
|
48
48
|
"./server": {
|
package/dist/cli.js
CHANGED
|
@@ -1208,7 +1208,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
1208
1208
|
// ../better-auth/package.json
|
|
1209
1209
|
var package_default = {
|
|
1210
1210
|
name: "@playcademy/better-auth",
|
|
1211
|
-
version: "0.0.
|
|
1211
|
+
version: "0.0.26-beta.2",
|
|
1212
1212
|
type: "module",
|
|
1213
1213
|
exports: {
|
|
1214
1214
|
"./server": {
|
|
@@ -3045,7 +3045,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync5, readFileSync as re
|
|
|
3045
3045
|
import { join as join12 } from "node:path";
|
|
3046
3046
|
|
|
3047
3047
|
// src/version.ts
|
|
3048
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
3048
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.1-beta.2";
|
|
3049
3049
|
|
|
3050
3050
|
// src/lib/init/database.ts
|
|
3051
3051
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
package/dist/constants.js
CHANGED
package/dist/db.d.ts
CHANGED
|
@@ -400,6 +400,17 @@ declare function reportBaselineVerification(plan: DatabasePlan | null): void;
|
|
|
400
400
|
* @param schemaHash - The claimed snapshot hash the platform recorded.
|
|
401
401
|
*/
|
|
402
402
|
declare function reportPushBaselineRecorded(schemaHash: string): void;
|
|
403
|
+
/**
|
|
404
|
+
* The journal tag the claim is anchored at: everything up to and including
|
|
405
|
+
* it is recorded as already applied. Non-interactive runs must pass --tag.
|
|
406
|
+
*
|
|
407
|
+
* The picker shows evidence instead of asking for a guess: each entry's
|
|
408
|
+
* generation date, the platform's last deploy, and an annotation on
|
|
409
|
+
* entries generated after it (the likely-never-deployed teammate
|
|
410
|
+
* migrations). The default sits on the newest entry generated before the
|
|
411
|
+
* last deploy — never on the newest entry outright, which is the wrong
|
|
412
|
+
* answer whenever undeployed migrations exist.
|
|
413
|
+
*/
|
|
403
414
|
declare function pickBaselineTag(migrations: DeployMigration[], evidence: BaselineMigrationEvidence[] | null, lastDeploy: DeploymentStateResponse['lastDeploy'], environment: string, explicitTag: string | undefined): Promise<string>;
|
|
404
415
|
/**
|
|
405
416
|
* Build the migrate-mode claim: the chosen tag plus the complete journal
|
package/dist/db.js
CHANGED
|
@@ -2333,7 +2333,7 @@ var GAME_API_ROUTES_DIRECTORY = `${GAME_SERVER_ROOT_DIRECTORY}/api`;
|
|
|
2333
2333
|
// ../better-auth/package.json
|
|
2334
2334
|
var package_default = {
|
|
2335
2335
|
name: "@playcademy/better-auth",
|
|
2336
|
-
version: "0.0.
|
|
2336
|
+
version: "0.0.26-beta.2",
|
|
2337
2337
|
type: "module",
|
|
2338
2338
|
exports: {
|
|
2339
2339
|
"./server": {
|
package/dist/index.d.ts
CHANGED
|
@@ -1480,6 +1480,12 @@ type IntegrationChangeDetectors = {
|
|
|
1480
1480
|
[K in keyof IntegrationsConfig]: IntegrationChangeDetector;
|
|
1481
1481
|
};
|
|
1482
1482
|
|
|
1483
|
+
/**
|
|
1484
|
+
* Stable machine-readable codes for deploy-gate refusals, surfaced in the
|
|
1485
|
+
* --json error envelope. A closed union so a typo'd slug is a type error,
|
|
1486
|
+
* never a silently shipped new code — extend here when a gate is added.
|
|
1487
|
+
*/
|
|
1488
|
+
type BlockedCode = 'blocked:baseline-required' | 'blocked:checksum-mismatch' | 'blocked:ledger-orphans' | 'blocked:out-of-order' | 'blocked:prune-secrets' | 'blocked:strategy-mismatch' | 'blocked:timeback-admin-required' | 'blocked:timeback-drift' | 'blocked:timeback-drift-check-failed' | 'blocked:version-rollback';
|
|
1483
1489
|
/**
|
|
1484
1490
|
* Local convenience cache for a deployed project (PLA-217 D9).
|
|
1485
1491
|
*
|
|
@@ -1489,12 +1495,6 @@ type IntegrationChangeDetectors = {
|
|
|
1489
1495
|
* server-managed state — the automatic seed-on-deploy adoption (D7), which
|
|
1490
1496
|
* then falls back to the manual `playcademy db baseline` path.
|
|
1491
1497
|
*/
|
|
1492
|
-
/**
|
|
1493
|
-
* Stable machine-readable codes for deploy-gate refusals, surfaced in the
|
|
1494
|
-
* --json error envelope. A closed union so a typo'd slug is a type error,
|
|
1495
|
-
* never a silently shipped new code — extend here when a gate is added.
|
|
1496
|
-
*/
|
|
1497
|
-
type BlockedCode = 'blocked:baseline-required' | 'blocked:checksum-mismatch' | 'blocked:ledger-orphans' | 'blocked:out-of-order' | 'blocked:prune-secrets' | 'blocked:strategy-mismatch' | 'blocked:timeback-admin-required' | 'blocked:timeback-drift' | 'blocked:timeback-drift-check-failed' | 'blocked:version-rollback';
|
|
1498
1498
|
interface DeployedGameInfo {
|
|
1499
1499
|
/** Interactive prompt default for the frontend zip path */
|
|
1500
1500
|
buildPath?: string;
|
package/dist/index.js
CHANGED
|
@@ -2345,7 +2345,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
2345
2345
|
// ../better-auth/package.json
|
|
2346
2346
|
var package_default = {
|
|
2347
2347
|
name: "@playcademy/better-auth",
|
|
2348
|
-
version: "0.0.
|
|
2348
|
+
version: "0.0.26-beta.2",
|
|
2349
2349
|
type: "module",
|
|
2350
2350
|
exports: {
|
|
2351
2351
|
"./server": {
|
|
@@ -6487,7 +6487,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync2, readFileSync as re
|
|
|
6487
6487
|
import { join as join12 } from "node:path";
|
|
6488
6488
|
|
|
6489
6489
|
// src/version.ts
|
|
6490
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
6490
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.1-beta.2";
|
|
6491
6491
|
|
|
6492
6492
|
// src/lib/init/database.ts
|
|
6493
6493
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
|
@@ -32868,9 +32868,12 @@ var PresignedUploadError = class extends Error {
|
|
|
32868
32868
|
}
|
|
32869
32869
|
};
|
|
32870
32870
|
var TRANSFER_CONCURRENCY = 8;
|
|
32871
|
-
var MAX_RETRIES = 6;
|
|
32872
32871
|
var INITIAL_BACKOFF_MS = 1e3;
|
|
32873
32872
|
var MAX_BACKOFF_MS = 6e4;
|
|
32873
|
+
var MAX_RETRIES = 8;
|
|
32874
|
+
function backoffCeiling(retry) {
|
|
32875
|
+
return Math.min(INITIAL_BACKOFF_MS * 2 ** retry, MAX_BACKOFF_MS);
|
|
32876
|
+
}
|
|
32874
32877
|
function isRetryableStatus(status) {
|
|
32875
32878
|
return status === 429 || status >= 500;
|
|
32876
32879
|
}
|
|
@@ -32887,7 +32890,6 @@ function isRetryable(error) {
|
|
|
32887
32890
|
}
|
|
32888
32891
|
async function runPool(items, task) {
|
|
32889
32892
|
async function attempt(item) {
|
|
32890
|
-
let backoff = INITIAL_BACKOFF_MS;
|
|
32891
32893
|
for (let tries = 0; ; tries++) {
|
|
32892
32894
|
try {
|
|
32893
32895
|
return await task(item);
|
|
@@ -32895,9 +32897,8 @@ async function runPool(items, task) {
|
|
|
32895
32897
|
if (tries >= MAX_RETRIES || !isRetryable(error)) {
|
|
32896
32898
|
throw error;
|
|
32897
32899
|
}
|
|
32898
|
-
const
|
|
32899
|
-
await sleep(Math.
|
|
32900
|
-
backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);
|
|
32900
|
+
const ceiling = backoffCeiling(tries);
|
|
32901
|
+
await sleep(ceiling / 2 + Math.random() * (ceiling / 2));
|
|
32901
32902
|
}
|
|
32902
32903
|
}
|
|
32903
32904
|
}
|
|
@@ -35435,6 +35436,7 @@ export {
|
|
|
35435
35436
|
LEVEL_DELIMITER,
|
|
35436
35437
|
MANAGED_PACKAGES,
|
|
35437
35438
|
MANIFEST_OBJECT_KEY,
|
|
35439
|
+
MAX_RETRIES,
|
|
35438
35440
|
METRICS_RESOLVER_EXTENSIONS,
|
|
35439
35441
|
NUDGE_COOLDOWN_MS,
|
|
35440
35442
|
NonInteractivePromptError,
|
|
@@ -35455,6 +35457,7 @@ export {
|
|
|
35455
35457
|
assertExtractorOutput,
|
|
35456
35458
|
assertRemoteWhenEnvGiven,
|
|
35457
35459
|
assessmentFixturePath,
|
|
35460
|
+
backoffCeiling,
|
|
35458
35461
|
blockDeploy,
|
|
35459
35462
|
bootstrapDashboardAdmin,
|
|
35460
35463
|
buildCatalog,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.33.
|
|
3
|
-
"sdkVersion": "0.21.
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.33.1-beta.2",
|
|
3
|
+
"sdkVersion": "0.21.1-beta.2",
|
|
4
|
+
"runtimeBuildId": "f950ec4256aa",
|
|
5
|
+
"inputFingerprint": "f950ec4256aaa17da2234326f2325b3e9fdd3414f776f3d67b6fd7d08db2def3",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|
|
@@ -14335,9 +14335,9 @@ var init_list = __esm({
|
|
|
14335
14335
|
// ../edge-play/src/game/lib/metadata.ts
|
|
14336
14336
|
function getRuntimeMetadata() {
|
|
14337
14337
|
return {
|
|
14338
|
-
cliVersion: true ? "0.33.
|
|
14339
|
-
sdkVersion: true ? "0.21.
|
|
14340
|
-
buildId: true ? "
|
|
14338
|
+
cliVersion: true ? "0.33.1-beta.2" : "0.0.0-dev",
|
|
14339
|
+
sdkVersion: true ? "0.21.1-beta.2" : "0.0.0-dev",
|
|
14340
|
+
buildId: true ? "f950ec4256aa" : "dev-source"
|
|
14341
14341
|
};
|
|
14342
14342
|
}
|
|
14343
14343
|
var init_metadata = __esm({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.33.
|
|
3
|
-
"sdkVersion": "0.21.
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.33.1-beta.2",
|
|
3
|
+
"sdkVersion": "0.21.1-beta.2",
|
|
4
|
+
"runtimeBuildId": "f950ec4256aa",
|
|
5
|
+
"inputFingerprint": "f950ec4256aaa17da2234326f2325b3e9fdd3414f776f3d67b6fd7d08db2def3",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|
package/dist/utils.js
CHANGED
|
@@ -397,7 +397,7 @@ var DASHBOARD_API_ROUTES_DIRECTORY = "api";
|
|
|
397
397
|
// ../better-auth/package.json
|
|
398
398
|
var package_default = {
|
|
399
399
|
name: "@playcademy/better-auth",
|
|
400
|
-
version: "0.0.
|
|
400
|
+
version: "0.0.26-beta.2",
|
|
401
401
|
type: "module",
|
|
402
402
|
exports: {
|
|
403
403
|
"./server": {
|
|
@@ -2878,7 +2878,7 @@ import { existsSync as existsSync10, mkdirSync as mkdirSync2, writeFileSync as w
|
|
|
2878
2878
|
import { dirname as dirname4, join as join14 } from "node:path";
|
|
2879
2879
|
|
|
2880
2880
|
// src/version.ts
|
|
2881
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
2881
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.1-beta.2";
|
|
2882
2882
|
|
|
2883
2883
|
// src/lib/build/binary-resource.ts
|
|
2884
2884
|
function writeFileTree(baseDir, files) {
|
package/dist/version.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __pcCreateRequire } from 'node:module'; const require = __pcCreateRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/version.ts
|
|
4
|
-
var cliVersion = false ? "0.0.0-dev" : "0.33.
|
|
4
|
+
var cliVersion = false ? "0.0.0-dev" : "0.33.1-beta.2";
|
|
5
5
|
export {
|
|
6
6
|
cliVersion
|
|
7
7
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "playcademy",
|
|
3
|
-
"version": "0.33.
|
|
3
|
+
"version": "0.33.1-beta.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@inquirer/prompts": "^7.8.6",
|
|
58
|
-
"@playcademy/sdk": "0.21.
|
|
58
|
+
"@playcademy/sdk": "0.21.1-beta.2",
|
|
59
59
|
"chokidar": "^4.0.3",
|
|
60
60
|
"colorette": "^2.0.20",
|
|
61
61
|
"commander": "^14.0.1",
|