@oj-module/cli 0.2.46 → 0.2.48
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/devkit/SKILL.md +1 -1
- package/devkit/framework-dev.md +2 -2
- package/devkit/manual.md +24 -14
- package/devkit/module-dev-and-cdn-playground.md +2 -2
- package/devkit/wecom-daikaifa.md +282 -27
- package/package.json +2 -2
- package/shell-dist/assets/runtime.js +2 -2
- package/shell-dist/index.html +2 -2
- package/shell-dist/versions.json +3 -3
- package/src/__tests__/templates-tenant-scope.test.ts +7 -2
- package/src/init.ts +1 -1
- package/src/market/__tests__/bootstrap.test.ts +1 -1
- package/src/market/__tests__/setup.test.ts +7 -7
- package/src/market/bootstrap.ts +1 -1
- package/templates/README.md +1 -1
- package/templates/config.yaml +26 -7
- package/templates/init.include.yaml +12 -0
- package/templates/openapi.json +2863 -549
- package/templates/src/_platform/api/_shared/service/domain/contacts.ts +7 -0
- package/templates/src/_platform/api/_shared/service/domain/org-read.ts +451 -0
- package/templates/src/_platform/api/_shared/service/domain/org.ts +566 -0
- package/templates/src/_platform/api/_shared/service/domain/users.ts +140 -2
- package/templates/src/_platform/api/_shared/service/infra/query.ts +2 -1
- package/templates/src/_platform/api/fixtures/l1-test-user.sql +1 -1
- package/templates/src/_platform/api/manifest.yaml +3 -0
- package/templates/src/_platform/api/migrations/0016__org.mysql.sql +41 -0
- package/templates/src/_platform/api/migrations/0016__org.pg.sql +40 -0
- package/templates/src/_platform/api/migrations/0016__org.sql +62 -0
- package/templates/src/_platform/api/org/departments/api.ts +51 -0
- package/templates/src/_platform/api/org/is-member/api.ts +33 -0
- package/templates/src/_platform/api/org/members/api.ts +55 -0
- package/templates/src/_platform/api/org/picker/api.ts +59 -0
- package/templates/src/_platform/api/org/resolve/api.ts +38 -0
- package/templates/src/_platform/api/org/tree/api.ts +37 -0
- package/templates/src/_platform/api/org/user/api.ts +46 -0
- package/templates/src/_platform/api/schema.yaml +48 -0
- package/templates/src/_platform/api/seed.mysql.sql +10 -5
- package/templates/src/_platform/api/seed.pg.sql +10 -5
- package/templates/src/_platform/api/seed.sql +13 -5
- package/templates/src/_platform/web/__client/api.schemas.ts +126 -0
- package/templates/src/_platform/web/__client/api.ts +170 -1
- package/templates/src/auth/api/_shared/ldap-login.ts +2 -0
- package/templates/src/auth/api/_shared/session.ts +5 -1
- package/templates/src/auth/api/_shared/wecom/admin.ts +17 -10
- package/templates/src/auth/api/_shared/wecom/client.ts +311 -40
- package/templates/src/auth/api/_shared/wecom/config.ts +40 -17
- package/templates/src/auth/api/_shared/wecom/contacts.ts +263 -0
- package/templates/src/auth/api/_shared/wecom/crypt.ts +17 -7
- package/templates/src/auth/api/_shared/wecom/events.ts +111 -26
- package/templates/src/auth/api/_shared/wecom/login.ts +152 -1
- package/templates/src/auth/api/_shared/wecom/payload.ts +116 -0
- package/templates/src/auth/api/_shared/wecom/store.ts +65 -0
- package/templates/src/auth/api/_shared/wecom/sync.ts +487 -0
- package/templates/src/auth/api/manifest.yaml +3 -0
- package/templates/src/auth/api/migrations/0002__org_sync.mysql.sql +28 -0
- package/templates/src/auth/api/migrations/0002__org_sync.pg.sql +27 -0
- package/templates/src/auth/api/migrations/0002__org_sync.sql +41 -0
- package/templates/src/auth/api/schema.yaml +31 -0
- package/templates/src/auth/api/wecom/admin/api.ts +7 -5
- package/templates/src/auth/api/wecom/api.ts +100 -18
- package/templates/src/auth/api/wecom/sync/api.ts +199 -0
- package/templates/src/auth/web/__client/api.schemas.ts +97 -0
- package/templates/src/auth/web/__client/api.ts +73 -1
- package/templates/src/login/web/auth-provider.ts +9 -1
- package/templates/src/notification/api/seed.sql +1 -1
- package/templates/src/system/api/departments/api.ts +142 -0
- package/templates/src/system/api/departments/detach/api.ts +34 -0
- package/templates/src/system/api/departments/members/api.ts +142 -0
- package/templates/src/system/api/departments/move/api.ts +39 -0
- package/templates/src/system/api/users/api.ts +45 -5
- package/templates/src/system/api/users/profile/api.ts +44 -0
- package/templates/src/system/web/__client/api.schemas.ts +143 -0
- package/templates/src/system/web/__client/api.ts +293 -1
- package/templates/src/system/web/entry.ts +6 -0
- package/templates/src/system/web/locales/en-US.json +113 -7
- package/templates/src/system/web/locales/zh-CN.json +113 -7
- package/templates/src/system/web/pages/departments/index.tsx +346 -0
- package/templates/src/system/web/pages/departments/sync-bar.tsx +257 -0
- package/templates/src/system/web/pages/departments/tree.ts +66 -0
- package/templates/src/system/web/pages/errors.ts +1 -1
- package/templates/src/system/web/pages/users/index.tsx +49 -7
- package/templates/src/system/web/pages/wecom/index.tsx +16 -1
- package/templates/tests/l1-builder.test.ts +1 -1
- package/templates/tests/org-departments.spec.ts +311 -0
- package/templates/tests/org-read.spec.ts +469 -0
- package/templates/tests/rbac-contacts.spec.ts +13 -3
- package/templates/tests/rbac-seed.spec.ts +11 -0
- package/templates/tests/seed-role-accounts.spec.ts +6 -2
- package/templates/tests/wecom-admin.spec.ts +64 -42
- package/templates/tests/wecom-client-timeout.spec.ts +99 -0
- package/templates/tests/wecom-connector.spec.ts +115 -11
- package/templates/tests/wecom-crypt.spec.ts +12 -3
- package/templates/tests/wecom-endpoints.spec.ts +182 -14
- package/templates/tests/wecom-org-sync.spec.ts +598 -0
- package/templates/tests/wecom-sync.spec.ts +286 -0
- package/vendor/host-versions.json +3 -3
- package/templates/src/auth/api/_shared/wecom/xml.ts +0 -36
package/devkit/SKILL.md
CHANGED
|
@@ -39,7 +39,7 @@ description: 用 ojm 开发前后端一体工程时使用——新增/修改前
|
|
|
39
39
|
以扫描 `src/*/web/entry.ts` 为真源,登记项排前面、其余按扫描顺序追加;历史布局则必须登记)。
|
|
40
40
|
**要「不构建」写 `enabled: false`——注释掉无效。**
|
|
41
41
|
5. **验证**:`pnpm dev`(前端 devServer **5174** + oj 后端 **9778**,端口以工程根 `config.yaml` 为准)
|
|
42
|
-
→ 登录 `admin /
|
|
42
|
+
→ 登录 `admin / aA123456` → 按 §8.1 五步清单核对。
|
|
43
43
|
|
|
44
44
|
## 红线(不可违反)
|
|
45
45
|
|
package/devkit/framework-dev.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
> ⚠️ 那两份 guide 有**已知陈旧处**,以源码为准:
|
|
22
22
|
> dev 端口实际是 **3333**(guide 写的 5173 已过时;注意与 `ojm dev` 的前端 devServer
|
|
23
23
|
> **5174** 不是一回事——前者是本仓 vite,后者是业务工程 devServer);包版本以
|
|
24
|
-
> `packages/*/package.json` 为准(撰写时实际 **0.2.
|
|
24
|
+
> `packages/*/package.json` 为准(撰写时实际 **0.2.47**,仅供参考,以当前 package.json 为准)。
|
|
25
25
|
|
|
26
26
|
## §2 两包结构与依赖方向
|
|
27
27
|
|
|
@@ -139,7 +139,7 @@ pnpm test tests/shell # 宿主全量
|
|
|
139
139
|
**一键发布**:`node scripts/publish-packages.mjs`(lockstep 门禁 → 构建 → 守卫测试 →
|
|
140
140
|
runtime → cli → registry 复核;`--dry-run` 只演练)。下面的手动步骤是它的展开参考。
|
|
141
141
|
|
|
142
|
-
- **两包**同版本号(`@oj-module/runtime` + `@oj-module/cli`,当前 `0.2.
|
|
142
|
+
- **两包**同版本号(`@oj-module/runtime` + `@oj-module/cli`,当前 `0.2.47`),后续发版保持
|
|
143
143
|
lockstep;`@plane/kit` / `@plane/editor` 不在发布集内(脚本里已注释)。
|
|
144
144
|
- **必须 `pnpm publish`**——用 `npm publish` 会漏出 `workspace:*` / `catalog:` 字面量。
|
|
145
145
|
- **顺序:先 `runtime` 后 `cli`**。`runtime` 未公开时,新 `cli` 的精确依赖会悬空,
|
package/devkit/manual.md
CHANGED
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
### 1.1 脚手架产物
|
|
14
14
|
|
|
15
15
|
`ojm init <目录>` 生成(幂等补缺,重跑只补缺失文件,**永不覆盖已有文件**)。
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
模板拷贝按框架内置的 **`init.include.yaml` 白名单**执行——未收录的路径一律不拷
|
|
17
|
+
(demo-only 演示模块、模板自运行产物都在清单外)。该清单是**框架侧文件**,`ojm init`
|
|
18
|
+
从 cli 包内读取,**不在你的工程里**——你在工程里找不到它,也改不到它。
|
|
18
19
|
|
|
19
20
|
布局是 **module-root:一个目录 = 一个模块**,前后端同处 `src/<name>/`,各占一侧
|
|
20
21
|
(`api/` 与 `web/` 可以只存在一侧,两侧皆无则不是模块):
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
- **`config.yaml` 在工程根**,不是 `api/config.yaml`。oj 把「项目根」锚定在 **config
|
|
61
62
|
所在目录**,所有 `fs.*` 相对路径、`db.default`、`platform.root`、`mounts[].web`
|
|
62
63
|
都相对它解析;证书与密钥落在同级的 `config/`(`ojm` 侧由 `resolveConfigPath()` /
|
|
63
|
-
`resolveCertDir()`
|
|
64
|
+
`resolveCertDir()` 单点派生,你不需要自己拼路径)。
|
|
64
65
|
- **产物有两个根**:后端 `api/dist`(oj 扁平 release,`<name>-<ver>/` 与
|
|
65
66
|
`manifests.yaml` 同层),站点 `web/dist`(`modules/` + `modules.json`)。
|
|
66
67
|
`config.yaml` 上移到工程根后,两者不再同名 `dist`。
|
|
@@ -75,7 +76,7 @@
|
|
|
75
76
|
> **历史布局仍被识别**:`web/src/<name>`(uni-dev)与 `web/<name>`(框架根仓)照旧可用,
|
|
76
77
|
> 只是 `ojm init` 不再产出。两套源码树**互斥**——同时存在时 `ojm` 直接报错,而不是静默选一个。
|
|
77
78
|
|
|
78
|
-
登录账号:**账号名=内置角色名**一一对应,口令均 `
|
|
79
|
+
登录账号:**账号名=内置角色名**一一对应,口令均 `aA123456`,且全部**免首登改密**(must_change=0,纯开发便利,勿用于生产):
|
|
79
80
|
|
|
80
81
|
| 账号 | 角色 | 能干什么 |
|
|
81
82
|
|---|---|---|
|
|
@@ -86,6 +87,13 @@
|
|
|
86
87
|
|
|
87
88
|
> 旧脚手架库(admin 绑 superadmin / must_change=1)**无需手工迁移**:seed 每次启动幂等重放,
|
|
88
89
|
> 自动收敛为账号名=角色名并清零 must_change(`DELETE` 旧绑定 + `UPDATE`,见 `_platform/api/seed.sql`)。
|
|
90
|
+
>
|
|
91
|
+
> ⚠️ **但口令不会被 seed 改**:建号语句是 `INSERT OR IGNORE`,已存在的账号行原样保留。
|
|
92
|
+
> 口令在 2026-11-01 由 `123456` 改为 `aA123456`(bcrypt cost=10、`$2y$` 前缀),
|
|
93
|
+
> **更早建好的 dev 库里仍是旧口令**——拿 `aA123456` 登不上时先怀疑这个,别去查登录链路。
|
|
94
|
+
> 要统一:删 `db.sqlite` 重跑 `oj migrate`(seed 随服务启动重放),或直接
|
|
95
|
+
> `UPDATE users SET password_hash = '<aA123456 的哈希>' WHERE username IN ('superadmin','admin','editor','viewer');`。
|
|
96
|
+
> 哈希现成值从 `src/_platform/api/seed.sql` 里 grep `$2y$10$` 即可。
|
|
89
97
|
|
|
90
98
|
端口:前端 devServer **5174**,oj 后端 **9778**
|
|
91
99
|
(以工程根 `config.yaml` 的 `server.port` 为准)。
|
|
@@ -343,7 +351,7 @@ export default defineModule({
|
|
|
343
351
|
`defineModule` 字段:`name`(= 目录名)、`description`、`version`、
|
|
344
352
|
`peerRuntime`、`routes`、`i18n?`、`lifecycle?`。
|
|
345
353
|
|
|
346
|
-
> 页面组件用**静态 import 或 `lazy()`
|
|
354
|
+
> 页面组件用**静态 import 或 `lazy()` 都行**:模板自带模块(`src/home/web/entry.ts` 等)
|
|
347
355
|
> 用静态 import,多页面模块可对非首屏页面用 `lazy(() => import("./pages/x"))` 做代码分割。
|
|
348
356
|
> 单个页面就用静态 import,少一层间接。
|
|
349
357
|
|
|
@@ -398,10 +406,11 @@ export default defineModule({
|
|
|
398
406
|
可服务的同源路径)。直接 `import "vditor/dist/..."` 其它深路径会命中前缀 external 但无
|
|
399
407
|
importmap 键,构建期报错——需要新深路径请联系框架方在共享表登记。
|
|
400
408
|
|
|
401
|
-
### 2.7 本版本共享依赖钉版(0.2.
|
|
409
|
+
### 2.7 本版本共享依赖钉版(0.2.47 快照)
|
|
402
410
|
|
|
403
|
-
宿主经 importmap 提供以下单例(模块 `devDependencies` 须对齐,供 `tsc`
|
|
404
|
-
`pnpm exec ojm info`
|
|
411
|
+
宿主经 importmap 提供以下单例(模块 `devDependencies` 须对齐,供 `tsc` 用);完整矩阵以
|
|
412
|
+
`pnpm exec ojm info` 为准——**别抄本节表格当真相**,本表是撰写时的快照,升级 cli 后
|
|
413
|
+
以 `ojm info` 输出为准。
|
|
405
414
|
|
|
406
415
|
| 包 | 钉版 |
|
|
407
416
|
| --- | --- |
|
|
@@ -427,7 +436,8 @@ importmap 键,构建期报错——需要新深路径请联系框架方在共
|
|
|
427
436
|
| `pinyin-pro` | 3.29.3 |
|
|
428
437
|
| `vditor` | 4.0.0 |
|
|
429
438
|
|
|
430
|
-
框架包版本:`@oj-module/runtime` / `@oj-module/cli` 为 `0.2.
|
|
439
|
+
框架包版本:`@oj-module/runtime` / `@oj-module/cli` 为 `0.2.47`(**双包 lockstep**,
|
|
440
|
+
以 `packages/*/package.json` 或 `ojm info` 为准——本表是撰写时快照);
|
|
431
441
|
`@plane/kit` / `@plane/editor` 是独立版本线(当前 `0.1.20`,随宿主 importmap 提供,
|
|
432
442
|
不参与 lockstep)。`oj` 二进制最低版本门禁 `MIN_OJ_VERSION = 0.1.85`——这个版本带来
|
|
433
443
|
`--module-root`(`src/<name>/{api,web}` 布局的源码树根,与 `-d/--api-path` **互斥**);
|
|
@@ -988,7 +998,7 @@ export default {
|
|
|
988
998
|
- **归属校验返回 403**:跨用户 `del` / `read` 他人按人项,原语返回 `false`,端点 `json.fail(403, "forbidden")`——
|
|
989
999
|
与「按人隔离」对称(A 推给 B 后 A 不可见、B 不可删/读 A 的)。
|
|
990
1000
|
|
|
991
|
-
**验证**:`pnpm dev` → `admin /
|
|
1001
|
+
**验证**:`pnpm dev` → `admin / aA123456` 登录 → 右上角铃铛有蓝点 → 点开 →
|
|
992
1002
|
点任意一条蓝点消失 → 「全部已读」全清 → 「清空」列表变空。
|
|
993
1003
|
|
|
994
1004
|
**加接口的通用流水线**:
|
|
@@ -1569,11 +1579,11 @@ export default async (path: string, html: string) => {
|
|
|
1569
1579
|
|
|
1570
1580
|
| 想抄什么 | 抄这里 |
|
|
1571
1581
|
|---|---|
|
|
1572
|
-
| 带页面的模块(路由 / i18n / order) | `src/home/web/entry.ts`、`src/demo/web/entry.ts
|
|
1582
|
+
| 带页面的模块(路由 / i18n / order) | `src/home/web/entry.ts`、`src/demo/web/entry.ts` |
|
|
1573
1583
|
| 接管通知 provider(四方法全量) | `src/notification/web/entry.ts` |
|
|
1574
1584
|
| 上传 provider(action + headers 方法) | `src/personal-center/web/entry.ts` |
|
|
1575
1585
|
| 无页面模块(`routes: []`) | 同 `src/notification/web/entry.ts` |
|
|
1576
|
-
| handler `.schema` 入参 + 平级 `.response` 出参写法(GET + POST、参数段) | `src/notification/api/api.ts
|
|
1586
|
+
| handler `.schema` 入参 + 平级 `.response` 出参写法(GET + POST、参数段) | `src/notification/api/api.ts` |
|
|
1577
1587
|
| handler 写法(嵌套组列表 / 写入 / 403 归属) | `src/notification/api/api.ts`(模块根单文件,`read`/`read-all`/`clear` 子组) |
|
|
1578
1588
|
| 统一异常出口 `respond()`(service 抛 `Error & {status}` → 信封 `json.fail`) | 模板 `src/_platform/api/_shared/respond.ts` + 各 handler 用法(§1.7-1) |
|
|
1579
1589
|
| 生成物长什么样(含工厂) | `src/notification/web/__client/api.ts` |
|
|
@@ -1632,8 +1642,8 @@ export default async (path: string, html: string) => {
|
|
|
1632
1642
|
产物见 §1.1(工程根 `config.yaml` + `config/` 证书 + `src/<模块>/{api,web}` 单树 + `bin/`、
|
|
1633
1643
|
`web.config.ts`、两份 tsconfig 等)。`tsconfig.paths.json` 与 `package.json` /
|
|
1634
1644
|
`pnpm-workspace.yaml` / `.gitignore` 由 init **现场生成**(不进白名单,模板目录里那份只服务模板自身)。
|
|
1635
|
-
|
|
1636
|
-
|
|
1645
|
+
模板拷贝按框架内置 `init.include.yaml` 白名单——demo-only 演示模块
|
|
1646
|
+
与模板自运行产物不在清单内,不会进工程(清单是框架侧文件,工程里看不到,见 §1.1)。
|
|
1637
1647
|
`bin/oj` 缺失时自动经 npm 包 `@oj-bin/oj` 下载(与 `ojm vendor` 同款,受
|
|
1638
1648
|
`MIN_OJ_VERSION` 门禁约束);下载失败即报错——可先 `ojm vendor`,或把本机 oj
|
|
1639
1649
|
预置进 `bin/` 后重跑(`bin/oj` 已在则跳过下载,init 幂等)。
|
|
@@ -76,7 +76,7 @@ ojm dev
|
|
|
76
76
|
|
|
77
77
|
# 1) 【免 setup】脚手架 seed 的 framework.market_cdn_url 缺省即 /cdn(本站点自供,
|
|
78
78
|
# dev 形态 ojm 已把 /cdn 反代给 oj 子进程)。只有指向外部真 CDN 时才需要:
|
|
79
|
-
# ojm market setup --user superadmin --pass
|
|
79
|
+
# ojm market setup --user superadmin --pass aA123456 --new-pass <你的口令>
|
|
80
80
|
|
|
81
81
|
# 2) 发包:合成 fixture(或 --real 走 ojm build --bundle)→ 确定性 tgz → 包级签名
|
|
82
82
|
# --rebuild-index 顺带重建索引
|
|
@@ -165,7 +165,7 @@ node "$CLI_PKG/bin/ojm.mjs" market verify --rebuild-index
|
|
|
165
165
|
node "$CLI_PKG/bin/ojm.mjs" build # 生成 api/dist + web/dist(含 api/dist/versions.json)
|
|
166
166
|
# config:platform.root 改成 api/dist(安装目标恒为 release 部署,root 必须与 --api-path 同源)
|
|
167
167
|
(bin/oj serve -c config.yaml -b /api --api-path api/dist --console-log &)
|
|
168
|
-
node "$CLI_PKG/bin/ojm.mjs" market setup --site-url http://127.0.0.1:9778 --user superadmin --pass
|
|
168
|
+
node "$CLI_PKG/bin/ojm.mjs" market setup --site-url http://127.0.0.1:9778 --user superadmin --pass aA123456 --new-pass <新口令>
|
|
169
169
|
# 市场页点安装 → 首次停在「待信任」→ 核对指纹 → ojm trust confirm --task <id> → 重试 → done
|
|
170
170
|
```
|
|
171
171
|
|