{"_id":"@assistshub/ah-js-endpoints","name":"@assistshub/ah-js-endpoints","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@assistshub/ah-js-endpoints","version":"0.1.0","description":"React SDK for AssistsHub external endpoint forms (GraphQL form config + offer submission)","license":"MIT","author":{"name":"Bielorusov","email":"assistshub@gmail.com","url":"https://assistshub.com"},"repository":{"type":"git","url":"git+https://github.com/bielorusov/ah-js-endpoints.git"},"homepage":"https://github.com/bielorusov/ah-js-endpoints#readme","bugs":{"url":"https://github.com/bielorusov/ah-js-endpoints/issues"},"keywords":["react","graphql","assistshub","forms","endpoints"],"sideEffects":false,"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"publishConfig":{"access":"public"},"scripts":{"build":"tsup","typecheck":"tsc --noEmit","test":"vitest run","test:coverage":"vitest run --coverage","test:watch":"vitest","prepublishOnly":"npm run build"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@testing-library/dom":"^10.4.1","@testing-library/jest-dom":"^6.9.1","@testing-library/react":"^16.3.0","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@vitest/coverage-v8":"^3.2.4","jsdom":"^26.1.0","react":"^19.1.0","react-dom":"^19.1.0","tsup":"^8.5.0","typescript":"^5.8.3","vitest":"^3.2.4"},"gitHead":"14c1b1fa6eed837aa39943f84e891f0380c6a071","_id":"@assistshub/ah-js-endpoints@0.1.0","_nodeVersion":"24.12.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-RHIV2C0M7Vg/dooWBHhKLweSsFy728SqlVbkdPWcoioGgNqtmwWBfhAzkQOoUUkpqr8OMlY8NY7LHTk1gdS14A==","shasum":"bf99e0a06d278e2ed0f81d5c836d43fc39fc4858","tarball":"https://registry.npmjs.org/@assistshub/ah-js-endpoints/-/ah-js-endpoints-0.1.0.tgz","fileCount":9,"unpackedSize":126163,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDF+bfxgcz/aEl+yiFrte6jOcYdHdm3koXOZkwHGVzgfwIgRzV17CsosQSto23BV1mmNE1FvRNKUXfoLdywECOIOJM="}]},"_npmUser":{"name":"assistshub","email":"assistshub@gmail.com"},"directories":{},"maintainers":[{"name":"assistshub","email":"assistshub@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ah-js-endpoints_0.1.0_1784194017897_0.04962775215545889"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-16T09:26:57.680Z","0.1.0":"2026-07-16T09:26:58.019Z","modified":"2026-07-16T09:26:58.343Z"},"maintainers":[{"name":"assistshub","email":"assistshub@gmail.com"}],"description":"React SDK for AssistsHub external endpoint forms (GraphQL form config + offer submission)","homepage":"https://github.com/bielorusov/ah-js-endpoints#readme","keywords":["react","graphql","assistshub","forms","endpoints"],"repository":{"type":"git","url":"git+https://github.com/bielorusov/ah-js-endpoints.git"},"author":{"name":"Bielorusov","email":"assistshub@gmail.com","url":"https://assistshub.com"},"bugs":{"url":"https://github.com/bielorusov/ah-js-endpoints/issues"},"license":"MIT","readme":"# `@assistshub/ah-js-endpoints`\n\nJavaScript/TypeScript SDK for AssistsHub CMS **external endpoint forms**.\n\nIt provides:\n- Fetching `endpointFormConfig` (endpoint domains + custom field definitions)\n- Client-side validation (`validateFieldValues`) matching the CMS rules\n- Submitting `createOffer` (GraphQL) with correctly shaped `fieldValues`\n- Optional React integration via `EndpointsProvider` and hooks\n\n## Install\n\n```bash\nnpm install @assistshub/ah-js-endpoints\n```\n\nPeer deps (React):\n- `react` >= 18\n- `react-dom` >= 18\n\n## Quick start (React)\n\n```tsx\nimport {\n  EndpointsProvider,\n  useEndpointFormConfig,\n  useCreateOffer,\n} from '@assistshub/ah-js-endpoints'\n\nfunction App() {\n  return (\n    <EndpointsProvider\n      config={{\n        clientKey: import.meta.env.VITE_AH_ENDPOINTS_CLIENT_KEY,\n        // '' means \"call the same origin\" (same-origin or Vite proxy).\n        // Otherwise set the CMS host explicitly.\n        baseUrl: '',\n        // Optional for SSR/Node:\n        // origin: 'https://your-frontend.example.com',\n      }}\n    >\n      <OfferForm />\n    </EndpointsProvider>\n  )\n}\n\nfunction OfferForm() {\n  const { formConfig, loading, error } = useEndpointFormConfig()\n  const { createOffer, submitting, submitError } = useCreateOffer()\n\n  if (loading) return <p>Loading…</p>\n  if (error) return <p>Error: {error}</p>\n  if (!formConfig) return null\n\n  // Render inputs based on `formConfig.customFields`\n  // Use each custom field `label` as the key in the object you pass to createOffer.\n  const onSubmit = async (values: Record<string, string | string[]>) => {\n    await createOffer(values)\n  }\n\n  return (\n    <form\n      onSubmit={(e) => {\n        e.preventDefault()\n        void onSubmit({\n          // example\n          name: 'Sample Name',\n          email: 'jane@example.com',\n          offer: '99.99',\n        })\n      }}\n    >\n      {submitError ? <p>{submitError}</p> : null}\n      <button type=\"submit\" disabled={submitting}>\n        Submit\n      </button>\n    </form>\n  )\n}\n```\n\n## Configuration\n\n```ts\nimport { createConfig } from '@assistshub/ah-js-endpoints'\n\nconst config = createConfig({\n  clientKey: 'YOUR_ENDPOINT_CLIENT_KEY',\n  baseUrl: '', // or 'https://cms.assistshub.com'\n  // Required for SSR/Node usage:\n  // origin: 'https://your-frontend.example.com',\n})\n```\n\nYou can pass either the object above or the input subset to `EndpointsProvider`:\n\n```tsx\n<EndpointsProvider config={config} />\n```\n\n### Header expectations\n\nThe CMS external endpoint requires:\n- `X-Client-Key`: your endpoint client key\n- `Origin`: a browser-generated header (or you must provide `origin` for SSR/Node)\n\nNote: in browser environments, the SDK does **not** set `Origin` manually (browsers forbid this). The browser supplies it automatically for CORS requests.\n\n## Equivalent curl\n\n```bash\ncurl -X POST 'https://cms.assistshub.com/api/v1/external/graphql' \\\n  -H 'Content-Type: application/json' \\\n  -H 'X-Client-Key: YOUR_CLIENT_KEY' \\\n  -H 'Origin: https://your-frontend.example.com' \\\n  -d @- <<'EOF'\n{\n  \"query\": \"mutation CreateOffer($input: CreateExternalOfferInput!) { createOffer(input: $input) { id domain createdAt displayFields { name label value } } }\",\n  \"variables\": {\n    \"input\": {\n      \"fieldValues\": [\n        { \"label\": \"name\", \"value\": \"Sample Name\" },\n        { \"label\": \"email\", \"value\": \"jane@example.com\" },\n        { \"label\": \"offer\", \"value\": \"99.99\" }\n      ]\n    }\n  }\n}\nEOF\n```\n\n## License\n\nMIT\n\n","readmeFilename":"README.md","_rev":"1-1302073313ed85d51be37a9e459cec4a"}