选择与构建 SDK
按调用环境选择能力包;现有 @mosaic-base 名称保持当前接口,产品名称是 Mosaic Base。
包与职责
- @mosaic-base/shell:按映射提供运行 SDK。client-sdk 组织站点/文章/词条等 MF 的实现与类型,应用不静态打包默认 SDK。
- auth.client 由选定的 Auth MF 提供,浏览器与请求级 Node 实例分开;AuthUI 显式接收该实例。
- @mosaic-base/server-sdk:Node服务身份、自省和服务间调用;@mosaic-base/platform-client:服务端文件上传、短链和环境能力。
- @mosaic-base/admin-embed:受控管理页面的握手、上下文变化和短期身份续期。
当前安装来源
仓库内使用workspace包;仓库外使用开发kit中的真实tarball、类型和启动胶水。内部依赖通过相对路径与按父包限定的overrides安装,项目生成自己的锁文件。公共npm尚未发布这些Mosaic版本;platform-client不属于首批kit。
Terminal
pnpm --version # pinned: 9.15.4
pnpm install --frozen-lockfile
pnpm --filter @mosaic-base/common build
pnpm --filter @mosaic-base/brand build
pnpm --filter @mosaic-base/permission build
pnpm --filter @mosaic-base/server-sdk build
pnpm --filter @mosaic-base/site-contract build
pnpm --filter @mosaic-base/shell build:mf
pnpm --filter @mosaic-base/client-sdk build:mf
pnpm --filter @mosaic-base/auth-sdk build:mf
pnpm --filter @mosaic-base/auth-ui build
pnpm --filter @mosaic-base/permission build
pnpm --filter @mosaic-base/server-sdk build
pnpm --filter @mosaic-base/platform-client build浏览器与服务端
浏览器使用同源 /api。SSR需要绝对API地址;公开读取不携带访客Cookie,认证客户端则按每个请求创建。服务密钥与server-sdk/platform-client不进入浏览器包。
TypeScript
import type { Shell } from '@mosaic-base/shell';
import type { ArticleSDK, SiteSDK, I18nSDK } from '@mosaic-base/client-sdk';
import type { AuthClient, ServerAuthClient } from '@mosaic-base/auth-sdk';
// Declare once in your application's type contract, never import SDK implementations.
declare module '@mosaic-base/shell/contracts' {
interface SdkRegistry {
'site.config': Pick<SiteSDK, 'getConfig'>;
'content.articles': Pick<ArticleSDK, 'list' | 'getBySlug' | 'getPreview' | 'search'>;
'i18n.messages': Pick<I18nSDK, 'load' | 't' | 'clearCache' | 'refresh'>;
'auth.client': AuthClient | ServerAuthClient;
}
}
import type { Bootstrap } from '@mosaic-base/shell';
import { startShell } from '@mosaic-base/shell/bootstrap';
import { createNodeModuleLoader } from '@mosaic-base/shell/node';
const loader = createNodeModuleLoader(); // modules may be shared, user SDK instances may not
export function createPublicReader(bootstrap: Bootstrap, apiBaseUrl: string) {
return startShell({ bootstrap, loader, host: { apiBaseUrl,
capabilityOptions: { 'i18n.messages': { cacheTtlMs: 0 } } } });
}
// Read protected Node bootstrap with server-sdk and explicit grant/owner.
// Create/dispose one Shell per SSR operation/request; public HTTP omits Cookie.
// Pass that startup configuration's browser projection to hydration.