@coxwave/tap-sdk 0.1.0 → 0.2.1
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/dist/index.d.cts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.global.js +2 -2
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/index.ts +10 -3
- package/package.json +2 -4
package/dist/index.d.cts
CHANGED
|
@@ -70,6 +70,7 @@ interface TapSDKInstance {
|
|
|
70
70
|
isInitialized: boolean;
|
|
71
71
|
init(params: TapSDKInitParams): Promise<void>;
|
|
72
72
|
destroy(): void;
|
|
73
|
+
getVersion(): string;
|
|
73
74
|
initChat(params: TapSDKInitParams): Promise<void>;
|
|
74
75
|
postChatInfo(params: {
|
|
75
76
|
clipId: string;
|
|
@@ -106,6 +107,7 @@ declare class TapSDK implements TapSDKInstance {
|
|
|
106
107
|
get isInitialized(): boolean;
|
|
107
108
|
init(params: TapSDKInitParams): Promise<void>;
|
|
108
109
|
destroy(): void;
|
|
110
|
+
getVersion(): string;
|
|
109
111
|
initChat(params: TapSDKInitParams): Promise<void>;
|
|
110
112
|
postChatInfo(params: {
|
|
111
113
|
clipId: string;
|
|
@@ -116,4 +118,4 @@ declare class TapSDK implements TapSDKInstance {
|
|
|
116
118
|
}): Promise<void>;
|
|
117
119
|
}
|
|
118
120
|
|
|
119
|
-
export { type ContainerStyle, type Course, type PositionType, type SeekTimelineParamsType, TapSDK, type TapSDKConfig, type TapSDKConstructor, type TapSDKInitParams, type TapSDKInstance, TapSDK as default };
|
|
121
|
+
export { type ContainerStyle, type Course, type PositionType, type SeekTimelineParamsType, type TapSDKInstance as TapSDK, type TapSDKConfig, type TapSDKConstructor, type TapSDKInitParams, type TapSDKInstance, TapSDK as default };
|
package/dist/index.d.ts
CHANGED
|
@@ -70,6 +70,7 @@ interface TapSDKInstance {
|
|
|
70
70
|
isInitialized: boolean;
|
|
71
71
|
init(params: TapSDKInitParams): Promise<void>;
|
|
72
72
|
destroy(): void;
|
|
73
|
+
getVersion(): string;
|
|
73
74
|
initChat(params: TapSDKInitParams): Promise<void>;
|
|
74
75
|
postChatInfo(params: {
|
|
75
76
|
clipId: string;
|
|
@@ -106,6 +107,7 @@ declare class TapSDK implements TapSDKInstance {
|
|
|
106
107
|
get isInitialized(): boolean;
|
|
107
108
|
init(params: TapSDKInitParams): Promise<void>;
|
|
108
109
|
destroy(): void;
|
|
110
|
+
getVersion(): string;
|
|
109
111
|
initChat(params: TapSDKInitParams): Promise<void>;
|
|
110
112
|
postChatInfo(params: {
|
|
111
113
|
clipId: string;
|
|
@@ -116,4 +118,4 @@ declare class TapSDK implements TapSDKInstance {
|
|
|
116
118
|
}): Promise<void>;
|
|
117
119
|
}
|
|
118
120
|
|
|
119
|
-
export { type ContainerStyle, type Course, type PositionType, type SeekTimelineParamsType, TapSDK, type TapSDKConfig, type TapSDKConstructor, type TapSDKInitParams, type TapSDKInstance, TapSDK as default };
|
|
121
|
+
export { type ContainerStyle, type Course, type PositionType, type SeekTimelineParamsType, type TapSDKInstance as TapSDK, type TapSDKConfig, type TapSDKConstructor, type TapSDKInitParams, type TapSDKInstance, TapSDK as default };
|
package/dist/index.global.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var TapSDK=(function(
|
|
2
|
-
|
|
1
|
+
var TapSDK=(function(){'use strict';var p=Object.defineProperty;var l=(i,e,n)=>e in i?p(i,e,{enumerable:true,configurable:true,writable:true,value:n}):i[e]=n;var t=(i,e,n)=>l(i,typeof e!="symbol"?e+"":e,n);var s="https://files.edutap.ai/tap-sdk/loader.js";function c(){if(window.__TAP_SDK_LOADER_LOADED__&&window.TapSDK)return Promise.resolve();if(window.__TAP_SDK_LOADER_LOADING__)return window.__TAP_SDK_LOADER_LOADING__;let i=new Promise((e,n)=>{if(typeof document>"u"){n(new Error("TapSDK requires browser environment (document is undefined)"));return}let o=document.createElement("script");o.src=s,o.async=true,o.onload=()=>{let a=()=>{window.TapSDK?(window.__TAP_SDK_LOADER_LOADED__=true,window.__TAP_SDK_LOADER_LOADING__=void 0,e()):setTimeout(a,50);};a();},o.onerror=()=>{window.__TAP_SDK_LOADER_LOADING__=void 0,n(new Error(`Failed to load TapSDK CDN loader: ${s}`));};let d=document.querySelector(`script[src="${s}"]`);d?(d.addEventListener("load",()=>{let a=()=>{window.TapSDK?e():setTimeout(a,50);};a();}),d.addEventListener("error",()=>n(new Error(`Failed to load TapSDK CDN loader: ${s}`)))):document.head.appendChild(o);});return window.__TAP_SDK_LOADER_LOADING__=i,i}var r=class{constructor(e){t(this,"config");t(this,"sdkInstance");t(this,"loadPromise");this.config=e,this.loadPromise=this.loadAndInitialize();}async loadAndInitialize(){if(await c(),!window.TapSDK)throw new Error("TapSDK not available after loading CDN loader");this.sdkInstance=new window.TapSDK(this.config);}async ensureLoaded(){if(await this.loadPromise,!this.sdkInstance)throw new Error("TapSDK instance not initialized");return this.sdkInstance}get events(){return {seekTimeline:e=>{this.ensureLoaded().then(n=>n.events.seekTimeline(e));},onTimelineSeek:e=>{this.ensureLoaded().then(n=>n.events.onTimelineSeek(e));},onChatInitiated:e=>{this.ensureLoaded().then(n=>n.events.onChatInitiated(e));},onChatOpened:e=>{this.ensureLoaded().then(n=>n.events.onChatOpened(e));},onChatClosed:e=>{this.ensureLoaded().then(n=>n.events.onChatClosed(e));},onAlarmFadeIn:e=>{this.ensureLoaded().then(n=>n.events.onAlarmFadeIn(e));},onPopUpOpen:e=>{this.ensureLoaded().then(n=>n.events.onPopUpOpen(e));},onPdfOpen:e=>{this.ensureLoaded().then(n=>n.events.onPdfOpen(e));},onPdfClose:e=>{this.ensureLoaded().then(n=>n.events.onPdfClose(e));}}}get isOpen(){return this.sdkInstance?.isOpen??false}get isInitialized(){return this.sdkInstance?.isInitialized??false}async init(e){return (await this.ensureLoaded()).init(e)}destroy(){this.sdkInstance&&this.sdkInstance.destroy();}getVersion(){return this.sdkInstance?.getVersion()??"Not initialized"}async initChat(e){return (await this.ensureLoaded()).initChat(e)}async postChatInfo(e){return (await this.ensureLoaded()).postChatInfo(e)}async getTimelineInfo(e){return (await this.ensureLoaded()).getTimelineInfo(e)}},D=r;
|
|
2
|
+
return D;})();//# sourceMappingURL=index.global.js.map
|
|
3
3
|
//# sourceMappingURL=index.global.js.map
|
package/dist/index.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"names":["CDN_LOADER_URL","loadCDNLoader","loadingPromise","resolve","reject","script","checkSDK","existingScript","TapSDK","config","__publicField","params","sdk","callback","handler","index_default"],"mappings":"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","file":"index.global.js","sourcesContent":["/**\n * TapSDK - npm package wrapper\n *\n * Simply loads the CDN loader which handles version management and SDK loading.\n * This keeps the npm package minimal and allows instant updates via CDN.\n */\n\nimport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n} from './types';\n\nconst CDN_LOADER_URL = 'https://files.edutap.ai/tap-sdk/loader.js';\n\n// Global namespace for loaded SDK\n// Export type for IIFE bundles loaded via window.TapSDK\nexport type TapSDKConstructor = new (config: TapSDKConfig) => TapSDKInstance;\n\ndeclare global {\n interface Window {\n TapSDK?: TapSDKConstructor;\n __TAP_SDK_LOADER_LOADED__?: boolean;\n __TAP_SDK_LOADER_LOADING__?: Promise<void>;\n }\n}\n\ninterface TapSDKInstance {\n events: {\n seekTimeline: (params: SeekTimelineParamsType) => void;\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => void;\n onChatInitiated: (handler: () => void) => void;\n onChatOpened: (handler: () => void) => void;\n onChatClosed: (handler: () => void) => void;\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => void;\n onPopUpOpen: (handler: (popUpInfo: any) => void) => void;\n onPdfOpen: (handler: () => void) => void;\n onPdfClose: (handler: () => void) => void;\n };\n isOpen: boolean;\n isInitialized: boolean;\n init(params: TapSDKInitParams): Promise<void>;\n destroy(): void;\n // Deprecated methods\n initChat(params: TapSDKInitParams): Promise<void>;\n postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void>;\n getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void>;\n}\n\n/**\n * Loads the CDN loader script\n * The loader will then fetch versions.json and load the appropriate SDK version\n */\nfunction loadCDNLoader(): Promise<void> {\n // If already loaded, return immediately\n if (window.__TAP_SDK_LOADER_LOADED__ && window.TapSDK) {\n return Promise.resolve();\n }\n\n // If currently loading, return the existing promise\n if (window.__TAP_SDK_LOADER_LOADING__) {\n return window.__TAP_SDK_LOADER_LOADING__;\n }\n\n // Create loading promise\n const loadingPromise = new Promise<void>((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('TapSDK requires browser environment (document is undefined)'));\n return;\n }\n\n const script = document.createElement('script');\n script.src = CDN_LOADER_URL;\n script.async = true;\n\n script.onload = () => {\n // The loader script will load the actual SDK\n // We need to wait a bit for the loader to fetch and load the SDK\n const checkSDK = () => {\n if (window.TapSDK) {\n window.__TAP_SDK_LOADER_LOADED__ = true;\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n resolve();\n } else {\n // Check again after a short delay\n setTimeout(checkSDK, 50);\n }\n };\n checkSDK();\n };\n\n script.onerror = () => {\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`));\n };\n\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${CDN_LOADER_URL}\"]`);\n if (existingScript) {\n // Script already added but not yet loaded\n existingScript.addEventListener('load', () => {\n const checkSDK = () => {\n if (window.TapSDK) resolve();\n else setTimeout(checkSDK, 50);\n };\n checkSDK();\n });\n existingScript.addEventListener('error', () =>\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`))\n );\n } else {\n document.head.appendChild(script);\n }\n });\n\n window.__TAP_SDK_LOADER_LOADING__ = loadingPromise;\n return loadingPromise;\n}\n\n/**\n * TapSDK Wrapper Class\n *\n * Loads the CDN loader and proxies all calls to the actual SDK\n */\nclass TapSDK implements TapSDKInstance {\n private config: TapSDKConfig;\n private sdkInstance?: TapSDKInstance;\n private loadPromise: Promise<void>;\n\n constructor(config: TapSDKConfig) {\n this.config = config;\n this.loadPromise = this.loadAndInitialize();\n }\n\n private async loadAndInitialize(): Promise<void> {\n await loadCDNLoader();\n\n if (!window.TapSDK) {\n throw new Error('TapSDK not available after loading CDN loader');\n }\n\n this.sdkInstance = new window.TapSDK(this.config);\n }\n\n private async ensureLoaded(): Promise<TapSDKInstance> {\n await this.loadPromise;\n if (!this.sdkInstance) {\n throw new Error('TapSDK instance not initialized');\n }\n return this.sdkInstance;\n }\n\n // Public API - all methods proxy to the loaded SDK\n get events() {\n return {\n seekTimeline: (params: SeekTimelineParamsType) => {\n this.ensureLoaded().then(sdk => sdk.events.seekTimeline(params));\n },\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onTimelineSeek(callback));\n },\n onChatInitiated: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatInitiated(handler));\n },\n onChatOpened: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatOpened(handler));\n },\n onChatClosed: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatClosed(handler));\n },\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onAlarmFadeIn(handler));\n },\n onPopUpOpen: (handler: (popUpInfo: any) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPopUpOpen(handler));\n },\n onPdfOpen: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfOpen(handler));\n },\n onPdfClose: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfClose(handler));\n },\n };\n }\n\n get isOpen(): boolean {\n return this.sdkInstance?.isOpen ?? false;\n }\n\n get isInitialized(): boolean {\n return this.sdkInstance?.isInitialized ?? false;\n }\n\n async init(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.init(params);\n }\n\n destroy(): void {\n if (this.sdkInstance) {\n this.sdkInstance.destroy();\n }\n }\n\n // Deprecated methods\n async initChat(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.initChat(params);\n }\n\n async postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.postChatInfo(params);\n }\n\n async getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.getTimelineInfo(params);\n }\n}\n\n// Export the SDK as default\nexport default TapSDK;\nexport { TapSDK };\n\n// Export TapSDK instance type\nexport type { TapSDKInstance };\n\n// Re-export types for API compatibility\nexport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"names":["CDN_LOADER_URL","loadCDNLoader","loadingPromise","resolve","reject","script","checkSDK","existingScript","TapSDK","config","__publicField","params","sdk","callback","handler","index_default"],"mappings":"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","file":"index.global.js","sourcesContent":["/**\n * TapSDK - npm package wrapper\n *\n * Simply loads the CDN loader which handles version management and SDK loading.\n * This keeps the npm package minimal and allows instant updates via CDN.\n */\n\nimport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n} from './types';\n\nconst CDN_LOADER_URL = 'https://files.edutap.ai/tap-sdk/loader.js';\n\n// Global namespace for loaded SDK\n// Export type for IIFE bundles loaded via window.TapSDK\nexport type TapSDKConstructor = new (config: TapSDKConfig) => TapSDKInstance;\n\ndeclare global {\n interface Window {\n TapSDK?: TapSDKConstructor;\n __TAP_SDK_LOADER_LOADED__?: boolean;\n __TAP_SDK_LOADER_LOADING__?: Promise<void>;\n }\n}\n\ninterface TapSDKInstance {\n events: {\n seekTimeline: (params: SeekTimelineParamsType) => void;\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => void;\n onChatInitiated: (handler: () => void) => void;\n onChatOpened: (handler: () => void) => void;\n onChatClosed: (handler: () => void) => void;\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => void;\n onPopUpOpen: (handler: (popUpInfo: any) => void) => void;\n onPdfOpen: (handler: () => void) => void;\n onPdfClose: (handler: () => void) => void;\n };\n isOpen: boolean;\n isInitialized: boolean;\n init(params: TapSDKInitParams): Promise<void>;\n destroy(): void;\n getVersion(): string;\n // Deprecated methods\n initChat(params: TapSDKInitParams): Promise<void>;\n postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void>;\n getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void>;\n}\n\n/**\n * Loads the CDN loader script\n * The loader will then fetch versions.json and load the appropriate SDK version\n */\nfunction loadCDNLoader(): Promise<void> {\n // If already loaded, return immediately\n if (window.__TAP_SDK_LOADER_LOADED__ && window.TapSDK) {\n return Promise.resolve();\n }\n\n // If currently loading, return the existing promise\n if (window.__TAP_SDK_LOADER_LOADING__) {\n return window.__TAP_SDK_LOADER_LOADING__;\n }\n\n // Create loading promise\n const loadingPromise = new Promise<void>((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('TapSDK requires browser environment (document is undefined)'));\n return;\n }\n\n const script = document.createElement('script');\n script.src = CDN_LOADER_URL;\n script.async = true;\n\n script.onload = () => {\n // The loader script will load the actual SDK\n // We need to wait a bit for the loader to fetch and load the SDK\n const checkSDK = () => {\n if (window.TapSDK) {\n window.__TAP_SDK_LOADER_LOADED__ = true;\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n resolve();\n } else {\n // Check again after a short delay\n setTimeout(checkSDK, 50);\n }\n };\n checkSDK();\n };\n\n script.onerror = () => {\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`));\n };\n\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${CDN_LOADER_URL}\"]`);\n if (existingScript) {\n // Script already added but not yet loaded\n existingScript.addEventListener('load', () => {\n const checkSDK = () => {\n if (window.TapSDK) resolve();\n else setTimeout(checkSDK, 50);\n };\n checkSDK();\n });\n existingScript.addEventListener('error', () =>\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`))\n );\n } else {\n document.head.appendChild(script);\n }\n });\n\n window.__TAP_SDK_LOADER_LOADING__ = loadingPromise;\n return loadingPromise;\n}\n\n/**\n * TapSDK Wrapper Class\n *\n * Loads the CDN loader and proxies all calls to the actual SDK\n */\nclass TapSDK implements TapSDKInstance {\n private config: TapSDKConfig;\n private sdkInstance?: TapSDKInstance;\n private loadPromise: Promise<void>;\n\n constructor(config: TapSDKConfig) {\n this.config = config;\n this.loadPromise = this.loadAndInitialize();\n }\n\n private async loadAndInitialize(): Promise<void> {\n await loadCDNLoader();\n\n if (!window.TapSDK) {\n throw new Error('TapSDK not available after loading CDN loader');\n }\n\n this.sdkInstance = new window.TapSDK(this.config);\n }\n\n private async ensureLoaded(): Promise<TapSDKInstance> {\n await this.loadPromise;\n if (!this.sdkInstance) {\n throw new Error('TapSDK instance not initialized');\n }\n return this.sdkInstance;\n }\n\n // Public API - all methods proxy to the loaded SDK\n get events() {\n return {\n seekTimeline: (params: SeekTimelineParamsType) => {\n this.ensureLoaded().then(sdk => sdk.events.seekTimeline(params));\n },\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onTimelineSeek(callback));\n },\n onChatInitiated: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatInitiated(handler));\n },\n onChatOpened: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatOpened(handler));\n },\n onChatClosed: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatClosed(handler));\n },\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onAlarmFadeIn(handler));\n },\n onPopUpOpen: (handler: (popUpInfo: any) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPopUpOpen(handler));\n },\n onPdfOpen: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfOpen(handler));\n },\n onPdfClose: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfClose(handler));\n },\n };\n }\n\n get isOpen(): boolean {\n return this.sdkInstance?.isOpen ?? false;\n }\n\n get isInitialized(): boolean {\n return this.sdkInstance?.isInitialized ?? false;\n }\n\n async init(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.init(params);\n }\n\n destroy(): void {\n if (this.sdkInstance) {\n this.sdkInstance.destroy();\n }\n }\n\n getVersion(): string {\n return this.sdkInstance?.getVersion() ?? 'Not initialized';\n }\n\n // Deprecated methods\n async initChat(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.initChat(params);\n }\n\n async postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.postChatInfo(params);\n }\n\n async getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.getTimelineInfo(params);\n }\n}\n\n// Export the SDK class as default (for: import TapSDK from '@coxwave/tap-sdk')\nexport default TapSDK;\n\n// Export TapSDK instance type (for: import type { TapSDK } from '@coxwave/tap-sdk')\nexport type { TapSDKInstance as TapSDK };\n\n// Keep TapSDKInstance for backward compatibility\nexport type { TapSDKInstance };\n\n// Re-export types for API compatibility\nexport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n};\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
1
|
+
'use strict';var p=Object.defineProperty;var l=(i,e,n)=>e in i?p(i,e,{enumerable:true,configurable:true,writable:true,value:n}):i[e]=n;var t=(i,e,n)=>l(i,typeof e!="symbol"?e+"":e,n);var s="https://files.edutap.ai/tap-sdk/loader.js";function c(){if(window.__TAP_SDK_LOADER_LOADED__&&window.TapSDK)return Promise.resolve();if(window.__TAP_SDK_LOADER_LOADING__)return window.__TAP_SDK_LOADER_LOADING__;let i=new Promise((e,n)=>{if(typeof document>"u"){n(new Error("TapSDK requires browser environment (document is undefined)"));return}let o=document.createElement("script");o.src=s,o.async=true,o.onload=()=>{let a=()=>{window.TapSDK?(window.__TAP_SDK_LOADER_LOADED__=true,window.__TAP_SDK_LOADER_LOADING__=void 0,e()):setTimeout(a,50);};a();},o.onerror=()=>{window.__TAP_SDK_LOADER_LOADING__=void 0,n(new Error(`Failed to load TapSDK CDN loader: ${s}`));};let d=document.querySelector(`script[src="${s}"]`);d?(d.addEventListener("load",()=>{let a=()=>{window.TapSDK?e():setTimeout(a,50);};a();}),d.addEventListener("error",()=>n(new Error(`Failed to load TapSDK CDN loader: ${s}`)))):document.head.appendChild(o);});return window.__TAP_SDK_LOADER_LOADING__=i,i}var r=class{constructor(e){t(this,"config");t(this,"sdkInstance");t(this,"loadPromise");this.config=e,this.loadPromise=this.loadAndInitialize();}async loadAndInitialize(){if(await c(),!window.TapSDK)throw new Error("TapSDK not available after loading CDN loader");this.sdkInstance=new window.TapSDK(this.config);}async ensureLoaded(){if(await this.loadPromise,!this.sdkInstance)throw new Error("TapSDK instance not initialized");return this.sdkInstance}get events(){return {seekTimeline:e=>{this.ensureLoaded().then(n=>n.events.seekTimeline(e));},onTimelineSeek:e=>{this.ensureLoaded().then(n=>n.events.onTimelineSeek(e));},onChatInitiated:e=>{this.ensureLoaded().then(n=>n.events.onChatInitiated(e));},onChatOpened:e=>{this.ensureLoaded().then(n=>n.events.onChatOpened(e));},onChatClosed:e=>{this.ensureLoaded().then(n=>n.events.onChatClosed(e));},onAlarmFadeIn:e=>{this.ensureLoaded().then(n=>n.events.onAlarmFadeIn(e));},onPopUpOpen:e=>{this.ensureLoaded().then(n=>n.events.onPopUpOpen(e));},onPdfOpen:e=>{this.ensureLoaded().then(n=>n.events.onPdfOpen(e));},onPdfClose:e=>{this.ensureLoaded().then(n=>n.events.onPdfClose(e));}}}get isOpen(){return this.sdkInstance?.isOpen??false}get isInitialized(){return this.sdkInstance?.isInitialized??false}async init(e){return (await this.ensureLoaded()).init(e)}destroy(){this.sdkInstance&&this.sdkInstance.destroy();}getVersion(){return this.sdkInstance?.getVersion()??"Not initialized"}async initChat(e){return (await this.ensureLoaded()).initChat(e)}async postChatInfo(e){return (await this.ensureLoaded()).postChatInfo(e)}async getTimelineInfo(e){return (await this.ensureLoaded()).getTimelineInfo(e)}},D=r;
|
|
2
|
+
module.exports=D;//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"names":["CDN_LOADER_URL","loadCDNLoader","loadingPromise","resolve","reject","script","checkSDK","existingScript","TapSDK","config","__publicField","params","sdk","callback","handler","index_default"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * TapSDK - npm package wrapper\n *\n * Simply loads the CDN loader which handles version management and SDK loading.\n * This keeps the npm package minimal and allows instant updates via CDN.\n */\n\nimport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n} from './types';\n\nconst CDN_LOADER_URL = 'https://files.edutap.ai/tap-sdk/loader.js';\n\n// Global namespace for loaded SDK\n// Export type for IIFE bundles loaded via window.TapSDK\nexport type TapSDKConstructor = new (config: TapSDKConfig) => TapSDKInstance;\n\ndeclare global {\n interface Window {\n TapSDK?: TapSDKConstructor;\n __TAP_SDK_LOADER_LOADED__?: boolean;\n __TAP_SDK_LOADER_LOADING__?: Promise<void>;\n }\n}\n\ninterface TapSDKInstance {\n events: {\n seekTimeline: (params: SeekTimelineParamsType) => void;\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => void;\n onChatInitiated: (handler: () => void) => void;\n onChatOpened: (handler: () => void) => void;\n onChatClosed: (handler: () => void) => void;\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => void;\n onPopUpOpen: (handler: (popUpInfo: any) => void) => void;\n onPdfOpen: (handler: () => void) => void;\n onPdfClose: (handler: () => void) => void;\n };\n isOpen: boolean;\n isInitialized: boolean;\n init(params: TapSDKInitParams): Promise<void>;\n destroy(): void;\n // Deprecated methods\n initChat(params: TapSDKInitParams): Promise<void>;\n postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void>;\n getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void>;\n}\n\n/**\n * Loads the CDN loader script\n * The loader will then fetch versions.json and load the appropriate SDK version\n */\nfunction loadCDNLoader(): Promise<void> {\n // If already loaded, return immediately\n if (window.__TAP_SDK_LOADER_LOADED__ && window.TapSDK) {\n return Promise.resolve();\n }\n\n // If currently loading, return the existing promise\n if (window.__TAP_SDK_LOADER_LOADING__) {\n return window.__TAP_SDK_LOADER_LOADING__;\n }\n\n // Create loading promise\n const loadingPromise = new Promise<void>((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('TapSDK requires browser environment (document is undefined)'));\n return;\n }\n\n const script = document.createElement('script');\n script.src = CDN_LOADER_URL;\n script.async = true;\n\n script.onload = () => {\n // The loader script will load the actual SDK\n // We need to wait a bit for the loader to fetch and load the SDK\n const checkSDK = () => {\n if (window.TapSDK) {\n window.__TAP_SDK_LOADER_LOADED__ = true;\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n resolve();\n } else {\n // Check again after a short delay\n setTimeout(checkSDK, 50);\n }\n };\n checkSDK();\n };\n\n script.onerror = () => {\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`));\n };\n\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${CDN_LOADER_URL}\"]`);\n if (existingScript) {\n // Script already added but not yet loaded\n existingScript.addEventListener('load', () => {\n const checkSDK = () => {\n if (window.TapSDK) resolve();\n else setTimeout(checkSDK, 50);\n };\n checkSDK();\n });\n existingScript.addEventListener('error', () =>\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`))\n );\n } else {\n document.head.appendChild(script);\n }\n });\n\n window.__TAP_SDK_LOADER_LOADING__ = loadingPromise;\n return loadingPromise;\n}\n\n/**\n * TapSDK Wrapper Class\n *\n * Loads the CDN loader and proxies all calls to the actual SDK\n */\nclass TapSDK implements TapSDKInstance {\n private config: TapSDKConfig;\n private sdkInstance?: TapSDKInstance;\n private loadPromise: Promise<void>;\n\n constructor(config: TapSDKConfig) {\n this.config = config;\n this.loadPromise = this.loadAndInitialize();\n }\n\n private async loadAndInitialize(): Promise<void> {\n await loadCDNLoader();\n\n if (!window.TapSDK) {\n throw new Error('TapSDK not available after loading CDN loader');\n }\n\n this.sdkInstance = new window.TapSDK(this.config);\n }\n\n private async ensureLoaded(): Promise<TapSDKInstance> {\n await this.loadPromise;\n if (!this.sdkInstance) {\n throw new Error('TapSDK instance not initialized');\n }\n return this.sdkInstance;\n }\n\n // Public API - all methods proxy to the loaded SDK\n get events() {\n return {\n seekTimeline: (params: SeekTimelineParamsType) => {\n this.ensureLoaded().then(sdk => sdk.events.seekTimeline(params));\n },\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onTimelineSeek(callback));\n },\n onChatInitiated: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatInitiated(handler));\n },\n onChatOpened: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatOpened(handler));\n },\n onChatClosed: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatClosed(handler));\n },\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onAlarmFadeIn(handler));\n },\n onPopUpOpen: (handler: (popUpInfo: any) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPopUpOpen(handler));\n },\n onPdfOpen: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfOpen(handler));\n },\n onPdfClose: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfClose(handler));\n },\n };\n }\n\n get isOpen(): boolean {\n return this.sdkInstance?.isOpen ?? false;\n }\n\n get isInitialized(): boolean {\n return this.sdkInstance?.isInitialized ?? false;\n }\n\n async init(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.init(params);\n }\n\n destroy(): void {\n if (this.sdkInstance) {\n this.sdkInstance.destroy();\n }\n }\n\n // Deprecated methods\n async initChat(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.initChat(params);\n }\n\n async postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.postChatInfo(params);\n }\n\n async getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.getTimelineInfo(params);\n }\n}\n\n// Export the SDK as default\nexport default TapSDK;\nexport { TapSDK };\n\n// Export TapSDK instance type\nexport type { TapSDKInstance };\n\n// Re-export types for API compatibility\nexport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"names":["CDN_LOADER_URL","loadCDNLoader","loadingPromise","resolve","reject","script","checkSDK","existingScript","TapSDK","config","__publicField","params","sdk","callback","handler","index_default"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * TapSDK - npm package wrapper\n *\n * Simply loads the CDN loader which handles version management and SDK loading.\n * This keeps the npm package minimal and allows instant updates via CDN.\n */\n\nimport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n} from './types';\n\nconst CDN_LOADER_URL = 'https://files.edutap.ai/tap-sdk/loader.js';\n\n// Global namespace for loaded SDK\n// Export type for IIFE bundles loaded via window.TapSDK\nexport type TapSDKConstructor = new (config: TapSDKConfig) => TapSDKInstance;\n\ndeclare global {\n interface Window {\n TapSDK?: TapSDKConstructor;\n __TAP_SDK_LOADER_LOADED__?: boolean;\n __TAP_SDK_LOADER_LOADING__?: Promise<void>;\n }\n}\n\ninterface TapSDKInstance {\n events: {\n seekTimeline: (params: SeekTimelineParamsType) => void;\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => void;\n onChatInitiated: (handler: () => void) => void;\n onChatOpened: (handler: () => void) => void;\n onChatClosed: (handler: () => void) => void;\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => void;\n onPopUpOpen: (handler: (popUpInfo: any) => void) => void;\n onPdfOpen: (handler: () => void) => void;\n onPdfClose: (handler: () => void) => void;\n };\n isOpen: boolean;\n isInitialized: boolean;\n init(params: TapSDKInitParams): Promise<void>;\n destroy(): void;\n getVersion(): string;\n // Deprecated methods\n initChat(params: TapSDKInitParams): Promise<void>;\n postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void>;\n getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void>;\n}\n\n/**\n * Loads the CDN loader script\n * The loader will then fetch versions.json and load the appropriate SDK version\n */\nfunction loadCDNLoader(): Promise<void> {\n // If already loaded, return immediately\n if (window.__TAP_SDK_LOADER_LOADED__ && window.TapSDK) {\n return Promise.resolve();\n }\n\n // If currently loading, return the existing promise\n if (window.__TAP_SDK_LOADER_LOADING__) {\n return window.__TAP_SDK_LOADER_LOADING__;\n }\n\n // Create loading promise\n const loadingPromise = new Promise<void>((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('TapSDK requires browser environment (document is undefined)'));\n return;\n }\n\n const script = document.createElement('script');\n script.src = CDN_LOADER_URL;\n script.async = true;\n\n script.onload = () => {\n // The loader script will load the actual SDK\n // We need to wait a bit for the loader to fetch and load the SDK\n const checkSDK = () => {\n if (window.TapSDK) {\n window.__TAP_SDK_LOADER_LOADED__ = true;\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n resolve();\n } else {\n // Check again after a short delay\n setTimeout(checkSDK, 50);\n }\n };\n checkSDK();\n };\n\n script.onerror = () => {\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`));\n };\n\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${CDN_LOADER_URL}\"]`);\n if (existingScript) {\n // Script already added but not yet loaded\n existingScript.addEventListener('load', () => {\n const checkSDK = () => {\n if (window.TapSDK) resolve();\n else setTimeout(checkSDK, 50);\n };\n checkSDK();\n });\n existingScript.addEventListener('error', () =>\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`))\n );\n } else {\n document.head.appendChild(script);\n }\n });\n\n window.__TAP_SDK_LOADER_LOADING__ = loadingPromise;\n return loadingPromise;\n}\n\n/**\n * TapSDK Wrapper Class\n *\n * Loads the CDN loader and proxies all calls to the actual SDK\n */\nclass TapSDK implements TapSDKInstance {\n private config: TapSDKConfig;\n private sdkInstance?: TapSDKInstance;\n private loadPromise: Promise<void>;\n\n constructor(config: TapSDKConfig) {\n this.config = config;\n this.loadPromise = this.loadAndInitialize();\n }\n\n private async loadAndInitialize(): Promise<void> {\n await loadCDNLoader();\n\n if (!window.TapSDK) {\n throw new Error('TapSDK not available after loading CDN loader');\n }\n\n this.sdkInstance = new window.TapSDK(this.config);\n }\n\n private async ensureLoaded(): Promise<TapSDKInstance> {\n await this.loadPromise;\n if (!this.sdkInstance) {\n throw new Error('TapSDK instance not initialized');\n }\n return this.sdkInstance;\n }\n\n // Public API - all methods proxy to the loaded SDK\n get events() {\n return {\n seekTimeline: (params: SeekTimelineParamsType) => {\n this.ensureLoaded().then(sdk => sdk.events.seekTimeline(params));\n },\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onTimelineSeek(callback));\n },\n onChatInitiated: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatInitiated(handler));\n },\n onChatOpened: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatOpened(handler));\n },\n onChatClosed: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatClosed(handler));\n },\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onAlarmFadeIn(handler));\n },\n onPopUpOpen: (handler: (popUpInfo: any) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPopUpOpen(handler));\n },\n onPdfOpen: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfOpen(handler));\n },\n onPdfClose: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfClose(handler));\n },\n };\n }\n\n get isOpen(): boolean {\n return this.sdkInstance?.isOpen ?? false;\n }\n\n get isInitialized(): boolean {\n return this.sdkInstance?.isInitialized ?? false;\n }\n\n async init(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.init(params);\n }\n\n destroy(): void {\n if (this.sdkInstance) {\n this.sdkInstance.destroy();\n }\n }\n\n getVersion(): string {\n return this.sdkInstance?.getVersion() ?? 'Not initialized';\n }\n\n // Deprecated methods\n async initChat(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.initChat(params);\n }\n\n async postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.postChatInfo(params);\n }\n\n async getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.getTimelineInfo(params);\n }\n}\n\n// Export the SDK class as default (for: import TapSDK from '@coxwave/tap-sdk')\nexport default TapSDK;\n\n// Export TapSDK instance type (for: import type { TapSDK } from '@coxwave/tap-sdk')\nexport type { TapSDKInstance as TapSDK };\n\n// Keep TapSDKInstance for backward compatibility\nexport type { TapSDKInstance };\n\n// Re-export types for API compatibility\nexport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n};\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var p=Object.defineProperty;var l=(i,e,n)=>e in i?p(i,e,{enumerable:true,configurable:true,writable:true,value:n}):i[e]=n;var t=(i,e,n)=>l(i,typeof e!="symbol"?e+"":e,n);var s="https://files.edutap.ai/tap-sdk/loader.js";function c(){if(window.__TAP_SDK_LOADER_LOADED__&&window.TapSDK)return Promise.resolve();if(window.__TAP_SDK_LOADER_LOADING__)return window.__TAP_SDK_LOADER_LOADING__;let i=new Promise((e,n)=>{if(typeof document>"u"){n(new Error("TapSDK requires browser environment (document is undefined)"));return}let o=document.createElement("script");o.src=s,o.async=true,o.onload=()=>{let a=()=>{window.TapSDK?(window.__TAP_SDK_LOADER_LOADED__=true,window.__TAP_SDK_LOADER_LOADING__=void 0,e()):setTimeout(a,50);};a();},o.onerror=()=>{window.__TAP_SDK_LOADER_LOADING__=void 0,n(new Error(`Failed to load TapSDK CDN loader: ${s}`));};let d=document.querySelector(`script[src="${s}"]`);d?(d.addEventListener("load",()=>{let a=()=>{window.TapSDK?e():setTimeout(a,50);};a();}),d.addEventListener("error",()=>n(new Error(`Failed to load TapSDK CDN loader: ${s}`)))):document.head.appendChild(o);});return window.__TAP_SDK_LOADER_LOADING__=i,i}var r=class{constructor(e){t(this,"config");t(this,"sdkInstance");t(this,"loadPromise");this.config=e,this.loadPromise=this.loadAndInitialize();}async loadAndInitialize(){if(await c(),!window.TapSDK)throw new Error("TapSDK not available after loading CDN loader");this.sdkInstance=new window.TapSDK(this.config);}async ensureLoaded(){if(await this.loadPromise,!this.sdkInstance)throw new Error("TapSDK instance not initialized");return this.sdkInstance}get events(){return {seekTimeline:e=>{this.ensureLoaded().then(n=>n.events.seekTimeline(e));},onTimelineSeek:e=>{this.ensureLoaded().then(n=>n.events.onTimelineSeek(e));},onChatInitiated:e=>{this.ensureLoaded().then(n=>n.events.onChatInitiated(e));},onChatOpened:e=>{this.ensureLoaded().then(n=>n.events.onChatOpened(e));},onChatClosed:e=>{this.ensureLoaded().then(n=>n.events.onChatClosed(e));},onAlarmFadeIn:e=>{this.ensureLoaded().then(n=>n.events.onAlarmFadeIn(e));},onPopUpOpen:e=>{this.ensureLoaded().then(n=>n.events.onPopUpOpen(e));},onPdfOpen:e=>{this.ensureLoaded().then(n=>n.events.onPdfOpen(e));},onPdfClose:e=>{this.ensureLoaded().then(n=>n.events.onPdfClose(e));}}}get isOpen(){return this.sdkInstance?.isOpen??false}get isInitialized(){return this.sdkInstance?.isInitialized??false}async init(e){return (await this.ensureLoaded()).init(e)}destroy(){this.sdkInstance&&this.sdkInstance.destroy();}async initChat(e){return (await this.ensureLoaded()).initChat(e)}async postChatInfo(e){return (await this.ensureLoaded()).postChatInfo(e)}async getTimelineInfo(e){return (await this.ensureLoaded()).getTimelineInfo(e)}},D=r;
|
|
2
|
-
export{
|
|
1
|
+
var p=Object.defineProperty;var l=(i,e,n)=>e in i?p(i,e,{enumerable:true,configurable:true,writable:true,value:n}):i[e]=n;var t=(i,e,n)=>l(i,typeof e!="symbol"?e+"":e,n);var s="https://files.edutap.ai/tap-sdk/loader.js";function c(){if(window.__TAP_SDK_LOADER_LOADED__&&window.TapSDK)return Promise.resolve();if(window.__TAP_SDK_LOADER_LOADING__)return window.__TAP_SDK_LOADER_LOADING__;let i=new Promise((e,n)=>{if(typeof document>"u"){n(new Error("TapSDK requires browser environment (document is undefined)"));return}let o=document.createElement("script");o.src=s,o.async=true,o.onload=()=>{let a=()=>{window.TapSDK?(window.__TAP_SDK_LOADER_LOADED__=true,window.__TAP_SDK_LOADER_LOADING__=void 0,e()):setTimeout(a,50);};a();},o.onerror=()=>{window.__TAP_SDK_LOADER_LOADING__=void 0,n(new Error(`Failed to load TapSDK CDN loader: ${s}`));};let d=document.querySelector(`script[src="${s}"]`);d?(d.addEventListener("load",()=>{let a=()=>{window.TapSDK?e():setTimeout(a,50);};a();}),d.addEventListener("error",()=>n(new Error(`Failed to load TapSDK CDN loader: ${s}`)))):document.head.appendChild(o);});return window.__TAP_SDK_LOADER_LOADING__=i,i}var r=class{constructor(e){t(this,"config");t(this,"sdkInstance");t(this,"loadPromise");this.config=e,this.loadPromise=this.loadAndInitialize();}async loadAndInitialize(){if(await c(),!window.TapSDK)throw new Error("TapSDK not available after loading CDN loader");this.sdkInstance=new window.TapSDK(this.config);}async ensureLoaded(){if(await this.loadPromise,!this.sdkInstance)throw new Error("TapSDK instance not initialized");return this.sdkInstance}get events(){return {seekTimeline:e=>{this.ensureLoaded().then(n=>n.events.seekTimeline(e));},onTimelineSeek:e=>{this.ensureLoaded().then(n=>n.events.onTimelineSeek(e));},onChatInitiated:e=>{this.ensureLoaded().then(n=>n.events.onChatInitiated(e));},onChatOpened:e=>{this.ensureLoaded().then(n=>n.events.onChatOpened(e));},onChatClosed:e=>{this.ensureLoaded().then(n=>n.events.onChatClosed(e));},onAlarmFadeIn:e=>{this.ensureLoaded().then(n=>n.events.onAlarmFadeIn(e));},onPopUpOpen:e=>{this.ensureLoaded().then(n=>n.events.onPopUpOpen(e));},onPdfOpen:e=>{this.ensureLoaded().then(n=>n.events.onPdfOpen(e));},onPdfClose:e=>{this.ensureLoaded().then(n=>n.events.onPdfClose(e));}}}get isOpen(){return this.sdkInstance?.isOpen??false}get isInitialized(){return this.sdkInstance?.isInitialized??false}async init(e){return (await this.ensureLoaded()).init(e)}destroy(){this.sdkInstance&&this.sdkInstance.destroy();}getVersion(){return this.sdkInstance?.getVersion()??"Not initialized"}async initChat(e){return (await this.ensureLoaded()).initChat(e)}async postChatInfo(e){return (await this.ensureLoaded()).postChatInfo(e)}async getTimelineInfo(e){return (await this.ensureLoaded()).getTimelineInfo(e)}},D=r;
|
|
2
|
+
export{D as default};//# sourceMappingURL=index.mjs.map
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"names":["CDN_LOADER_URL","loadCDNLoader","loadingPromise","resolve","reject","script","checkSDK","existingScript","TapSDK","config","__publicField","params","sdk","callback","handler","index_default"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * TapSDK - npm package wrapper\n *\n * Simply loads the CDN loader which handles version management and SDK loading.\n * This keeps the npm package minimal and allows instant updates via CDN.\n */\n\nimport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n} from './types';\n\nconst CDN_LOADER_URL = 'https://files.edutap.ai/tap-sdk/loader.js';\n\n// Global namespace for loaded SDK\n// Export type for IIFE bundles loaded via window.TapSDK\nexport type TapSDKConstructor = new (config: TapSDKConfig) => TapSDKInstance;\n\ndeclare global {\n interface Window {\n TapSDK?: TapSDKConstructor;\n __TAP_SDK_LOADER_LOADED__?: boolean;\n __TAP_SDK_LOADER_LOADING__?: Promise<void>;\n }\n}\n\ninterface TapSDKInstance {\n events: {\n seekTimeline: (params: SeekTimelineParamsType) => void;\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => void;\n onChatInitiated: (handler: () => void) => void;\n onChatOpened: (handler: () => void) => void;\n onChatClosed: (handler: () => void) => void;\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => void;\n onPopUpOpen: (handler: (popUpInfo: any) => void) => void;\n onPdfOpen: (handler: () => void) => void;\n onPdfClose: (handler: () => void) => void;\n };\n isOpen: boolean;\n isInitialized: boolean;\n init(params: TapSDKInitParams): Promise<void>;\n destroy(): void;\n // Deprecated methods\n initChat(params: TapSDKInitParams): Promise<void>;\n postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void>;\n getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void>;\n}\n\n/**\n * Loads the CDN loader script\n * The loader will then fetch versions.json and load the appropriate SDK version\n */\nfunction loadCDNLoader(): Promise<void> {\n // If already loaded, return immediately\n if (window.__TAP_SDK_LOADER_LOADED__ && window.TapSDK) {\n return Promise.resolve();\n }\n\n // If currently loading, return the existing promise\n if (window.__TAP_SDK_LOADER_LOADING__) {\n return window.__TAP_SDK_LOADER_LOADING__;\n }\n\n // Create loading promise\n const loadingPromise = new Promise<void>((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('TapSDK requires browser environment (document is undefined)'));\n return;\n }\n\n const script = document.createElement('script');\n script.src = CDN_LOADER_URL;\n script.async = true;\n\n script.onload = () => {\n // The loader script will load the actual SDK\n // We need to wait a bit for the loader to fetch and load the SDK\n const checkSDK = () => {\n if (window.TapSDK) {\n window.__TAP_SDK_LOADER_LOADED__ = true;\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n resolve();\n } else {\n // Check again after a short delay\n setTimeout(checkSDK, 50);\n }\n };\n checkSDK();\n };\n\n script.onerror = () => {\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`));\n };\n\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${CDN_LOADER_URL}\"]`);\n if (existingScript) {\n // Script already added but not yet loaded\n existingScript.addEventListener('load', () => {\n const checkSDK = () => {\n if (window.TapSDK) resolve();\n else setTimeout(checkSDK, 50);\n };\n checkSDK();\n });\n existingScript.addEventListener('error', () =>\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`))\n );\n } else {\n document.head.appendChild(script);\n }\n });\n\n window.__TAP_SDK_LOADER_LOADING__ = loadingPromise;\n return loadingPromise;\n}\n\n/**\n * TapSDK Wrapper Class\n *\n * Loads the CDN loader and proxies all calls to the actual SDK\n */\nclass TapSDK implements TapSDKInstance {\n private config: TapSDKConfig;\n private sdkInstance?: TapSDKInstance;\n private loadPromise: Promise<void>;\n\n constructor(config: TapSDKConfig) {\n this.config = config;\n this.loadPromise = this.loadAndInitialize();\n }\n\n private async loadAndInitialize(): Promise<void> {\n await loadCDNLoader();\n\n if (!window.TapSDK) {\n throw new Error('TapSDK not available after loading CDN loader');\n }\n\n this.sdkInstance = new window.TapSDK(this.config);\n }\n\n private async ensureLoaded(): Promise<TapSDKInstance> {\n await this.loadPromise;\n if (!this.sdkInstance) {\n throw new Error('TapSDK instance not initialized');\n }\n return this.sdkInstance;\n }\n\n // Public API - all methods proxy to the loaded SDK\n get events() {\n return {\n seekTimeline: (params: SeekTimelineParamsType) => {\n this.ensureLoaded().then(sdk => sdk.events.seekTimeline(params));\n },\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onTimelineSeek(callback));\n },\n onChatInitiated: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatInitiated(handler));\n },\n onChatOpened: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatOpened(handler));\n },\n onChatClosed: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatClosed(handler));\n },\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onAlarmFadeIn(handler));\n },\n onPopUpOpen: (handler: (popUpInfo: any) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPopUpOpen(handler));\n },\n onPdfOpen: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfOpen(handler));\n },\n onPdfClose: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfClose(handler));\n },\n };\n }\n\n get isOpen(): boolean {\n return this.sdkInstance?.isOpen ?? false;\n }\n\n get isInitialized(): boolean {\n return this.sdkInstance?.isInitialized ?? false;\n }\n\n async init(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.init(params);\n }\n\n destroy(): void {\n if (this.sdkInstance) {\n this.sdkInstance.destroy();\n }\n }\n\n // Deprecated methods\n async initChat(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.initChat(params);\n }\n\n async postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.postChatInfo(params);\n }\n\n async getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.getTimelineInfo(params);\n }\n}\n\n// Export the SDK as default\nexport default TapSDK;\nexport { TapSDK };\n\n// Export TapSDK instance type\nexport type { TapSDKInstance };\n\n// Re-export types for API compatibility\nexport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../index.ts"],"names":["CDN_LOADER_URL","loadCDNLoader","loadingPromise","resolve","reject","script","checkSDK","existingScript","TapSDK","config","__publicField","params","sdk","callback","handler","index_default"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * TapSDK - npm package wrapper\n *\n * Simply loads the CDN loader which handles version management and SDK loading.\n * This keeps the npm package minimal and allows instant updates via CDN.\n */\n\nimport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n} from './types';\n\nconst CDN_LOADER_URL = 'https://files.edutap.ai/tap-sdk/loader.js';\n\n// Global namespace for loaded SDK\n// Export type for IIFE bundles loaded via window.TapSDK\nexport type TapSDKConstructor = new (config: TapSDKConfig) => TapSDKInstance;\n\ndeclare global {\n interface Window {\n TapSDK?: TapSDKConstructor;\n __TAP_SDK_LOADER_LOADED__?: boolean;\n __TAP_SDK_LOADER_LOADING__?: Promise<void>;\n }\n}\n\ninterface TapSDKInstance {\n events: {\n seekTimeline: (params: SeekTimelineParamsType) => void;\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => void;\n onChatInitiated: (handler: () => void) => void;\n onChatOpened: (handler: () => void) => void;\n onChatClosed: (handler: () => void) => void;\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => void;\n onPopUpOpen: (handler: (popUpInfo: any) => void) => void;\n onPdfOpen: (handler: () => void) => void;\n onPdfClose: (handler: () => void) => void;\n };\n isOpen: boolean;\n isInitialized: boolean;\n init(params: TapSDKInitParams): Promise<void>;\n destroy(): void;\n getVersion(): string;\n // Deprecated methods\n initChat(params: TapSDKInitParams): Promise<void>;\n postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void>;\n getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void>;\n}\n\n/**\n * Loads the CDN loader script\n * The loader will then fetch versions.json and load the appropriate SDK version\n */\nfunction loadCDNLoader(): Promise<void> {\n // If already loaded, return immediately\n if (window.__TAP_SDK_LOADER_LOADED__ && window.TapSDK) {\n return Promise.resolve();\n }\n\n // If currently loading, return the existing promise\n if (window.__TAP_SDK_LOADER_LOADING__) {\n return window.__TAP_SDK_LOADER_LOADING__;\n }\n\n // Create loading promise\n const loadingPromise = new Promise<void>((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('TapSDK requires browser environment (document is undefined)'));\n return;\n }\n\n const script = document.createElement('script');\n script.src = CDN_LOADER_URL;\n script.async = true;\n\n script.onload = () => {\n // The loader script will load the actual SDK\n // We need to wait a bit for the loader to fetch and load the SDK\n const checkSDK = () => {\n if (window.TapSDK) {\n window.__TAP_SDK_LOADER_LOADED__ = true;\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n resolve();\n } else {\n // Check again after a short delay\n setTimeout(checkSDK, 50);\n }\n };\n checkSDK();\n };\n\n script.onerror = () => {\n window.__TAP_SDK_LOADER_LOADING__ = undefined;\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`));\n };\n\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${CDN_LOADER_URL}\"]`);\n if (existingScript) {\n // Script already added but not yet loaded\n existingScript.addEventListener('load', () => {\n const checkSDK = () => {\n if (window.TapSDK) resolve();\n else setTimeout(checkSDK, 50);\n };\n checkSDK();\n });\n existingScript.addEventListener('error', () =>\n reject(new Error(`Failed to load TapSDK CDN loader: ${CDN_LOADER_URL}`))\n );\n } else {\n document.head.appendChild(script);\n }\n });\n\n window.__TAP_SDK_LOADER_LOADING__ = loadingPromise;\n return loadingPromise;\n}\n\n/**\n * TapSDK Wrapper Class\n *\n * Loads the CDN loader and proxies all calls to the actual SDK\n */\nclass TapSDK implements TapSDKInstance {\n private config: TapSDKConfig;\n private sdkInstance?: TapSDKInstance;\n private loadPromise: Promise<void>;\n\n constructor(config: TapSDKConfig) {\n this.config = config;\n this.loadPromise = this.loadAndInitialize();\n }\n\n private async loadAndInitialize(): Promise<void> {\n await loadCDNLoader();\n\n if (!window.TapSDK) {\n throw new Error('TapSDK not available after loading CDN loader');\n }\n\n this.sdkInstance = new window.TapSDK(this.config);\n }\n\n private async ensureLoaded(): Promise<TapSDKInstance> {\n await this.loadPromise;\n if (!this.sdkInstance) {\n throw new Error('TapSDK instance not initialized');\n }\n return this.sdkInstance;\n }\n\n // Public API - all methods proxy to the loaded SDK\n get events() {\n return {\n seekTimeline: (params: SeekTimelineParamsType) => {\n this.ensureLoaded().then(sdk => sdk.events.seekTimeline(params));\n },\n onTimelineSeek: (callback: (clipPlayHead: number, clipId: string) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onTimelineSeek(callback));\n },\n onChatInitiated: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatInitiated(handler));\n },\n onChatOpened: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatOpened(handler));\n },\n onChatClosed: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onChatClosed(handler));\n },\n onAlarmFadeIn: (handler: (messageInfo: AlarmMessageInstanceType) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onAlarmFadeIn(handler));\n },\n onPopUpOpen: (handler: (popUpInfo: any) => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPopUpOpen(handler));\n },\n onPdfOpen: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfOpen(handler));\n },\n onPdfClose: (handler: () => void) => {\n this.ensureLoaded().then(sdk => sdk.events.onPdfClose(handler));\n },\n };\n }\n\n get isOpen(): boolean {\n return this.sdkInstance?.isOpen ?? false;\n }\n\n get isInitialized(): boolean {\n return this.sdkInstance?.isInitialized ?? false;\n }\n\n async init(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.init(params);\n }\n\n destroy(): void {\n if (this.sdkInstance) {\n this.sdkInstance.destroy();\n }\n }\n\n getVersion(): string {\n return this.sdkInstance?.getVersion() ?? 'Not initialized';\n }\n\n // Deprecated methods\n async initChat(params: TapSDKInitParams): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.initChat(params);\n }\n\n async postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.postChatInfo(params);\n }\n\n async getTimelineInfo(params: { callback: (clipPlayHead: number, clipId: string) => void }): Promise<void> {\n const sdk = await this.ensureLoaded();\n return sdk.getTimelineInfo(params);\n }\n}\n\n// Export the SDK class as default (for: import TapSDK from '@coxwave/tap-sdk')\nexport default TapSDK;\n\n// Export TapSDK instance type (for: import type { TapSDK } from '@coxwave/tap-sdk')\nexport type { TapSDKInstance as TapSDK };\n\n// Keep TapSDKInstance for backward compatibility\nexport type { TapSDKInstance };\n\n// Re-export types for API compatibility\nexport type {\n TapSDKConfig,\n TapSDKInitParams,\n Course,\n ContainerStyle,\n PositionType,\n SeekTimelineParamsType,\n AlarmMessageInstanceType,\n AlarmType,\n};\n"]}
|
package/index.ts
CHANGED
|
@@ -46,6 +46,7 @@ interface TapSDKInstance {
|
|
|
46
46
|
isInitialized: boolean;
|
|
47
47
|
init(params: TapSDKInitParams): Promise<void>;
|
|
48
48
|
destroy(): void;
|
|
49
|
+
getVersion(): string;
|
|
49
50
|
// Deprecated methods
|
|
50
51
|
initChat(params: TapSDKInitParams): Promise<void>;
|
|
51
52
|
postChatInfo(params: { clipId: string; clipPlayHead: number }): Promise<void>;
|
|
@@ -207,6 +208,10 @@ class TapSDK implements TapSDKInstance {
|
|
|
207
208
|
}
|
|
208
209
|
}
|
|
209
210
|
|
|
211
|
+
getVersion(): string {
|
|
212
|
+
return this.sdkInstance?.getVersion() ?? 'Not initialized';
|
|
213
|
+
}
|
|
214
|
+
|
|
210
215
|
// Deprecated methods
|
|
211
216
|
async initChat(params: TapSDKInitParams): Promise<void> {
|
|
212
217
|
const sdk = await this.ensureLoaded();
|
|
@@ -224,11 +229,13 @@ class TapSDK implements TapSDKInstance {
|
|
|
224
229
|
}
|
|
225
230
|
}
|
|
226
231
|
|
|
227
|
-
// Export the SDK as default
|
|
232
|
+
// Export the SDK class as default (for: import TapSDK from '@coxwave/tap-sdk')
|
|
228
233
|
export default TapSDK;
|
|
229
|
-
export { TapSDK };
|
|
230
234
|
|
|
231
|
-
// Export TapSDK instance type
|
|
235
|
+
// Export TapSDK instance type (for: import type { TapSDK } from '@coxwave/tap-sdk')
|
|
236
|
+
export type { TapSDKInstance as TapSDK };
|
|
237
|
+
|
|
238
|
+
// Keep TapSDKInstance for backward compatibility
|
|
232
239
|
export type { TapSDKInstance };
|
|
233
240
|
|
|
234
241
|
// Re-export types for API compatibility
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coxwave/tap-sdk",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "TapSDK - Minimal wrapper that loads TapSDK from CDN",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -36,12 +36,10 @@
|
|
|
36
36
|
"types.ts",
|
|
37
37
|
"index.ts"
|
|
38
38
|
],
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"@coxwave/tap-messages": "workspace:*"
|
|
41
|
-
},
|
|
42
39
|
"devDependencies": {
|
|
43
40
|
"@coxwave/config-eslint": "workspace:*",
|
|
44
41
|
"@coxwave/config-typescript": "workspace:*",
|
|
42
|
+
"@coxwave/tap-messages": "workspace:*",
|
|
45
43
|
"tsup": "^8.5.0"
|
|
46
44
|
}
|
|
47
45
|
}
|