@lark-base-open/base-site-channel 0.1.4 → 0.1.5

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 CHANGED
@@ -239,6 +239,8 @@ await logout();
239
239
  await siteRuntime.ready();
240
240
  ```
241
241
 
242
+ - `openLink(url)`: Ask the host to check and open an HTTP(S), mailto, or tel link. The result's `opened` acknowledges navigation submission; `noopener` prevents detecting popup visibility.
243
+ - `installLinkGuard({ onError }?)`: Install page-wide anchor and `window.open` routing once; returns an idempotent cleanup. Call at startup. Host failures are sent to `onError` (or a generic console warning). Same-tab local navigation, anchors and downloads retain their behavior.
242
244
  - `./runtime`: HTTP, Function, lifecycle, and Chatbot stream APIs for the child page.
243
245
  - `./runtime-contract`: Shared `site.v1` keys, payloads, types, and stable error codes.
244
246
  - `requestEdit()`: Ask the parent page to enter edit mode.
@@ -7,6 +7,7 @@ declare const SiteRuntimeApi: {
7
7
  readonly FunctionInvoke: "site.v1.function.invoke";
8
8
  readonly HttpRequest: "site.v1.http.request";
9
9
  readonly HttpRequestCancel: "site.v1.http.request.cancel";
10
+ readonly OpenLink: "site.v1.link.open";
10
11
  readonly RuntimeContext: "site.v1.runtime.context";
11
12
  readonly StreamClose: "site.v1.chatbot.stream.close";
12
13
  readonly StreamOpen: "site.v1.chatbot.stream.open";
@@ -43,6 +44,8 @@ declare const SiteRuntimeErrorCode: {
43
44
  readonly InvalidFunctionName: "INVALID_FUNCTION_NAME";
44
45
  readonly InvalidHttpHeader: "INVALID_HTTP_HEADER";
45
46
  readonly InvalidHttpUrl: "INVALID_HTTP_URL";
47
+ readonly InvalidLinkUrl: "INVALID_LINK_URL";
48
+ readonly LinkCheckUnavailable: "LINK_CHECK_UNAVAILABLE";
46
49
  readonly LogoutFailed: "LOGOUT_FAILED";
47
50
  readonly ProtocolMismatch: "PROTOCOL_MISMATCH";
48
51
  readonly RequestTimeout: "REQUEST_TIMEOUT";
@@ -338,5 +341,12 @@ interface SiteRuntimeUserInfo {
338
341
  name: string;
339
342
  }
340
343
  declare const isValidSiteFunctionName: (functionName: string) => boolean;
344
+ interface SiteOpenLinkRequest {
345
+ url: string;
346
+ }
347
+ /** opened means the host submitted the navigation; noopener prevents popup status inspection. */
348
+ interface SiteOpenLinkResult {
349
+ opened: boolean;
350
+ }
341
351
 
342
- export { SITE_RUNTIME_PROTOCOL_VERSION, SiteAIAudioContentPart, SiteAICapabilityType, SiteAIFileContentPart, SiteAIFunctionError, SiteAIFunctionResult, SiteAIFunctionStreamCloseRequest, SiteAIFunctionStreamDone, SiteAIFunctionStreamError, SiteAIFunctionStreamMessage, SiteAIFunctionStreamOpenRequest, SiteAIFunctionVariables, SiteAIImageAsset, SiteAIImageContentPart, SiteAIImageTask, SiteAIMediaTask, SiteAIMediaTaskBase, SiteAIMessageContentPart, SiteAIStreamDelta, SiteAIStreamMessageParam, SiteAITaskStatus, SiteAITextContentPart, SiteAITextDelta, SiteAITextMessageParam, SiteAIUserMessageParam, SiteAIVideoAsset, SiteAIVideoContentPart, SiteAIVideoTask, SiteAttachmentTarget, SiteAttachmentUploadCancelRequest, SiteAttachmentUploadOptions, SiteAttachmentUploadPayload, SiteAttachmentUploadProgress, SiteAttachmentUploadRequest, SiteAttachmentUploadResult, SiteChatbotStreamCloseRequest, SiteChatbotStreamError, SiteChatbotStreamMessage, SiteChatbotStreamOpenRequest, SiteFunctionDefinition, SiteFunctionInvokeRequest, SiteHttpCancelRequest, SiteHttpMethod, SiteHttpRequest, SiteHttpRequestInit, SiteHttpRequestOptions, SiteHttpResponse, SiteHttpResponseType, SiteProjectEnv, SiteRuntimeApi, SiteRuntimeContext, SiteRuntimeError, SiteRuntimeErrorCode, SiteRuntimeEvent, SiteRuntimeFunction, SiteRuntimeLoadFailedEvent, SiteRuntimeModeChangedEvent, SiteRuntimeReadyEvent, SiteRuntimeUserInfo, isValidSiteFunctionName, readSiteAITextDelta };
352
+ export { SITE_RUNTIME_PROTOCOL_VERSION, SiteAIAudioContentPart, SiteAICapabilityType, SiteAIFileContentPart, SiteAIFunctionError, SiteAIFunctionResult, SiteAIFunctionStreamCloseRequest, SiteAIFunctionStreamDone, SiteAIFunctionStreamError, SiteAIFunctionStreamMessage, SiteAIFunctionStreamOpenRequest, SiteAIFunctionVariables, SiteAIImageAsset, SiteAIImageContentPart, SiteAIImageTask, SiteAIMediaTask, SiteAIMediaTaskBase, SiteAIMessageContentPart, SiteAIStreamDelta, SiteAIStreamMessageParam, SiteAITaskStatus, SiteAITextContentPart, SiteAITextDelta, SiteAITextMessageParam, SiteAIUserMessageParam, SiteAIVideoAsset, SiteAIVideoContentPart, SiteAIVideoTask, SiteAttachmentTarget, SiteAttachmentUploadCancelRequest, SiteAttachmentUploadOptions, SiteAttachmentUploadPayload, SiteAttachmentUploadProgress, SiteAttachmentUploadRequest, SiteAttachmentUploadResult, SiteChatbotStreamCloseRequest, SiteChatbotStreamError, SiteChatbotStreamMessage, SiteChatbotStreamOpenRequest, SiteFunctionDefinition, SiteFunctionInvokeRequest, SiteHttpCancelRequest, SiteHttpMethod, SiteHttpRequest, SiteHttpRequestInit, SiteHttpRequestOptions, SiteHttpResponse, SiteHttpResponseType, SiteOpenLinkRequest, SiteOpenLinkResult, SiteProjectEnv, SiteRuntimeApi, SiteRuntimeContext, SiteRuntimeError, SiteRuntimeErrorCode, SiteRuntimeEvent, SiteRuntimeFunction, SiteRuntimeLoadFailedEvent, SiteRuntimeModeChangedEvent, SiteRuntimeReadyEvent, SiteRuntimeUserInfo, isValidSiteFunctionName, readSiteAITextDelta };
@@ -1 +1 @@
1
- var r="site.v1",a={AIFunctionStreamClose:"site.v1.ai.function.stream.close",AIFunctionStreamOpen:"site.v1.ai.function.stream.open",AttachmentUpload:"site.v1.attachment.upload",AttachmentUploadCancel:"site.v1.attachment.upload.cancel",FunctionInvoke:"site.v1.function.invoke",HttpRequest:"site.v1.http.request",HttpRequestCancel:"site.v1.http.request.cancel",RuntimeContext:"site.v1.runtime.context",StreamClose:"site.v1.chatbot.stream.close",StreamOpen:"site.v1.chatbot.stream.open"},s={AIFunctionStreamDone:"site.v1.ai.function.stream.done",AIFunctionStreamError:"site.v1.ai.function.stream.error",AIFunctionStreamMessage:"site.v1.ai.function.stream.message",AttachmentUploadProgress:"site.v1.attachment.upload.progress",LifecycleLoadFailed:"site.v1.lifecycle.load-failed",LifecycleReady:"site.v1.lifecycle.ready",ModeChanged:"site.v1.runtime.mode-changed",StreamError:"site.v1.chatbot.stream.error",StreamMessage:"site.v1.chatbot.stream.message"},o={GetCurrentUser:"function.runtime.getCurrentUser",Logout:"function.runtime.logout",RequestEdit:"function.runtime.requestEdit"},p={AttachmentUnavailable:"ATTACHMENT_UNAVAILABLE",AttachmentUploadCanceled:"ATTACHMENT_UPLOAD_CANCELED",AttachmentUploadFailed:"ATTACHMENT_UPLOAD_FAILED",AttachmentUploadStalled:"ATTACHMENT_UPLOAD_STALLED",ChannelDestroyed:"CHANNEL_DESTROYED",FunctionNotAllowed:"FUNCTION_NOT_ALLOWED",FunctionRequestFailed:"FUNCTION_REQUEST_FAILED",InvalidAIFunctionTask:"INVALID_AI_FUNCTION_TASK",HttpRequestFailed:"HTTP_REQUEST_FAILED",HttpResponseTypeUnsupported:"HTTP_RESPONSE_TYPE_UNSUPPORTED",HttpRequestCanceled:"HTTP_REQUEST_CANCELED",InvalidAttachmentTarget:"INVALID_ATTACHMENT_TARGET",InvalidFunctionName:"INVALID_FUNCTION_NAME",InvalidHttpHeader:"INVALID_HTTP_HEADER",InvalidHttpUrl:"INVALID_HTTP_URL",LogoutFailed:"LOGOUT_FAILED",ProtocolMismatch:"PROTOCOL_MISMATCH",RequestTimeout:"REQUEST_TIMEOUT",StreamDisconnected:"STREAM_DISCONNECTED",StreamHealthTimeout:"STREAM_HEALTH_TIMEOUT",StreamInterrupted:"STREAM_INTERRUPTED",StreamOpenFailed:"STREAM_OPEN_FAILED",StreamSeqGap:"STREAM_SEQ_GAP",StreamUnavailable:"STREAM_UNAVAILABLE",UnsupportedHttpBody:"UNSUPPORTED_HTTP_BODY",UserInfoUnavailable:"USER_INFO_UNAVAILABLE"},c=e=>{var t,n;return{answer:(t=e.content)!=null?t:"",reasoning:(n=e.reasoningContent)!=null?n:""}},i=/^function(?:\.[A-Za-z_][A-Za-z0-9_]*)+$/,S=e=>i.test(e);export{r as SITE_RUNTIME_PROTOCOL_VERSION,a as SiteRuntimeApi,p as SiteRuntimeErrorCode,s as SiteRuntimeEvent,o as SiteRuntimeFunction,S as isValidSiteFunctionName,c as readSiteAITextDelta};
1
+ var r="site.v1",a={AIFunctionStreamClose:"site.v1.ai.function.stream.close",AIFunctionStreamOpen:"site.v1.ai.function.stream.open",AttachmentUpload:"site.v1.attachment.upload",AttachmentUploadCancel:"site.v1.attachment.upload.cancel",FunctionInvoke:"site.v1.function.invoke",HttpRequest:"site.v1.http.request",HttpRequestCancel:"site.v1.http.request.cancel",OpenLink:"site.v1.link.open",RuntimeContext:"site.v1.runtime.context",StreamClose:"site.v1.chatbot.stream.close",StreamOpen:"site.v1.chatbot.stream.open"},s={AIFunctionStreamDone:"site.v1.ai.function.stream.done",AIFunctionStreamError:"site.v1.ai.function.stream.error",AIFunctionStreamMessage:"site.v1.ai.function.stream.message",AttachmentUploadProgress:"site.v1.attachment.upload.progress",LifecycleLoadFailed:"site.v1.lifecycle.load-failed",LifecycleReady:"site.v1.lifecycle.ready",ModeChanged:"site.v1.runtime.mode-changed",StreamError:"site.v1.chatbot.stream.error",StreamMessage:"site.v1.chatbot.stream.message"},o={GetCurrentUser:"function.runtime.getCurrentUser",Logout:"function.runtime.logout",RequestEdit:"function.runtime.requestEdit"},p={AttachmentUnavailable:"ATTACHMENT_UNAVAILABLE",AttachmentUploadCanceled:"ATTACHMENT_UPLOAD_CANCELED",AttachmentUploadFailed:"ATTACHMENT_UPLOAD_FAILED",AttachmentUploadStalled:"ATTACHMENT_UPLOAD_STALLED",ChannelDestroyed:"CHANNEL_DESTROYED",FunctionNotAllowed:"FUNCTION_NOT_ALLOWED",FunctionRequestFailed:"FUNCTION_REQUEST_FAILED",InvalidAIFunctionTask:"INVALID_AI_FUNCTION_TASK",HttpRequestFailed:"HTTP_REQUEST_FAILED",HttpResponseTypeUnsupported:"HTTP_RESPONSE_TYPE_UNSUPPORTED",HttpRequestCanceled:"HTTP_REQUEST_CANCELED",InvalidAttachmentTarget:"INVALID_ATTACHMENT_TARGET",InvalidFunctionName:"INVALID_FUNCTION_NAME",InvalidHttpHeader:"INVALID_HTTP_HEADER",InvalidHttpUrl:"INVALID_HTTP_URL",InvalidLinkUrl:"INVALID_LINK_URL",LinkCheckUnavailable:"LINK_CHECK_UNAVAILABLE",LogoutFailed:"LOGOUT_FAILED",ProtocolMismatch:"PROTOCOL_MISMATCH",RequestTimeout:"REQUEST_TIMEOUT",StreamDisconnected:"STREAM_DISCONNECTED",StreamHealthTimeout:"STREAM_HEALTH_TIMEOUT",StreamInterrupted:"STREAM_INTERRUPTED",StreamOpenFailed:"STREAM_OPEN_FAILED",StreamSeqGap:"STREAM_SEQ_GAP",StreamUnavailable:"STREAM_UNAVAILABLE",UnsupportedHttpBody:"UNSUPPORTED_HTTP_BODY",UserInfoUnavailable:"USER_INFO_UNAVAILABLE"},c=e=>{var t,n;return{answer:(t=e.content)!=null?t:"",reasoning:(n=e.reasoningContent)!=null?n:""}},i=/^function(?:\.[A-Za-z_][A-Za-z0-9_]*)+$/,S=e=>i.test(e);export{r as SITE_RUNTIME_PROTOCOL_VERSION,a as SiteRuntimeApi,p as SiteRuntimeErrorCode,s as SiteRuntimeEvent,o as SiteRuntimeFunction,S as isValidSiteFunctionName,c as readSiteAITextDelta};
package/dist/runtime.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { SiteAttachmentUploadOptions, SiteAttachmentUploadResult, SiteHttpRequestOptions, SiteRuntimeContext, SiteRuntimeUserInfo, SiteRuntimeModeChangedEvent, SiteFunctionDefinition, SiteProjectEnv, SiteAIStreamMessageParam, SiteAIFunctionVariables, SiteAIFunctionError, SiteAIStreamDelta, SiteAIMediaTask, SiteAIFunctionResult } from './runtime-contract.js';
2
- export { SITE_RUNTIME_PROTOCOL_VERSION, SiteAIAudioContentPart, SiteAICapabilityType, SiteAIFileContentPart, SiteAIFunctionStreamCloseRequest, SiteAIFunctionStreamDone, SiteAIFunctionStreamError, SiteAIFunctionStreamMessage, SiteAIFunctionStreamOpenRequest, SiteAIImageAsset, SiteAIImageContentPart, SiteAIImageTask, SiteAIMediaTaskBase, SiteAIMessageContentPart, SiteAITaskStatus, SiteAITextContentPart, SiteAITextDelta, SiteAITextMessageParam, SiteAIUserMessageParam, SiteAIVideoAsset, SiteAIVideoContentPart, SiteAIVideoTask, SiteAttachmentTarget, SiteAttachmentUploadCancelRequest, SiteAttachmentUploadPayload, SiteAttachmentUploadProgress, SiteAttachmentUploadRequest, SiteChatbotStreamCloseRequest, SiteChatbotStreamMessage, SiteChatbotStreamOpenRequest, SiteFunctionInvokeRequest, SiteHttpCancelRequest, SiteHttpMethod, SiteHttpRequest, SiteHttpRequestInit, SiteHttpResponse, SiteHttpResponseType, SiteRuntimeApi, SiteRuntimeError, SiteRuntimeErrorCode, SiteRuntimeEvent, SiteRuntimeFunction, SiteRuntimeLoadFailedEvent, SiteRuntimeReadyEvent, isValidSiteFunctionName, readSiteAITextDelta } from './runtime-contract.js';
1
+ import { SiteAttachmentUploadOptions, SiteAttachmentUploadResult, SiteHttpRequestOptions, SiteOpenLinkResult, SiteRuntimeContext, SiteRuntimeUserInfo, SiteRuntimeModeChangedEvent, SiteFunctionDefinition, SiteProjectEnv, SiteAIStreamMessageParam, SiteAIFunctionVariables, SiteAIFunctionError, SiteAIStreamDelta, SiteAIMediaTask, SiteAIFunctionResult } from './runtime-contract.js';
2
+ export { SITE_RUNTIME_PROTOCOL_VERSION, SiteAIAudioContentPart, SiteAICapabilityType, SiteAIFileContentPart, SiteAIFunctionStreamCloseRequest, SiteAIFunctionStreamDone, SiteAIFunctionStreamError, SiteAIFunctionStreamMessage, SiteAIFunctionStreamOpenRequest, SiteAIImageAsset, SiteAIImageContentPart, SiteAIImageTask, SiteAIMediaTaskBase, SiteAIMessageContentPart, SiteAITaskStatus, SiteAITextContentPart, SiteAITextDelta, SiteAITextMessageParam, SiteAIUserMessageParam, SiteAIVideoAsset, SiteAIVideoContentPart, SiteAIVideoTask, SiteAttachmentTarget, SiteAttachmentUploadCancelRequest, SiteAttachmentUploadPayload, SiteAttachmentUploadProgress, SiteAttachmentUploadRequest, SiteChatbotStreamCloseRequest, SiteChatbotStreamMessage, SiteChatbotStreamOpenRequest, SiteFunctionInvokeRequest, SiteHttpCancelRequest, SiteHttpMethod, SiteHttpRequest, SiteHttpRequestInit, SiteHttpResponse, SiteHttpResponseType, SiteOpenLinkRequest, SiteRuntimeApi, SiteRuntimeError, SiteRuntimeErrorCode, SiteRuntimeEvent, SiteRuntimeFunction, SiteRuntimeLoadFailedEvent, SiteRuntimeReadyEvent, isValidSiteFunctionName, readSiteAITextDelta } from './runtime-contract.js';
3
3
 
4
4
  interface RuntimeChannel {
5
5
  emitEvent: <T>(key: string, params: T) => Promise<void>;
@@ -23,6 +23,7 @@ declare class SiteRuntimeClient<Map = FunctionMap> {
23
23
  uploadAttachment: ({ onProgress, ...request }: SiteAttachmentUploadOptions) => Promise<SiteAttachmentUploadResult>;
24
24
  invokeHttp: (request: SiteHttpRequestOptions) => Promise<Response>;
25
25
  invokeApi: <Name extends FunctionName<Map>>(functionName: Name, params: FunctionParams<Map, Name>) => Promise<FunctionResult<Map, Name>>;
26
+ openLink: (url: string) => Promise<SiteOpenLinkResult>;
26
27
  getRuntimeContext: () => Promise<SiteRuntimeContext>;
27
28
  getCurrentUser: () => Promise<SiteRuntimeUserInfo>;
28
29
  logout: () => Promise<void>;
@@ -39,6 +40,7 @@ declare const getCurrentUser: () => Promise<SiteRuntimeUserInfo>;
39
40
  declare const logout: () => Promise<void>;
40
41
  declare const requestEdit: () => Promise<void>;
41
42
  declare const uploadAttachment: ({ onProgress, ...request }: SiteAttachmentUploadOptions) => Promise<SiteAttachmentUploadResult>;
43
+ declare const openLink: (url: string) => Promise<SiteOpenLinkResult>;
42
44
 
43
45
  type RuntimeHttpClient = Pick<SiteRuntimeClient, 'invokeHttp'>;
44
46
  declare const createSiteRuntimeFetch: (runtime?: RuntimeHttpClient, timeoutMs?: number) => typeof globalThis.fetch;
@@ -112,4 +114,11 @@ declare const createSiteAIFunctionTask: (params: CallSiteAIFunctionParams, optio
112
114
  declare const getSiteAIFunctionTask: (functionKey: string, taskId: string, options?: SiteAIFunctionOptions) => Promise<SiteAIMediaTask>;
113
115
  declare const callSiteAIFunction: (params: CallSiteAIFunctionParams, options?: SiteAIFunctionOptions) => Promise<SiteAIFunctionResult>;
114
116
 
115
- export { CallSiteAIFunctionParams, FunctionMap, InvokeSiteAIFunctionStreamParams, RuntimeChannel, SiteAIFunctionError, SiteAIFunctionOptions, SiteAIFunctionResult, SiteAIFunctionStreamHandle, SiteAIFunctionVariables, SiteAIImageGenerationInput, SiteAIMediaTask, SiteAIStreamDelta, SiteAIStreamMessageParam, SiteAIVideoGenerationInput, SiteAttachmentUploadOptions, SiteAttachmentUploadResult, SiteChatbotStreamAdapter, SiteChatbotStreamError, SiteFunctionDefinition, SiteHttpRequestOptions, SiteProjectEnv, SiteRuntimeClient, SiteRuntimeContext, SiteRuntimeInvocationError, SiteRuntimeModeChangedEvent, SiteRuntimeUserInfo, callSiteAIFunction, createSiteAIFunctionTask, createSiteRuntimeClient, createSiteRuntimeFetch, fetch, getCurrentUser, getSiteAIFunctionTask, invokeApi, invokeHttp, invokeSiteAIFunctionStream, logout, requestEdit, siteRuntime, uploadAttachment };
117
+ interface LinkGuardOptions {
118
+ /** Reports rejected host requests without creating unhandled promise rejections. */
119
+ onError?: (error: unknown) => void;
120
+ }
121
+ /** Install once per page. Repeated calls return the same idempotent cleanup. */
122
+ declare const installLinkGuard: (options?: LinkGuardOptions) => (() => void);
123
+
124
+ export { CallSiteAIFunctionParams, FunctionMap, InvokeSiteAIFunctionStreamParams, LinkGuardOptions, RuntimeChannel, SiteAIFunctionError, SiteAIFunctionOptions, SiteAIFunctionResult, SiteAIFunctionStreamHandle, SiteAIFunctionVariables, SiteAIImageGenerationInput, SiteAIMediaTask, SiteAIStreamDelta, SiteAIStreamMessageParam, SiteAIVideoGenerationInput, SiteAttachmentUploadOptions, SiteAttachmentUploadResult, SiteChatbotStreamAdapter, SiteChatbotStreamError, SiteFunctionDefinition, SiteHttpRequestOptions, SiteOpenLinkResult, SiteProjectEnv, SiteRuntimeClient, SiteRuntimeContext, SiteRuntimeInvocationError, SiteRuntimeModeChangedEvent, SiteRuntimeUserInfo, callSiteAIFunction, createSiteAIFunctionTask, createSiteRuntimeClient, createSiteRuntimeFetch, fetch, getCurrentUser, getSiteAIFunctionTask, installLinkGuard, invokeApi, invokeHttp, invokeSiteAIFunctionStream, logout, openLink, requestEdit, siteRuntime, uploadAttachment };
package/dist/runtime.mjs CHANGED
@@ -1,4 +1,4 @@
1
- var ct=Object.defineProperty,dt=Object.defineProperties;var ut=Object.getOwnPropertyDescriptors;var N=Object.getOwnPropertySymbols;var ve=Object.prototype.hasOwnProperty,be=Object.prototype.propertyIsEnumerable;var Ae=(t,e,n)=>e in t?ct(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,a=(t,e)=>{for(var n in e||(e={}))ve.call(e,n)&&Ae(t,n,e[n]);if(N)for(var n of N(e))be.call(e,n)&&Ae(t,n,e[n]);return t},f=(t,e)=>dt(t,ut(e));var Te=(t,e)=>{var n={};for(var r in t)ve.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(t!=null&&N)for(var r of N(t))e.indexOf(r)<0&&be.call(t,r)&&(n[r]=t[r]);return n};var p=(t,e,n)=>new Promise((r,i)=>{var o=c=>{try{d(n.next(c))}catch(m){i(m)}},s=c=>{try{d(n.throw(c))}catch(m){i(m)}},d=c=>c.done?r(c.value):Promise.resolve(c.value).then(o,s);d((n=n.apply(t,e)).next())});import{uniqueId as ee}from"lodash-es";var W="same-origin",Ce="__internal_fetchBinaryList__",Re="__internal_cancelBinaryFetch__",ke="__internal_binaryFetchProgress__";function $(t){return Number.isFinite(t)?Math.max(1,Math.floor(t)):4}function Y(t){return t==="omit"||t==="include"?t:W}var L=(i=>(i.IFRAME_LOAD_ERROR="iframeLoadError",i.NOT_ALLOWED_URL="notAllowedUrl",i.HANDSHAKE_TIME_OUT="handshakeTimeout",i.CHANNEL_UNAVAILABLE="channelUnavailable",i))(L||{});var b=class extends Error{constructor(n,r){super(r);this.code=n,this.name="ChannelCallbackError"}};function Me(t){return new b(10004,`api "${t}" is not registered`)}function Pe(t){return new b(10005,`api "${t}" timed out`)}function G(){return new b(10006,"channel has been destroyed")}function Fe(t){return new b(10008,`request "${t}" was superseded by a new one`)}var lt="unknown error";function we(t){return typeof t=="object"&&t!==null}function pt(t){if(typeof t=="string"&&t)return t;if(t instanceof b&&t.message||t instanceof Error&&t.message)return t.message;if(we(t)){let{msg:e,message:n}=t;if(typeof e=="string"&&e)return e;if(typeof n=="string"&&n)return n}return lt}function ht(t){if(t instanceof b)return t.code;if(!we(t))return-1;let{code:e}=t;return typeof e=="string"&&e||typeof e=="number"&&Number.isFinite(e)?e:-1}function A(t){return{code:ht(t),msg:pt(t)}}function xe(t){return t instanceof ArrayBuffer||ArrayBuffer.isView(t)||typeof Blob!="undefined"&&t instanceof Blob}function mt(t){return xe(t)||Object.values(t).some(e=>xe(e))}function He(t){return t&&typeof t=="object"?mt(t)?t:JSON.parse(JSON.stringify(t)):t}var ft={["iframeLoadError"]:10001,["notAllowedUrl"]:10002,["handshakeTimeout"]:10003,["channelUnavailable"]:10009};function gt(t){return typeof t=="object"&&t!==null}function It(t){if(!gt(t))return!1;let{type:e}=t;return typeof e=="string"&&Object.values(L).includes(e)}function J(t){return It(t)?{code:ft[t.type],msg:t.message||t.type}:A(t)}function X(t){let e=Promise.reject(t);return e.catch(()=>{}),e}var F=class{constructor(e,n){this._target=e,this._options=n}sendMsg(e,n){if(!this._target)throw new Error("target window is not found");this._target.postMessage(e,this._options.targetOrigin,n!=null?n:[])}listenMsg(e){this._eventHandler=n=>{n.source===this._options.sourceWindow&&this._options.allowedOrigins.includes(n.origin)&&e(n)},typeof window!="undefined"&&window.addEventListener("message",this._eventHandler)}destroy(){typeof window!="undefined"&&this._eventHandler&&window.removeEventListener("message",this._eventHandler),this._eventHandler=void 0}};var _=class{constructor(e,n,r){e==="host"?this.channelManager=new F(n,r):e==="client"&&(this.channelManager=new F(window.parent,r))}static createInstance(e,n,r){return new _(e,n,r)}sendMsg(e,n){var r;(r=this.channelManager)==null||r.sendMsg(e,n)}listenMsg(e){var n;(n=this.channelManager)==null||n.listenMsg(e)}destroy(){var e;(e=this.channelManager)==null||e.destroy()}};var O=class{constructor(){this.requests=new Map}create(e,n,r=3e4){return this.reject(e,A(Fe(e))),new Promise((i,o)=>{let s=setTimeout(()=>{var d;((d=this.requests.get(e))==null?void 0:d.timeout)===s&&(this.requests.delete(e),o(A(Pe(n))))},r);this.requests.set(e,{reject:o,resolve:i,timeout:s})})}resolve(e,n){let r=this.take(e);return r?(r.resolve(n),!0):!1}reject(e,n){let r=this.take(e);return r?(r.reject(n),!0):!1}rejectAll(e){for(let n of this.requests.keys())this.reject(n,e)}take(e){let n=this.requests.get(e);if(n)return this.requests.delete(e),clearTimeout(n.timeout),n}};var Q=t=>typeof t=="object"&&t!==null,Et=new Set(["blockId","expectedPrefixId","id","jobId","prefixId","url"]),C=t=>{let e={};for(let[n,r]of Object.entries(t))if(!(n==="inputParams"||n==="outputParams")){if(Et.has(n)){e[`${n}Present`]=!!r;continue}if(n==="error"){Object.assign(e,R(r));continue}if(n==="errorInfo"&&Q(r)){e.errorType=typeof r.type=="string"?r.type:"object";continue}(typeof r=="string"||typeof r=="number"||typeof r=="boolean")&&(e[n]=r)}return e},M=t=>{let e={idPresent:!!t.id,type:t.type},n=Q(t.payload)?t.payload:{};return typeof n.key=="string"&&(e.key=n.key),t.type==="callback"&&typeof n.code=="number"&&(e.callbackCode=n.code),t.type==="handshake"&&typeof n.proactive=="boolean"&&(e.proactive=n.proactive),e},Z=t=>t.type!=="invoke"&&t.type!=="callback",R=t=>{if(!Q(t))return{errorType:typeof t};let e={errorType:t instanceof Error?t.name:"object"};return(typeof t.code=="number"||typeof t.code=="string")&&(e.errorCode=t.code),e};var At=()=>{let t=Reflect.get(globalThis,"BearWebSlardarWeb");return typeof t=="function"?t:void 0},vt=t=>{let e={};for(let[n,r]of Object.entries(C(t)))typeof r=="string"||typeof r=="number"?e[n]=r:typeof r=="boolean"&&(e[n]=String(r));return e},Ne=(t,e,n,r)=>{console[e](`[base-site-channel][${t}]`,n,r)},U=(t,e,n,r={})=>{if(e==="info")return;let i=C(r),o=At();if(!o){Ne(t,e,n,i);return}try{o("sendLog",{content:`[base-site-channel][${t}] ${n}`,extra:a({event_name:"Runtime_SiteChannel_Message",bizType:"Runtime",subType:"SiteChannel",action:"Message",channel_side:t,channel_message:n},vt(i)),level:e})}catch(s){Ne(t,e,n,f(a({},i),{slardarFallback:!0,slardarErrorType:s instanceof Error?s.name:typeof s}))}};var Ct=()=>{var n;if(typeof window=="undefined")return null;let e=((n=window.location.ancestorOrigins)==null?void 0:n[0])||document.referrer;if(!e)return null;try{return new URL(e).origin}catch(r){return null}},Rt=t=>{try{return new URL(t).origin}catch(e){return null}},te=class{constructor(e={}){this.pendingRequests=new O;this.eventMap=new Map;this.eventHandlerMap=new Map;this._msgChannel=null;this._invokeId="";this._handshakePromise=X({type:"channelUnavailable",message:"channel handshake is not initialized"});this._handshakeResolve=null;this._handshakeReject=null;this._handshakeRetryTimes=0;this._handshakeStatus=0;this._handshakeTimeout=null;this._prefixId="";this._destroyed=!1;let n=e.hostOrigin?Rt(e.hostOrigin):null;if(this.hostOrigin=n!=null?n:Ct(),e.hostOrigin&&!n&&this.logWarn("invalid hostOrigin, fallback to parent origin"),typeof window=="undefined"||window.parent===window){this.failHandshake("invalid window context",{hasWindow:typeof window!="undefined",isTopWindow:typeof window!="undefined"?window.parent===window:!0});return}if(!this.hostOrigin){this.failHandshake("host origin unavailable");return}this._msgChannel=_.createInstance("client",window.parent,{allowedOrigins:[this.hostOrigin],sourceWindow:window.parent,targetOrigin:this.hostOrigin}),this.listeningHostMsg(),this.startHandshake()}logInfo(e,n={}){U("client","info",e,a({hasPrefixId:!!this._prefixId,handshakeStatus:this._handshakeStatus},C(n)))}logWarn(e,n={}){U("client","warn",e,a({hasPrefixId:!!this._prefixId,handshakeStatus:this._handshakeStatus},C(n)))}logError(e,n={}){U("client","error",e,a({hasPrefixId:!!this._prefixId,handshakeStatus:this._handshakeStatus},C(n)))}failHandshake(e,n={}){this._handshakeStatus=2,this._handshakePromise=X({type:"channelUnavailable",message:e}),this.logError(`init failed: ${e}`,n)}sendProactiveHandshakeMsg(){var n;let e={id:ee("handshake-"),type:"handshake",payload:{proactive:!0}};this.logInfo("send proactive handshake",M(e)),(n=this._msgChannel)==null||n.sendMsg(e)}_initHandshake(){this._handshakeRetryTimes=0,clearTimeout(this._handshakeTimeout),this._handshakeStatus=0,this.logInfo("init handshake"),this._handshakePromise=new Promise((e,n)=>{this._handshakeResolve=e,this._handshakeReject=n,this._handshakeTimeout=setTimeout(()=>this.retryHandshake(n),2e3)})}startHandshake(){this._initHandshake(),this._handshakePromise.then(()=>{this._handshakeStatus=1,this.logInfo("handshake success")}).catch(e=>{this._handshakeStatus=2,this.logError("handshake failed",{error:e})}),this.sendProactiveHandshakeMsg()}retryHandshake(e){this._handshakeStatus===0&&(this._handshakeRetryTimes<5?(this.logWarn("retry handshake",{retryTimes:this._handshakeRetryTimes+1}),this.sendProactiveHandshakeMsg(),this._handshakeRetryTimes++,this._handshakeTimeout=setTimeout(()=>this.retryHandshake(e),2e3+2**this._handshakeRetryTimes)):(this.logError("handshake retry timeout",{retryTimes:this._handshakeRetryTimes}),e({type:"handshakeTimeout",message:"iframe handshake time out"})))}updateInvokeId(){this._invokeId=ee(`${this._prefixId}-invoke-`)}handleChannelMessage(e){let{data:n}=e;Z(n)&&this.logInfo("receive host message",M(n));let{type:r}=n;r==="callback"?this.handleHostCallback(n):r==="handshake"?this.handleHandshakeCallback(n):r==="invoke"?this.handleHostInvoke(n).catch(i=>{this.logError("handle host invoke error",a(a({},M(n)),R(i)))}):r==="event"&&this.handleHostEvent(n).catch(i=>{this.logError("handle host event error",a(a({},M(n)),R(i)))})}handleHostCallback(e){let{id:n,payload:r}=e,i={logId:n,key:r.key,callbackCode:r.code};if(r.code===1){if(this.pendingRequests.reject(n,r.res)){this.logWarn("api response received",i);return}}else if(this.pendingRequests.resolve(n,r.res)){this.logInfo("api response received",i);return}this.logWarn("host callback request not found",{id:n,key:r.key})}handleHostInvoke(e){return p(this,null,function*(){yield this._handshakePromise;let{id:n,payload:r}=e,{key:i,params:o,prefixId:s}=r;if(s!==this._prefixId){this.logWarn("ignore host invoke because prefixId mismatch",{id:n,key:i,prefixId:s,expectedPrefixId:this._prefixId});return}let d=this.eventMap.get(i);if(typeof d!="function"){this.logWarn("host invoke handler not found",{id:n,key:i}),this.sendMsg2Host({id:n,type:"callback",payload:{key:i,res:A(Me(i)),code:1}});return}this.logInfo("handle host invoke",{id:n,key:i});try{let c=He(yield d(o));this.sendMsg2Host({id:n,type:"callback",payload:{key:i,res:c,code:0}}),this.logInfo("host invoke success",{id:n,key:i})}catch(c){this.logError("host invoke failed",a({id:n,key:i},R(c))),this.sendMsg2Host({id:n,type:"callback",payload:{key:i,res:A(c),code:1}})}})}handleHostEvent(e){return p(this,null,function*(){yield this._handshakePromise;let{payload:n}=e,{key:r,params:i,prefixId:o}=n;if(o!==this._prefixId){this.logWarn("ignore host event because prefixId mismatch",{key:r,prefixId:o,expectedPrefixId:this._prefixId});return}let s=this.eventHandlerMap.get(r);if(!(s!=null&&s.size)){this.logWarn("host event handler not found",{key:r});return}this.logInfo("handle host event",{key:r,handlerCount:s.size}),yield Promise.allSettled(Array.from(s,d=>d(i)))})}handleHandshakeCallback(e){var o,s;let{id:n,payload:r}=e;this._prefixId=(o=r==null?void 0:r.prefixId)!=null?o:"",this.logInfo("receive handshake callback",{id:n,prefixId:this._prefixId}),(s=this._handshakeResolve)==null||s.call(this);let i={id:n,type:"handshake",payload:{proactive:!1,info:{isHandshakeSuccess:!0}}};this.sendMsg2Host(i)}listeningHostMsg(){var e;this.logInfo("start listening host messages"),(e=this._msgChannel)==null||e.listenMsg(this.handleChannelMessage.bind(this))}sendMsg2Host(e,n){var r;Z(e)&&this.logInfo("send message to host",M(e)),(r=this._msgChannel)==null||r.sendMsg(e,n)}invokeApi(e,n,r){return p(this,null,function*(){if(this._destroyed)return Promise.reject(A(G()));try{yield this._handshakePromise}catch(s){return this.logError("invoke api blocked by handshake error",a({key:e},R(s))),Promise.reject(J(s))}this._invokeId||this.updateInvokeId();let i=this._invokeId,o=this.pendingRequests.create(i,e,r==null?void 0:r.timeoutMs);return this.logInfo("api request sent",{key:e,logId:i}),this.sendMsg2Host({type:"invoke",id:i,payload:{key:e,params:n,prefixId:this._prefixId}}),this.updateInvokeId(),o})}registerApi(e,n){if(this.eventMap.has(e)){this.logWarn("register api ignored because key already exists",{key:e});return}this.eventMap.set(e,n),this.logInfo("register api",{key:e})}emitEvent(e,n){return p(this,null,function*(){try{yield this._handshakePromise}catch(r){return this.logError("emit event blocked by handshake error",a({key:e},R(r))),Promise.reject(J(r))}this.logInfo("emit event",{key:e}),this.sendMsg2Host({type:"event",id:ee(`${this._prefixId}-event-`),payload:{key:e,params:n,prefixId:this._prefixId}})})}fetchBinaryList(e){return p(this,null,function*(){var n;return this.logInfo("invoke built-in binary fetch",{status:"start",itemCount:e.items.length,concurrency:$(e.concurrency),credentials:Y(e.credentials)}),this.invokeApi(Ce,{items:e.items,concurrency:$(e.concurrency),credentials:Y((n=e.credentials)!=null?n:W)})})}subscribeBinaryFetchProgress(e){return this.subscribeEvent(ke,e)}cancelBinaryFetch(e){return p(this,null,function*(){this.logInfo("invoke built-in binary fetch cancel",{jobId:e,status:"cancel-requested"}),yield this.invokeApi(Re,{jobId:e})})}destroy(){var n,r;if(this._destroyed)return;this._destroyed=!0,this.logInfo("destroy client"),(n=this._msgChannel)==null||n.destroy(),clearTimeout(this._handshakeTimeout);let e=A(G());(r=this._handshakeReject)==null||r.call(this,{type:"handshakeTimeout",message:e.msg}),this.pendingRequests.rejectAll(e),this.eventMap.clear(),this.eventHandlerMap.clear()}subscribeEvent(e,n){var i;let r=(i=this.eventHandlerMap.get(e))!=null?i:new Set;return r.add(n),this.eventHandlerMap.set(e,r),this.logInfo("subscribe event",{key:e,handlerCount:r.size}),()=>this.unsubscribeEvent(e,n)}unsubscribeEvent(e,n){let r=this.eventHandlerMap.get(e);if(!r){this.logWarn("unsubscribe event ignored because key is not subscribed",{key:e});return}if(!n){this.eventHandlerMap.delete(e),this.logInfo("unsubscribe all event handlers",{key:e,handlerCount:0});return}r.delete(n),r.size===0&&this.eventHandlerMap.delete(e),this.logInfo("unsubscribe event",{key:e,handlerCount:r.size})}},kt=t=>new te(t),k=kt();var Oe="site.v1",g={AIFunctionStreamClose:"site.v1.ai.function.stream.close",AIFunctionStreamOpen:"site.v1.ai.function.stream.open",AttachmentUpload:"site.v1.attachment.upload",AttachmentUploadCancel:"site.v1.attachment.upload.cancel",FunctionInvoke:"site.v1.function.invoke",HttpRequest:"site.v1.http.request",HttpRequestCancel:"site.v1.http.request.cancel",RuntimeContext:"site.v1.runtime.context",StreamClose:"site.v1.chatbot.stream.close",StreamOpen:"site.v1.chatbot.stream.open"},y={AIFunctionStreamDone:"site.v1.ai.function.stream.done",AIFunctionStreamError:"site.v1.ai.function.stream.error",AIFunctionStreamMessage:"site.v1.ai.function.stream.message",AttachmentUploadProgress:"site.v1.attachment.upload.progress",LifecycleLoadFailed:"site.v1.lifecycle.load-failed",LifecycleReady:"site.v1.lifecycle.ready",ModeChanged:"site.v1.runtime.mode-changed",StreamError:"site.v1.chatbot.stream.error",StreamMessage:"site.v1.chatbot.stream.message"},D={GetCurrentUser:"function.runtime.getCurrentUser",Logout:"function.runtime.logout",RequestEdit:"function.runtime.requestEdit"},u={AttachmentUnavailable:"ATTACHMENT_UNAVAILABLE",AttachmentUploadCanceled:"ATTACHMENT_UPLOAD_CANCELED",AttachmentUploadFailed:"ATTACHMENT_UPLOAD_FAILED",AttachmentUploadStalled:"ATTACHMENT_UPLOAD_STALLED",ChannelDestroyed:"CHANNEL_DESTROYED",FunctionNotAllowed:"FUNCTION_NOT_ALLOWED",FunctionRequestFailed:"FUNCTION_REQUEST_FAILED",InvalidAIFunctionTask:"INVALID_AI_FUNCTION_TASK",HttpRequestFailed:"HTTP_REQUEST_FAILED",HttpResponseTypeUnsupported:"HTTP_RESPONSE_TYPE_UNSUPPORTED",HttpRequestCanceled:"HTTP_REQUEST_CANCELED",InvalidAttachmentTarget:"INVALID_ATTACHMENT_TARGET",InvalidFunctionName:"INVALID_FUNCTION_NAME",InvalidHttpHeader:"INVALID_HTTP_HEADER",InvalidHttpUrl:"INVALID_HTTP_URL",LogoutFailed:"LOGOUT_FAILED",ProtocolMismatch:"PROTOCOL_MISMATCH",RequestTimeout:"REQUEST_TIMEOUT",StreamDisconnected:"STREAM_DISCONNECTED",StreamHealthTimeout:"STREAM_HEALTH_TIMEOUT",StreamInterrupted:"STREAM_INTERRUPTED",StreamOpenFailed:"STREAM_OPEN_FAILED",StreamSeqGap:"STREAM_SEQ_GAP",StreamUnavailable:"STREAM_UNAVAILABLE",UnsupportedHttpBody:"UNSUPPORTED_HTTP_BODY",UserInfoUnavailable:"USER_INFO_UNAVAILABLE"},xr=t=>{var e,n;return{answer:(e=t.content)!=null?e:"",reasoning:(n=t.reasoningContent)!=null?n:""}},xt=/^function(?:\.[A-Za-z_][A-Za-z0-9_]*)+$/,Ue=t=>xt.test(t);var _t=0,De=(i,o)=>p(void 0,[i,o],function*(t,{init:e,url:n,signal:r}){if((e==null?void 0:e.responseType)!==void 0&&!["text","arrayBuffer"].includes(e.responseType))throw new S(u.HttpResponseTypeUnsupported,"Unsupported HTTP response type; use text or arrayBuffer");let s=()=>new DOMException("The operation was aborted","AbortError");if(r!=null&&r.aborted)throw s();let d=typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`http-${Date.now()}-${++_t}`,c=()=>{},m=new Promise((h,x)=>{c=()=>{x(s()),t.invokeApi(g.HttpRequestCancel,{requestId:d}).catch(()=>{})}});r==null||r.addEventListener("abort",c,{once:!0});try{let h=yield Promise.race([t.invokeApi(g.HttpRequest,{requestId:d,url:n,init:e},{timeoutMs:(e==null?void 0:e.timeoutMs)===void 0?void 0:Math.min(e.timeoutMs,6e4)+1e3}),m]);if((e==null?void 0:e.responseType)==="arrayBuffer"&&(h.bodyType!=="arrayBuffer"||!(h.body instanceof ArrayBuffer)))throw new S(u.HttpResponseTypeUnsupported,"The current host does not support binary HTTP responses; upgrade the host");return new Response([204,205,304].includes(h.status)?null:h.body,{headers:h.headers,status:h.status,statusText:h.statusText})}finally{r==null||r.removeEventListener("abort",c)}});var S=class extends Error{constructor(n,r){super(r);this.code=n;this.name="SiteRuntimeInvocationError"}},Be=t=>typeof t=="string"&&t.trim().length>0,Mt=t=>typeof File!="undefined"&&t instanceof File,qe=12e4,Pt=2*60*60*1e3,je=0,Ft=()=>typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():(je+=1,`site-upload-${je}`),wt=t=>typeof t=="object"&&t!==null&&"code"in t?t.code:void 0,Ht=t=>{if(t instanceof Error&&t.message)return t.message;if(typeof t=="object"&&t!==null){if("message"in t&&typeof t.message=="string")return t.message;if("msg"in t&&typeof t.msg=="string")return t.msg}return String(t)},Nt=new Set([u.AttachmentUnavailable,u.AttachmentUploadCanceled,u.AttachmentUploadFailed,u.AttachmentUploadStalled,u.InvalidAttachmentTarget]),Lt=(t,e)=>{if(t instanceof S)return t;let n=wt(t),r=Ht(t);return String(n)===String(10004)?new S(u.AttachmentUnavailable,r):typeof n=="string"&&Nt.has(n)?new S(n,r):new S(e,r)},B=(t,e,n)=>p(void 0,null,function*(){if(!Ue(e))throw new S(u.InvalidFunctionName,"Function name must be a dot-separated path beginning with function (for example, function.orders.list)");return t.invokeApi(g.FunctionInvoke,{functionName:e,params:n})}),q=class{constructor(e){this.channel=e;this.uploadAttachment=r=>p(this,null,function*(){var i=r,{onProgress:e}=i,n=Te(i,["onProgress"]);if(!Be(n==null?void 0:n.baseToken)||!Be(n==null?void 0:n.tableId)||!Mt(n==null?void 0:n.file))throw new S(u.InvalidAttachmentTarget,"Attachment upload requires nonempty baseToken and tableId values and a File");let o=Ft(),s,d=()=>{},c=()=>{this.channel.invokeApi(g.AttachmentUploadCancel,{uploadId:o}).catch(()=>{})},m=new Promise((h,x)=>{let H=()=>{clearTimeout(s),s=setTimeout(()=>{c(),x(new S(u.AttachmentUploadStalled,`Attachment upload made no progress for more than ${qe/1e3} seconds`))},qe)};d=this.channel.subscribeEvent(y.AttachmentUploadProgress,T=>{(T==null?void 0:T.uploadId)===o&&(H(),Promise.resolve(e==null?void 0:e(T)).catch(()=>{console.error("[base-site-channel][runtime] Attachment progress callback failed")}))})});try{return yield Promise.race([this.channel.invokeApi(g.AttachmentUpload,f(a({},n),{uploadId:o}),{timeoutMs:Pt}),m])}catch(h){throw Lt(h,u.AttachmentUploadFailed)}finally{clearTimeout(s),d()}});this.invokeHttp=e=>De(this.channel,e);this.invokeApi=(e,n)=>B(this.channel,e,n);this.getRuntimeContext=()=>this.channel.invokeApi(g.RuntimeContext,void 0);this.getCurrentUser=()=>B(this.channel,D.GetCurrentUser,void 0);this.logout=()=>B(this.channel,D.Logout,void 0);this.requestEdit=()=>B(this.channel,D.RequestEdit,void 0);this.ready=()=>this.channel.emitEvent(y.LifecycleReady,{protocolVersion:Oe});this.reportLoadFailed=e=>this.channel.emitEvent(y.LifecycleLoadFailed,{code:e});this.subscribeModeChanged=e=>this.channel.subscribeEvent(y.ModeChanged,({mode:n})=>e(n))}},j=(t=k)=>new q(t),v=j(),Ot=v.invokeHttp,Ut=v.invokeApi,Dt=v.getCurrentUser,Bt=v.logout,qt=v.requestEdit,jt=v.uploadAttachment;var Kt=new Set(["open.feishu.cn","open.feishu-pre.cn","open.feishu-boe.cn"]),Ke="/open-apis",Vt="/base-site/api/openapi",zt=new Set(["DELETE","GET","PATCH","POST","PUT"]),Wt=()=>(typeof globalThis.location=="undefined"?"":globalThis.location.pathname).replace(/^\/+/,"").startsWith("preview")?[["x-project-env","preview"]]:[],$t=t=>{if(typeof Request!="undefined"&&t instanceof Request)throw new TypeError("Site Runtime fetch does not accept a Request object; pass a URL instead");let e=String(t);if(e.startsWith("//"))throw new TypeError("Site Runtime fetch does not accept a scheme-relative URL");if(e.startsWith("/"))return e;let n=new URL(e);if(Kt.has(n.hostname)&&n.pathname.startsWith(Ke))return`${Vt}${n.pathname.slice(Ke.length)}${n.search}`;throw new TypeError("Site Runtime fetch accepts only relative business paths or supported Feishu OpenAPI URLs")},Yt=t=>{let e=new Headers(t);Wt().forEach(([r,i])=>e.set(r,i));let n={};return e.forEach((r,i)=>{n[i]=r}),n},Gt=(t,e)=>{var r,i,o;let n=(i=(r=t==null?void 0:t.method)==null?void 0:r.toUpperCase())!=null?i:"GET";if(!zt.has(n))throw new TypeError(`Site Runtime fetch does not support the ${n} method`);if((t==null?void 0:t.body)!==void 0&&t.body!==null&&typeof t.body!="string")throw new TypeError("Site Runtime fetch requires a string request body");if((o=t==null?void 0:t.signal)!=null&&o.aborted)throw new DOMException("The operation was aborted","AbortError");return{body:typeof(t==null?void 0:t.body)=="string"?t.body:void 0,headers:Yt(t==null?void 0:t.headers),method:n,timeoutMs:e}},K=(t=v,e)=>(n,r)=>t.invokeHttp(f(a({init:Gt(r,e)},r!=null&&r.signal?{signal:r.signal}:{}),{url:$t(n)})),Jt=K();var Ve=0,Xt=()=>typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():(Ve+=1,`site-chatbot-${Ve}`),V=(t,e)=>{try{t==null||t(e)}catch(n){console.error("[base-site-channel][runtime] Chatbot callback failed")}},P=class extends Error{constructor(n,r){super(`Chatbot stream error: ${n}`);this.code=n;this.retryable=r;this.name="SiteChatbotStreamError"}},ne=class{constructor(e){this.options=e;this.init=e=>{this.destroy();let n=Xt(),r={lastSeq:0,subscriptionId:n,unsubscribeError:()=>{},unsubscribeMessage:()=>{}};r.unsubscribeMessage=this.channel.subscribeEvent(y.StreamMessage,i=>{i.subscriptionId!==n||i.seq<=r.lastSeq||(i.seq>r.lastSeq+1&&V(this.onErrorCallback,new P(u.StreamSeqGap,!0)),r.lastSeq=i.seq,V(this.onMessageCallback,i.data))}),r.unsubscribeError=this.channel.subscribeEvent(y.StreamError,i=>{i.subscriptionId===n&&V(this.onErrorCallback,new P(i.code,i.retryable))}),this.current=r,this.channel.invokeApi(g.StreamOpen,{chatbotId:this.options.chatbotId,subscriptionId:n,threadId:e}).catch(()=>{var i;((i=this.current)==null?void 0:i.subscriptionId)===n&&V(this.onErrorCallback,new P(u.StreamOpenFailed,!0))})};this.onMessage=e=>{this.onMessageCallback=e};this.onError=e=>{this.onErrorCallback=e};this.destroy=()=>{let e=this.current;e&&(e.unsubscribeMessage(),e.unsubscribeError(),this.current=void 0,this.channel.invokeApi(g.StreamClose,{subscriptionId:e.subscriptionId}).catch(()=>console.error("[base-site-channel][runtime] Chatbot stream close failed")))};var n;this.channel=(n=e.channel)!=null?n:k}};var ie="prod",ze=0,Ye=()=>typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():(ze+=1,`site-ai-fn-${ze}`),E=(t,e)=>{try{t==null||t(e)}catch(n){console.error("[base-site-channel][runtime] AI function callback failed")}},l=(t,e)=>{let n=new Error(e||`AI function error: ${t}`);return n.name="SiteAIFunctionError",n.code=t,n},Ge=()=>l(u.InvalidHttpUrl,"siteToken is required to invoke site AI function"),oe=()=>typeof window!="undefined"&&window.parent!==window,se=t=>{if(typeof queueMicrotask=="function"){queueMicrotask(t);return}Promise.resolve().then(t)},ae=t=>{let e={data:[],event:"message"};for(let n of t.split(/\r?\n/))n.startsWith("event:")?e.event=n.slice(6).trim():n.startsWith("data:")&&e.data.push(n.slice(5).trimStart());return e},re=(t,e)=>{for(let n of e){let r=t[n];if(typeof r=="string")return r}},Je=t=>{let e=[t];if(t&&typeof t=="object"){let n=t;e.push(n.response,n.data)}for(let n of e){if(!n||typeof n!="object")continue;let r=re(n,["request_id","requestId","RequestID","id"]);if(r)return r}},Xe=t=>{if(!t||typeof t!="object")return{};let e=t;return{content:re(e,["content","text","answer"]),reasoningContent:re(e,["reasoning_content","reasoningContent","reasoning"])}},Qt=t=>{if(!t||typeof t!="object")return{};let e=t.choices;if(!Array.isArray(e))return{};for(let n of e){let r=n.delta,{content:i,reasoningContent:o}=Xe(r);if(i!==void 0||o!==void 0)return{content:i,reasoningContent:o}}return{}},Qe=t=>{var n;let e=[t];if(t&&typeof t=="object"){let r=t;e.push(r.response,r.data)}for(let r of e){let i=Qt(r);if(i.content!==void 0||i.reasoningContent!==void 0)return i;let o=Xe(r&&typeof r=="object"&&(n=r.delta)!=null?n:r);if(o.content!==void 0||o.reasoningContent!==void 0)return o}return{}},z=t=>{try{let e=JSON.parse(t),n=Qe(e),r=Je(e);return f(a(a(a({},n.content!==void 0?{content:n.content}:{}),n.reasoningContent!==void 0?{reasoningContent:n.reasoningContent}:{}),r?{requestId:r}:{}),{raw:e})}catch(e){return{content:t,raw:t}}},Ze=t=>{if(typeof t=="string")return z(t);let e=Qe(t),n=Je(t),r=t&&typeof t=="object"&&"raw"in t?t.raw:t;return f(a(a(a({},e.content!==void 0?{content:e.content}:{}),e.reasoningContent!==void 0?{reasoningContent:e.reasoningContent}:{}),n?{requestId:n}:{}),{raw:r})},Zt=t=>{var e,n;try{let r=JSON.parse(t),i=(e=r.Code)!=null?e:r.code,o=(n=r.Message)!=null?n:r.message,s=typeof i=="string"||typeof i=="number"?String(i):"STREAM_FAILED";return l(s||"STREAM_FAILED",typeof o=="string"&&o?o:t)}catch(r){return l("STREAM_FAILED",t)}},ce=()=>({text:""}),en=t=>/(^|\n)(data|event|id|retry):/.test(t),We=t=>{if(!t||t==="[DONE]")return!!t;try{return JSON.parse(t),!0}catch(e){return!1}},tn=t=>{if(t){if(en(t)){let n=ae(t).data.join(`
2
- `);return We(n)?n:void 0}return We(t)?t:void 0}},de=(t,e)=>{var o;t.text+=e;let n=t.text.split(/\r?\n\r?\n/);t.text=(o=n.pop())!=null?o:"";let r=n.map(s=>ae(s).data.join(`
3
- `)).filter(Boolean),i=tn(t.text);return i!==void 0&&(r.push(i),t.text=""),r},nn=(t,e)=>t==="[DONE]"?(E(e.onDone,void 0),!0):(E(e.onMessage,z(t)),!1),$e=(t,e,n)=>{let r=ae(t);if(r.data.length===0)return!1;let i=r.data.join(`
4
- `);if(r.event==="error")return E(n.onError,Zt(i)),!0;for(let o of de(e,i))if(nn(o,n))return!0;return!1},et=(t,e)=>p(void 0,null,function*(){var s;if(!t.body)throw l(u.StreamUnavailable,"SSE body missing");let n=t.body.getReader(),r=new TextDecoder,i=ce(),o="";try{for(;;){let{done:d,value:c}=yield n.read();o+=r.decode(c,{stream:!d});let m=o.split(/\r?\n\r?\n/);o=(s=m.pop())!=null?s:"";for(let h of m)if($e(h,i,e))return;if(d){if(o&&$e(o,i,e))return;E(e.onError,l(u.StreamInterrupted,"SSE stream ended without [DONE]"));return}}}finally{n.releaseLock()}}),ue=()=>{var n;let t=typeof globalThis.location=="undefined"?"":globalThis.location.pathname,e=/^\/?(preview\/)?app\/([^/]+)(\/|$)/.exec(t);return e?{env:e[1]?"preview":ie,siteToken:decodeURIComponent((n=e[2])!=null?n:"")}:{}},tt=(t,e,n)=>{if(!t.startsWith("/")||t.startsWith("//"))throw l(u.InvalidHttpUrl,"AI function endpoint must be a same-origin relative path");let r=t.replace("{siteToken}",encodeURIComponent(e.siteToken)).replace(":token",encodeURIComponent(e.siteToken)).replace("{functionKey}","").replace(":function_key",""),i=new URL(r,"https://base.site");if(i.searchParams.set("env",e.env),n)for(let[o,s]of Object.entries(n))i.searchParams.set(o,s);return`${i.pathname}${i.search}`};var rn="/space/api/bitable/streaming/site/v1/:token/ai_functions/:function_key/invoke",rt="/space/api/bitable/site/v1/:token/ai_functions/:function_key/tasks",on=6e4,sn=/^([1-9][0-9]{1,4})x([1-9][0-9]{1,4})$/i,an=3686400,cn=16777216,dn=14,un=t=>{let e=t.trim().replace("\xD7","x");if(/^[234]K$/i.test(e))return!0;let n=sn.exec(e);if(!n)return!1;let r=Number(n[1]),i=Number(n[2]),o=r*i;return o>=an&&o<=cn&&r<=i*16&&i<=r*16},ln=t=>{if(!t)return;let e=typeof t.image=="string"?[t.image]:t.image;if(e&&(e.length<1||e.length>dn||e.some(n=>!n.trim())))throw l(u.InvalidAIFunctionTask,"input.image must contain 1 to 14 non-empty strings");if(t.size!==void 0&&!un(t.size))throw l(u.InvalidAIFunctionTask,"input.size must follow the Seedream 5.0 lite size limits")},fe=t=>{var n;let e=(n=t.siteToken)==null?void 0:n.trim();return a(a(a({},t.env?{env:t.env}:{}),t.requestId?{requestId:t.requestId}:{}),e?{siteToken:e}:{})},ge=t=>{var r,i,o;let e=ue(),n=((r=t.siteToken)==null?void 0:r.trim())||e.siteToken;if(!n)throw Ge();return{env:(o=(i=t.env)!=null?i:e.env)!=null?o:ie,requestId:t.requestId,siteToken:n}},Ie=(t,e,n)=>tt(t.replace(":function_key",encodeURIComponent(e)),n),it=t=>f(a({},t.requestId?{"X-Request-Id":t.requestId}:{}),{Accept:"application/json","Content-Type":"application/json"}),ot=t=>{var e;return!t.channel&&!oe()?globalThis.fetch:K(j((e=t.channel)!=null?e:k),on)},pe=class{constructor(e,n){this.params=e;this.context=n;this.callbacks={};this.controller=new AbortController;this.closed=!1;this.onMessage=e=>{this.callbacks.onMessage=e};this.onError=e=>{this.callbacks.onError=e};this.onDone=e=>{this.callbacks.onDone=e};this.destroy=()=>{this.closed||(this.closed=!0,this.controller.abort())};se(()=>{this.start()})}start(){return p(this,null,function*(){var e;if(!this.closed)try{let n=yield fetch(Ie(rn,this.params.functionKey,this.context),{body:JSON.stringify({messages:this.params.messages,variables:(e=this.params.variables)!=null?e:{}}),credentials:"include",headers:f(a({},this.context.requestId?{"X-Request-Id":this.context.requestId}:{}),{Accept:"text/event-stream","Content-Type":"application/json"}),method:"POST",signal:this.controller.signal});if(!n.ok)throw l("HTTP_ERROR",`${n.status} ${n.statusText}`);yield et(n,this.callbacks)}catch(n){this.closed||E(this.callbacks.onError,n instanceof Error?n:l("STREAM_FAILED"))}})}},he=class{constructor(e){this.options=e;this.closed=!1;this.onMessage=e=>{this.onMessageCallback=e};this.onError=e=>{this.onErrorCallback=e};this.onDone=e=>{this.onDoneCallback=e};this.destroy=()=>{this.closed=!0;let e=this.current;e&&(this.cleanup(),this.channel.invokeApi(g.AIFunctionStreamClose,{subscriptionId:e.subscriptionId}).catch(()=>console.error("[base-site-channel][runtime] AI function stream close failed")))};var n;this.channel=(n=e.channel)!=null?n:k,se(()=>this.init())}init(){var i;if(this.closed)return;this.cleanup();let e=Ye(),n={lastSeq:0,subscriptionId:e,unsubscribeDone:()=>{},unsubscribeError:()=>{},unsubscribeMessage:()=>{},upstream:ce()};n.unsubscribeMessage=this.channel.subscribeEvent(y.AIFunctionStreamMessage,o=>this.handleMessage(o,n)),n.unsubscribeError=this.channel.subscribeEvent(y.AIFunctionStreamError,o=>this.handleError(o,e)),n.unsubscribeDone=this.channel.subscribeEvent(y.AIFunctionStreamDone,o=>this.handleDone(o,e)),this.current=n;let r=a(a(a({functionKey:this.options.params.functionKey,messages:this.options.params.messages,subscriptionId:e,variables:(i=this.options.params.variables)!=null?i:{}},this.options.context.env?{env:this.options.context.env}:{}),this.options.context.requestId?{requestId:this.options.context.requestId}:{}),this.options.context.siteToken?{siteToken:this.options.context.siteToken}:{});this.channel.invokeApi(g.AIFunctionStreamOpen,r).catch(()=>{var o;((o=this.current)==null?void 0:o.subscriptionId)===e&&E(this.onErrorCallback,l(u.StreamOpenFailed))})}handleMessage(e,n){if(e.subscriptionId===n.subscriptionId&&!(e.seq<=n.lastSeq)){if(e.seq>n.lastSeq+1&&E(this.onErrorCallback,l(u.StreamSeqGap)),n.lastSeq=e.seq,typeof e.data!="string"){E(this.onMessageCallback,Ze(e.data));return}de(n.upstream,e.data).forEach(r=>{r!=="[DONE]"&&E(this.onMessageCallback,z(r))})}}handleError(e,n){e.subscriptionId===n&&(E(this.onErrorCallback,l(e.code,e.message)),this.cleanup())}handleDone(e,n){e.subscriptionId===n&&(E(this.onDoneCallback,void 0),this.cleanup())}cleanup(){let e=this.current;e&&(e.unsubscribeMessage(),e.unsubscribeError(),e.unsubscribeDone(),this.current=void 0)}},st=(t,e={})=>{var r;if(!((r=t.functionKey)!=null&&r.trim()))throw l(u.InvalidFunctionName,"functionKey is required");let n=a(a({},ue()),fe(e));return e.channel||oe()?new he({channel:e.channel,context:n,params:t}):new pe(t,ge(e))},pn=t=>p(void 0,null,function*(){if(!t.ok){let e=yield t.text().catch(()=>"");throw l("HTTP_ERROR",`${t.status} ${t.statusText} ${e}`)}try{return yield t.json()}catch(e){throw l(u.InvalidAIFunctionTask,"AI function task response is invalid")}}),w=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),hn=t=>t==="cancelled"||t==="failed"||t==="queued"||t==="running"||t==="succeeded",I=(t,e)=>{for(let n of e){let r=t[n];if(typeof r=="string"&&r.trim())return r}},mn=(t,e)=>{for(let n of e){let r=t[n];if(typeof r=="number"&&Number.isFinite(r))return r}},fn=t=>{let e=I(t,["capabilityType","capability_type","CapabilityType"]);return e==="image"||e==="video"?e:void 0},gn=t=>{if(Array.isArray(t))return t.filter(w).map(e=>{var o;let n=I(e,["size","Size"]),r=I(e,["token","Token"]),i=I(e,["url","URL"]);return a(a(a({safetyStatus:(o=I(e,["safetyStatus","safety_status","SafetyStatus"]))!=null?o:""},n?{size:n}:{}),r?{token:r}:{}),i?{url:i}:{})})},In=t=>{var i,o;if(!w(t))return;let e=(o=(i=t.durationSeconds)!=null?i:t.duration_seconds)!=null?o:t.DurationSeconds,n=I(t,["token","Token"]),r=I(t,["url","URL"]);return a(a(a({},typeof e=="number"?{durationSeconds:e}:{}),n?{token:n}:{}),r?{url:r}:{})},le=t=>{var x,H,T,Se,ye,Ee;if(!w(t))throw l(u.InvalidAIFunctionTask,"AI function task response is invalid");let e=I(t,["type","Type"]),n=I(t,["taskId","task_id","TaskID"]),r=(x=t.status)!=null?x:t.Status;if(e!=="image_task"&&e!=="video_task"||!n||!hn(r))throw l(u.InvalidAIFunctionTask,"AI function task response is invalid");let i=(H=I(t,["requestId","request_id","RequestID"]))!=null?H:"",o=mn(t,["progress","Progress"]),s=fn(t),d=I(t,["errCode","err_code","ErrCode"]),c=I(t,["errMessage","err_message","ErrMessage"]),m=gn((Se=(T=t.imageAssets)!=null?T:t.image_assets)!=null?Se:t.ImageAssets),h=In((Ee=(ye=t.videoAsset)!=null?ye:t.video_asset)!=null?Ee:t.VideoAsset);return f(a(a(a(a(a(a({},s?{capabilityType:s}:{}),d?{errCode:d}:{}),c?{errMessage:c}:{}),m?{imageAssets:m}:{}),o!==void 0?{progress:o}:{}),h?{videoAsset:h}:{}),{requestId:i,status:r,taskId:n,type:e})},Sn=t=>{var i,o,s,d,c,m,h;let e=(i=t.code)!=null?i:t.Code;if(typeof e=="number"&&e!==0||typeof e=="string"&&e&&e!=="0")return{code:String(e),message:(o=I(t,["msg","message","Message"]))!=null?o:"AI function task failed"};let n=(d=(s=t.BaseResp)!=null?s:t.base_resp)!=null?d:t.baseResp;if(!w(n))return;let r=(m=(c=n.StatusCode)!=null?c:n.status_code)!=null?m:n.statusCode;if(typeof r=="number"&&r!==0||typeof r=="string"&&r&&r!=="0")return{code:String(r),message:(h=I(n,["StatusMessage","status_message","statusMessage"]))!=null?h:"AI function task failed"}},yn=t=>{if(!w(t))return le(t);let e=Sn(t);if(e)throw l(e.code,e.message);return"data"in t&&t.data!==void 0?le(t.data):le(t)},at=t=>p(void 0,null,function*(){return yn(yield pn(t))}),me=(n,...r)=>p(void 0,[n,...r],function*(t,e={}){var s,d,c;if(!((s=t.functionKey)!=null&&s.trim()))throw l(u.InvalidFunctionName,"functionKey is required");t.capability==="image"&&ln(t.input);let i=ge(a(a({},e),fe(e))),o=yield ot(e)(Ie(rt,t.functionKey,i),{body:JSON.stringify({input:(d=t.input)!=null?d:{},variables:(c=t.variables)!=null?c:{}}),credentials:"include",headers:it(i),method:"POST"});return at(o)}),En=(r,i,...o)=>p(void 0,[r,i,...o],function*(t,e,n={}){if(!(t!=null&&t.trim()))throw l(u.InvalidFunctionName,"functionKey is required");if(typeof e!="string"||!e.trim())throw l(u.InvalidAIFunctionTask,"taskId is required");let s=ge(a(a({},n),fe(n))),d=Ie(rt,t,s),c=d.includes("?")?`${d.replace("?",`/${encodeURIComponent(e)}?`)}`:`${d}/${encodeURIComponent(e)}`,m=yield ot(n)(c,{credentials:"include",headers:it(s),method:"GET"});return at(m)}),nt=(t,e)=>new Promise((n,r)=>{var d;let i="",o="",s=st({functionKey:t.functionKey,messages:(d=t.messages)!=null?d:[],variables:t.variables},e);s.onMessage(c=>{typeof c.content=="string"&&(i+=c.content),!o&&typeof c.requestId=="string"&&c.requestId&&(o=c.requestId)}),s.onError(c=>{s.destroy(),r(c)}),s.onDone(()=>{s.destroy(),n({content:i,requestId:o||e.requestId||"",type:"text"})})}),An=(n,...r)=>p(void 0,[n,...r],function*(t,e={}){var i;if(!((i=t.functionKey)!=null&&i.trim()))throw l(u.InvalidFunctionName,"functionKey is required");return t.capability==="image"||t.capability==="video"?me(t,e):t.capability==="text"||t.capability==="vision"?nt(t,e):t.input&&!t.messages?me(t,e):nt(t,e)});export{Oe as SITE_RUNTIME_PROTOCOL_VERSION,ne as SiteChatbotStreamAdapter,P as SiteChatbotStreamError,g as SiteRuntimeApi,q as SiteRuntimeClient,u as SiteRuntimeErrorCode,y as SiteRuntimeEvent,D as SiteRuntimeFunction,S as SiteRuntimeInvocationError,An as callSiteAIFunction,me as createSiteAIFunctionTask,j as createSiteRuntimeClient,K as createSiteRuntimeFetch,Jt as fetch,Dt as getCurrentUser,En as getSiteAIFunctionTask,Ut as invokeApi,Ot as invokeHttp,st as invokeSiteAIFunctionStream,Ue as isValidSiteFunctionName,Bt as logout,xr as readSiteAITextDelta,qt as requestEdit,v as siteRuntime,jt as uploadAttachment};
1
+ var ut=Object.defineProperty,lt=Object.defineProperties;var pt=Object.getOwnPropertyDescriptors;var D=Object.getOwnPropertySymbols;var Te=Object.prototype.hasOwnProperty,Ce=Object.prototype.propertyIsEnumerable;var be=(t,e,n)=>e in t?ut(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,c=(t,e)=>{for(var n in e||(e={}))Te.call(e,n)&&be(t,n,e[n]);if(D)for(var n of D(e))Ce.call(e,n)&&be(t,n,e[n]);return t},S=(t,e)=>lt(t,pt(e));var ke=(t,e)=>{var n={};for(var r in t)Te.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(t!=null&&D)for(var r of D(t))e.indexOf(r)<0&&Ce.call(t,r)&&(n[r]=t[r]);return n};var m=(t,e,n)=>new Promise((r,i)=>{var o=s=>{try{d(n.next(s))}catch(l){i(l)}},a=s=>{try{d(n.throw(s))}catch(l){i(l)}},d=s=>s.done?r(s.value):Promise.resolve(s.value).then(o,a);d((n=n.apply(t,e)).next())});import{uniqueId as ie}from"lodash-es";var J="same-origin",Re="__internal_fetchBinaryList__",xe="__internal_cancelBinaryFetch__",_e="__internal_binaryFetchProgress__";function X(t){return Number.isFinite(t)?Math.max(1,Math.floor(t)):4}function Q(t){return t==="omit"||t==="include"?t:J}var B=(i=>(i.IFRAME_LOAD_ERROR="iframeLoadError",i.NOT_ALLOWED_URL="notAllowedUrl",i.HANDSHAKE_TIME_OUT="handshakeTimeout",i.CHANNEL_UNAVAILABLE="channelUnavailable",i))(B||{});var k=class extends Error{constructor(n,r){super(r);this.code=n,this.name="ChannelCallbackError"}};function we(t){return new k(10004,`api "${t}" is not registered`)}function Fe(t){return new k(10005,`api "${t}" timed out`)}function Z(){return new k(10006,"channel has been destroyed")}function Le(t){return new k(10008,`request "${t}" was superseded by a new one`)}var ht="unknown error";function He(t){return typeof t=="object"&&t!==null}function mt(t){if(typeof t=="string"&&t)return t;if(t instanceof k&&t.message||t instanceof Error&&t.message)return t.message;if(He(t)){let{msg:e,message:n}=t;if(typeof e=="string"&&e)return e;if(typeof n=="string"&&n)return n}return ht}function ft(t){if(t instanceof k)return t.code;if(!He(t))return-1;let{code:e}=t;return typeof e=="string"&&e||typeof e=="number"&&Number.isFinite(e)?e:-1}function v(t){return{code:ft(t),msg:mt(t)}}function Me(t){return t instanceof ArrayBuffer||ArrayBuffer.isView(t)||typeof Blob!="undefined"&&t instanceof Blob}function gt(t){return Me(t)||Object.values(t).some(e=>Me(e))}function Ne(t){return t&&typeof t=="object"?gt(t)?t:JSON.parse(JSON.stringify(t)):t}var St={["iframeLoadError"]:10001,["notAllowedUrl"]:10002,["handshakeTimeout"]:10003,["channelUnavailable"]:10009};function It(t){return typeof t=="object"&&t!==null}function yt(t){if(!It(t))return!1;let{type:e}=t;return typeof e=="string"&&Object.values(B).includes(e)}function ee(t){return yt(t)?{code:St[t.type],msg:t.message||t.type}:v(t)}function te(t){let e=Promise.reject(t);return e.catch(()=>{}),e}var N=class{constructor(e,n){this._target=e,this._options=n}sendMsg(e,n){if(!this._target)throw new Error("target window is not found");this._target.postMessage(e,this._options.targetOrigin,n!=null?n:[])}listenMsg(e){this._eventHandler=n=>{n.source===this._options.sourceWindow&&this._options.allowedOrigins.includes(n.origin)&&e(n)},typeof window!="undefined"&&window.addEventListener("message",this._eventHandler)}destroy(){typeof window!="undefined"&&this._eventHandler&&window.removeEventListener("message",this._eventHandler),this._eventHandler=void 0}};var M=class{constructor(e,n,r){e==="host"?this.channelManager=new N(n,r):e==="client"&&(this.channelManager=new N(window.parent,r))}static createInstance(e,n,r){return new M(e,n,r)}sendMsg(e,n){var r;(r=this.channelManager)==null||r.sendMsg(e,n)}listenMsg(e){var n;(n=this.channelManager)==null||n.listenMsg(e)}destroy(){var e;(e=this.channelManager)==null||e.destroy()}};var q=class{constructor(){this.requests=new Map}create(e,n,r=3e4){return this.reject(e,v(Le(e))),new Promise((i,o)=>{let a=setTimeout(()=>{var d;((d=this.requests.get(e))==null?void 0:d.timeout)===a&&(this.requests.delete(e),o(v(Fe(n))))},r);this.requests.set(e,{reject:o,resolve:i,timeout:a})})}resolve(e,n){let r=this.take(e);return r?(r.resolve(n),!0):!1}reject(e,n){let r=this.take(e);return r?(r.reject(n),!0):!1}rejectAll(e){for(let n of this.requests.keys())this.reject(n,e)}take(e){let n=this.requests.get(e);if(n)return this.requests.delete(e),clearTimeout(n.timeout),n}};var ne=t=>typeof t=="object"&&t!==null,vt=new Set(["blockId","expectedPrefixId","id","jobId","prefixId","url"]),R=t=>{let e={};for(let[n,r]of Object.entries(t))if(!(n==="inputParams"||n==="outputParams")){if(vt.has(n)){e[`${n}Present`]=!!r;continue}if(n==="error"){Object.assign(e,x(r));continue}if(n==="errorInfo"&&ne(r)){e.errorType=typeof r.type=="string"?r.type:"object";continue}(typeof r=="string"||typeof r=="number"||typeof r=="boolean")&&(e[n]=r)}return e},P=t=>{let e={idPresent:!!t.id,type:t.type},n=ne(t.payload)?t.payload:{};return typeof n.key=="string"&&(e.key=n.key),t.type==="callback"&&typeof n.code=="number"&&(e.callbackCode=n.code),t.type==="handshake"&&typeof n.proactive=="boolean"&&(e.proactive=n.proactive),e},re=t=>t.type!=="invoke"&&t.type!=="callback",x=t=>{if(!ne(t))return{errorType:typeof t};let e={errorType:t instanceof Error?t.name:"object"};return(typeof t.code=="number"||typeof t.code=="string")&&(e.errorCode=t.code),e};var bt=()=>{let t=Reflect.get(globalThis,"BearWebSlardarWeb");return typeof t=="function"?t:void 0},Tt=t=>{let e={};for(let[n,r]of Object.entries(R(t)))typeof r=="string"||typeof r=="number"?e[n]=r:typeof r=="boolean"&&(e[n]=String(r));return e},Oe=(t,e,n,r)=>{console[e](`[base-site-channel][${t}]`,n,r)},K=(t,e,n,r={})=>{if(e==="info")return;let i=R(r),o=bt();if(!o){Oe(t,e,n,i);return}try{o("sendLog",{content:`[base-site-channel][${t}] ${n}`,extra:c({event_name:"Runtime_SiteChannel_Message",bizType:"Runtime",subType:"SiteChannel",action:"Message",channel_side:t,channel_message:n},Tt(i)),level:e})}catch(a){Oe(t,e,n,S(c({},i),{slardarFallback:!0,slardarErrorType:a instanceof Error?a.name:typeof a}))}};var Rt=()=>{var n;if(typeof window=="undefined")return null;let e=((n=window.location.ancestorOrigins)==null?void 0:n[0])||document.referrer;if(!e)return null;try{return new URL(e).origin}catch(r){return null}},xt=t=>{try{return new URL(t).origin}catch(e){return null}},oe=class{constructor(e={}){this.pendingRequests=new q;this.eventMap=new Map;this.eventHandlerMap=new Map;this._msgChannel=null;this._invokeId="";this._handshakePromise=te({type:"channelUnavailable",message:"channel handshake is not initialized"});this._handshakeResolve=null;this._handshakeReject=null;this._handshakeRetryTimes=0;this._handshakeStatus=0;this._handshakeTimeout=null;this._prefixId="";this._destroyed=!1;let n=e.hostOrigin?xt(e.hostOrigin):null;if(this.hostOrigin=n!=null?n:Rt(),e.hostOrigin&&!n&&this.logWarn("invalid hostOrigin, fallback to parent origin"),typeof window=="undefined"||window.parent===window){this.failHandshake("invalid window context",{hasWindow:typeof window!="undefined",isTopWindow:typeof window!="undefined"?window.parent===window:!0});return}if(!this.hostOrigin){this.failHandshake("host origin unavailable");return}this._msgChannel=M.createInstance("client",window.parent,{allowedOrigins:[this.hostOrigin],sourceWindow:window.parent,targetOrigin:this.hostOrigin}),this.listeningHostMsg(),this.startHandshake()}logInfo(e,n={}){K("client","info",e,c({hasPrefixId:!!this._prefixId,handshakeStatus:this._handshakeStatus},R(n)))}logWarn(e,n={}){K("client","warn",e,c({hasPrefixId:!!this._prefixId,handshakeStatus:this._handshakeStatus},R(n)))}logError(e,n={}){K("client","error",e,c({hasPrefixId:!!this._prefixId,handshakeStatus:this._handshakeStatus},R(n)))}failHandshake(e,n={}){this._handshakeStatus=2,this._handshakePromise=te({type:"channelUnavailable",message:e}),this.logError(`init failed: ${e}`,n)}sendProactiveHandshakeMsg(){var n;let e={id:ie("handshake-"),type:"handshake",payload:{proactive:!0}};this.logInfo("send proactive handshake",P(e)),(n=this._msgChannel)==null||n.sendMsg(e)}_initHandshake(){this._handshakeRetryTimes=0,clearTimeout(this._handshakeTimeout),this._handshakeStatus=0,this.logInfo("init handshake"),this._handshakePromise=new Promise((e,n)=>{this._handshakeResolve=e,this._handshakeReject=n,this._handshakeTimeout=setTimeout(()=>this.retryHandshake(n),2e3)})}startHandshake(){this._initHandshake(),this._handshakePromise.then(()=>{this._handshakeStatus=1,this.logInfo("handshake success")}).catch(e=>{this._handshakeStatus=2,this.logError("handshake failed",{error:e})}),this.sendProactiveHandshakeMsg()}retryHandshake(e){this._handshakeStatus===0&&(this._handshakeRetryTimes<5?(this.logWarn("retry handshake",{retryTimes:this._handshakeRetryTimes+1}),this.sendProactiveHandshakeMsg(),this._handshakeRetryTimes++,this._handshakeTimeout=setTimeout(()=>this.retryHandshake(e),2e3+2**this._handshakeRetryTimes)):(this.logError("handshake retry timeout",{retryTimes:this._handshakeRetryTimes}),e({type:"handshakeTimeout",message:"iframe handshake time out"})))}updateInvokeId(){this._invokeId=ie(`${this._prefixId}-invoke-`)}handleChannelMessage(e){let{data:n}=e;re(n)&&this.logInfo("receive host message",P(n));let{type:r}=n;r==="callback"?this.handleHostCallback(n):r==="handshake"?this.handleHandshakeCallback(n):r==="invoke"?this.handleHostInvoke(n).catch(i=>{this.logError("handle host invoke error",c(c({},P(n)),x(i)))}):r==="event"&&this.handleHostEvent(n).catch(i=>{this.logError("handle host event error",c(c({},P(n)),x(i)))})}handleHostCallback(e){let{id:n,payload:r}=e,i={logId:n,key:r.key,callbackCode:r.code};if(r.code===1){if(this.pendingRequests.reject(n,r.res)){this.logWarn("api response received",i);return}}else if(this.pendingRequests.resolve(n,r.res)){this.logInfo("api response received",i);return}this.logWarn("host callback request not found",{id:n,key:r.key})}handleHostInvoke(e){return m(this,null,function*(){yield this._handshakePromise;let{id:n,payload:r}=e,{key:i,params:o,prefixId:a}=r;if(a!==this._prefixId){this.logWarn("ignore host invoke because prefixId mismatch",{id:n,key:i,prefixId:a,expectedPrefixId:this._prefixId});return}let d=this.eventMap.get(i);if(typeof d!="function"){this.logWarn("host invoke handler not found",{id:n,key:i}),this.sendMsg2Host({id:n,type:"callback",payload:{key:i,res:v(we(i)),code:1}});return}this.logInfo("handle host invoke",{id:n,key:i});try{let s=Ne(yield d(o));this.sendMsg2Host({id:n,type:"callback",payload:{key:i,res:s,code:0}}),this.logInfo("host invoke success",{id:n,key:i})}catch(s){this.logError("host invoke failed",c({id:n,key:i},x(s))),this.sendMsg2Host({id:n,type:"callback",payload:{key:i,res:v(s),code:1}})}})}handleHostEvent(e){return m(this,null,function*(){yield this._handshakePromise;let{payload:n}=e,{key:r,params:i,prefixId:o}=n;if(o!==this._prefixId){this.logWarn("ignore host event because prefixId mismatch",{key:r,prefixId:o,expectedPrefixId:this._prefixId});return}let a=this.eventHandlerMap.get(r);if(!(a!=null&&a.size)){this.logWarn("host event handler not found",{key:r});return}this.logInfo("handle host event",{key:r,handlerCount:a.size}),yield Promise.allSettled(Array.from(a,d=>d(i)))})}handleHandshakeCallback(e){var o,a;let{id:n,payload:r}=e;this._prefixId=(o=r==null?void 0:r.prefixId)!=null?o:"",this.logInfo("receive handshake callback",{id:n,prefixId:this._prefixId}),(a=this._handshakeResolve)==null||a.call(this);let i={id:n,type:"handshake",payload:{proactive:!1,info:{isHandshakeSuccess:!0}}};this.sendMsg2Host(i)}listeningHostMsg(){var e;this.logInfo("start listening host messages"),(e=this._msgChannel)==null||e.listenMsg(this.handleChannelMessage.bind(this))}sendMsg2Host(e,n){var r;re(e)&&this.logInfo("send message to host",P(e)),(r=this._msgChannel)==null||r.sendMsg(e,n)}invokeApi(e,n,r){return m(this,null,function*(){if(this._destroyed)return Promise.reject(v(Z()));try{yield this._handshakePromise}catch(a){return this.logError("invoke api blocked by handshake error",c({key:e},x(a))),Promise.reject(ee(a))}this._invokeId||this.updateInvokeId();let i=this._invokeId,o=this.pendingRequests.create(i,e,r==null?void 0:r.timeoutMs);return this.logInfo("api request sent",{key:e,logId:i}),this.sendMsg2Host({type:"invoke",id:i,payload:{key:e,params:n,prefixId:this._prefixId}}),this.updateInvokeId(),o})}registerApi(e,n){if(this.eventMap.has(e)){this.logWarn("register api ignored because key already exists",{key:e});return}this.eventMap.set(e,n),this.logInfo("register api",{key:e})}emitEvent(e,n){return m(this,null,function*(){try{yield this._handshakePromise}catch(r){return this.logError("emit event blocked by handshake error",c({key:e},x(r))),Promise.reject(ee(r))}this.logInfo("emit event",{key:e}),this.sendMsg2Host({type:"event",id:ie(`${this._prefixId}-event-`),payload:{key:e,params:n,prefixId:this._prefixId}})})}fetchBinaryList(e){return m(this,null,function*(){var n;return this.logInfo("invoke built-in binary fetch",{status:"start",itemCount:e.items.length,concurrency:X(e.concurrency),credentials:Q(e.credentials)}),this.invokeApi(Re,{items:e.items,concurrency:X(e.concurrency),credentials:Q((n=e.credentials)!=null?n:J)})})}subscribeBinaryFetchProgress(e){return this.subscribeEvent(_e,e)}cancelBinaryFetch(e){return m(this,null,function*(){this.logInfo("invoke built-in binary fetch cancel",{jobId:e,status:"cancel-requested"}),yield this.invokeApi(xe,{jobId:e})})}destroy(){var n,r;if(this._destroyed)return;this._destroyed=!0,this.logInfo("destroy client"),(n=this._msgChannel)==null||n.destroy(),clearTimeout(this._handshakeTimeout);let e=v(Z());(r=this._handshakeReject)==null||r.call(this,{type:"handshakeTimeout",message:e.msg}),this.pendingRequests.rejectAll(e),this.eventMap.clear(),this.eventHandlerMap.clear()}subscribeEvent(e,n){var i;let r=(i=this.eventHandlerMap.get(e))!=null?i:new Set;return r.add(n),this.eventHandlerMap.set(e,r),this.logInfo("subscribe event",{key:e,handlerCount:r.size}),()=>this.unsubscribeEvent(e,n)}unsubscribeEvent(e,n){let r=this.eventHandlerMap.get(e);if(!r){this.logWarn("unsubscribe event ignored because key is not subscribed",{key:e});return}if(!n){this.eventHandlerMap.delete(e),this.logInfo("unsubscribe all event handlers",{key:e,handlerCount:0});return}r.delete(n),r.size===0&&this.eventHandlerMap.delete(e),this.logInfo("unsubscribe event",{key:e,handlerCount:r.size})}},_t=t=>new oe(t),_=_t();var De="site.v1",g={AIFunctionStreamClose:"site.v1.ai.function.stream.close",AIFunctionStreamOpen:"site.v1.ai.function.stream.open",AttachmentUpload:"site.v1.attachment.upload",AttachmentUploadCancel:"site.v1.attachment.upload.cancel",FunctionInvoke:"site.v1.function.invoke",HttpRequest:"site.v1.http.request",HttpRequestCancel:"site.v1.http.request.cancel",OpenLink:"site.v1.link.open",RuntimeContext:"site.v1.runtime.context",StreamClose:"site.v1.chatbot.stream.close",StreamOpen:"site.v1.chatbot.stream.open"},E={AIFunctionStreamDone:"site.v1.ai.function.stream.done",AIFunctionStreamError:"site.v1.ai.function.stream.error",AIFunctionStreamMessage:"site.v1.ai.function.stream.message",AttachmentUploadProgress:"site.v1.attachment.upload.progress",LifecycleLoadFailed:"site.v1.lifecycle.load-failed",LifecycleReady:"site.v1.lifecycle.ready",ModeChanged:"site.v1.runtime.mode-changed",StreamError:"site.v1.chatbot.stream.error",StreamMessage:"site.v1.chatbot.stream.message"},j={GetCurrentUser:"function.runtime.getCurrentUser",Logout:"function.runtime.logout",RequestEdit:"function.runtime.requestEdit"},u={AttachmentUnavailable:"ATTACHMENT_UNAVAILABLE",AttachmentUploadCanceled:"ATTACHMENT_UPLOAD_CANCELED",AttachmentUploadFailed:"ATTACHMENT_UPLOAD_FAILED",AttachmentUploadStalled:"ATTACHMENT_UPLOAD_STALLED",ChannelDestroyed:"CHANNEL_DESTROYED",FunctionNotAllowed:"FUNCTION_NOT_ALLOWED",FunctionRequestFailed:"FUNCTION_REQUEST_FAILED",InvalidAIFunctionTask:"INVALID_AI_FUNCTION_TASK",HttpRequestFailed:"HTTP_REQUEST_FAILED",HttpResponseTypeUnsupported:"HTTP_RESPONSE_TYPE_UNSUPPORTED",HttpRequestCanceled:"HTTP_REQUEST_CANCELED",InvalidAttachmentTarget:"INVALID_ATTACHMENT_TARGET",InvalidFunctionName:"INVALID_FUNCTION_NAME",InvalidHttpHeader:"INVALID_HTTP_HEADER",InvalidHttpUrl:"INVALID_HTTP_URL",InvalidLinkUrl:"INVALID_LINK_URL",LinkCheckUnavailable:"LINK_CHECK_UNAVAILABLE",LogoutFailed:"LOGOUT_FAILED",ProtocolMismatch:"PROTOCOL_MISMATCH",RequestTimeout:"REQUEST_TIMEOUT",StreamDisconnected:"STREAM_DISCONNECTED",StreamHealthTimeout:"STREAM_HEALTH_TIMEOUT",StreamInterrupted:"STREAM_INTERRUPTED",StreamOpenFailed:"STREAM_OPEN_FAILED",StreamSeqGap:"STREAM_SEQ_GAP",StreamUnavailable:"STREAM_UNAVAILABLE",UnsupportedHttpBody:"UNSUPPORTED_HTTP_BODY",UserInfoUnavailable:"USER_INFO_UNAVAILABLE"},Pr=t=>{var e,n;return{answer:(e=t.content)!=null?e:"",reasoning:(n=t.reasoningContent)!=null?n:""}},Mt=/^function(?:\.[A-Za-z_][A-Za-z0-9_]*)+$/,Be=t=>Mt.test(t);var Pt=0,qe=(i,o)=>m(void 0,[i,o],function*(t,{init:e,url:n,signal:r}){if((e==null?void 0:e.responseType)!==void 0&&!["text","arrayBuffer"].includes(e.responseType))throw new y(u.HttpResponseTypeUnsupported,"Unsupported HTTP response type; use text or arrayBuffer");let a=()=>new DOMException("The operation was aborted","AbortError");if(r!=null&&r.aborted)throw a();let d=typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`http-${Date.now()}-${++Pt}`,s=()=>{},l=new Promise((p,f)=>{s=()=>{f(a()),t.invokeApi(g.HttpRequestCancel,{requestId:d}).catch(()=>{})}});r==null||r.addEventListener("abort",s,{once:!0});try{let p=yield Promise.race([t.invokeApi(g.HttpRequest,{requestId:d,url:n,init:e},{timeoutMs:(e==null?void 0:e.timeoutMs)===void 0?void 0:Math.min(e.timeoutMs,6e4)+1e3}),l]);if((e==null?void 0:e.responseType)==="arrayBuffer"&&(p.bodyType!=="arrayBuffer"||!(p.body instanceof ArrayBuffer)))throw new y(u.HttpResponseTypeUnsupported,"The current host does not support binary HTTP responses; upgrade the host");return new Response([204,205,304].includes(p.status)?null:p.body,{headers:p.headers,status:p.status,statusText:p.statusText})}finally{r==null||r.removeEventListener("abort",s)}});var y=class extends Error{constructor(n,r){super(r);this.code=n;this.name="SiteRuntimeInvocationError"}},Ke=t=>typeof t=="string"&&t.trim().length>0,wt=t=>typeof File!="undefined"&&t instanceof File,je=12e4,Ft=2*60*60*1e3,Ve=0,Lt=()=>typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():(Ve+=1,`site-upload-${Ve}`),Ht=t=>typeof t=="object"&&t!==null&&"code"in t?t.code:void 0,Nt=t=>{if(t instanceof Error&&t.message)return t.message;if(typeof t=="object"&&t!==null){if("message"in t&&typeof t.message=="string")return t.message;if("msg"in t&&typeof t.msg=="string")return t.msg}return String(t)},Ot=new Set([u.AttachmentUnavailable,u.AttachmentUploadCanceled,u.AttachmentUploadFailed,u.AttachmentUploadStalled,u.InvalidAttachmentTarget]),Ut=(t,e)=>{if(t instanceof y)return t;let n=Ht(t),r=Nt(t);return String(n)===String(10004)?new y(u.AttachmentUnavailable,r):typeof n=="string"&&Ot.has(n)?new y(n,r):new y(e,r)},V=(t,e,n)=>m(void 0,null,function*(){if(!Be(e))throw new y(u.InvalidFunctionName,"Function name must be a dot-separated path beginning with function (for example, function.orders.list)");return t.invokeApi(g.FunctionInvoke,{functionName:e,params:n})}),z=class{constructor(e){this.channel=e;this.uploadAttachment=r=>m(this,null,function*(){var i=r,{onProgress:e}=i,n=ke(i,["onProgress"]);if(!Ke(n==null?void 0:n.baseToken)||!Ke(n==null?void 0:n.tableId)||!wt(n==null?void 0:n.file))throw new y(u.InvalidAttachmentTarget,"Attachment upload requires nonempty baseToken and tableId values and a File");let o=Lt(),a,d=()=>{},s=()=>{this.channel.invokeApi(g.AttachmentUploadCancel,{uploadId:o}).catch(()=>{})},l=new Promise((p,f)=>{let T=()=>{clearTimeout(a),a=setTimeout(()=>{s(),f(new y(u.AttachmentUploadStalled,`Attachment upload made no progress for more than ${je/1e3} seconds`))},je)};d=this.channel.subscribeEvent(E.AttachmentUploadProgress,C=>{(C==null?void 0:C.uploadId)===o&&(T(),Promise.resolve(e==null?void 0:e(C)).catch(()=>{console.error("[base-site-channel][runtime] Attachment progress callback failed")}))})});try{return yield Promise.race([this.channel.invokeApi(g.AttachmentUpload,S(c({},n),{uploadId:o}),{timeoutMs:Ft}),l])}catch(p){throw Ut(p,u.AttachmentUploadFailed)}finally{clearTimeout(a),d()}});this.invokeHttp=e=>qe(this.channel,e);this.invokeApi=(e,n)=>V(this.channel,e,n);this.openLink=e=>this.channel.invokeApi(g.OpenLink,{url:e});this.getRuntimeContext=()=>this.channel.invokeApi(g.RuntimeContext,void 0);this.getCurrentUser=()=>V(this.channel,j.GetCurrentUser,void 0);this.logout=()=>V(this.channel,j.Logout,void 0);this.requestEdit=()=>V(this.channel,j.RequestEdit,void 0);this.ready=()=>this.channel.emitEvent(E.LifecycleReady,{protocolVersion:De});this.reportLoadFailed=e=>this.channel.emitEvent(E.LifecycleLoadFailed,{code:e});this.subscribeModeChanged=e=>this.channel.subscribeEvent(E.ModeChanged,({mode:n})=>e(n))}},W=(t=_)=>new z(t),b=W(),Dt=b.invokeHttp,Bt=b.invokeApi,qt=b.getCurrentUser,Kt=b.logout,jt=b.requestEdit,Vt=b.uploadAttachment,se=b.openLink;var zt=new Set(["open.feishu.cn","open.feishu-pre.cn","open.feishu-boe.cn"]),ze="/open-apis",Wt="/base-site/api/openapi",Gt=new Set(["DELETE","GET","PATCH","POST","PUT"]),$t=()=>(typeof globalThis.location=="undefined"?"":globalThis.location.pathname).replace(/^\/+/,"").startsWith("preview")?[["x-project-env","preview"]]:[],Yt=t=>{if(typeof Request!="undefined"&&t instanceof Request)throw new TypeError("Site Runtime fetch does not accept a Request object; pass a URL instead");let e=String(t);if(e.startsWith("//"))throw new TypeError("Site Runtime fetch does not accept a scheme-relative URL");if(e.startsWith("/"))return e;let n=new URL(e);if(zt.has(n.hostname)&&n.pathname.startsWith(ze))return`${Wt}${n.pathname.slice(ze.length)}${n.search}`;throw new TypeError("Site Runtime fetch accepts only relative business paths or supported Feishu OpenAPI URLs")},Jt=t=>{let e=new Headers(t);$t().forEach(([r,i])=>e.set(r,i));let n={};return e.forEach((r,i)=>{n[i]=r}),n},Xt=(t,e)=>{var r,i,o;let n=(i=(r=t==null?void 0:t.method)==null?void 0:r.toUpperCase())!=null?i:"GET";if(!Gt.has(n))throw new TypeError(`Site Runtime fetch does not support the ${n} method`);if((t==null?void 0:t.body)!==void 0&&t.body!==null&&typeof t.body!="string")throw new TypeError("Site Runtime fetch requires a string request body");if((o=t==null?void 0:t.signal)!=null&&o.aborted)throw new DOMException("The operation was aborted","AbortError");return{body:typeof(t==null?void 0:t.body)=="string"?t.body:void 0,headers:Jt(t==null?void 0:t.headers),method:n,timeoutMs:e}},G=(t=b,e)=>(n,r)=>t.invokeHttp(S(c({init:Xt(r,e)},r!=null&&r.signal?{signal:r.signal}:{}),{url:Yt(n)})),Qt=G();var We=0,Zt=()=>typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():(We+=1,`site-chatbot-${We}`),$=(t,e)=>{try{t==null||t(e)}catch(n){console.error("[base-site-channel][runtime] Chatbot callback failed")}},w=class extends Error{constructor(n,r){super(`Chatbot stream error: ${n}`);this.code=n;this.retryable=r;this.name="SiteChatbotStreamError"}},ae=class{constructor(e){this.options=e;this.init=e=>{this.destroy();let n=Zt(),r={lastSeq:0,subscriptionId:n,unsubscribeError:()=>{},unsubscribeMessage:()=>{}};r.unsubscribeMessage=this.channel.subscribeEvent(E.StreamMessage,i=>{i.subscriptionId!==n||i.seq<=r.lastSeq||(i.seq>r.lastSeq+1&&$(this.onErrorCallback,new w(u.StreamSeqGap,!0)),r.lastSeq=i.seq,$(this.onMessageCallback,i.data))}),r.unsubscribeError=this.channel.subscribeEvent(E.StreamError,i=>{i.subscriptionId===n&&$(this.onErrorCallback,new w(i.code,i.retryable))}),this.current=r,this.channel.invokeApi(g.StreamOpen,{chatbotId:this.options.chatbotId,subscriptionId:n,threadId:e}).catch(()=>{var i;((i=this.current)==null?void 0:i.subscriptionId)===n&&$(this.onErrorCallback,new w(u.StreamOpenFailed,!0))})};this.onMessage=e=>{this.onMessageCallback=e};this.onError=e=>{this.onErrorCallback=e};this.destroy=()=>{let e=this.current;e&&(e.unsubscribeMessage(),e.unsubscribeError(),this.current=void 0,this.channel.invokeApi(g.StreamClose,{subscriptionId:e.subscriptionId}).catch(()=>console.error("[base-site-channel][runtime] Chatbot stream close failed")))};var n;this.channel=(n=e.channel)!=null?n:_}};var de="prod",Ge=0,Je=()=>typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():(Ge+=1,`site-ai-fn-${Ge}`),A=(t,e)=>{try{t==null||t(e)}catch(n){console.error("[base-site-channel][runtime] AI function callback failed")}},h=(t,e)=>{let n=new Error(e||`AI function error: ${t}`);return n.name="SiteAIFunctionError",n.code=t,n},Xe=()=>h(u.InvalidHttpUrl,"siteToken is required to invoke site AI function"),ue=()=>typeof window!="undefined"&&window.parent!==window,le=t=>{if(typeof queueMicrotask=="function"){queueMicrotask(t);return}Promise.resolve().then(t)},pe=t=>{let e={data:[],event:"message"};for(let n of t.split(/\r?\n/))n.startsWith("event:")?e.event=n.slice(6).trim():n.startsWith("data:")&&e.data.push(n.slice(5).trimStart());return e},ce=(t,e)=>{for(let n of e){let r=t[n];if(typeof r=="string")return r}},Qe=t=>{let e=[t];if(t&&typeof t=="object"){let n=t;e.push(n.response,n.data)}for(let n of e){if(!n||typeof n!="object")continue;let r=ce(n,["request_id","requestId","RequestID","id"]);if(r)return r}},Ze=t=>{if(!t||typeof t!="object")return{};let e=t;return{content:ce(e,["content","text","answer"]),reasoningContent:ce(e,["reasoning_content","reasoningContent","reasoning"])}},en=t=>{if(!t||typeof t!="object")return{};let e=t.choices;if(!Array.isArray(e))return{};for(let n of e){let r=n.delta,{content:i,reasoningContent:o}=Ze(r);if(i!==void 0||o!==void 0)return{content:i,reasoningContent:o}}return{}},et=t=>{var n;let e=[t];if(t&&typeof t=="object"){let r=t;e.push(r.response,r.data)}for(let r of e){let i=en(r);if(i.content!==void 0||i.reasoningContent!==void 0)return i;let o=Ze(r&&typeof r=="object"&&(n=r.delta)!=null?n:r);if(o.content!==void 0||o.reasoningContent!==void 0)return o}return{}},Y=t=>{try{let e=JSON.parse(t),n=et(e),r=Qe(e);return S(c(c(c({},n.content!==void 0?{content:n.content}:{}),n.reasoningContent!==void 0?{reasoningContent:n.reasoningContent}:{}),r?{requestId:r}:{}),{raw:e})}catch(e){return{content:t,raw:t}}},tt=t=>{if(typeof t=="string")return Y(t);let e=et(t),n=Qe(t),r=t&&typeof t=="object"&&"raw"in t?t.raw:t;return S(c(c(c({},e.content!==void 0?{content:e.content}:{}),e.reasoningContent!==void 0?{reasoningContent:e.reasoningContent}:{}),n?{requestId:n}:{}),{raw:r})},tn=t=>{var e,n;try{let r=JSON.parse(t),i=(e=r.Code)!=null?e:r.code,o=(n=r.Message)!=null?n:r.message,a=typeof i=="string"||typeof i=="number"?String(i):"STREAM_FAILED";return h(a||"STREAM_FAILED",typeof o=="string"&&o?o:t)}catch(r){return h("STREAM_FAILED",t)}},he=()=>({text:""}),nn=t=>/(^|\n)(data|event|id|retry):/.test(t),$e=t=>{if(!t||t==="[DONE]")return!!t;try{return JSON.parse(t),!0}catch(e){return!1}},rn=t=>{if(t){if(nn(t)){let n=pe(t).data.join(`
2
+ `);return $e(n)?n:void 0}return $e(t)?t:void 0}},me=(t,e)=>{var o;t.text+=e;let n=t.text.split(/\r?\n\r?\n/);t.text=(o=n.pop())!=null?o:"";let r=n.map(a=>pe(a).data.join(`
3
+ `)).filter(Boolean),i=rn(t.text);return i!==void 0&&(r.push(i),t.text=""),r},on=(t,e)=>t==="[DONE]"?(A(e.onDone,void 0),!0):(A(e.onMessage,Y(t)),!1),Ye=(t,e,n)=>{let r=pe(t);if(r.data.length===0)return!1;let i=r.data.join(`
4
+ `);if(r.event==="error")return A(n.onError,tn(i)),!0;for(let o of me(e,i))if(on(o,n))return!0;return!1},nt=(t,e)=>m(void 0,null,function*(){var a;if(!t.body)throw h(u.StreamUnavailable,"SSE body missing");let n=t.body.getReader(),r=new TextDecoder,i=he(),o="";try{for(;;){let{done:d,value:s}=yield n.read();o+=r.decode(s,{stream:!d});let l=o.split(/\r?\n\r?\n/);o=(a=l.pop())!=null?a:"";for(let p of l)if(Ye(p,i,e))return;if(d){if(o&&Ye(o,i,e))return;A(e.onError,h(u.StreamInterrupted,"SSE stream ended without [DONE]"));return}}}finally{n.releaseLock()}}),fe=()=>{var n;let t=typeof globalThis.location=="undefined"?"":globalThis.location.pathname,e=/^\/?(preview\/)?app\/([^/]+)(\/|$)/.exec(t);return e?{env:e[1]?"preview":de,siteToken:decodeURIComponent((n=e[2])!=null?n:"")}:{}},rt=(t,e,n)=>{if(!t.startsWith("/")||t.startsWith("//"))throw h(u.InvalidHttpUrl,"AI function endpoint must be a same-origin relative path");let r=t.replace("{siteToken}",encodeURIComponent(e.siteToken)).replace(":token",encodeURIComponent(e.siteToken)).replace("{functionKey}","").replace(":function_key",""),i=new URL(r,"https://base.site");if(i.searchParams.set("env",e.env),n)for(let[o,a]of Object.entries(n))i.searchParams.set(o,a);return`${i.pathname}${i.search}`};var sn="/space/api/bitable/streaming/site/v1/:token/ai_functions/:function_key/invoke",ot="/space/api/bitable/site/v1/:token/ai_functions/:function_key/tasks",an=6e4,cn=/^([1-9][0-9]{1,4})x([1-9][0-9]{1,4})$/i,dn=3686400,un=16777216,ln=14,pn=t=>{let e=t.trim().replace("\xD7","x");if(/^[234]K$/i.test(e))return!0;let n=cn.exec(e);if(!n)return!1;let r=Number(n[1]),i=Number(n[2]),o=r*i;return o>=dn&&o<=un&&r<=i*16&&i<=r*16},hn=t=>{if(!t)return;let e=typeof t.image=="string"?[t.image]:t.image;if(e&&(e.length<1||e.length>ln||e.some(n=>!n.trim())))throw h(u.InvalidAIFunctionTask,"input.image must contain 1 to 14 non-empty strings");if(t.size!==void 0&&!pn(t.size))throw h(u.InvalidAIFunctionTask,"input.size must follow the Seedream 5.0 lite size limits")},Ee=t=>{var n;let e=(n=t.siteToken)==null?void 0:n.trim();return c(c(c({},t.env?{env:t.env}:{}),t.requestId?{requestId:t.requestId}:{}),e?{siteToken:e}:{})},Ae=t=>{var r,i,o;let e=fe(),n=((r=t.siteToken)==null?void 0:r.trim())||e.siteToken;if(!n)throw Xe();return{env:(o=(i=t.env)!=null?i:e.env)!=null?o:de,requestId:t.requestId,siteToken:n}},ve=(t,e,n)=>rt(t.replace(":function_key",encodeURIComponent(e)),n),st=t=>S(c({},t.requestId?{"X-Request-Id":t.requestId}:{}),{Accept:"application/json","Content-Type":"application/json"}),at=t=>{var e;return!t.channel&&!ue()?globalThis.fetch:G(W((e=t.channel)!=null?e:_),an)},Se=class{constructor(e,n){this.params=e;this.context=n;this.callbacks={};this.controller=new AbortController;this.closed=!1;this.onMessage=e=>{this.callbacks.onMessage=e};this.onError=e=>{this.callbacks.onError=e};this.onDone=e=>{this.callbacks.onDone=e};this.destroy=()=>{this.closed||(this.closed=!0,this.controller.abort())};le(()=>{this.start()})}start(){return m(this,null,function*(){var e;if(!this.closed)try{let n=yield fetch(ve(sn,this.params.functionKey,this.context),{body:JSON.stringify({messages:this.params.messages,variables:(e=this.params.variables)!=null?e:{}}),credentials:"include",headers:S(c({},this.context.requestId?{"X-Request-Id":this.context.requestId}:{}),{Accept:"text/event-stream","Content-Type":"application/json"}),method:"POST",signal:this.controller.signal});if(!n.ok)throw h("HTTP_ERROR",`${n.status} ${n.statusText}`);yield nt(n,this.callbacks)}catch(n){this.closed||A(this.callbacks.onError,n instanceof Error?n:h("STREAM_FAILED"))}})}},Ie=class{constructor(e){this.options=e;this.closed=!1;this.onMessage=e=>{this.onMessageCallback=e};this.onError=e=>{this.onErrorCallback=e};this.onDone=e=>{this.onDoneCallback=e};this.destroy=()=>{this.closed=!0;let e=this.current;e&&(this.cleanup(),this.channel.invokeApi(g.AIFunctionStreamClose,{subscriptionId:e.subscriptionId}).catch(()=>console.error("[base-site-channel][runtime] AI function stream close failed")))};var n;this.channel=(n=e.channel)!=null?n:_,le(()=>this.init())}init(){var i;if(this.closed)return;this.cleanup();let e=Je(),n={lastSeq:0,subscriptionId:e,unsubscribeDone:()=>{},unsubscribeError:()=>{},unsubscribeMessage:()=>{},upstream:he()};n.unsubscribeMessage=this.channel.subscribeEvent(E.AIFunctionStreamMessage,o=>this.handleMessage(o,n)),n.unsubscribeError=this.channel.subscribeEvent(E.AIFunctionStreamError,o=>this.handleError(o,e)),n.unsubscribeDone=this.channel.subscribeEvent(E.AIFunctionStreamDone,o=>this.handleDone(o,e)),this.current=n;let r=c(c(c({functionKey:this.options.params.functionKey,messages:this.options.params.messages,subscriptionId:e,variables:(i=this.options.params.variables)!=null?i:{}},this.options.context.env?{env:this.options.context.env}:{}),this.options.context.requestId?{requestId:this.options.context.requestId}:{}),this.options.context.siteToken?{siteToken:this.options.context.siteToken}:{});this.channel.invokeApi(g.AIFunctionStreamOpen,r).catch(()=>{var o;((o=this.current)==null?void 0:o.subscriptionId)===e&&A(this.onErrorCallback,h(u.StreamOpenFailed))})}handleMessage(e,n){if(e.subscriptionId===n.subscriptionId&&!(e.seq<=n.lastSeq)){if(e.seq>n.lastSeq+1&&A(this.onErrorCallback,h(u.StreamSeqGap)),n.lastSeq=e.seq,typeof e.data!="string"){A(this.onMessageCallback,tt(e.data));return}me(n.upstream,e.data).forEach(r=>{r!=="[DONE]"&&A(this.onMessageCallback,Y(r))})}}handleError(e,n){e.subscriptionId===n&&(A(this.onErrorCallback,h(e.code,e.message)),this.cleanup())}handleDone(e,n){e.subscriptionId===n&&(A(this.onDoneCallback,void 0),this.cleanup())}cleanup(){let e=this.current;e&&(e.unsubscribeMessage(),e.unsubscribeError(),e.unsubscribeDone(),this.current=void 0)}},ct=(t,e={})=>{var r;if(!((r=t.functionKey)!=null&&r.trim()))throw h(u.InvalidFunctionName,"functionKey is required");let n=c(c({},fe()),Ee(e));return e.channel||ue()?new Ie({channel:e.channel,context:n,params:t}):new Se(t,Ae(e))},mn=t=>m(void 0,null,function*(){if(!t.ok){let e=yield t.text().catch(()=>"");throw h("HTTP_ERROR",`${t.status} ${t.statusText} ${e}`)}try{return yield t.json()}catch(e){throw h(u.InvalidAIFunctionTask,"AI function task response is invalid")}}),O=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),fn=t=>t==="cancelled"||t==="failed"||t==="queued"||t==="running"||t==="succeeded",I=(t,e)=>{for(let n of e){let r=t[n];if(typeof r=="string"&&r.trim())return r}},gn=(t,e)=>{for(let n of e){let r=t[n];if(typeof r=="number"&&Number.isFinite(r))return r}},Sn=t=>{let e=I(t,["capabilityType","capability_type","CapabilityType"]);return e==="image"||e==="video"?e:void 0},In=t=>{if(Array.isArray(t))return t.filter(O).map(e=>{var o;let n=I(e,["size","Size"]),r=I(e,["token","Token"]),i=I(e,["url","URL"]);return c(c(c({safetyStatus:(o=I(e,["safetyStatus","safety_status","SafetyStatus"]))!=null?o:""},n?{size:n}:{}),r?{token:r}:{}),i?{url:i}:{})})},yn=t=>{var i,o;if(!O(t))return;let e=(o=(i=t.durationSeconds)!=null?i:t.duration_seconds)!=null?o:t.DurationSeconds,n=I(t,["token","Token"]),r=I(t,["url","URL"]);return c(c(c({},typeof e=="number"?{durationSeconds:e}:{}),n?{token:n}:{}),r?{url:r}:{})},ge=t=>{var f,T,C,F,L,H;if(!O(t))throw h(u.InvalidAIFunctionTask,"AI function task response is invalid");let e=I(t,["type","Type"]),n=I(t,["taskId","task_id","TaskID"]),r=(f=t.status)!=null?f:t.Status;if(e!=="image_task"&&e!=="video_task"||!n||!fn(r))throw h(u.InvalidAIFunctionTask,"AI function task response is invalid");let i=(T=I(t,["requestId","request_id","RequestID"]))!=null?T:"",o=gn(t,["progress","Progress"]),a=Sn(t),d=I(t,["errCode","err_code","ErrCode"]),s=I(t,["errMessage","err_message","ErrMessage"]),l=In((F=(C=t.imageAssets)!=null?C:t.image_assets)!=null?F:t.ImageAssets),p=yn((H=(L=t.videoAsset)!=null?L:t.video_asset)!=null?H:t.VideoAsset);return S(c(c(c(c(c(c({},a?{capabilityType:a}:{}),d?{errCode:d}:{}),s?{errMessage:s}:{}),l?{imageAssets:l}:{}),o!==void 0?{progress:o}:{}),p?{videoAsset:p}:{}),{requestId:i,status:r,taskId:n,type:e})},En=t=>{var i,o,a,d,s,l,p;let e=(i=t.code)!=null?i:t.Code;if(typeof e=="number"&&e!==0||typeof e=="string"&&e&&e!=="0")return{code:String(e),message:(o=I(t,["msg","message","Message"]))!=null?o:"AI function task failed"};let n=(d=(a=t.BaseResp)!=null?a:t.base_resp)!=null?d:t.baseResp;if(!O(n))return;let r=(l=(s=n.StatusCode)!=null?s:n.status_code)!=null?l:n.statusCode;if(typeof r=="number"&&r!==0||typeof r=="string"&&r&&r!=="0")return{code:String(r),message:(p=I(n,["StatusMessage","status_message","statusMessage"]))!=null?p:"AI function task failed"}},An=t=>{if(!O(t))return ge(t);let e=En(t);if(e)throw h(e.code,e.message);return"data"in t&&t.data!==void 0?ge(t.data):ge(t)},dt=t=>m(void 0,null,function*(){return An(yield mn(t))}),ye=(n,...r)=>m(void 0,[n,...r],function*(t,e={}){var a,d,s;if(!((a=t.functionKey)!=null&&a.trim()))throw h(u.InvalidFunctionName,"functionKey is required");t.capability==="image"&&hn(t.input);let i=Ae(c(c({},e),Ee(e))),o=yield at(e)(ve(ot,t.functionKey,i),{body:JSON.stringify({input:(d=t.input)!=null?d:{},variables:(s=t.variables)!=null?s:{}}),credentials:"include",headers:st(i),method:"POST"});return dt(o)}),vn=(r,i,...o)=>m(void 0,[r,i,...o],function*(t,e,n={}){if(!(t!=null&&t.trim()))throw h(u.InvalidFunctionName,"functionKey is required");if(typeof e!="string"||!e.trim())throw h(u.InvalidAIFunctionTask,"taskId is required");let a=Ae(c(c({},n),Ee(n))),d=ve(ot,t,a),s=d.includes("?")?`${d.replace("?",`/${encodeURIComponent(e)}?`)}`:`${d}/${encodeURIComponent(e)}`,l=yield at(n)(s,{credentials:"include",headers:st(a),method:"GET"});return dt(l)}),it=(t,e)=>new Promise((n,r)=>{var d;let i="",o="",a=ct({functionKey:t.functionKey,messages:(d=t.messages)!=null?d:[],variables:t.variables},e);a.onMessage(s=>{typeof s.content=="string"&&(i+=s.content),!o&&typeof s.requestId=="string"&&s.requestId&&(o=s.requestId)}),a.onError(s=>{a.destroy(),r(s)}),a.onDone(()=>{a.destroy(),n({content:i,requestId:o||e.requestId||"",type:"text"})})}),bn=(n,...r)=>m(void 0,[n,...r],function*(t,e={}){var i;if(!((i=t.functionKey)!=null&&i.trim()))throw h(u.InvalidFunctionName,"functionKey is required");return t.capability==="image"||t.capability==="video"?ye(t,e):t.capability==="text"||t.capability==="vision"?it(t,e):t.input&&!t.messages?ye(t,e):it(t,e)});var U,Tn=(t={})=>{if(U)return U;if(typeof window=="undefined"||typeof document=="undefined")return()=>{};let e=window.open,n=s=>{t.onError?t.onError(s):console.warn("[Site Runtime] Unable to open link")},r=s=>{se(s).then(l=>{l.opened||n(new Error("Link was not opened"))},n)},i=s=>{try{return new URL(s,document.baseURI||window.location.href)}catch(l){return}},o=s=>{var F,L,H;if(s.defaultPrevented||(s.type==="auxclick"?s.button!==1:s.button!==0))return;let l=s.target instanceof Element?s.target:null,p=l==null?void 0:l.closest("a[href]");if(!p||p.hasAttribute("download"))return;let f=(L=(F=p.getAttribute("href"))==null?void 0:F.trim())!=null?L:"";if(!f||f.startsWith("#"))return;let T=i(f);!T||!["http:","https:"].includes(T.protocol)||((H=p.getAttribute("target"))==null?void 0:H.toLowerCase())!=="_blank"&&T.origin===window.location.origin&&!s.ctrlKey&&!s.metaKey&&!s.shiftKey&&s.button!==1||(s.preventDefault(),r(T.href))},a=(s,l,p)=>{if(s===void 0||!String(s).trim())return null;if(String(s).trim().startsWith("#"))return e.call(window,s,l,p);let f=i(String(s));return!f||!["http:","https:","mailto:","tel:"].includes(f.protocol)?null:f.origin===window.location.origin&&(l==null?void 0:l.toLowerCase())==="_self"?e.call(window,s,l,p):(r(f.href),null)};document.addEventListener("click",o,!0),document.addEventListener("auxclick",o,!0),window.open=a;let d=()=>{U===d&&(document.removeEventListener("click",o,!0),document.removeEventListener("auxclick",o,!0),window.open===a&&(window.open=e),U=void 0)};return U=d,d};export{De as SITE_RUNTIME_PROTOCOL_VERSION,ae as SiteChatbotStreamAdapter,w as SiteChatbotStreamError,g as SiteRuntimeApi,z as SiteRuntimeClient,u as SiteRuntimeErrorCode,E as SiteRuntimeEvent,j as SiteRuntimeFunction,y as SiteRuntimeInvocationError,bn as callSiteAIFunction,ye as createSiteAIFunctionTask,W as createSiteRuntimeClient,G as createSiteRuntimeFetch,Qt as fetch,qt as getCurrentUser,vn as getSiteAIFunctionTask,Tn as installLinkGuard,Bt as invokeApi,Dt as invokeHttp,ct as invokeSiteAIFunctionStream,Be as isValidSiteFunctionName,Kt as logout,se as openLink,Pr as readSiteAITextDelta,jt as requestEdit,b as siteRuntime,Vt as uploadAttachment};
package/package.json CHANGED
@@ -1 +1,46 @@
1
- {"name":"@lark-base-open/base-site-channel","version":"0.1.4","description":"","main":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.mjs"},"./runtime":{"types":"./dist/runtime.d.ts","import":"./dist/runtime.mjs"},"./runtime-contract":{"types":"./dist/runtime-contract.d.ts","import":"./dist/runtime-contract.mjs"}},"files":["dist"],"scripts":{"test":"npm run build && node --import tsx --test test/*.test.ts && npm run test:types","test:types":"tsc --noEmit --strict --skipLibCheck --module esnext --moduleResolution bundler --target es2022 test-types/function-map.ts","build":"tsup","dev":"NODE_ENV=development tsup --watch","upload:alpha":"pnpm build && npx @bitable/pack-dev-cli upload"},"keywords":[],"author":"","devDependencies":{"@types/node":"^22.15.0","tsup":"^6.7.0","tsx":"^4.20.3","typescript":"^5.8.3"},"dependencies":{"lodash-es":"^4.17.21"}}
1
+ {
2
+ "name": "@lark-base-open/base-site-channel",
3
+ "version": "0.1.5",
4
+ "description": "",
5
+ "main": "dist/index.mjs",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.mjs"
11
+ },
12
+ "./client": {
13
+ "types": "./dist/client.d.ts",
14
+ "import": "./dist/client.mjs"
15
+ },
16
+ "./runtime": {
17
+ "types": "./dist/runtime.d.ts",
18
+ "import": "./dist/runtime.mjs"
19
+ },
20
+ "./runtime-contract": {
21
+ "types": "./dist/runtime-contract.d.ts",
22
+ "import": "./dist/runtime-contract.mjs"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "scripts": {
29
+ "test": "npm run build && node --import tsx --test test/*.test.ts && npm run test:types",
30
+ "test:types": "tsc --noEmit --strict --skipLibCheck --module esnext --moduleResolution bundler --target es2022 test-types/function-map.ts",
31
+ "build": "tsup",
32
+ "dev": "NODE_ENV=development tsup --watch",
33
+ "upload:alpha": "pnpm build && npx @bitable/pack-dev-cli upload"
34
+ },
35
+ "keywords": [],
36
+ "author": "",
37
+ "devDependencies": {
38
+ "@types/node": "^22.15.0",
39
+ "tsup": "^6.7.0",
40
+ "tsx": "^4.20.3",
41
+ "typescript": "^5.8.3"
42
+ },
43
+ "dependencies": {
44
+ "lodash-es": "^4.17.21"
45
+ }
46
+ }