playcademy 0.19.5 → 0.19.6-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/dist/cli.js +7 -2
- package/dist/constants.js +1 -1
- package/dist/db.js +1 -1
- package/dist/index.js +13 -3
- package/dist/runtime/backend-runtime/index.js +18 -17
- package/dist/runtime/backend-runtime/manifest.json +4 -4
- package/dist/utils.js +2 -2
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1065,7 +1065,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
1065
1065
|
// ../better-auth/package.json
|
|
1066
1066
|
var package_default = {
|
|
1067
1067
|
name: "@playcademy/better-auth",
|
|
1068
|
-
version: "0.0.
|
|
1068
|
+
version: "0.0.11-beta.2",
|
|
1069
1069
|
type: "module",
|
|
1070
1070
|
exports: {
|
|
1071
1071
|
"./server": {
|
|
@@ -1956,6 +1956,7 @@ var TIMEBACK_API_URLS;
|
|
|
1956
1956
|
var TIMEBACK_AUTH_URLS;
|
|
1957
1957
|
var CALIPER_API_URLS;
|
|
1958
1958
|
var ONEROSTER_ENDPOINTS;
|
|
1959
|
+
var QTI_ENDPOINTS;
|
|
1959
1960
|
var CALIPER_ENDPOINTS;
|
|
1960
1961
|
var CALIPER_CONSTANTS;
|
|
1961
1962
|
var TIMEBACK_EVENT_TYPES;
|
|
@@ -2003,6 +2004,10 @@ var init_constants = __esm2(() => {
|
|
|
2003
2004
|
assessmentResults: "/ims/oneroster/gradebook/v1p2/assessmentResults",
|
|
2004
2005
|
users: "/ims/oneroster/rostering/v1p2/users"
|
|
2005
2006
|
};
|
|
2007
|
+
QTI_ENDPOINTS = {
|
|
2008
|
+
assessmentTests: "/assessment-tests",
|
|
2009
|
+
assessmentItems: "/assessment-items"
|
|
2010
|
+
};
|
|
2006
2011
|
CALIPER_ENDPOINTS = {
|
|
2007
2012
|
event: "/caliper/event",
|
|
2008
2013
|
events: "/caliper/events",
|
|
@@ -3016,7 +3021,7 @@ import { existsSync as existsSync11, mkdirSync as mkdirSync5, readFileSync as re
|
|
|
3016
3021
|
import { join as join13 } from "node:path";
|
|
3017
3022
|
|
|
3018
3023
|
// src/version.ts
|
|
3019
|
-
var cliVersion = false ? "0.0.0-dev" : "0.19.
|
|
3024
|
+
var cliVersion = false ? "0.0.0-dev" : "0.19.6-beta.2";
|
|
3020
3025
|
|
|
3021
3026
|
// src/lib/init/database.ts
|
|
3022
3027
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
package/dist/constants.js
CHANGED
package/dist/db.js
CHANGED
|
@@ -36,7 +36,7 @@ var DEFAULT_API_ROUTES_DIRECTORY = join2(SERVER_ROOT_DIRECTORY, "api");
|
|
|
36
36
|
// ../better-auth/package.json
|
|
37
37
|
var package_default = {
|
|
38
38
|
name: "@playcademy/better-auth",
|
|
39
|
-
version: "0.0.
|
|
39
|
+
version: "0.0.11-beta.2",
|
|
40
40
|
type: "module",
|
|
41
41
|
exports: {
|
|
42
42
|
"./server": {
|
package/dist/index.js
CHANGED
|
@@ -326,7 +326,7 @@ var SAMPLE_BUCKET_FILENAME = "bucket.ts";
|
|
|
326
326
|
// ../better-auth/package.json
|
|
327
327
|
var package_default = {
|
|
328
328
|
name: "@playcademy/better-auth",
|
|
329
|
-
version: "0.0.
|
|
329
|
+
version: "0.0.11-beta.2",
|
|
330
330
|
type: "module",
|
|
331
331
|
exports: {
|
|
332
332
|
"./server": {
|
|
@@ -2617,6 +2617,7 @@ var TIMEBACK_API_URLS;
|
|
|
2617
2617
|
var TIMEBACK_AUTH_URLS;
|
|
2618
2618
|
var CALIPER_API_URLS;
|
|
2619
2619
|
var ONEROSTER_ENDPOINTS;
|
|
2620
|
+
var QTI_ENDPOINTS;
|
|
2620
2621
|
var CALIPER_ENDPOINTS;
|
|
2621
2622
|
var CALIPER_CONSTANTS;
|
|
2622
2623
|
var TIMEBACK_EVENT_TYPES;
|
|
@@ -2664,6 +2665,10 @@ var init_constants = __esm2(() => {
|
|
|
2664
2665
|
assessmentResults: "/ims/oneroster/gradebook/v1p2/assessmentResults",
|
|
2665
2666
|
users: "/ims/oneroster/rostering/v1p2/users"
|
|
2666
2667
|
};
|
|
2668
|
+
QTI_ENDPOINTS = {
|
|
2669
|
+
assessmentTests: "/assessment-tests",
|
|
2670
|
+
assessmentItems: "/assessment-items"
|
|
2671
|
+
};
|
|
2667
2672
|
CALIPER_ENDPOINTS = {
|
|
2668
2673
|
event: "/caliper/event",
|
|
2669
2674
|
events: "/caliper/events",
|
|
@@ -2822,6 +2827,7 @@ var TIMEBACK_API_URLS2;
|
|
|
2822
2827
|
var TIMEBACK_AUTH_URLS2;
|
|
2823
2828
|
var CALIPER_API_URLS2;
|
|
2824
2829
|
var ONEROSTER_ENDPOINTS2;
|
|
2830
|
+
var QTI_ENDPOINTS2;
|
|
2825
2831
|
var CALIPER_ENDPOINTS2;
|
|
2826
2832
|
var CALIPER_CONSTANTS2;
|
|
2827
2833
|
var TIMEBACK_EVENT_TYPES2;
|
|
@@ -2869,6 +2875,10 @@ var init_constants2 = __esm3(() => {
|
|
|
2869
2875
|
assessmentResults: "/ims/oneroster/gradebook/v1p2/assessmentResults",
|
|
2870
2876
|
users: "/ims/oneroster/rostering/v1p2/users"
|
|
2871
2877
|
};
|
|
2878
|
+
QTI_ENDPOINTS2 = {
|
|
2879
|
+
assessmentTests: "/assessment-tests",
|
|
2880
|
+
assessmentItems: "/assessment-items"
|
|
2881
|
+
};
|
|
2872
2882
|
CALIPER_ENDPOINTS2 = {
|
|
2873
2883
|
event: "/caliper/event",
|
|
2874
2884
|
events: "/caliper/events",
|
|
@@ -4021,7 +4031,7 @@ import { existsSync as existsSync9, mkdirSync as mkdirSync2, readFileSync as rea
|
|
|
4021
4031
|
import { join as join13 } from "node:path";
|
|
4022
4032
|
|
|
4023
4033
|
// src/version.ts
|
|
4024
|
-
var cliVersion = false ? "0.0.0-dev" : "0.19.
|
|
4034
|
+
var cliVersion = false ? "0.0.0-dev" : "0.19.6-beta.2";
|
|
4025
4035
|
|
|
4026
4036
|
// src/lib/init/database.ts
|
|
4027
4037
|
var drizzleConfigTemplate = loadTemplateString("database/drizzle-config.ts");
|
|
@@ -9854,7 +9864,7 @@ function findSingleBuildZip() {
|
|
|
9854
9864
|
import * as esbuild3 from "esbuild";
|
|
9855
9865
|
|
|
9856
9866
|
// ../edge-play/src/stub-entry.ts
|
|
9857
|
-
var stub_entry_default = "/**\n * Stub Worker for Static-Only Games\n *\n * Minimal worker that serves static assets with CORS headers.\n * Used for games that don't have custom backend routes.\n *\n * Features:\n * - Serves files from Workers Assets or R2 bucket binding\n * - Supports hybrid deployment strategy (small files via Assets, large files via R2)\n * - Adds CORS headers for cross-origin manifest fetching\n * - Handles OPTIONS preflight requests\n * - Returns 404 for /api/* routes (no backend deployed)\n * - Supports SPA routing (falls back to index.html)\n */\n\ninterface AssetsFetcher {\n fetch(request: Request): Promise<Response>\n}\ninterface R2Bucket {\n get(key: string): Promise<R2Object | null>\n}\ninterface R2Object {\n body: ReadableStream\n httpMetadata?: { contentType?: string }\n etag: string\n}\n\ninterface Env {\n ASSETS: AssetsFetcher | R2Bucket\n}\n\n/**\n * Detect if ASSETS binding is an R2 bucket or Workers Assets Fetcher\n */\nfunction isR2Bucket(assets: AssetsFetcher | R2Bucket): assets is R2Bucket {\n return 'get' in assets && typeof assets.get === 'function' && !('fetch' in assets)\n}\n\n/**\n * Serve from
|
|
9867
|
+
var stub_entry_default = "/**\n * Stub Worker for Static-Only Games\n *\n * Minimal worker that serves static assets with CORS headers.\n * Used for games that don't have custom backend routes.\n *\n * ## Experiment: Direct asset serving (workers-assets-cache-headers)\n *\n * For Workers Assets deployments (files <25MB), static assets are now served\n * directly by Cloudflare's asset system \u2014 this worker is only invoked for\n * `/api/*` routes (via `run_worker_first: [\"/api/*\"]`). Cache headers and SPA\n * routing are handled by the asset system config (`_headers` and\n * `not_found_handling: 'single-page-application'`).\n *\n * For R2 deployments (large files like Godot WASM), this worker still handles\n * all asset serving since R2 is not part of the Workers Assets system.\n *\n * Features:\n * - Serves files from Workers Assets or R2 bucket binding\n * - Supports hybrid deployment strategy (small files via Assets, large files via R2)\n * - Adds CORS headers for cross-origin manifest fetching\n * - Handles OPTIONS preflight requests\n * - Returns 404 for /api/* routes (no backend deployed)\n * - Supports SPA routing (falls back to index.html)\n */\n\ninterface AssetsFetcher {\n fetch(request: Request): Promise<Response>\n}\ninterface R2Bucket {\n get(key: string): Promise<R2Object | null>\n}\ninterface R2Object {\n body: ReadableStream\n httpMetadata?: { contentType?: string }\n etag: string\n}\n\ninterface Env {\n ASSETS: AssetsFetcher | R2Bucket\n}\n\n/**\n * Detect if ASSETS binding is an R2 bucket or Workers Assets Fetcher\n */\nfunction isR2Bucket(assets: AssetsFetcher | R2Bucket): assets is R2Bucket {\n return 'get' in assets && typeof assets.get === 'function' && !('fetch' in assets)\n}\n\n/**\n * Serve from R2 bucket (for large files like Godot WASM).\n * The worker always handles R2 asset serving since R2 is not part of Workers Assets.\n */\nasync function serveFromR2(request: Request, bucket: R2Bucket): Promise<Response> {\n const path = new URL(request.url).pathname\n const key = path === '/' ? 'index.html' : path.slice(1)\n\n const object = await bucket.get(key)\n\n if (object) {\n return new Response(object.body, {\n headers: {\n 'Content-Type': object.httpMetadata?.contentType || 'application/octet-stream',\n // Use 1-hour caching - balances performance with update propagation\n // (Godot and other engines use non-hashed filenames)\n 'Cache-Control': key === 'index.html' ? 'no-cache' : 'public, max-age=3600',\n ETag: object.etag,\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, HEAD, OPTIONS',\n },\n })\n }\n\n // SPA routing: if not a file request, try index.html\n if (path.includes('.')) {\n return new Response('Not Found', { status: 404 })\n }\n\n const indexObject = await bucket.get('index.html')\n\n if (indexObject) {\n return new Response(indexObject.body, {\n headers: {\n 'Content-Type': 'text/html',\n 'Cache-Control': 'no-cache',\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, HEAD, OPTIONS',\n },\n })\n }\n\n return new Response('Not Found', { status: 404 })\n}\n\n/**\n * Serve from Workers Assets (safety net).\n *\n * In the new deploy config, Workers Assets requests are served directly by the\n * asset system and never reach this worker. This function exists only as a\n * fallback for backwards compatibility with old deploy configs that still use\n * `run_worker_first: true`.\n */\nasync function serveFromAssets(request: Request, assets: AssetsFetcher): Promise<Response> {\n const response = await assets.fetch(request)\n\n if (response.status !== 404) {\n const modifiedResponse = new Response(response.body, response)\n\n modifiedResponse.headers.set('Access-Control-Allow-Origin', '*')\n modifiedResponse.headers.set('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS')\n\n return modifiedResponse\n }\n\n // SPA routing: if not a file request, try index.html\n const path = new URL(request.url).pathname\n\n if (path.includes('.')) {\n return response // File request not found\n }\n\n const indexUrl = new URL(request.url)\n\n indexUrl.pathname = '/index.html'\n\n const indexResponse = await assets.fetch(new Request(indexUrl.toString()))\n\n // Add CORS headers to index.html response\n const modifiedResponse = new Response(indexResponse.body, indexResponse)\n\n modifiedResponse.headers.set('Access-Control-Allow-Origin', '*')\n modifiedResponse.headers.set('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS')\n\n return modifiedResponse\n}\n\nexport default {\n async fetch(request: Request, env: Env): Promise<Response> {\n try {\n const url = new URL(request.url)\n\n // Handle CORS preflight\n if (request.method === 'OPTIONS') {\n const headers = new Headers()\n\n headers.set('Access-Control-Allow-Origin', '*')\n headers.set('Access-Control-Allow-Methods', 'GET, HEAD, OPTIONS')\n\n const reqHeaders = request.headers.get('Access-Control-Request-Headers')\n\n if (reqHeaders) {\n headers.set('Access-Control-Allow-Headers', reqHeaders)\n }\n\n headers.set('Access-Control-Max-Age', '86400')\n\n return new Response(null, { status: 204, headers })\n }\n\n // No backend routes available\n if (url.pathname.startsWith('/api/')) {\n return new Response('No backend deployed', { status: 404 })\n }\n\n // Serve static assets (auto-detect Workers Assets vs R2)\n if (!env.ASSETS) {\n return new Response('ASSETS binding not configured', { status: 500 })\n }\n\n return isR2Bucket(env.ASSETS)\n ? await serveFromR2(request, env.ASSETS)\n : await serveFromAssets(request, env.ASSETS)\n } catch (error) {\n return new Response(`Error: ${(error as Error).message}`, { status: 500 })\n }\n },\n}\n";
|
|
9858
9868
|
|
|
9859
9869
|
// src/lib/bundle/stub.ts
|
|
9860
9870
|
var stubEntryTemplate = stub_entry_default.toString();
|
|
@@ -352,9 +352,9 @@ var init_routes = __esm({
|
|
|
352
352
|
// ../edge-play/src/entry/metadata.ts
|
|
353
353
|
function getRuntimeMetadata() {
|
|
354
354
|
return {
|
|
355
|
-
cliVersion: true ? "0.19.
|
|
356
|
-
sdkVersion: true ? "0.7.2" : "0.0.0-dev",
|
|
357
|
-
buildId: true ? "
|
|
355
|
+
cliVersion: true ? "0.19.6-beta.2" : "0.0.0-dev",
|
|
356
|
+
sdkVersion: true ? "0.7.3-beta.2" : "0.0.0-dev",
|
|
357
|
+
buildId: true ? "5444c6c1c794" : "dev-source"
|
|
358
358
|
};
|
|
359
359
|
}
|
|
360
360
|
var init_metadata = __esm({
|
|
@@ -3055,19 +3055,6 @@ function registerApiNotFoundHandler(app) {
|
|
|
3055
3055
|
function isR2AssetsBinding(assets) {
|
|
3056
3056
|
return "get" in assets && typeof assets.get === "function" && !("fetch" in assets);
|
|
3057
3057
|
}
|
|
3058
|
-
async function serveFromWorkersAssets(c, assets) {
|
|
3059
|
-
const response = await assets.fetch(c.req.raw);
|
|
3060
|
-
if (response.status !== 404) {
|
|
3061
|
-
return response;
|
|
3062
|
-
}
|
|
3063
|
-
const path = new URL(c.req.url).pathname;
|
|
3064
|
-
if (path.includes(".")) {
|
|
3065
|
-
return response;
|
|
3066
|
-
}
|
|
3067
|
-
const indexUrl = new URL(c.req.url);
|
|
3068
|
-
indexUrl.pathname = "/index.html";
|
|
3069
|
-
return await assets.fetch(new Request(indexUrl.toString()));
|
|
3070
|
-
}
|
|
3071
3058
|
async function serveFromR2(c, bucket) {
|
|
3072
3059
|
const path = new URL(c.req.url).pathname;
|
|
3073
3060
|
const key = path === "/" ? "index.html" : path.slice(1);
|
|
@@ -3109,7 +3096,21 @@ function registerAssetFallback(app) {
|
|
|
3109
3096
|
404
|
|
3110
3097
|
);
|
|
3111
3098
|
}
|
|
3112
|
-
|
|
3099
|
+
if (isR2AssetsBinding(c.env.ASSETS)) {
|
|
3100
|
+
return await serveFromR2(c, c.env.ASSETS);
|
|
3101
|
+
}
|
|
3102
|
+
const assets = c.env.ASSETS;
|
|
3103
|
+
const response = await assets.fetch(c.req.raw);
|
|
3104
|
+
if (response.status !== 404) {
|
|
3105
|
+
return response;
|
|
3106
|
+
}
|
|
3107
|
+
const path = new URL(c.req.url).pathname;
|
|
3108
|
+
if (path.includes(".")) {
|
|
3109
|
+
return response;
|
|
3110
|
+
}
|
|
3111
|
+
const indexUrl = new URL(c.req.url);
|
|
3112
|
+
indexUrl.pathname = "/index.html";
|
|
3113
|
+
return await assets.fetch(new Request(indexUrl.toString()));
|
|
3113
3114
|
});
|
|
3114
3115
|
}
|
|
3115
3116
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"cliVersion": "0.19.
|
|
3
|
-
"sdkVersion": "0.7.2",
|
|
4
|
-
"runtimeBuildId": "
|
|
5
|
-
"inputFingerprint": "
|
|
2
|
+
"cliVersion": "0.19.6-beta.2",
|
|
3
|
+
"sdkVersion": "0.7.3-beta.2",
|
|
4
|
+
"runtimeBuildId": "5444c6c1c794",
|
|
5
|
+
"inputFingerprint": "5444c6c1c79435ca312f88adf9ea7d5bf4a9efce39c1aa9dc03768a67955c5ac",
|
|
6
6
|
"entry": "index.js"
|
|
7
7
|
}
|
package/dist/utils.js
CHANGED
|
@@ -479,7 +479,7 @@ var DEFAULT_API_ROUTES_DIRECTORY = join2(SERVER_ROOT_DIRECTORY, "api");
|
|
|
479
479
|
// ../better-auth/package.json
|
|
480
480
|
var package_default = {
|
|
481
481
|
name: "@playcademy/better-auth",
|
|
482
|
-
version: "0.0.
|
|
482
|
+
version: "0.0.11-beta.2",
|
|
483
483
|
type: "module",
|
|
484
484
|
exports: {
|
|
485
485
|
"./server": {
|
|
@@ -2560,7 +2560,7 @@ import { existsSync as existsSync8, mkdirSync as mkdirSync2, writeFileSync as wr
|
|
|
2560
2560
|
import { dirname as dirname4, join as join13 } from "node:path";
|
|
2561
2561
|
|
|
2562
2562
|
// src/version.ts
|
|
2563
|
-
var cliVersion = false ? "0.0.0-dev" : "0.19.
|
|
2563
|
+
var cliVersion = false ? "0.0.0-dev" : "0.19.6-beta.2";
|
|
2564
2564
|
|
|
2565
2565
|
// src/lib/build/binary-resource.ts
|
|
2566
2566
|
function writeFileTree(baseDir, files) {
|
package/dist/version.js
CHANGED