From 7c963c34573697f655666b795a0f739c269767db Mon Sep 17 00:00:00 2001 From: abearxiong Date: Tue, 16 Dec 2025 10:38:12 +0800 Subject: [PATCH] update --- .cnb.yml | 2 +- src/ai/index.ts | 23 +++++++++++++++++++++++ src/user/index.ts | 36 ++++++++++++++++++++++++++++++++++++ test/ai.ts | 12 ++++++++++++ test/common.ts | 1 - test/user.ts | 4 ++++ 6 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/ai/index.ts create mode 100644 test/ai.ts diff --git a/.cnb.yml b/.cnb.yml index 363edc4..6af3201 100644 --- a/.cnb.yml +++ b/.cnb.yml @@ -2,7 +2,7 @@ $: vscode: - docker: - image: docker.cnb.cool/kevisual/node24:latest + image: docker.cnb.cool/kevisual/dev-env:latest services: - vscode - docker diff --git a/src/ai/index.ts b/src/ai/index.ts new file mode 100644 index 0000000..74a70da --- /dev/null +++ b/src/ai/index.ts @@ -0,0 +1,23 @@ +import { CNBCore, CNBCoreOptions, RequestOptions, Result } from "../cnb-core.ts"; +type AiOptions = CNBCoreOptions<{ + group?: string; +}> +class AiBase extends CNBCore { + group: string; + constructor(options: AiOptions) { + super({ token: options.token, cookie: options.cookie }); + this.group = options.group || ''; + } + autoPr(repo: string, data: { body: string, branch?: string, title: string }): Promise> { + const group = this.group || ''; + const url = `/${group}/${repo}/-/build/ai/auto-pr`; + const postData = { + ...data, + branch: data.branch || 'refs/heads/main', + title: data.title || '' + }; + return this.post({ url, data: postData }); + } +} + +export { AiBase }; \ No newline at end of file diff --git a/src/user/index.ts b/src/user/index.ts index 182e8b8..0489225 100644 --- a/src/user/index.ts +++ b/src/user/index.ts @@ -16,4 +16,40 @@ export class User extends CNBCore { useCookie: true, }); } + createAccessToken(data?: { description?: string, scope?: string }): Promise { + const scope = data?.scope || 'mission-manage:rw,mission-delete:rw,group-delete:rw,group-manage:rw,group-resource:rw,account-engage:rw,account-email:r,account-profile:rw,registry-delete:rw,registry-manage:rw,registry-package-delete:rw,registry-package:rw,repo-security:r,repo-delete:rw,repo-manage:rw,repo-basic-info:r,repo-cnb-detail:rw,repo-cnb-history:r,repo-cnb-trigger:rw,repo-commit-status:rw,repo-contents:rw,repo-notes:rw,repo-issue:rw,repo-pr:rw,repo-code:rw' + const url = 'https://cnb.cool/user/personal_access_tokens' + return this.post({ + url, + useCookie: true, + data: { + description: data?.description || 'Created at ' + new Date().toISOString(), + scope: scope, + } + }) + } + getAccessTokens(params?: { page?: number, page_size?: number }): Promise { + const url = 'https://cnb.cool/user/personal_access_tokens' + return this.get({ + url, + useCookie: true, + params: { + ...params, + page: params?.page || 1, + page_size: params?.page_size || 20, + } + }) + } + deleteAccessToken(tokenId: string): Promise { + const url = `https://cnb.cool/user/personal_access_tokens/${tokenId}` + return this.delete({ + url, + useCookie: true, + }) + } +} + +type AccessTokenResponse = { + token: string; + description: string; } \ No newline at end of file diff --git a/test/ai.ts b/test/ai.ts new file mode 100644 index 0000000..136ec2d --- /dev/null +++ b/test/ai.ts @@ -0,0 +1,12 @@ +import { AiBase } from "../src/ai/index.ts"; + +import { token, showMore, cookie } from "./common.ts"; + +const repo = new AiBase({ group: "kevisual/demo", token: token, cookie: cookie }); + +const res = await repo.autoPr("test-cnb", { + body: "请帮我给README文件添加一句问候语", + title: "给README添加问候语", +}); + +console.log("res", showMore(res)); \ No newline at end of file diff --git a/test/common.ts b/test/common.ts index e69a9c0..19bbdb7 100644 --- a/test/common.ts +++ b/test/common.ts @@ -4,7 +4,6 @@ import util from 'node:util'; dotenv.config(); export const token = process.env.CNB_TOKEN || ""; export const cookie = process.env.CNB_COOKIE || ""; -console.log("Using CNB_TOKEN:", token.slice(0, 4) + "****", cookie); export const cnb = new CNB({ token, cookie }); export const showMore = (obj: any) => { return util.inspect(obj, { showHidden: false, depth: null, colors: true }); diff --git a/test/user.ts b/test/user.ts index 695a0e4..db3b863 100644 --- a/test/user.ts +++ b/test/user.ts @@ -7,3 +7,7 @@ const user = new User({ token: token, cookie: cookie }); const currentUser = await user.getCurrentUser(); console.log("currentUser", showMore(currentUser)); + +// const accessToken = await user.createAccessToken({ description: "Test Token from API" }); + +// console.log("accessToken", showMore(accessToken)); \ No newline at end of file