@amaster.ai/client 1.1.10 β 1.1.12
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/README.md +43 -35
- package/dist/index.cjs +4 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +23 -12
- package/dist/index.d.ts +23 -12
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
- package/types/bpm.d.ts +30 -0
- package/types/index.d.ts +10 -2
- package/types/workflow.d.ts +3 -1
package/README.md
CHANGED
|
@@ -92,8 +92,8 @@ await client.auth.login({
|
|
|
92
92
|
|
|
93
93
|
// 3. Use any service - auth token is automatically attached!
|
|
94
94
|
const users = await client.entity.list("default", "users");
|
|
95
|
-
const tasks = await client.bpm.
|
|
96
|
-
const result = await client.workflow.
|
|
95
|
+
const tasks = await client.bpm.getTasks();
|
|
96
|
+
const result = await client.workflow.run("my-workflow", { data: "value" });
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
## π Authentication
|
|
@@ -168,6 +168,8 @@ if (result.success) {
|
|
|
168
168
|
}
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
+
`client.entity.list(...)` also accepts `limit` / `offset`, `__orders`, `__keywords`, `__relations`, `__fields`, and `__filter` from `EntityQueryParams`.
|
|
172
|
+
|
|
171
173
|
### Get Single Entity
|
|
172
174
|
|
|
173
175
|
```typescript
|
|
@@ -222,28 +224,24 @@ Manage business processes powered by Camunda 7.
|
|
|
222
224
|
### Start a Process
|
|
223
225
|
|
|
224
226
|
```typescript
|
|
225
|
-
const result = await client.bpm.startProcess({
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
variables: {
|
|
229
|
-
amount: 1000,
|
|
230
|
-
requester: "john@example.com",
|
|
231
|
-
},
|
|
227
|
+
const result = await client.bpm.startProcess("approval-process", {
|
|
228
|
+
amount: 1000,
|
|
229
|
+
requester: "john@example.com",
|
|
232
230
|
});
|
|
233
231
|
```
|
|
234
232
|
|
|
235
|
-
### Get
|
|
233
|
+
### Get Tasks
|
|
236
234
|
|
|
237
235
|
```typescript
|
|
238
|
-
const result = await client.bpm.
|
|
239
|
-
|
|
240
|
-
|
|
236
|
+
const result = await client.bpm.getTasks({
|
|
237
|
+
assignee: "user-123",
|
|
238
|
+
maxResults: 20,
|
|
241
239
|
sortBy: "created",
|
|
242
240
|
sortOrder: "desc",
|
|
243
241
|
});
|
|
244
242
|
|
|
245
|
-
if (result.
|
|
246
|
-
console.log("Tasks:", result.data
|
|
243
|
+
if (result.data) {
|
|
244
|
+
console.log("Tasks:", result.data);
|
|
247
245
|
}
|
|
248
246
|
```
|
|
249
247
|
|
|
@@ -256,10 +254,10 @@ await client.bpm.completeTask("task-id", {
|
|
|
256
254
|
});
|
|
257
255
|
```
|
|
258
256
|
|
|
259
|
-
###
|
|
257
|
+
### Delegate a Task
|
|
260
258
|
|
|
261
259
|
```typescript
|
|
262
|
-
await client.bpm.
|
|
260
|
+
await client.bpm.delegateTask("task-id", "manager-123");
|
|
263
261
|
```
|
|
264
262
|
|
|
265
263
|
## β‘ Workflow Execution
|
|
@@ -267,15 +265,13 @@ await client.bpm.claimTask("task-id");
|
|
|
267
265
|
Execute workflows and automation flows.
|
|
268
266
|
|
|
269
267
|
```typescript
|
|
270
|
-
const result = await client.workflow.
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
filters: { status: "active" },
|
|
274
|
-
},
|
|
268
|
+
const result = await client.workflow.run("data-processing-workflow", {
|
|
269
|
+
dataSource: "users",
|
|
270
|
+
filters: { status: "active" },
|
|
275
271
|
});
|
|
276
272
|
|
|
277
|
-
if (result.
|
|
278
|
-
console.log("Workflow result:", result.data);
|
|
273
|
+
if (result.data) {
|
|
274
|
+
console.log("Workflow result:", result.data.outputs);
|
|
279
275
|
}
|
|
280
276
|
```
|
|
281
277
|
|
|
@@ -570,7 +566,7 @@ if (result.data) {
|
|
|
570
566
|
|
|
571
567
|
## βοΈ S3 Storage
|
|
572
568
|
|
|
573
|
-
|
|
569
|
+
File upload, download, and metadata lookup.
|
|
574
570
|
|
|
575
571
|
```typescript
|
|
576
572
|
// Upload file
|
|
@@ -578,6 +574,9 @@ await client.s3.upload(file);
|
|
|
578
574
|
|
|
579
575
|
// Download file
|
|
580
576
|
await client.s3.download("path/to/file");
|
|
577
|
+
|
|
578
|
+
// Get object metadata
|
|
579
|
+
await client.s3.getMetadata("path/to/file");
|
|
581
580
|
```
|
|
582
581
|
|
|
583
582
|
## βοΈ Configuration
|
|
@@ -702,7 +701,7 @@ const client = createClient();
|
|
|
702
701
|
// One client, automatic token management
|
|
703
702
|
await client.auth.login({ email, password });
|
|
704
703
|
await client.entity.list("default", "users"); // Token automatically attached
|
|
705
|
-
await client.bpm.
|
|
704
|
+
await client.bpm.getTasks(); // Token automatically attached
|
|
706
705
|
```
|
|
707
706
|
|
|
708
707
|
## π API Reference
|
|
@@ -728,7 +727,7 @@ Full authentication API from `@amaster.ai/auth-client`:
|
|
|
728
727
|
|
|
729
728
|
Full CRUD API from `@amaster.ai/entity-client`:
|
|
730
729
|
|
|
731
|
-
- `list(source, entity, params?)` - List entities with pagination
|
|
730
|
+
- `list(source, entity, params?)` - List entities with pagination, filtering, sorting, and query params
|
|
732
731
|
- `get(source, entity, id)` - Get single entity
|
|
733
732
|
- `create(source, entity, data)` - Create new entity
|
|
734
733
|
- `update(source, entity, id, data)` - Update entity
|
|
@@ -741,20 +740,29 @@ Full CRUD API from `@amaster.ai/entity-client`:
|
|
|
741
740
|
|
|
742
741
|
Full BPM API from `@amaster.ai/bpm-client`:
|
|
743
742
|
|
|
744
|
-
- `startProcess(
|
|
745
|
-
- `
|
|
746
|
-
- `
|
|
747
|
-
- `
|
|
748
|
-
- `
|
|
743
|
+
- `startProcess(processKey, inputs?)` - Start process instance
|
|
744
|
+
- `getTasks(params?)` - Query tasks
|
|
745
|
+
- `getTaskCount(params?)` - Get task count
|
|
746
|
+
- `completeTask(taskId, variables)` - Complete a task
|
|
747
|
+
- `delegateTask(taskId, userId)` - Delegate a task
|
|
748
|
+
- `getProcessDefinitions(params?)` - Query process definitions
|
|
749
|
+
- `getHistoryTasks(params?)` - Query historical tasks
|
|
750
|
+
- `getRoles()` / `getUserRoles(userId)` - Query runtime roles
|
|
749
751
|
- And more...
|
|
750
752
|
|
|
751
753
|
### `client.workflow`
|
|
752
754
|
|
|
753
755
|
Workflow execution API from `@amaster.ai/workflow-client`:
|
|
754
756
|
|
|
755
|
-
- `
|
|
756
|
-
|
|
757
|
-
|
|
757
|
+
- `run(workflowName, inputs?)` - Run a workflow
|
|
758
|
+
|
|
759
|
+
### `client.s3`
|
|
760
|
+
|
|
761
|
+
S3 storage API:
|
|
762
|
+
|
|
763
|
+
- `upload(file)` - Upload file
|
|
764
|
+
- `download(path)` - Download file as a blob
|
|
765
|
+
- `getMetadata(key)` - Read object metadata
|
|
758
766
|
|
|
759
767
|
### `client.asr`
|
|
760
768
|
|
package/dist/index.cjs
CHANGED
|
@@ -15,6 +15,7 @@ var httpClient = require('@amaster.ai/http-client');
|
|
|
15
15
|
function createClient(options = {}) {
|
|
16
16
|
const {
|
|
17
17
|
baseURL,
|
|
18
|
+
env = "dev",
|
|
18
19
|
headers = {},
|
|
19
20
|
onUnauthorized,
|
|
20
21
|
onTokenExpired,
|
|
@@ -123,7 +124,9 @@ function createClient(options = {}) {
|
|
|
123
124
|
}
|
|
124
125
|
const entity = entityClient.createEntityClient(authenticatedHttpClient);
|
|
125
126
|
const bpm = bpmClient.createBpmClient(authenticatedHttpClient);
|
|
126
|
-
const workflow = workflowClient.createWorkflowClient(authenticatedHttpClient
|
|
127
|
+
const workflow = workflowClient.createWorkflowClient(authenticatedHttpClient, {
|
|
128
|
+
env
|
|
129
|
+
});
|
|
127
130
|
const functionClient$1 = functionClient.createFunctionClient(authenticatedHttpClient);
|
|
128
131
|
const copilot = copilotClient.createCopilotClient(
|
|
129
132
|
authenticatedHttpClient,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts"],"names":["createHttpClient","createAuthClient","createEntityClient","createBpmClient","createWorkflowClient","functionClient","createFunctionClient","createCopilotClient","createS3Client","createASRClient","createASRHttpClient","createTTSClient"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ============================================================================\n * @amaster.ai/client - Unified Amaster Client\n * ============================================================================\n *\n * Supabase-inspired unified API client for the Amaster platform\n *\n * Features:\n * - Single client instance for all services (auth, entity, bpm, workflow)\n * - Automatic token management and refresh\n * - Auto-attach authentication to all requests\n * - Centralized error handling\n *\n * @example\n * ```typescript\n * const client = createClient({\n * onUnauthorized: () => window.location.href = '/login'\n * });\n *\n * // Login\n * await client.auth.login({ email, password });\n *\n * // All subsequent requests automatically include auth token\n * await client.entity.list('default', 'users');\n * await client.bpm.startProcess({ processKey: 'approval' });\n * ```\n */\n\nimport { createAuthClient, type AuthClient } from \"@amaster.ai/auth-client\";\nimport { createEntityClient, type EntityClient } from \"@amaster.ai/entity-client\";\nimport { createBpmClient, type BpmClient } from \"@amaster.ai/bpm-client\";\nimport { createWorkflowClient, type WorkflowClient } from \"@amaster.ai/workflow-client\";\nimport {\n createASRClient,\n createASRHttpClient,\n type ASRClientConfig,\n type ASRClient,\n type ASRHttpClientConfig,\n type ASRHttpClient,\n} from \"@amaster.ai/asr-client\";\nimport { createCopilotClient, type CopilotClient } from \"@amaster.ai/copilot-client\";\nimport { createFunctionClient, type FunctionClient } from \"@amaster.ai/function-client\";\nimport { createTTSClient, TTSClientConfig, type TTSClient } from \"@amaster.ai/tts-client\";\nimport { createS3Client, type S3Client } from \"@amaster.ai/s3-client\";\nimport {\n createHttpClient,\n type HttpClient,\n type RequestConfig,\n type ClientResult,\n} from \"@amaster.ai/http-client\";\nimport type { AmasterClient, AmasterClientOptions } from \"./types\";\n\n/**\n * Create a unified Amaster client instance\n *\n * This function creates a single client that provides access to all Amaster services:\n * - Authentication (login, register, logout)\n * - Entity CRUD operations\n * - BPM (Business Process Management)\n * - Workflow execution\n *\n * All sub-clients automatically share the same HTTP client and authentication state,\n * ensuring that tokens are consistently attached to all requests.\n *\n * @param options - Client configuration options\n * @returns A unified Amaster client instance\n *\n * @example\n * ```typescript\n * // Basic usage\n * const client = createClient();\n *\n * // With authentication callbacks\n * const client = createClient({\n * onUnauthorized: () => {\n * // Redirect to login or show auth modal\n * window.location.href = '/login';\n * },\n * onTokenExpired: () => {\n * console.log('Token expired, refreshing...');\n * }\n * });\n *\n * // Login\n * await client.auth.login({\n * email: 'user@example.com',\n * password: 'password123'\n * });\n *\n * // Now all requests automatically include the auth token\n * const users = await client.entity.list('default', 'users');\n * const tasks = await client.bpm.getMyTasks();\n * ```\n */\nexport function createClient(options: AmasterClientOptions = {}): AmasterClient {\n const {\n baseURL,\n headers = {},\n onUnauthorized,\n onTokenExpired,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n } = options;\n\n // Create the base HTTP client\n const baseHttpClient = createHttpClient({\n baseURL,\n headers,\n runtime,\n });\n\n // Create the auth client first using the same base HTTP implementation so\n // mini-program request handling stays consistent across all modules.\n const auth: AuthClient = createAuthClient({\n baseURL,\n headers,\n onTokenExpired,\n onUnauthorized,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n });\n\n // Create a wrapper HTTP client that automatically adds the auth token\n const createAuthenticatedHttpClient = (): HttpClient => {\n // Track if we're currently refreshing to avoid multiple simultaneous refreshes\n let isRefreshing = false;\n let refreshPromise: Promise<boolean> | null = null;\n\n /**\n * Check if 401 error is due to token expiration\n * Traefik JWT plugin returns plain text like \"Jwt is expired\" or \"Token is expired\"\n */\n function isTokenExpired(result: ClientResult<unknown>): boolean {\n if (result.status !== 401) return false;\n\n // Check error message (could be from backend JSON response)\n if (result.error?.message && /expired/i.test(result.error.message)) {\n return true;\n }\n\n // Check error details (traefik returns plain text in details)\n if (result.error?.details) {\n const details = result.error.details;\n if (typeof details === \"string\" && /expired/i.test(details)) {\n return true;\n }\n // Also check if details is an object with message field\n if (typeof details === \"object\" && details !== null) {\n const detailsObj = details as Record<string, unknown>;\n if (typeof detailsObj.message === \"string\" && /expired/i.test(detailsObj.message)) {\n return true;\n }\n }\n }\n\n // Check raw data (could be plain text from traefik)\n if (typeof result.data === \"string\" && /expired/i.test(result.data)) {\n return true;\n }\n\n // If we have a token but got 401, assume it might be expired\n return !!auth.getAccessToken();\n }\n\n return {\n async request<T>(config: RequestConfig): Promise<ClientResult<T>> {\n // Get the current token from auth client\n const token = auth.getAccessToken();\n\n // Merge Authorization header with existing headers\n const authHeaders = token ? { Authorization: `Bearer ${token}` } : {};\n const mergedConfig: RequestConfig = {\n ...config,\n headers: {\n ...config.headers,\n ...authHeaders,\n },\n };\n\n // Make the request with the updated config\n let result = await baseHttpClient.request<T>(mergedConfig);\n\n // Handle 401 errors with automatic token refresh\n if (result.status === 401 && isTokenExpired(result)) {\n // Attempt to refresh token\n if (!isRefreshing) {\n isRefreshing = true;\n refreshPromise = (async () => {\n try {\n const refreshResult = await auth.refreshToken();\n return !!refreshResult.data;\n } finally {\n isRefreshing = false;\n refreshPromise = null;\n }\n })();\n }\n\n const refreshed = await refreshPromise;\n\n if (refreshed) {\n // Retry with new token\n const newToken = auth.getAccessToken();\n result = await baseHttpClient.request<T>({\n ...config,\n headers: {\n ...config.headers,\n ...(newToken ? { Authorization: `Bearer ${newToken}` } : {}),\n },\n });\n }\n }\n\n // Trigger unauthorized if still 401\n if (result.status === 401 && onUnauthorized) {\n onUnauthorized();\n }\n\n return result;\n },\n };\n };\n\n const authenticatedHttpClient = createAuthenticatedHttpClient();\n\n let cachedUserUid: string | null = null;\n\n auth.on(\"login\", (user: { uid?: string }) => {\n cachedUserUid = user?.uid ?? null;\n });\n auth.on(\"logout\", () => {\n cachedUserUid = null;\n });\n\n if (auth.isAuthenticated()) {\n auth\n .getMe()\n .then((result) => {\n if (result.data?.uid) {\n cachedUserUid = result.data.uid;\n }\n })\n .catch(() => {});\n }\n\n // Create other clients using the authenticated HTTP client\n const entity: EntityClient = createEntityClient(authenticatedHttpClient);\n const bpm: BpmClient = createBpmClient(authenticatedHttpClient);\n const workflow: WorkflowClient = createWorkflowClient(authenticatedHttpClient);\n const functionClient: FunctionClient = createFunctionClient(authenticatedHttpClient);\n const copilot: CopilotClient = createCopilotClient(\n authenticatedHttpClient,\n baseURL,\n () => auth.getAccessToken(),\n () => cachedUserUid\n );\n const s3: S3Client = createS3Client(authenticatedHttpClient);\n\n // ASR and TTS clients use WebSocket, pass token getter for authentication\n // Token can be appended to WebSocket URL as query parameter\n const asr: (config: ASRClientConfig) => ASRClient = createASRClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n const asrHttp: (config: ASRHttpClientConfig) => ASRHttpClient = createASRHttpClient({\n getAccessToken: () => auth.getAccessToken(),\n http: authenticatedHttpClient,\n });\n const tts: (config: TTSClientConfig) => TTSClient = createTTSClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n\n // Return unified client interface\n const client: AmasterClient = {\n auth,\n entity,\n bpm,\n workflow,\n asr,\n asrHttp,\n copilot,\n function: functionClient,\n tts,\n s3,\n http: authenticatedHttpClient,\n\n // Expose token management methods from auth client\n isAuthenticated: () => auth.isAuthenticated(),\n getAccessToken: () => auth.getAccessToken(),\n setAccessToken: (token: string) => auth.setAccessToken(token),\n clearAuth: () => auth.clearAuth(),\n };\n\n return client;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts"],"names":["createHttpClient","createAuthClient","createEntityClient","createBpmClient","createWorkflowClient","functionClient","createFunctionClient","createCopilotClient","createS3Client","createASRClient","createASRHttpClient","createTTSClient"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * ============================================================================\n * @amaster.ai/client - Unified Amaster Client\n * ============================================================================\n *\n * Supabase-inspired unified API client for the Amaster platform\n *\n * Features:\n * - Single client instance for all services (auth, entity, bpm, workflow)\n * - Automatic token management and refresh\n * - Auto-attach authentication to all requests\n * - Centralized error handling\n *\n * @example\n * ```typescript\n * const client = createClient({\n * onUnauthorized: () => window.location.href = '/login'\n * });\n *\n * // Login\n * await client.auth.login({ email, password });\n *\n * // All subsequent requests automatically include auth token\n * await client.entity.list('default', 'users');\n * await client.bpm.startProcess('approval', { amount: 1000 });\n * await client.bpm.getTasks({ assignee: 'currentUserId' });\n * ```\n */\n\nimport { createAuthClient, type AuthClient } from \"@amaster.ai/auth-client\";\nimport { createEntityClient, type EntityClient } from \"@amaster.ai/entity-client\";\nimport { createBpmClient, type BpmClient } from \"@amaster.ai/bpm-client\";\nimport { createWorkflowClient, type WorkflowClient } from \"@amaster.ai/workflow-client\";\nimport {\n createASRClient,\n createASRHttpClient,\n type ASRClientConfig,\n type ASRClient,\n type ASRHttpClientConfig,\n type ASRHttpClient,\n} from \"@amaster.ai/asr-client\";\nimport { createCopilotClient, type CopilotClient } from \"@amaster.ai/copilot-client\";\nimport { createFunctionClient, type FunctionClient } from \"@amaster.ai/function-client\";\nimport { createTTSClient, TTSClientConfig, type TTSClient } from \"@amaster.ai/tts-client\";\nimport { createS3Client, type S3Client } from \"@amaster.ai/s3-client\";\nimport {\n createHttpClient,\n type HttpClient,\n type RequestConfig,\n type ClientResult,\n} from \"@amaster.ai/http-client\";\nimport type { AmasterClient, AmasterClientOptions } from \"./types\";\n\n/**\n * Create a unified Amaster client instance\n *\n * This function creates a single client that provides access to all Amaster services:\n * - Authentication (login, register, logout)\n * - Entity CRUD operations\n * - BPM (Business Process Management)\n * - Workflow execution\n *\n * All sub-clients automatically share the same HTTP client and authentication state,\n * ensuring that tokens are consistently attached to all requests.\n *\n * @param options - Client configuration options\n * @returns A unified Amaster client instance\n *\n * @example\n * ```typescript\n * // Basic usage\n * const client = createClient();\n *\n * // With authentication callbacks\n * const client = createClient({\n * onUnauthorized: () => {\n * // Redirect to login or show auth modal\n * window.location.href = '/login';\n * },\n * onTokenExpired: () => {\n * console.log('Token expired, refreshing...');\n * }\n * });\n *\n * // Login\n * await client.auth.login({\n * email: 'user@example.com',\n * password: 'password123'\n * });\n *\n * // Now all requests automatically include the auth token\n * const users = await client.entity.list('default', 'users');\n * const tasks = await client.bpm.getTasks({ assignee: 'currentUserId' });\n * ```\n */\nexport function createClient(options: AmasterClientOptions = {}): AmasterClient {\n const {\n baseURL,\n env = \"dev\",\n headers = {},\n onUnauthorized,\n onTokenExpired,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n } = options;\n\n // Create the base HTTP client\n const baseHttpClient = createHttpClient({\n baseURL,\n headers,\n runtime,\n });\n\n // Create the auth client first using the same base HTTP implementation so\n // mini-program request handling stays consistent across all modules.\n const auth: AuthClient = createAuthClient({\n baseURL,\n headers,\n onTokenExpired,\n onUnauthorized,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n });\n\n // Create a wrapper HTTP client that automatically adds the auth token\n const createAuthenticatedHttpClient = (): HttpClient => {\n // Track if we're currently refreshing to avoid multiple simultaneous refreshes\n let isRefreshing = false;\n let refreshPromise: Promise<boolean> | null = null;\n\n /**\n * Check if 401 error is due to token expiration\n * Traefik JWT plugin returns plain text like \"Jwt is expired\" or \"Token is expired\"\n */\n function isTokenExpired(result: ClientResult<unknown>): boolean {\n if (result.status !== 401) return false;\n\n // Check error message (could be from backend JSON response)\n if (result.error?.message && /expired/i.test(result.error.message)) {\n return true;\n }\n\n // Check error details (traefik returns plain text in details)\n if (result.error?.details) {\n const details = result.error.details;\n if (typeof details === \"string\" && /expired/i.test(details)) {\n return true;\n }\n // Also check if details is an object with message field\n if (typeof details === \"object\" && details !== null) {\n const detailsObj = details as Record<string, unknown>;\n if (typeof detailsObj.message === \"string\" && /expired/i.test(detailsObj.message)) {\n return true;\n }\n }\n }\n\n // Check raw data (could be plain text from traefik)\n if (typeof result.data === \"string\" && /expired/i.test(result.data)) {\n return true;\n }\n\n // If we have a token but got 401, assume it might be expired\n return !!auth.getAccessToken();\n }\n\n return {\n async request<T>(config: RequestConfig): Promise<ClientResult<T>> {\n // Get the current token from auth client\n const token = auth.getAccessToken();\n\n // Merge Authorization header with existing headers\n const authHeaders = token ? { Authorization: `Bearer ${token}` } : {};\n const mergedConfig: RequestConfig = {\n ...config,\n headers: {\n ...config.headers,\n ...authHeaders,\n },\n };\n\n // Make the request with the updated config\n let result = await baseHttpClient.request<T>(mergedConfig);\n\n // Handle 401 errors with automatic token refresh\n if (result.status === 401 && isTokenExpired(result)) {\n // Attempt to refresh token\n if (!isRefreshing) {\n isRefreshing = true;\n refreshPromise = (async () => {\n try {\n const refreshResult = await auth.refreshToken();\n return !!refreshResult.data;\n } finally {\n isRefreshing = false;\n refreshPromise = null;\n }\n })();\n }\n\n const refreshed = await refreshPromise;\n\n if (refreshed) {\n // Retry with new token\n const newToken = auth.getAccessToken();\n result = await baseHttpClient.request<T>({\n ...config,\n headers: {\n ...config.headers,\n ...(newToken ? { Authorization: `Bearer ${newToken}` } : {}),\n },\n });\n }\n }\n\n // Trigger unauthorized if still 401\n if (result.status === 401 && onUnauthorized) {\n onUnauthorized();\n }\n\n return result;\n },\n };\n };\n\n const authenticatedHttpClient = createAuthenticatedHttpClient();\n\n let cachedUserUid: string | null = null;\n\n auth.on(\"login\", (user: { uid?: string }) => {\n cachedUserUid = user?.uid ?? null;\n });\n auth.on(\"logout\", () => {\n cachedUserUid = null;\n });\n\n if (auth.isAuthenticated()) {\n auth\n .getMe()\n .then((result) => {\n if (result.data?.uid) {\n cachedUserUid = result.data.uid;\n }\n })\n .catch(() => {});\n }\n\n // Create other clients using the authenticated HTTP client\n const entity: EntityClient = createEntityClient(authenticatedHttpClient);\n const bpm: BpmClient = createBpmClient(authenticatedHttpClient);\n const workflow: WorkflowClient = createWorkflowClient(authenticatedHttpClient, {\n env,\n });\n const functionClient: FunctionClient = createFunctionClient(authenticatedHttpClient);\n const copilot: CopilotClient = createCopilotClient(\n authenticatedHttpClient,\n baseURL,\n () => auth.getAccessToken(),\n () => cachedUserUid\n );\n const s3: S3Client = createS3Client(authenticatedHttpClient);\n\n // ASR and TTS clients use WebSocket, pass token getter for authentication\n // Token can be appended to WebSocket URL as query parameter\n const asr: (config: ASRClientConfig) => ASRClient = createASRClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n const asrHttp: (config: ASRHttpClientConfig) => ASRHttpClient = createASRHttpClient({\n getAccessToken: () => auth.getAccessToken(),\n http: authenticatedHttpClient,\n });\n const tts: (config: TTSClientConfig) => TTSClient = createTTSClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n\n // Return unified client interface\n const client: AmasterClient = {\n auth,\n entity,\n bpm,\n workflow,\n asr,\n asrHttp,\n copilot,\n function: functionClient,\n tts,\n s3,\n http: authenticatedHttpClient,\n\n // Expose token management methods from auth client\n isAuthenticated: () => auth.isAuthenticated(),\n getAccessToken: () => auth.getAccessToken(),\n setAccessToken: (token: string) => auth.setAccessToken(token),\n clearAuth: () => auth.clearAuth(),\n };\n\n return client;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -33,6 +33,14 @@ interface AmasterClientOptions {
|
|
|
33
33
|
* @example 'https://api.amaster.ai'
|
|
34
34
|
*/
|
|
35
35
|
baseURL?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Runtime environment identifier.
|
|
38
|
+
* Used for request headers such as `x-env` and injected into workflow inputs
|
|
39
|
+
* when `workflow.run(...)` needs environment-aware downstream calls.
|
|
40
|
+
*
|
|
41
|
+
* @default "dev"
|
|
42
|
+
*/
|
|
43
|
+
env?: string;
|
|
36
44
|
/**
|
|
37
45
|
* Optional custom headers to include in all requests
|
|
38
46
|
*/
|
|
@@ -141,13 +149,12 @@ interface AmasterClient {
|
|
|
141
149
|
* @example
|
|
142
150
|
* ```typescript
|
|
143
151
|
* // Start a process
|
|
144
|
-
* await client.bpm.startProcess({
|
|
145
|
-
*
|
|
146
|
-
* variables: { amount: 1000 }
|
|
152
|
+
* await client.bpm.startProcess('approval-process', {
|
|
153
|
+
* amount: 1000
|
|
147
154
|
* });
|
|
148
155
|
*
|
|
149
|
-
* // Get
|
|
150
|
-
* const tasks = await client.bpm.
|
|
156
|
+
* // Get tasks
|
|
157
|
+
* const tasks = await client.bpm.getTasks({ assignee: 'currentUserId' });
|
|
151
158
|
*
|
|
152
159
|
* // Complete a task
|
|
153
160
|
* await client.bpm.completeTask(taskId, { approved: true });
|
|
@@ -159,9 +166,9 @@ interface AmasterClient {
|
|
|
159
166
|
*
|
|
160
167
|
* @example
|
|
161
168
|
* ```typescript
|
|
162
|
-
* //
|
|
163
|
-
* const result = await client.workflow.
|
|
164
|
-
*
|
|
169
|
+
* // Run a workflow
|
|
170
|
+
* const result = await client.workflow.run('my-workflow', {
|
|
171
|
+
* data: 'value'
|
|
165
172
|
* });
|
|
166
173
|
* ```
|
|
167
174
|
*/
|
|
@@ -296,8 +303,11 @@ interface AmasterClient {
|
|
|
296
303
|
* // Upload file
|
|
297
304
|
* await client.s3.upload(file);
|
|
298
305
|
*
|
|
299
|
-
|
|
300
|
-
|
|
306
|
+
* // Download file
|
|
307
|
+
* await client.s3.download('path/to/file');
|
|
308
|
+
*
|
|
309
|
+
* // Read metadata
|
|
310
|
+
* await client.s3.getMetadata('path/to/file');
|
|
301
311
|
* ```
|
|
302
312
|
*/
|
|
303
313
|
s3: S3Client;
|
|
@@ -376,7 +386,8 @@ interface AmasterClient {
|
|
|
376
386
|
*
|
|
377
387
|
* // All subsequent requests automatically include auth token
|
|
378
388
|
* await client.entity.list('default', 'users');
|
|
379
|
-
* await client.bpm.startProcess({
|
|
389
|
+
* await client.bpm.startProcess('approval', { amount: 1000 });
|
|
390
|
+
* await client.bpm.getTasks({ assignee: 'currentUserId' });
|
|
380
391
|
* ```
|
|
381
392
|
*/
|
|
382
393
|
|
|
@@ -419,7 +430,7 @@ interface AmasterClient {
|
|
|
419
430
|
*
|
|
420
431
|
* // Now all requests automatically include the auth token
|
|
421
432
|
* const users = await client.entity.list('default', 'users');
|
|
422
|
-
* const tasks = await client.bpm.
|
|
433
|
+
* const tasks = await client.bpm.getTasks({ assignee: 'currentUserId' });
|
|
423
434
|
* ```
|
|
424
435
|
*/
|
|
425
436
|
declare function createClient(options?: AmasterClientOptions): AmasterClient;
|
package/dist/index.d.ts
CHANGED
|
@@ -33,6 +33,14 @@ interface AmasterClientOptions {
|
|
|
33
33
|
* @example 'https://api.amaster.ai'
|
|
34
34
|
*/
|
|
35
35
|
baseURL?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Runtime environment identifier.
|
|
38
|
+
* Used for request headers such as `x-env` and injected into workflow inputs
|
|
39
|
+
* when `workflow.run(...)` needs environment-aware downstream calls.
|
|
40
|
+
*
|
|
41
|
+
* @default "dev"
|
|
42
|
+
*/
|
|
43
|
+
env?: string;
|
|
36
44
|
/**
|
|
37
45
|
* Optional custom headers to include in all requests
|
|
38
46
|
*/
|
|
@@ -141,13 +149,12 @@ interface AmasterClient {
|
|
|
141
149
|
* @example
|
|
142
150
|
* ```typescript
|
|
143
151
|
* // Start a process
|
|
144
|
-
* await client.bpm.startProcess({
|
|
145
|
-
*
|
|
146
|
-
* variables: { amount: 1000 }
|
|
152
|
+
* await client.bpm.startProcess('approval-process', {
|
|
153
|
+
* amount: 1000
|
|
147
154
|
* });
|
|
148
155
|
*
|
|
149
|
-
* // Get
|
|
150
|
-
* const tasks = await client.bpm.
|
|
156
|
+
* // Get tasks
|
|
157
|
+
* const tasks = await client.bpm.getTasks({ assignee: 'currentUserId' });
|
|
151
158
|
*
|
|
152
159
|
* // Complete a task
|
|
153
160
|
* await client.bpm.completeTask(taskId, { approved: true });
|
|
@@ -159,9 +166,9 @@ interface AmasterClient {
|
|
|
159
166
|
*
|
|
160
167
|
* @example
|
|
161
168
|
* ```typescript
|
|
162
|
-
* //
|
|
163
|
-
* const result = await client.workflow.
|
|
164
|
-
*
|
|
169
|
+
* // Run a workflow
|
|
170
|
+
* const result = await client.workflow.run('my-workflow', {
|
|
171
|
+
* data: 'value'
|
|
165
172
|
* });
|
|
166
173
|
* ```
|
|
167
174
|
*/
|
|
@@ -296,8 +303,11 @@ interface AmasterClient {
|
|
|
296
303
|
* // Upload file
|
|
297
304
|
* await client.s3.upload(file);
|
|
298
305
|
*
|
|
299
|
-
|
|
300
|
-
|
|
306
|
+
* // Download file
|
|
307
|
+
* await client.s3.download('path/to/file');
|
|
308
|
+
*
|
|
309
|
+
* // Read metadata
|
|
310
|
+
* await client.s3.getMetadata('path/to/file');
|
|
301
311
|
* ```
|
|
302
312
|
*/
|
|
303
313
|
s3: S3Client;
|
|
@@ -376,7 +386,8 @@ interface AmasterClient {
|
|
|
376
386
|
*
|
|
377
387
|
* // All subsequent requests automatically include auth token
|
|
378
388
|
* await client.entity.list('default', 'users');
|
|
379
|
-
* await client.bpm.startProcess({
|
|
389
|
+
* await client.bpm.startProcess('approval', { amount: 1000 });
|
|
390
|
+
* await client.bpm.getTasks({ assignee: 'currentUserId' });
|
|
380
391
|
* ```
|
|
381
392
|
*/
|
|
382
393
|
|
|
@@ -419,7 +430,7 @@ interface AmasterClient {
|
|
|
419
430
|
*
|
|
420
431
|
* // Now all requests automatically include the auth token
|
|
421
432
|
* const users = await client.entity.list('default', 'users');
|
|
422
|
-
* const tasks = await client.bpm.
|
|
433
|
+
* const tasks = await client.bpm.getTasks({ assignee: 'currentUserId' });
|
|
423
434
|
* ```
|
|
424
435
|
*/
|
|
425
436
|
declare function createClient(options?: AmasterClientOptions): AmasterClient;
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { createHttpClient } from '@amaster.ai/http-client';
|
|
|
15
15
|
function createClient(options = {}) {
|
|
16
16
|
const {
|
|
17
17
|
baseURL,
|
|
18
|
+
env = "dev",
|
|
18
19
|
headers = {},
|
|
19
20
|
onUnauthorized,
|
|
20
21
|
onTokenExpired,
|
|
@@ -123,7 +124,9 @@ function createClient(options = {}) {
|
|
|
123
124
|
}
|
|
124
125
|
const entity = createEntityClient(authenticatedHttpClient);
|
|
125
126
|
const bpm = createBpmClient(authenticatedHttpClient);
|
|
126
|
-
const workflow = createWorkflowClient(authenticatedHttpClient
|
|
127
|
+
const workflow = createWorkflowClient(authenticatedHttpClient, {
|
|
128
|
+
env
|
|
129
|
+
});
|
|
127
130
|
const functionClient = createFunctionClient(authenticatedHttpClient);
|
|
128
131
|
const copilot = createCopilotClient(
|
|
129
132
|
authenticatedHttpClient,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ============================================================================\n * @amaster.ai/client - Unified Amaster Client\n * ============================================================================\n *\n * Supabase-inspired unified API client for the Amaster platform\n *\n * Features:\n * - Single client instance for all services (auth, entity, bpm, workflow)\n * - Automatic token management and refresh\n * - Auto-attach authentication to all requests\n * - Centralized error handling\n *\n * @example\n * ```typescript\n * const client = createClient({\n * onUnauthorized: () => window.location.href = '/login'\n * });\n *\n * // Login\n * await client.auth.login({ email, password });\n *\n * // All subsequent requests automatically include auth token\n * await client.entity.list('default', 'users');\n * await client.bpm.startProcess({ processKey: 'approval' });\n * ```\n */\n\nimport { createAuthClient, type AuthClient } from \"@amaster.ai/auth-client\";\nimport { createEntityClient, type EntityClient } from \"@amaster.ai/entity-client\";\nimport { createBpmClient, type BpmClient } from \"@amaster.ai/bpm-client\";\nimport { createWorkflowClient, type WorkflowClient } from \"@amaster.ai/workflow-client\";\nimport {\n createASRClient,\n createASRHttpClient,\n type ASRClientConfig,\n type ASRClient,\n type ASRHttpClientConfig,\n type ASRHttpClient,\n} from \"@amaster.ai/asr-client\";\nimport { createCopilotClient, type CopilotClient } from \"@amaster.ai/copilot-client\";\nimport { createFunctionClient, type FunctionClient } from \"@amaster.ai/function-client\";\nimport { createTTSClient, TTSClientConfig, type TTSClient } from \"@amaster.ai/tts-client\";\nimport { createS3Client, type S3Client } from \"@amaster.ai/s3-client\";\nimport {\n createHttpClient,\n type HttpClient,\n type RequestConfig,\n type ClientResult,\n} from \"@amaster.ai/http-client\";\nimport type { AmasterClient, AmasterClientOptions } from \"./types\";\n\n/**\n * Create a unified Amaster client instance\n *\n * This function creates a single client that provides access to all Amaster services:\n * - Authentication (login, register, logout)\n * - Entity CRUD operations\n * - BPM (Business Process Management)\n * - Workflow execution\n *\n * All sub-clients automatically share the same HTTP client and authentication state,\n * ensuring that tokens are consistently attached to all requests.\n *\n * @param options - Client configuration options\n * @returns A unified Amaster client instance\n *\n * @example\n * ```typescript\n * // Basic usage\n * const client = createClient();\n *\n * // With authentication callbacks\n * const client = createClient({\n * onUnauthorized: () => {\n * // Redirect to login or show auth modal\n * window.location.href = '/login';\n * },\n * onTokenExpired: () => {\n * console.log('Token expired, refreshing...');\n * }\n * });\n *\n * // Login\n * await client.auth.login({\n * email: 'user@example.com',\n * password: 'password123'\n * });\n *\n * // Now all requests automatically include the auth token\n * const users = await client.entity.list('default', 'users');\n * const tasks = await client.bpm.getMyTasks();\n * ```\n */\nexport function createClient(options: AmasterClientOptions = {}): AmasterClient {\n const {\n baseURL,\n headers = {},\n onUnauthorized,\n onTokenExpired,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n } = options;\n\n // Create the base HTTP client\n const baseHttpClient = createHttpClient({\n baseURL,\n headers,\n runtime,\n });\n\n // Create the auth client first using the same base HTTP implementation so\n // mini-program request handling stays consistent across all modules.\n const auth: AuthClient = createAuthClient({\n baseURL,\n headers,\n onTokenExpired,\n onUnauthorized,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n });\n\n // Create a wrapper HTTP client that automatically adds the auth token\n const createAuthenticatedHttpClient = (): HttpClient => {\n // Track if we're currently refreshing to avoid multiple simultaneous refreshes\n let isRefreshing = false;\n let refreshPromise: Promise<boolean> | null = null;\n\n /**\n * Check if 401 error is due to token expiration\n * Traefik JWT plugin returns plain text like \"Jwt is expired\" or \"Token is expired\"\n */\n function isTokenExpired(result: ClientResult<unknown>): boolean {\n if (result.status !== 401) return false;\n\n // Check error message (could be from backend JSON response)\n if (result.error?.message && /expired/i.test(result.error.message)) {\n return true;\n }\n\n // Check error details (traefik returns plain text in details)\n if (result.error?.details) {\n const details = result.error.details;\n if (typeof details === \"string\" && /expired/i.test(details)) {\n return true;\n }\n // Also check if details is an object with message field\n if (typeof details === \"object\" && details !== null) {\n const detailsObj = details as Record<string, unknown>;\n if (typeof detailsObj.message === \"string\" && /expired/i.test(detailsObj.message)) {\n return true;\n }\n }\n }\n\n // Check raw data (could be plain text from traefik)\n if (typeof result.data === \"string\" && /expired/i.test(result.data)) {\n return true;\n }\n\n // If we have a token but got 401, assume it might be expired\n return !!auth.getAccessToken();\n }\n\n return {\n async request<T>(config: RequestConfig): Promise<ClientResult<T>> {\n // Get the current token from auth client\n const token = auth.getAccessToken();\n\n // Merge Authorization header with existing headers\n const authHeaders = token ? { Authorization: `Bearer ${token}` } : {};\n const mergedConfig: RequestConfig = {\n ...config,\n headers: {\n ...config.headers,\n ...authHeaders,\n },\n };\n\n // Make the request with the updated config\n let result = await baseHttpClient.request<T>(mergedConfig);\n\n // Handle 401 errors with automatic token refresh\n if (result.status === 401 && isTokenExpired(result)) {\n // Attempt to refresh token\n if (!isRefreshing) {\n isRefreshing = true;\n refreshPromise = (async () => {\n try {\n const refreshResult = await auth.refreshToken();\n return !!refreshResult.data;\n } finally {\n isRefreshing = false;\n refreshPromise = null;\n }\n })();\n }\n\n const refreshed = await refreshPromise;\n\n if (refreshed) {\n // Retry with new token\n const newToken = auth.getAccessToken();\n result = await baseHttpClient.request<T>({\n ...config,\n headers: {\n ...config.headers,\n ...(newToken ? { Authorization: `Bearer ${newToken}` } : {}),\n },\n });\n }\n }\n\n // Trigger unauthorized if still 401\n if (result.status === 401 && onUnauthorized) {\n onUnauthorized();\n }\n\n return result;\n },\n };\n };\n\n const authenticatedHttpClient = createAuthenticatedHttpClient();\n\n let cachedUserUid: string | null = null;\n\n auth.on(\"login\", (user: { uid?: string }) => {\n cachedUserUid = user?.uid ?? null;\n });\n auth.on(\"logout\", () => {\n cachedUserUid = null;\n });\n\n if (auth.isAuthenticated()) {\n auth\n .getMe()\n .then((result) => {\n if (result.data?.uid) {\n cachedUserUid = result.data.uid;\n }\n })\n .catch(() => {});\n }\n\n // Create other clients using the authenticated HTTP client\n const entity: EntityClient = createEntityClient(authenticatedHttpClient);\n const bpm: BpmClient = createBpmClient(authenticatedHttpClient);\n const workflow: WorkflowClient = createWorkflowClient(authenticatedHttpClient);\n const functionClient: FunctionClient = createFunctionClient(authenticatedHttpClient);\n const copilot: CopilotClient = createCopilotClient(\n authenticatedHttpClient,\n baseURL,\n () => auth.getAccessToken(),\n () => cachedUserUid\n );\n const s3: S3Client = createS3Client(authenticatedHttpClient);\n\n // ASR and TTS clients use WebSocket, pass token getter for authentication\n // Token can be appended to WebSocket URL as query parameter\n const asr: (config: ASRClientConfig) => ASRClient = createASRClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n const asrHttp: (config: ASRHttpClientConfig) => ASRHttpClient = createASRHttpClient({\n getAccessToken: () => auth.getAccessToken(),\n http: authenticatedHttpClient,\n });\n const tts: (config: TTSClientConfig) => TTSClient = createTTSClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n\n // Return unified client interface\n const client: AmasterClient = {\n auth,\n entity,\n bpm,\n workflow,\n asr,\n asrHttp,\n copilot,\n function: functionClient,\n tts,\n s3,\n http: authenticatedHttpClient,\n\n // Expose token management methods from auth client\n isAuthenticated: () => auth.isAuthenticated(),\n getAccessToken: () => auth.getAccessToken(),\n setAccessToken: (token: string) => auth.setAccessToken(token),\n clearAuth: () => auth.clearAuth(),\n };\n\n return client;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ============================================================================\n * @amaster.ai/client - Unified Amaster Client\n * ============================================================================\n *\n * Supabase-inspired unified API client for the Amaster platform\n *\n * Features:\n * - Single client instance for all services (auth, entity, bpm, workflow)\n * - Automatic token management and refresh\n * - Auto-attach authentication to all requests\n * - Centralized error handling\n *\n * @example\n * ```typescript\n * const client = createClient({\n * onUnauthorized: () => window.location.href = '/login'\n * });\n *\n * // Login\n * await client.auth.login({ email, password });\n *\n * // All subsequent requests automatically include auth token\n * await client.entity.list('default', 'users');\n * await client.bpm.startProcess('approval', { amount: 1000 });\n * await client.bpm.getTasks({ assignee: 'currentUserId' });\n * ```\n */\n\nimport { createAuthClient, type AuthClient } from \"@amaster.ai/auth-client\";\nimport { createEntityClient, type EntityClient } from \"@amaster.ai/entity-client\";\nimport { createBpmClient, type BpmClient } from \"@amaster.ai/bpm-client\";\nimport { createWorkflowClient, type WorkflowClient } from \"@amaster.ai/workflow-client\";\nimport {\n createASRClient,\n createASRHttpClient,\n type ASRClientConfig,\n type ASRClient,\n type ASRHttpClientConfig,\n type ASRHttpClient,\n} from \"@amaster.ai/asr-client\";\nimport { createCopilotClient, type CopilotClient } from \"@amaster.ai/copilot-client\";\nimport { createFunctionClient, type FunctionClient } from \"@amaster.ai/function-client\";\nimport { createTTSClient, TTSClientConfig, type TTSClient } from \"@amaster.ai/tts-client\";\nimport { createS3Client, type S3Client } from \"@amaster.ai/s3-client\";\nimport {\n createHttpClient,\n type HttpClient,\n type RequestConfig,\n type ClientResult,\n} from \"@amaster.ai/http-client\";\nimport type { AmasterClient, AmasterClientOptions } from \"./types\";\n\n/**\n * Create a unified Amaster client instance\n *\n * This function creates a single client that provides access to all Amaster services:\n * - Authentication (login, register, logout)\n * - Entity CRUD operations\n * - BPM (Business Process Management)\n * - Workflow execution\n *\n * All sub-clients automatically share the same HTTP client and authentication state,\n * ensuring that tokens are consistently attached to all requests.\n *\n * @param options - Client configuration options\n * @returns A unified Amaster client instance\n *\n * @example\n * ```typescript\n * // Basic usage\n * const client = createClient();\n *\n * // With authentication callbacks\n * const client = createClient({\n * onUnauthorized: () => {\n * // Redirect to login or show auth modal\n * window.location.href = '/login';\n * },\n * onTokenExpired: () => {\n * console.log('Token expired, refreshing...');\n * }\n * });\n *\n * // Login\n * await client.auth.login({\n * email: 'user@example.com',\n * password: 'password123'\n * });\n *\n * // Now all requests automatically include the auth token\n * const users = await client.entity.list('default', 'users');\n * const tasks = await client.bpm.getTasks({ assignee: 'currentUserId' });\n * ```\n */\nexport function createClient(options: AmasterClientOptions = {}): AmasterClient {\n const {\n baseURL,\n env = \"dev\",\n headers = {},\n onUnauthorized,\n onTokenExpired,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n } = options;\n\n // Create the base HTTP client\n const baseHttpClient = createHttpClient({\n baseURL,\n headers,\n runtime,\n });\n\n // Create the auth client first using the same base HTTP implementation so\n // mini-program request handling stays consistent across all modules.\n const auth: AuthClient = createAuthClient({\n baseURL,\n headers,\n onTokenExpired,\n onUnauthorized,\n autoHandleOAuthCallback,\n autoRedirectAfterLogin,\n runtime,\n });\n\n // Create a wrapper HTTP client that automatically adds the auth token\n const createAuthenticatedHttpClient = (): HttpClient => {\n // Track if we're currently refreshing to avoid multiple simultaneous refreshes\n let isRefreshing = false;\n let refreshPromise: Promise<boolean> | null = null;\n\n /**\n * Check if 401 error is due to token expiration\n * Traefik JWT plugin returns plain text like \"Jwt is expired\" or \"Token is expired\"\n */\n function isTokenExpired(result: ClientResult<unknown>): boolean {\n if (result.status !== 401) return false;\n\n // Check error message (could be from backend JSON response)\n if (result.error?.message && /expired/i.test(result.error.message)) {\n return true;\n }\n\n // Check error details (traefik returns plain text in details)\n if (result.error?.details) {\n const details = result.error.details;\n if (typeof details === \"string\" && /expired/i.test(details)) {\n return true;\n }\n // Also check if details is an object with message field\n if (typeof details === \"object\" && details !== null) {\n const detailsObj = details as Record<string, unknown>;\n if (typeof detailsObj.message === \"string\" && /expired/i.test(detailsObj.message)) {\n return true;\n }\n }\n }\n\n // Check raw data (could be plain text from traefik)\n if (typeof result.data === \"string\" && /expired/i.test(result.data)) {\n return true;\n }\n\n // If we have a token but got 401, assume it might be expired\n return !!auth.getAccessToken();\n }\n\n return {\n async request<T>(config: RequestConfig): Promise<ClientResult<T>> {\n // Get the current token from auth client\n const token = auth.getAccessToken();\n\n // Merge Authorization header with existing headers\n const authHeaders = token ? { Authorization: `Bearer ${token}` } : {};\n const mergedConfig: RequestConfig = {\n ...config,\n headers: {\n ...config.headers,\n ...authHeaders,\n },\n };\n\n // Make the request with the updated config\n let result = await baseHttpClient.request<T>(mergedConfig);\n\n // Handle 401 errors with automatic token refresh\n if (result.status === 401 && isTokenExpired(result)) {\n // Attempt to refresh token\n if (!isRefreshing) {\n isRefreshing = true;\n refreshPromise = (async () => {\n try {\n const refreshResult = await auth.refreshToken();\n return !!refreshResult.data;\n } finally {\n isRefreshing = false;\n refreshPromise = null;\n }\n })();\n }\n\n const refreshed = await refreshPromise;\n\n if (refreshed) {\n // Retry with new token\n const newToken = auth.getAccessToken();\n result = await baseHttpClient.request<T>({\n ...config,\n headers: {\n ...config.headers,\n ...(newToken ? { Authorization: `Bearer ${newToken}` } : {}),\n },\n });\n }\n }\n\n // Trigger unauthorized if still 401\n if (result.status === 401 && onUnauthorized) {\n onUnauthorized();\n }\n\n return result;\n },\n };\n };\n\n const authenticatedHttpClient = createAuthenticatedHttpClient();\n\n let cachedUserUid: string | null = null;\n\n auth.on(\"login\", (user: { uid?: string }) => {\n cachedUserUid = user?.uid ?? null;\n });\n auth.on(\"logout\", () => {\n cachedUserUid = null;\n });\n\n if (auth.isAuthenticated()) {\n auth\n .getMe()\n .then((result) => {\n if (result.data?.uid) {\n cachedUserUid = result.data.uid;\n }\n })\n .catch(() => {});\n }\n\n // Create other clients using the authenticated HTTP client\n const entity: EntityClient = createEntityClient(authenticatedHttpClient);\n const bpm: BpmClient = createBpmClient(authenticatedHttpClient);\n const workflow: WorkflowClient = createWorkflowClient(authenticatedHttpClient, {\n env,\n });\n const functionClient: FunctionClient = createFunctionClient(authenticatedHttpClient);\n const copilot: CopilotClient = createCopilotClient(\n authenticatedHttpClient,\n baseURL,\n () => auth.getAccessToken(),\n () => cachedUserUid\n );\n const s3: S3Client = createS3Client(authenticatedHttpClient);\n\n // ASR and TTS clients use WebSocket, pass token getter for authentication\n // Token can be appended to WebSocket URL as query parameter\n const asr: (config: ASRClientConfig) => ASRClient = createASRClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n const asrHttp: (config: ASRHttpClientConfig) => ASRHttpClient = createASRHttpClient({\n getAccessToken: () => auth.getAccessToken(),\n http: authenticatedHttpClient,\n });\n const tts: (config: TTSClientConfig) => TTSClient = createTTSClient({\n getAccessToken: () => auth.getAccessToken(),\n });\n\n // Return unified client interface\n const client: AmasterClient = {\n auth,\n entity,\n bpm,\n workflow,\n asr,\n asrHttp,\n copilot,\n function: functionClient,\n tts,\n s3,\n http: authenticatedHttpClient,\n\n // Expose token management methods from auth client\n isAuthenticated: () => auth.isAuthenticated(),\n getAccessToken: () => auth.getAccessToken(),\n setAccessToken: (token: string) => auth.setAccessToken(token),\n clearAuth: () => auth.clearAuth(),\n };\n\n return client;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/client",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.12",
|
|
4
4
|
"description": "Unified API client for Amaster platform - All services in one package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -72,16 +72,16 @@
|
|
|
72
72
|
"registry": "https://registry.npmjs.org/"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@amaster.ai/asr-client": "1.1.
|
|
76
|
-
"@amaster.ai/
|
|
77
|
-
"@amaster.ai/
|
|
78
|
-
"@amaster.ai/
|
|
79
|
-
"@amaster.ai/
|
|
80
|
-
"@amaster.ai/
|
|
81
|
-
"@amaster.ai/
|
|
82
|
-
"@amaster.ai/
|
|
83
|
-
"@amaster.ai/tts-client": "1.1.
|
|
84
|
-
"@amaster.ai/workflow-client": "1.1.
|
|
75
|
+
"@amaster.ai/asr-client": "1.1.12",
|
|
76
|
+
"@amaster.ai/auth-client": "1.1.12",
|
|
77
|
+
"@amaster.ai/bpm-client": "1.1.12",
|
|
78
|
+
"@amaster.ai/copilot-client": "1.1.12",
|
|
79
|
+
"@amaster.ai/function-client": "1.1.12",
|
|
80
|
+
"@amaster.ai/http-client": "1.1.12",
|
|
81
|
+
"@amaster.ai/s3-client": "1.1.12",
|
|
82
|
+
"@amaster.ai/entity-client": "1.1.12",
|
|
83
|
+
"@amaster.ai/tts-client": "1.1.12",
|
|
84
|
+
"@amaster.ai/workflow-client": "1.1.12"
|
|
85
85
|
},
|
|
86
86
|
"peerDependencies": {
|
|
87
87
|
"axios": "^1.11.0"
|
package/types/bpm.d.ts
CHANGED
|
@@ -445,6 +445,22 @@ export interface BpmClientAPI {
|
|
|
445
445
|
params?: { skipCustomListeners?: boolean }
|
|
446
446
|
): Promise<ClientResult<null>>;
|
|
447
447
|
|
|
448
|
+
/**
|
|
449
|
+
* Get currently active activity instances for a process instance
|
|
450
|
+
*
|
|
451
|
+
* @param processInstanceId - Process instance ID
|
|
452
|
+
* @returns Array of active activity instances
|
|
453
|
+
*
|
|
454
|
+
* @example
|
|
455
|
+
* ```typescript
|
|
456
|
+
* const result = await client.bpm.getActiveActivities('proc-123');
|
|
457
|
+
* result.data?.forEach((activity) => {
|
|
458
|
+
* console.log(activity.activityId, activity.activityName);
|
|
459
|
+
* });
|
|
460
|
+
* ```
|
|
461
|
+
*/
|
|
462
|
+
getActiveActivities(processInstanceId: string): Promise<ClientResult<ActivityInstance[]>>;
|
|
463
|
+
|
|
448
464
|
/**
|
|
449
465
|
* Get process variables
|
|
450
466
|
*
|
|
@@ -916,6 +932,20 @@ export interface ProcessXmlResponse {
|
|
|
916
932
|
processDefinitionId: string;
|
|
917
933
|
}
|
|
918
934
|
|
|
935
|
+
/**
|
|
936
|
+
* Runtime active activity instance
|
|
937
|
+
*/
|
|
938
|
+
export interface ActivityInstance {
|
|
939
|
+
id: string;
|
|
940
|
+
activityId: string;
|
|
941
|
+
activityName: string;
|
|
942
|
+
activityType: string;
|
|
943
|
+
processInstanceId: string;
|
|
944
|
+
executionId: string;
|
|
945
|
+
startTime: string;
|
|
946
|
+
endTime?: string;
|
|
947
|
+
}
|
|
948
|
+
|
|
919
949
|
/**
|
|
920
950
|
* Runtime activity instance tree
|
|
921
951
|
*/
|
package/types/index.d.ts
CHANGED
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
*
|
|
21
21
|
* // All subsequent requests automatically include auth token
|
|
22
22
|
* await client.entity.list('default', 'users');
|
|
23
|
-
* await client.bpm.startProcess({
|
|
23
|
+
* await client.bpm.startProcess('approval', { amount: 1000 });
|
|
24
|
+
* await client.bpm.getTasks({ assignee: 'currentUserId' });
|
|
24
25
|
* ```
|
|
25
26
|
*
|
|
26
27
|
* ## Module Documentation
|
|
@@ -65,6 +66,13 @@ export interface AmasterClientOptions {
|
|
|
65
66
|
*/
|
|
66
67
|
baseURL?: string;
|
|
67
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Runtime environment identifier used for workflow headers and workflow input auto-fill.
|
|
71
|
+
*
|
|
72
|
+
* @default "dev"
|
|
73
|
+
*/
|
|
74
|
+
env?: string;
|
|
75
|
+
|
|
68
76
|
/**
|
|
69
77
|
* Optional custom headers to include in ALL requests
|
|
70
78
|
*
|
|
@@ -247,7 +255,7 @@ export interface AmasterClient {
|
|
|
247
255
|
/**
|
|
248
256
|
* S3 Storage module
|
|
249
257
|
*
|
|
250
|
-
* Provides methods for file upload, download, and
|
|
258
|
+
* Provides methods for file upload, download, and metadata lookup.
|
|
251
259
|
*
|
|
252
260
|
* For detailed documentation, see {@link ./s3.d.ts}
|
|
253
261
|
*/
|
package/types/workflow.d.ts
CHANGED
|
@@ -108,7 +108,9 @@ export interface WorkflowClientAPI {
|
|
|
108
108
|
* Execute a workflow
|
|
109
109
|
*
|
|
110
110
|
* Runs a workflow with the provided inputs and returns the result.
|
|
111
|
-
*
|
|
111
|
+
* When the parent client is created with `env`, workflow requests
|
|
112
|
+
* automatically include the `x-env` header and backfill `inputs.env`
|
|
113
|
+
* when that key is absent.
|
|
112
114
|
*
|
|
113
115
|
* @template TOutput - The type of workflow outputs
|
|
114
116
|
* @param workflowName - Workflow identifier (key/name)
|