@hashgraphonline/standards-sdk 0.0.112 → 0.0.114
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/cjs/hcs-10/base-client.d.ts +2 -0
- package/dist/cjs/hcs-10/base-client.d.ts.map +1 -1
- package/dist/cjs/hcs-10/browser.d.ts +2 -0
- package/dist/cjs/hcs-10/browser.d.ts.map +1 -1
- package/dist/cjs/hcs-10/connections-manager.d.ts +1 -0
- package/dist/cjs/hcs-10/connections-manager.d.ts.map +1 -1
- package/dist/cjs/hcs-10/errors.d.ts.map +1 -1
- package/dist/cjs/hcs-10/registrations.d.ts.map +1 -1
- package/dist/cjs/hcs-10/sdk.d.ts.map +1 -1
- package/dist/cjs/hcs-10/types.d.ts +2 -0
- package/dist/cjs/hcs-10/types.d.ts.map +1 -1
- package/dist/cjs/hcs-11/client.d.ts.map +1 -1
- package/dist/cjs/hcs-11/types.d.ts +1 -0
- package/dist/cjs/hcs-11/types.d.ts.map +1 -1
- package/dist/cjs/hcs-3/src/index.d.ts.map +1 -1
- package/dist/cjs/hcs-7/evm-bridge.d.ts.map +1 -1
- package/dist/cjs/hcs-7/redis-cache.d.ts.map +1 -1
- package/dist/cjs/hcs-7/wasm-bridge.d.ts.map +1 -1
- package/dist/cjs/index-C8CnOC88.cjs +11 -0
- package/dist/cjs/index-C8CnOC88.cjs.map +1 -0
- package/dist/cjs/{index-CHar8dVv-SclbHQNq.cjs → index-CHar8dVv-CO7x6bkg.cjs} +2 -2
- package/dist/cjs/{index-CHar8dVv-SclbHQNq.cjs.map → index-CHar8dVv-CO7x6bkg.cjs.map} +1 -1
- package/dist/cjs/services/mirror-node.d.ts +1 -1
- package/dist/cjs/services/mirror-node.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/utils/logger.d.ts +1 -1
- package/dist/cjs/utils/logger.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/hts-parser.d.ts.map +1 -1
- package/dist/cjs/utils/parsers/scs-parser.d.ts.map +1 -1
- package/dist/cjs/utils/progress-reporter.d.ts.map +1 -1
- package/dist/cjs/utils/sleep.d.ts.map +1 -1
- package/dist/cjs/utils/transaction-parser-types.d.ts.map +1 -1
- package/dist/es/hcs-10/base-client.d.ts +2 -0
- package/dist/es/hcs-10/base-client.d.ts.map +1 -1
- package/dist/es/hcs-10/browser.d.ts +2 -0
- package/dist/es/hcs-10/browser.d.ts.map +1 -1
- package/dist/es/hcs-10/connections-manager.d.ts +1 -0
- package/dist/es/hcs-10/connections-manager.d.ts.map +1 -1
- package/dist/es/hcs-10/errors.d.ts.map +1 -1
- package/dist/es/hcs-10/registrations.d.ts.map +1 -1
- package/dist/es/hcs-10/sdk.d.ts.map +1 -1
- package/dist/es/hcs-10/types.d.ts +2 -0
- package/dist/es/hcs-10/types.d.ts.map +1 -1
- package/dist/es/hcs-11/client.d.ts.map +1 -1
- package/dist/es/hcs-11/types.d.ts +1 -0
- package/dist/es/hcs-11/types.d.ts.map +1 -1
- package/dist/es/hcs-3/src/index.d.ts.map +1 -1
- package/dist/es/hcs-7/evm-bridge.d.ts.map +1 -1
- package/dist/es/hcs-7/redis-cache.d.ts.map +1 -1
- package/dist/es/hcs-7/wasm-bridge.d.ts.map +1 -1
- package/dist/es/services/mirror-node.d.ts +1 -1
- package/dist/es/services/mirror-node.d.ts.map +1 -1
- package/dist/es/standards-sdk.es10.js +7 -16
- package/dist/es/standards-sdk.es10.js.map +1 -1
- package/dist/es/standards-sdk.es12.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +5 -4
- package/dist/es/standards-sdk.es13.js.map +1 -1
- package/dist/es/standards-sdk.es14.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +13 -3
- package/dist/es/standards-sdk.es15.js.map +1 -1
- package/dist/es/standards-sdk.es16.js.map +1 -1
- package/dist/es/standards-sdk.es17.js.map +1 -1
- package/dist/es/standards-sdk.es18.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +6 -6
- package/dist/es/standards-sdk.es19.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +5 -1
- package/dist/es/standards-sdk.es2.js.map +1 -1
- package/dist/es/standards-sdk.es20.js +1 -1
- package/dist/es/standards-sdk.es20.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +9 -27
- package/dist/es/standards-sdk.es21.js.map +1 -1
- package/dist/es/standards-sdk.es22.js.map +1 -1
- package/dist/es/standards-sdk.es23.js.map +1 -1
- package/dist/es/standards-sdk.es24.js +7139 -450
- package/dist/es/standards-sdk.es24.js.map +1 -1
- package/dist/es/standards-sdk.es25.js +2 -109
- package/dist/es/standards-sdk.es25.js.map +1 -1
- package/dist/es/standards-sdk.es26.js +469 -34
- package/dist/es/standards-sdk.es26.js.map +1 -1
- package/dist/es/standards-sdk.es27.js +74 -221
- package/dist/es/standards-sdk.es27.js.map +1 -1
- package/dist/es/standards-sdk.es28.js +34 -141
- package/dist/es/standards-sdk.es28.js.map +1 -1
- package/dist/es/standards-sdk.es29.js +250 -5
- package/dist/es/standards-sdk.es29.js.map +1 -1
- package/dist/es/standards-sdk.es3.js +17 -9
- package/dist/es/standards-sdk.es3.js.map +1 -1
- package/dist/es/standards-sdk.es30.js +154 -7171
- package/dist/es/standards-sdk.es30.js.map +1 -1
- package/dist/es/standards-sdk.es31.js +11 -2
- package/dist/es/standards-sdk.es31.js.map +1 -1
- package/dist/es/standards-sdk.es32.js +7134 -41
- package/dist/es/standards-sdk.es32.js.map +1 -1
- package/dist/es/standards-sdk.es33.js +41 -7134
- package/dist/es/standards-sdk.es33.js.map +1 -1
- package/dist/es/standards-sdk.es4.js +4 -1
- package/dist/es/standards-sdk.es4.js.map +1 -1
- package/dist/es/standards-sdk.es5.js +4 -7
- package/dist/es/standards-sdk.es5.js.map +1 -1
- package/dist/es/standards-sdk.es6.js.map +1 -1
- package/dist/es/standards-sdk.es7.js +8 -7
- package/dist/es/standards-sdk.es7.js.map +1 -1
- package/dist/es/standards-sdk.es8.js +9 -10
- package/dist/es/standards-sdk.es8.js.map +1 -1
- package/dist/es/standards-sdk.es9.js +2 -4
- package/dist/es/standards-sdk.es9.js.map +1 -1
- package/dist/es/utils/logger.d.ts +1 -1
- package/dist/es/utils/logger.d.ts.map +1 -1
- package/dist/es/utils/parsers/hts-parser.d.ts.map +1 -1
- package/dist/es/utils/parsers/scs-parser.d.ts.map +1 -1
- package/dist/es/utils/progress-reporter.d.ts.map +1 -1
- package/dist/es/utils/sleep.d.ts.map +1 -1
- package/dist/es/utils/transaction-parser-types.d.ts.map +1 -1
- package/dist/umd/hcs-10/base-client.d.ts +2 -0
- package/dist/umd/hcs-10/base-client.d.ts.map +1 -1
- package/dist/umd/hcs-10/browser.d.ts +2 -0
- package/dist/umd/hcs-10/browser.d.ts.map +1 -1
- package/dist/umd/hcs-10/connections-manager.d.ts +1 -0
- package/dist/umd/hcs-10/connections-manager.d.ts.map +1 -1
- package/dist/umd/hcs-10/errors.d.ts.map +1 -1
- package/dist/umd/hcs-10/registrations.d.ts.map +1 -1
- package/dist/umd/hcs-10/sdk.d.ts.map +1 -1
- package/dist/umd/hcs-10/types.d.ts +2 -0
- package/dist/umd/hcs-10/types.d.ts.map +1 -1
- package/dist/umd/hcs-11/client.d.ts.map +1 -1
- package/dist/umd/hcs-11/types.d.ts +1 -0
- package/dist/umd/hcs-11/types.d.ts.map +1 -1
- package/dist/umd/hcs-3/src/index.d.ts.map +1 -1
- package/dist/umd/hcs-7/evm-bridge.d.ts.map +1 -1
- package/dist/umd/hcs-7/redis-cache.d.ts.map +1 -1
- package/dist/umd/hcs-7/wasm-bridge.d.ts.map +1 -1
- package/dist/umd/services/mirror-node.d.ts +1 -1
- package/dist/umd/services/mirror-node.d.ts.map +1 -1
- package/dist/umd/standards-sdk.umd.js +6 -6
- package/dist/umd/standards-sdk.umd.js.map +1 -1
- package/dist/umd/utils/logger.d.ts +1 -1
- package/dist/umd/utils/logger.d.ts.map +1 -1
- package/dist/umd/utils/parsers/hts-parser.d.ts.map +1 -1
- package/dist/umd/utils/parsers/scs-parser.d.ts.map +1 -1
- package/dist/umd/utils/progress-reporter.d.ts.map +1 -1
- package/dist/umd/utils/sleep.d.ts.map +1 -1
- package/dist/umd/utils/transaction-parser-types.d.ts.map +1 -1
- package/package.json +8 -3
- package/dist/cjs/index-CcE0yY9g.cjs +0 -11
- package/dist/cjs/index-CcE0yY9g.cjs.map +0 -1
|
@@ -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}\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(\n element as HTMLElement,\n type as LoadType,\n order,\n ),\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"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { I as InscriptionSDK } from "./standards-sdk.
|
|
1
|
+
import { I as InscriptionSDK } from "./standards-sdk.es24.js";
|
|
2
2
|
import { Logger } from "./standards-sdk.es15.js";
|
|
3
3
|
import { ProgressReporter } from "./standards-sdk.es17.js";
|
|
4
4
|
async function inscribe(input, clientConfig, options, existingSDK) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es20.js","sources":["../../src/inscribe/inscriber.ts"],"sourcesContent":["import { InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport {\n InscriptionOptions,\n InscriptionResult,\n RetrievedInscriptionResult,\n HederaClientConfig,\n} from './types';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { Logger } from '../utils/logger';\nimport { ProgressCallback, ProgressReporter } from '../utils/progress-reporter';\n\nexport type InscriptionInput =\n | { type: 'url'; url: string }\n | { type: 'file'; path: string }\n | {\n type: 'buffer';\n buffer: ArrayBuffer | Buffer;\n fileName: string;\n mimeType?: string;\n };\n\nexport type InscriptionResponse =\n | { confirmed: false; result: InscriptionResult; sdk: InscriptionSDK }\n | {\n confirmed: true;\n result: InscriptionResult;\n inscription: RetrievedInscriptionResult;\n sdk: InscriptionSDK;\n };\n\nexport async function inscribe(\n input: InscriptionInput,\n clientConfig: HederaClientConfig,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n logger.info('Starting inscription process', {\n type: input.type,\n mode: options.mode || 'file',\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: clientConfig.network || 'mainnet',\n });\n } else {\n logger.debug('Initializing InscriptionSDK with server auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: clientConfig.accountId,\n privateKey: clientConfig.privateKey,\n network: clientConfig.network || 'mainnet',\n });\n }\n\n const baseRequest = {\n holderId: clientConfig.accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n chunkSize: options.chunkSize,\n };\n\n let request: any;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file':\n request = {\n ...baseRequest,\n file: {\n type: 'path',\n path: input.path,\n },\n };\n break;\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || clientConfig.accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Preparing to inscribe content', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: clientConfig.accountId,\n });\n\n const result = await sdk.inscribeAndExecute(request, clientConfig);\n logger.info('Starting to inscribe.', {\n type: input.type,\n mode: options.mode || 'file',\n transactionId: result.jobId,\n });\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: result.jobId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n result.jobId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback\n );\n\n logger.info('Inscription confirmation received', {\n transactionId: result.jobId,\n });\n\n return {\n confirmed: true,\n result,\n inscription,\n sdk,\n };\n }\n\n return {\n confirmed: false,\n result,\n sdk,\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nexport async function inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n logger.info('Starting inscription process with signer', {\n type: input.type,\n mode: options.mode || 'file',\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n const accountId = signer.getAccountId().toString();\n logger.debug('Using account ID from signer', { accountId });\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: options.network || 'mainnet',\n });\n } else {\n logger.debug('Initializing InscriptionSDK with client auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'client',\n accountId,\n signer: signer,\n network: options.network || 'mainnet',\n });\n }\n\n const baseRequest = {\n holderId: accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n chunkSize: options.chunkSize,\n };\n\n let request: any;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file':\n request = {\n ...baseRequest,\n file: {\n type: 'path',\n path: input.path,\n },\n };\n break;\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Preparing to inscribe content with signer', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: accountId,\n });\n\n const result = await sdk.inscribe(\n {\n ...request,\n holderId: accountId,\n },\n signer\n );\n logger.info('Inscription started', {\n type: input.type,\n mode: options.mode || 'file',\n transactionId: result.jobId,\n });\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: result.jobId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n result.jobId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback\n );\n\n logger.info('Inscription confirmation received', {\n transactionId: result.jobId,\n });\n\n return {\n confirmed: true,\n result,\n inscription,\n sdk,\n };\n }\n\n return {\n confirmed: false,\n result,\n sdk,\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nexport async function retrieveInscription(\n transactionId: string,\n options: InscriptionOptions & { accountId?: string; privateKey?: string }\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options?.logging || {},\n });\n\n const formattedTransactionId = transactionId.includes('@')\n ? `${transactionId.split('@')[0]}-${transactionId\n .split('@')[1]\n .replace(/\\./g, '-')}`\n : transactionId;\n\n logger.info('Retrieving inscription', {\n originalTransactionId: transactionId,\n formattedTransactionId,\n });\n\n try {\n let sdk: InscriptionSDK;\n\n if (options?.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: options.network || 'mainnet',\n });\n } else if (options?.accountId && options?.privateKey) {\n logger.debug('Initializing InscriptionSDK with server auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: options.accountId,\n privateKey: options.privateKey,\n network: options.network || 'mainnet',\n });\n } else {\n const error = new Error(\n 'Either API key or account ID and private key are required for retrieving inscriptions'\n );\n logger.error('Missing authentication credentials', {\n hasApiKey: Boolean(options?.apiKey),\n hasAccountId: Boolean(options?.accountId),\n hasPrivateKey: Boolean(options?.privateKey),\n });\n throw error;\n }\n\n logger.debug('Initialized SDK for inscription retrieval', {\n formattedTransactionId,\n network: options.network || 'mainnet',\n });\n\n const result = await sdk.retrieveInscription(formattedTransactionId);\n logger.info('Successfully retrieved inscription', {\n formattedTransactionId,\n });\n\n return result;\n } catch (error) {\n logger.error('Error retrieving inscription', {\n formattedTransactionId,\n error,\n });\n throw error;\n }\n}\n\nfunction validateHashinalMetadata(metadata: any, logger: any): void {\n const requiredFields = ['name', 'creator', 'description', 'type'];\n const missingFields = requiredFields.filter((field) => !metadata[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(\n `Missing required Hashinal metadata fields: ${missingFields.join(', ')}`\n );\n logger.error('Hashinal metadata validation failed', { missingFields });\n throw error;\n }\n\n logger.debug('Hashinal metadata validation passed', {\n name: metadata.name,\n creator: metadata.creator,\n description: metadata.description,\n type: metadata.type,\n hasAttributes: !!metadata.attributes,\n hasProperties: !!metadata.properties,\n });\n}\n\nexport async function waitForInscriptionConfirmation(\n sdk: InscriptionSDK,\n transactionId: string,\n maxAttempts: number = 30,\n intervalMs: number = 4000,\n progressCallback?: ProgressCallback\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({ module: 'Inscriber' });\n const progressReporter = new ProgressReporter({\n module: 'Inscriber',\n logger,\n callback: progressCallback,\n });\n\n try {\n logger.debug('Waiting for inscription confirmation', {\n transactionId,\n maxAttempts,\n intervalMs,\n });\n\n progressReporter.preparing('Preparing for inscription confirmation', 5, {\n transactionId,\n maxAttempts,\n intervalMs,\n });\n\n try {\n const waitMethod = sdk.waitForInscription.bind(sdk) as (\n txId: string,\n maxAttempts: number,\n intervalMs: number,\n checkCompletion: boolean,\n progressCallback?: Function\n ) => Promise<RetrievedInscriptionResult>;\n\n const wrappedCallback = (data: any) => {\n const stage = data.stage || 'confirming';\n const message = data.message || 'Processing inscription';\n const percent = data.progressPercent || 50;\n\n progressReporter.report({\n stage: stage,\n message: message,\n progressPercent: percent,\n details: {},\n });\n };\n\n return await waitMethod(\n transactionId,\n maxAttempts,\n intervalMs,\n true,\n wrappedCallback\n );\n } catch (e) {\n console.log(e);\n // Fall back to standard method if progress callback fails\n logger.debug('Falling back to standard waitForInscription method', {\n error: e,\n });\n progressReporter.verifying('Verifying inscription status', 50, {\n error: e,\n });\n\n return await sdk.waitForInscription(\n transactionId,\n maxAttempts,\n intervalMs,\n true\n );\n }\n } catch (error) {\n logger.error('Error waiting for inscription confirmation', {\n transactionId,\n maxAttempts,\n intervalMs,\n error,\n });\n\n progressReporter.failed('Inscription confirmation failed', {\n transactionId,\n error,\n });\n\n throw error;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es20.js","sources":["../../src/inscribe/inscriber.ts"],"sourcesContent":["import { InscriptionSDK } from '@kiloscribe/inscription-sdk';\nimport {\n InscriptionOptions,\n InscriptionResult,\n RetrievedInscriptionResult,\n HederaClientConfig,\n} from './types';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { Logger } from '../utils/logger';\nimport { ProgressCallback, ProgressReporter } from '../utils/progress-reporter';\n\nexport type InscriptionInput =\n | { type: 'url'; url: string }\n | { type: 'file'; path: string }\n | {\n type: 'buffer';\n buffer: ArrayBuffer | Buffer;\n fileName: string;\n mimeType?: string;\n };\n\nexport type InscriptionResponse =\n | { confirmed: false; result: InscriptionResult; sdk: InscriptionSDK }\n | {\n confirmed: true;\n result: InscriptionResult;\n inscription: RetrievedInscriptionResult;\n sdk: InscriptionSDK;\n };\n\nexport async function inscribe(\n input: InscriptionInput,\n clientConfig: HederaClientConfig,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK,\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n logger.info('Starting inscription process', {\n type: input.type,\n mode: options.mode || 'file',\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: clientConfig.network || 'mainnet',\n });\n } else {\n logger.debug('Initializing InscriptionSDK with server auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: clientConfig.accountId,\n privateKey: clientConfig.privateKey,\n network: clientConfig.network || 'mainnet',\n });\n }\n\n const baseRequest = {\n holderId: clientConfig.accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n chunkSize: options.chunkSize,\n };\n\n let request: any;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file':\n request = {\n ...baseRequest,\n file: {\n type: 'path',\n path: input.path,\n },\n };\n break;\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || clientConfig.accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Preparing to inscribe content', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: clientConfig.accountId,\n });\n\n const result = await sdk.inscribeAndExecute(request, clientConfig);\n logger.info('Starting to inscribe.', {\n type: input.type,\n mode: options.mode || 'file',\n transactionId: result.jobId,\n });\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: result.jobId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n result.jobId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback,\n );\n\n logger.info('Inscription confirmation received', {\n transactionId: result.jobId,\n });\n\n return {\n confirmed: true,\n result,\n inscription,\n sdk,\n };\n }\n\n return {\n confirmed: false,\n result,\n sdk,\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nexport async function inscribeWithSigner(\n input: InscriptionInput,\n signer: DAppSigner,\n options: InscriptionOptions,\n existingSDK?: InscriptionSDK,\n): Promise<InscriptionResponse> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...options.logging,\n });\n\n logger.info('Starting inscription process with signer', {\n type: input.type,\n mode: options.mode || 'file',\n ...(input.type === 'url' ? { url: input.url } : {}),\n ...(input.type === 'file' ? { path: input.path } : {}),\n ...(input.type === 'buffer'\n ? { fileName: input.fileName, bufferSize: input.buffer.byteLength }\n : {}),\n });\n\n try {\n if (options.mode === 'hashinal' && options.metadata) {\n validateHashinalMetadata(options.metadata, logger);\n }\n\n const accountId = signer.getAccountId().toString();\n logger.debug('Using account ID from signer', { accountId });\n\n let sdk: InscriptionSDK;\n\n if (existingSDK) {\n logger.debug('Using existing InscriptionSDK instance');\n sdk = existingSDK;\n } else if (options.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: options.network || 'mainnet',\n });\n } else {\n logger.debug('Initializing InscriptionSDK with client auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'client',\n accountId,\n signer: signer,\n network: options.network || 'mainnet',\n });\n }\n\n const baseRequest = {\n holderId: accountId,\n metadata: options.metadata || {},\n tags: options.tags || [],\n mode: options.mode || 'file',\n chunkSize: options.chunkSize,\n };\n\n let request: any;\n switch (input.type) {\n case 'url':\n request = {\n ...baseRequest,\n file: {\n type: 'url',\n url: input.url,\n },\n };\n break;\n\n case 'file':\n request = {\n ...baseRequest,\n file: {\n type: 'path',\n path: input.path,\n },\n };\n break;\n\n case 'buffer':\n request = {\n ...baseRequest,\n file: {\n type: 'base64',\n base64: Buffer.from(input.buffer).toString('base64'),\n fileName: input.fileName,\n mimeType: input.mimeType,\n },\n };\n break;\n }\n\n if (options.mode === 'hashinal') {\n request.metadataObject = options.metadata;\n request.creator = options.metadata?.creator || accountId;\n request.description = options.metadata?.description;\n\n if (options.jsonFileURL) {\n request.jsonFileURL = options.jsonFileURL;\n }\n }\n\n logger.debug('Preparing to inscribe content with signer', {\n type: input.type,\n mode: options.mode || 'file',\n holderId: accountId,\n });\n\n const result = await sdk.inscribe(\n {\n ...request,\n holderId: accountId,\n },\n signer,\n );\n logger.info('Inscription started', {\n type: input.type,\n mode: options.mode || 'file',\n transactionId: result.jobId,\n });\n\n if (options.waitForConfirmation) {\n logger.debug('Waiting for inscription confirmation', {\n transactionId: result.jobId,\n maxAttempts: options.waitMaxAttempts,\n intervalMs: options.waitIntervalMs,\n });\n\n const inscription = await waitForInscriptionConfirmation(\n sdk,\n result.jobId,\n options.waitMaxAttempts,\n options.waitIntervalMs,\n options.progressCallback,\n );\n\n logger.info('Inscription confirmation received', {\n transactionId: result.jobId,\n });\n\n return {\n confirmed: true,\n result,\n inscription,\n sdk,\n };\n }\n\n return {\n confirmed: false,\n result,\n sdk,\n };\n } catch (error) {\n logger.error('Error during inscription process', error);\n throw error;\n }\n}\n\nexport async function retrieveInscription(\n transactionId: string,\n options: InscriptionOptions & { accountId?: string; privateKey?: string },\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({\n module: 'Inscriber',\n ...(options?.logging || {}),\n });\n\n const formattedTransactionId = transactionId.includes('@')\n ? `${transactionId.split('@')[0]}-${transactionId\n .split('@')[1]\n .replace(/\\./g, '-')}`\n : transactionId;\n\n logger.info('Retrieving inscription', {\n originalTransactionId: transactionId,\n formattedTransactionId,\n });\n\n try {\n let sdk: InscriptionSDK;\n\n if (options?.apiKey) {\n logger.debug('Initializing InscriptionSDK with API key');\n sdk = new InscriptionSDK({\n apiKey: options.apiKey,\n network: options.network || 'mainnet',\n });\n } else if (options?.accountId && options?.privateKey) {\n logger.debug('Initializing InscriptionSDK with server auth');\n sdk = await InscriptionSDK.createWithAuth({\n type: 'server',\n accountId: options.accountId,\n privateKey: options.privateKey,\n network: options.network || 'mainnet',\n });\n } else {\n const error = new Error(\n 'Either API key or account ID and private key are required for retrieving inscriptions',\n );\n logger.error('Missing authentication credentials', {\n hasApiKey: Boolean(options?.apiKey),\n hasAccountId: Boolean(options?.accountId),\n hasPrivateKey: Boolean(options?.privateKey),\n });\n throw error;\n }\n\n logger.debug('Initialized SDK for inscription retrieval', {\n formattedTransactionId,\n network: options.network || 'mainnet',\n });\n\n const result = await sdk.retrieveInscription(formattedTransactionId);\n logger.info('Successfully retrieved inscription', {\n formattedTransactionId,\n });\n\n return result;\n } catch (error) {\n logger.error('Error retrieving inscription', {\n formattedTransactionId,\n error,\n });\n throw error;\n }\n}\n\nfunction validateHashinalMetadata(metadata: any, logger: any): void {\n const requiredFields = ['name', 'creator', 'description', 'type'];\n const missingFields = requiredFields.filter(field => !metadata[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(\n `Missing required Hashinal metadata fields: ${missingFields.join(', ')}`,\n );\n logger.error('Hashinal metadata validation failed', { missingFields });\n throw error;\n }\n\n logger.debug('Hashinal metadata validation passed', {\n name: metadata.name,\n creator: metadata.creator,\n description: metadata.description,\n type: metadata.type,\n hasAttributes: !!metadata.attributes,\n hasProperties: !!metadata.properties,\n });\n}\n\nexport async function waitForInscriptionConfirmation(\n sdk: InscriptionSDK,\n transactionId: string,\n maxAttempts: number = 30,\n intervalMs: number = 4000,\n progressCallback?: ProgressCallback,\n): Promise<RetrievedInscriptionResult> {\n const logger = Logger.getInstance({ module: 'Inscriber' });\n const progressReporter = new ProgressReporter({\n module: 'Inscriber',\n logger,\n callback: progressCallback,\n });\n\n try {\n logger.debug('Waiting for inscription confirmation', {\n transactionId,\n maxAttempts,\n intervalMs,\n });\n\n progressReporter.preparing('Preparing for inscription confirmation', 5, {\n transactionId,\n maxAttempts,\n intervalMs,\n });\n\n try {\n const waitMethod = sdk.waitForInscription.bind(sdk) as (\n txId: string,\n maxAttempts: number,\n intervalMs: number,\n checkCompletion: boolean,\n progressCallback?: Function,\n ) => Promise<RetrievedInscriptionResult>;\n\n const wrappedCallback = (data: any) => {\n const stage = data.stage || 'confirming';\n const message = data.message || 'Processing inscription';\n const percent = data.progressPercent || 50;\n\n progressReporter.report({\n stage: stage,\n message: message,\n progressPercent: percent,\n details: {},\n });\n };\n\n return await waitMethod(\n transactionId,\n maxAttempts,\n intervalMs,\n true,\n wrappedCallback,\n );\n } catch (e) {\n console.log(e);\n // Fall back to standard method if progress callback fails\n logger.debug('Falling back to standard waitForInscription method', {\n error: e,\n });\n progressReporter.verifying('Verifying inscription status', 50, {\n error: e,\n });\n\n return await sdk.waitForInscription(\n transactionId,\n maxAttempts,\n intervalMs,\n true,\n );\n }\n } catch (error) {\n logger.error('Error waiting for inscription confirmation', {\n transactionId,\n maxAttempts,\n intervalMs,\n error,\n });\n\n progressReporter.failed('Inscription confirmation failed', {\n transactionId,\n error,\n });\n\n throw error;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -217,9 +217,7 @@ class HederaMirrorNode {
|
|
|
217
217
|
const messages = [];
|
|
218
218
|
while (nextEndpoint) {
|
|
219
219
|
try {
|
|
220
|
-
const data = await this._requestWithRetry(
|
|
221
|
-
nextEndpoint
|
|
222
|
-
);
|
|
220
|
+
const data = await this._requestWithRetry(nextEndpoint);
|
|
223
221
|
if (data.messages && data.messages.length > 0) {
|
|
224
222
|
for (const message of data.messages) {
|
|
225
223
|
try {
|
|
@@ -659,9 +657,7 @@ class HederaMirrorNode {
|
|
|
659
657
|
try {
|
|
660
658
|
while (nextUrl && pagesFetched < maxPages) {
|
|
661
659
|
pagesFetched++;
|
|
662
|
-
const data = await this._requestWithRetry(
|
|
663
|
-
nextUrl
|
|
664
|
-
);
|
|
660
|
+
const data = await this._requestWithRetry(nextUrl);
|
|
665
661
|
if (data.messages && data.messages.length > 0) {
|
|
666
662
|
for (const message of data.messages) {
|
|
667
663
|
try {
|
|
@@ -735,9 +731,7 @@ class HederaMirrorNode {
|
|
|
735
731
|
let endpoint = `/api/v1/accounts/${accountId}/tokens?limit=${limit}`;
|
|
736
732
|
try {
|
|
737
733
|
for (let i = 0; i < 10 && endpoint; i++) {
|
|
738
|
-
const response = await this._requestWithRetry(
|
|
739
|
-
endpoint
|
|
740
|
-
);
|
|
734
|
+
const response = await this._requestWithRetry(endpoint);
|
|
741
735
|
if (response && response.tokens) {
|
|
742
736
|
allTokens = allTokens.concat(response.tokens);
|
|
743
737
|
}
|
|
@@ -792,9 +786,7 @@ class HederaMirrorNode {
|
|
|
792
786
|
}
|
|
793
787
|
try {
|
|
794
788
|
for (let i = 0; i < 10 && endpoint; i++) {
|
|
795
|
-
const response = await this._requestWithRetry(
|
|
796
|
-
endpoint
|
|
797
|
-
);
|
|
789
|
+
const response = await this._requestWithRetry(endpoint);
|
|
798
790
|
if (response && response.nfts) {
|
|
799
791
|
const nftsWithUri = response.nfts.map((nft) => {
|
|
800
792
|
let tokenUri = void 0;
|
|
@@ -939,9 +931,7 @@ class HederaMirrorNode {
|
|
|
939
931
|
endpoint += `?${queryString}`;
|
|
940
932
|
}
|
|
941
933
|
try {
|
|
942
|
-
const response = await this._requestWithRetry(
|
|
943
|
-
endpoint
|
|
944
|
-
);
|
|
934
|
+
const response = await this._requestWithRetry(endpoint);
|
|
945
935
|
return response.airdrops || [];
|
|
946
936
|
} catch (error) {
|
|
947
937
|
this.logger.error(
|
|
@@ -982,9 +972,7 @@ class HederaMirrorNode {
|
|
|
982
972
|
endpoint += `?${queryString}`;
|
|
983
973
|
}
|
|
984
974
|
try {
|
|
985
|
-
const response = await this._requestWithRetry(
|
|
986
|
-
endpoint
|
|
987
|
-
);
|
|
975
|
+
const response = await this._requestWithRetry(endpoint);
|
|
988
976
|
return response.airdrops || [];
|
|
989
977
|
} catch (error) {
|
|
990
978
|
this.logger.error(
|
|
@@ -1135,9 +1123,7 @@ class HederaMirrorNode {
|
|
|
1135
1123
|
url += `?${queryString}`;
|
|
1136
1124
|
}
|
|
1137
1125
|
try {
|
|
1138
|
-
const response = await this._requestWithRetry(
|
|
1139
|
-
url
|
|
1140
|
-
);
|
|
1126
|
+
const response = await this._requestWithRetry(url);
|
|
1141
1127
|
return response.results || [];
|
|
1142
1128
|
} catch (error) {
|
|
1143
1129
|
this.logger.error(`Error fetching contract results: ${error.message}`);
|
|
@@ -1207,9 +1193,7 @@ class HederaMirrorNode {
|
|
|
1207
1193
|
url += `?${queryString}`;
|
|
1208
1194
|
}
|
|
1209
1195
|
try {
|
|
1210
|
-
const response = await this._requestWithRetry(
|
|
1211
|
-
url
|
|
1212
|
-
);
|
|
1196
|
+
const response = await this._requestWithRetry(url);
|
|
1213
1197
|
return response.results || [];
|
|
1214
1198
|
} catch (error) {
|
|
1215
1199
|
this.logger.error(
|
|
@@ -1278,9 +1262,7 @@ class HederaMirrorNode {
|
|
|
1278
1262
|
url += `?${queryString}`;
|
|
1279
1263
|
}
|
|
1280
1264
|
try {
|
|
1281
|
-
const response = await this._requestWithRetry(
|
|
1282
|
-
url
|
|
1283
|
-
);
|
|
1265
|
+
const response = await this._requestWithRetry(url);
|
|
1284
1266
|
return response.actions || [];
|
|
1285
1267
|
} catch (error) {
|
|
1286
1268
|
this.logger.error(
|