@hashgraphonline/standards-sdk 0.0.84 → 0.0.85
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/es/hcs-10/connections-manager.d.ts +26 -8
- package/dist/es/hcs-10/connections-manager.d.ts.map +1 -1
- package/dist/es/standards-sdk.es10.js +271 -85
- package/dist/es/standards-sdk.es10.js.map +1 -1
- package/dist/es/standards-sdk.es100.js +147 -3
- package/dist/es/standards-sdk.es100.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +90 -3
- package/dist/es/standards-sdk.es101.js.map +1 -1
- package/dist/es/standards-sdk.es102.js +84 -13
- package/dist/es/standards-sdk.es102.js.map +1 -1
- package/dist/es/standards-sdk.es103.js +32 -13
- package/dist/es/standards-sdk.es103.js.map +1 -1
- package/dist/es/standards-sdk.es104.js +5 -15
- package/dist/es/standards-sdk.es104.js.map +1 -1
- package/dist/es/standards-sdk.es105.js +158 -4
- package/dist/es/standards-sdk.es105.js.map +1 -1
- package/dist/es/standards-sdk.es106.js +21 -37
- package/dist/es/standards-sdk.es106.js.map +1 -1
- package/dist/es/standards-sdk.es107.js +787 -34
- package/dist/es/standards-sdk.es107.js.map +1 -1
- package/dist/es/standards-sdk.es108.js +172 -35
- package/dist/es/standards-sdk.es108.js.map +1 -1
- package/dist/es/standards-sdk.es109.js +133 -68
- package/dist/es/standards-sdk.es109.js.map +1 -1
- package/dist/es/standards-sdk.es110.js +20 -3
- package/dist/es/standards-sdk.es110.js.map +1 -1
- package/dist/es/standards-sdk.es111.js +26 -33
- package/dist/es/standards-sdk.es111.js.map +1 -1
- package/dist/es/standards-sdk.es112.js +25 -32
- package/dist/es/standards-sdk.es112.js.map +1 -1
- package/dist/es/standards-sdk.es113.js +38 -9
- package/dist/es/standards-sdk.es113.js.map +1 -1
- package/dist/es/standards-sdk.es114.js +4 -34
- package/dist/es/standards-sdk.es114.js.map +1 -1
- package/dist/es/standards-sdk.es115.js +419 -3
- package/dist/es/standards-sdk.es115.js.map +1 -1
- package/dist/es/standards-sdk.es116.js +2 -2
- package/dist/es/standards-sdk.es116.js.map +1 -1
- package/dist/es/standards-sdk.es117.js +120 -2
- package/dist/es/standards-sdk.es117.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +3 -3
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es18.js +2 -2
- package/dist/es/standards-sdk.es19.js +3 -3
- package/dist/es/standards-sdk.es2.js +0 -11
- package/dist/es/standards-sdk.es2.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +1692 -966
- package/dist/es/standards-sdk.es22.js.map +1 -1
- package/dist/es/standards-sdk.es23.js +36 -1767
- package/dist/es/standards-sdk.es23.js.map +1 -1
- package/dist/es/standards-sdk.es24.js +48 -36
- package/dist/es/standards-sdk.es24.js.map +1 -1
- package/dist/es/standards-sdk.es25.js +7163 -21
- package/dist/es/standards-sdk.es25.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +3 -7190
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +2 -3
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es28.js +1041 -2
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es29.js +4167 -5
- package/dist/es/standards-sdk.es29.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +5 -4167
- package/dist/es/standards-sdk.es30.js.map +1 -1
- package/dist/es/standards-sdk.es31.js +364 -2
- package/dist/es/standards-sdk.es31.js.map +1 -1
- package/dist/es/standards-sdk.es32.js +4 -362
- package/dist/es/standards-sdk.es32.js.map +1 -1
- package/dist/es/standards-sdk.es33.js +178 -5
- package/dist/es/standards-sdk.es33.js.map +1 -1
- package/dist/es/standards-sdk.es34.js +73 -171
- package/dist/es/standards-sdk.es34.js.map +1 -1
- package/dist/es/standards-sdk.es35.js +107 -74
- package/dist/es/standards-sdk.es35.js.map +1 -1
- package/dist/es/standards-sdk.es36.js +45 -107
- package/dist/es/standards-sdk.es36.js.map +1 -1
- package/dist/es/standards-sdk.es37.js +9 -51
- package/dist/es/standards-sdk.es37.js.map +1 -1
- package/dist/es/standards-sdk.es38.js +96 -9
- package/dist/es/standards-sdk.es38.js.map +1 -1
- package/dist/es/standards-sdk.es39.js +3 -96
- package/dist/es/standards-sdk.es39.js.map +1 -1
- package/dist/es/standards-sdk.es4.js +1 -1
- package/dist/es/standards-sdk.es40.js +2 -4
- package/dist/es/standards-sdk.es40.js.map +1 -1
- package/dist/es/standards-sdk.es41.js +113 -2
- package/dist/es/standards-sdk.es41.js.map +1 -1
- package/dist/es/standards-sdk.es42.js +70 -109
- package/dist/es/standards-sdk.es42.js.map +1 -1
- package/dist/es/standards-sdk.es43.js +5 -73
- package/dist/es/standards-sdk.es43.js.map +1 -1
- package/dist/es/standards-sdk.es44.js +4 -5
- package/dist/es/standards-sdk.es44.js.map +1 -1
- package/dist/es/standards-sdk.es45.js +220 -4
- package/dist/es/standards-sdk.es45.js.map +1 -1
- package/dist/es/standards-sdk.es46.js +51 -214
- package/dist/es/standards-sdk.es46.js.map +1 -1
- package/dist/es/standards-sdk.es47.js +67 -56
- package/dist/es/standards-sdk.es47.js.map +1 -1
- package/dist/es/standards-sdk.es48.js +3 -69
- package/dist/es/standards-sdk.es48.js.map +1 -1
- package/dist/es/standards-sdk.es49.js +146 -177
- package/dist/es/standards-sdk.es49.js.map +1 -1
- package/dist/es/standards-sdk.es5.js +3 -3
- package/dist/es/standards-sdk.es50.js +26 -432
- package/dist/es/standards-sdk.es50.js.map +1 -1
- package/dist/es/standards-sdk.es51.js +57 -19
- package/dist/es/standards-sdk.es51.js.map +1 -1
- package/dist/es/standards-sdk.es52.js +44 -133
- package/dist/es/standards-sdk.es52.js.map +1 -1
- package/dist/es/standards-sdk.es53.js +9 -17
- package/dist/es/standards-sdk.es53.js.map +1 -1
- package/dist/es/standards-sdk.es54.js +61 -25
- package/dist/es/standards-sdk.es54.js.map +1 -1
- package/dist/es/standards-sdk.es55.js +6 -29
- package/dist/es/standards-sdk.es55.js.map +1 -1
- package/dist/es/standards-sdk.es56.js +13 -19
- package/dist/es/standards-sdk.es56.js.map +1 -1
- package/dist/es/standards-sdk.es57.js +7 -44
- package/dist/es/standards-sdk.es57.js.map +1 -1
- package/dist/es/standards-sdk.es58.js +45 -18
- package/dist/es/standards-sdk.es58.js.map +1 -1
- package/dist/es/standards-sdk.es59.js +2 -61
- package/dist/es/standards-sdk.es59.js.map +1 -1
- package/dist/es/standards-sdk.es60.js +121 -1274
- package/dist/es/standards-sdk.es60.js.map +1 -1
- package/dist/es/standards-sdk.es61.js +157 -133
- package/dist/es/standards-sdk.es61.js.map +1 -1
- package/dist/es/standards-sdk.es62.js +98 -88
- package/dist/es/standards-sdk.es62.js.map +1 -1
- package/dist/es/standards-sdk.es63.js +2 -84
- package/dist/es/standards-sdk.es63.js.map +1 -1
- package/dist/es/standards-sdk.es64.js +15 -31
- package/dist/es/standards-sdk.es64.js.map +1 -1
- package/dist/es/standards-sdk.es65.js +408 -5
- package/dist/es/standards-sdk.es65.js.map +1 -1
- package/dist/es/standards-sdk.es66.js +13 -159
- package/dist/es/standards-sdk.es66.js.map +1 -1
- package/dist/es/standards-sdk.es67.js +13 -23
- package/dist/es/standards-sdk.es67.js.map +1 -1
- package/dist/es/standards-sdk.es68.js +29 -790
- package/dist/es/standards-sdk.es68.js.map +1 -1
- package/dist/es/standards-sdk.es69.js +14 -100
- package/dist/es/standards-sdk.es69.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +3 -3
- package/dist/es/standards-sdk.es70.js +4 -2
- package/dist/es/standards-sdk.es70.js.map +1 -1
- package/dist/es/standards-sdk.es71.js +3 -15
- package/dist/es/standards-sdk.es71.js.map +1 -1
- package/dist/es/standards-sdk.es72.js +14 -407
- package/dist/es/standards-sdk.es72.js.map +1 -1
- package/dist/es/standards-sdk.es73.js +4 -173
- package/dist/es/standards-sdk.es73.js.map +1 -1
- package/dist/es/standards-sdk.es74.js +39 -143
- package/dist/es/standards-sdk.es74.js.map +1 -1
- package/dist/es/standards-sdk.es75.js +39 -2281
- package/dist/es/standards-sdk.es75.js.map +1 -1
- package/dist/es/standards-sdk.es76.js +34 -161
- package/dist/es/standards-sdk.es76.js.map +1 -1
- package/dist/es/standards-sdk.es77.js +67 -408
- package/dist/es/standards-sdk.es77.js.map +1 -1
- package/dist/es/standards-sdk.es78.js +2282 -2
- package/dist/es/standards-sdk.es78.js.map +1 -1
- package/dist/es/standards-sdk.es79.js +2 -120
- package/dist/es/standards-sdk.es79.js.map +1 -1
- package/dist/es/standards-sdk.es8.js +3 -3
- package/dist/es/standards-sdk.es80.js +7131 -16
- package/dist/es/standards-sdk.es80.js.map +1 -1
- package/dist/es/standards-sdk.es81.js +3 -3
- package/dist/es/standards-sdk.es81.js.map +1 -1
- package/dist/es/standards-sdk.es82.js +2 -32
- package/dist/es/standards-sdk.es82.js.map +1 -1
- package/dist/es/standards-sdk.es83.js +2 -63
- package/dist/es/standards-sdk.es83.js.map +1 -1
- package/dist/es/standards-sdk.es84.js +32 -48
- package/dist/es/standards-sdk.es84.js.map +1 -1
- package/dist/es/standards-sdk.es85.js +32 -9
- package/dist/es/standards-sdk.es85.js.map +1 -1
- package/dist/es/standards-sdk.es86.js +9 -65
- package/dist/es/standards-sdk.es86.js.map +1 -1
- package/dist/es/standards-sdk.es87.js +34 -6
- package/dist/es/standards-sdk.es87.js.map +1 -1
- package/dist/es/standards-sdk.es88.js +192 -12
- package/dist/es/standards-sdk.es88.js.map +1 -1
- package/dist/es/standards-sdk.es89.js +437 -6
- package/dist/es/standards-sdk.es89.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +1 -1
- package/dist/es/standards-sdk.es90.js +24 -44
- package/dist/es/standards-sdk.es90.js.map +1 -1
- package/dist/es/standards-sdk.es91.js +139 -2
- package/dist/es/standards-sdk.es91.js.map +1 -1
- package/dist/es/standards-sdk.es92.js +18 -136
- package/dist/es/standards-sdk.es92.js.map +1 -1
- package/dist/es/standards-sdk.es93.js +23 -166
- package/dist/es/standards-sdk.es93.js.map +1 -1
- package/dist/es/standards-sdk.es94.js +27 -7134
- package/dist/es/standards-sdk.es94.js.map +1 -1
- package/dist/es/standards-sdk.es95.js +19 -25
- package/dist/es/standards-sdk.es95.js.map +1 -1
- package/dist/es/standards-sdk.es96.js +42 -24
- package/dist/es/standards-sdk.es96.js.map +1 -1
- package/dist/es/standards-sdk.es97.js +16 -36
- package/dist/es/standards-sdk.es97.js.map +1 -1
- package/dist/es/standards-sdk.es98.js +60 -31
- package/dist/es/standards-sdk.es98.js.map +1 -1
- package/dist/es/standards-sdk.es99.js +1288 -14
- package/dist/es/standards-sdk.es99.js.map +1 -1
- package/dist/umd/hcs-10/connections-manager.d.ts +26 -8
- package/dist/umd/hcs-10/connections-manager.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +9 -9
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import Buffer from "./standards-sdk.
|
|
1
|
+
import Buffer from "./standards-sdk.es22.js";
|
|
2
2
|
import { PublicKey, Timestamp } from "@hashgraph/sdk";
|
|
3
|
-
import "./standards-sdk.
|
|
3
|
+
import "./standards-sdk.es23.js";
|
|
4
4
|
import { proto } from "@hashgraph/proto";
|
|
5
|
-
import axios from "./standards-sdk.
|
|
5
|
+
import axios from "./standards-sdk.es24.js";
|
|
6
6
|
class HederaMirrorNode {
|
|
7
7
|
constructor(network, logger) {
|
|
8
8
|
this.network = network;
|
|
@@ -679,17 +679,6 @@ class HCS {
|
|
|
679
679
|
}
|
|
680
680
|
}
|
|
681
681
|
}
|
|
682
|
-
const isServer = typeof window === "undefined";
|
|
683
|
-
if (!isServer) {
|
|
684
|
-
window.HCS = new HCS();
|
|
685
|
-
window.HCS.init().then(() => {
|
|
686
|
-
console.log("All HCS resources loaded");
|
|
687
|
-
if (typeof window.HCSReady === "function") {
|
|
688
|
-
console.log("Running HCSReady...");
|
|
689
|
-
window.HCSReady();
|
|
690
|
-
}
|
|
691
|
-
});
|
|
692
|
-
}
|
|
693
682
|
export {
|
|
694
683
|
HCS,
|
|
695
684
|
sleep
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es2.js","sources":["../../src/hcs-3/src/index.ts"],"sourcesContent":["import {\n HCSSDK,\n LoadQueueItem,\n HCSConfigMapping,\n HCSConfig,\n LoadType,\n} from './types';\nimport { Logger } from '../../utils/logger';\n\nexport const sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nexport class HCS implements HCSSDK {\n config: HCSConfig;\n configMapping: HCSConfigMapping;\n LoadedScripts: Record<string, string>;\n LoadedWasm: Record<string, WebAssembly.Instance>;\n LoadedImages: Record<string, string>;\n LoadedVideos: Record<string, string>;\n LoadedAudios: Record<string, HTMLAudioElement>;\n LoadedAudioUrls: Record<string, string>;\n LoadedGLBs: Record<string, string>;\n scriptLoadedEvent: Event;\n loadQueue: LoadQueueItem[];\n isProcessingQueue: boolean;\n private modelViewerLoaded: boolean = false;\n private modelViewerLoading: Promise<void> | null = null;\n private logger: Logger;\n\n constructor() {\n this.config = {\n cdnUrl: 'https://kiloscribe.com/api/inscription-cdn/',\n network: 'mainnet',\n retryAttempts: 3,\n retryBackoff: 300,\n debug: false,\n showLoadingIndicator: false,\n loadingCallbackName: null,\n };\n this.configMapping = {\n hcsCdnUrl: 'cdnUrl',\n hcsNetwork: 'network',\n hcsRetryAttempts: 'retryAttempts',\n hcsRetryBackoff: 'retryBackoff',\n hcsDebug: 'debug',\n hcsShowLoadingIndicator: 'showLoadingIndicator',\n hcsLoadingCallbackName: 'loadingCallbackName',\n };\n this.LoadedScripts = {};\n this.LoadedWasm = {};\n this.LoadedImages = {};\n this.LoadedVideos = {};\n this.LoadedAudios = {};\n this.LoadedAudioUrls = {};\n this.LoadedGLBs = {};\n this.scriptLoadedEvent = new Event('HCSScriptLoaded');\n this.loadQueue = [] as LoadQueueItem[];\n this.isProcessingQueue = false;\n\n try {\n this.logger = Logger.getInstance({\n module: 'HCS-3',\n level: this.config.debug ? 'debug' : 'error',\n });\n } catch (e) {\n this.logger = this.createFallbackLogger();\n }\n }\n\n private createFallbackLogger(): Logger {\n const fallbackLogger = {\n debug: (...args: any[]) =>\n this.config.debug && console.debug('[HCS-3]', ...args),\n info: (...args: any[]) =>\n this.config.debug && console.info('[HCS-3]', ...args),\n warn: (...args: any[]) => console.warn('[HCS-3]', ...args),\n error: (...args: any[]) => console.error('[HCS-3]', ...args),\n setLogLevel: (level: string) => {\n this.config.debug = level === 'debug';\n },\n } as unknown as Logger;\n\n return fallbackLogger;\n }\n\n log(...args: any[]): void {\n if (args.length === 0) {\n this.logger.debug('');\n } else if (args.length === 1) {\n this.logger.debug(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.debug(message, data);\n }\n }\n\n error(...args: any[]): void {\n if (args.length === 0) {\n this.logger.error('');\n } else if (args.length === 1) {\n this.logger.error(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.error(message, data);\n }\n }\n\n loadConfigFromHTML(): void {\n const configScript = document.querySelector(\n 'script[data-hcs-config]'\n ) as HTMLScriptElement | null;\n if (configScript) {\n Object.keys(this.configMapping).forEach((dataAttr) => {\n if (configScript.dataset[dataAttr]) {\n const configKey =\n this.configMapping[dataAttr as keyof HCSConfigMapping];\n let value: any = configScript.dataset[dataAttr];\n\n if (value === 'true') value = true;\n if (value === 'false') value = false;\n if (!isNaN(Number(value)) && value !== '') value = Number(value);\n\n (this.config as any)[configKey] = value;\n }\n });\n\n // Update logger level based on debug setting\n this.logger.setLogLevel(this.config.debug ? 'debug' : 'error');\n }\n this.log('Loaded config:', this.config);\n }\n\n updateLoadingStatus(id: string, status: string): void {\n if (this.LoadedScripts[id] === 'loaded') {\n return;\n }\n if (this.config.showLoadingIndicator) {\n console.log('[HCS Loading] ' + id + ' : ' + status);\n }\n this.LoadedScripts[id] = status;\n if (\n this.config.loadingCallbackName &&\n typeof (window as any)[this.config.loadingCallbackName] === 'function'\n ) {\n const callback = (window as any)[this.config.loadingCallbackName];\n if (typeof callback === 'function') {\n callback(id, status);\n }\n }\n }\n\n async fetchWithRetry(\n url: string,\n retries: number = this.config.retryAttempts,\n backoff: number = this.config.retryBackoff\n ): Promise<Response> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('HTTP error! status: ' + response.status);\n }\n return response;\n } catch (error) {\n if (retries > 0) {\n this.log(\n 'Retrying fetch for ' + url + ' Attempts left: ' + (retries - 1)\n );\n await this.sleep(backoff);\n return this.fetchWithRetry(url, retries - 1, backoff * 2);\n }\n throw error;\n }\n }\n\n sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n isDuplicate(topicId: string): boolean {\n return !!this.LoadedScripts[topicId];\n }\n\n async retrieveHCS1Data(\n topicId: string,\n cdnUrl: string = this.config.cdnUrl,\n network: string = this.config.network\n ): Promise<Blob> {\n const cleanNetwork = network.replace(/['\"]+/g, '');\n const response = await this.fetchWithRetry(\n cdnUrl + topicId + '?network=' + cleanNetwork\n );\n return await response.blob();\n }\n\n async loadScript(scriptElement: HTMLElement): Promise<void> {\n const src = scriptElement.getAttribute('data-src');\n const scriptId = scriptElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const type = scriptElement.getAttribute('type');\n const isRequired = scriptElement.hasAttribute('data-required');\n const isModule = scriptElement.getAttribute('type') === 'module';\n\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(scriptId!, 'loading');\n\n try {\n const cdnUrl =\n scriptElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n scriptElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n\n if (type === 'wasm') {\n const arrayBuffer = await blob.arrayBuffer();\n const wasmModule = await WebAssembly.compile(arrayBuffer);\n this.LoadedWasm[scriptId!] = await WebAssembly.instantiate(wasmModule, {\n env: {},\n ...(scriptElement.dataset as any),\n });\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded wasm: ' + scriptId);\n } else {\n const content = await blob.text();\n const script = document.createElement('script');\n script.textContent = content;\n script.className = 'hcs-inline-script';\n // Copy over the script ID to the inlined script\n if (scriptId) {\n script.setAttribute('data-loaded-script-id', scriptId);\n }\n\n if (isModule) {\n script.type = 'module';\n const moduleBlob = new Blob([content], {\n type: 'application/javascript',\n });\n script.src = URL.createObjectURL(moduleBlob);\n }\n\n document.body.appendChild(script);\n\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded script: ' + scriptId);\n\n script.onerror = (error) => {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n };\n }\n } catch (error) {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadModuleExports(scriptId: string): Promise<any> {\n const script = document.querySelector(\n 'script[data-loaded-script-id=\"' + scriptId + '\"]'\n );\n if (!script) {\n throw new Error('Module script with id ' + scriptId + ' not found');\n }\n const scriptSrc = script.getAttribute('src');\n if (!scriptSrc) {\n throw new Error('Module script ' + scriptId + ' has no src attribute');\n }\n\n try {\n return await import(/* webpackIgnore: true */ scriptSrc);\n } catch (error) {\n this.error('Failed to import module', error);\n throw error;\n }\n }\n\n async loadStylesheet(linkElement: HTMLElement): Promise<void> {\n const src = linkElement.getAttribute('data-src');\n const stylesheetId = linkElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const isRequired = linkElement.hasAttribute('data-required');\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(stylesheetId!, 'loading');\n\n try {\n const cdnUrl =\n linkElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n linkElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const cssContent = await blob.text();\n const style = document.createElement('style');\n style.textContent = cssContent;\n document.head.appendChild(style);\n\n this.updateLoadingStatus(stylesheetId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded and inlined stylesheet: ' + stylesheetId);\n } catch (error) {\n this.error('Failed to load stylesheet: ' + stylesheetId, error);\n this.updateLoadingStatus(stylesheetId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadImage(imageElement: HTMLElement): Promise<void> {\n const src = imageElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading image: ' + topicId);\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n\n try {\n const cdnUrl =\n imageElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n imageElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (imageElement as HTMLImageElement).src = objectURL;\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n this.log('Loaded image: ' + topicId);\n } catch (error) {\n this.error('Failed to load image: ' + topicId, error);\n this.updateLoadingStatus('Image: ' + topicId!, 'failed');\n }\n }\n\n async loadMedia(\n mediaElement: HTMLElement,\n mediaType: 'video' | 'audio'\n ): Promise<void> {\n const src = mediaElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading ' + mediaType + ': ' + topicId);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n mediaElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n mediaElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (mediaElement as HTMLMediaElement).src = objectURL;\n\n if (mediaType === 'video') {\n this.LoadedVideos[topicId!] = objectURL;\n } else {\n this.LoadedAudioUrls[topicId!] = objectURL;\n }\n\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loaded');\n this.log('Loaded ' + mediaType + ': ' + topicId);\n } catch (error) {\n this.error('Failed to load ' + mediaType + ': ' + topicId, error);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'failed');\n }\n }\n\n private async loadModelViewer(): Promise<void> {\n if (this.modelViewerLoading) return this.modelViewerLoading;\n if (this.modelViewerLoaded) return Promise.resolve();\n\n this.modelViewerLoading = new Promise<void>((resolve) => {\n const modelViewerScript = document.createElement('script');\n modelViewerScript.setAttribute('data-src', 'hcs://1/0.0.7293044');\n modelViewerScript.setAttribute('data-script-id', 'model-viewer');\n modelViewerScript.setAttribute('type', 'module');\n\n window.addEventListener(\n 'HCSScriptLoaded',\n () => {\n this.modelViewerLoaded = true;\n resolve();\n },\n { once: true }\n );\n\n this.loadScript(modelViewerScript);\n });\n\n return this.modelViewerLoading;\n }\n\n async loadGLB(glbElement: HTMLElement): Promise<void> {\n await this.loadModelViewer();\n\n const src = glbElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading GLB: ' + topicId);\n this.updateLoadingStatus('GLB: ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n glbElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n glbElement.getAttribute('data-network') || this.config.network;\n\n let modelViewer: HTMLElement;\n if (glbElement.tagName.toLowerCase() !== 'model-viewer') {\n modelViewer = document.createElement('model-viewer');\n Array.from(glbElement.attributes).forEach((attr) => {\n modelViewer.setAttribute(attr.name, attr.value);\n });\n modelViewer.setAttribute('camera-controls', '');\n modelViewer.setAttribute('auto-rotate', '');\n modelViewer.setAttribute('ar', '');\n glbElement.parentNode?.replaceChild(modelViewer, glbElement);\n } else {\n modelViewer = glbElement;\n }\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n modelViewer.setAttribute('src', objectURL);\n this.LoadedGLBs[topicId!] = objectURL;\n\n this.updateLoadingStatus('GLB: ' + topicId!, 'loaded');\n this.log('Loaded GLB: ' + topicId);\n } catch (error) {\n this.error('Failed to load GLB: ' + topicId, error);\n this.updateLoadingStatus('GLB: ' + topicId!, 'failed');\n }\n }\n\n async loadResource(\n element: HTMLElement,\n type: LoadType,\n order: number\n ): Promise<void> {\n return new Promise((resolve) => {\n this.loadQueue.push({ element, type, order, resolve });\n this.processQueue();\n });\n }\n\n async processQueue(): Promise<void> {\n if (this.isProcessingQueue) return;\n this.isProcessingQueue = true;\n\n while (this.loadQueue.length > 0) {\n const item = this.loadQueue.shift()!;\n try {\n if (item.type === 'script') {\n await this.loadScript(item.element);\n } else if (item.type === 'image') {\n await this.loadImage(item.element);\n } else if (item.type === 'video' || item.type === 'audio') {\n await this.loadMedia(item.element, item.type as 'video' | 'audio');\n } else if (item.type === 'glb') {\n await this.loadGLB(item.element);\n } else if (item.type === 'css') {\n await this.loadStylesheet(item.element);\n }\n item.resolve();\n } catch (error) {\n this.error('Error processing queue item:', error);\n if (\n item.type === 'script' &&\n item.element.hasAttribute('data-required')\n ) {\n break;\n }\n }\n }\n\n this.isProcessingQueue = false;\n }\n\n private async replaceHCSInStyle(styleContent: string): Promise<string> {\n let newContent = styleContent;\n let startIndex = newContent.indexOf('hcs://');\n\n while (startIndex !== -1) {\n let endIndex = startIndex;\n while (\n endIndex < newContent.length &&\n ![\"'\", '\"', ' ', ')'].includes(newContent[endIndex])\n ) {\n endIndex++;\n }\n\n const hcsUrl = newContent.substring(startIndex, endIndex);\n const topicId = hcsUrl.split('/').pop()!;\n\n try {\n const cdnUrl = this.config.cdnUrl;\n const network = this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n\n newContent =\n newContent.substring(0, startIndex) +\n objectURL +\n newContent.substring(endIndex);\n\n this.LoadedImages[topicId] = objectURL;\n this.log('Replaced CSS HCS URL: ' + hcsUrl + ' with ' + objectURL);\n } catch (error) {\n this.error('Failed to load CSS image: ' + topicId, error);\n }\n\n startIndex = newContent.indexOf('hcs://', startIndex + 1);\n }\n\n return newContent;\n }\n\n private async processInlineStyles(): Promise<void> {\n const elementsWithStyle = document.querySelectorAll('[style*=\"hcs://\"]');\n this.log(\n 'Found ' +\n elementsWithStyle.length +\n ' elements with HCS style references'\n );\n\n for (const element of Array.from(elementsWithStyle)) {\n const style = element.getAttribute('style');\n if (style) {\n this.log('Processing style: ' + style);\n const newStyle = await this.replaceHCSInStyle(style);\n if (style !== newStyle) {\n element.setAttribute('style', newStyle);\n this.log('Updated style to: ' + newStyle);\n }\n }\n }\n\n const styleTags = document.querySelectorAll('style');\n for (const styleTag of Array.from(styleTags)) {\n if (styleTag.textContent?.includes('hcs://')) {\n const newContent = await this.replaceHCSInStyle(styleTag.textContent);\n if (styleTag.textContent !== newContent) {\n styleTag.textContent = newContent;\n }\n }\n }\n }\n\n async init(): Promise<void> {\n this.loadConfigFromHTML();\n\n return new Promise((resolve) => {\n const initializeObserver = async () => {\n const scriptElements = document.querySelectorAll(\n 'script[data-src^=\"hcs://\"]'\n );\n const imageElements = document.querySelectorAll(\n 'img[data-src^=\"hcs://\"], img[src^=\"hcs://\"]'\n );\n const videoElements = document.querySelectorAll(\n 'video[data-src^=\"hcs://\"], video[src^=\"hcs://\"]'\n );\n const audioElements = document.querySelectorAll(\n 'audio[data-src^=\"hcs://\"], audio[src^=\"hcs://\"]'\n );\n const glbElements = document.querySelectorAll(\n 'model-viewer[data-src^=\"hcs://\"]'\n );\n const cssElements = document.querySelectorAll(\n 'link[data-src^=\"hcs://\"]'\n );\n\n // Convert src to data-src for HCS URLs\n document.querySelectorAll('[src^=\"hcs://\"]').forEach((element) => {\n const src = element.getAttribute('src');\n if (src) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n }\n });\n\n await this.processInlineStyles();\n\n const loadPromises: Promise<void>[] = [];\n\n [\n { elements: scriptElements, type: 'script' },\n { elements: imageElements, type: 'image' },\n { elements: videoElements, type: 'video' },\n { elements: audioElements, type: 'audio' },\n { elements: glbElements, type: 'glb' },\n { elements: cssElements, type: 'css' },\n ].forEach(({ elements, type }) => {\n elements.forEach((element) => {\n const order =\n parseInt(element.getAttribute('data-load-order') || '') ||\n Infinity;\n loadPromises.push(\n this.loadResource(element as HTMLElement, type as LoadType, order)\n );\n });\n });\n\n await Promise.all(loadPromises);\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n\n if (element.getAttribute('style')?.includes('hcs://')) {\n this.processInlineStyles();\n }\n\n if (\n element.tagName.toLowerCase() === 'style' &&\n element.textContent?.includes('hcs://')\n ) {\n this.processInlineStyles();\n }\n\n // Handle both src and data-src attributes\n if (element.getAttribute('src')?.startsWith('hcs://')) {\n const src = element.getAttribute('src')!;\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n\n // Immediately process the element based on its type\n const tagName = element.tagName.toLowerCase();\n switch (tagName) {\n case 'img':\n this.loadResource(element, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(element, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(element, 'audio', Infinity);\n break;\n case 'script':\n this.loadResource(element, 'script', Infinity);\n break;\n }\n }\n\n // Also check data-src in case it was set directly\n if (element.matches('script[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'script', Infinity);\n } else if (element.matches('img[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'image', Infinity);\n } else if (element.matches('video[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'video', Infinity);\n } else if (element.matches('audio[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'audio', Infinity);\n } else if (\n element.matches('model-viewer[data-src^=\"hcs://\"]')\n ) {\n this.loadResource(element, 'glb', Infinity);\n } else if (element.matches('link[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'css', Infinity);\n }\n\n // Check children of added nodes for HCS URLs\n const childrenWithHCS = element.querySelectorAll(\n '[data-src^=\"hcs://\"], [src^=\"hcs://\"]'\n );\n childrenWithHCS.forEach((child) => {\n const childElement = child as HTMLElement;\n const tagName = childElement.tagName.toLowerCase();\n\n // Convert src to data-src if needed\n const src = childElement.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n childElement.setAttribute('data-src', src);\n childElement.removeAttribute('src');\n }\n\n // Process based on tag type\n switch (tagName) {\n case 'script':\n this.loadResource(childElement, 'script', Infinity);\n break;\n case 'img':\n this.loadResource(childElement, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(childElement, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(childElement, 'audio', Infinity);\n break;\n case 'model-viewer':\n this.loadResource(childElement, 'glb', Infinity);\n break;\n case 'link':\n this.loadResource(childElement, 'css', Infinity);\n break;\n }\n });\n }\n });\n\n // Handle attribute changes\n if (mutation.type === 'attributes') {\n const element = mutation.target as HTMLElement;\n if (\n mutation.attributeName === 'style' &&\n element.getAttribute('style')?.includes('hcs://')\n ) {\n this.processInlineStyles();\n } else if (mutation.attributeName === 'src') {\n const src = element.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n const type = element.tagName.toLowerCase();\n if (['img', 'video', 'audio'].includes(type)) {\n this.loadResource(element, type as LoadType, Infinity);\n }\n }\n }\n }\n });\n });\n\n if (document.body) {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n } else {\n document.addEventListener('DOMContentLoaded', () => {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n });\n }\n\n resolve();\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initializeObserver);\n } else {\n initializeObserver();\n }\n });\n }\n\n async preloadImage(topicId: string): Promise<string> {\n this.log('Loading image:' + topicId);\n this.updateLoadingStatus('image: ' + topicId, 'loading');\n const blob = await this.retrieveHCS1Data(topicId);\n const objectURL = URL.createObjectURL(blob);\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('image: ' + topicId, 'loaded');\n return objectURL;\n }\n\n async preloadAudio(topicId: string): Promise<string> {\n const audioElement = document.createElement('audio');\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n const cachedAudio = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (cachedAudio) {\n this.LoadedAudioUrls[topicId] = cachedAudio.src;\n } else {\n console.error('Failed to preload audio: ' + topicId);\n }\n return this.LoadedAudioUrls[topicId];\n }\n\n async playAudio(topicId: string, volume = 1.0) {\n const audioUrl = this.LoadedAudioUrls[topicId];\n\n if (audioUrl) {\n const audio = new Audio(audioUrl);\n audio.volume = volume;\n this.LoadedAudios[topicId] = audio;\n\n audio.play().catch((error) => {\n console.error('Failed to play audio:', error);\n });\n\n audio.addEventListener('ended', () => {\n audio.remove();\n delete this.LoadedAudios[topicId];\n });\n } else {\n console.error('Audio not preloaded: ' + topicId);\n }\n }\n\n async pauseAudio(topicId: string) {\n const audioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (audioElement) {\n console.log('found element', audioElement);\n audioElement.pause();\n this.LoadedAudios[topicId]?.pause();\n } else {\n this.LoadedAudios[topicId]?.pause();\n }\n }\n\n async loadAndPlayAudio(topicId: string, autoplay = false, volume = 1.0) {\n let existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (existingAudioElement) {\n existingAudioElement.volume = volume;\n await existingAudioElement.play();\n } else {\n const audioElement = document.createElement('audio');\n audioElement.volume = volume;\n if (autoplay) {\n audioElement.setAttribute('autoplay', 'autoplay');\n }\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n if (!autoplay) {\n await existingAudioElement.play();\n }\n }\n }\n}\nconst isServer = typeof window === 'undefined';\n\nif (!isServer) {\n (window as any).HCS = new HCS();\n (window as any).HCS.init().then(() => {\n console.log('All HCS resources loaded');\n if (typeof (window as any).HCSReady === 'function') {\n console.log('Running HCSReady...');\n (window as any).HCSReady();\n }\n });\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es2.js","sources":["../../src/hcs-3/src/index.ts"],"sourcesContent":["import {\n HCSSDK,\n LoadQueueItem,\n HCSConfigMapping,\n HCSConfig,\n LoadType,\n} from './types';\nimport { Logger } from '../../utils/logger';\n\nexport const sleep = (ms: number) => {\n return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nexport class HCS implements HCSSDK {\n config: HCSConfig;\n configMapping: HCSConfigMapping;\n LoadedScripts: Record<string, string>;\n LoadedWasm: Record<string, WebAssembly.Instance>;\n LoadedImages: Record<string, string>;\n LoadedVideos: Record<string, string>;\n LoadedAudios: Record<string, HTMLAudioElement>;\n LoadedAudioUrls: Record<string, string>;\n LoadedGLBs: Record<string, string>;\n scriptLoadedEvent: Event;\n loadQueue: LoadQueueItem[];\n isProcessingQueue: boolean;\n private modelViewerLoaded: boolean = false;\n private modelViewerLoading: Promise<void> | null = null;\n private logger: Logger;\n\n constructor() {\n this.config = {\n cdnUrl: 'https://kiloscribe.com/api/inscription-cdn/',\n network: 'mainnet',\n retryAttempts: 3,\n retryBackoff: 300,\n debug: false,\n showLoadingIndicator: false,\n loadingCallbackName: null,\n };\n this.configMapping = {\n hcsCdnUrl: 'cdnUrl',\n hcsNetwork: 'network',\n hcsRetryAttempts: 'retryAttempts',\n hcsRetryBackoff: 'retryBackoff',\n hcsDebug: 'debug',\n hcsShowLoadingIndicator: 'showLoadingIndicator',\n hcsLoadingCallbackName: 'loadingCallbackName',\n };\n this.LoadedScripts = {};\n this.LoadedWasm = {};\n this.LoadedImages = {};\n this.LoadedVideos = {};\n this.LoadedAudios = {};\n this.LoadedAudioUrls = {};\n this.LoadedGLBs = {};\n this.scriptLoadedEvent = new Event('HCSScriptLoaded');\n this.loadQueue = [] as LoadQueueItem[];\n this.isProcessingQueue = false;\n\n try {\n this.logger = Logger.getInstance({\n module: 'HCS-3',\n level: this.config.debug ? 'debug' : 'error',\n });\n } catch (e) {\n this.logger = this.createFallbackLogger();\n }\n }\n\n private createFallbackLogger(): Logger {\n const fallbackLogger = {\n debug: (...args: any[]) =>\n this.config.debug && console.debug('[HCS-3]', ...args),\n info: (...args: any[]) =>\n this.config.debug && console.info('[HCS-3]', ...args),\n warn: (...args: any[]) => console.warn('[HCS-3]', ...args),\n error: (...args: any[]) => console.error('[HCS-3]', ...args),\n setLogLevel: (level: string) => {\n this.config.debug = level === 'debug';\n },\n } as unknown as Logger;\n\n return fallbackLogger;\n }\n\n log(...args: any[]): void {\n if (args.length === 0) {\n this.logger.debug('');\n } else if (args.length === 1) {\n this.logger.debug(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.debug(message, data);\n }\n }\n\n error(...args: any[]): void {\n if (args.length === 0) {\n this.logger.error('');\n } else if (args.length === 1) {\n this.logger.error(String(args[0]));\n } else {\n const message = String(args[0]);\n const data = args.slice(1);\n this.logger.error(message, data);\n }\n }\n\n loadConfigFromHTML(): void {\n const configScript = document.querySelector(\n 'script[data-hcs-config]'\n ) as HTMLScriptElement | null;\n if (configScript) {\n Object.keys(this.configMapping).forEach((dataAttr) => {\n if (configScript.dataset[dataAttr]) {\n const configKey =\n this.configMapping[dataAttr as keyof HCSConfigMapping];\n let value: any = configScript.dataset[dataAttr];\n\n if (value === 'true') value = true;\n if (value === 'false') value = false;\n if (!isNaN(Number(value)) && value !== '') value = Number(value);\n\n (this.config as any)[configKey] = value;\n }\n });\n\n // Update logger level based on debug setting\n this.logger.setLogLevel(this.config.debug ? 'debug' : 'error');\n }\n this.log('Loaded config:', this.config);\n }\n\n updateLoadingStatus(id: string, status: string): void {\n if (this.LoadedScripts[id] === 'loaded') {\n return;\n }\n if (this.config.showLoadingIndicator) {\n console.log('[HCS Loading] ' + id + ' : ' + status);\n }\n this.LoadedScripts[id] = status;\n if (\n this.config.loadingCallbackName &&\n typeof (window as any)[this.config.loadingCallbackName] === 'function'\n ) {\n const callback = (window as any)[this.config.loadingCallbackName];\n if (typeof callback === 'function') {\n callback(id, status);\n }\n }\n }\n\n async fetchWithRetry(\n url: string,\n retries: number = this.config.retryAttempts,\n backoff: number = this.config.retryBackoff\n ): Promise<Response> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error('HTTP error! status: ' + response.status);\n }\n return response;\n } catch (error) {\n if (retries > 0) {\n this.log(\n 'Retrying fetch for ' + url + ' Attempts left: ' + (retries - 1)\n );\n await this.sleep(backoff);\n return this.fetchWithRetry(url, retries - 1, backoff * 2);\n }\n throw error;\n }\n }\n\n sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n isDuplicate(topicId: string): boolean {\n return !!this.LoadedScripts[topicId];\n }\n\n async retrieveHCS1Data(\n topicId: string,\n cdnUrl: string = this.config.cdnUrl,\n network: string = this.config.network\n ): Promise<Blob> {\n const cleanNetwork = network.replace(/['\"]+/g, '');\n const response = await this.fetchWithRetry(\n cdnUrl + topicId + '?network=' + cleanNetwork\n );\n return await response.blob();\n }\n\n async loadScript(scriptElement: HTMLElement): Promise<void> {\n const src = scriptElement.getAttribute('data-src');\n const scriptId = scriptElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const type = scriptElement.getAttribute('type');\n const isRequired = scriptElement.hasAttribute('data-required');\n const isModule = scriptElement.getAttribute('type') === 'module';\n\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(scriptId!, 'loading');\n\n try {\n const cdnUrl =\n scriptElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n scriptElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n\n if (type === 'wasm') {\n const arrayBuffer = await blob.arrayBuffer();\n const wasmModule = await WebAssembly.compile(arrayBuffer);\n this.LoadedWasm[scriptId!] = await WebAssembly.instantiate(wasmModule, {\n env: {},\n ...(scriptElement.dataset as any),\n });\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded wasm: ' + scriptId);\n } else {\n const content = await blob.text();\n const script = document.createElement('script');\n script.textContent = content;\n script.className = 'hcs-inline-script';\n // Copy over the script ID to the inlined script\n if (scriptId) {\n script.setAttribute('data-loaded-script-id', scriptId);\n }\n\n if (isModule) {\n script.type = 'module';\n const moduleBlob = new Blob([content], {\n type: 'application/javascript',\n });\n script.src = URL.createObjectURL(moduleBlob);\n }\n\n document.body.appendChild(script);\n\n this.updateLoadingStatus(scriptId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded script: ' + scriptId);\n\n script.onerror = (error) => {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n };\n }\n } catch (error) {\n this.error('Failed to load ' + type + ': ' + scriptId, error);\n this.updateLoadingStatus(scriptId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadModuleExports(scriptId: string): Promise<any> {\n const script = document.querySelector(\n 'script[data-loaded-script-id=\"' + scriptId + '\"]'\n );\n if (!script) {\n throw new Error('Module script with id ' + scriptId + ' not found');\n }\n const scriptSrc = script.getAttribute('src');\n if (!scriptSrc) {\n throw new Error('Module script ' + scriptId + ' has no src attribute');\n }\n\n try {\n return await import(/* webpackIgnore: true */ scriptSrc);\n } catch (error) {\n this.error('Failed to import module', error);\n throw error;\n }\n }\n\n async loadStylesheet(linkElement: HTMLElement): Promise<void> {\n const src = linkElement.getAttribute('data-src');\n const stylesheetId = linkElement.getAttribute('data-script-id');\n const topicId = src?.split('/').pop();\n const isRequired = linkElement.hasAttribute('data-required');\n if (this.isDuplicate(topicId || '')) {\n return;\n }\n\n this.updateLoadingStatus(stylesheetId!, 'loading');\n\n try {\n const cdnUrl =\n linkElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n linkElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const cssContent = await blob.text();\n const style = document.createElement('style');\n style.textContent = cssContent;\n document.head.appendChild(style);\n\n this.updateLoadingStatus(stylesheetId!, 'loaded');\n window.dispatchEvent(this.scriptLoadedEvent);\n this.log('Loaded and inlined stylesheet: ' + stylesheetId);\n } catch (error) {\n this.error('Failed to load stylesheet: ' + stylesheetId, error);\n this.updateLoadingStatus(stylesheetId!, 'failed');\n if (isRequired) {\n throw error;\n }\n }\n }\n\n async loadImage(imageElement: HTMLElement): Promise<void> {\n const src = imageElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading image: ' + topicId);\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n\n try {\n const cdnUrl =\n imageElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n imageElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (imageElement as HTMLImageElement).src = objectURL;\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('Image: ' + topicId!, 'loaded');\n this.log('Loaded image: ' + topicId);\n } catch (error) {\n this.error('Failed to load image: ' + topicId, error);\n this.updateLoadingStatus('Image: ' + topicId!, 'failed');\n }\n }\n\n async loadMedia(\n mediaElement: HTMLElement,\n mediaType: 'video' | 'audio'\n ): Promise<void> {\n const src = mediaElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading ' + mediaType + ': ' + topicId);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n mediaElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n mediaElement.getAttribute('data-network') || this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n (mediaElement as HTMLMediaElement).src = objectURL;\n\n if (mediaType === 'video') {\n this.LoadedVideos[topicId!] = objectURL;\n } else {\n this.LoadedAudioUrls[topicId!] = objectURL;\n }\n\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'loaded');\n this.log('Loaded ' + mediaType + ': ' + topicId);\n } catch (error) {\n this.error('Failed to load ' + mediaType + ': ' + topicId, error);\n this.updateLoadingStatus(mediaType + ': ' + topicId!, 'failed');\n }\n }\n\n private async loadModelViewer(): Promise<void> {\n if (this.modelViewerLoading) return this.modelViewerLoading;\n if (this.modelViewerLoaded) return Promise.resolve();\n\n this.modelViewerLoading = new Promise<void>((resolve) => {\n const modelViewerScript = document.createElement('script');\n modelViewerScript.setAttribute('data-src', 'hcs://1/0.0.7293044');\n modelViewerScript.setAttribute('data-script-id', 'model-viewer');\n modelViewerScript.setAttribute('type', 'module');\n\n window.addEventListener(\n 'HCSScriptLoaded',\n () => {\n this.modelViewerLoaded = true;\n resolve();\n },\n { once: true }\n );\n\n this.loadScript(modelViewerScript);\n });\n\n return this.modelViewerLoading;\n }\n\n async loadGLB(glbElement: HTMLElement): Promise<void> {\n await this.loadModelViewer();\n\n const src = glbElement.getAttribute('data-src');\n const topicId = src?.split('/').pop();\n\n this.log('Loading GLB: ' + topicId);\n this.updateLoadingStatus('GLB: ' + topicId!, 'loading');\n\n try {\n const cdnUrl =\n glbElement.getAttribute('data-cdn-url') || this.config.cdnUrl;\n const network =\n glbElement.getAttribute('data-network') || this.config.network;\n\n let modelViewer: HTMLElement;\n if (glbElement.tagName.toLowerCase() !== 'model-viewer') {\n modelViewer = document.createElement('model-viewer');\n Array.from(glbElement.attributes).forEach((attr) => {\n modelViewer.setAttribute(attr.name, attr.value);\n });\n modelViewer.setAttribute('camera-controls', '');\n modelViewer.setAttribute('auto-rotate', '');\n modelViewer.setAttribute('ar', '');\n glbElement.parentNode?.replaceChild(modelViewer, glbElement);\n } else {\n modelViewer = glbElement;\n }\n\n const blob = await this.retrieveHCS1Data(topicId!, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n modelViewer.setAttribute('src', objectURL);\n this.LoadedGLBs[topicId!] = objectURL;\n\n this.updateLoadingStatus('GLB: ' + topicId!, 'loaded');\n this.log('Loaded GLB: ' + topicId);\n } catch (error) {\n this.error('Failed to load GLB: ' + topicId, error);\n this.updateLoadingStatus('GLB: ' + topicId!, 'failed');\n }\n }\n\n async loadResource(\n element: HTMLElement,\n type: LoadType,\n order: number\n ): Promise<void> {\n return new Promise((resolve) => {\n this.loadQueue.push({ element, type, order, resolve });\n this.processQueue();\n });\n }\n\n async processQueue(): Promise<void> {\n if (this.isProcessingQueue) return;\n this.isProcessingQueue = true;\n\n while (this.loadQueue.length > 0) {\n const item = this.loadQueue.shift()!;\n try {\n if (item.type === 'script') {\n await this.loadScript(item.element);\n } else if (item.type === 'image') {\n await this.loadImage(item.element);\n } else if (item.type === 'video' || item.type === 'audio') {\n await this.loadMedia(item.element, item.type as 'video' | 'audio');\n } else if (item.type === 'glb') {\n await this.loadGLB(item.element);\n } else if (item.type === 'css') {\n await this.loadStylesheet(item.element);\n }\n item.resolve();\n } catch (error) {\n this.error('Error processing queue item:', error);\n if (\n item.type === 'script' &&\n item.element.hasAttribute('data-required')\n ) {\n break;\n }\n }\n }\n\n this.isProcessingQueue = false;\n }\n\n private async replaceHCSInStyle(styleContent: string): Promise<string> {\n let newContent = styleContent;\n let startIndex = newContent.indexOf('hcs://');\n\n while (startIndex !== -1) {\n let endIndex = startIndex;\n while (\n endIndex < newContent.length &&\n ![\"'\", '\"', ' ', ')'].includes(newContent[endIndex])\n ) {\n endIndex++;\n }\n\n const hcsUrl = newContent.substring(startIndex, endIndex);\n const topicId = hcsUrl.split('/').pop()!;\n\n try {\n const cdnUrl = this.config.cdnUrl;\n const network = this.config.network;\n\n const blob = await this.retrieveHCS1Data(topicId, cdnUrl, network);\n const objectURL = URL.createObjectURL(blob);\n\n newContent =\n newContent.substring(0, startIndex) +\n objectURL +\n newContent.substring(endIndex);\n\n this.LoadedImages[topicId] = objectURL;\n this.log('Replaced CSS HCS URL: ' + hcsUrl + ' with ' + objectURL);\n } catch (error) {\n this.error('Failed to load CSS image: ' + topicId, error);\n }\n\n startIndex = newContent.indexOf('hcs://', startIndex + 1);\n }\n\n return newContent;\n }\n\n private async processInlineStyles(): Promise<void> {\n const elementsWithStyle = document.querySelectorAll('[style*=\"hcs://\"]');\n this.log(\n 'Found ' +\n elementsWithStyle.length +\n ' elements with HCS style references'\n );\n\n for (const element of Array.from(elementsWithStyle)) {\n const style = element.getAttribute('style');\n if (style) {\n this.log('Processing style: ' + style);\n const newStyle = await this.replaceHCSInStyle(style);\n if (style !== newStyle) {\n element.setAttribute('style', newStyle);\n this.log('Updated style to: ' + newStyle);\n }\n }\n }\n\n const styleTags = document.querySelectorAll('style');\n for (const styleTag of Array.from(styleTags)) {\n if (styleTag.textContent?.includes('hcs://')) {\n const newContent = await this.replaceHCSInStyle(styleTag.textContent);\n if (styleTag.textContent !== newContent) {\n styleTag.textContent = newContent;\n }\n }\n }\n }\n\n async init(): Promise<void> {\n this.loadConfigFromHTML();\n\n return new Promise((resolve) => {\n const initializeObserver = async () => {\n const scriptElements = document.querySelectorAll(\n 'script[data-src^=\"hcs://\"]'\n );\n const imageElements = document.querySelectorAll(\n 'img[data-src^=\"hcs://\"], img[src^=\"hcs://\"]'\n );\n const videoElements = document.querySelectorAll(\n 'video[data-src^=\"hcs://\"], video[src^=\"hcs://\"]'\n );\n const audioElements = document.querySelectorAll(\n 'audio[data-src^=\"hcs://\"], audio[src^=\"hcs://\"]'\n );\n const glbElements = document.querySelectorAll(\n 'model-viewer[data-src^=\"hcs://\"]'\n );\n const cssElements = document.querySelectorAll(\n 'link[data-src^=\"hcs://\"]'\n );\n\n // Convert src to data-src for HCS URLs\n document.querySelectorAll('[src^=\"hcs://\"]').forEach((element) => {\n const src = element.getAttribute('src');\n if (src) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n }\n });\n\n await this.processInlineStyles();\n\n const loadPromises: Promise<void>[] = [];\n\n [\n { elements: scriptElements, type: 'script' },\n { elements: imageElements, type: 'image' },\n { elements: videoElements, type: 'video' },\n { elements: audioElements, type: 'audio' },\n { elements: glbElements, type: 'glb' },\n { elements: cssElements, type: 'css' },\n ].forEach(({ elements, type }) => {\n elements.forEach((element) => {\n const order =\n parseInt(element.getAttribute('data-load-order') || '') ||\n Infinity;\n loadPromises.push(\n this.loadResource(element as HTMLElement, type as LoadType, order)\n );\n });\n });\n\n await Promise.all(loadPromises);\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as HTMLElement;\n\n if (element.getAttribute('style')?.includes('hcs://')) {\n this.processInlineStyles();\n }\n\n if (\n element.tagName.toLowerCase() === 'style' &&\n element.textContent?.includes('hcs://')\n ) {\n this.processInlineStyles();\n }\n\n // Handle both src and data-src attributes\n if (element.getAttribute('src')?.startsWith('hcs://')) {\n const src = element.getAttribute('src')!;\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n\n // Immediately process the element based on its type\n const tagName = element.tagName.toLowerCase();\n switch (tagName) {\n case 'img':\n this.loadResource(element, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(element, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(element, 'audio', Infinity);\n break;\n case 'script':\n this.loadResource(element, 'script', Infinity);\n break;\n }\n }\n\n // Also check data-src in case it was set directly\n if (element.matches('script[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'script', Infinity);\n } else if (element.matches('img[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'image', Infinity);\n } else if (element.matches('video[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'video', Infinity);\n } else if (element.matches('audio[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'audio', Infinity);\n } else if (\n element.matches('model-viewer[data-src^=\"hcs://\"]')\n ) {\n this.loadResource(element, 'glb', Infinity);\n } else if (element.matches('link[data-src^=\"hcs://\"]')) {\n this.loadResource(element, 'css', Infinity);\n }\n\n // Check children of added nodes for HCS URLs\n const childrenWithHCS = element.querySelectorAll(\n '[data-src^=\"hcs://\"], [src^=\"hcs://\"]'\n );\n childrenWithHCS.forEach((child) => {\n const childElement = child as HTMLElement;\n const tagName = childElement.tagName.toLowerCase();\n\n // Convert src to data-src if needed\n const src = childElement.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n childElement.setAttribute('data-src', src);\n childElement.removeAttribute('src');\n }\n\n // Process based on tag type\n switch (tagName) {\n case 'script':\n this.loadResource(childElement, 'script', Infinity);\n break;\n case 'img':\n this.loadResource(childElement, 'image', Infinity);\n break;\n case 'video':\n this.loadResource(childElement, 'video', Infinity);\n break;\n case 'audio':\n this.loadResource(childElement, 'audio', Infinity);\n break;\n case 'model-viewer':\n this.loadResource(childElement, 'glb', Infinity);\n break;\n case 'link':\n this.loadResource(childElement, 'css', Infinity);\n break;\n }\n });\n }\n });\n\n // Handle attribute changes\n if (mutation.type === 'attributes') {\n const element = mutation.target as HTMLElement;\n if (\n mutation.attributeName === 'style' &&\n element.getAttribute('style')?.includes('hcs://')\n ) {\n this.processInlineStyles();\n } else if (mutation.attributeName === 'src') {\n const src = element.getAttribute('src');\n if (src?.startsWith('hcs://')) {\n element.setAttribute('data-src', src);\n element.removeAttribute('src');\n const type = element.tagName.toLowerCase();\n if (['img', 'video', 'audio'].includes(type)) {\n this.loadResource(element, type as LoadType, Infinity);\n }\n }\n }\n }\n });\n });\n\n if (document.body) {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n } else {\n document.addEventListener('DOMContentLoaded', () => {\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: ['style', 'src', 'data-src'],\n });\n });\n }\n\n resolve();\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initializeObserver);\n } else {\n initializeObserver();\n }\n });\n }\n\n async preloadImage(topicId: string): Promise<string> {\n this.log('Loading image:' + topicId);\n this.updateLoadingStatus('image: ' + topicId, 'loading');\n const blob = await this.retrieveHCS1Data(topicId);\n const objectURL = URL.createObjectURL(blob);\n this.LoadedImages[topicId!] = objectURL;\n this.updateLoadingStatus('image: ' + topicId, 'loaded');\n return objectURL;\n }\n\n async preloadAudio(topicId: string): Promise<string> {\n const audioElement = document.createElement('audio');\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n const cachedAudio = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (cachedAudio) {\n this.LoadedAudioUrls[topicId] = cachedAudio.src;\n } else {\n console.error('Failed to preload audio: ' + topicId);\n }\n return this.LoadedAudioUrls[topicId];\n }\n\n async playAudio(topicId: string, volume = 1.0) {\n const audioUrl = this.LoadedAudioUrls[topicId];\n\n if (audioUrl) {\n const audio = new Audio(audioUrl);\n audio.volume = volume;\n this.LoadedAudios[topicId] = audio;\n\n audio.play().catch((error) => {\n console.error('Failed to play audio:', error);\n });\n\n audio.addEventListener('ended', () => {\n audio.remove();\n delete this.LoadedAudios[topicId];\n });\n } else {\n console.error('Audio not preloaded: ' + topicId);\n }\n }\n\n async pauseAudio(topicId: string) {\n const audioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (audioElement) {\n console.log('found element', audioElement);\n audioElement.pause();\n this.LoadedAudios[topicId]?.pause();\n } else {\n this.LoadedAudios[topicId]?.pause();\n }\n }\n\n async loadAndPlayAudio(topicId: string, autoplay = false, volume = 1.0) {\n let existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n\n if (existingAudioElement) {\n existingAudioElement.volume = volume;\n await existingAudioElement.play();\n } else {\n const audioElement = document.createElement('audio');\n audioElement.volume = volume;\n if (autoplay) {\n audioElement.setAttribute('autoplay', 'autoplay');\n }\n audioElement.setAttribute('data-topic-id', topicId);\n audioElement.setAttribute('data-src', 'hcs://1/' + topicId);\n\n document.body.appendChild(audioElement);\n\n await this.loadMedia(audioElement, 'audio');\n\n existingAudioElement = document.querySelector(\n 'audio[data-topic-id=\"' + topicId + '\"]'\n ) as HTMLAudioElement;\n if (!autoplay) {\n await existingAudioElement.play();\n }\n }\n }\n}\n\n"],"names":[],"mappings":"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"}
|