{"id":"@lssm-tech/opa-booking-react","slug":"opa-booking-react","name":"@lssm-tech/opa-booking-react","version":"4.0.5","path":"packages/domains/organization-planning/opa-booking-react","manifestPath":"packages/domains/organization-planning/opa-booking-react/package.json","manifestBlobSha":"e162643d98fa73700c5ecda8427b1ab991132621","layer":"domains","physicalArea":"organization-planning","primaryArea":"company-and-work","classification":{"privateDeclared":null,"catalogFamily":"sharedLibs","catalogKind":"library","catalogStatus":"active","adoptionMode":"adoptable","stability":"stable"},"description":"Hosted and headless React integration for OPA booking links.","descriptionOrigin":"package.json","catalog":{"family":"sharedLibs","kind":"library","status":"active","adoptionMode":"adoptable","stability":"stable","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./availability","./OpaBookingWidget","./protocol","./types","./useOpaBooking"],"documentation":[{"title":"Opa Booking React documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fopa-booking-react","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.opa.booking.react","title":"Opa Booking React","description":"Hosted and headless React integration for OPA booking links.","status":"active","useCases":["Adopt hosted and headless react integration for opa booking links"],"aliases":["opa","booking","react"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/opa-booking-react","symbols":[]},{"from":"@lssm-tech/opa-booking-react/availability","symbols":[]},{"from":"@lssm-tech/opa-booking-react/OpaBookingWidget","symbols":[]},{"from":"@lssm-tech/opa-booking-react/protocol","symbols":[]},{"from":"@lssm-tech/opa-booking-react/types","symbols":[]},{"from":"@lssm-tech/opa-booking-react/useOpaBooking","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/opa-booking-react package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}],"visualTesting":{"status":"deferred","owner":"@contractspec-core","targetWave":"wave-3-react-packages","rationale":"Foundational Storybook adoption establishes shared catalogs and guardrails before this package migrates."}},"canonicalImports":[{"capabilityId":"package.lssm.tech.opa.booking.react","from":"@lssm-tech/opa-booking-react","symbols":[]},{"capabilityId":"package.lssm.tech.opa.booking.react","from":"@lssm-tech/opa-booking-react/availability","symbols":[]},{"capabilityId":"package.lssm.tech.opa.booking.react","from":"@lssm-tech/opa-booking-react/OpaBookingWidget","symbols":[]},{"capabilityId":"package.lssm.tech.opa.booking.react","from":"@lssm-tech/opa-booking-react/protocol","symbols":[]},{"capabilityId":"package.lssm.tech.opa.booking.react","from":"@lssm-tech/opa-booking-react/types","symbols":[]},{"capabilityId":"package.lssm.tech.opa.booking.react","from":"@lssm-tech/opa-booking-react/useOpaBooking","symbols":[]}],"scripts":{"build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit -p tsconfig.json","test":"bun test","lint:check":"node ../../../../scripts/biome.cjs check ."},"scriptStatus":"complete pinned manifest","dependencies":{},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","@types/react":"catalog:types","react":"catalog:"},"peerDependencies":{"react":">=18 <20"},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./availability":"./src/availability.ts","./OpaBookingWidget":"./src/OpaBookingWidget.tsx","./protocol":"./src/protocol.ts","./types":"./src/types.ts","./useOpaBooking":"./src/useOpaBooking.ts"},"publishExports":{".":{"types":"./dist/index.d.ts","browser":"./dist/browser/index.js","bun":"./dist/index.js","node":"./dist/node/index.js","default":"./dist/index.js"},"./availability":{"types":"./dist/availability.d.ts","browser":"./dist/browser/availability.js","bun":"./dist/availability.js","node":"./dist/node/availability.js","default":"./dist/availability.js"},"./OpaBookingWidget":{"types":"./dist/OpaBookingWidget.d.ts","browser":"./dist/browser/OpaBookingWidget.js","bun":"./dist/OpaBookingWidget.js","node":"./dist/node/OpaBookingWidget.js","default":"./dist/OpaBookingWidget.js"},"./protocol":{"types":"./dist/protocol.d.ts","browser":"./dist/browser/protocol.js","bun":"./dist/protocol.js","node":"./dist/node/protocol.js","default":"./dist/protocol.js"},"./types":{"types":"./dist/types.d.ts","browser":"./dist/browser/types.js","bun":"./dist/types.js","node":"./dist/node/types.js","default":"./dist/types.js"},"./useOpaBooking":{"types":"./dist/useOpaBooking.d.ts","browser":"./dist/browser/useOpaBooking.js","bun":"./dist/useOpaBooking.js","node":"./dist/node/useOpaBooking.js","default":"./dist/useOpaBooking.js"}},"types":"./dist/index.d.ts","files":["dist","README.md"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/opa-booking-react","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/domains/organization-planning/opa-booking-react/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./availability","importPath":"@lssm-tech/opa-booking-react/availability","target":"./src/availability.ts","targets":[{"conditions":[],"target":"./src/availability.ts","sourcePath":"packages/domains/organization-planning/opa-booking-react/src/availability.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/src/availability.ts","sourceStatus":"verified source file"}]},{"subpath":"./OpaBookingWidget","importPath":"@lssm-tech/opa-booking-react/OpaBookingWidget","target":"./src/OpaBookingWidget.tsx","targets":[{"conditions":[],"target":"./src/OpaBookingWidget.tsx","sourcePath":"packages/domains/organization-planning/opa-booking-react/src/OpaBookingWidget.tsx","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/src/OpaBookingWidget.tsx","sourceStatus":"verified source file"}]},{"subpath":"./protocol","importPath":"@lssm-tech/opa-booking-react/protocol","target":"./src/protocol.ts","targets":[{"conditions":[],"target":"./src/protocol.ts","sourcePath":"packages/domains/organization-planning/opa-booking-react/src/protocol.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/src/protocol.ts","sourceStatus":"verified source file"}]},{"subpath":"./types","importPath":"@lssm-tech/opa-booking-react/types","target":"./src/types.ts","targets":[{"conditions":[],"target":"./src/types.ts","sourcePath":"packages/domains/organization-planning/opa-booking-react/src/types.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/src/types.ts","sourceStatus":"verified source file"}]},{"subpath":"./useOpaBooking","importPath":"@lssm-tech/opa-booking-react/useOpaBooking","target":"./src/useOpaBooking.ts","targets":[{"conditions":[],"target":"./src/useOpaBooking.ts","sourcePath":"packages/domains/organization-planning/opa-booking-react/src/useOpaBooking.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/src/useOpaBooking.ts","sourceStatus":"verified source file"}]}],"entryCount":6,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Opa Booking React documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fopa-booking-react","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/opa-booking-react.txt"},"readme":{"status":"available","body":"# `@lssm-tech/opa-booking-react`\n\nReact 18/19 integration for CompanyOS OPA booking. The hosted widget validates\nversioned messages against the configured CompanyOS origin; the headless hook\nloads only the public-safe availability projection.\n\n```tsx\nimport { OpaBookingWidget } from \"@lssm-tech/opa-booking-react\";\n\n<OpaBookingWidget token=\"PUBLIC_BOOKING_TOKEN\" locale=\"fr\" />;\n```\n\nFor a custom booking experience, use the headless hook. Its requests carry the\nembedding app's exact origin and expose no private calendar identifiers.\n\n```tsx\nimport { useOpaBooking } from \"@lssm-tech/opa-booking-react\";\n\nfunction AvailabilityButton() {\n  const booking = useOpaBooking({\n    token: \"PUBLIC_BOOKING_TOKEN\",\n    onEvent: (event) => console.info(event.type),\n  });\n\n  return (\n    <button\n      onClick={() =>\n        booking.loadAvailability(\n          new Date(\"2026-08-10T00:00:00Z\"),\n          new Date(\"2026-08-17T00:00:00Z\"),\n          \"Europe/Paris\",\n        )\n      }\n    >\n      {booking.state.status === \"loading\" ? \"Loading…\" : \"Load availability\"}\n    </button>\n  );\n}\n```\n\nThe hook's availability and intent responses stay `unknown` for compatibility;\n`@lssm-tech/opa-booking-react/availability` parses them into typed public\nprojections: `parseOpaBookingAvailability` (availability quote, host display\nname, event type, host timezone and valid slots) and `parseOpaPublicBooking`\n(redacted booking ref and state), plus `isOpaBookingScheduled` and\n`isOpaBookingUnsuccessful` for the v2 booking states. Both parsers return `null`\nwhen required fields are missing.\n\nEmbedding remains disabled until the booking link contains the parent origin in\nits allowlist. Never place private calendar identifiers or credentials in widget\nprops.\n\n## Production canaries\n\nTwo no-index canary hosts on the canonical CompanyOS origin exercise the exact\ncustomer integrations with a public booking token:\n\n- `/embed/production-canary.html?token=PUBLIC_BOOKING_TOKEN` runs the versioned\n  JavaScript loader.\n- `/embed/react/PUBLIC_BOOKING_TOKEN` renders `OpaBookingWidget` from this\n  package.\n\nThe booking link must explicitly allow `https://www.companyos.run`. A canary is\naccepted only after live availability renders; a successful page load alone is\nnot evidence of origin authorization or provider readiness.\n\nThe widget's accessible frame title follows `locale` (`en`, `fr`, or `es`),\nmatching the hosted booking surface; English remains the default.\n","sourcePath":"packages/domains/organization-planning/opa-booking-react/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/domains/organization-planning/opa-booking-react/README.md","blobSha":"55b9dd741ae5ec15b89bb60fab34e8ccc6a1a2f3","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"company-and-work","areaTitle":"Company, work and service operations","displayName":"opa-booking-react","runtimes":["node"],"platforms":["server"],"kind":"library","scope":"Package manifest","canonicalRoute":"/docs/packages/opa-booking-react/","contextUrl":"/docs/packages/opa-booking-react.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}