@oj-module/cli 0.2.54 → 0.2.56
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 +3 -3
- package/devkit/manual.md +59 -52
- package/package.json +2 -2
- package/shell-dist/assets/{index-e_Mp2mb5.js → index-CImwskAz.js} +24 -11
- package/shell-dist/assets/runtime.js +2 -2
- package/shell-dist/index.html +3 -3
- package/shell-dist/versions.json +3 -3
- package/src/__tests__/layout.test.ts +30 -1
- package/src/__tests__/templates-schema-columns.test.ts +99 -0
- package/src/alias-paths.ts +11 -12
- package/src/builtin.ts +10 -3
- package/src/contract/__tests__/emit-client.test.ts +4 -4
- package/src/contract/__tests__/market-client.integration.test.ts +2 -2
- package/src/contract/__tests__/run-api.test.ts +2 -2
- package/src/contract/check.ts +6 -2
- package/src/contract/emit-client.ts +10 -3
- package/src/contract/run.ts +10 -2
- package/src/init.ts +19 -11
- package/src/layout.ts +72 -16
- package/src/lifecycle/__tests__/manifest-contract.test.ts +2 -2
- package/src/market/__tests__/bootstrap.test.ts +1 -1
- package/src/site.ts +1 -1
- package/templates/README.md +30 -20
- package/templates/init.include.yaml +19 -11
- package/templates/openapi.json +95 -86
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/users.ts +27 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/infra/oplog.ts +4 -2
- package/templates/src/app/api/_platform/migrations/0017__users_employee_no.mysql.sql +7 -0
- package/templates/src/app/api/_platform/migrations/0017__users_employee_no.pg.sql +4 -0
- package/templates/src/app/api/_platform/migrations/0017__users_employee_no.sql +8 -0
- package/templates/src/{_platform/api → app/api/_platform}/schema.yaml +5 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/replay.ts +9 -3
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/tenant-admin.ts +18 -27
- package/templates/src/{system/api → app/api/system}/oplog/api.ts +5 -3
- package/templates/src/{_platform/web/__client/api.ts → app/web/_platform/__client/index.ts} +5 -2
- package/templates/src/{auth/web/__client/api.ts → app/web/auth/__client/index.ts} +5 -2
- package/templates/src/app/web/notification/pages/center/index.tsx +1 -1
- package/templates/src/app/web/notification/routes.ts +1 -1
- package/templates/src/app/web/personal-center/pages/my-profile/index.tsx +1 -1
- package/templates/src/app/web/personal-center/routes.ts +1 -1
- package/templates/src/app/web/system/__client/api.schemas.ts +1 -0
- package/templates/src/app/web/system/locales/en-US.json +2 -3
- package/templates/src/app/web/system/locales/zh-CN.json +2 -3
- package/templates/src/app/web/system/pages/departments/index.tsx +2 -2
- package/templates/src/app/web/system/pages/login-methods/index.tsx +1 -1
- package/templates/src/app/web/system/pages/oplog/index.tsx +44 -19
- package/templates/src/app/web/system/pages/roles/index.tsx +5 -3
- package/templates/src/app/web/system/pages/roles/visible-roles.ts +14 -0
- package/templates/src/app/web/system/pages/settings/index.tsx +2 -2
- package/templates/src/app/web/system/pages/users/can-manage.ts +21 -0
- package/templates/src/app/web/system/pages/users/index.tsx +25 -17
- package/templates/src/app/web/system/pages/users/roles.tsx +1 -1
- package/templates/src/app/web/system/routes.ts +1 -1
- package/templates/src/{web/web/__client/api.ts → app/web/web/__client/index.ts} +5 -2
- package/templates/src/oj-market/web/api/defaultClient.ts +1 -1
- package/templates/tests/auth-ldap.spec.ts +2 -2
- package/templates/tests/auth-session.spec.ts +3 -3
- package/templates/tests/auth-throttle.spec.ts +1 -1
- package/templates/tests/fixture.ts +6 -4
- package/templates/tests/guard.spec.ts +1 -1
- package/templates/tests/lifecycle/atomic-state.spec.ts +3 -3
- package/templates/tests/lifecycle/bootstrap.spec.ts +3 -3
- package/templates/tests/lifecycle/deploy-smoke.spec.ts +8 -8
- package/templates/tests/lifecycle/installer.spec.ts +10 -10
- package/templates/tests/lifecycle/market-api.spec.ts +14 -14
- package/templates/tests/lifecycle/migrate.spec.ts +6 -6
- package/templates/tests/lifecycle/preflight.spec.ts +3 -3
- package/templates/tests/lifecycle/register.spec.ts +1 -1
- package/templates/tests/lifecycle/semver.spec.ts +1 -1
- package/templates/tests/lifecycle/sha384.spec.ts +1 -1
- package/templates/tests/lifecycle/solutions-api.spec.ts +1 -1
- package/templates/tests/lifecycle/source-seq.spec.ts +1 -1
- package/templates/tests/lifecycle/steps-fs.spec.ts +9 -9
- package/templates/tests/lifecycle/text-edit.spec.ts +1 -1
- package/templates/tests/lifecycle/tgz-guard.spec.ts +2 -2
- package/templates/tests/lifecycle/trust.spec.ts +5 -5
- package/templates/tests/lifecycle/uninstall.spec.ts +7 -7
- package/templates/tests/lifecycle/verify-checks.spec.ts +5 -5
- package/templates/tests/lifecycle/verify-report.spec.ts +4 -4
- package/templates/tests/org-departments.spec.ts +10 -6
- package/templates/tests/org-read.spec.ts +7 -7
- package/templates/tests/query-utils.spec.ts +1 -1
- package/templates/tests/rbac-audit.spec.ts +1 -1
- package/templates/tests/rbac-contacts.spec.ts +2 -2
- package/templates/tests/rbac-guard.spec.ts +1 -1
- package/templates/tests/rbac-roles.spec.ts +10 -2
- package/templates/tests/rbac-seed.spec.ts +1 -1
- package/templates/tests/rbac-settings.spec.ts +77 -7
- package/templates/tests/rbac-solution-perms.spec.ts +1 -1
- package/templates/tests/rbac-tables.spec.ts +29 -0
- package/templates/tests/rbac-users.spec.ts +55 -3
- package/templates/tests/roles-page.spec.ts +40 -0
- package/templates/tests/seed-role-accounts.spec.ts +1 -1
- package/templates/tests/tenant-access-cache.spec.ts +1 -1
- package/templates/tests/tenant-forgery.spec.ts +5 -5
- package/templates/tests/tenant-isolation.spec.ts +5 -4
- package/templates/tests/username-namespace.spec.ts +3 -3
- package/templates/tests/users-page.spec.ts +39 -0
- package/templates/tests/wecom-admin.spec.ts +6 -6
- package/templates/tests/wecom-client-timeout.spec.ts +1 -1
- package/templates/tests/wecom-connector.spec.ts +9 -9
- package/templates/tests/wecom-corp.spec.ts +9 -9
- package/templates/tests/wecom-crypt.spec.ts +1 -1
- package/templates/tests/wecom-endpoints.spec.ts +2 -2
- package/templates/tests/wecom-landing.spec.ts +1 -1
- package/templates/tests/wecom-org-sync.spec.ts +7 -7
- package/templates/tests/wecom-sync.spec.ts +3 -3
- package/templates/tsconfig.paths.json +11 -11
- package/templates/vitest.config.ts +2 -2
- package/templates/web.config.ts +5 -2
- package/vendor/host-versions.json +3 -3
- package/templates/src/{_platform/api → app/api/_platform}/README.md +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/atomic.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/history.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/installer.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/limits.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/lock.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/semver.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/sha384.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/source-seq.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/state.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/deploy-web.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/download.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/extract.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/migrate.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/preflight.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/register.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/reload.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/smoke.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/steps/verify.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/tasks.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/text-edit.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/tgz-guard.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/trust.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/types.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/uninstall.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/verify-checks.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_lifecycle/verify-report.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/respond.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/contacts.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/org-read.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/org.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/roles.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/settings.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/solution-perms.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/infra/access.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/infra/audit.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/infra/guard.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/infra/query.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/service/infra/rate.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/_shared/site-facade.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/contacts/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/contacts/detail/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/fixtures/l1-test-user.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/manifest.yaml +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/market/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/market/bootstrap.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/market/index-source.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0001__create_users.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0001__create_users.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0001__create_users.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0002__add_users_avatar_base64.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0002__add_users_avatar_base64.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0003__users_source_display_name.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0003__users_source_display_name.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0004__sys_rbac.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0004__sys_rbac.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0004__sys_rbac.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0005__users_must_change.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0005__users_must_change.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0006__users_is_forbidden.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0006__users_is_forbidden.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0007__users_email.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0008__sys_refresh_token.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0008__sys_refresh_token.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0008__sys_refresh_token.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0009__sys_throttle.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0009__sys_throttle.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0009__sys_throttle.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0010__sys_solution_route.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0010__sys_solution_route.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0010__sys_solution_route.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0011__sys_setting_group_label.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0011__sys_setting_group_label.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0012__market_history.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0012__market_history.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0012__market_history.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0013__users_profile.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0014__reg_source_seq.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0014__reg_source_seq.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0014__reg_source_seq.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0015__tenant.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0015__tenant.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0015__tenant.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0016__org.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0016__org.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/migrations/0016__org.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/org/departments/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/org/is-member/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/org/members/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/org/picker/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/org/resolve/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/org/tree/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/org/user/api.ts +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/seed.mysql.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/seed.pg.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/seed.sql +0 -0
- package/templates/src/{_platform/api → app/api/_platform}/solutions/api.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/ldap-login.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/ldap.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/login-throttle.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/session.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/admin.ts +1 -1
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/client.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/config.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/contacts.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/crypt.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/events.ts +1 -1
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/login.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/payload.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/store.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/_shared/wecom/sync.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/api.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/ldap-login/api.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/manifest.yaml +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0001__wecom.mysql.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0001__wecom.pg.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0001__wecom.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0002__org_sync.mysql.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0002__org_sync.pg.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0002__org_sync.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0003__credential_kind.mysql.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0003__credential_kind.pg.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/migrations/0003__credential_kind.sql +0 -0
- package/templates/src/{auth/api → app/api/auth}/schema.yaml +0 -0
- package/templates/src/{auth/api → app/api/auth}/wecom/admin/api.ts +0 -0
- package/templates/src/{auth/api → app/api/auth}/wecom/admin/tenant-admin/api.ts +1 -1
- package/templates/src/{auth/api → app/api/auth}/wecom/admin/tenant-admin/password/api.ts +1 -1
- /package/templates/src/{auth/api → app/api/auth}/wecom/api.ts +0 -0
- /package/templates/src/{auth/api → app/api/auth}/wecom/sync/api.ts +0 -0
- /package/templates/src/{home/api → app/api/home}/line/api.ts +0 -0
- /package/templates/src/{home/api → app/api/home}/manifest.yaml +0 -0
- /package/templates/src/{home/api → app/api/home}/migrations/0001__create_home_tables.sql +0 -0
- /package/templates/src/{home/api → app/api/home}/migrations/0002__tenant.mysql.sql +0 -0
- /package/templates/src/{home/api → app/api/home}/migrations/0002__tenant.sql +0 -0
- /package/templates/src/{home/api → app/api/home}/pie/api.ts +0 -0
- /package/templates/src/{home/api → app/api/home}/schema.yaml +0 -0
- /package/templates/src/{home/api → app/api/home}/seed.sql +0 -0
- /package/templates/src/{notification/api → app/api/notification}/_shared/notify.ts +0 -0
- /package/templates/src/{notification/api → app/api/notification}/api.ts +0 -0
- /package/templates/src/{notification/api → app/api/notification}/del/api.ts +0 -0
- /package/templates/src/{notification/api → app/api/notification}/manifest.yaml +0 -0
- /package/templates/src/{notification/api → app/api/notification}/migrations/0001__create_notifications.sql +0 -0
- /package/templates/src/{notification/api → app/api/notification}/migrations/0002__notifications_user.sql +0 -0
- /package/templates/src/{notification/api → app/api/notification}/migrations/0003__notifications_broadcast.sql +0 -0
- /package/templates/src/{notification/api → app/api/notification}/migrations/0004__notifications_broadcast_hidden.sql +0 -0
- /package/templates/src/{notification/api → app/api/notification}/migrations/0005__tenant.mysql.sql +0 -0
- /package/templates/src/{notification/api → app/api/notification}/migrations/0005__tenant.sql +0 -0
- /package/templates/src/{notification/api → app/api/notification}/schema.yaml +0 -0
- /package/templates/src/{notification/api → app/api/notification}/seed.sql +0 -0
- /package/templates/src/{personal-center/api → app/api/personal-center}/manifest.yaml +0 -0
- /package/templates/src/{personal-center/api → app/api/personal-center}/profile/api.ts +0 -0
- /package/templates/src/{personal-center/api → app/api/personal-center}/upload/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/departments/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/departments/detach/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/departments/members/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/departments/move/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/login-methods/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/manifest.yaml +0 -0
- /package/templates/src/{system/api → app/api/system}/permissions/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/roles/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/roles/bindings/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/settings/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/users/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/users/forbidden/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/users/password/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/users/profile/api.ts +0 -0
- /package/templates/src/{system/api → app/api/system}/users/roles/api.ts +0 -0
- /package/templates/src/{web/api → app/api/web}/get-async-routes/api.ts +0 -0
- /package/templates/src/{web/api → app/api/web}/hello/api.ts +0 -0
- /package/templates/src/{web/api → app/api/web}/manifest.yaml +0 -0
- /package/templates/src/{web/api → app/api/web}/user-info/api.ts +0 -0
- /package/templates/src/{_platform/web → app/web/_platform}/__client/api.schemas.ts +0 -0
- /package/templates/src/{auth/web → app/web/auth}/__client/api.schemas.ts +0 -0
- /package/templates/src/app/web/home/__client/{api.ts → index.ts} +0 -0
- /package/templates/src/app/web/notification/__client/{api.ts → index.ts} +0 -0
- /package/templates/src/app/web/personal-center/__client/{api.ts → index.ts} +0 -0
- /package/templates/src/app/web/system/__client/{api.ts → index.ts} +0 -0
- /package/templates/src/{web → app/web}/web/__client/api.schemas.ts +0 -0
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
// deps 全注入:store 用 `enc:` 前后缀假加密(Node 侧 crypto 只读,设计 §9.1),
|
|
11
11
|
// client 的 http/kv 用内存桩——真实网络与 AES 已由 wecom-crypt.spec / 运行时保证。
|
|
12
12
|
/* eslint-disable test/prefer-lowercase-title -- D/AC 编号是验收锚点,保留大写 */
|
|
13
|
-
import type { WecomCache, WecomHttp } from "../src/
|
|
14
|
-
import type { WecomConfig } from "../src/
|
|
15
|
-
import type { WecomStoreDeps } from "../src/
|
|
13
|
+
import type { WecomCache, WecomHttp } from "../src/app/api/auth/_shared/wecom/client";
|
|
14
|
+
import type { WecomConfig } from "../src/app/api/auth/_shared/wecom/config";
|
|
15
|
+
import type { WecomStoreDeps } from "../src/app/api/auth/_shared/wecom/store";
|
|
16
16
|
|
|
17
17
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
18
|
-
import { createWecomClient, runtimeCache } from "../src/
|
|
18
|
+
import { createWecomClient, runtimeCache } from "../src/app/api/auth/_shared/wecom/client";
|
|
19
19
|
import {
|
|
20
20
|
assertEncKey,
|
|
21
21
|
eventUrlOf,
|
|
@@ -23,8 +23,8 @@ import {
|
|
|
23
23
|
readCallbackConfig,
|
|
24
24
|
readSuiteConfig,
|
|
25
25
|
siteRootOf,
|
|
26
|
-
} from "../src/
|
|
27
|
-
import { envOfState, handleSuiteEvent } from "../src/
|
|
26
|
+
} from "../src/app/api/auth/_shared/wecom/config";
|
|
27
|
+
import { envOfState, handleSuiteEvent } from "../src/app/api/auth/_shared/wecom/events";
|
|
28
28
|
import {
|
|
29
29
|
assertUserActive,
|
|
30
30
|
buildAuthorizeUrl,
|
|
@@ -36,8 +36,8 @@ import {
|
|
|
36
36
|
loginLandingUrl,
|
|
37
37
|
putLoginState,
|
|
38
38
|
takeLoginState,
|
|
39
|
-
} from "../src/
|
|
40
|
-
import { callbackFields, field } from "../src/
|
|
39
|
+
} from "../src/app/api/auth/_shared/wecom/login";
|
|
40
|
+
import { callbackFields, field } from "../src/app/api/auth/_shared/wecom/payload";
|
|
41
41
|
import {
|
|
42
42
|
claimLoginTicket,
|
|
43
43
|
ensureTenant,
|
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
saveProfile,
|
|
49
49
|
setProfileStatus,
|
|
50
50
|
tenantOfCorp,
|
|
51
|
-
} from "../src/
|
|
51
|
+
} from "../src/app/api/auth/_shared/wecom/store";
|
|
52
52
|
import { installDb } from "./fixture";
|
|
53
53
|
|
|
54
54
|
let dbo: ReturnType<typeof installDb>;
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
//
|
|
16
16
|
// 夹具即真实库(真迁移 + 真 sqlite):0003__credential_kind 的默认值也一起被这层覆盖到。
|
|
17
17
|
/* eslint-disable test/prefer-lowercase-title -- AC 编号是验收锚点,保留大写 */
|
|
18
|
-
import type { WecomStoreDeps } from "../src/
|
|
18
|
+
import type { WecomStoreDeps } from "../src/app/api/auth/_shared/wecom/store";
|
|
19
19
|
import { Buffer } from "node:buffer";
|
|
20
20
|
import { createCipheriv, webcrypto } from "node:crypto";
|
|
21
21
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
22
|
-
import { connectCorp } from "../src/
|
|
23
|
-
import { createWecomClient, runtimeCache, runtimeHttp } from "../src/
|
|
24
|
-
import { callbackCreds, configuredKinds, corpIdentity, readBase, readCorpConfig, readSuiteConfig, wecomKinds } from "../src/
|
|
25
|
-
import { bytesToB64, utf8Bytes, wecomSignature } from "../src/
|
|
26
|
-
import { handleSuiteEvent } from "../src/
|
|
27
|
-
import { findCorpAuth, findProfile, probeProfile, saveProfile } from "../src/
|
|
22
|
+
import { connectCorp } from "../src/app/api/auth/_shared/wecom/admin";
|
|
23
|
+
import { createWecomClient, runtimeCache, runtimeHttp } from "../src/app/api/auth/_shared/wecom/client";
|
|
24
|
+
import { callbackCreds, configuredKinds, corpIdentity, readBase, readCorpConfig, readSuiteConfig, wecomKinds } from "../src/app/api/auth/_shared/wecom/config";
|
|
25
|
+
import { bytesToB64, utf8Bytes, wecomSignature } from "../src/app/api/auth/_shared/wecom/crypt";
|
|
26
|
+
import { handleSuiteEvent } from "../src/app/api/auth/_shared/wecom/events";
|
|
27
|
+
import { findCorpAuth, findProfile, probeProfile, saveProfile } from "../src/app/api/auth/_shared/wecom/store";
|
|
28
28
|
import { installDb } from "./fixture";
|
|
29
29
|
|
|
30
30
|
const g = globalThis as any;
|
|
@@ -209,8 +209,8 @@ function stubUpstream(opts: { depts?: Array<{ id: string, name?: string }>, memb
|
|
|
209
209
|
return { calls };
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
const wecomApi = async () => (await import("../src/
|
|
213
|
-
const adminApi = async () => (await import("../src/
|
|
212
|
+
const wecomApi = async () => (await import("../src/app/api/auth/wecom/api")).default;
|
|
213
|
+
const adminApi = async () => (await import("../src/app/api/auth/wecom/admin/api")).default;
|
|
214
214
|
|
|
215
215
|
/** 回调 timestamp 必须新鲜:重放守卫拒 ±5 分钟以外的报文,用固定值会让整段用例假红 */
|
|
216
216
|
const nowSecs = () => String(Math.floor(Date.now() / 1000));
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
unwrapWecomMessage,
|
|
18
18
|
utf8Bytes,
|
|
19
19
|
wecomSignature,
|
|
20
|
-
} from "../src/
|
|
20
|
+
} from "../src/app/api/auth/_shared/wecom/crypt";
|
|
21
21
|
|
|
22
22
|
const req = createRequire(import.meta.url);
|
|
23
23
|
const nodeCrypto = req("node:crypto") as typeof import("node:crypto");
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
import { Buffer } from "node:buffer";
|
|
12
12
|
import { createCipheriv, webcrypto } from "node:crypto";
|
|
13
13
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
14
|
-
import { bytesToB64, sha1Hex, utf8Bytes, wecomSignature } from "../src/
|
|
14
|
+
import { bytesToB64, sha1Hex, utf8Bytes, wecomSignature } from "../src/app/api/auth/_shared/wecom/crypt";
|
|
15
15
|
import { installDb } from "./fixture";
|
|
16
16
|
|
|
17
17
|
const g = globalThis as any;
|
|
@@ -147,7 +147,7 @@ function seedCorp(corpId = "ww_corp_a", agentId = "100001"): void {
|
|
|
147
147
|
.run(SUITE, corpId, agentId, corpId, `gcm(perm_${corpId})`);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
-
const api = async () => (await import("../src/
|
|
150
|
+
const api = async () => (await import("../src/app/api/auth/wecom/api")).default;
|
|
151
151
|
|
|
152
152
|
beforeAll(() => {
|
|
153
153
|
dbo = installDb();
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// · 参数要裁剪、要能容忍少了 tenant(此时沿用本地租户,不是登录失败);
|
|
6
6
|
// · 授权入口即使没填企业代码也要跳(后端会回 400 说明缺什么,比前端静默不动好排查)。
|
|
7
7
|
import { describe, expect, it } from "vitest";
|
|
8
|
-
import { parseWecomLanding, wecomAuthorizePath } from "../src/
|
|
8
|
+
import { parseWecomLanding, wecomAuthorizePath } from "../src/app/web/login/wecom";
|
|
9
9
|
|
|
10
10
|
describe("p2-A:回跳落地参数解析", () => {
|
|
11
11
|
it("带齐 ticket 与 tenant → 解析出两者", () => {
|
|
@@ -9,15 +9,15 @@
|
|
|
9
9
|
// · **登录自更新节流**:上万员工每天登录,不节流就是把 user/get 打成常驻流量;
|
|
10
10
|
// 但 `user/get` 拿不到(无权限/不在可见范围)时**不能**写节流键,否则这一整天都补不上资料。
|
|
11
11
|
// · **D10 不建占位部门**:登录路径若能顺手建部门,任何成员都能凭空造出组织节点。
|
|
12
|
-
import type { WecomCache, WecomHttp } from "../src/
|
|
13
|
-
import type { WecomStoreDeps } from "../src/
|
|
12
|
+
import type { WecomCache, WecomHttp } from "../src/app/api/auth/_shared/wecom/client";
|
|
13
|
+
import type { WecomStoreDeps } from "../src/app/api/auth/_shared/wecom/store";
|
|
14
14
|
|
|
15
15
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
16
|
-
import { upsertDepartment } from "../src/
|
|
17
|
-
import { createWecomClient, WecomApiError } from "../src/
|
|
18
|
-
import { handleSuiteEvent } from "../src/
|
|
19
|
-
import { SELF_UPDATE_TTL_SECS, selfUpdate } from "../src/
|
|
20
|
-
import { findProfile, probeProfile, putSuiteTicket, saveProfile, setProfileStatus } from "../src/
|
|
16
|
+
import { upsertDepartment } from "../src/app/api/_platform/_shared/service/domain/org";
|
|
17
|
+
import { createWecomClient, WecomApiError } from "../src/app/api/auth/_shared/wecom/client";
|
|
18
|
+
import { handleSuiteEvent } from "../src/app/api/auth/_shared/wecom/events";
|
|
19
|
+
import { SELF_UPDATE_TTL_SECS, selfUpdate } from "../src/app/api/auth/_shared/wecom/login";
|
|
20
|
+
import { findProfile, probeProfile, putSuiteTicket, saveProfile, setProfileStatus } from "../src/app/api/auth/_shared/wecom/store";
|
|
21
21
|
import { installDb } from "./fixture";
|
|
22
22
|
|
|
23
23
|
/* eslint-disable test/prefer-lowercase-title -- D/AC 编号是验收锚点,保留大写 */
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
// · 权限类错码是「跳过并计数」——一旦有跳过就**不许回收**(否则一次上游抖会被读成「部门被删」);
|
|
6
6
|
// · 限流/可恢复致命错要停在原部门(游标不前进),下一次重试同一部门;
|
|
7
7
|
// · 本地建的部门/成员一根毛都不碰(D13 归属权)。
|
|
8
|
-
import type { WecomClient, WecomMember } from "../src/
|
|
8
|
+
import type { WecomClient, WecomMember } from "../src/app/api/auth/_shared/wecom/client";
|
|
9
9
|
|
|
10
10
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|
11
|
-
import { WecomApiError } from "../src/
|
|
12
|
-
import { attachProfile, cancelSync, emptyView, startSync, syncStatus } from "../src/
|
|
11
|
+
import { WecomApiError } from "../src/app/api/auth/_shared/wecom/client";
|
|
12
|
+
import { attachProfile, cancelSync, emptyView, startSync, syncStatus } from "../src/app/api/auth/_shared/wecom/sync";
|
|
13
13
|
import { installDb } from "./fixture";
|
|
14
14
|
|
|
15
15
|
/* eslint-disable test/prefer-lowercase-title -- D/AC 编号是验收锚点,保留大写 */
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
// 由 ojm 生成:ojm init / ojm build / ojm dev
|
|
1
|
+
// 由 ojm 生成:ojm init / ojm build / ojm dev 会按模块清单重写本文件,请勿手改。
|
|
2
2
|
//
|
|
3
|
-
// oj 别名 `#/<模块名>/…`
|
|
4
|
-
// paths 只能静态全局映射,且每条规则的替换值只允许一个 `*`(`./src/*/api/*`
|
|
5
|
-
// 以 TS5062 拒掉),故按模块逐条枚举。
|
|
3
|
+
// oj 别名 `#/<模块名>/…` 锚在目标模块根(src/<模块名>/api 或 src/app/api/<模块名>)。
|
|
4
|
+
// tsconfig 的 paths 只能静态全局映射,且每条规则的替换值只允许一个 `*`(`./src/*/api/*`
|
|
5
|
+
// 会被 TS 以 TS5062 拒掉),故按模块逐条枚举。
|
|
6
6
|
{
|
|
7
7
|
"compilerOptions": {
|
|
8
8
|
"paths": {
|
|
9
|
-
"#/_platform/*": ["./src/
|
|
10
|
-
"#/auth/*": ["./src/
|
|
11
|
-
"#/home/*": ["./src/
|
|
12
|
-
"#/notification/*": ["./src/
|
|
13
|
-
"#/personal-center/*": ["./src/personal-center
|
|
14
|
-
"#/system/*": ["./src/
|
|
15
|
-
"#/web/*": ["./src/
|
|
9
|
+
"#/_platform/*": ["./src/app/api/_platform/*"],
|
|
10
|
+
"#/auth/*": ["./src/app/api/auth/*"],
|
|
11
|
+
"#/home/*": ["./src/app/api/home/*"],
|
|
12
|
+
"#/notification/*": ["./src/app/api/notification/*"],
|
|
13
|
+
"#/personal-center/*": ["./src/app/api/personal-center/*"],
|
|
14
|
+
"#/system/*": ["./src/app/api/system/*"],
|
|
15
|
+
"#/web/*": ["./src/app/api/web/*"]
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -7,13 +7,13 @@ const srcDir = fileURLToPath(new URL("./src", import.meta.url));
|
|
|
7
7
|
|
|
8
8
|
export default defineConfig({
|
|
9
9
|
root: fileURLToPath(new URL(".", import.meta.url)),
|
|
10
|
-
// `#/<模块名>/…` 是 oj
|
|
10
|
+
// `#/<模块名>/…` 是 oj 的模块别名(锚在目标模块根,0.2.55 布局下即 `src/app/api/<模块名>`)。
|
|
11
11
|
// oj build / ojm dev 在打包器里解析它,vitest 走 vite 的 resolve,必须在此显式映射,
|
|
12
12
|
// 否则跨模块 import 的后端 spec 会以「Cannot find module」整文件跳过。
|
|
13
13
|
// 形如 `#x`(锚本模块根)与导入方相对,静态 alias 表达不了——模板后端不用这种形态,
|
|
14
14
|
// 一旦引入需先补 vitest 侧解析(或改写成 `#/<模块名>/…`)。
|
|
15
15
|
resolve: {
|
|
16
|
-
alias: [{ find: /^#\/([^/]+)\/(.*)$/, replacement: `${srcDir}
|
|
16
|
+
alias: [{ find: /^#\/([^/]+)\/(.*)$/, replacement: `${srcDir}/app/api/$1/$2` }],
|
|
17
17
|
},
|
|
18
18
|
test: {
|
|
19
19
|
include: ["tests/**/*.spec.ts"],
|
package/templates/web.config.ts
CHANGED
|
@@ -45,14 +45,17 @@ export default {
|
|
|
45
45
|
/**
|
|
46
46
|
* 生成 client 的归属模块:`api 前缀 → 承载其 __client 的 web 模块`。
|
|
47
47
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
48
|
+
* 框架内置后端全部收在 `src/app/api/<前缀>`(模块名即 URL 前缀),前端页面收在
|
|
49
|
+
* `src/app/web`;生成物统一落 `src/app/web/<api 前缀>/__client`,页面相对导入不变。
|
|
50
50
|
* 不配则回落同名模块(`src/<api 前缀>/web/__client`,历史行为)。
|
|
51
51
|
*/
|
|
52
52
|
clientOwners: {
|
|
53
|
+
"_platform": "app",
|
|
54
|
+
"auth": "app",
|
|
53
55
|
"home": "app",
|
|
54
56
|
"personal-center": "app",
|
|
55
57
|
"notification": "app",
|
|
56
58
|
"system": "app",
|
|
59
|
+
"web": "app",
|
|
57
60
|
},
|
|
58
61
|
};
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"react-router": "7.18.2",
|
|
9
9
|
"react-router/dom": "7.18.2",
|
|
10
10
|
"@tanstack/react-query": "5.102.8",
|
|
11
|
-
"@oj-module/runtime": "0.2.
|
|
12
|
-
"@oj-module/runtime/contract": "0.2.
|
|
13
|
-
"@oj-module/runtime/contract/errors": "0.2.
|
|
11
|
+
"@oj-module/runtime": "0.2.56",
|
|
12
|
+
"@oj-module/runtime/contract": "0.2.56",
|
|
13
|
+
"@oj-module/runtime/contract/errors": "0.2.56",
|
|
14
14
|
"@plane/kit": "0.1.20",
|
|
15
15
|
"@plane/editor": "0.1.20",
|
|
16
16
|
"antd": "6.6.1",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/contacts.ts
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/org-read.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/settings.ts
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/_shared/service/domain/solution-perms.ts
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0001__create_users.mysql.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0001__create_users.pg.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0004__sys_rbac.mysql.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0005__users_must_change.sql
RENAMED
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0006__users_is_forbidden.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0008__sys_refresh_token.pg.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0008__sys_refresh_token.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0009__sys_throttle.mysql.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0009__sys_throttle.pg.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0010__sys_solution_route.pg.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0010__sys_solution_route.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0012__market_history.mysql.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0012__market_history.pg.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0012__market_history.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0013__users_profile.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0014__reg_source_seq.mysql.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0014__reg_source_seq.pg.sql
RENAMED
|
File without changes
|
package/templates/src/{_platform/api → app/api/_platform}/migrations/0014__reg_source_seq.sql
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -13,8 +13,8 @@ import type { WecomConfig, WecomCorpConfig, WecomKind } from "./config";
|
|
|
13
13
|
import type { WecomStoreDeps } from "./store";
|
|
14
14
|
import { invalidateAllUsers } from "#/_platform/_shared/service/infra/access";
|
|
15
15
|
import { assertProviderConfig, eventUrlOf } from "./config";
|
|
16
|
-
import { provisionTenantAdmin } from "./tenant-admin";
|
|
17
16
|
import { corpScope, revokeTenantSessions, saveProfile, tenantOfCorp } from "./store";
|
|
17
|
+
import { provisionTenantAdmin } from "./tenant-admin";
|
|
18
18
|
|
|
19
19
|
export interface WecomAdminDeps {
|
|
20
20
|
client: WecomClient
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -21,8 +21,8 @@ import { invalidateAllUsers } from "#/_platform/_shared/service/infra/access";
|
|
|
21
21
|
import { recordOp } from "#/_platform/_shared/service/infra/audit";
|
|
22
22
|
import { handleContactChange } from "./contacts";
|
|
23
23
|
import { callbackFields, field, requireField } from "./payload";
|
|
24
|
-
import { provisionTenantAdmin } from "./tenant-admin";
|
|
25
24
|
import { corpScope, ensureTenant, findCorpAuth, getSuiteTicket, putSuiteTicket, revokeTenantSessions, saveProfile, setAuthMode, setProfileStatus, tenantOfCorp } from "./store";
|
|
25
|
+
import { provisionTenantAdmin } from "./tenant-admin";
|
|
26
26
|
|
|
27
27
|
/** suite_ticket 官方有效期 30 分钟(10 分钟推一次);本地按 30 分钟作废,宁可拒一次也不拿过期票打企微 */
|
|
28
28
|
const SUITE_TICKET_TTL_SECS = 30 * 60;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|