@playcademy/sandbox 0.3.12 → 0.3.13
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 +79 -33
- package/dist/constants.js +7 -3
- package/dist/server.js +79 -33
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -351,11 +351,15 @@ var init_overworld = __esm(() => {
|
|
|
351
351
|
var PLATFORM_TIMEZONE = "America/New_York";
|
|
352
352
|
|
|
353
353
|
// ../constants/src/timeback.ts
|
|
354
|
-
var TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY";
|
|
355
|
-
var init_timeback2 = () => {
|
|
354
|
+
var TIMEBACK_ROUTES, TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY";
|
|
355
|
+
var init_timeback2 = __esm(() => {
|
|
356
|
+
TIMEBACK_ROUTES = {
|
|
357
|
+
END_ACTIVITY: "/integrations/timeback/end-activity"
|
|
358
|
+
};
|
|
359
|
+
});
|
|
356
360
|
|
|
357
361
|
// ../constants/src/workers.ts
|
|
358
|
-
var WORKER_NAMING;
|
|
362
|
+
var WORKER_NAMING, SECRETS_PREFIX = "secrets_";
|
|
359
363
|
var init_workers = __esm(() => {
|
|
360
364
|
WORKER_NAMING = {
|
|
361
365
|
STAGING_PREFIX: "staging-",
|
|
@@ -1225,7 +1229,7 @@ var package_default;
|
|
|
1225
1229
|
var init_package = __esm(() => {
|
|
1226
1230
|
package_default = {
|
|
1227
1231
|
name: "@playcademy/sandbox",
|
|
1228
|
-
version: "0.3.
|
|
1232
|
+
version: "0.3.13",
|
|
1229
1233
|
description: "Local development server for Playcademy game development",
|
|
1230
1234
|
type: "module",
|
|
1231
1235
|
exports: {
|
|
@@ -15816,8 +15820,9 @@ class SecretsService {
|
|
|
15816
15820
|
}
|
|
15817
15821
|
}
|
|
15818
15822
|
}
|
|
15819
|
-
var logger21,
|
|
15823
|
+
var logger21, INTERNAL_SECRET_KEYS;
|
|
15820
15824
|
var init_secrets_service = __esm(() => {
|
|
15825
|
+
init_src();
|
|
15821
15826
|
init_src2();
|
|
15822
15827
|
init_config2();
|
|
15823
15828
|
init_errors();
|
|
@@ -15826,6 +15831,32 @@ var init_secrets_service = __esm(() => {
|
|
|
15826
15831
|
INTERNAL_SECRET_KEYS = ["PLAYCADEMY_API_KEY", "GAME_ID", "PLAYCADEMY_BASE_URL"];
|
|
15827
15832
|
});
|
|
15828
15833
|
|
|
15834
|
+
// ../edge-play/src/constants.ts
|
|
15835
|
+
var ROUTES;
|
|
15836
|
+
var init_constants2 = __esm(() => {
|
|
15837
|
+
init_src();
|
|
15838
|
+
ROUTES = {
|
|
15839
|
+
INDEX: "/api",
|
|
15840
|
+
HEALTH: "/api/health",
|
|
15841
|
+
TIMEBACK: {
|
|
15842
|
+
END_ACTIVITY: `/api${TIMEBACK_ROUTES.END_ACTIVITY}`
|
|
15843
|
+
}
|
|
15844
|
+
};
|
|
15845
|
+
});
|
|
15846
|
+
|
|
15847
|
+
// ../edge-play/src/entry/setup.ts
|
|
15848
|
+
function prefixSecrets(secrets) {
|
|
15849
|
+
const prefixed = {};
|
|
15850
|
+
for (const [key, value] of Object.entries(secrets)) {
|
|
15851
|
+
prefixed[SECRETS_PREFIX + key] = value;
|
|
15852
|
+
}
|
|
15853
|
+
return prefixed;
|
|
15854
|
+
}
|
|
15855
|
+
var init_setup = __esm(() => {
|
|
15856
|
+
init_src();
|
|
15857
|
+
init_constants2();
|
|
15858
|
+
});
|
|
15859
|
+
|
|
15829
15860
|
// ../api-core/src/services/seed.service.ts
|
|
15830
15861
|
class SeedService {
|
|
15831
15862
|
ctx;
|
|
@@ -15840,7 +15871,7 @@ class SeedService {
|
|
|
15840
15871
|
}
|
|
15841
15872
|
return cf;
|
|
15842
15873
|
}
|
|
15843
|
-
async seed(slug2, code, user) {
|
|
15874
|
+
async seed(slug2, code, user, secrets) {
|
|
15844
15875
|
const cf = this.getCloudflare();
|
|
15845
15876
|
const game = await this.ctx.services.game.validateDeveloperAccessBySlug(user, slug2);
|
|
15846
15877
|
const isProd = isProduction2(this.ctx.config);
|
|
@@ -15852,10 +15883,11 @@ class SeedService {
|
|
|
15852
15883
|
gameId: game.id,
|
|
15853
15884
|
slug: slug2,
|
|
15854
15885
|
deploymentId,
|
|
15855
|
-
codeLength: code.length
|
|
15886
|
+
codeLength: code.length,
|
|
15887
|
+
secretCount: secrets ? Object.keys(secrets).length : 0
|
|
15856
15888
|
});
|
|
15857
15889
|
try {
|
|
15858
|
-
const workerResponse = await this.deployAndExecuteSeedWorker(cf, seedDeploymentId, game.id, deploymentId, code);
|
|
15890
|
+
const workerResponse = await this.deployAndExecuteSeedWorker(cf, seedDeploymentId, game.id, deploymentId, code, secrets);
|
|
15859
15891
|
logger22.info("Seed completed", {
|
|
15860
15892
|
gameId: game.id,
|
|
15861
15893
|
slug: slug2,
|
|
@@ -15927,7 +15959,7 @@ class SeedService {
|
|
|
15927
15959
|
});
|
|
15928
15960
|
}
|
|
15929
15961
|
}
|
|
15930
|
-
async deployAndExecuteSeedWorker(cf, seedDeploymentId, gameId, deploymentId, workerCode) {
|
|
15962
|
+
async deployAndExecuteSeedWorker(cf, seedDeploymentId, gameId, deploymentId, workerCode, secrets) {
|
|
15931
15963
|
try {
|
|
15932
15964
|
const result = await cf.deploy(seedDeploymentId, workerCode, {
|
|
15933
15965
|
GAME_ID: gameId,
|
|
@@ -15937,6 +15969,13 @@ class SeedService {
|
|
|
15937
15969
|
keepAssets: false
|
|
15938
15970
|
});
|
|
15939
15971
|
logger22.info("Worker deployed", { seedDeploymentId, url: result.url });
|
|
15972
|
+
if (secrets && Object.keys(secrets).length > 0) {
|
|
15973
|
+
await cf.setSecrets(seedDeploymentId, prefixSecrets(secrets));
|
|
15974
|
+
logger22.info("Secrets bound to worker", {
|
|
15975
|
+
seedDeploymentId,
|
|
15976
|
+
count: Object.keys(secrets).length
|
|
15977
|
+
});
|
|
15978
|
+
}
|
|
15940
15979
|
return await this.executeSeedWorker(result.url, seedDeploymentId);
|
|
15941
15980
|
} finally {
|
|
15942
15981
|
await this.cleanupSeedWorker(cf, seedDeploymentId);
|
|
@@ -16052,6 +16091,7 @@ class SeedService {
|
|
|
16052
16091
|
}
|
|
16053
16092
|
var logger22;
|
|
16054
16093
|
var init_seed_service = __esm(() => {
|
|
16094
|
+
init_setup();
|
|
16055
16095
|
init_src2();
|
|
16056
16096
|
init_config2();
|
|
16057
16097
|
init_errors();
|
|
@@ -16519,7 +16559,7 @@ function isTimebackSubject(value) {
|
|
|
16519
16559
|
function isTimebackGrade(value) {
|
|
16520
16560
|
return typeof value === "number" && Number.isInteger(value) && GRADE_VALUES.includes(value);
|
|
16521
16561
|
}
|
|
16522
|
-
var __esm2 = (fn, res) => () => (fn && (res = fn(fn = 0)), res), ACHIEVEMENT_IDS2, ACHIEVEMENT_DEFINITIONS2, init_achievements2, init_auth2 = () => {}, TSC_PACKAGE2 = "@typescript/native-preview", USE_NATIVE_TSC2, init_typescript2, init_character2 = () => {}, PLAYCADEMY_BASE_URLS, init_domains2, init_env_vars2 = () => {}, ITEM_SLUGS2, CURRENCIES2, BADGES2, init_overworld2, TIMEBACK_CALIPER_SENSORS, TIMEBACK_ORG_SOURCED_ID2 = "PLAYCADEMY", TIMEBACK_ORG_NAME = "Playcademy Studios", TIMEBACK_ORG_TYPE = "department", TIMEBACK_COURSE_DEFAULTS, TIMEBACK_RESOURCE_DEFAULTS, TIMEBACK_COMPONENT_DEFAULTS, TIMEBACK_COMPONENT_RESOURCE_DEFAULTS, init_timeback3, init_workers2 = () => {}, init_src5, TIMEBACK_API_URLS, TIMEBACK_AUTH_URLS, CALIPER_API_URLS, ONEROSTER_ENDPOINTS, CALIPER_ENDPOINTS, CALIPER_CONSTANTS, TIMEBACK_EVENT_TYPES, TIMEBACK_ACTIONS, TIMEBACK_TYPES, ACTIVITY_METRIC_TYPES, TIME_METRIC_TYPES, TIMEBACK_SUBJECTS, TIMEBACK_GRADE_LEVELS, TIMEBACK_GRADE_LEVEL_LABELS, CALIPER_SUBJECTS, ONEROSTER_STATUS, SCORE_STATUS, ENV_VARS, HTTP_DEFAULTS, AUTH_DEFAULTS, CACHE_DEFAULTS, CONFIG_DEFAULTS, PLAYCADEMY_DEFAULTS, RESOURCE_DEFAULTS, HTTP_STATUS, ERROR_NAMES,
|
|
16562
|
+
var __esm2 = (fn, res) => () => (fn && (res = fn(fn = 0)), res), ACHIEVEMENT_IDS2, ACHIEVEMENT_DEFINITIONS2, init_achievements2, init_auth2 = () => {}, TSC_PACKAGE2 = "@typescript/native-preview", USE_NATIVE_TSC2, init_typescript2, init_character2 = () => {}, PLAYCADEMY_BASE_URLS, init_domains2, init_env_vars2 = () => {}, ITEM_SLUGS2, CURRENCIES2, BADGES2, init_overworld2, TIMEBACK_CALIPER_SENSORS, TIMEBACK_ORG_SOURCED_ID2 = "PLAYCADEMY", TIMEBACK_ORG_NAME = "Playcademy Studios", TIMEBACK_ORG_TYPE = "department", TIMEBACK_COURSE_DEFAULTS, TIMEBACK_RESOURCE_DEFAULTS, TIMEBACK_COMPONENT_DEFAULTS, TIMEBACK_COMPONENT_RESOURCE_DEFAULTS, init_timeback3, init_workers2 = () => {}, init_src5, TIMEBACK_API_URLS, TIMEBACK_AUTH_URLS, CALIPER_API_URLS, ONEROSTER_ENDPOINTS, CALIPER_ENDPOINTS, CALIPER_CONSTANTS, TIMEBACK_EVENT_TYPES, TIMEBACK_ACTIONS, TIMEBACK_TYPES, ACTIVITY_METRIC_TYPES, TIME_METRIC_TYPES, TIMEBACK_SUBJECTS, TIMEBACK_GRADE_LEVELS, TIMEBACK_GRADE_LEVEL_LABELS, CALIPER_SUBJECTS, ONEROSTER_STATUS, SCORE_STATUS, ENV_VARS, HTTP_DEFAULTS, AUTH_DEFAULTS, CACHE_DEFAULTS, CONFIG_DEFAULTS, PLAYCADEMY_DEFAULTS, RESOURCE_DEFAULTS, HTTP_STATUS, ERROR_NAMES, init_constants3, isObject = (value) => typeof value === "object" && value !== null, SUBJECT_VALUES, GRADE_VALUES;
|
|
16523
16563
|
var init_types7 = __esm(() => {
|
|
16524
16564
|
init_achievements2 = __esm2(() => {
|
|
16525
16565
|
ACHIEVEMENT_IDS2 = {
|
|
@@ -16696,7 +16736,7 @@ var init_types7 = __esm(() => {
|
|
|
16696
16736
|
init_timeback3();
|
|
16697
16737
|
init_workers2();
|
|
16698
16738
|
});
|
|
16699
|
-
|
|
16739
|
+
init_constants3 = __esm2(() => {
|
|
16700
16740
|
init_src5();
|
|
16701
16741
|
TIMEBACK_API_URLS = {
|
|
16702
16742
|
production: "https://api.alpha-1edtech.ai",
|
|
@@ -16871,7 +16911,7 @@ var init_types7 = __esm(() => {
|
|
|
16871
16911
|
timebackSdk: "TimebackSDKError"
|
|
16872
16912
|
};
|
|
16873
16913
|
});
|
|
16874
|
-
|
|
16914
|
+
init_constants3();
|
|
16875
16915
|
SUBJECT_VALUES = TIMEBACK_SUBJECTS;
|
|
16876
16916
|
GRADE_VALUES = TIMEBACK_GRADE_LEVELS;
|
|
16877
16917
|
});
|
|
@@ -20169,7 +20209,7 @@ var __defProp2, __export2 = (target, all) => {
|
|
|
20169
20209
|
course: (courseId) => `${base}${ONEROSTER_ENDPOINTS2.courses}/${courseId}`,
|
|
20170
20210
|
componentResource: (resourceId) => `${base}${ONEROSTER_ENDPOINTS2.componentResources}/${resourceId}`
|
|
20171
20211
|
};
|
|
20172
|
-
}, CALIPER_CONSTANTS2, TIMEBACK_EVENT_TYPES2, TIMEBACK_ACTIONS2, TIMEBACK_TYPES2, ACTIVITY_METRIC_TYPES2, TIME_METRIC_TYPES2, TIMEBACK_SUBJECTS2, TIMEBACK_GRADE_LEVELS2, TIMEBACK_GRADE_LEVEL_LABELS2, CALIPER_SUBJECTS2, ONEROSTER_STATUS2, SCORE_STATUS2, ENV_VARS2, HTTP_DEFAULTS2, AUTH_DEFAULTS2, CACHE_DEFAULTS2, CONFIG_DEFAULTS2, PLAYCADEMY_DEFAULTS2, RESOURCE_DEFAULTS2, HTTP_STATUS2, ERROR_NAMES2,
|
|
20212
|
+
}, CALIPER_CONSTANTS2, TIMEBACK_EVENT_TYPES2, TIMEBACK_ACTIONS2, TIMEBACK_TYPES2, ACTIVITY_METRIC_TYPES2, TIME_METRIC_TYPES2, TIMEBACK_SUBJECTS2, TIMEBACK_GRADE_LEVELS2, TIMEBACK_GRADE_LEVEL_LABELS2, CALIPER_SUBJECTS2, ONEROSTER_STATUS2, SCORE_STATUS2, ENV_VARS2, HTTP_DEFAULTS2, AUTH_DEFAULTS2, CACHE_DEFAULTS2, CONFIG_DEFAULTS2, PLAYCADEMY_DEFAULTS2, RESOURCE_DEFAULTS2, HTTP_STATUS2, ERROR_NAMES2, init_constants4, exports_verify, init_verify, TimebackError, TimebackApiError, TimebackAuthenticationError, StudentNotFoundError, ConfigurationError, ResourceNotFoundError, isObject2 = (value) => typeof value === "object" && value !== null, SUBJECT_VALUES2, GRADE_VALUES2, isBrowser2 = () => {
|
|
20173
20213
|
const g = globalThis;
|
|
20174
20214
|
return typeof g.window !== "undefined" && typeof g.document !== "undefined";
|
|
20175
20215
|
}, isProduction3 = () => {
|
|
@@ -20708,7 +20748,7 @@ var init_dist3 = __esm(() => {
|
|
|
20708
20748
|
init_timeback4();
|
|
20709
20749
|
init_workers3();
|
|
20710
20750
|
});
|
|
20711
|
-
|
|
20751
|
+
init_constants4 = __esm3(() => {
|
|
20712
20752
|
init_src6();
|
|
20713
20753
|
TIMEBACK_API_URLS2 = {
|
|
20714
20754
|
production: "https://api.alpha-1edtech.ai",
|
|
@@ -20889,9 +20929,9 @@ var init_dist3 = __esm(() => {
|
|
|
20889
20929
|
fetchTimebackConfig: () => fetchTimebackConfig
|
|
20890
20930
|
});
|
|
20891
20931
|
init_verify = __esm3(() => {
|
|
20892
|
-
|
|
20932
|
+
init_constants4();
|
|
20893
20933
|
});
|
|
20894
|
-
|
|
20934
|
+
init_constants4();
|
|
20895
20935
|
TimebackError = class TimebackError extends Error {
|
|
20896
20936
|
constructor(message) {
|
|
20897
20937
|
super(message);
|
|
@@ -20948,7 +20988,7 @@ var init_dist3 = __esm(() => {
|
|
|
20948
20988
|
Object.setPrototypeOf(this, ResourceNotFoundError.prototype);
|
|
20949
20989
|
}
|
|
20950
20990
|
};
|
|
20951
|
-
|
|
20991
|
+
init_constants4();
|
|
20952
20992
|
SUBJECT_VALUES2 = TIMEBACK_SUBJECTS2;
|
|
20953
20993
|
GRADE_VALUES2 = TIMEBACK_GRADE_LEVELS2;
|
|
20954
20994
|
colors3 = {
|
|
@@ -20969,8 +21009,8 @@ var init_dist3 = __esm(() => {
|
|
|
20969
21009
|
};
|
|
20970
21010
|
log3 = createLogger2();
|
|
20971
21011
|
init_verify();
|
|
20972
|
-
|
|
20973
|
-
|
|
21012
|
+
init_constants4();
|
|
21013
|
+
init_constants4();
|
|
20974
21014
|
if (process.env.DEBUG === "true") {
|
|
20975
21015
|
process.env.TERM = "dumb";
|
|
20976
21016
|
}
|
|
@@ -20982,13 +21022,13 @@ var init_dist3 = __esm(() => {
|
|
|
20982
21022
|
this.name = ERROR_NAMES2.timebackAuth;
|
|
20983
21023
|
}
|
|
20984
21024
|
};
|
|
20985
|
-
|
|
20986
|
-
|
|
20987
|
-
|
|
20988
|
-
|
|
20989
|
-
|
|
20990
|
-
|
|
20991
|
-
|
|
21025
|
+
init_constants4();
|
|
21026
|
+
init_constants4();
|
|
21027
|
+
init_constants4();
|
|
21028
|
+
init_constants4();
|
|
21029
|
+
init_constants4();
|
|
21030
|
+
init_constants4();
|
|
21031
|
+
init_constants4();
|
|
20992
21032
|
exports_external2 = {};
|
|
20993
21033
|
__export2(exports_external2, {
|
|
20994
21034
|
void: () => voidType2,
|
|
@@ -24546,7 +24586,7 @@ var init_http_exception = () => {};
|
|
|
24546
24586
|
|
|
24547
24587
|
// ../../node_modules/hono/dist/request/constants.js
|
|
24548
24588
|
var GET_MATCH_RESULT;
|
|
24549
|
-
var
|
|
24589
|
+
var init_constants5 = __esm(() => {
|
|
24550
24590
|
GET_MATCH_RESULT = Symbol();
|
|
24551
24591
|
});
|
|
24552
24592
|
|
|
@@ -24810,7 +24850,7 @@ var init_url = __esm(() => {
|
|
|
24810
24850
|
var tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_), HonoRequest;
|
|
24811
24851
|
var init_request = __esm(() => {
|
|
24812
24852
|
init_http_exception();
|
|
24813
|
-
|
|
24853
|
+
init_constants5();
|
|
24814
24854
|
init_body();
|
|
24815
24855
|
init_url();
|
|
24816
24856
|
HonoRequest = class {
|
|
@@ -25140,7 +25180,7 @@ var init_router = __esm(() => {
|
|
|
25140
25180
|
|
|
25141
25181
|
// ../../node_modules/hono/dist/utils/constants.js
|
|
25142
25182
|
var COMPOSED_HANDLER = "__COMPOSED_HANDLER";
|
|
25143
|
-
var
|
|
25183
|
+
var init_constants6 = () => {};
|
|
25144
25184
|
|
|
25145
25185
|
// ../../node_modules/hono/dist/hono-base.js
|
|
25146
25186
|
var notFoundHandler = (c) => {
|
|
@@ -25362,7 +25402,7 @@ var init_hono_base = __esm(() => {
|
|
|
25362
25402
|
init_compose();
|
|
25363
25403
|
init_context2();
|
|
25364
25404
|
init_router();
|
|
25365
|
-
|
|
25405
|
+
init_constants6();
|
|
25366
25406
|
init_url();
|
|
25367
25407
|
});
|
|
25368
25408
|
|
|
@@ -82719,7 +82759,8 @@ var init_schemas3 = __esm(() => {
|
|
|
82719
82759
|
});
|
|
82720
82760
|
SetSecretsRequestSchema = exports_external.record(exports_external.string().min(1), exports_external.string());
|
|
82721
82761
|
SeedRequestSchema = exports_external.object({
|
|
82722
|
-
code: exports_external.string().min(1, "Seed code is required")
|
|
82762
|
+
code: exports_external.string().min(1, "Seed code is required"),
|
|
82763
|
+
secrets: exports_external.record(exports_external.string(), exports_external.string()).optional()
|
|
82723
82764
|
});
|
|
82724
82765
|
SchemaInfoSchema = exports_external.object({
|
|
82725
82766
|
sql: exports_external.string(),
|
|
@@ -93884,8 +93925,13 @@ var init_seed_controller = __esm(() => {
|
|
|
93884
93925
|
}
|
|
93885
93926
|
throw ApiError.badRequest("Invalid JSON body");
|
|
93886
93927
|
}
|
|
93887
|
-
logger55.debug("Seeding database", {
|
|
93888
|
-
|
|
93928
|
+
logger55.debug("Seeding database", {
|
|
93929
|
+
userId: ctx.user.id,
|
|
93930
|
+
slug: slug2,
|
|
93931
|
+
codeLength: body2.code.length,
|
|
93932
|
+
secretCount: body2.secrets ? Object.keys(body2.secrets).length : 0
|
|
93933
|
+
});
|
|
93934
|
+
return ctx.services.seed.seed(slug2, body2.code, ctx.user, body2.secrets);
|
|
93889
93935
|
});
|
|
93890
93936
|
});
|
|
93891
93937
|
|
package/dist/constants.js
CHANGED
|
@@ -197,11 +197,15 @@ var init_overworld = __esm(() => {
|
|
|
197
197
|
var PLATFORM_TIMEZONE = "America/New_York";
|
|
198
198
|
|
|
199
199
|
// ../constants/src/timeback.ts
|
|
200
|
-
var TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY";
|
|
201
|
-
var init_timeback = () => {
|
|
200
|
+
var TIMEBACK_ROUTES, TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY";
|
|
201
|
+
var init_timeback = __esm(() => {
|
|
202
|
+
TIMEBACK_ROUTES = {
|
|
203
|
+
END_ACTIVITY: "/integrations/timeback/end-activity"
|
|
204
|
+
};
|
|
205
|
+
});
|
|
202
206
|
|
|
203
207
|
// ../constants/src/workers.ts
|
|
204
|
-
var WORKER_NAMING;
|
|
208
|
+
var WORKER_NAMING, SECRETS_PREFIX = "secrets_";
|
|
205
209
|
var init_workers = __esm(() => {
|
|
206
210
|
WORKER_NAMING = {
|
|
207
211
|
STAGING_PREFIX: "staging-",
|
package/dist/server.js
CHANGED
|
@@ -350,11 +350,15 @@ var init_overworld = __esm(() => {
|
|
|
350
350
|
var PLATFORM_TIMEZONE = "America/New_York";
|
|
351
351
|
|
|
352
352
|
// ../constants/src/timeback.ts
|
|
353
|
-
var TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY";
|
|
354
|
-
var init_timeback2 = () => {
|
|
353
|
+
var TIMEBACK_ROUTES, TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY";
|
|
354
|
+
var init_timeback2 = __esm(() => {
|
|
355
|
+
TIMEBACK_ROUTES = {
|
|
356
|
+
END_ACTIVITY: "/integrations/timeback/end-activity"
|
|
357
|
+
};
|
|
358
|
+
});
|
|
355
359
|
|
|
356
360
|
// ../constants/src/workers.ts
|
|
357
|
-
var WORKER_NAMING;
|
|
361
|
+
var WORKER_NAMING, SECRETS_PREFIX = "secrets_";
|
|
358
362
|
var init_workers = __esm(() => {
|
|
359
363
|
WORKER_NAMING = {
|
|
360
364
|
STAGING_PREFIX: "staging-",
|
|
@@ -1224,7 +1228,7 @@ var package_default;
|
|
|
1224
1228
|
var init_package = __esm(() => {
|
|
1225
1229
|
package_default = {
|
|
1226
1230
|
name: "@playcademy/sandbox",
|
|
1227
|
-
version: "0.3.
|
|
1231
|
+
version: "0.3.13",
|
|
1228
1232
|
description: "Local development server for Playcademy game development",
|
|
1229
1233
|
type: "module",
|
|
1230
1234
|
exports: {
|
|
@@ -15815,8 +15819,9 @@ class SecretsService {
|
|
|
15815
15819
|
}
|
|
15816
15820
|
}
|
|
15817
15821
|
}
|
|
15818
|
-
var logger21,
|
|
15822
|
+
var logger21, INTERNAL_SECRET_KEYS;
|
|
15819
15823
|
var init_secrets_service = __esm(() => {
|
|
15824
|
+
init_src();
|
|
15820
15825
|
init_src2();
|
|
15821
15826
|
init_config2();
|
|
15822
15827
|
init_errors();
|
|
@@ -15825,6 +15830,32 @@ var init_secrets_service = __esm(() => {
|
|
|
15825
15830
|
INTERNAL_SECRET_KEYS = ["PLAYCADEMY_API_KEY", "GAME_ID", "PLAYCADEMY_BASE_URL"];
|
|
15826
15831
|
});
|
|
15827
15832
|
|
|
15833
|
+
// ../edge-play/src/constants.ts
|
|
15834
|
+
var ROUTES;
|
|
15835
|
+
var init_constants2 = __esm(() => {
|
|
15836
|
+
init_src();
|
|
15837
|
+
ROUTES = {
|
|
15838
|
+
INDEX: "/api",
|
|
15839
|
+
HEALTH: "/api/health",
|
|
15840
|
+
TIMEBACK: {
|
|
15841
|
+
END_ACTIVITY: `/api${TIMEBACK_ROUTES.END_ACTIVITY}`
|
|
15842
|
+
}
|
|
15843
|
+
};
|
|
15844
|
+
});
|
|
15845
|
+
|
|
15846
|
+
// ../edge-play/src/entry/setup.ts
|
|
15847
|
+
function prefixSecrets(secrets) {
|
|
15848
|
+
const prefixed = {};
|
|
15849
|
+
for (const [key, value] of Object.entries(secrets)) {
|
|
15850
|
+
prefixed[SECRETS_PREFIX + key] = value;
|
|
15851
|
+
}
|
|
15852
|
+
return prefixed;
|
|
15853
|
+
}
|
|
15854
|
+
var init_setup = __esm(() => {
|
|
15855
|
+
init_src();
|
|
15856
|
+
init_constants2();
|
|
15857
|
+
});
|
|
15858
|
+
|
|
15828
15859
|
// ../api-core/src/services/seed.service.ts
|
|
15829
15860
|
class SeedService {
|
|
15830
15861
|
ctx;
|
|
@@ -15839,7 +15870,7 @@ class SeedService {
|
|
|
15839
15870
|
}
|
|
15840
15871
|
return cf;
|
|
15841
15872
|
}
|
|
15842
|
-
async seed(slug2, code, user) {
|
|
15873
|
+
async seed(slug2, code, user, secrets) {
|
|
15843
15874
|
const cf = this.getCloudflare();
|
|
15844
15875
|
const game = await this.ctx.services.game.validateDeveloperAccessBySlug(user, slug2);
|
|
15845
15876
|
const isProd = isProduction2(this.ctx.config);
|
|
@@ -15851,10 +15882,11 @@ class SeedService {
|
|
|
15851
15882
|
gameId: game.id,
|
|
15852
15883
|
slug: slug2,
|
|
15853
15884
|
deploymentId,
|
|
15854
|
-
codeLength: code.length
|
|
15885
|
+
codeLength: code.length,
|
|
15886
|
+
secretCount: secrets ? Object.keys(secrets).length : 0
|
|
15855
15887
|
});
|
|
15856
15888
|
try {
|
|
15857
|
-
const workerResponse = await this.deployAndExecuteSeedWorker(cf, seedDeploymentId, game.id, deploymentId, code);
|
|
15889
|
+
const workerResponse = await this.deployAndExecuteSeedWorker(cf, seedDeploymentId, game.id, deploymentId, code, secrets);
|
|
15858
15890
|
logger22.info("Seed completed", {
|
|
15859
15891
|
gameId: game.id,
|
|
15860
15892
|
slug: slug2,
|
|
@@ -15926,7 +15958,7 @@ class SeedService {
|
|
|
15926
15958
|
});
|
|
15927
15959
|
}
|
|
15928
15960
|
}
|
|
15929
|
-
async deployAndExecuteSeedWorker(cf, seedDeploymentId, gameId, deploymentId, workerCode) {
|
|
15961
|
+
async deployAndExecuteSeedWorker(cf, seedDeploymentId, gameId, deploymentId, workerCode, secrets) {
|
|
15930
15962
|
try {
|
|
15931
15963
|
const result = await cf.deploy(seedDeploymentId, workerCode, {
|
|
15932
15964
|
GAME_ID: gameId,
|
|
@@ -15936,6 +15968,13 @@ class SeedService {
|
|
|
15936
15968
|
keepAssets: false
|
|
15937
15969
|
});
|
|
15938
15970
|
logger22.info("Worker deployed", { seedDeploymentId, url: result.url });
|
|
15971
|
+
if (secrets && Object.keys(secrets).length > 0) {
|
|
15972
|
+
await cf.setSecrets(seedDeploymentId, prefixSecrets(secrets));
|
|
15973
|
+
logger22.info("Secrets bound to worker", {
|
|
15974
|
+
seedDeploymentId,
|
|
15975
|
+
count: Object.keys(secrets).length
|
|
15976
|
+
});
|
|
15977
|
+
}
|
|
15939
15978
|
return await this.executeSeedWorker(result.url, seedDeploymentId);
|
|
15940
15979
|
} finally {
|
|
15941
15980
|
await this.cleanupSeedWorker(cf, seedDeploymentId);
|
|
@@ -16051,6 +16090,7 @@ class SeedService {
|
|
|
16051
16090
|
}
|
|
16052
16091
|
var logger22;
|
|
16053
16092
|
var init_seed_service = __esm(() => {
|
|
16093
|
+
init_setup();
|
|
16054
16094
|
init_src2();
|
|
16055
16095
|
init_config2();
|
|
16056
16096
|
init_errors();
|
|
@@ -16518,7 +16558,7 @@ function isTimebackSubject(value) {
|
|
|
16518
16558
|
function isTimebackGrade(value) {
|
|
16519
16559
|
return typeof value === "number" && Number.isInteger(value) && GRADE_VALUES.includes(value);
|
|
16520
16560
|
}
|
|
16521
|
-
var __esm2 = (fn, res) => () => (fn && (res = fn(fn = 0)), res), ACHIEVEMENT_IDS2, ACHIEVEMENT_DEFINITIONS2, init_achievements2, init_auth2 = () => {}, TSC_PACKAGE2 = "@typescript/native-preview", USE_NATIVE_TSC2, init_typescript2, init_character2 = () => {}, PLAYCADEMY_BASE_URLS, init_domains2, init_env_vars2 = () => {}, ITEM_SLUGS2, CURRENCIES2, BADGES2, init_overworld2, TIMEBACK_CALIPER_SENSORS, TIMEBACK_ORG_SOURCED_ID2 = "PLAYCADEMY", TIMEBACK_ORG_NAME = "Playcademy Studios", TIMEBACK_ORG_TYPE = "department", TIMEBACK_COURSE_DEFAULTS, TIMEBACK_RESOURCE_DEFAULTS, TIMEBACK_COMPONENT_DEFAULTS, TIMEBACK_COMPONENT_RESOURCE_DEFAULTS, init_timeback3, init_workers2 = () => {}, init_src5, TIMEBACK_API_URLS, TIMEBACK_AUTH_URLS, CALIPER_API_URLS, ONEROSTER_ENDPOINTS, CALIPER_ENDPOINTS, CALIPER_CONSTANTS, TIMEBACK_EVENT_TYPES, TIMEBACK_ACTIONS, TIMEBACK_TYPES, ACTIVITY_METRIC_TYPES, TIME_METRIC_TYPES, TIMEBACK_SUBJECTS, TIMEBACK_GRADE_LEVELS, TIMEBACK_GRADE_LEVEL_LABELS, CALIPER_SUBJECTS, ONEROSTER_STATUS, SCORE_STATUS, ENV_VARS, HTTP_DEFAULTS, AUTH_DEFAULTS, CACHE_DEFAULTS, CONFIG_DEFAULTS, PLAYCADEMY_DEFAULTS, RESOURCE_DEFAULTS, HTTP_STATUS, ERROR_NAMES,
|
|
16561
|
+
var __esm2 = (fn, res) => () => (fn && (res = fn(fn = 0)), res), ACHIEVEMENT_IDS2, ACHIEVEMENT_DEFINITIONS2, init_achievements2, init_auth2 = () => {}, TSC_PACKAGE2 = "@typescript/native-preview", USE_NATIVE_TSC2, init_typescript2, init_character2 = () => {}, PLAYCADEMY_BASE_URLS, init_domains2, init_env_vars2 = () => {}, ITEM_SLUGS2, CURRENCIES2, BADGES2, init_overworld2, TIMEBACK_CALIPER_SENSORS, TIMEBACK_ORG_SOURCED_ID2 = "PLAYCADEMY", TIMEBACK_ORG_NAME = "Playcademy Studios", TIMEBACK_ORG_TYPE = "department", TIMEBACK_COURSE_DEFAULTS, TIMEBACK_RESOURCE_DEFAULTS, TIMEBACK_COMPONENT_DEFAULTS, TIMEBACK_COMPONENT_RESOURCE_DEFAULTS, init_timeback3, init_workers2 = () => {}, init_src5, TIMEBACK_API_URLS, TIMEBACK_AUTH_URLS, CALIPER_API_URLS, ONEROSTER_ENDPOINTS, CALIPER_ENDPOINTS, CALIPER_CONSTANTS, TIMEBACK_EVENT_TYPES, TIMEBACK_ACTIONS, TIMEBACK_TYPES, ACTIVITY_METRIC_TYPES, TIME_METRIC_TYPES, TIMEBACK_SUBJECTS, TIMEBACK_GRADE_LEVELS, TIMEBACK_GRADE_LEVEL_LABELS, CALIPER_SUBJECTS, ONEROSTER_STATUS, SCORE_STATUS, ENV_VARS, HTTP_DEFAULTS, AUTH_DEFAULTS, CACHE_DEFAULTS, CONFIG_DEFAULTS, PLAYCADEMY_DEFAULTS, RESOURCE_DEFAULTS, HTTP_STATUS, ERROR_NAMES, init_constants3, isObject = (value) => typeof value === "object" && value !== null, SUBJECT_VALUES, GRADE_VALUES;
|
|
16522
16562
|
var init_types7 = __esm(() => {
|
|
16523
16563
|
init_achievements2 = __esm2(() => {
|
|
16524
16564
|
ACHIEVEMENT_IDS2 = {
|
|
@@ -16695,7 +16735,7 @@ var init_types7 = __esm(() => {
|
|
|
16695
16735
|
init_timeback3();
|
|
16696
16736
|
init_workers2();
|
|
16697
16737
|
});
|
|
16698
|
-
|
|
16738
|
+
init_constants3 = __esm2(() => {
|
|
16699
16739
|
init_src5();
|
|
16700
16740
|
TIMEBACK_API_URLS = {
|
|
16701
16741
|
production: "https://api.alpha-1edtech.ai",
|
|
@@ -16870,7 +16910,7 @@ var init_types7 = __esm(() => {
|
|
|
16870
16910
|
timebackSdk: "TimebackSDKError"
|
|
16871
16911
|
};
|
|
16872
16912
|
});
|
|
16873
|
-
|
|
16913
|
+
init_constants3();
|
|
16874
16914
|
SUBJECT_VALUES = TIMEBACK_SUBJECTS;
|
|
16875
16915
|
GRADE_VALUES = TIMEBACK_GRADE_LEVELS;
|
|
16876
16916
|
});
|
|
@@ -20168,7 +20208,7 @@ var __defProp2, __export2 = (target, all) => {
|
|
|
20168
20208
|
course: (courseId) => `${base}${ONEROSTER_ENDPOINTS2.courses}/${courseId}`,
|
|
20169
20209
|
componentResource: (resourceId) => `${base}${ONEROSTER_ENDPOINTS2.componentResources}/${resourceId}`
|
|
20170
20210
|
};
|
|
20171
|
-
}, CALIPER_CONSTANTS2, TIMEBACK_EVENT_TYPES2, TIMEBACK_ACTIONS2, TIMEBACK_TYPES2, ACTIVITY_METRIC_TYPES2, TIME_METRIC_TYPES2, TIMEBACK_SUBJECTS2, TIMEBACK_GRADE_LEVELS2, TIMEBACK_GRADE_LEVEL_LABELS2, CALIPER_SUBJECTS2, ONEROSTER_STATUS2, SCORE_STATUS2, ENV_VARS2, HTTP_DEFAULTS2, AUTH_DEFAULTS2, CACHE_DEFAULTS2, CONFIG_DEFAULTS2, PLAYCADEMY_DEFAULTS2, RESOURCE_DEFAULTS2, HTTP_STATUS2, ERROR_NAMES2,
|
|
20211
|
+
}, CALIPER_CONSTANTS2, TIMEBACK_EVENT_TYPES2, TIMEBACK_ACTIONS2, TIMEBACK_TYPES2, ACTIVITY_METRIC_TYPES2, TIME_METRIC_TYPES2, TIMEBACK_SUBJECTS2, TIMEBACK_GRADE_LEVELS2, TIMEBACK_GRADE_LEVEL_LABELS2, CALIPER_SUBJECTS2, ONEROSTER_STATUS2, SCORE_STATUS2, ENV_VARS2, HTTP_DEFAULTS2, AUTH_DEFAULTS2, CACHE_DEFAULTS2, CONFIG_DEFAULTS2, PLAYCADEMY_DEFAULTS2, RESOURCE_DEFAULTS2, HTTP_STATUS2, ERROR_NAMES2, init_constants4, exports_verify, init_verify, TimebackError, TimebackApiError, TimebackAuthenticationError, StudentNotFoundError, ConfigurationError, ResourceNotFoundError, isObject2 = (value) => typeof value === "object" && value !== null, SUBJECT_VALUES2, GRADE_VALUES2, isBrowser2 = () => {
|
|
20172
20212
|
const g = globalThis;
|
|
20173
20213
|
return typeof g.window !== "undefined" && typeof g.document !== "undefined";
|
|
20174
20214
|
}, isProduction3 = () => {
|
|
@@ -20707,7 +20747,7 @@ var init_dist3 = __esm(() => {
|
|
|
20707
20747
|
init_timeback4();
|
|
20708
20748
|
init_workers3();
|
|
20709
20749
|
});
|
|
20710
|
-
|
|
20750
|
+
init_constants4 = __esm3(() => {
|
|
20711
20751
|
init_src6();
|
|
20712
20752
|
TIMEBACK_API_URLS2 = {
|
|
20713
20753
|
production: "https://api.alpha-1edtech.ai",
|
|
@@ -20888,9 +20928,9 @@ var init_dist3 = __esm(() => {
|
|
|
20888
20928
|
fetchTimebackConfig: () => fetchTimebackConfig
|
|
20889
20929
|
});
|
|
20890
20930
|
init_verify = __esm3(() => {
|
|
20891
|
-
|
|
20931
|
+
init_constants4();
|
|
20892
20932
|
});
|
|
20893
|
-
|
|
20933
|
+
init_constants4();
|
|
20894
20934
|
TimebackError = class TimebackError extends Error {
|
|
20895
20935
|
constructor(message) {
|
|
20896
20936
|
super(message);
|
|
@@ -20947,7 +20987,7 @@ var init_dist3 = __esm(() => {
|
|
|
20947
20987
|
Object.setPrototypeOf(this, ResourceNotFoundError.prototype);
|
|
20948
20988
|
}
|
|
20949
20989
|
};
|
|
20950
|
-
|
|
20990
|
+
init_constants4();
|
|
20951
20991
|
SUBJECT_VALUES2 = TIMEBACK_SUBJECTS2;
|
|
20952
20992
|
GRADE_VALUES2 = TIMEBACK_GRADE_LEVELS2;
|
|
20953
20993
|
colors3 = {
|
|
@@ -20968,8 +21008,8 @@ var init_dist3 = __esm(() => {
|
|
|
20968
21008
|
};
|
|
20969
21009
|
log3 = createLogger2();
|
|
20970
21010
|
init_verify();
|
|
20971
|
-
|
|
20972
|
-
|
|
21011
|
+
init_constants4();
|
|
21012
|
+
init_constants4();
|
|
20973
21013
|
if (process.env.DEBUG === "true") {
|
|
20974
21014
|
process.env.TERM = "dumb";
|
|
20975
21015
|
}
|
|
@@ -20981,13 +21021,13 @@ var init_dist3 = __esm(() => {
|
|
|
20981
21021
|
this.name = ERROR_NAMES2.timebackAuth;
|
|
20982
21022
|
}
|
|
20983
21023
|
};
|
|
20984
|
-
|
|
20985
|
-
|
|
20986
|
-
|
|
20987
|
-
|
|
20988
|
-
|
|
20989
|
-
|
|
20990
|
-
|
|
21024
|
+
init_constants4();
|
|
21025
|
+
init_constants4();
|
|
21026
|
+
init_constants4();
|
|
21027
|
+
init_constants4();
|
|
21028
|
+
init_constants4();
|
|
21029
|
+
init_constants4();
|
|
21030
|
+
init_constants4();
|
|
20991
21031
|
exports_external2 = {};
|
|
20992
21032
|
__export2(exports_external2, {
|
|
20993
21033
|
void: () => voidType2,
|
|
@@ -24545,7 +24585,7 @@ var init_http_exception = () => {};
|
|
|
24545
24585
|
|
|
24546
24586
|
// ../../node_modules/hono/dist/request/constants.js
|
|
24547
24587
|
var GET_MATCH_RESULT;
|
|
24548
|
-
var
|
|
24588
|
+
var init_constants5 = __esm(() => {
|
|
24549
24589
|
GET_MATCH_RESULT = Symbol();
|
|
24550
24590
|
});
|
|
24551
24591
|
|
|
@@ -24809,7 +24849,7 @@ var init_url = __esm(() => {
|
|
|
24809
24849
|
var tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_), HonoRequest;
|
|
24810
24850
|
var init_request = __esm(() => {
|
|
24811
24851
|
init_http_exception();
|
|
24812
|
-
|
|
24852
|
+
init_constants5();
|
|
24813
24853
|
init_body();
|
|
24814
24854
|
init_url();
|
|
24815
24855
|
HonoRequest = class {
|
|
@@ -25139,7 +25179,7 @@ var init_router = __esm(() => {
|
|
|
25139
25179
|
|
|
25140
25180
|
// ../../node_modules/hono/dist/utils/constants.js
|
|
25141
25181
|
var COMPOSED_HANDLER = "__COMPOSED_HANDLER";
|
|
25142
|
-
var
|
|
25182
|
+
var init_constants6 = () => {};
|
|
25143
25183
|
|
|
25144
25184
|
// ../../node_modules/hono/dist/hono-base.js
|
|
25145
25185
|
var notFoundHandler = (c) => {
|
|
@@ -25361,7 +25401,7 @@ var init_hono_base = __esm(() => {
|
|
|
25361
25401
|
init_compose();
|
|
25362
25402
|
init_context2();
|
|
25363
25403
|
init_router();
|
|
25364
|
-
|
|
25404
|
+
init_constants6();
|
|
25365
25405
|
init_url();
|
|
25366
25406
|
});
|
|
25367
25407
|
|
|
@@ -82718,7 +82758,8 @@ var init_schemas3 = __esm(() => {
|
|
|
82718
82758
|
});
|
|
82719
82759
|
SetSecretsRequestSchema = exports_external.record(exports_external.string().min(1), exports_external.string());
|
|
82720
82760
|
SeedRequestSchema = exports_external.object({
|
|
82721
|
-
code: exports_external.string().min(1, "Seed code is required")
|
|
82761
|
+
code: exports_external.string().min(1, "Seed code is required"),
|
|
82762
|
+
secrets: exports_external.record(exports_external.string(), exports_external.string()).optional()
|
|
82722
82763
|
});
|
|
82723
82764
|
SchemaInfoSchema = exports_external.object({
|
|
82724
82765
|
sql: exports_external.string(),
|
|
@@ -93883,8 +93924,13 @@ var init_seed_controller = __esm(() => {
|
|
|
93883
93924
|
}
|
|
93884
93925
|
throw ApiError.badRequest("Invalid JSON body");
|
|
93885
93926
|
}
|
|
93886
|
-
logger55.debug("Seeding database", {
|
|
93887
|
-
|
|
93927
|
+
logger55.debug("Seeding database", {
|
|
93928
|
+
userId: ctx.user.id,
|
|
93929
|
+
slug: slug2,
|
|
93930
|
+
codeLength: body2.code.length,
|
|
93931
|
+
secretCount: body2.secrets ? Object.keys(body2.secrets).length : 0
|
|
93932
|
+
});
|
|
93933
|
+
return ctx.services.seed.seed(slug2, body2.code, ctx.user, body2.secrets);
|
|
93888
93934
|
});
|
|
93889
93935
|
});
|
|
93890
93936
|
|