Puter `CreateAppResult` 对象详解:读懂 `puter.apps.create()` 的返回结构
PuterCreateAppResult对象详解读懂puter.apps.create()的返回结构【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puterCreateAppResult是 Puter JavaScript SDKputer.js中描述puter.apps.create()返回值的数据对象。当你在 Puter 云端桌面环境中以编程方式注册一个新应用时SDK 会返回一个 Promise其 resolve 值就是本对象。读完本文你将掌握该对象的全部属性含义、这些属性在仓库源码中如何被生成与校验以及如何在一个真实创建流程中完整消费与清理这个结果对象。什么是CreateAppResultCreateAppResult直译为创建应用结果它是一个纯数据对象Plain Object承载了一次应用创建操作成功后由 Puter 返回给调用方的全部元信息。SDK 侧的官方定义位于 src/puter-js/src/modules/apps/types.js其 JSDoc 声明如下/** * The result returned by Apps.create(). * * typedef {Object} CreateAppResult * property {string} uid ... * property {string} name ... * property {string} title ... * property {string} index_url ... * property {string} subdomain ... * property {{ username: string, uuid: string }} owner ... */对应的 TypeScript 声明也可以在同一 SDK 的 src/puter-js/index.d.ts 中找到供 TS 类型检查使用仓库还提供了tools/checkPuterjsTypes.mjs与tools/typecheck.mjs来维护这些类型的一致性。需要强调的一点是CreateAppResult不是独立接口而是puter.apps.create()的返回值约定因此理解它之前应先理解创建接口本身。你可以参考同一文档目录下的 src/docs/src/Objects/app.mdApp对象描述应用在桌面环境中的常规形态来对比两者差异。属性总览CreateAppResult共包含 6 个属性字段名采用 snake_case核心文档 src/docs/src/Objects/createappresult.md 定义如下属性类型含义uidString应用的唯一标识符由 Puter 在应用创建时生成nameString应用的名称titleString应用的标题index_urlString应用 index 文件的 URL应用启动时加载该文件subdomainString分配给应用的子域名ownerObject应用所有者信息对象其中owner是一个嵌套对象包含两个字符串属性usernameString所有者的用户名uuidString所有者的唯一标识符。一个典型的返回 JSON 形状如下{ uid: 8f2a…, name: my-notes-app, title: My Notes, index_url: https://example.com/app/index.html, subdomain: my-notes-app.puter.site, owner: { username: alice, uuid: 3c9d… } }如何获得CreateAppResultCreateAppResult只能通过puter.apps.create()获得。调用语法支持两种形式见 src/docs/src/Apps/create.mdputer.apps.create(name, indexURL); puter.apps.create(name, indexURL, title); puter.apps.create(options);位置参数形式name与indexURL必填name在用户的 apps 中必须唯一重名时 Promise 会被 rejectindexURL必须可被用户访问且必须以http://或https://开头file://、ftp://等其他协议会直接报错。选项对象形式传入一个 options 对象可额外指定title、description、icon、maximizeOnStart、filetypeAssociations、dedupeName、background、feedbackEnabled、metadata等选项各选项的默认值与说明完整定义在 src/puter-js/src/modules/apps/types.js 的CreateAppOptionsJSDoc 中。例如文档中的完整示例含清理步骤可直接复制运行html body script srchttps://js.puter.com/v2//script script (async () { // (1) Generate a random app name let appName puter.randName(); // (2) Create the app and prints its UID to the page let app await puter.apps.create(appName, https://example.com); puter.print(Created app ${app.name}. UID: ${app.uid}); // (3) Delete the app (cleanup) await puter.apps.delete(appName); })(); /script /body /html这里app变量的运行时值就是一个CreateAppResult示例依次消费了app.name与app.uid两个字段。从源码看创建时这些属性是如何被决定的CreateAppResult的每个字段背后都有明确的生成逻辑SDK 与后端分工如下。SDK 侧参数归一化与必填校验客户端入口 src/puter-js/src/modules/apps/create.js 展示了属性如何从用户输入成型位置参数形式会把参数组装为{ name, index_url, title: title ?? name }即title缺省时回退为name选项对象形式会先经过toAppObject()做字段重映射若name缺失抛Name is required若index_url缺失抛Index URL is requiredinvalidRequest随后调用puter-apps驱动的es:app的create方法并将返回结果交给addUserIteration()处理。camelCase → snake_case 的映射集中在一处src/puter-js/src/modules/apps/lib/appObject.js。create()与update()共用这一映射表保证两边字段一致。这正是结果对象中index_url而非indexURL、maximize_on_start、feedback_enabled等使用 snake_case 的原因。后端侧uid、owner、index_url、subdomain的生成与保护后端驱动 src/backend/drivers/apps/AppDriver.js 负责落库并构造返回数据uid/name/title/index_url在read()序列化阶段result对象依次取app.uid、app.name、app.title、app.index_urlAppDriver.js 中result组装处。uid由 Puter 生成具备全局唯一性。owner并非始终返回源码显示owner仅在当前 actor 是应用所有者时才被附加比较actor.user.id app.owner_user_id内容为{ username, uuid }见 AppDriver.js 中Owner info — only expose if actor is the owner or has access 的注释块。也就是说第三方看到的结果对象通常不含owner。index_url的唯一性与协议校验创建路径上会执行validateUrl()校验协议并有App index_url already in use冲突保护即不同应用不允许共用同一个index_url。subdomain与托管子域后端在创建时若检测到index_url指向 Puter 托管的子域名会校验该子域名的归属非所有者引用会以subdomain_not_owned拒绝相关逻辑集中在#assertIndexUrlHostAllowed与#extractPuterHostedSubdomain。当应用部署在 Puter 托管子域上时返回结果中的subdomain即对应这一分配给应用的子域名。权限模型层面创建的应用默认不带任何权限不能访问任何数据直到为其授予权限为止这与AppPermissionService中subdomains-of-user:*命名空间的授权模型相互印证见 src/backend/services/apps/AppPermissionService.ts。拿到CreateAppResult之后的常见用法持久化uiduid是之后调用puter.apps.update()、puter.apps.get()、puter.apps.list()、puter.apps.delete()时定位该应用的最可靠标识。展示给用户name与title可直接用于 UI 展示title缺省等于name。跳转 / 挂载启动index_url即应用启动时加载的入口页面地址。回收资源示例中通过puter.apps.delete(appName)完成清理避免遗留无用应用占用用户的 app 目录与子域名配额。参考与延伸阅读返回对象定义src/docs/src/Objects/createappresult.md创建接口完整文档src/docs/src/Apps/create.mdSDK 端实现src/puter-js/src/modules/apps/create.js、字段映射 src/puter-js/src/modules/apps/lib/appObject.js类型定义JSDoc 与 .d.tssrc/puter-js/src/modules/apps/types.js、src/puter-js/index.d.ts后端实现src/backend/drivers/apps/AppDriver.js相关对象文档src/docs/src/Objects/app.md同系列接口get、list、update、checkName、delete【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考