@playdrop/playdrop-cli 0.17.5 → 0.17.15
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 +2 -2
- 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/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 +13 -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/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 +2 -0
- package/dist/commands/worker/generation.js +35 -5
- 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 +2 -2
- 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/api.d.ts +37 -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/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 });
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type * as THREE from "three";
|
|
2
|
+
export declare const PLAYDROP_PROCEDURAL_PROTOCOL: "playdrop-procedural@1";
|
|
3
|
+
export declare const PLAYDROP_PROCEDURAL_PACK_PROTOCOL: "playdrop-procedural-pack@1";
|
|
4
|
+
export declare const PLAYDROP_PROCEDURAL_MANIFEST_PROTOCOL: "playdrop-procedural-manifest@1";
|
|
5
|
+
export type ProceduralParameterValue = number | string | boolean | null;
|
|
6
|
+
export type ProceduralParameterValues = Record<string, ProceduralParameterValue>;
|
|
7
|
+
export interface ProceduralResolvedAssetV1 {
|
|
8
|
+
readonly reference: string;
|
|
9
|
+
readonly title: string;
|
|
10
|
+
readonly creator: string;
|
|
11
|
+
readonly category: "IMAGE" | "VIDEO" | "AUDIO" | "SPRITESHEET" | "MODEL_3D" | "CUSTOM";
|
|
12
|
+
readonly subcategory: string | null;
|
|
13
|
+
readonly format: string;
|
|
14
|
+
readonly assetSpec: string | null;
|
|
15
|
+
readonly previewUrl: string | null;
|
|
16
|
+
readonly primary: {
|
|
17
|
+
readonly url: string;
|
|
18
|
+
readonly contentType: string | null;
|
|
19
|
+
/** Parsed JSON for JSON-backed assets. Binary and media assets use url. */
|
|
20
|
+
readonly data?: unknown;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare const PROCEDURAL_PARAMETER_ICON_IDS: readonly ["adjust", "asset", "angle", "color", "count", "depth", "height", "length", "light", "material", "radius", "scale", "size", "toggle", "variation", "visibility", "width"];
|
|
24
|
+
export type ProceduralParameterIcon = (typeof PROCEDURAL_PARAMETER_ICON_IDS)[number];
|
|
25
|
+
export type ProceduralParameterAffects = "geometry" | "material" | "animation";
|
|
26
|
+
export type ProceduralParameterControl = "auto" | "slider" | "stepper" | "toggle" | "select" | "segmented" | "color" | "palette" | "asset";
|
|
27
|
+
export interface ProceduralParameterPresentation {
|
|
28
|
+
readonly icon?: ProceduralParameterIcon;
|
|
29
|
+
readonly control?: ProceduralParameterControl;
|
|
30
|
+
readonly unit?: string;
|
|
31
|
+
readonly precision?: number;
|
|
32
|
+
readonly order?: number;
|
|
33
|
+
}
|
|
34
|
+
interface ParameterBase<T extends ProceduralParameterValue> {
|
|
35
|
+
readonly label: string;
|
|
36
|
+
readonly default: T;
|
|
37
|
+
readonly description?: string;
|
|
38
|
+
readonly group?: string;
|
|
39
|
+
readonly affects?: ProceduralParameterAffects;
|
|
40
|
+
readonly presentation?: ProceduralParameterPresentation;
|
|
41
|
+
}
|
|
42
|
+
export interface NumberParameter extends ParameterBase<number> {
|
|
43
|
+
readonly type: "number";
|
|
44
|
+
readonly min: number;
|
|
45
|
+
readonly max: number;
|
|
46
|
+
readonly step: number;
|
|
47
|
+
}
|
|
48
|
+
export interface BooleanParameter extends ParameterBase<boolean> {
|
|
49
|
+
readonly type: "boolean";
|
|
50
|
+
}
|
|
51
|
+
export interface ColorParameter extends ParameterBase<string> {
|
|
52
|
+
readonly type: "color";
|
|
53
|
+
}
|
|
54
|
+
export interface ProceduralSelectOption {
|
|
55
|
+
readonly value: string;
|
|
56
|
+
readonly label: string;
|
|
57
|
+
readonly swatches?: readonly string[];
|
|
58
|
+
}
|
|
59
|
+
export interface SelectParameter extends ParameterBase<string> {
|
|
60
|
+
readonly type: "select";
|
|
61
|
+
readonly options: readonly (string | ProceduralSelectOption)[];
|
|
62
|
+
}
|
|
63
|
+
export interface AssetParameterAccepts {
|
|
64
|
+
readonly category?: ProceduralResolvedAssetV1["category"];
|
|
65
|
+
readonly subcategory?: string;
|
|
66
|
+
readonly formats?: readonly string[];
|
|
67
|
+
readonly assetSpec?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface AssetParameter extends ParameterBase<string | null> {
|
|
70
|
+
readonly type: "asset";
|
|
71
|
+
readonly required?: boolean;
|
|
72
|
+
readonly accepts: AssetParameterAccepts;
|
|
73
|
+
}
|
|
74
|
+
export type ProceduralParameterDefinition = NumberParameter | BooleanParameter | ColorParameter | SelectParameter | AssetParameter;
|
|
75
|
+
export interface ProceduralAnimationDefinition {
|
|
76
|
+
readonly id: string;
|
|
77
|
+
readonly label: string;
|
|
78
|
+
readonly group?: string;
|
|
79
|
+
readonly duration: number;
|
|
80
|
+
readonly loop: boolean;
|
|
81
|
+
}
|
|
82
|
+
export type ProceduralPresentationScenePreset = "studio" | "light" | "dark" | "outdoor";
|
|
83
|
+
export type ProceduralPresentationCameraView = "perspective" | "front" | "side" | "top";
|
|
84
|
+
export interface ProceduralAssetPresentationV1 {
|
|
85
|
+
readonly parameters?: Partial<ProceduralParameterValues>;
|
|
86
|
+
readonly animation?: {
|
|
87
|
+
readonly id: string;
|
|
88
|
+
readonly time: number;
|
|
89
|
+
};
|
|
90
|
+
readonly scene?: ProceduralPresentationScenePreset;
|
|
91
|
+
readonly camera?: {
|
|
92
|
+
readonly view?: ProceduralPresentationCameraView;
|
|
93
|
+
/** Degrees clockwise around the asset from its front (+Z). */
|
|
94
|
+
readonly azimuth?: number;
|
|
95
|
+
/** Degrees above the floor. */
|
|
96
|
+
readonly elevation?: number;
|
|
97
|
+
/** Framing multiplier. Values above one add space around the asset. */
|
|
98
|
+
readonly padding?: number;
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
export interface ProceduralAssetInfoV1 {
|
|
102
|
+
readonly protocol: typeof PLAYDROP_PROCEDURAL_PROTOCOL;
|
|
103
|
+
readonly id: string;
|
|
104
|
+
readonly title: string;
|
|
105
|
+
readonly version: string;
|
|
106
|
+
readonly kind: "model" | "vfx" | "character";
|
|
107
|
+
readonly summary: string;
|
|
108
|
+
readonly tags: readonly string[];
|
|
109
|
+
readonly pack: {
|
|
110
|
+
readonly id: string;
|
|
111
|
+
readonly title: string;
|
|
112
|
+
readonly sourceProject: string;
|
|
113
|
+
};
|
|
114
|
+
readonly sourceEntry: string;
|
|
115
|
+
readonly distFile: string;
|
|
116
|
+
readonly requirements: {
|
|
117
|
+
readonly renderer: "webgl";
|
|
118
|
+
readonly three: "0.183.2";
|
|
119
|
+
};
|
|
120
|
+
/** Viewer-owned initial setup, also used to bake the catalogue thumbnail. */
|
|
121
|
+
readonly presentation?: ProceduralAssetPresentationV1;
|
|
122
|
+
readonly character?: {
|
|
123
|
+
readonly rig: string;
|
|
124
|
+
readonly skinProtocol: string;
|
|
125
|
+
readonly supportedTemplates: readonly string[];
|
|
126
|
+
readonly unitsPerMeter: number;
|
|
127
|
+
readonly boneCount: number;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
export interface ProceduralControlsCapability {
|
|
131
|
+
readonly parameters: Readonly<Record<string, ProceduralParameterDefinition>>;
|
|
132
|
+
values(): Readonly<ProceduralParameterValues>;
|
|
133
|
+
configure(values: Partial<ProceduralParameterValues>): void;
|
|
134
|
+
}
|
|
135
|
+
export interface ProceduralSelectionCapability {
|
|
136
|
+
readonly parts: Readonly<Record<string, THREE.Object3D>>;
|
|
137
|
+
readonly sockets: Readonly<Record<string, THREE.Object3D>>;
|
|
138
|
+
}
|
|
139
|
+
export interface ProceduralTimelineCapability {
|
|
140
|
+
readonly animations: readonly ProceduralAnimationDefinition[];
|
|
141
|
+
play(id: string): void;
|
|
142
|
+
pause(): void;
|
|
143
|
+
seek(seconds: number): void;
|
|
144
|
+
}
|
|
145
|
+
export interface ProceduralCharacterCapability {
|
|
146
|
+
readonly rig: string;
|
|
147
|
+
readonly template: string;
|
|
148
|
+
readonly skinProtocol?: string;
|
|
149
|
+
readonly skinId?: string;
|
|
150
|
+
readonly unitsPerMeter: number;
|
|
151
|
+
readonly boneCount: number;
|
|
152
|
+
}
|
|
153
|
+
export interface ProceduralAssetCapabilities {
|
|
154
|
+
readonly controls?: ProceduralControlsCapability;
|
|
155
|
+
readonly selection?: ProceduralSelectionCapability;
|
|
156
|
+
readonly timeline?: ProceduralTimelineCapability;
|
|
157
|
+
readonly character?: ProceduralCharacterCapability;
|
|
158
|
+
}
|
|
159
|
+
export interface ProceduralAssetInstanceV1 {
|
|
160
|
+
readonly object: THREE.Object3D;
|
|
161
|
+
readonly capabilities?: ProceduralAssetCapabilities;
|
|
162
|
+
reset?(): void;
|
|
163
|
+
update?(deltaSeconds: number, elapsedSeconds: number): void;
|
|
164
|
+
dispose(): void;
|
|
165
|
+
}
|
|
166
|
+
export interface ProceduralAssetContextV1 {
|
|
167
|
+
readonly parameters?: Partial<ProceduralParameterValues>;
|
|
168
|
+
/** Host-provided access to assets referenced by typed asset parameters. */
|
|
169
|
+
readonly resolveAsset?: (reference: string) => ProceduralResolvedAssetV1 | null;
|
|
170
|
+
}
|
|
171
|
+
export interface ProceduralAssetModuleV1 {
|
|
172
|
+
readonly info: ProceduralAssetInfoV1;
|
|
173
|
+
create(context?: ProceduralAssetContextV1): ProceduralAssetInstanceV1;
|
|
174
|
+
}
|
|
175
|
+
export interface ProceduralManifestV1 extends ProceduralAssetInfoV1 {
|
|
176
|
+
readonly manifestProtocol: typeof PLAYDROP_PROCEDURAL_MANIFEST_PROTOCOL;
|
|
177
|
+
readonly platformAssetRef: string | null;
|
|
178
|
+
readonly parameters: Readonly<Record<string, ProceduralParameterDefinition>>;
|
|
179
|
+
readonly animations: readonly ProceduralAnimationDefinition[];
|
|
180
|
+
readonly parts: readonly string[];
|
|
181
|
+
readonly sockets: readonly string[];
|
|
182
|
+
readonly capabilities: {
|
|
183
|
+
readonly controls: boolean;
|
|
184
|
+
readonly selection: boolean;
|
|
185
|
+
readonly timeline: boolean;
|
|
186
|
+
readonly character: boolean;
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
export interface ProceduralValidationResult {
|
|
190
|
+
readonly valid: boolean;
|
|
191
|
+
readonly errors: readonly string[];
|
|
192
|
+
}
|
|
193
|
+
export declare function validateProceduralParameters(definitions: unknown, values: unknown): ProceduralValidationResult;
|
|
194
|
+
export declare function validateCompleteProceduralParameters(definitions: unknown, values: unknown): ProceduralValidationResult;
|
|
195
|
+
export declare function validateResolvedAssetParameter(definition: AssetParameter, asset: ProceduralResolvedAssetV1): ProceduralValidationResult;
|
|
196
|
+
export declare function requireResolvedAssetParameter(context: ProceduralAssetContextV1, id: string, definition: AssetParameter): ProceduralResolvedAssetV1;
|
|
197
|
+
export declare function validateProceduralManifest(value: unknown): ProceduralValidationResult;
|
|
198
|
+
/** Pass the publication manifest to also verify the viewer's advertised contract. */
|
|
199
|
+
export declare function validateProceduralModule(value: unknown, context?: ProceduralAssetContextV1, manifest?: ProceduralManifestV1): ProceduralValidationResult;
|
|
200
|
+
export {};
|
|
201
|
+
//# sourceMappingURL=index.d.ts.map
|