@doubao-dev/cli 0.0.32 → 0.0.33

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.
Files changed (92) hide show
  1. package/dist/2168.js +16 -16
  2. package/dist/275.js +12 -14
  3. package/dist/2932.js +1 -1
  4. package/dist/318.js +1 -1
  5. package/dist/3974.js +22 -22
  6. package/dist/4525.js +1 -1
  7. package/dist/4880.js +1 -1
  8. package/dist/4931.js +2 -2
  9. package/dist/7410.js +1 -1
  10. package/dist/7417.js +204 -0
  11. package/dist/7417.js.LICENSE.txt +107 -0
  12. package/dist/7945.js +1 -0
  13. package/dist/8079.js +126 -0
  14. package/dist/{1560.js → 9091.js} +2 -2
  15. package/dist/9667.js +78 -0
  16. package/dist/{8891.js.LICENSE.txt → 9667.js.LICENSE.txt} +0 -108
  17. package/dist/@byted-doubao-apps/create.js +1 -1
  18. package/dist/@byted-doubao-apps/kit.js +1 -0
  19. package/dist/@byted-doubao-apps/login.js +1 -1
  20. package/dist/@byted-doubao-apps/login~1.js +1 -1
  21. package/dist/@byted-doubao-apps/template-empty/package.json +3 -3
  22. package/dist/@byted-doubao-apps/template-starter/package.json +3 -3
  23. package/dist/@byted-hdt/cli.js +1 -1
  24. package/dist/@inquirer/select.js +1 -1
  25. package/dist/app.js +1 -1
  26. package/dist/assets/web-sdk-debugger/__doubao_web_sdk_native_modules/applet-bridge-module-core.js +1 -1
  27. package/dist/assets/web-sdk-debugger/index.html +1 -1
  28. package/dist/assets/web-sdk-debugger/static/js/index.d1bb36b355.js +44 -0
  29. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-api.template.js +0 -0
  30. package/dist/assets/web-sdk-debugger/wsd/doubao-apps-framework.template.js +0 -0
  31. package/dist/build.js +1 -1
  32. package/dist/build~1.js +6 -6
  33. package/dist/check.js +1 -1
  34. package/dist/demo-server.js +1 -1
  35. package/dist/dev-config.js +1 -1
  36. package/dist/dev-shell.js +1 -1
  37. package/dist/dev.js +10 -10
  38. package/dist/devtools.js +1 -1
  39. package/dist/gen-explore.js +1 -1
  40. package/dist/gen-trajectory.js +1 -1
  41. package/dist/init.js +4 -4
  42. package/dist/ink.js +1 -1
  43. package/dist/inquirer.js +1 -0
  44. package/dist/json-file.js +1 -1
  45. package/dist/kit-dev-options.js +1 -1
  46. package/dist/legacy-upload.js +1 -1
  47. package/dist/lepus.js +1 -1
  48. package/dist/ora.js +1 -1
  49. package/dist/project-layout.js +1 -1
  50. package/dist/prompt.js +1 -1
  51. package/dist/prompts.js +1 -1
  52. package/dist/report.js +1 -1
  53. package/dist/run-registry.js +1 -1
  54. package/dist/run.js +44 -44
  55. package/dist/sandbox.js +1 -1
  56. package/dist/scan.js +1 -1
  57. package/dist/sdk.js +63 -188
  58. package/dist/sdk~1.js +50 -50
  59. package/dist/server.js +1 -1
  60. package/dist/skill.js +1 -1
  61. package/dist/skills.js +1 -1
  62. package/dist/skills~1.js +2 -1
  63. package/dist/static/assets/web-view-proxy-bootstrap.js +1 -0
  64. package/dist/static/assets/web-view-proxy-page-client.js +1 -1
  65. package/dist/static/assets/web-view-proxy-service-worker.js +1 -1
  66. package/dist/status~1.js +1 -1
  67. package/dist/stop.js +1 -1
  68. package/dist/sync.js +1 -1
  69. package/dist/templates/README.md +0 -1
  70. package/dist/update.js +1 -1
  71. package/dist/workspace.js +1 -1
  72. package/dist/wrapper.js +1 -0
  73. package/dist/yaml.js +1 -1
  74. package/package.json +2 -2
  75. package/skills/dbx-eval/SKILL.md +15 -7
  76. package/skills/doubao-agentic-service-development/SKILL.md +1 -1
  77. package/skills/doubao-agentic-service-development/references/auth.md +1 -1
  78. package/skills/doubao-agentic-service-development/references/dev-debug.md +3 -3
  79. package/skills/doubao-agentic-service-development/references/frontend/components/map-canvas.md +1 -1
  80. package/skills/doubao-agentic-service-development/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +0 -6
  81. package/skills/doubao-agentic-service-development/references/frontend/guides/debugger-mcp.md +2 -2
  82. package/skills/doubao-agentic-service-development/references/frontend/widget-templates/props.md +1 -1
  83. package/skills/doubao-agentic-service-development/references/frontend-dev.md +3 -3
  84. package/skills/doubao-agentic-service-development/references/local-debug/overview.md +2 -2
  85. package/skills/doubao-agentic-service-development/references/overview.md +16 -31
  86. package/skills/doubao-agentic-service-development/scripts/workspace.py +6 -89
  87. package/dist/180.js +0 -1
  88. package/dist/8891.js +0 -280
  89. package/dist/9635.js +0 -1
  90. package/dist/assets/web-sdk-debugger/static/js/index.75528d6de7.js +0 -26
  91. package/dist/dbx.js +0 -3
  92. package/dist/skills~2.js +0 -2
@@ -1,43 +1,3 @@
1
- /*!
2
- * Tmp
3
- *
4
- * Copyright (c) 2011-2017 KARASZI Istvan <github@spam.raszi.hu>
5
- *
6
- * MIT Licensed
7
- */
8
-
9
- /*!
10
- * depd
11
- * Copyright(c) 2014-2018 Douglas Christopher Wilson
12
- * MIT Licensed
13
- */
14
-
15
- /*!
16
- * ee-first
17
- * Copyright(c) 2014 Jonathan Ong
18
- * MIT Licensed
19
- */
20
-
21
- /*!
22
- * encodeurl
23
- * Copyright(c) 2016 Douglas Christopher Wilson
24
- * MIT Licensed
25
- */
26
-
27
- /*!
28
- * escape-html
29
- * Copyright(c) 2012-2013 TJ Holowaychuk
30
- * Copyright(c) 2015 Andreas Lubbe
31
- * Copyright(c) 2015 Tiancheng "Timothy" Gu
32
- * MIT Licensed
33
- */
34
-
35
- /*!
36
- * etag
37
- * Copyright(c) 2014-2016 Douglas Christopher Wilson
38
- * MIT Licensed
39
- */
40
-
41
1
  /*!
42
2
  * fill-range <https://github.com/jonschlinkert/fill-range>
43
3
  *
@@ -45,20 +5,6 @@
45
5
  * Licensed under the MIT License.
46
6
  */
47
7
 
48
- /*!
49
- * fresh
50
- * Copyright(c) 2012 TJ Holowaychuk
51
- * Copyright(c) 2016-2017 Douglas Christopher Wilson
52
- * MIT Licensed
53
- */
54
-
55
- /*!
56
- * http-errors
57
- * Copyright(c) 2014 Jonathan Ong
58
- * Copyright(c) 2016 Douglas Christopher Wilson
59
- * MIT Licensed
60
- */
61
-
62
8
  /*!
63
9
  * is-extglob <https://github.com/jonschlinkert/is-extglob>
64
10
  *
@@ -80,20 +26,6 @@
80
26
  * Released under the MIT License.
81
27
  */
82
28
 
83
- /*!
84
- * mime-db
85
- * Copyright(c) 2014 Jonathan Ong
86
- * Copyright(c) 2015-2022 Douglas Christopher Wilson
87
- * MIT Licensed
88
- */
89
-
90
- /*!
91
- * mime-types
92
- * Copyright(c) 2014 Jonathan Ong
93
- * Copyright(c) 2015 Douglas Christopher Wilson
94
- * MIT Licensed
95
- */
96
-
97
29
  /*!
98
30
  * normalize-path <https://github.com/jonschlinkert/normalize-path>
99
31
  *
@@ -101,34 +33,6 @@
101
33
  * Released under the MIT License.
102
34
  */
103
35
 
104
- /*!
105
- * on-finished
106
- * Copyright(c) 2013 Jonathan Ong
107
- * Copyright(c) 2014 Douglas Christopher Wilson
108
- * MIT Licensed
109
- */
110
-
111
- /*!
112
- * range-parser
113
- * Copyright(c) 2012-2014 TJ Holowaychuk
114
- * Copyright(c) 2015-2016 Douglas Christopher Wilson
115
- * MIT Licensed
116
- */
117
-
118
- /*!
119
- * send
120
- * Copyright(c) 2012 TJ Holowaychuk
121
- * Copyright(c) 2014-2022 Douglas Christopher Wilson
122
- * MIT Licensed
123
- */
124
-
125
- /*!
126
- * statuses
127
- * Copyright(c) 2014 Jonathan Ong
128
- * Copyright(c) 2016 Douglas Christopher Wilson
129
- * MIT Licensed
130
- */
131
-
132
36
  /*!
133
37
  * to-regex-range <https://github.com/micromatch/to-regex-range>
134
38
  *
@@ -136,18 +40,6 @@
136
40
  * Released under the MIT License.
137
41
  */
138
42
 
139
- /*!
140
- * toidentifier
141
- * Copyright(c) 2016 Douglas Christopher Wilson
142
- * MIT Licensed
143
- */
144
-
145
- /*!
146
- * content-type
147
- * Copyright(c) 2015 Douglas Christopher Wilson
148
- * MIT Licensed
149
- */
150
-
151
43
  /*! crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */
152
44
 
153
45
  /*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */
@@ -1,4 +1,4 @@
1
- import"node:module";import{__webpack_require__ as e}from"../rslib-runtime.js";import"../9635.js";let t=e("node:path"),r=e("node:fs"),o=t.join("src","app.config.ts"),i=t.join("src","app.ts");function a(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}async function s(e,n,c=""){for(let s of[o,i].map(r=>t.join(e,r))){let e;try{e=await r.promises.readFile(s,"utf8")}catch(e){if(e?.code==="ENOENT")continue;throw e}let t=e.replace("<%= appId %>",a(n)).replace("<%= name %>",a(c));t!==e&&await r.promises.writeFile(s,t,"utf8")}}let n=new Set(["node_modules","dist",".git"]);async function c(e,o){let i=async(e,o)=>{for(let a of(await r.promises.mkdir(o,{recursive:!0}),await r.promises.readdir(e,{withFileTypes:!0}))){let s=t.join(e,a.name),c=t.join(o,a.name);if(a.isDirectory()){if(n.has(a.name))continue;await i(s,c)}else await r.promises.copyFile(s,c)}};await i(e,o)}let p=new Set([".js",".cjs",".mjs",".ts",".tsx",".jsx",".json",".md",".txt",".scss",".css",".less",".html",".yml",".yaml"]),l=[["@byted-doubao-apps/framework","@doubao-dev/framework"],["@byted-doubao-apps/template","@doubao-dev/template"],["@byted-doubao-apps/taro-runtime","@doubao-dev/taro-runtime"]],d=["doubao.config.ts"],u=["@byted-doubao-apps/deploy","@byted-doubao-apps/kit","@byted-doubao-apps/ai","@byted-doubao-apps/create","@doubao-dev/deploy","@doubao-dev/kit","@doubao-dev/ai","@doubao-dev/create"],f=["dev","build","deploy"],m=["# Start development server","pnpm dev","pnpm run dev","pnpm run build","pnpm run deploy","开发服务器启动后","## 构建","doubao.config.ts","部署到豆包平台"];function w(e){let t=e;for(let[e,r]of l)t=t.replace(RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),r);return t}async function y(e,o){for(let a of(await r.promises.readdir(e,{withFileTypes:!0}))){var i;let s=t.join(e,a.name);if(function(e){return d.some(t=>t===e)}(a.name)){await r.promises.rm(s,{recursive:!0,force:!0});continue}if(a.isDirectory()){await y(s,o);continue}if(i=a.name,!p.has(t.extname(i))&&"package.json"!==i&&"tsconfig.json"!==i)continue;let n=await r.promises.readFile(s,"utf-8");await r.promises.writeFile(s,function(e,t,r){if("package.json"===e){let e=JSON.parse(w(t));if(e.scripts&&"object"==typeof e.scripts){for(let t of f)delete e.scripts[t];0===Object.keys(e.scripts).length&&delete e.scripts}for(let t of["dependencies","devDependencies","peerDependencies"])if(e[t]&&"object"==typeof e[t]){for(let o of Object.keys(e[t]))u.some(e=>e===o)?delete e[t][o]:o.startsWith("@doubao-dev/")&&(e[t][o]="latest"===r?r:`^${r}`);0===Object.keys(e[t]).length&&delete e[t]}return`${JSON.stringify(e,null,2)}
1
+ import"node:module";import{__webpack_require__ as e}from"../rslib-runtime.js";import"../7945.js";let t=e("node:path"),r=e("node:fs"),o=t.join("src","app.config.ts"),i=t.join("src","app.ts");function a(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}async function s(e,n,c=""){for(let s of[o,i].map(r=>t.join(e,r))){let e;try{e=await r.promises.readFile(s,"utf8")}catch(e){if(e?.code==="ENOENT")continue;throw e}let t=e.replace("<%= appId %>",a(n)).replace("<%= name %>",a(c));t!==e&&await r.promises.writeFile(s,t,"utf8")}}let n=new Set(["node_modules","dist",".git"]);async function c(e,o){let i=async(e,o)=>{for(let a of(await r.promises.mkdir(o,{recursive:!0}),await r.promises.readdir(e,{withFileTypes:!0}))){let s=t.join(e,a.name),c=t.join(o,a.name);if(a.isDirectory()){if(n.has(a.name))continue;await i(s,c)}else await r.promises.copyFile(s,c)}};await i(e,o)}let p=new Set([".js",".cjs",".mjs",".ts",".tsx",".jsx",".json",".md",".txt",".scss",".css",".less",".html",".yml",".yaml"]),l=[["@byted-doubao-apps/framework","@doubao-dev/framework"],["@byted-doubao-apps/template","@doubao-dev/template"],["@byted-doubao-apps/taro-runtime","@doubao-dev/taro-runtime"]],d=["doubao.config.ts"],u=["@byted-doubao-apps/deploy","@byted-doubao-apps/kit","@byted-doubao-apps/ai","@byted-doubao-apps/create","@doubao-dev/deploy","@doubao-dev/kit","@doubao-dev/ai","@doubao-dev/create"],f=["dev","build","deploy"],m=["# Start development server","pnpm dev","pnpm run dev","pnpm run build","pnpm run deploy","开发服务器启动后","## 构建","doubao.config.ts","部署到豆包平台"];function w(e){let t=e;for(let[e,r]of l)t=t.replace(RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),r);return t}async function y(e,o){for(let a of(await r.promises.readdir(e,{withFileTypes:!0}))){var i;let s=t.join(e,a.name);if(function(e){return d.some(t=>t===e)}(a.name)){await r.promises.rm(s,{recursive:!0,force:!0});continue}if(a.isDirectory()){await y(s,o);continue}if(i=a.name,!p.has(t.extname(i))&&"package.json"!==i&&"tsconfig.json"!==i)continue;let n=await r.promises.readFile(s,"utf-8");await r.promises.writeFile(s,function(e,t,r){if("package.json"===e){let e=JSON.parse(w(t));if(e.scripts&&"object"==typeof e.scripts){for(let t of f)delete e.scripts[t];0===Object.keys(e.scripts).length&&delete e.scripts}for(let t of["dependencies","devDependencies","peerDependencies"])if(e[t]&&"object"==typeof e[t]){for(let o of Object.keys(e[t]))u.some(e=>e===o)?delete e[t][o]:o.startsWith("@doubao-dev/")&&(e[t][o]="latest"===r?r:`^${r}`);0===Object.keys(e[t]).length&&delete e[t]}return`${JSON.stringify(e,null,2)}
2
2
  `}return"README.md"===e||"AGENTS.md"===e?w(t).replace(/\n## AI 开发支持\n[\s\S]*?(?=\n## |\s*$)/,"").split("\n").filter(e=>!m.some(t=>e.includes(t))).join("\n").replace(/```bash\n```/g,"").replace(/\n{3,}/g,"\n\n"):w(t)}(a.name,n,o))}}async function b(e,o){let i=t.join(e,"package.json");if(!r.existsSync(i))throw Error("模板中未找到 package.json");let a=JSON.parse(r.readFileSync(i,"utf-8"));a.name=o,r.writeFileSync(i,`${JSON.stringify(a,null,2)}
3
3
  `)}let g=["starter","empty"],h=e("node:child_process"),j=(0,e("node:url").fileURLToPath)(import.meta.url),E=t.dirname(j),$={".gitignore":["dist","node_modules",".DS_Store"]};async function v(e){for(let[o,i]of Object.entries($))await r.promises.writeFile(t.join(e,o),`${i.join("\n")}
4
4
  `)}async function S(e){let o=t.join(e,".git");if(!await r.promises.stat(o).then(e=>e.isDirectory()).catch(e=>{if(e?.code==="ENOENT")return!1;throw e}))try{(0,h.execFileSync)("git",["init"],{cwd:e,stdio:"ignore"})}catch(t){if(t?.code==="ENOENT")return;throw Error(`初始化 git 仓库失败:${e}`,{cause:t})}}async function _(e,t){let o;try{o=await r.promises.stat(e)}catch(r){if(r?.code==="ENOENT")throw Error(`未找到${t}目录:${e}`,{cause:r});throw Error(`无法访问${t}目录:${e}`,{cause:r})}if(!o.isDirectory())throw Error(`${t}路径不是目录:${e}`)}async function N({template:e,projectDir:o,public:i=!0,git:a=!0,appId:n,name:p,packageName:l,overwrite:d,login:u=!1}){if(!t.isAbsolute(o))throw Error(`项目目录必须是绝对路径:${o}`);if(!g.includes(e))throw Error(`模板无效:${e}。可选项:${g.join(", ")}`);let f=t.resolve(E,`template-${e}`),m=u?t.resolve(E,"template-login"):null;if(await _(f,"模板"),m&&await _(m,"登录模板"),await r.promises.stat(o).then(e=>{if(!e.isDirectory())throw Error(`项目路径不是目录:${o}`);return!0}).catch(e=>{if(e?.code==="ENOENT")return!1;throw Error(`无法访问项目目录:${o}`,{cause:e})})){if((await r.promises.readdir(o)).length>0&&!d)throw Error(`项目目录不为空:${o}`)}else await r.promises.mkdir(o,{recursive:!0});await c(f,o),m&&await c(m,o),i&&await y(o,"latest"),await v(o),a&&await S(o);let w=l??t.basename(o).trim().toLowerCase().replace(/\s+/g,"-").replace(/^[._]/,"").replace(/[^a-z0-9-~._]+/g,"-");await b(o,w),await s(o,n??"db_app_xxxxxxx",p??"")}export{N as create};
@@ -0,0 +1 @@
1
+ import"node:module";import"../3551.js";let e=e=>e,r=e=>e;export{CloudBuildLauncher,DEBUG_DRIVER_NAMES,DebugDriverType,isDebugDriverName,selectDevServerHost}from"../8079.js";export{r as defineAppConfig,e as defineConfig};
@@ -1,2 +1,2 @@
1
- let e,t;import"node:module";import{__webpack_require__ as o}from"../rslib-runtime.js";import"../9635.js";import{error_getErrorMessage as r}from"../sdk.js";let i="pnpm --filter @byted-doubao-apps/login exec playwright-core install chromium";async function n(){try{let{chromium:e}=await import("node:module").then(function(e){return o.t(e.createRequire(import.meta.url)("playwright-core"),18)});return e}catch(e){throw Error(`Unable to load Playwright Core for CLI login. It is installed through @byted-doubao-apps/kit -> @byted-doubao-apps/login, so users should not install playwright-core separately. Reinstall or upgrade @byted-doubao-apps/kit; when developing inside this repo, run pnpm install once to refresh workspace links. Cause: ${r(e)}`)}}function a(e,t){return"Playwright Chromium"===e.label&&/Executable doesn't exist|Looks like Playwright was just installed|playwright install|ms-playwright|chromium_headless_shell/i.test(r(t))?`${e.label}: optional fallback browser is not installed. Prefer installing Google Chrome or Microsoft Edge. If you still need this fallback, run \`${i}\`.`:`${e.label}: ${r(t).split("\n").find(Boolean)??"Unknown error"}`}let s="doubao-apps-sdk",l=Function("specifier","return import(specifier)");function u(e){"applet0930"===process.env.DEBUG&&console.warn(e)}async function c(){try{let e=await l("@napi-rs/keyring"),t=e.default??e;if("object"==typeof t&&null!==t&&"function"==typeof t.Entry)return function({Entry:e}){return{getPassword:async(t,o)=>await Promise.resolve(new e(t,o).getPassword()),async setPassword(t,o,r){await Promise.resolve(new e(t,o).setPassword(r))},deletePassword:async(t,o)=>await Promise.resolve(new e(t,o).deletePassword())}}(t);u("[login] System credential store is unavailable: invalid @napi-rs/keyring module.")}catch(e){u(`[login] System credential store is unavailable. Cause: ${r(e)}`)}}function d({route:e,targetUrl:t}){return`login-cookie:${e}:${t}`}function p(){return void 0!==t?Promise.resolve(t??void 0):(e??(e=c()),e)}let f={"sso-internal":{route:"sso",targetUrl:"https://doubao-developer.bytedance.net",loginUrl:"https://doubao-developer.bytedance.net",cookieNames:["sso_sessionid","sso_sessionid_ss","sessionid","sessionid_ss","sid_guard","sid_tt"],cookieNamePrefixes:["bd_sso_"]},"sms-internal":{route:"sms",targetUrl:"https://doubao-developer-open.bytedance.net",loginUrl:"https://doubao-developer-open.bytedance.net",cookieNames:["sessionid","sessionid_ss","sid_guard","sid_tt","sid_ucp_v1","ssid_ucp_v1"]},"sms-external":{route:"sms",targetUrl:"https://hello.doubao-dev.com",loginUrl:"https://hello.doubao-dev.com",cookieNames:["sessionid_doubao_open","sessionid_ss_doubao_open","sid_guard_doubao_open","sid_tt_doubao_open","sid_ucp_v1_doubao_open","ssid_ucp_v1_doubao_open"]}},m={sso:f["sso-internal"],sms:f["sms-external"]};function h(e){if(!e||"sso"===e)return"sso";if("sms"===e)return"sms";throw Error(`Unsupported login route "${e}". Expected "sso" or "sms".`)}let w=["sso_sessionid","sso_uid","passport_csrf_token","XSRF-TOKEN"];function g(e){let t=w.indexOf(e.name);return -1===t?w.length:t}function y(e,t){let{cookieNames:o,cookieNamePrefixes:r=[]}=m[h(e)];return o.includes(t)||r.some(e=>t.startsWith(e))}function b(e,t){return!!t&&t.split(";").some(t=>{let o=t.trim(),r=o.indexOf("=");if(r<=0||r===o.length-1)return!1;let i=o.slice(0,r);return!!o.slice(r+1).trim()&&y(e,i)})}async function _(e,t,o){var r;let i,n=await e.cookies([o,`${o}/`]);return{cookies:n,cookieHeader:(r=n,i=new Map,r.forEach(e=>{e.name&&e.value&&i.set(`${e.name};${e.domain??""};${e.path??""}`,e)}),[...Array.from(i.values())].sort((e,t)=>{let o=g(e)-g(t);if(0!==o)return o;let r=e.path?.length??0,i=t.path?.length??0;return r!==i?i-r:e.name.localeCompare(t.name)}).map(e=>`${e.name}=${e.value}`).join("; ")),expiresAt:function(e,t){let o=t.filter(t=>t.name&&t.value&&y(e,t.name)).map(e=>e.expires).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e);if(o.length)return Math.min(...o)}(t,n)}}async function k({route:e,targetUrl:t}){let o=await p();if(!o)return"";try{let r=await o.getPassword(s,d({route:e,targetUrl:t}));if(!r)return"";let i=function(e){try{let t=JSON.parse(e);if(t?.version!==1||"string"!=typeof t.cookieHeader||"number"!=typeof t.expiresAt||!Number.isFinite(t.expiresAt))return;return{version:1,cookieHeader:t.cookieHeader,expiresAt:t.expiresAt}}catch{return}}(r);if(!i||i.expiresAt<=Date.now()||!b(e,i.cookieHeader))return"";return i.cookieHeader}catch(e){return u(`[login] Failed to read login cookie from system credential store. Cause: ${r(e)}`),""}}async function v({route:e,targetUrl:t,cookieHeader:o,expiresAt:i}){if(!b(e,o)||!i||!Number.isFinite(i)||i<=Date.now())return;let n=await p();if(n)try{await n.setPassword(s,d({route:e,targetUrl:t}),JSON.stringify({version:1,cookieHeader:o,expiresAt:i}))}catch(e){u(`[login] Failed to write login cookie to system credential store. Cause: ${r(e)}`)}}async function C(){let e=await p();if(!e?.deletePassword)return 0;let t=0;for(let o of Array.from(new Set(Object.values(f).map(({route:e,targetUrl:t})=>d({route:e,targetUrl:t})))))try{let r=await e.deletePassword(s,o);!1!==r&&(t+=1)}catch(e){if(function(e){let t=r(e).toLowerCase();return t.includes("noentry")||t.includes("no entry")||t.includes("no matching")||t.includes("no credential")||t.includes("not found")||t.includes("not exist")||t.includes("could not be found")}(e))continue;throw u(`[login] Failed to delete login cookie from system credential store. Cause: ${r(e)}`),e}return t}let P=o("node:fs/promises"),x=o("node:os"),$=o("node:path");function E(e){return $.join(x.homedir(),".doubao-apps","login-profiles",e)}async function H(e=["sso","sms"].map(e=>E(e))){let t=[];for(let o of e)await P.rm(o,{recursive:!0,force:!0}),t.push(o);return t}async function A({chromium:e,candidate:t,route:o,profileDir:r,targetUrl:i}){let n=await e.launchPersistentContext(r,{...t.launchOptions,headless:!0});try{let e=await _(n,o,i);return b(o,e.cookieHeader)?e:void 0}finally{await n.close()}}async function U(e,t){let o=e.pages()[0]??await e.newPage();await o.goto(t,{waitUntil:"domcontentloaded"})}async function N({context:e,route:t,targetUrl:o,timeoutMs:r,pollIntervalMs:i}){let n=Date.now()+r;for(;Date.now()<=n;){let r=await _(e,t,o);if(b(t,r.cookieHeader))return r;await function(e){return new Promise(t=>setTimeout(t,e))}(i)}throw Error(`Timed out waiting for ${t} login cookie after ${r}ms`)}async function O(e,t={}){let o=h(t.route),{targetUrl:r,loginUrl:n}=m[h(o)],s=t.profileDir??E(o),l=t.timeoutMs??3e5,u=t.pollIntervalMs??1e3,c=function(e){if(e.browserPath)return[{label:`custom browser at ${e.browserPath}`,launchOptions:{executablePath:e.browserPath}}];let t={label:"Google Chrome",launchOptions:{channel:"chrome"}},o={label:"Microsoft Edge",launchOptions:{channel:"msedge"}},r={label:"Playwright Chromium",launchOptions:{}};switch(function(e){if(!e||"auto"===e)return"auto";if("chrome"===e||"msedge"===e||"chromium"===e)return e;throw Error(`Unsupported login browser "${e}". Expected "auto", "chrome", "msedge", or "chromium".`)}(e.browser)){case"chrome":return[t];case"msedge":return[o];case"chromium":return[r];case"auto":return[t,o,r]}}(t),d=[];if(!t.force){if(!t.skipCachedCookie){let e=await k({route:o,targetUrl:r});if(e)return e}for(let t of c)try{let i=await A({chromium:e,candidate:t,route:o,profileDir:s,targetUrl:r});if(i)return await v({route:o,targetUrl:r,cookieHeader:i.cookieHeader,expiresAt:i.expiresAt}),i.cookieHeader;break}catch(e){d.push(a(t,e))}}for(let i of c){let c;try{c=await e.launchPersistentContext(s,{...i.launchOptions,headless:!1,viewport:{width:1120,height:820}})}catch(e){d.push(a(i,e));continue}try{t.force&&await c.clearCookies(),await U(c,n);let e=await N({context:c,route:o,targetUrl:r,timeoutMs:l,pollIntervalMs:u});return await v({route:o,targetUrl:r,cookieHeader:e.cookieHeader,expiresAt:e.expiresAt}),e.cookieHeader}finally{await c.close()}}throw Error(["Unable to launch a browser for CLI login.",d.some(e=>e.includes("optional fallback browser is not installed"))?"Optional Playwright Chromium fallback browser is not installed.":"","Recommended: install Google Chrome or Microsoft Edge and retry.","Alternative: pass --login-browser-path to a Chromium-based browser executable.","Fallback: if you cannot install Chrome or Edge, install Playwright Chromium with:",` ${i}`,d.length?`Launch failures:
1
+ let e,t;import"node:module";import{__webpack_require__ as o}from"../rslib-runtime.js";import"../7945.js";import{getErrorMessage as r}from"../8079.js";let i="pnpm --filter @byted-doubao-apps/login exec playwright-core install chromium";async function n(){try{let{chromium:e}=await import("node:module").then(function(e){return o.t(e.createRequire(import.meta.url)("playwright-core"),18)});return e}catch(e){throw Error(`Unable to load Playwright Core for CLI login. It is installed through @byted-doubao-apps/kit -> @byted-doubao-apps/login, so users should not install playwright-core separately. Reinstall or upgrade @byted-doubao-apps/kit; when developing inside this repo, run pnpm install once to refresh workspace links. Cause: ${r(e)}`)}}function a(e,t){return"Playwright Chromium"===e.label&&/Executable doesn't exist|Looks like Playwright was just installed|playwright install|ms-playwright|chromium_headless_shell/i.test(r(t))?`${e.label}: optional fallback browser is not installed. Prefer installing Google Chrome or Microsoft Edge. If you still need this fallback, run \`${i}\`.`:`${e.label}: ${r(t).split("\n").find(Boolean)??"Unknown error"}`}let s="doubao-apps-sdk",l=Function("specifier","return import(specifier)");function u(e){"applet0930"===process.env.DEBUG&&console.warn(e)}async function c(){try{let e=await l("@napi-rs/keyring"),t=e.default??e;if("object"==typeof t&&null!==t&&"function"==typeof t.Entry)return function({Entry:e}){return{getPassword:async(t,o)=>await Promise.resolve(new e(t,o).getPassword()),async setPassword(t,o,r){await Promise.resolve(new e(t,o).setPassword(r))},deletePassword:async(t,o)=>await Promise.resolve(new e(t,o).deletePassword())}}(t);u("[login] System credential store is unavailable: invalid @napi-rs/keyring module.")}catch(e){u(`[login] System credential store is unavailable. Cause: ${r(e)}`)}}function d({route:e,targetUrl:t}){return`login-cookie:${e}:${t}`}function p(){return void 0!==t?Promise.resolve(t??void 0):(e??(e=c()),e)}let f={"sso-internal":{route:"sso",targetUrl:"https://doubao-developer.bytedance.net",loginUrl:"https://doubao-developer.bytedance.net",cookieNames:["sso_sessionid","sso_sessionid_ss","sessionid","sessionid_ss","sid_guard","sid_tt"],cookieNamePrefixes:["bd_sso_"]},"sms-internal":{route:"sms",targetUrl:"https://doubao-developer-open.bytedance.net",loginUrl:"https://doubao-developer-open.bytedance.net",cookieNames:["sessionid","sessionid_ss","sid_guard","sid_tt","sid_ucp_v1","ssid_ucp_v1"]},"sms-external":{route:"sms",targetUrl:"https://hello.doubao-dev.com",loginUrl:"https://hello.doubao-dev.com",cookieNames:["sessionid_doubao_open","sessionid_ss_doubao_open","sid_guard_doubao_open","sid_tt_doubao_open","sid_ucp_v1_doubao_open","ssid_ucp_v1_doubao_open"]}},m={sso:f["sso-internal"],sms:f["sms-external"]};function h(e){if(!e||"sso"===e)return"sso";if("sms"===e)return"sms";throw Error(`Unsupported login route "${e}". Expected "sso" or "sms".`)}let w=["sso_sessionid","sso_uid","passport_csrf_token","XSRF-TOKEN"];function g(e){let t=w.indexOf(e.name);return -1===t?w.length:t}function y(e,t){let{cookieNames:o,cookieNamePrefixes:r=[]}=m[h(e)];return o.includes(t)||r.some(e=>t.startsWith(e))}function b(e,t){return!!t&&t.split(";").some(t=>{let o=t.trim(),r=o.indexOf("=");if(r<=0||r===o.length-1)return!1;let i=o.slice(0,r);return!!o.slice(r+1).trim()&&y(e,i)})}async function _(e,t,o){var r;let i,n=await e.cookies([o,`${o}/`]);return{cookies:n,cookieHeader:(r=n,i=new Map,r.forEach(e=>{e.name&&e.value&&i.set(`${e.name};${e.domain??""};${e.path??""}`,e)}),[...Array.from(i.values())].sort((e,t)=>{let o=g(e)-g(t);if(0!==o)return o;let r=e.path?.length??0,i=t.path?.length??0;return r!==i?i-r:e.name.localeCompare(t.name)}).map(e=>`${e.name}=${e.value}`).join("; ")),expiresAt:function(e,t){let o=t.filter(t=>t.name&&t.value&&y(e,t.name)).map(e=>e.expires).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e);if(o.length)return Math.min(...o)}(t,n)}}async function k({route:e,targetUrl:t}){let o=await p();if(!o)return"";try{let r=await o.getPassword(s,d({route:e,targetUrl:t}));if(!r)return"";let i=function(e){try{let t=JSON.parse(e);if(t?.version!==1||"string"!=typeof t.cookieHeader||"number"!=typeof t.expiresAt||!Number.isFinite(t.expiresAt))return;return{version:1,cookieHeader:t.cookieHeader,expiresAt:t.expiresAt}}catch{return}}(r);if(!i||i.expiresAt<=Date.now()||!b(e,i.cookieHeader))return"";return i.cookieHeader}catch(e){return u(`[login] Failed to read login cookie from system credential store. Cause: ${r(e)}`),""}}async function v({route:e,targetUrl:t,cookieHeader:o,expiresAt:i}){if(!b(e,o)||!i||!Number.isFinite(i)||i<=Date.now())return;let n=await p();if(n)try{await n.setPassword(s,d({route:e,targetUrl:t}),JSON.stringify({version:1,cookieHeader:o,expiresAt:i}))}catch(e){u(`[login] Failed to write login cookie to system credential store. Cause: ${r(e)}`)}}async function C(){let e=await p();if(!e?.deletePassword)return 0;let t=0;for(let o of Array.from(new Set(Object.values(f).map(({route:e,targetUrl:t})=>d({route:e,targetUrl:t})))))try{let r=await e.deletePassword(s,o);!1!==r&&(t+=1)}catch(e){if(function(e){let t=r(e).toLowerCase();return t.includes("noentry")||t.includes("no entry")||t.includes("no matching")||t.includes("no credential")||t.includes("not found")||t.includes("not exist")||t.includes("could not be found")}(e))continue;throw u(`[login] Failed to delete login cookie from system credential store. Cause: ${r(e)}`),e}return t}let P=o("node:fs/promises"),x=o("node:os"),$=o("node:path");function E(e){return $.join(x.homedir(),".doubao-apps","login-profiles",e)}async function H(e=["sso","sms"].map(e=>E(e))){let t=[];for(let o of e)await P.rm(o,{recursive:!0,force:!0}),t.push(o);return t}async function A({chromium:e,candidate:t,route:o,profileDir:r,targetUrl:i}){let n=await e.launchPersistentContext(r,{...t.launchOptions,headless:!0});try{let e=await _(n,o,i);return b(o,e.cookieHeader)?e:void 0}finally{await n.close()}}async function U(e,t){let o=e.pages()[0]??await e.newPage();await o.goto(t,{waitUntil:"domcontentloaded"})}async function N({context:e,route:t,targetUrl:o,timeoutMs:r,pollIntervalMs:i}){let n=Date.now()+r;for(;Date.now()<=n;){let r=await _(e,t,o);if(b(t,r.cookieHeader))return r;await function(e){return new Promise(t=>setTimeout(t,e))}(i)}throw Error(`Timed out waiting for ${t} login cookie after ${r}ms`)}async function O(e,t={}){let o=h(t.route),{targetUrl:r,loginUrl:n}=m[h(o)],s=t.profileDir??E(o),l=t.timeoutMs??3e5,u=t.pollIntervalMs??1e3,c=function(e){if(e.browserPath)return[{label:`custom browser at ${e.browserPath}`,launchOptions:{executablePath:e.browserPath}}];let t={label:"Google Chrome",launchOptions:{channel:"chrome"}},o={label:"Microsoft Edge",launchOptions:{channel:"msedge"}},r={label:"Playwright Chromium",launchOptions:{}};switch(function(e){if(!e||"auto"===e)return"auto";if("chrome"===e||"msedge"===e||"chromium"===e)return e;throw Error(`Unsupported login browser "${e}". Expected "auto", "chrome", "msedge", or "chromium".`)}(e.browser)){case"chrome":return[t];case"msedge":return[o];case"chromium":return[r];case"auto":return[t,o,r]}}(t),d=[];if(!t.force){if(!t.skipCachedCookie){let e=await k({route:o,targetUrl:r});if(e)return e}for(let t of c)try{let i=await A({chromium:e,candidate:t,route:o,profileDir:s,targetUrl:r});if(i)return await v({route:o,targetUrl:r,cookieHeader:i.cookieHeader,expiresAt:i.expiresAt}),i.cookieHeader;break}catch(e){d.push(a(t,e))}}for(let i of c){let c;try{c=await e.launchPersistentContext(s,{...i.launchOptions,headless:!1,viewport:{width:1120,height:820}})}catch(e){d.push(a(i,e));continue}try{t.force&&await c.clearCookies(),await U(c,n);let e=await N({context:c,route:o,targetUrl:r,timeoutMs:l,pollIntervalMs:u});return await v({route:o,targetUrl:r,cookieHeader:e.cookieHeader,expiresAt:e.expiresAt}),e.cookieHeader}finally{await c.close()}}throw Error(["Unable to launch a browser for CLI login.",d.some(e=>e.includes("optional fallback browser is not installed"))?"Optional Playwright Chromium fallback browser is not installed.":"","Recommended: install Google Chrome or Microsoft Edge and retry.","Alternative: pass --login-browser-path to a Chromium-based browser executable.","Fallback: if you cannot install Chrome or Edge, install Playwright Chromium with:",` ${i}`,d.length?`Launch failures:
2
2
  ${d.map(e=>`- ${e}`).join("\n")}`:""].filter(Boolean).join("\n"))}async function S(e={}){let t=h(e.route),{targetUrl:o}=m[h(t)];return await k({route:t,targetUrl:o})||void 0}async function M(e={}){let t=h(e.route),{targetUrl:o}=m[h(t)],r=e.profileDir??E(t);if(!e.force){let e=await k({route:t,targetUrl:o});if(e)return e}return O(await n(),{...e,route:t,profileDir:r,skipCachedCookie:!0})}async function F(){let e=await H();return{credentialEntriesDeleted:await C(),profileDirsDeleted:e}}export{F as clearLoginState,M as ensureLoginCookie,S as getCachedLoginCookie};
@@ -1,2 +1,2 @@
1
- let e,t;import"node:module";import{__webpack_require__ as o}from"../rslib-runtime.js";import"../9635.js";import{error_getErrorMessage as r}from"../sdk~1.js";let i="pnpm --filter @byted-doubao-apps/login exec playwright-core install chromium";async function n(){try{let{chromium:e}=await import("node:module").then(function(e){return o.t(e.createRequire(import.meta.url)("playwright-core"),18)});return e}catch(e){throw Error(`Unable to load Playwright Core for CLI login. It is installed through @byted-doubao-apps/kit -> @byted-doubao-apps/login, so users should not install playwright-core separately. Reinstall or upgrade @byted-doubao-apps/kit; when developing inside this repo, run pnpm install once to refresh workspace links. Cause: ${r(e)}`)}}function a(e,t){return"Playwright Chromium"===e.label&&/Executable doesn't exist|Looks like Playwright was just installed|playwright install|ms-playwright|chromium_headless_shell/i.test(r(t))?`${e.label}: optional fallback browser is not installed. Prefer installing Google Chrome or Microsoft Edge. If you still need this fallback, run \`${i}\`.`:`${e.label}: ${r(t).split("\n").find(Boolean)??"Unknown error"}`}let s="doubao-apps-sdk",l=Function("specifier","return import(specifier)");function u(e){"applet0930"===process.env.DEBUG&&console.warn(e)}async function c(){try{let e=await l("@napi-rs/keyring"),t=e.default??e;if("object"==typeof t&&null!==t&&"function"==typeof t.Entry)return function({Entry:e}){return{getPassword:async(t,o)=>await Promise.resolve(new e(t,o).getPassword()),async setPassword(t,o,r){await Promise.resolve(new e(t,o).setPassword(r))},deletePassword:async(t,o)=>await Promise.resolve(new e(t,o).deletePassword())}}(t);u("[login] System credential store is unavailable: invalid @napi-rs/keyring module.")}catch(e){u(`[login] System credential store is unavailable. Cause: ${r(e)}`)}}function d({route:e,targetUrl:t}){return`login-cookie:${e}:${t}`}function p(){return void 0!==t?Promise.resolve(t??void 0):(e??(e=c()),e)}let f={"sso-internal":{route:"sso",targetUrl:"https://doubao-developer.bytedance.net",loginUrl:"https://doubao-developer.bytedance.net",cookieNames:["sso_sessionid","sso_sessionid_ss","sessionid","sessionid_ss","sid_guard","sid_tt"],cookieNamePrefixes:["bd_sso_"]},"sms-internal":{route:"sms",targetUrl:"https://doubao-developer-open.bytedance.net",loginUrl:"https://doubao-developer-open.bytedance.net",cookieNames:["sessionid","sessionid_ss","sid_guard","sid_tt","sid_ucp_v1","ssid_ucp_v1"]},"sms-external":{route:"sms",targetUrl:"https://hello.doubao-dev.com",loginUrl:"https://hello.doubao-dev.com",cookieNames:["sessionid_doubao_open","sessionid_ss_doubao_open","sid_guard_doubao_open","sid_tt_doubao_open","sid_ucp_v1_doubao_open","ssid_ucp_v1_doubao_open"]}},m={sso:f["sso-internal"],sms:f["sms-external"]};function h(e){if(!e||"sso"===e)return"sso";if("sms"===e)return"sms";throw Error(`Unsupported login route "${e}". Expected "sso" or "sms".`)}let w=["sso_sessionid","sso_uid","passport_csrf_token","XSRF-TOKEN"];function g(e){let t=w.indexOf(e.name);return -1===t?w.length:t}function y(e,t){let{cookieNames:o,cookieNamePrefixes:r=[]}=m[h(e)];return o.includes(t)||r.some(e=>t.startsWith(e))}function b(e,t){return!!t&&t.split(";").some(t=>{let o=t.trim(),r=o.indexOf("=");if(r<=0||r===o.length-1)return!1;let i=o.slice(0,r);return!!o.slice(r+1).trim()&&y(e,i)})}async function _(e,t,o){var r;let i,n=await e.cookies([o,`${o}/`]);return{cookies:n,cookieHeader:(r=n,i=new Map,r.forEach(e=>{e.name&&e.value&&i.set(`${e.name};${e.domain??""};${e.path??""}`,e)}),[...Array.from(i.values())].sort((e,t)=>{let o=g(e)-g(t);if(0!==o)return o;let r=e.path?.length??0,i=t.path?.length??0;return r!==i?i-r:e.name.localeCompare(t.name)}).map(e=>`${e.name}=${e.value}`).join("; ")),expiresAt:function(e,t){let o=t.filter(t=>t.name&&t.value&&y(e,t.name)).map(e=>e.expires).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e);if(o.length)return Math.min(...o)}(t,n)}}async function k({route:e,targetUrl:t}){let o=await p();if(!o)return"";try{let r=await o.getPassword(s,d({route:e,targetUrl:t}));if(!r)return"";let i=function(e){try{let t=JSON.parse(e);if(t?.version!==1||"string"!=typeof t.cookieHeader||"number"!=typeof t.expiresAt||!Number.isFinite(t.expiresAt))return;return{version:1,cookieHeader:t.cookieHeader,expiresAt:t.expiresAt}}catch{return}}(r);if(!i||i.expiresAt<=Date.now()||!b(e,i.cookieHeader))return"";return i.cookieHeader}catch(e){return u(`[login] Failed to read login cookie from system credential store. Cause: ${r(e)}`),""}}async function v({route:e,targetUrl:t,cookieHeader:o,expiresAt:i}){if(!b(e,o)||!i||!Number.isFinite(i)||i<=Date.now())return;let n=await p();if(n)try{await n.setPassword(s,d({route:e,targetUrl:t}),JSON.stringify({version:1,cookieHeader:o,expiresAt:i}))}catch(e){u(`[login] Failed to write login cookie to system credential store. Cause: ${r(e)}`)}}async function C(){let e=await p();if(!e?.deletePassword)return 0;let t=0;for(let o of Array.from(new Set(Object.values(f).map(({route:e,targetUrl:t})=>d({route:e,targetUrl:t})))))try{let r=await e.deletePassword(s,o);!1!==r&&(t+=1)}catch(e){if(function(e){let t=r(e).toLowerCase();return t.includes("noentry")||t.includes("no entry")||t.includes("no matching")||t.includes("no credential")||t.includes("not found")||t.includes("not exist")||t.includes("could not be found")}(e))continue;throw u(`[login] Failed to delete login cookie from system credential store. Cause: ${r(e)}`),e}return t}let P=o("node:fs/promises"),x=o("node:os"),$=o("node:path");function E(e){return $.join(x.homedir(),".doubao-apps","login-profiles",e)}async function H(e=["sso","sms"].map(e=>E(e))){let t=[];for(let o of e)await P.rm(o,{recursive:!0,force:!0}),t.push(o);return t}async function A({chromium:e,candidate:t,route:o,profileDir:r,targetUrl:i}){let n=await e.launchPersistentContext(r,{...t.launchOptions,headless:!0});try{let e=await _(n,o,i);return b(o,e.cookieHeader)?e:void 0}finally{await n.close()}}async function U(e,t){let o=e.pages()[0]??await e.newPage();await o.goto(t,{waitUntil:"domcontentloaded"})}async function N({context:e,route:t,targetUrl:o,timeoutMs:r,pollIntervalMs:i}){let n=Date.now()+r;for(;Date.now()<=n;){let r=await _(e,t,o);if(b(t,r.cookieHeader))return r;await function(e){return new Promise(t=>setTimeout(t,e))}(i)}throw Error(`Timed out waiting for ${t} login cookie after ${r}ms`)}async function O(e,t={}){let o=h(t.route),{targetUrl:r,loginUrl:n}=m[h(o)],s=t.profileDir??E(o),l=t.timeoutMs??3e5,u=t.pollIntervalMs??1e3,c=function(e){if(e.browserPath)return[{label:`custom browser at ${e.browserPath}`,launchOptions:{executablePath:e.browserPath}}];let t={label:"Google Chrome",launchOptions:{channel:"chrome"}},o={label:"Microsoft Edge",launchOptions:{channel:"msedge"}},r={label:"Playwright Chromium",launchOptions:{}};switch(function(e){if(!e||"auto"===e)return"auto";if("chrome"===e||"msedge"===e||"chromium"===e)return e;throw Error(`Unsupported login browser "${e}". Expected "auto", "chrome", "msedge", or "chromium".`)}(e.browser)){case"chrome":return[t];case"msedge":return[o];case"chromium":return[r];case"auto":return[t,o,r]}}(t),d=[];if(!t.force){if(!t.skipCachedCookie){let e=await k({route:o,targetUrl:r});if(e)return e}for(let t of c)try{let i=await A({chromium:e,candidate:t,route:o,profileDir:s,targetUrl:r});if(i)return await v({route:o,targetUrl:r,cookieHeader:i.cookieHeader,expiresAt:i.expiresAt}),i.cookieHeader;break}catch(e){d.push(a(t,e))}}for(let i of c){let c;try{c=await e.launchPersistentContext(s,{...i.launchOptions,headless:!1,viewport:{width:1120,height:820}})}catch(e){d.push(a(i,e));continue}try{t.force&&await c.clearCookies(),await U(c,n);let e=await N({context:c,route:o,targetUrl:r,timeoutMs:l,pollIntervalMs:u});return await v({route:o,targetUrl:r,cookieHeader:e.cookieHeader,expiresAt:e.expiresAt}),e.cookieHeader}finally{await c.close()}}throw Error(["Unable to launch a browser for CLI login.",d.some(e=>e.includes("optional fallback browser is not installed"))?"Optional Playwright Chromium fallback browser is not installed.":"","Recommended: install Google Chrome or Microsoft Edge and retry.","Alternative: pass --login-browser-path to a Chromium-based browser executable.","Fallback: if you cannot install Chrome or Edge, install Playwright Chromium with:",` ${i}`,d.length?`Launch failures:
1
+ let e,t;import"node:module";import{__webpack_require__ as o}from"../rslib-runtime.js";import"../7945.js";import{error_getErrorMessage as r}from"../sdk~1.js";let i="pnpm --filter @byted-doubao-apps/login exec playwright-core install chromium";async function n(){try{let{chromium:e}=await import("node:module").then(function(e){return o.t(e.createRequire(import.meta.url)("playwright-core"),18)});return e}catch(e){throw Error(`Unable to load Playwright Core for CLI login. It is installed through @byted-doubao-apps/kit -> @byted-doubao-apps/login, so users should not install playwright-core separately. Reinstall or upgrade @byted-doubao-apps/kit; when developing inside this repo, run pnpm install once to refresh workspace links. Cause: ${r(e)}`)}}function a(e,t){return"Playwright Chromium"===e.label&&/Executable doesn't exist|Looks like Playwright was just installed|playwright install|ms-playwright|chromium_headless_shell/i.test(r(t))?`${e.label}: optional fallback browser is not installed. Prefer installing Google Chrome or Microsoft Edge. If you still need this fallback, run \`${i}\`.`:`${e.label}: ${r(t).split("\n").find(Boolean)??"Unknown error"}`}let s="doubao-apps-sdk",l=Function("specifier","return import(specifier)");function u(e){"applet0930"===process.env.DEBUG&&console.warn(e)}async function c(){try{let e=await l("@napi-rs/keyring"),t=e.default??e;if("object"==typeof t&&null!==t&&"function"==typeof t.Entry)return function({Entry:e}){return{getPassword:async(t,o)=>await Promise.resolve(new e(t,o).getPassword()),async setPassword(t,o,r){await Promise.resolve(new e(t,o).setPassword(r))},deletePassword:async(t,o)=>await Promise.resolve(new e(t,o).deletePassword())}}(t);u("[login] System credential store is unavailable: invalid @napi-rs/keyring module.")}catch(e){u(`[login] System credential store is unavailable. Cause: ${r(e)}`)}}function d({route:e,targetUrl:t}){return`login-cookie:${e}:${t}`}function p(){return void 0!==t?Promise.resolve(t??void 0):(e??(e=c()),e)}let f={"sso-internal":{route:"sso",targetUrl:"https://doubao-developer.bytedance.net",loginUrl:"https://doubao-developer.bytedance.net",cookieNames:["sso_sessionid","sso_sessionid_ss","sessionid","sessionid_ss","sid_guard","sid_tt"],cookieNamePrefixes:["bd_sso_"]},"sms-internal":{route:"sms",targetUrl:"https://doubao-developer-open.bytedance.net",loginUrl:"https://doubao-developer-open.bytedance.net",cookieNames:["sessionid","sessionid_ss","sid_guard","sid_tt","sid_ucp_v1","ssid_ucp_v1"]},"sms-external":{route:"sms",targetUrl:"https://hello.doubao-dev.com",loginUrl:"https://hello.doubao-dev.com",cookieNames:["sessionid_doubao_open","sessionid_ss_doubao_open","sid_guard_doubao_open","sid_tt_doubao_open","sid_ucp_v1_doubao_open","ssid_ucp_v1_doubao_open"]}},m={sso:f["sso-internal"],sms:f["sms-external"]};function h(e){if(!e||"sso"===e)return"sso";if("sms"===e)return"sms";throw Error(`Unsupported login route "${e}". Expected "sso" or "sms".`)}let w=["sso_sessionid","sso_uid","passport_csrf_token","XSRF-TOKEN"];function g(e){let t=w.indexOf(e.name);return -1===t?w.length:t}function y(e,t){let{cookieNames:o,cookieNamePrefixes:r=[]}=m[h(e)];return o.includes(t)||r.some(e=>t.startsWith(e))}function b(e,t){return!!t&&t.split(";").some(t=>{let o=t.trim(),r=o.indexOf("=");if(r<=0||r===o.length-1)return!1;let i=o.slice(0,r);return!!o.slice(r+1).trim()&&y(e,i)})}async function _(e,t,o){var r;let i,n=await e.cookies([o,`${o}/`]);return{cookies:n,cookieHeader:(r=n,i=new Map,r.forEach(e=>{e.name&&e.value&&i.set(`${e.name};${e.domain??""};${e.path??""}`,e)}),[...Array.from(i.values())].sort((e,t)=>{let o=g(e)-g(t);if(0!==o)return o;let r=e.path?.length??0,i=t.path?.length??0;return r!==i?i-r:e.name.localeCompare(t.name)}).map(e=>`${e.name}=${e.value}`).join("; ")),expiresAt:function(e,t){let o=t.filter(t=>t.name&&t.value&&y(e,t.name)).map(e=>e.expires).filter(e=>Number.isFinite(e)&&e>0).map(e=>1e3*e);if(o.length)return Math.min(...o)}(t,n)}}async function k({route:e,targetUrl:t}){let o=await p();if(!o)return"";try{let r=await o.getPassword(s,d({route:e,targetUrl:t}));if(!r)return"";let i=function(e){try{let t=JSON.parse(e);if(t?.version!==1||"string"!=typeof t.cookieHeader||"number"!=typeof t.expiresAt||!Number.isFinite(t.expiresAt))return;return{version:1,cookieHeader:t.cookieHeader,expiresAt:t.expiresAt}}catch{return}}(r);if(!i||i.expiresAt<=Date.now()||!b(e,i.cookieHeader))return"";return i.cookieHeader}catch(e){return u(`[login] Failed to read login cookie from system credential store. Cause: ${r(e)}`),""}}async function v({route:e,targetUrl:t,cookieHeader:o,expiresAt:i}){if(!b(e,o)||!i||!Number.isFinite(i)||i<=Date.now())return;let n=await p();if(n)try{await n.setPassword(s,d({route:e,targetUrl:t}),JSON.stringify({version:1,cookieHeader:o,expiresAt:i}))}catch(e){u(`[login] Failed to write login cookie to system credential store. Cause: ${r(e)}`)}}async function C(){let e=await p();if(!e?.deletePassword)return 0;let t=0;for(let o of Array.from(new Set(Object.values(f).map(({route:e,targetUrl:t})=>d({route:e,targetUrl:t})))))try{let r=await e.deletePassword(s,o);!1!==r&&(t+=1)}catch(e){if(function(e){let t=r(e).toLowerCase();return t.includes("noentry")||t.includes("no entry")||t.includes("no matching")||t.includes("no credential")||t.includes("not found")||t.includes("not exist")||t.includes("could not be found")}(e))continue;throw u(`[login] Failed to delete login cookie from system credential store. Cause: ${r(e)}`),e}return t}let P=o("node:fs/promises"),x=o("node:os"),$=o("node:path");function E(e){return $.join(x.homedir(),".doubao-apps","login-profiles",e)}async function H(e=["sso","sms"].map(e=>E(e))){let t=[];for(let o of e)await P.rm(o,{recursive:!0,force:!0}),t.push(o);return t}async function A({chromium:e,candidate:t,route:o,profileDir:r,targetUrl:i}){let n=await e.launchPersistentContext(r,{...t.launchOptions,headless:!0});try{let e=await _(n,o,i);return b(o,e.cookieHeader)?e:void 0}finally{await n.close()}}async function U(e,t){let o=e.pages()[0]??await e.newPage();await o.goto(t,{waitUntil:"domcontentloaded"})}async function N({context:e,route:t,targetUrl:o,timeoutMs:r,pollIntervalMs:i}){let n=Date.now()+r;for(;Date.now()<=n;){let r=await _(e,t,o);if(b(t,r.cookieHeader))return r;await function(e){return new Promise(t=>setTimeout(t,e))}(i)}throw Error(`Timed out waiting for ${t} login cookie after ${r}ms`)}async function O(e,t={}){let o=h(t.route),{targetUrl:r,loginUrl:n}=m[h(o)],s=t.profileDir??E(o),l=t.timeoutMs??3e5,u=t.pollIntervalMs??1e3,c=function(e){if(e.browserPath)return[{label:`custom browser at ${e.browserPath}`,launchOptions:{executablePath:e.browserPath}}];let t={label:"Google Chrome",launchOptions:{channel:"chrome"}},o={label:"Microsoft Edge",launchOptions:{channel:"msedge"}},r={label:"Playwright Chromium",launchOptions:{}};switch(function(e){if(!e||"auto"===e)return"auto";if("chrome"===e||"msedge"===e||"chromium"===e)return e;throw Error(`Unsupported login browser "${e}". Expected "auto", "chrome", "msedge", or "chromium".`)}(e.browser)){case"chrome":return[t];case"msedge":return[o];case"chromium":return[r];case"auto":return[t,o,r]}}(t),d=[];if(!t.force){if(!t.skipCachedCookie){let e=await k({route:o,targetUrl:r});if(e)return e}for(let t of c)try{let i=await A({chromium:e,candidate:t,route:o,profileDir:s,targetUrl:r});if(i)return await v({route:o,targetUrl:r,cookieHeader:i.cookieHeader,expiresAt:i.expiresAt}),i.cookieHeader;break}catch(e){d.push(a(t,e))}}for(let i of c){let c;try{c=await e.launchPersistentContext(s,{...i.launchOptions,headless:!1,viewport:{width:1120,height:820}})}catch(e){d.push(a(i,e));continue}try{t.force&&await c.clearCookies(),await U(c,n);let e=await N({context:c,route:o,targetUrl:r,timeoutMs:l,pollIntervalMs:u});return await v({route:o,targetUrl:r,cookieHeader:e.cookieHeader,expiresAt:e.expiresAt}),e.cookieHeader}finally{await c.close()}}throw Error(["Unable to launch a browser for CLI login.",d.some(e=>e.includes("optional fallback browser is not installed"))?"Optional Playwright Chromium fallback browser is not installed.":"","Recommended: install Google Chrome or Microsoft Edge and retry.","Alternative: pass --login-browser-path to a Chromium-based browser executable.","Fallback: if you cannot install Chrome or Edge, install Playwright Chromium with:",` ${i}`,d.length?`Launch failures:
2
2
  ${d.map(e=>`- ${e}`).join("\n")}`:""].filter(Boolean).join("\n"))}async function S(e={}){let t=h(e.route),{targetUrl:o}=m[h(t)];return await k({route:t,targetUrl:o})||void 0}async function M(e={}){let t=h(e.route),{targetUrl:o}=m[h(t)],r=e.profileDir??E(t);if(!e.force){let e=await k({route:t,targetUrl:o});if(e)return e}return O(await n(),{...e,route:t,profileDir:r,skipCachedCookie:!0})}async function F(){let e=await H();return{credentialEntriesDeleted:await C(),profileDirsDeleted:e}}export{F as clearLoginState,M as ensureLoginCookie,S as getCachedLoginCookie};
@@ -6,11 +6,11 @@
6
6
  "build": "doubao build"
7
7
  },
8
8
  "dependencies": {
9
- "@byted-doubao-apps/framework": "0.2.0-rc.0",
10
- "@byted-doubao-apps/template": "0.2.0-rc.0"
9
+ "@byted-doubao-apps/framework": "0.3.0-rc.2",
10
+ "@byted-doubao-apps/template": "0.3.0-rc.2"
11
11
  },
12
12
  "devDependencies": {
13
- "@byted-doubao-apps/kit": "0.2.0-rc.0",
13
+ "@byted-doubao-apps/kit": "0.3.0-rc.2",
14
14
  "typescript": "6.0.3"
15
15
  }
16
16
  }
@@ -9,11 +9,11 @@
9
9
  "test": "rstest"
10
10
  },
11
11
  "dependencies": {
12
- "@byted-doubao-apps/framework": "0.2.0-rc.0",
13
- "@byted-doubao-apps/template": "0.2.0-rc.0"
12
+ "@byted-doubao-apps/framework": "0.3.0-rc.2",
13
+ "@byted-doubao-apps/template": "0.3.0-rc.2"
14
14
  },
15
15
  "devDependencies": {
16
- "@byted-doubao-apps/kit": "0.2.0-rc.0",
16
+ "@byted-doubao-apps/kit": "0.3.0-rc.2",
17
17
  "@rstest/core": "^0.11.0",
18
18
  "typescript": "6.0.3"
19
19
  }