tm-hub-client
v1.0.8
Published
Unified TypeScript SDK for TM-Hub (IAM, Configs, Media, Notifications & Audit Logs)
Maintainers
Readme
tm-hub-client
Unified, isomorphic TypeScript Client SDK for TM-Hub (Centralized IAM, Remote Configs, Media Gateway, Push Notifications & Dedicated MongoDB Audit Logs).
Features
- Zero External Runtime Dependencies: Built entirely on native
fetchand modern Web APIs. - Dual ESM & CommonJS Build: Seamlessly works in Node.js, Electron, Nuxt, Vite, and modern browsers.
- First-Class TypeScript Support: 100% typed request payloads, responses, models, and error structures.
- Automatic Token & Tenant Injection: Automatically injects
X-App-IdandAuthorization: Bearer <token>. - Silent Refresh (optional): Pass
getRefreshToken+onTokensRefreshedto auto-retry once on 401. - Client-side Capability Helpers:
hub.capabilities.has()/canAccessApp()/load()with dual-read aliases (media.write↔media.upload,logs.read↔apps.logs.read). - Complete Module Coverage:
auth: Login, Register, Me, Permissions (JWT claims), Update Profile, Change Password, Refresh token, Logout, Dynamic Route Tree, List/Revoke Sessions.apps: List, Get, Create, Update, Delete (batch), Reorder.configs: Get Public Configs, Get App Public Configs, Get App Configs, Update App Configs.media: Cloudinary Upload Signatures, Folder Management, Asset Listing/Deletion & Renaming.notifications: List In-App Notifications, Mark as Read, Mark All Read, Batch Delete, Web Push Subscribe/Unsubscribe, Trigger Notifications.users: List (cursor pagination), Create, Update, and Delete app users.roles: Role & Permission Matrix CRUD operations.routes: Dynamic navigation system route management.permissions: Read-only global capability catalog (§6.4).docs: Reference docs content for the admin docs page (single source of truth lives in TM-Hub).connections: Per-app provider credentials (list, save manual, quick connect, test, disconnect, OAuth start).imports: Data import targets, preview, run and Google Sheets fetch (server-side proxy).ai: AI provider catalogue, credentials, model catalogue, discovery and grants (R147).logs/auditLogs: Query dedicated MongoDB audit history logs.
Hard delete endpoints (apps.delete, users.delete, roles.delete) require a root token on the TM-Hub server. Routes are soft-deleted server-side.
Installation
# Using pnpm
pnpm add tm-hub-client
# Using npm
npm install tm-hub-client
# Using yarn
yarn add tm-hub-clientQuick Start
import { createHubClient } from 'tm-hub-client'
const hub = createHubClient({
baseUrl: 'https://hub.yourdomain.com', // TM-Hub instance URL
appId: 'tm-tools', // Unique Satellite App identifier
getAccessToken: () => localStorage.getItem('accessToken'),
onUnauthorized: () => {
// Handler when response is 401
window.location.href = '/login'
}
})
// 1. Fetch Remote Application Configs
const { data: configs } = await hub.configs.getAll()
// 2. Update Configs (Triggers deep diff audit logging in TM-Hub)
await hub.configs.update({
APP_NAME: 'TM Tools Desktop',
CLOUDINARY_CLOUD_NAME: 'my-cloud'
})
// 3. Get Media Signature for direct Cloudinary upload
const { data: sig } = await hub.media.getSignature({ folder: 'avatars' })
// 4. Query Audit History from Dedicated MongoDB Logger
const { data: auditLogs } = await hub.logs.list({ limit: 20 })Nuxt 3/4 Composable Pattern
In your Nuxt project, create app/composables/useHub.ts:
import { createHubClient } from 'tm-hub-client'
export const useHub = () => {
const config = useRuntimeConfig()
const auth = useAuth()
const client = createHubClient({
baseUrl: config.public.hubUrl || 'http://localhost:4000',
appId: config.public.hubAppId || 'my-app',
getAccessToken: () => auth.accessToken.value,
onUnauthorized: () => {
auth.logout()
}
})
return {
client,
auth: client.auth,
apps: client.apps,
configs: client.configs,
media: client.media,
notifications: client.notifications,
users: client.users,
roles: client.roles,
routes: client.routes,
permissions: client.permissions,
capabilities: client.capabilities,
logs: client.logs
}
}Building & Publishing to npm
# 1. Build dual ESM + CJS bundles and type declarations
pnpm build
# 2. Dry run publish verification
npm pack --dry-run
# 3. Publish to npm public registry
npm publish --access publicLicense
MIT © tuanmjnh
