@playdrop/playdrop-cli 0.17.4 → 0.17.14
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 +12 -0
- package/config/client-meta.json +4 -4
- package/dist/apps/build.d.ts +2 -1
- package/dist/apps/build.js +6 -2
- package/dist/apps/index.d.ts +2 -3
- package/dist/apps/index.js +17 -49
- package/dist/apps/loadCheck.d.ts +3 -1
- package/dist/apps/loadCheck.js +123 -64
- package/dist/apps/publishingRuntime.d.ts +18 -0
- package/dist/apps/publishingRuntime.js +111 -0
- package/dist/apps/runtimeSyntax.d.ts +7 -0
- package/dist/apps/runtimeSyntax.js +154 -0
- package/dist/apps/serverBuild.d.ts +3 -3
- package/dist/apps/serverBuild.js +8 -43
- package/dist/apps/serverSdk.d.ts +23 -0
- package/dist/apps/serverSdk.js +157 -0
- package/dist/apps/upload.d.ts +9 -3
- package/dist/apps/upload.js +71 -25
- package/dist/apps/validate.d.ts +2 -1
- package/dist/apps/validate.js +3 -1
- package/dist/assetSpecs.js +2 -0
- package/dist/commandContext.js +34 -10
- package/dist/commands/build.js +3 -1
- package/dist/commands/create.js +35 -16
- package/dist/commands/dev.js +11 -0
- package/dist/commands/devGameServer.d.ts +8 -0
- package/dist/commands/devGameServer.js +12 -9
- package/dist/commands/devServer.d.ts +1 -0
- package/dist/commands/devServer.js +21 -3
- package/dist/commands/source.d.ts +11 -3
- package/dist/commands/source.js +82 -14
- package/dist/commands/taskCaptureSession.d.ts +1 -1
- package/dist/commands/taskCaptureSession.js +1 -1
- package/dist/commands/upload-content.js +15 -12
- package/dist/commands/upload.d.ts +2 -9
- package/dist/commands/upload.js +5 -21
- package/dist/commands/validate.js +1 -1
- package/dist/commands/worker/classification.d.ts +1 -0
- package/dist/commands/worker/classification.js +57 -0
- package/dist/commands/worker/game-server-infra.d.ts +6 -0
- package/dist/commands/worker/game-server-infra.js +10 -0
- package/dist/commands/worker/game-source-git.d.ts +9 -1
- package/dist/commands/worker/game-source-git.js +65 -19
- package/dist/commands/worker/generation.d.ts +4 -0
- package/dist/commands/worker/generation.js +70 -7
- package/dist/commands/worker.d.ts +1 -1
- package/dist/commands/worker.js +57 -17
- package/dist/environment.d.ts +1 -0
- package/dist/environment.js +7 -0
- package/dist/index.js +10 -2
- package/dist/playwright.d.ts +6 -4
- package/dist/playwright.js +24 -9
- package/dist/proceduralValidation.d.ts +16 -0
- package/dist/proceduralValidation.js +227 -0
- package/dist/proceduralValidationBrowser.d.mts +3 -0
- package/dist/proceduralValidationBrowser.mjs +67 -0
- package/node_modules/@playdrop/api-client/dist/domains/apps.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/apps.js +11 -1
- package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts +6 -1
- package/node_modules/@playdrop/api-client/dist/domains/chat.d.ts.map +1 -1
- package/node_modules/@playdrop/api-client/dist/domains/chat.js +13 -1
- package/node_modules/@playdrop/config/client-meta.json +4 -4
- package/node_modules/@playdrop/procedural/dist/index.d.ts +201 -0
- package/node_modules/@playdrop/procedural/dist/index.d.ts.map +1 -0
- package/node_modules/@playdrop/procedural/dist/index.js +763 -0
- package/node_modules/@playdrop/procedural/package.json +36 -0
- package/node_modules/@playdrop/types/dist/agent-task-classification.d.ts +68 -0
- package/node_modules/@playdrop/types/dist/agent-task-classification.d.ts.map +1 -0
- package/node_modules/@playdrop/types/dist/agent-task-classification.js +96 -0
- package/node_modules/@playdrop/types/dist/api.d.ts +39 -4
- package/node_modules/@playdrop/types/dist/api.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/chat.d.ts +7 -1
- package/node_modules/@playdrop/types/dist/chat.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/index.d.ts +1 -0
- package/node_modules/@playdrop/types/dist/index.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/index.js +2 -0
- package/node_modules/@playdrop/types/dist/social.d.ts +20 -0
- package/node_modules/@playdrop/types/dist/social.d.ts.map +1 -1
- package/node_modules/@playdrop/types/dist/version.d.ts +2 -0
- package/node_modules/@playdrop/types/dist/version.d.ts.map +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertProceduralAssetIsValid = assertProceduralAssetIsValid;
|
|
4
|
+
const procedural_1 = require("@playdrop/procedural");
|
|
5
|
+
const types_1 = require("@playdrop/types");
|
|
6
|
+
const esbuild_1 = require("esbuild");
|
|
7
|
+
const promises_1 = require("node:fs/promises");
|
|
8
|
+
const node_http_1 = require("node:http");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
10
|
+
const playwright_1 = require("./playwright");
|
|
11
|
+
const MODULE_TIMEOUT_MS = 30000;
|
|
12
|
+
let browserValidatorBundle;
|
|
13
|
+
async function resolveInputAsset(client, reference) {
|
|
14
|
+
const ref = (0, types_1.parseContentVersionRef)(reference);
|
|
15
|
+
if (!ref || ref.kind !== "asset")
|
|
16
|
+
throw new Error(`Expected an exact asset revision, received ${reference}`);
|
|
17
|
+
const { asset } = await client.fetchAssetBySlug(ref.creatorUsername, ref.name);
|
|
18
|
+
let version = asset.currentVersion?.revision === ref.revision ? asset.currentVersion : undefined;
|
|
19
|
+
for (let offset = 0; !version; offset += 100) {
|
|
20
|
+
const page = await client.listAssetVersions(ref.creatorUsername, ref.name, { limit: 100, offset });
|
|
21
|
+
version = page.versions.find((candidate) => candidate.revision === ref.revision);
|
|
22
|
+
if (!version && (page.versions.length < 100 || page.pagination?.hasMore === false))
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
if (!version)
|
|
26
|
+
throw new Error(`Asset revision ${reference} was not found or is not accessible`);
|
|
27
|
+
const entries = version.fileManifest?.files;
|
|
28
|
+
if (!Array.isArray(entries))
|
|
29
|
+
throw new Error(`Asset revision ${reference} has no file manifest`);
|
|
30
|
+
const files = entries;
|
|
31
|
+
const primary = files.find((file) => file.role === (version.primaryRole ?? "primary"));
|
|
32
|
+
if (!primary?.url)
|
|
33
|
+
throw new Error(`Asset revision ${reference} is missing its primary file URL`);
|
|
34
|
+
return {
|
|
35
|
+
reference,
|
|
36
|
+
title: asset.displayName,
|
|
37
|
+
creator: asset.creatorUsername,
|
|
38
|
+
category: asset.category,
|
|
39
|
+
subcategory: version.subcategory,
|
|
40
|
+
format: version.format,
|
|
41
|
+
assetSpec: version.assetSpecVersionRef ?? null,
|
|
42
|
+
previewUrl: files.find((file) => file.role === "preview")?.url ?? null,
|
|
43
|
+
primary: { url: primary.url, contentType: primary.contentType ?? version.primaryContentType ?? null },
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function loadBrowserValidator() {
|
|
47
|
+
browserValidatorBundle ?? (browserValidatorBundle = (0, esbuild_1.build)({
|
|
48
|
+
entryPoints: [(0, node_path_1.join)(__dirname, "proceduralValidationBrowser.mjs")],
|
|
49
|
+
bundle: true, format: "esm", platform: "browser", target: "es2022",
|
|
50
|
+
external: ["three"], write: false, logLevel: "silent",
|
|
51
|
+
}).then((result) => result.outputFiles[0].contents));
|
|
52
|
+
return browserValidatorBundle;
|
|
53
|
+
}
|
|
54
|
+
async function runModule(input) {
|
|
55
|
+
const [primary, validator] = await Promise.all([(0, promises_1.readFile)(input.primaryPath), loadBrowserValidator()]);
|
|
56
|
+
const threeRoot = (0, node_path_1.dirname)((0, node_path_1.dirname)(require.resolve("three")));
|
|
57
|
+
const assetOrigins = [...new Set(input.assets.map((asset) => new URL(asset.primary.url).origin))].join(" ");
|
|
58
|
+
const csp = [
|
|
59
|
+
"sandbox allow-scripts allow-downloads", "default-src 'none'",
|
|
60
|
+
"script-src 'self' 'unsafe-inline' blob:",
|
|
61
|
+
`connect-src 'self' ${assetOrigins}`, `img-src 'self' data: blob: ${assetOrigins}`,
|
|
62
|
+
"style-src 'self' 'unsafe-inline'", "worker-src blob:", "base-uri 'none'", "form-action 'none'",
|
|
63
|
+
].join("; ");
|
|
64
|
+
// A real loopback document gives Chromium the correct network address space.
|
|
65
|
+
// Routing a synthetic document blocks native local asset requests from the opaque sandbox.
|
|
66
|
+
const server = (0, node_http_1.createServer)(async (request, response) => {
|
|
67
|
+
try {
|
|
68
|
+
const url = new URL(request.url ?? "/", origin);
|
|
69
|
+
response.setHeader("Access-Control-Allow-Origin", "*");
|
|
70
|
+
if (url.pathname === "/") {
|
|
71
|
+
response.writeHead(200, { "Content-Type": "text/html", "Content-Security-Policy": csp });
|
|
72
|
+
response.end(`<!doctype html><title>Procedural validation</title><script type="importmap">${JSON.stringify(importMap)}</script>`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (url.href === primaryUrl || url.pathname === "/validator.mjs") {
|
|
76
|
+
// The creator's published module is served unchanged, never bundled or rewritten.
|
|
77
|
+
response.writeHead(200, { "Content-Type": "text/javascript" });
|
|
78
|
+
response.end(url.href === primaryUrl ? primary : validator);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const vendorPrefix = "/vendor/three/0.183.2/";
|
|
82
|
+
if (url.pathname.startsWith(vendorPrefix)) {
|
|
83
|
+
const relativePath = decodeURIComponent(url.pathname.slice(vendorPrefix.length));
|
|
84
|
+
const sourceRoot = relativePath.startsWith("addons/") ? (0, node_path_1.join)(threeRoot, "examples", "jsm") : (0, node_path_1.join)(threeRoot, "build");
|
|
85
|
+
const sourcePath = (0, node_path_1.resolve)(sourceRoot, relativePath.replace(/^addons\//, ""));
|
|
86
|
+
if (sourcePath.startsWith(`${sourceRoot}${node_path_1.sep}`)) {
|
|
87
|
+
const bytes = await (0, promises_1.readFile)(sourcePath).catch(() => null);
|
|
88
|
+
if (bytes) {
|
|
89
|
+
response.writeHead(200, { "Content-Type": "text/javascript" });
|
|
90
|
+
response.end(bytes);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
response.writeHead(404, { "Content-Type": "text/plain" });
|
|
96
|
+
response.end("Resource is not provided by the standalone procedural viewer");
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
response.writeHead(500, { "Content-Type": "text/plain" });
|
|
100
|
+
response.end(error instanceof Error ? error.message : String(error));
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
await new Promise((resolve, reject) => {
|
|
104
|
+
server.once("error", reject);
|
|
105
|
+
server.listen(0, "127.0.0.1", resolve);
|
|
106
|
+
});
|
|
107
|
+
const origin = `http://127.0.0.1:${server.address().port}`;
|
|
108
|
+
const primaryUrl = `${origin}/primary/${encodeURIComponent((0, node_path_1.basename)(input.primaryPath))}`;
|
|
109
|
+
const threeBase = `${origin}/vendor/three/0.183.2`;
|
|
110
|
+
// Keep the same import map and opaque sandbox as the hosted asset renderer.
|
|
111
|
+
const importMap = { imports: {
|
|
112
|
+
three: `${threeBase}/three.module.min.js`,
|
|
113
|
+
"three/addons/": `${threeBase}/addons/`,
|
|
114
|
+
"three/examples/jsm/": `${threeBase}/addons/`,
|
|
115
|
+
} };
|
|
116
|
+
try {
|
|
117
|
+
await (0, playwright_1.withBrowserValidationPage)(async ({ browser, page }) => {
|
|
118
|
+
await page.goto(origin, { waitUntil: "domcontentloaded", timeout: MODULE_TIMEOUT_MS });
|
|
119
|
+
let timeout;
|
|
120
|
+
let closingBrowser;
|
|
121
|
+
try {
|
|
122
|
+
const browserInput = { ...input, primaryPath: primaryUrl };
|
|
123
|
+
const result = await Promise.race([
|
|
124
|
+
page.evaluate(`import(${JSON.stringify(`${origin}/validator.mjs`)}).then(({ validateProceduralBrowser }) => validateProceduralBrowser(${JSON.stringify(browserInput)}))`),
|
|
125
|
+
new Promise((_resolve, reject) => {
|
|
126
|
+
timeout = setTimeout(() => {
|
|
127
|
+
reject(new Error("Module validation exceeded 30 seconds. Remove infinite loops or expensive work from module initialization, create(), controls, animations, and dispose()."));
|
|
128
|
+
// Browser control remains responsive even when the asset's renderer thread is stuck.
|
|
129
|
+
closingBrowser = browser.close();
|
|
130
|
+
}, MODULE_TIMEOUT_MS);
|
|
131
|
+
}),
|
|
132
|
+
]);
|
|
133
|
+
if (!result.valid)
|
|
134
|
+
throw new Error(result.errors.join("; "));
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
clearTimeout(timeout);
|
|
138
|
+
await closingBrowser;
|
|
139
|
+
}
|
|
140
|
+
}, { viewport: { width: 256, height: 256 }, serviceWorkers: "block" });
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
await new Promise((resolve, reject) => {
|
|
144
|
+
server.close((error) => error ? reject(error) : resolve());
|
|
145
|
+
server.closeAllConnections();
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** The shared publication check used by task preflight, game, asset and pack uploads. */
|
|
150
|
+
async function assertProceduralAssetIsValid(task, input) {
|
|
151
|
+
if (task.subcategory !== "procedural" && !(task.category === "MODEL_3D" && task.format === "CUSTOM"))
|
|
152
|
+
return;
|
|
153
|
+
const label = `Procedural asset "${task.name}" (${task.cataloguePath})`;
|
|
154
|
+
try {
|
|
155
|
+
if (task.category !== "MODEL_3D" || task.subcategory !== "procedural" || task.format !== "CUSTOM") {
|
|
156
|
+
throw new Error('Set category to "MODEL_3D", subcategory to "procedural", and format to "CUSTOM"');
|
|
157
|
+
}
|
|
158
|
+
for (const role of (0, types_1.getRequiredModel3DFileRoles)("CUSTOM")) {
|
|
159
|
+
const path = task.filePaths[role];
|
|
160
|
+
if (!path)
|
|
161
|
+
throw new Error(`files.${role} is required`);
|
|
162
|
+
const file = await (0, promises_1.stat)(path).catch(() => null);
|
|
163
|
+
if (!file?.isFile() || file.size === 0)
|
|
164
|
+
throw new Error(`files.${role} (${path}) must be an existing, non-empty file`);
|
|
165
|
+
}
|
|
166
|
+
const primaryPath = task.filePaths.primary;
|
|
167
|
+
if ((0, node_path_1.extname)(primaryPath) !== ".mjs") {
|
|
168
|
+
throw new Error(`files.primary (${primaryPath}) must be compiled JavaScript in a standalone .mjs file, not TypeScript or a source archive`);
|
|
169
|
+
}
|
|
170
|
+
if (!["text/javascript", "application/javascript"].includes(input.primaryContentType.split(";")[0].trim().toLowerCase())) {
|
|
171
|
+
throw new Error(`files.primary (${primaryPath}) must be served as text/javascript or application/javascript, received ${input.primaryContentType}`);
|
|
172
|
+
}
|
|
173
|
+
let manifest;
|
|
174
|
+
try {
|
|
175
|
+
manifest = JSON.parse(await (0, promises_1.readFile)(task.filePaths.manifest, "utf8"));
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
throw new Error(`files.manifest (${task.filePaths.manifest}) must contain valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
179
|
+
}
|
|
180
|
+
const validation = (0, procedural_1.validateProceduralManifest)(manifest);
|
|
181
|
+
if (!validation.valid)
|
|
182
|
+
throw new Error(`files.manifest (${task.filePaths.manifest}): ${validation.errors.join("; ")}`);
|
|
183
|
+
if (manifest.id !== task.name)
|
|
184
|
+
throw new Error(`manifest.id must equal catalogue asset name "${task.name}", received "${manifest.id}"`);
|
|
185
|
+
if (manifest.platformAssetRef !== null)
|
|
186
|
+
throw new Error("manifest.platformAssetRef must be null before publication");
|
|
187
|
+
if ((0, node_path_1.basename)(manifest.distFile) !== (0, node_path_1.basename)(primaryPath))
|
|
188
|
+
throw new Error(`manifest.distFile must name files.primary (${(0, node_path_1.basename)(primaryPath)})`);
|
|
189
|
+
const parameters = Object.fromEntries(Object.entries(manifest.parameters).map(([id, definition]) => [id, definition.default]));
|
|
190
|
+
for (const [id, value] of Object.entries(manifest.presentation?.parameters ?? {})) {
|
|
191
|
+
if (value !== undefined)
|
|
192
|
+
parameters[id] = value;
|
|
193
|
+
}
|
|
194
|
+
const parameterValidation = (0, procedural_1.validateCompleteProceduralParameters)(manifest.parameters, parameters);
|
|
195
|
+
if (!parameterValidation.valid)
|
|
196
|
+
throw new Error(`manifest.presentation.parameters: ${parameterValidation.errors.join("; ")}. Supply the required initial inputs in the presentation parameters`);
|
|
197
|
+
const assets = new Map();
|
|
198
|
+
for (const [id, definition] of Object.entries(manifest.parameters)) {
|
|
199
|
+
if (definition.type !== "asset")
|
|
200
|
+
continue;
|
|
201
|
+
const refs = new Set([definition.default, parameters[id]].filter((value) => typeof value === "string"));
|
|
202
|
+
for (const reference of refs) {
|
|
203
|
+
if (!input.client)
|
|
204
|
+
throw new Error(`parameters.${id}: authenticated PlayDrop access is required to resolve ${reference}`);
|
|
205
|
+
try {
|
|
206
|
+
const asset = assets.get(reference) ?? await resolveInputAsset(input.client, reference);
|
|
207
|
+
const compatibility = (0, procedural_1.validateResolvedAssetParameter)(definition, asset);
|
|
208
|
+
if (!compatibility.valid)
|
|
209
|
+
throw new Error(compatibility.errors.join("; "));
|
|
210
|
+
assets.set(reference, asset);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
throw new Error(`parameters.${id} (${reference}): ${error instanceof Error ? error.message : String(error)}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
await runModule({ primaryPath, manifest, parameters, assets: [...assets.values()] });
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
throw new Error(`files.primary (${primaryPath}): ${error instanceof Error ? error.message : String(error)}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
throw new Error(`${label}: ${error instanceof Error ? error.message : String(error)}`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import { Object3D } from "three";
|
|
3
|
+
import { validateProceduralModule, } from "@playdrop/procedural";
|
|
4
|
+
async function loadAsset(asset) {
|
|
5
|
+
const contentType = asset.primary.contentType?.toLowerCase() ?? "";
|
|
6
|
+
let data;
|
|
7
|
+
if (contentType.includes("json")) {
|
|
8
|
+
const response = await fetch(asset.primary.url);
|
|
9
|
+
if (!response.ok)
|
|
10
|
+
throw new Error(`Unable to load ${asset.reference}: HTTP ${response.status}`);
|
|
11
|
+
data = await response.json();
|
|
12
|
+
}
|
|
13
|
+
else if (asset.category === "IMAGE" || contentType.startsWith("image/")) {
|
|
14
|
+
// GlbViewer passes a decoded HTMLImageElement, not Node's raw pixel buffer.
|
|
15
|
+
const image = new Image();
|
|
16
|
+
image.crossOrigin = "anonymous";
|
|
17
|
+
await new Promise((resolve, reject) => {
|
|
18
|
+
image.onload = () => resolve();
|
|
19
|
+
image.onerror = () => reject(new Error(`Unable to load ${asset.reference} image`));
|
|
20
|
+
image.src = asset.primary.url;
|
|
21
|
+
});
|
|
22
|
+
data = image;
|
|
23
|
+
}
|
|
24
|
+
else
|
|
25
|
+
return asset;
|
|
26
|
+
return { ...asset, primary: { ...asset.primary, data } };
|
|
27
|
+
}
|
|
28
|
+
export async function validateProceduralBrowser(input) {
|
|
29
|
+
try {
|
|
30
|
+
const imported = await import(input.primaryPath);
|
|
31
|
+
const module = (imported.default ?? imported);
|
|
32
|
+
if (!module?.info || typeof module.create !== "function")
|
|
33
|
+
throw new Error("Module must expose info and create()");
|
|
34
|
+
const assets = new Map();
|
|
35
|
+
for (const asset of input.assets)
|
|
36
|
+
assets.set(asset.reference, await loadAsset(asset));
|
|
37
|
+
const context = { parameters: input.parameters, resolveAsset: (reference) => assets.get(reference) ?? null };
|
|
38
|
+
return validateProceduralModule({
|
|
39
|
+
info: module.info,
|
|
40
|
+
create() {
|
|
41
|
+
const instance = module.create(context);
|
|
42
|
+
if (!(instance.object instanceof Object3D))
|
|
43
|
+
throw new Error("create() must expose an object built with the hosted Three.js 0.183.2 Object3D");
|
|
44
|
+
const controls = instance.capabilities?.controls;
|
|
45
|
+
if (Object.keys(input.parameters).length > 0 && !controls)
|
|
46
|
+
throw new Error("Procedural setup requires the controls capability");
|
|
47
|
+
controls?.configure(input.parameters);
|
|
48
|
+
const timeline = instance.capabilities?.timeline;
|
|
49
|
+
timeline?.pause();
|
|
50
|
+
if (input.manifest.presentation?.animation) {
|
|
51
|
+
const animation = input.manifest.presentation.animation;
|
|
52
|
+
if (!timeline)
|
|
53
|
+
throw new Error("Procedural preview animation requires the timeline capability");
|
|
54
|
+
timeline.play(animation.id);
|
|
55
|
+
timeline.pause();
|
|
56
|
+
timeline.seek(animation.time);
|
|
57
|
+
}
|
|
58
|
+
else
|
|
59
|
+
timeline?.seek(0);
|
|
60
|
+
return instance;
|
|
61
|
+
},
|
|
62
|
+
}, context, input.manifest);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
return { valid: false, errors: [error instanceof Error ? error.message : String(error)] };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/domains/apps.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../src/domains/apps.ts"],"names":[],"mappings":"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"}
|
|
@@ -678,13 +678,23 @@ function buildAppsApiClientMethods(input) {
|
|
|
678
678
|
handleApiError({ status: response.status, body: parsed, headers: response.headers }, "download_app_source");
|
|
679
679
|
}
|
|
680
680
|
const blob = await response.blob();
|
|
681
|
-
const
|
|
681
|
+
const contentType = response.headers.get("content-type")?.split(";")[0]?.trim().toLowerCase();
|
|
682
|
+
const format = contentType === "application/x-git-bundle" ? "git-bundle" : contentType === "application/zip" ? "zip" : null;
|
|
683
|
+
if (!format)
|
|
684
|
+
throw new Error(`app_source_format_invalid: expected application/zip or application/x-git-bundle, received ${contentType ?? "no content type"}`);
|
|
685
|
+
const commitSha = response.headers.get("x-app-source-commit");
|
|
686
|
+
if (format === "git-bundle" && (!commitSha || !/^[0-9a-f]{40}$/.test(commitSha))) {
|
|
687
|
+
throw new Error("app_source_commit_missing: Git source download must identify the requested version commit");
|
|
688
|
+
}
|
|
689
|
+
const filename = parseContentDispositionFilename(response.headers.get("content-disposition")) ?? `${name}-${normalizedVersion}-source.${format === "git-bundle" ? "bundle" : "zip"}`;
|
|
682
690
|
const headerSize = response.headers.get("content-length");
|
|
683
691
|
const parsedSize = headerSize ? Number.parseInt(headerSize, 10) : Number.NaN;
|
|
684
692
|
const checksumHeader = response.headers.get("x-app-source-checksum");
|
|
685
693
|
return {
|
|
686
694
|
blob,
|
|
687
695
|
metadata: {
|
|
696
|
+
format,
|
|
697
|
+
...commitSha ? { commitSha } : {},
|
|
688
698
|
filename,
|
|
689
699
|
sizeBytes: Number.isFinite(parsedSize) && parsedSize >= 0 ? parsedSize : blob.size,
|
|
690
700
|
checksum: checksumHeader ?? null
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ChatAttachmentUploadSession, ChatChannelReadResponse, ChatContact, ChatContactsResponse, ChatChannelsResponse, ChatConversation, ChatConversationResponse, ChatConversationsResponse, ChatMessageResponse, ChatMessagesResponse, ChatNotificationPreferences, ChatRealtimeEvent, PlayTradeRealtimeActivityFrame, PlayTradeRealtimeActivityUpdate, CreateChatMessageRequest, EditChatMessageRequest, PlatformFriendPresenceEntry, PlatformRealtimeTopic } from "@playdrop/types";
|
|
1
|
+
import type { ChatAttachmentUploadSession, ChatChannelReadResponse, ChatContact, ChatContactsResponse, ChatChannelsResponse, ChatConversation, ChatConversationResponse, ChatConversationsResponse, ChatMessageResponse, ChatMessagesResponse, ChatNotificationPreferences, ChatRealtimeEvent, CreationRealtimeUpdate, PlayTradeRealtimeActivityFrame, PlayTradeRealtimeActivityUpdate, CreateChatMessageRequest, EditChatMessageRequest, PlatformFriendPresenceEntry, PlatformRealtimeTopic } from "@playdrop/types";
|
|
2
2
|
type ApiResponseLike<T> = {
|
|
3
3
|
status: number;
|
|
4
4
|
body: T;
|
|
@@ -69,10 +69,15 @@ export type ChatRealtimeConnectionOptions = {
|
|
|
69
69
|
onPresenceUpdated?: (entry: PlatformFriendPresenceEntry) => void;
|
|
70
70
|
onStateChange?: (state: ChatRealtimeConnectionState) => void;
|
|
71
71
|
onResyncRequired?: (conversationId: string) => void;
|
|
72
|
+
onPlatformSubscribed?: (event: {
|
|
73
|
+
topic: PlatformRealtimeTopic;
|
|
74
|
+
eventVersion: string;
|
|
75
|
+
}) => void;
|
|
72
76
|
onPlatformEvent?: (event: {
|
|
73
77
|
topic: PlatformRealtimeTopic;
|
|
74
78
|
eventVersion: string;
|
|
75
79
|
resync: boolean;
|
|
80
|
+
creation?: CreationRealtimeUpdate;
|
|
76
81
|
}) => void;
|
|
77
82
|
onPlayTradeActivity?: (event: {
|
|
78
83
|
type: "updated";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/domains/chat.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/domains/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -76,6 +76,12 @@ function parseRealtimeFrame(value) {
|
|
|
76
76
|
return parsed;
|
|
77
77
|
}
|
|
78
78
|
if ((type === "platform.subscribed" || type === "platform.event" || type === "platform.resync_required") && typeof frame["topic"] === "string" && typeof frame["eventVersion"] === "string") {
|
|
79
|
+
if (type === "platform.event" && frame["topic"] === "creation") {
|
|
80
|
+
const creation = frame["creation"];
|
|
81
|
+
if (!creation || creation["kind"] !== "task.updated" && creation["kind"] !== "task.changed" || typeof creation["gameRef"] !== "string" || !Number.isInteger(creation["taskId"]) || !Number.isInteger(creation["attempt"]) || creation["kind"] === "task.updated" && (!creation["item"] || typeof creation["item"] !== "object") || creation["kind"] === "task.changed" && (!Array.isArray(creation["items"]) || !creation["conversation"] || !("game" in creation))) {
|
|
82
|
+
throw new Error("chat_realtime_invalid_creation_event");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
79
85
|
return parsed;
|
|
80
86
|
}
|
|
81
87
|
if (type === "error" && typeof frame["code"] === "string")
|
|
@@ -480,8 +486,14 @@ function buildChatApiClientMethods(input) {
|
|
|
480
486
|
options.onPresenceUpdated?.(frame.entry);
|
|
481
487
|
} else if (frame.type === "platform.subscribed") {
|
|
482
488
|
platformSubscriptions.set(frame.topic, frame.eventVersion);
|
|
489
|
+
options.onPlatformSubscribed?.({ topic: frame.topic, eventVersion: frame.eventVersion });
|
|
483
490
|
} else if (frame.type === "platform.event") {
|
|
484
|
-
options.onPlatformEvent?.({
|
|
491
|
+
options.onPlatformEvent?.({
|
|
492
|
+
topic: frame.topic,
|
|
493
|
+
eventVersion: frame.eventVersion,
|
|
494
|
+
resync: false,
|
|
495
|
+
...frame.topic === "creation" ? { creation: frame.creation } : {}
|
|
496
|
+
});
|
|
485
497
|
platformSubscriptions.set(frame.topic, frame.eventVersion);
|
|
486
498
|
} else if (frame.type === "platform.resync_required") {
|
|
487
499
|
options.onPlatformEvent?.({ topic: frame.topic, eventVersion: frame.eventVersion, resync: true });
|