{"_id":"@8ui/iframe-widget-core","_rev":"6-836aee438304efd7cd94c6c33fb43cdd","name":"@8ui/iframe-widget-core","dist-tags":{"latest":"1.0.5"},"versions":{"1.0.0":{"name":"@8ui/iframe-widget-core","version":"1.0.0","keywords":["widget","iframe","postmessage","react","hooks"],"license":"MIT","_id":"@8ui/iframe-widget-core@1.0.0","maintainers":[{"name":"andrew.sokolov","email":"webdeveloper@my.com"}],"homepage":"https://github.com/8ui/iframe-widget-core#readme","bugs":{"url":"https://github.com/8ui/iframe-widget-core/issues"},"dist":{"shasum":"e56ca1f263c8d3857bec30ae1d2c00aba138862b","tarball":"https://registry.npmjs.org/@8ui/iframe-widget-core/-/iframe-widget-core-1.0.0.tgz","fileCount":29,"integrity":"sha512-DFWYmaoU1RUHoKcMBm+pTlwbanRnJcNXpYiRwfU83HbuLpxA3DyaB5yfb1Qc09X49YAJDQXTUyuEoh89Mim2AQ==","signatures":[{"sig":"MEUCIQC6CgsuO6+qr4Wxw7JG4bR4pPLaBUrV30b49F2eNRNTrQIgdIblD8AQ4xyhxilW3HBEIEdFAiySyKZ21zviN8pGKa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42212},"main":"dist/iframe-widget-core.cjs.js","types":"dist/index.d.ts","module":"dist/iframe-widget-core.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/iframe-widget-core.esm.js","require":"./dist/iframe-widget-core.cjs.js"}},"gitHead":"977c2d06df212e6f894b5771e7d61bb83f1a32ee","scripts":{"test":"jest","build":"NODE_ENV=production rollup -c","build:dev":"NODE_ENV=development rollup -c","test:watch":"jest --watch","type-check":"tsc --noEmit","build:debug":"DEBUG=true NODE_ENV=development rollup -c","build:watch":"NODE_ENV=development rollup -c -w","test:coverage":"jest --coverage"},"_npmUser":{"name":"andrew.sokolov","email":"webdeveloper@my.com"},"repository":{"url":"git+https://github.com/8ui/iframe-widget-core.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal widget core for iframe-based services (iframe side)","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.3","rollup":"^4.9.2","ts-jest":"^29.1.0","react-dom":"^19.2.3","typescript":"^5.8.3","@types/jest":"^29.5.0","@types/react":"^18.2.0","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0","rollup-plugin-filesize":"^10.0.0","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^11.1.6","@testing-library/jest-dom":"^6.1.0","rollup-plugin-typescript2":"^0.36.0","@rollup/plugin-node-resolve":"^16.0.1"},"peerDependencies":{"react":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/iframe-widget-core_1.0.0_1769287284970_0.6699814575851681","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@8ui/iframe-widget-core","version":"1.0.1","keywords":["widget","iframe","postmessage","react","hooks"],"license":"MIT","_id":"@8ui/iframe-widget-core@1.0.1","maintainers":[{"name":"andrew.sokolov","email":"webdeveloper@my.com"}],"homepage":"https://github.com/8ui/iframe-widget-core#readme","bugs":{"url":"https://github.com/8ui/iframe-widget-core/issues"},"dist":{"shasum":"aae907f0346832135eb2c343caedcac96ceffeb6","tarball":"https://registry.npmjs.org/@8ui/iframe-widget-core/-/iframe-widget-core-1.0.1.tgz","fileCount":29,"integrity":"sha512-nq2DZOOJ6sFteWPBvvDq7SNRiPxNU8w6ubif9W8G00V13I2RkkmrtiRkI/Pr5zFJSeMF2R9P05bDjY7AKT52yQ==","signatures":[{"sig":"MEUCIGpY4cWzVSJJGFW8czWd38woIwQtnfi62tD1FFWxMOD4AiEA+etk9arx5ER7nhAaJLAk3QgeAJAw7zlX4CVZ3bd7AnQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42212},"main":"dist/iframe-widget-core.cjs.js","types":"dist/index.d.ts","module":"dist/iframe-widget-core.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/iframe-widget-core.esm.js","require":"./dist/iframe-widget-core.cjs.js"}},"gitHead":"1c931b4c0262e19b0a0e4f4649269ad1cb4dd4f3","scripts":{"test":"jest","build":"NODE_ENV=production rollup -c","build:dev":"NODE_ENV=development rollup -c","test:watch":"jest --watch","type-check":"tsc --noEmit","build:debug":"DEBUG=true NODE_ENV=development rollup -c","build:watch":"NODE_ENV=development rollup -c -w","test:coverage":"jest --coverage"},"_npmUser":{"name":"andrew.sokolov","email":"webdeveloper@my.com"},"repository":{"url":"git+https://github.com/8ui/iframe-widget-core.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal widget core for iframe-based services (iframe side)","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.3","rollup":"^4.9.2","ts-jest":"^29.1.0","react-dom":"^19.2.3","typescript":"^5.8.3","@types/jest":"^29.5.0","@types/react":"^18.2.0","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0","rollup-plugin-filesize":"^10.0.0","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^11.1.6","@testing-library/jest-dom":"^6.1.0","rollup-plugin-typescript2":"^0.36.0","@rollup/plugin-node-resolve":"^16.0.1"},"peerDependencies":{"react":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/iframe-widget-core_1.0.1_1769329570134_0.14654092343287362","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@8ui/iframe-widget-core","version":"1.0.2","keywords":["widget","iframe","postmessage","react","hooks"],"license":"MIT","_id":"@8ui/iframe-widget-core@1.0.2","maintainers":[{"name":"andrew.sokolov","email":"webdeveloper@my.com"}],"homepage":"https://github.com/8ui/iframe-widget-core#readme","bugs":{"url":"https://github.com/8ui/iframe-widget-core/issues"},"dist":{"shasum":"20af30b7caca916135b91503792b874d53e24b3d","tarball":"https://registry.npmjs.org/@8ui/iframe-widget-core/-/iframe-widget-core-1.0.2.tgz","fileCount":29,"integrity":"sha512-uPv99o1nL0ZOsryRxeaO07i52bnAIHZ/Wqyt5BbrZ9fg23UoM5LEldzn9nT80flIZ4pexuDdxzrmFGdcmYX7Hg==","signatures":[{"sig":"MEYCIQCec+ZI2XkhuHCNrQHwz80axIY2thaSfP2pX+mJloVFKwIhANSkPBZI1A+u9pml5n2sKVc66CautSVwYUGOL7stwqUM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45205},"main":"dist/iframe-widget-core.cjs.js","types":"dist/index.d.ts","module":"dist/iframe-widget-core.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/iframe-widget-core.esm.js","require":"./dist/iframe-widget-core.cjs.js"}},"gitHead":"2bf08ccf8a7280143899b4c27d3fe0419764c599","scripts":{"test":"jest","build":"NODE_ENV=production rollup -c","build:dev":"NODE_ENV=development rollup -c","test:watch":"jest --watch","type-check":"tsc --noEmit","build:debug":"DEBUG=true NODE_ENV=development rollup -c","build:watch":"NODE_ENV=development rollup -c -w","test:coverage":"jest --coverage"},"_npmUser":{"name":"andrew.sokolov","email":"webdeveloper@my.com"},"repository":{"url":"git+https://github.com/8ui/iframe-widget-core.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal widget core for iframe-based services (iframe side)","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.3","rollup":"^4.9.2","ts-jest":"^29.1.0","react-dom":"^19.2.3","typescript":"^5.8.3","@types/jest":"^29.5.0","@types/react":"^18.2.0","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0","rollup-plugin-filesize":"^10.0.0","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^11.1.6","@testing-library/jest-dom":"^6.1.0","rollup-plugin-typescript2":"^0.36.0","@rollup/plugin-node-resolve":"^16.0.1"},"peerDependencies":{"react":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/iframe-widget-core_1.0.2_1769330393751_0.5992955700138358","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@8ui/iframe-widget-core","version":"1.0.3","keywords":["widget","iframe","postmessage","react","hooks"],"license":"MIT","_id":"@8ui/iframe-widget-core@1.0.3","maintainers":[{"name":"andrew.sokolov","email":"webdeveloper@my.com"}],"homepage":"https://github.com/8ui/iframe-widget-core#readme","bugs":{"url":"https://github.com/8ui/iframe-widget-core/issues"},"dist":{"shasum":"879ae6cac4f8dce0726994517f7bb42ebf613306","tarball":"https://registry.npmjs.org/@8ui/iframe-widget-core/-/iframe-widget-core-1.0.3.tgz","fileCount":29,"integrity":"sha512-6U7QaGy3585508jalQhkRYI8dtE2ucnfedxnmlfiTvv8d0vay7KGOGoLSB6q5n8A/G39iYm+TeKaWvtGpiNQMA==","signatures":[{"sig":"MEUCIQC4/2nPeDMRttgJ1lLHGnSNV+hHtYXyiYGzJUS6OhqTEQIgXOesKY9KZuabpjwFUHLD4+A63mU+RuKKstaTOIGdEW4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45205},"main":"dist/iframe-widget-core.cjs.js","types":"dist/index.d.ts","module":"dist/iframe-widget-core.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/iframe-widget-core.esm.js","require":"./dist/iframe-widget-core.cjs.js"}},"gitHead":"e0bd14420aa6732eafe54ae07fc2242e7d518477","scripts":{"test":"jest","build":"NODE_ENV=production rollup -c","build:dev":"NODE_ENV=development rollup -c","test:watch":"jest --watch","type-check":"tsc --noEmit","build:debug":"DEBUG=true NODE_ENV=development rollup -c","build:watch":"NODE_ENV=development rollup -c -w","test:coverage":"jest --coverage"},"_npmUser":{"name":"andrew.sokolov","email":"webdeveloper@my.com"},"repository":{"url":"git+https://github.com/8ui/iframe-widget-core.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal widget core for iframe-based services (iframe side)","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.3","rollup":"^4.9.2","ts-jest":"^29.1.0","react-dom":"^19.2.3","typescript":"^5.8.3","@types/jest":"^29.5.0","@types/react":"^18.2.0","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0","rollup-plugin-filesize":"^10.0.0","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^11.1.6","@testing-library/jest-dom":"^6.1.0","rollup-plugin-typescript2":"^0.36.0","@rollup/plugin-node-resolve":"^16.0.1"},"peerDependencies":{"react":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/iframe-widget-core_1.0.3_1769785212009_0.9380672421544276","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@8ui/iframe-widget-core","version":"1.0.4","keywords":["widget","iframe","postmessage","react","hooks"],"license":"MIT","_id":"@8ui/iframe-widget-core@1.0.4","maintainers":[{"name":"andrew.sokolov","email":"webdeveloper@my.com"}],"homepage":"https://github.com/8ui/iframe-widget-core#readme","bugs":{"url":"https://github.com/8ui/iframe-widget-core/issues"},"dist":{"shasum":"96233c563348f9866aceea6cefe37fa91882c1ed","tarball":"https://registry.npmjs.org/@8ui/iframe-widget-core/-/iframe-widget-core-1.0.4.tgz","fileCount":31,"integrity":"sha512-PXEKTZuyKpzVb2bhHVvxUIDfr+bkPotrKTLzA20MjSTwqDUJJ5D61udHobjixjAIrv/RaHjLZYFc/6d9mhTp3w==","signatures":[{"sig":"MEUCIQDtoJJ/SUAxH3NTSHrgIl6MmePUP12wXJmEAk96NNmSsgIgajI3JNOIXV4ie9NXNK0zA7ESwMrHq2CCnDuAIE6+h7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64378},"main":"dist/iframe-widget-core.cjs.js","types":"dist/index.d.ts","module":"dist/iframe-widget-core.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/iframe-widget-core.esm.js","require":"./dist/iframe-widget-core.cjs.js"}},"gitHead":"03474666043c174a7adb8346203410240e21c279","scripts":{"test":"jest","build":"NODE_ENV=production rollup -c","build:dev":"NODE_ENV=development rollup -c","test:watch":"jest --watch","type-check":"tsc --noEmit","build:debug":"DEBUG=true NODE_ENV=development rollup -c","build:watch":"NODE_ENV=development rollup -c -w","test:coverage":"jest --coverage"},"_npmUser":{"name":"andrew.sokolov","email":"webdeveloper@my.com"},"repository":{"url":"git+https://github.com/8ui/iframe-widget-core.git","type":"git"},"_npmVersion":"10.8.2","description":"Universal widget core for iframe-based services (iframe side)","directories":{},"sideEffects":false,"_nodeVersion":"20.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.3","rollup":"^4.9.2","ts-jest":"^29.1.0","react-dom":"^19.2.3","typescript":"^5.8.3","@types/jest":"^29.5.0","@types/react":"^18.2.0","@rollup/plugin-terser":"^0.4.4","@testing-library/react":"^16.3.0","jest-environment-jsdom":"^29.7.0","rollup-plugin-filesize":"^10.0.0","@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-typescript":"^11.1.6","@testing-library/jest-dom":"^6.1.0","rollup-plugin-typescript2":"^0.36.0","@rollup/plugin-node-resolve":"^16.0.1"},"peerDependencies":{"react":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/iframe-widget-core_1.0.4_1769787108924_0.20385527717377494","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@8ui/iframe-widget-core","version":"1.0.5","description":"Universal widget core for iframe-based services (iframe side)","keywords":["widget","iframe","postmessage","react","hooks"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/8ui/iframe-widget-core.git"},"bugs":{"url":"https://github.com/8ui/iframe-widget-core/issues"},"homepage":"https://github.com/8ui/iframe-widget-core#readme","main":"dist/iframe-widget-core.cjs.js","module":"dist/iframe-widget-core.esm.js","types":"dist/index.d.ts","sideEffects":false,"exports":{".":{"import":"./dist/iframe-widget-core.esm.js","require":"./dist/iframe-widget-core.cjs.js","types":"./dist/index.d.ts"}},"scripts":{"build":"NODE_ENV=production rollup -c","build:debug":"DEBUG=true NODE_ENV=development rollup -c","build:dev":"NODE_ENV=development rollup -c","build:watch":"NODE_ENV=development rollup -c -w","type-check":"tsc --noEmit","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"peerDependencies":{"react":">=17.0.0"},"devDependencies":{"@rollup/plugin-commonjs":"^28.0.6","@rollup/plugin-node-resolve":"^16.0.1","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^11.1.6","@testing-library/jest-dom":"^6.1.0","@testing-library/react":"^16.3.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","react":"^19.2.3","react-dom":"^19.2.3","rollup":"^4.9.2","rollup-plugin-filesize":"^10.0.0","rollup-plugin-typescript2":"^0.36.0","ts-jest":"^29.1.0","typescript":"^5.8.3"},"_id":"@8ui/iframe-widget-core@1.0.5","gitHead":"3a293c04ddef98caadb14545e5aa96878d16de9a","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-0j8abNw2Ddq22swYrgRd51NyLzilQkaot9+PWcovBkizB27O9KzgmT9cqwBBMqVH4KgVpzTeqr8UlNRKde093Q==","shasum":"d7aecbd4848d0d43809e85349f53c9ee9d7c0a8b","tarball":"https://registry.npmjs.org/@8ui/iframe-widget-core/-/iframe-widget-core-1.0.5.tgz","fileCount":31,"unpackedSize":64378,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFN5WVl3eWXyFJxLLXePsQPQfJ1wdBVKyxY6n8GrrOfMAiEA+bxMxA0KkbAhDNwNpRpahWfQ9GYw22g8ZNqLg7CnrGk="}]},"_npmUser":{"name":"andrew.sokolov","email":"webdeveloper@my.com"},"directories":{},"maintainers":[{"name":"andrew.sokolov","email":"webdeveloper@my.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/iframe-widget-core_1.0.5_1770738411475_0.5184094122048557"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-24T20:41:24.860Z","modified":"2026-02-10T15:46:51.829Z","1.0.0":"2026-01-24T20:41:25.147Z","1.0.1":"2026-01-25T08:26:10.259Z","1.0.2":"2026-01-25T08:39:53.899Z","1.0.3":"2026-01-30T15:00:12.154Z","1.0.4":"2026-01-30T15:31:49.090Z","1.0.5":"2026-02-10T15:46:51.620Z"},"bugs":{"url":"https://github.com/8ui/iframe-widget-core/issues"},"license":"MIT","homepage":"https://github.com/8ui/iframe-widget-core#readme","keywords":["widget","iframe","postmessage","react","hooks"],"repository":{"type":"git","url":"git+https://github.com/8ui/iframe-widget-core.git"},"description":"Universal widget core for iframe-based services (iframe side)","maintainers":[{"name":"andrew.sokolov","email":"webdeveloper@my.com"}],"readme":"# @8ui/iframe-widget-core\n\nUniversal widget core for iframe-based services (iframe side).\n\nThis package provides React hooks and utilities for creating widgets that communicate with parent SDKs via PostMessage.\n\n## Features\n\n- **createWidgetCommunication**: Imperative API for non-React contexts\n- **useWidgetCommunication**: Unified hook for widget communication\n- **useMessageListener**: Hook for listening to parent messages\n- **useParentCommunication**: Hook for sending messages to parent\n- **Utilities**: Message factory, validators, origin checker\n\n## Installation\n\n```bash\nnpm install @8ui/iframe-widget-core\n```\n\n**Note**: This package requires React >= 17.0.0 as a peer dependency.\n\n## Usage\n\n### Imperative API (Non-React contexts)\n\nUse `createWidgetCommunication` when you need to send messages from outside React components (setTimeout, async functions, event listeners, utility modules, etc.).\n\n**Step 1: Create instance at app initialization**\n\n```typescript\n// src/lib/widgetComm.ts\nimport { createWidgetCommunication } from '@8ui/iframe-widget-core';\n\nexport const widgetComm = createWidgetCommunication({\n  widgetType: 'messaging',\n  trustedOrigins: ['https://example.com'],\n  enableLogging: false, // optional\n});\n```\n\n**Step 2: Use anywhere in your code**\n\n```typescript\n// src/utils/auth.ts\nimport { widgetComm } from '@/lib/widgetComm';\n\nasync function refreshToken() {\n  try {\n    const result = await fetch('/api/refresh');\n    widgetComm.sendMessage('TOKEN_REFRESHED', { expiresAt: '...' });\n  } catch (error) {\n    widgetComm.sendError({ code: 'AUTH_FAILED' });\n  }\n}\n\n// Works in setTimeout, setInterval, etc.\nsetTimeout(() => {\n  widgetComm.sendMessage('HEARTBEAT', { timestamp: Date.now() });\n}, 60000);\n```\n\n**Available methods:**\n\n- `sendMessage(type, payload)` - Send any message to parent\n- `sendReady(data?)` - Send APP_READY message\n- `sendCompleted(result)` - Send COMPLETED message\n- `sendError(error)` - Send ERROR message\n- `requestClose(reason?)` - Request parent to close the widget\n- `isInIframe()` - Check if running inside an iframe\n- `isTrustedOrigin(origin)` - Check if origin is trusted\n\n### React Hook API\n\nUse `useWidgetCommunication` inside React components for full communication with automatic message handling.\n\n```typescript\nimport { useWidgetCommunication } from '@8ui/iframe-widget-core';\n\nfunction MyWidget() {\n  const { sendMessage, sendCompleted, isInitialized } = useWidgetCommunication({\n    widgetType: 'my-widget',\n    onThemeChange: (theme) => {\n      // Apply theme\n    },\n    onConfigReceived: (config) => {\n      // Handle config\n    },\n    autoSendReady: true,\n  });\n\n  if (!isInitialized) {\n    return <div>Loading...</div>;\n  }\n\n  const handleComplete = () => {\n    sendCompleted({ result: 'success' });\n  };\n\n  return (\n    <div>\n      <button onClick={handleComplete}>Complete</button>\n    </div>\n  );\n}\n```\n\n## API\n\nSee the TypeScript types for full API documentation.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}