{"_id":"@dreadkn1ght123/vvp-integration-installer","_rev":"2-71434f796b2245c1545243b81c3cdb63","name":"@dreadkn1ght123/vvp-integration-installer","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@dreadkn1ght123/vvp-integration-installer","version":"1.0.0","_id":"@dreadkn1ght123/vvp-integration-installer@1.0.0","maintainers":[{"name":"dreadkn1ght123","email":"dreadkn1ght123@gmail.com"}],"bin":{"vvp-integrate":"dist/cli.js"},"dist":{"shasum":"ad127966615ee928b860b6b266cade6603f62bce","tarball":"https://registry.npmjs.org/@dreadkn1ght123/vvp-integration-installer/-/vvp-integration-installer-1.0.0.tgz","fileCount":10,"integrity":"sha512-wp29PPq7erpZ+rpJwuYNxGjuTAaoPUKB30Wik6iVXBKYSi+XHlOwTWpy/xzU9cx+dnY9S6jNjy+BigeUX74pww==","signatures":[{"sig":"MEYCIQD6b89GBWCCgzBtqIhHV37ho1nbxWxraI9i88we6VXapgIhAM7Dh6lDgqgiYzQnlN6jXj/rb+AWXD9zHFyHo880G1s+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61024},"main":"./dist/index.js","type":"module","_from":"file:/home/runner/workspace/vvp-iam/release/dreadkn1ght123-vvp-integration-installer-1.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run --root ../.. packages/integration-installer/src/installer.test.ts","build":"tsc -b","typecheck":"tsc -b --pretty false"},"_npmUser":{"name":"dreadkn1ght123","email":"dreadkn1ght123@gmail.com"},"_resolved":"/home/runner/workspace/vvp-iam/release/dreadkn1ght123-vvp-integration-installer-1.0.0.tgz","_integrity":"sha512-wp29PPq7erpZ+rpJwuYNxGjuTAaoPUKB30Wik6iVXBKYSi+XHlOwTWpy/xzU9cx+dnY9S6jNjy+BigeUX74pww==","_npmVersion":"11.6.2","description":"Idempotent VVP integration installer for Express and React/Vite","directories":{},"_nodeVersion":"24.13.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.1.0","supertest":"^7.1.4","@types/node":"^22.15.0","@types/express":"^5.0.3","@types/supertest":"^6.0.3","@dreadkn1ght123/provisioning-client":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vvp-integration-installer_1.0.0_1788174742641_0.3082331904133946","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"_id":"@dreadkn1ght123/vvp-integration-installer@2.0.0","bin":{"vvp-integrate":"dist/cli.js"},"dist":{"shasum":"f8587fcd0f0637c92e46e98f311b85422592d3c6","tarball":"https://registry.npmjs.org/@dreadkn1ght123/vvp-integration-installer/-/vvp-integration-installer-2.0.0.tgz","fileCount":10,"integrity":"sha512-w/681kVkQMw0tjiJZMuGV7CcDd0m5Xh7bWpsl9LNu+mfaiVsPI4HrhuG/023SWpEHUl5YuIYqFSOrMq/5nchGg==","signatures":[{"sig":"MEUCIHcZ7AbE6lliib4j/pQ7CeyA3C137Mp+hav/xMsJwFUsAiEA0G2RvmAsR2crnDKhbWyzLpNj05qg/e0QGc5hh6j9aAg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC4OLB5tG/FIv9vOIcAnxp8NsAhCNbyjnRrVws9pKoJPwIhAOsbmaLypKd7ULn+tVSDqmfomNkSclLNFnYa+ORQGv3W"}],"unpackedSize":89887},"main":"./dist/index.js","name":"@dreadkn1ght123/vvp-integration-installer","type":"module","_from":"file:/home/runner/workspace/vvp-iam/release/dreadkn1ght123-vvp-integration-installer-2.0.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"test":"vitest run --root ../.. packages/integration-installer/src/installer.test.ts","build":"tsc -b","typecheck":"tsc -b --pretty false"},"version":"2.0.0","_npmUser":{"name":"dreadkn1ght123","email":"dreadkn1ght123@gmail.com"},"_resolved":"/home/runner/workspace/vvp-iam/release/dreadkn1ght123-vvp-integration-installer-2.0.0.tgz","_integrity":"sha512-w/681kVkQMw0tjiJZMuGV7CcDd0m5Xh7bWpsl9LNu+mfaiVsPI4HrhuG/023SWpEHUl5YuIYqFSOrMq/5nchGg==","_npmVersion":"11.6.2","description":"Idempotent VVP integration installer for Express and React/Vite","directories":{},"maintainers":[{"name":"dreadkn1ght123","email":"dreadkn1ght123@gmail.com"}],"_nodeVersion":"24.13.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.1.0","supertest":"^7.1.4","@types/node":"^22.15.0","@types/express":"^5.0.3","@types/supertest":"^6.0.3","@dreadkn1ght123/provisioning-client":"^2.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vvp-integration-installer_2.0.0_1790108075437_0.46319563514529105"}}},"time":{"created":"2026-08-31T11:12:22.450Z","modified":"2026-09-22T20:14:35.661Z","1.0.0":"2026-08-31T11:12:22.784Z","2.0.0":"2026-09-22T20:14:35.531Z"},"description":"Idempotent VVP integration installer for Express and React/Vite","maintainers":[{"name":"dreadkn1ght123","email":"dreadkn1ght123@gmail.com"}],"readme":"# VVP consumer integration installer\n\nFor Node.js 20+ Express + React/Vite projects:\n\n```sh\nnpx --yes @dreadkn1ght123/vvp-integration-installer@2.0.0 dry-run --capabilities auth,provisioning\nnpx --yes @dreadkn1ght123/vvp-integration-installer@2.0.0 setup --capabilities auth,provisioning\nnpx --yes @dreadkn1ght123/vvp-integration-installer@2.0.0 doctor\n```\n\nSetup installs the aligned public `@dreadkn1ght123` packages from the\nconsumer's configured npm registry, writes the `iam.vvp/v1` manifest and\nmanaged Express/React integration, and creates an integrity lockfile with\nlifecycle scripts disabled. It safely migrates legacy `@vvp/*` dependency\nentries to their public names. Reruns are idempotent and preserve the union of\ninstalled capabilities; modified managed files cause an explicit conflict\ninstead of being overwritten.\n\nThe installer only reports required secret names. It never reads or prints\nsecret values and never registers IAM applications, machine identities, or\nKeycloak clients.\n\nGenerated agent guidance requires protected APIs to validate exact issuer,\nJWKS signature, lifetime/`exp`, and an `aud` identifying the API before\nenforcing endpoint-required Keycloak client roles/scopes. It prohibits local\nKeycloak-client allowlists and `*_ALLOWED_CLIENT_IDS`; `azp` and OAuth\n`client_id` are audit/observability fields, not authorization inputs.\nLogin identity is the validated `actor.issuer` + `actor.sub` pair; integrations\ndo not require a custom identity scope or actor-ID token claim. Provisioning\nresources expose their separate internal `actorId`.\n\n## Split pnpm workspaces\n\nFor a pnpm monorepo with separate Express and React/Vite artifacts, run the\ninstaller from the workspace root and route generated files explicitly:\n\n```sh\nnpx --yes @dreadkn1ght123/vvp-integration-installer@2.0.0 dry-run \\\n  --capabilities auth,provisioning \\\n  --server-root artifacts/api-server \\\n  --web-root artifacts/mdm-ui\nnpx --yes @dreadkn1ght123/vvp-integration-installer@2.0.0 setup \\\n  --capabilities auth,provisioning \\\n  --server-root artifacts/api-server \\\n  --web-root artifacts/mdm-ui\nnpx --yes @dreadkn1ght123/vvp-integration-installer@2.0.0 doctor \\\n  --server-root artifacts/api-server \\\n  --web-root artifacts/mdm-ui\n```\n\nSplit mode requires `pnpm-workspace.yaml` and `pnpm-lock.yaml` in the workspace\nroot, with both artifact paths recorded as workspace importers in that lockfile.\nThe manifest, its integrity digest, and Agent instructions stay in the workspace\nroot. Express/auth/provisioning dependencies and managed server files go to the\nserver artifact; React dependencies and managed client files go to the web\nartifact. A single workspace-level `pnpm install --ignore-scripts` updates the\nshared lockfile; the installer never creates nested artifact lockfiles.","readmeFilename":"README.md"}