playcademy 0.14.25 → 0.14.26
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/constants/src/timeback.ts +66 -0
- package/dist/index.js +143 -132
- package/dist/templates/config/integrations-config.js.template +1 -1
- package/dist/utils.js +31 -48
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -30,3 +30,69 @@ export const TIMEBACK_ROUTES = {
|
|
|
30
30
|
* This is the default organization sourcedId for Playcademy games
|
|
31
31
|
*/
|
|
32
32
|
export const TIMEBACK_ORG_SOURCED_ID = 'PLAYCADEMY' as const
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Default organization name for Playcademy games
|
|
36
|
+
*/
|
|
37
|
+
export const TIMEBACK_ORG_NAME = 'Playcademy Studios' as const
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Default organization type for Playcademy games
|
|
41
|
+
*/
|
|
42
|
+
export const TIMEBACK_ORG_TYPE = 'department' as const
|
|
43
|
+
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// TimeBack Resource Defaults
|
|
46
|
+
// ============================================================================
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Default course configuration values
|
|
50
|
+
*/
|
|
51
|
+
export const TIMEBACK_COURSE_DEFAULTS = {
|
|
52
|
+
gradingScheme: 'STANDARD',
|
|
53
|
+
level: {
|
|
54
|
+
elementary: 'Elementary',
|
|
55
|
+
middle: 'Middle',
|
|
56
|
+
high: 'High',
|
|
57
|
+
ap: 'AP',
|
|
58
|
+
},
|
|
59
|
+
goals: {
|
|
60
|
+
dailyXp: 50,
|
|
61
|
+
dailyLessons: 3,
|
|
62
|
+
},
|
|
63
|
+
metrics: {
|
|
64
|
+
totalXp: 1000,
|
|
65
|
+
totalLessons: 50,
|
|
66
|
+
},
|
|
67
|
+
} as const
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Default resource configuration values
|
|
71
|
+
*/
|
|
72
|
+
export const TIMEBACK_RESOURCE_DEFAULTS = {
|
|
73
|
+
vendorId: 'playcademy',
|
|
74
|
+
roles: ['primary'] as const,
|
|
75
|
+
importance: 'primary' as const,
|
|
76
|
+
metadata: {
|
|
77
|
+
type: 'interactive' as const,
|
|
78
|
+
toolProvider: 'Playcademy',
|
|
79
|
+
instructionalMethod: 'exploratory' as const,
|
|
80
|
+
language: 'en-US',
|
|
81
|
+
},
|
|
82
|
+
} as const
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Default component configuration values
|
|
86
|
+
*/
|
|
87
|
+
export const TIMEBACK_COMPONENT_DEFAULTS = {
|
|
88
|
+
sortOrder: 1,
|
|
89
|
+
prerequisiteCriteria: 'ALL' as const,
|
|
90
|
+
} as const
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Default componentResource configuration values
|
|
94
|
+
*/
|
|
95
|
+
export const TIMEBACK_COMPONENT_RESOURCE_DEFAULTS = {
|
|
96
|
+
sortOrder: 1,
|
|
97
|
+
lessonType: 'quiz',
|
|
98
|
+
} as const
|
package/dist/index.js
CHANGED
|
@@ -4192,8 +4192,51 @@ var init_overworld2 = __esm2(() => {
|
|
|
4192
4192
|
FIRST_GAME: ITEM_SLUGS2.FIRST_GAME_BADGE
|
|
4193
4193
|
};
|
|
4194
4194
|
});
|
|
4195
|
-
var
|
|
4196
|
-
|
|
4195
|
+
var TIMEBACK_ORG_SOURCED_ID = "PLAYCADEMY";
|
|
4196
|
+
var TIMEBACK_ORG_NAME = "Playcademy Studios";
|
|
4197
|
+
var TIMEBACK_ORG_TYPE = "department";
|
|
4198
|
+
var TIMEBACK_COURSE_DEFAULTS;
|
|
4199
|
+
var TIMEBACK_RESOURCE_DEFAULTS;
|
|
4200
|
+
var TIMEBACK_COMPONENT_DEFAULTS;
|
|
4201
|
+
var TIMEBACK_COMPONENT_RESOURCE_DEFAULTS;
|
|
4202
|
+
var init_timeback2 = __esm2(() => {
|
|
4203
|
+
TIMEBACK_COURSE_DEFAULTS = {
|
|
4204
|
+
gradingScheme: "STANDARD",
|
|
4205
|
+
level: {
|
|
4206
|
+
elementary: "Elementary",
|
|
4207
|
+
middle: "Middle",
|
|
4208
|
+
high: "High",
|
|
4209
|
+
ap: "AP"
|
|
4210
|
+
},
|
|
4211
|
+
goals: {
|
|
4212
|
+
dailyXp: 50,
|
|
4213
|
+
dailyLessons: 3
|
|
4214
|
+
},
|
|
4215
|
+
metrics: {
|
|
4216
|
+
totalXp: 1e3,
|
|
4217
|
+
totalLessons: 50
|
|
4218
|
+
}
|
|
4219
|
+
};
|
|
4220
|
+
TIMEBACK_RESOURCE_DEFAULTS = {
|
|
4221
|
+
vendorId: "playcademy",
|
|
4222
|
+
roles: ["primary"],
|
|
4223
|
+
importance: "primary",
|
|
4224
|
+
metadata: {
|
|
4225
|
+
type: "interactive",
|
|
4226
|
+
toolProvider: "Playcademy",
|
|
4227
|
+
instructionalMethod: "exploratory",
|
|
4228
|
+
language: "en-US"
|
|
4229
|
+
}
|
|
4230
|
+
};
|
|
4231
|
+
TIMEBACK_COMPONENT_DEFAULTS = {
|
|
4232
|
+
sortOrder: 1,
|
|
4233
|
+
prerequisiteCriteria: "ALL"
|
|
4234
|
+
};
|
|
4235
|
+
TIMEBACK_COMPONENT_RESOURCE_DEFAULTS = {
|
|
4236
|
+
sortOrder: 1,
|
|
4237
|
+
lessonType: "quiz"
|
|
4238
|
+
};
|
|
4239
|
+
});
|
|
4197
4240
|
var init_workers2 = () => {
|
|
4198
4241
|
};
|
|
4199
4242
|
var init_src2 = __esm2(() => {
|
|
@@ -4226,7 +4269,6 @@ var HTTP_DEFAULTS;
|
|
|
4226
4269
|
var AUTH_DEFAULTS;
|
|
4227
4270
|
var CACHE_DEFAULTS;
|
|
4228
4271
|
var CONFIG_DEFAULTS;
|
|
4229
|
-
var DEFAULT_PLAYCADEMY_ORGANIZATION_ID;
|
|
4230
4272
|
var PLAYCADEMY_DEFAULTS;
|
|
4231
4273
|
var RESOURCE_DEFAULTS;
|
|
4232
4274
|
var HTTP_STATUS;
|
|
@@ -4373,54 +4415,26 @@ var init_constants = __esm2(() => {
|
|
|
4373
4415
|
CONFIG_DEFAULTS = {
|
|
4374
4416
|
fileNames: ["timeback.config.js", "timeback.config.json"]
|
|
4375
4417
|
};
|
|
4376
|
-
DEFAULT_PLAYCADEMY_ORGANIZATION_ID = process.env.TIMEBACK_ORG_SOURCE_ID || "PLAYCADEMY";
|
|
4377
4418
|
PLAYCADEMY_DEFAULTS = {
|
|
4378
|
-
organization:
|
|
4419
|
+
organization: TIMEBACK_ORG_SOURCED_ID,
|
|
4379
4420
|
launchBaseUrls: PLAYCADEMY_BASE_URLS2
|
|
4380
4421
|
};
|
|
4381
4422
|
RESOURCE_DEFAULTS = {
|
|
4382
4423
|
organization: {
|
|
4383
|
-
name:
|
|
4384
|
-
type:
|
|
4424
|
+
name: TIMEBACK_ORG_NAME,
|
|
4425
|
+
type: TIMEBACK_ORG_TYPE
|
|
4385
4426
|
},
|
|
4386
4427
|
course: {
|
|
4387
|
-
gradingScheme:
|
|
4388
|
-
level:
|
|
4389
|
-
elementary: "Elementary",
|
|
4390
|
-
middle: "Middle",
|
|
4391
|
-
high: "High",
|
|
4392
|
-
ap: "AP"
|
|
4393
|
-
},
|
|
4394
|
-
metadata: {
|
|
4395
|
-
goals: {
|
|
4396
|
-
dailyXp: 50,
|
|
4397
|
-
dailyLessons: 3
|
|
4398
|
-
},
|
|
4399
|
-
metrics: {
|
|
4400
|
-
totalXp: 1e3,
|
|
4401
|
-
totalLessons: 50
|
|
4402
|
-
}
|
|
4403
|
-
}
|
|
4404
|
-
},
|
|
4405
|
-
component: {
|
|
4406
|
-
sortOrder: 1,
|
|
4407
|
-
prerequisiteCriteria: "ALL"
|
|
4408
|
-
},
|
|
4409
|
-
resource: {
|
|
4410
|
-
vendorId: "playcademy",
|
|
4411
|
-
roles: ["primary"],
|
|
4412
|
-
importance: "primary",
|
|
4428
|
+
gradingScheme: TIMEBACK_COURSE_DEFAULTS.gradingScheme,
|
|
4429
|
+
level: TIMEBACK_COURSE_DEFAULTS.level,
|
|
4413
4430
|
metadata: {
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
instructionalMethod: "exploratory",
|
|
4417
|
-
language: "en-US"
|
|
4431
|
+
goals: TIMEBACK_COURSE_DEFAULTS.goals,
|
|
4432
|
+
metrics: TIMEBACK_COURSE_DEFAULTS.metrics
|
|
4418
4433
|
}
|
|
4419
4434
|
},
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
}
|
|
4435
|
+
component: TIMEBACK_COMPONENT_DEFAULTS,
|
|
4436
|
+
resource: TIMEBACK_RESOURCE_DEFAULTS,
|
|
4437
|
+
componentResource: TIMEBACK_COMPONENT_RESOURCE_DEFAULTS
|
|
4424
4438
|
};
|
|
4425
4439
|
HTTP_STATUS = {
|
|
4426
4440
|
CLIENT_ERROR_MIN: 400,
|
|
@@ -4476,8 +4490,51 @@ var init_overworld3 = __esm3(() => {
|
|
|
4476
4490
|
FIRST_GAME: ITEM_SLUGS3.FIRST_GAME_BADGE
|
|
4477
4491
|
};
|
|
4478
4492
|
});
|
|
4479
|
-
var
|
|
4480
|
-
|
|
4493
|
+
var TIMEBACK_ORG_SOURCED_ID2 = "PLAYCADEMY";
|
|
4494
|
+
var TIMEBACK_ORG_NAME2 = "Playcademy Studios";
|
|
4495
|
+
var TIMEBACK_ORG_TYPE2 = "department";
|
|
4496
|
+
var TIMEBACK_COURSE_DEFAULTS2;
|
|
4497
|
+
var TIMEBACK_RESOURCE_DEFAULTS2;
|
|
4498
|
+
var TIMEBACK_COMPONENT_DEFAULTS2;
|
|
4499
|
+
var TIMEBACK_COMPONENT_RESOURCE_DEFAULTS2;
|
|
4500
|
+
var init_timeback3 = __esm3(() => {
|
|
4501
|
+
TIMEBACK_COURSE_DEFAULTS2 = {
|
|
4502
|
+
gradingScheme: "STANDARD",
|
|
4503
|
+
level: {
|
|
4504
|
+
elementary: "Elementary",
|
|
4505
|
+
middle: "Middle",
|
|
4506
|
+
high: "High",
|
|
4507
|
+
ap: "AP"
|
|
4508
|
+
},
|
|
4509
|
+
goals: {
|
|
4510
|
+
dailyXp: 50,
|
|
4511
|
+
dailyLessons: 3
|
|
4512
|
+
},
|
|
4513
|
+
metrics: {
|
|
4514
|
+
totalXp: 1e3,
|
|
4515
|
+
totalLessons: 50
|
|
4516
|
+
}
|
|
4517
|
+
};
|
|
4518
|
+
TIMEBACK_RESOURCE_DEFAULTS2 = {
|
|
4519
|
+
vendorId: "playcademy",
|
|
4520
|
+
roles: ["primary"],
|
|
4521
|
+
importance: "primary",
|
|
4522
|
+
metadata: {
|
|
4523
|
+
type: "interactive",
|
|
4524
|
+
toolProvider: "Playcademy",
|
|
4525
|
+
instructionalMethod: "exploratory",
|
|
4526
|
+
language: "en-US"
|
|
4527
|
+
}
|
|
4528
|
+
};
|
|
4529
|
+
TIMEBACK_COMPONENT_DEFAULTS2 = {
|
|
4530
|
+
sortOrder: 1,
|
|
4531
|
+
prerequisiteCriteria: "ALL"
|
|
4532
|
+
};
|
|
4533
|
+
TIMEBACK_COMPONENT_RESOURCE_DEFAULTS2 = {
|
|
4534
|
+
sortOrder: 1,
|
|
4535
|
+
lessonType: "quiz"
|
|
4536
|
+
};
|
|
4537
|
+
});
|
|
4481
4538
|
var init_workers3 = () => {
|
|
4482
4539
|
};
|
|
4483
4540
|
var init_src3 = __esm3(() => {
|
|
@@ -4510,7 +4567,6 @@ var HTTP_DEFAULTS2;
|
|
|
4510
4567
|
var AUTH_DEFAULTS2;
|
|
4511
4568
|
var CACHE_DEFAULTS2;
|
|
4512
4569
|
var CONFIG_DEFAULTS2;
|
|
4513
|
-
var DEFAULT_PLAYCADEMY_ORGANIZATION_ID2;
|
|
4514
4570
|
var PLAYCADEMY_DEFAULTS2;
|
|
4515
4571
|
var RESOURCE_DEFAULTS2;
|
|
4516
4572
|
var HTTP_STATUS2;
|
|
@@ -4657,54 +4713,26 @@ var init_constants2 = __esm3(() => {
|
|
|
4657
4713
|
CONFIG_DEFAULTS2 = {
|
|
4658
4714
|
fileNames: ["timeback.config.js", "timeback.config.json"]
|
|
4659
4715
|
};
|
|
4660
|
-
DEFAULT_PLAYCADEMY_ORGANIZATION_ID2 = process.env.TIMEBACK_ORG_SOURCE_ID || "PLAYCADEMY";
|
|
4661
4716
|
PLAYCADEMY_DEFAULTS2 = {
|
|
4662
|
-
organization:
|
|
4717
|
+
organization: TIMEBACK_ORG_SOURCED_ID2,
|
|
4663
4718
|
launchBaseUrls: PLAYCADEMY_BASE_URLS3
|
|
4664
4719
|
};
|
|
4665
4720
|
RESOURCE_DEFAULTS2 = {
|
|
4666
4721
|
organization: {
|
|
4667
|
-
name:
|
|
4668
|
-
type:
|
|
4722
|
+
name: TIMEBACK_ORG_NAME2,
|
|
4723
|
+
type: TIMEBACK_ORG_TYPE2
|
|
4669
4724
|
},
|
|
4670
4725
|
course: {
|
|
4671
|
-
gradingScheme:
|
|
4672
|
-
level:
|
|
4673
|
-
elementary: "Elementary",
|
|
4674
|
-
middle: "Middle",
|
|
4675
|
-
high: "High",
|
|
4676
|
-
ap: "AP"
|
|
4677
|
-
},
|
|
4678
|
-
metadata: {
|
|
4679
|
-
goals: {
|
|
4680
|
-
dailyXp: 50,
|
|
4681
|
-
dailyLessons: 3
|
|
4682
|
-
},
|
|
4683
|
-
metrics: {
|
|
4684
|
-
totalXp: 1e3,
|
|
4685
|
-
totalLessons: 50
|
|
4686
|
-
}
|
|
4687
|
-
}
|
|
4688
|
-
},
|
|
4689
|
-
component: {
|
|
4690
|
-
sortOrder: 1,
|
|
4691
|
-
prerequisiteCriteria: "ALL"
|
|
4692
|
-
},
|
|
4693
|
-
resource: {
|
|
4694
|
-
vendorId: "playcademy",
|
|
4695
|
-
roles: ["primary"],
|
|
4696
|
-
importance: "primary",
|
|
4726
|
+
gradingScheme: TIMEBACK_COURSE_DEFAULTS2.gradingScheme,
|
|
4727
|
+
level: TIMEBACK_COURSE_DEFAULTS2.level,
|
|
4697
4728
|
metadata: {
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
instructionalMethod: "exploratory",
|
|
4701
|
-
language: "en-US"
|
|
4729
|
+
goals: TIMEBACK_COURSE_DEFAULTS2.goals,
|
|
4730
|
+
metrics: TIMEBACK_COURSE_DEFAULTS2.metrics
|
|
4702
4731
|
}
|
|
4703
4732
|
},
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
|
|
4707
|
-
}
|
|
4733
|
+
component: TIMEBACK_COMPONENT_DEFAULTS2,
|
|
4734
|
+
resource: TIMEBACK_RESOURCE_DEFAULTS2,
|
|
4735
|
+
componentResource: TIMEBACK_COMPONENT_RESOURCE_DEFAULTS2
|
|
4708
4736
|
};
|
|
4709
4737
|
HTTP_STATUS2 = {
|
|
4710
4738
|
CLIENT_ERROR_MIN: 400,
|
|
@@ -4744,7 +4772,7 @@ function deriveLevelFromGrades(grades) {
|
|
|
4744
4772
|
}
|
|
4745
4773
|
function deriveSourcedIds(courseId) {
|
|
4746
4774
|
return {
|
|
4747
|
-
organization: PLAYCADEMY_DEFAULTS.organization,
|
|
4775
|
+
organization: process.env.TIMEBACK_ORG_SOURCED_ID || PLAYCADEMY_DEFAULTS.organization,
|
|
4748
4776
|
course: courseId,
|
|
4749
4777
|
component: `${courseId}-component`,
|
|
4750
4778
|
resource: `${courseId}-resource`,
|
|
@@ -4814,7 +4842,7 @@ function derivePlatformTimebackSetupRequest(config) {
|
|
|
4814
4842
|
const defaultOrganization = {
|
|
4815
4843
|
name: RESOURCE_DEFAULTS.organization.name,
|
|
4816
4844
|
type: RESOURCE_DEFAULTS.organization.type,
|
|
4817
|
-
identifier: PLAYCADEMY_DEFAULTS.organization
|
|
4845
|
+
identifier: process.env.TIMEBACK_ORG_SOURCED_ID || PLAYCADEMY_DEFAULTS.organization
|
|
4818
4846
|
};
|
|
4819
4847
|
const defaultComponent = {
|
|
4820
4848
|
title: "",
|
|
@@ -5577,7 +5605,7 @@ import { join as join12 } from "path";
|
|
|
5577
5605
|
// package.json
|
|
5578
5606
|
var package_default2 = {
|
|
5579
5607
|
name: "playcademy",
|
|
5580
|
-
version: "0.14.
|
|
5608
|
+
version: "0.14.25",
|
|
5581
5609
|
type: "module",
|
|
5582
5610
|
exports: {
|
|
5583
5611
|
".": {
|
|
@@ -7010,42 +7038,6 @@ import { existsSync as existsSync16, mkdirSync as mkdirSync4, readFileSync as re
|
|
|
7010
7038
|
import { createServer } from "node:net";
|
|
7011
7039
|
import { homedir as homedir3 } from "node:os";
|
|
7012
7040
|
import { join as join22 } from "node:path";
|
|
7013
|
-
async function isPortAvailableOnHost(port, host) {
|
|
7014
|
-
return new Promise((resolve11) => {
|
|
7015
|
-
const server = createServer();
|
|
7016
|
-
let resolved = false;
|
|
7017
|
-
const cleanup = (result) => {
|
|
7018
|
-
if (resolved) return;
|
|
7019
|
-
resolved = true;
|
|
7020
|
-
try {
|
|
7021
|
-
server.close();
|
|
7022
|
-
} catch {
|
|
7023
|
-
}
|
|
7024
|
-
resolve11(result);
|
|
7025
|
-
};
|
|
7026
|
-
const timeout = setTimeout(() => cleanup(true), 100);
|
|
7027
|
-
server.once("error", (err) => {
|
|
7028
|
-
clearTimeout(timeout);
|
|
7029
|
-
if (err.code === "EAFNOSUPPORT" || err.code === "EADDRNOTAVAIL") {
|
|
7030
|
-
cleanup(true);
|
|
7031
|
-
} else {
|
|
7032
|
-
cleanup(false);
|
|
7033
|
-
}
|
|
7034
|
-
});
|
|
7035
|
-
server.once("listening", () => {
|
|
7036
|
-
clearTimeout(timeout);
|
|
7037
|
-
cleanup(true);
|
|
7038
|
-
});
|
|
7039
|
-
server.listen(port, host).unref();
|
|
7040
|
-
});
|
|
7041
|
-
}
|
|
7042
|
-
async function findAvailablePort(startPort = 4321) {
|
|
7043
|
-
if (await isPortAvailableOnHost(startPort, "0.0.0.0")) {
|
|
7044
|
-
return startPort;
|
|
7045
|
-
} else {
|
|
7046
|
-
return findAvailablePort(startPort + 1);
|
|
7047
|
-
}
|
|
7048
|
-
}
|
|
7049
7041
|
function getRegistryPath() {
|
|
7050
7042
|
const home = homedir3();
|
|
7051
7043
|
const dir = join22(home, ".playcademy");
|
|
@@ -7140,6 +7132,31 @@ function cleanupServerInfo(type, projectRoot, pid) {
|
|
|
7140
7132
|
writeRegistry(registry);
|
|
7141
7133
|
}
|
|
7142
7134
|
}
|
|
7135
|
+
async function isPortInUse(port) {
|
|
7136
|
+
return new Promise((resolve11) => {
|
|
7137
|
+
const server = createServer();
|
|
7138
|
+
server.once("error", () => {
|
|
7139
|
+
resolve11(true);
|
|
7140
|
+
});
|
|
7141
|
+
server.once("listening", () => {
|
|
7142
|
+
server.close();
|
|
7143
|
+
resolve11(false);
|
|
7144
|
+
});
|
|
7145
|
+
server.listen(port);
|
|
7146
|
+
});
|
|
7147
|
+
}
|
|
7148
|
+
async function waitForPort(port, timeoutMs = 5e3) {
|
|
7149
|
+
const start = Date.now();
|
|
7150
|
+
while (await isPortInUse(port)) {
|
|
7151
|
+
if (Date.now() - start > timeoutMs) {
|
|
7152
|
+
throw new Error(
|
|
7153
|
+
`Port ${port} is already in use.
|
|
7154
|
+
Stop the other server or specify a different port with --port <number>.`
|
|
7155
|
+
);
|
|
7156
|
+
}
|
|
7157
|
+
await new Promise((resolve11) => setTimeout(resolve11, 100));
|
|
7158
|
+
}
|
|
7159
|
+
}
|
|
7143
7160
|
|
|
7144
7161
|
// src/lib/deploy/bundle.ts
|
|
7145
7162
|
import { existsSync as existsSync17 } from "fs";
|
|
@@ -7614,15 +7631,9 @@ var FilteredLog = class extends Log {
|
|
|
7614
7631
|
}
|
|
7615
7632
|
};
|
|
7616
7633
|
async function startDevServer(options) {
|
|
7617
|
-
const {
|
|
7618
|
-
|
|
7619
|
-
|
|
7620
|
-
platformUrl,
|
|
7621
|
-
logger: logger2 = true,
|
|
7622
|
-
customLogger
|
|
7623
|
-
} = options;
|
|
7624
|
-
const port = await findAvailablePort(preferredPort);
|
|
7625
|
-
const config = providedConfig ?? await loadConfig();
|
|
7634
|
+
const { port, config: _config, platformUrl, logger: logger2 = true, customLogger } = options;
|
|
7635
|
+
await waitForPort(port);
|
|
7636
|
+
const config = _config ?? await loadConfig();
|
|
7626
7637
|
await ensurePlaycademyTypes();
|
|
7627
7638
|
const hasSandboxTimebackCreds = !!process.env.TIMEBACK_API_CLIENT_ID;
|
|
7628
7639
|
const devConfig = config.integrations?.timeback && !hasSandboxTimebackCreds ? { ...config, integrations: { ...config.integrations, timeback: null } } : config;
|
|
@@ -7638,7 +7649,7 @@ async function startDevServer(options) {
|
|
|
7638
7649
|
const bucketDir = hasBucket ? await ensureBucketDirectory() : void 0;
|
|
7639
7650
|
const workspace = getWorkspace();
|
|
7640
7651
|
const envSecrets = await readEnvFile(workspace);
|
|
7641
|
-
const
|
|
7652
|
+
const filteredLog = logger2 ? new FilteredLog(LogLevel.INFO, customLogger) : new Log(LogLevel.NONE);
|
|
7642
7653
|
const sandboxInfo = readServerInfo("sandbox", workspace);
|
|
7643
7654
|
const baseUrl = platformUrl ?? sandboxInfo?.url ?? process.env.PLAYCADEMY_BASE_URL ?? `http://localhost:${DEFAULT_PORTS.SANDBOX}`;
|
|
7644
7655
|
const bindings = {
|
|
@@ -7651,7 +7662,7 @@ async function startDevServer(options) {
|
|
|
7651
7662
|
}
|
|
7652
7663
|
const mf = new Miniflare({
|
|
7653
7664
|
port,
|
|
7654
|
-
log:
|
|
7665
|
+
log: filteredLog,
|
|
7655
7666
|
modules: [
|
|
7656
7667
|
{
|
|
7657
7668
|
type: "ESModule",
|
package/dist/utils.js
CHANGED
|
@@ -3214,42 +3214,6 @@ import { existsSync as existsSync3, mkdirSync, readFileSync, writeFileSync } fro
|
|
|
3214
3214
|
import { createServer } from "node:net";
|
|
3215
3215
|
import { homedir } from "node:os";
|
|
3216
3216
|
import { join as join7 } from "node:path";
|
|
3217
|
-
async function isPortAvailableOnHost(port, host) {
|
|
3218
|
-
return new Promise((resolve4) => {
|
|
3219
|
-
const server = createServer();
|
|
3220
|
-
let resolved = false;
|
|
3221
|
-
const cleanup = (result) => {
|
|
3222
|
-
if (resolved) return;
|
|
3223
|
-
resolved = true;
|
|
3224
|
-
try {
|
|
3225
|
-
server.close();
|
|
3226
|
-
} catch {
|
|
3227
|
-
}
|
|
3228
|
-
resolve4(result);
|
|
3229
|
-
};
|
|
3230
|
-
const timeout = setTimeout(() => cleanup(true), 100);
|
|
3231
|
-
server.once("error", (err) => {
|
|
3232
|
-
clearTimeout(timeout);
|
|
3233
|
-
if (err.code === "EAFNOSUPPORT" || err.code === "EADDRNOTAVAIL") {
|
|
3234
|
-
cleanup(true);
|
|
3235
|
-
} else {
|
|
3236
|
-
cleanup(false);
|
|
3237
|
-
}
|
|
3238
|
-
});
|
|
3239
|
-
server.once("listening", () => {
|
|
3240
|
-
clearTimeout(timeout);
|
|
3241
|
-
cleanup(true);
|
|
3242
|
-
});
|
|
3243
|
-
server.listen(port, host).unref();
|
|
3244
|
-
});
|
|
3245
|
-
}
|
|
3246
|
-
async function findAvailablePort(startPort = 4321) {
|
|
3247
|
-
if (await isPortAvailableOnHost(startPort, "0.0.0.0")) {
|
|
3248
|
-
return startPort;
|
|
3249
|
-
} else {
|
|
3250
|
-
return findAvailablePort(startPort + 1);
|
|
3251
|
-
}
|
|
3252
|
-
}
|
|
3253
3217
|
function getRegistryPath() {
|
|
3254
3218
|
const home = homedir();
|
|
3255
3219
|
const dir = join7(home, ".playcademy");
|
|
@@ -3295,6 +3259,31 @@ function readServerInfo(type, projectRoot) {
|
|
|
3295
3259
|
}
|
|
3296
3260
|
return servers[0] || null;
|
|
3297
3261
|
}
|
|
3262
|
+
async function isPortInUse(port) {
|
|
3263
|
+
return new Promise((resolve4) => {
|
|
3264
|
+
const server = createServer();
|
|
3265
|
+
server.once("error", () => {
|
|
3266
|
+
resolve4(true);
|
|
3267
|
+
});
|
|
3268
|
+
server.once("listening", () => {
|
|
3269
|
+
server.close();
|
|
3270
|
+
resolve4(false);
|
|
3271
|
+
});
|
|
3272
|
+
server.listen(port);
|
|
3273
|
+
});
|
|
3274
|
+
}
|
|
3275
|
+
async function waitForPort(port, timeoutMs = 5e3) {
|
|
3276
|
+
const start = Date.now();
|
|
3277
|
+
while (await isPortInUse(port)) {
|
|
3278
|
+
if (Date.now() - start > timeoutMs) {
|
|
3279
|
+
throw new Error(
|
|
3280
|
+
`Port ${port} is already in use.
|
|
3281
|
+
Stop the other server or specify a different port with --port <number>.`
|
|
3282
|
+
);
|
|
3283
|
+
}
|
|
3284
|
+
await new Promise((resolve4) => setTimeout(resolve4, 100));
|
|
3285
|
+
}
|
|
3286
|
+
}
|
|
3298
3287
|
|
|
3299
3288
|
// src/lib/core/client.ts
|
|
3300
3289
|
import { PlaycademyClient } from "@playcademy/sdk/internal";
|
|
@@ -4003,7 +3992,7 @@ import { join as join12 } from "path";
|
|
|
4003
3992
|
// package.json
|
|
4004
3993
|
var package_default2 = {
|
|
4005
3994
|
name: "playcademy",
|
|
4006
|
-
version: "0.14.
|
|
3995
|
+
version: "0.14.25",
|
|
4007
3996
|
type: "module",
|
|
4008
3997
|
exports: {
|
|
4009
3998
|
".": {
|
|
@@ -4386,15 +4375,9 @@ var FilteredLog = class extends Log {
|
|
|
4386
4375
|
}
|
|
4387
4376
|
};
|
|
4388
4377
|
async function startDevServer(options) {
|
|
4389
|
-
const {
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
platformUrl,
|
|
4393
|
-
logger: logger2 = true,
|
|
4394
|
-
customLogger
|
|
4395
|
-
} = options;
|
|
4396
|
-
const port = await findAvailablePort(preferredPort);
|
|
4397
|
-
const config = providedConfig ?? await loadConfig();
|
|
4378
|
+
const { port, config: _config, platformUrl, logger: logger2 = true, customLogger } = options;
|
|
4379
|
+
await waitForPort(port);
|
|
4380
|
+
const config = _config ?? await loadConfig();
|
|
4398
4381
|
await ensurePlaycademyTypes();
|
|
4399
4382
|
const hasSandboxTimebackCreds = !!process.env.TIMEBACK_API_CLIENT_ID;
|
|
4400
4383
|
const devConfig = config.integrations?.timeback && !hasSandboxTimebackCreds ? { ...config, integrations: { ...config.integrations, timeback: null } } : config;
|
|
@@ -4410,7 +4393,7 @@ async function startDevServer(options) {
|
|
|
4410
4393
|
const bucketDir = hasBucket ? await ensureBucketDirectory() : void 0;
|
|
4411
4394
|
const workspace = getWorkspace();
|
|
4412
4395
|
const envSecrets = await readEnvFile(workspace);
|
|
4413
|
-
const
|
|
4396
|
+
const filteredLog = logger2 ? new FilteredLog(LogLevel.INFO, customLogger) : new Log(LogLevel.NONE);
|
|
4414
4397
|
const sandboxInfo = readServerInfo("sandbox", workspace);
|
|
4415
4398
|
const baseUrl = platformUrl ?? sandboxInfo?.url ?? process.env.PLAYCADEMY_BASE_URL ?? `http://localhost:${DEFAULT_PORTS.SANDBOX}`;
|
|
4416
4399
|
const bindings = {
|
|
@@ -4423,7 +4406,7 @@ async function startDevServer(options) {
|
|
|
4423
4406
|
}
|
|
4424
4407
|
const mf = new Miniflare({
|
|
4425
4408
|
port,
|
|
4426
|
-
log:
|
|
4409
|
+
log: filteredLog,
|
|
4427
4410
|
modules: [
|
|
4428
4411
|
{
|
|
4429
4412
|
type: "ESModule",
|
package/dist/version.js
CHANGED