@asgard-js/core 0.2.53 → 0.2.55

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.
@@ -1,5 +1,5 @@
1
1
  import { EventType } from '../constants/enum';
2
- import { ClientConfig, IAsgardServiceClient, FetchSsePayload, FetchSseOptions, SseResponse, SseEvents, BlobUploadResponse } from '../types';
2
+ import { ClientConfig, IAsgardServiceClient, FetchSsePayload, FetchSseOptions, SseResponse, SseEvents, BlobUploadResponse, CwdDownloadResult } from '../types';
3
3
 
4
4
  export default class AsgardServiceClient implements IAsgardServiceClient {
5
5
  private apiKey?;
@@ -7,6 +7,10 @@ export default class AsgardServiceClient implements IAsgardServiceClient {
7
7
  private botProviderEndpoint?;
8
8
  private debugMode?;
9
9
  private destroy$;
10
+ private closed;
11
+ private detached;
12
+ private detachTimer?;
13
+ private inFlight;
10
14
  private sseEmitter;
11
15
  private transformSsePayload?;
12
16
  private customHeaders?;
@@ -14,15 +18,43 @@ export default class AsgardServiceClient implements IAsgardServiceClient {
14
18
  on<K extends keyof SseEvents>(event: K, listener: SseEvents[K]): void;
15
19
  handleEvent(response: SseResponse<EventType>): void;
16
20
  fetchSse(payload: FetchSsePayload, options?: FetchSseOptions): void;
21
+ /**
22
+ * Detach the client from its owning component without aborting in-flight SSE
23
+ * runs. Used when a chatbot unmounts (e.g. the user navigates to another
24
+ * in-app page) but the current run should be allowed to finish on the
25
+ * backend instead of being cut off. After detaching, the stream is still
26
+ * drained to keep the connection open but consumer callbacks no longer fire.
27
+ *
28
+ * The connection cleans itself up in all cases:
29
+ * - No run in flight → close immediately (nothing to keep alive).
30
+ * - Runs in flight → close once they all settle (`onRunSettled`), so the
31
+ * client never lingers past the work it is keeping alive.
32
+ * - A run gets stuck (stream stays open, no `run.done`/error) → the safety
33
+ * timeout force-closes it so the orphaned connection cannot leak.
34
+ */
35
+ detach(options: {
36
+ timeoutMs: number;
37
+ }): void;
38
+ private onRunSettled;
17
39
  close(): void;
18
40
  /**
19
41
  * 上傳檔案到 Blob API
20
42
  * 根據 API 文件:/ns/{namespace}/bot-provider/{bot_provider_name}/blob
21
43
  */
22
44
  uploadFile(file: File, customChannelId: string): Promise<BlobUploadResponse>;
45
+ /**
46
+ * 下載 channel sandbox 工作目錄裡的檔案(cwd:// URI action)。
47
+ * 呼叫 Edge Server GET <base>/cwd/download?custom_channel_id=xxx&relative_path=xxx 取回 binary。
48
+ */
49
+ downloadCwdFile(relativePath: string, customChannelId: string): Promise<CwdDownloadResult>;
23
50
  /**
24
51
  * 從 botProviderEndpoint 衍生 Blob API endpoint
25
52
  */
26
53
  private deriveBlobEndpoint;
54
+ /**
55
+ * 衍生 bot provider 的 base endpoint(不含子路徑)。
56
+ * 優先用 botProviderEndpoint;若只有 deprecated 的 endpoint 則反推(移除 /message/sse)。已去除尾部斜線。
57
+ */
58
+ private getBaseEndpoint;
27
59
  }
28
60
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,WAAW,EACX,SAAS,EACT,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,oBAAoB;IACtE,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,mBAAmB,CAAC,CAAgD;IAC5E,OAAO,CAAC,aAAa,CAAC,CAAyB;gBAEnC,MAAM,EAAE,YAAY;IAkChC,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAKrE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI;IA0CnD,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IA6BnE,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA4ClF;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAqB3B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,WAAW,EACX,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,CAAC,OAAO,OAAO,mBAAoB,YAAW,oBAAoB;IACtE,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,SAAS,CAAC,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAC,CAAgC;IACpD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,mBAAmB,CAAC,CAAgD;IAC5E,OAAO,CAAC,aAAa,CAAC,CAAyB;gBAEnC,MAAM,EAAE,YAAY;IAkChC,EAAE,CAAC,CAAC,SAAS,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IAKrE,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI;IA0CnD,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI;IAsCnE;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAc5C,OAAO,CAAC,YAAY;IAUpB,KAAK,IAAI,IAAI;IAcb;;;OAGG;IACG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA4ClF;;;OAGG;IACG,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA6ChG;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;;OAGG;IACH,OAAO,CAAC,eAAe;CAexB"}
@@ -3,9 +3,14 @@ import { EventHandler } from './event-emitter';
3
3
  import { SseResponse, ToolCallConsentAnswer } from './sse-response';
4
4
  import { EventType, FetchSseAction } from '../constants/enum';
5
5
 
6
+ export interface CwdDownloadResult {
7
+ blob: Blob;
8
+ filename: string;
9
+ }
6
10
  export interface IAsgardServiceClient {
7
11
  fetchSse(payload: FetchSsePayload, options?: FetchSseOptions): void;
8
12
  uploadFile?(file: File, customChannelId: string): Promise<BlobUploadResponse>;
13
+ downloadCwdFile?(relativePath: string, customChannelId: string): Promise<CwdDownloadResult>;
9
14
  }
10
15
  export type InitEventHandler = EventHandler<SseResponse<EventType.INIT>>;
11
16
  export type MessageEventHandler = EventHandler<SseResponse<EventType.MESSAGE_START | EventType.MESSAGE_DELTA | EventType.MESSAGE_COMPLETE>>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/types/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/types/client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asgard-js/core",
3
- "version": "0.2.53",
3
+ "version": "0.2.55",
4
4
  "dependencies": {
5
5
  "@microsoft/fetch-event-source": "^2.0.1",
6
6
  "rxjs": "^7.8.1",