{"id":"@lssm-tech/integration.fake-outbox-adapter","slug":"integration.fake-outbox-adapter","name":"@lssm-tech/integration.fake-outbox-adapter","version":"2.0.4","path":"packages/integrations/fake-outbox-adapter","manifestPath":"packages/integrations/fake-outbox-adapter/package.json","manifestBlobSha":"6823707a9b2cc5e510573c1fd92ce25dccecb410","layer":"integrations","physicalArea":null,"primaryArea":"integrations-and-providers","classification":{"privateDeclared":null,"catalogFamily":"integrations","catalogKind":"integration","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Fake/sandbox outbox adapter for builder delivery loop testing.","descriptionOrigin":"package.json","catalog":{"family":"integrations","kind":"integration","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./fake-outbox-adapter"],"documentation":[{"title":"Integration Fake Outbox Adapter documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.fake-outbox-adapter","kind":"readme"}],"examples":[],"replacements":[],"capabilities":[{"id":"package.lssm.tech.integration.fake.outbox.adapter","title":"Integration Fake Outbox Adapter","description":"Fake/sandbox outbox adapter for builder delivery loop testing.","status":"active","useCases":["Adopt fake/sandbox outbox adapter for builder delivery loop testing"],"aliases":["integration","fake","outbox","adapter"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/integration.fake-outbox-adapter","symbols":[]},{"from":"@lssm-tech/integration.fake-outbox-adapter/fake-outbox-adapter","symbols":[]}],"constraints":{"platforms":["server"],"runtimes":["node"],"avoidWhen":["The @lssm-tech/integration.fake-outbox-adapter package constraints do not match the target runtime or platform."],"requires":["TypeScript"]},"alternatives":[],"relationships":[],"resolutionPriority":50}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.integration.fake.outbox.adapter","from":"@lssm-tech/integration.fake-outbox-adapter","symbols":[]},{"capabilityId":"package.lssm.tech.integration.fake.outbox.adapter","from":"@lssm-tech/integration.fake-outbox-adapter/fake-outbox-adapter","symbols":[]}],"scripts":{"publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose","publish:pkg:canary":"bun publish:pkg --tag canary","build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","dev":"contractspec-bun-build dev","clean":"rimraf dist .turbo","lint":"bun run lint:fix","lint:fix":"node ../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../scripts/biome.cjs check --write .","lint:check":"node ../../../scripts/biome.cjs check .","test":"bun test --pass-with-no-tests","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.builder-spec":"workspace:^"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","typescript":"catalog:"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./fake-outbox-adapter":"./src/fake-outbox-adapter.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"},"./fake-outbox-adapter":{"types":"./dist/fake-outbox-adapter.d.ts","browser":"./dist/browser/fake-outbox-adapter.js","bun":"./dist/fake-outbox-adapter.js","node":"./dist/node/fake-outbox-adapter.js","default":"./dist/fake-outbox-adapter.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/integration.fake-outbox-adapter","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/integrations/fake-outbox-adapter/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/fake-outbox-adapter/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./fake-outbox-adapter","importPath":"@lssm-tech/integration.fake-outbox-adapter/fake-outbox-adapter","target":"./src/fake-outbox-adapter.ts","targets":[{"conditions":[],"target":"./src/fake-outbox-adapter.ts","sourcePath":"packages/integrations/fake-outbox-adapter/src/fake-outbox-adapter.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/fake-outbox-adapter/src/fake-outbox-adapter.ts","sourceStatus":"verified source file"}]}],"entryCount":2,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"Integration Fake Outbox Adapter documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fintegration.fake-outbox-adapter","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/fake-outbox-adapter","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/fake-outbox-adapter/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/fake-outbox-adapter/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.fake-outbox-adapter.txt"},"readme":{"status":"available","body":"# @lssm-tech/integration.fake-outbox-adapter\n\nWebsite: https://contractspec.io\n\n**Fake/sandbox outbox adapter for builder delivery loop testing.**\n\n## What It Provides\n\n- Simulated outbox adapter for testing builder delivery loop transitions without real provider SDKs or credentials.\n- Supports `fake` and `sandbox` modes only; rejects production mode.\n- Implements preflight checks, draft preparation, submission, receipt generation, and rollback.\n- Idempotency key tracking and duplicate detection.\n- Configurable latency simulation and failure rates for testing.\n\n## When to Use\n\n- Testing builder-delivery-loop transitions in development/staging.\n- CI/CD integration tests that don't require real provider sends.\n- Local development where real credentials aren't available.\n- **Never use in production** - this adapter is explicitly designed to reject production mode.\n\n## Usage\n\n```typescript\nimport { createFakeOutboxAdapter } from '@lssm-tech/integration.fake-outbox-adapter';\n\nconst adapter = createFakeOutboxAdapter({\n  mode: 'sandbox',\n  simulateLatencyMs: 100,\n  failureRate: 0.1, // 10% simulated failure rate\n});\n\n// Preflight check\nconst preflight = await adapter.preflight({\n  loopId: 'loop-123',\n  idempotencyKey: 'unique-key-123',\n  billingOSRefs: ['billing-ref-1'],\n  companyOSRefs: ['company-ref-1'],\n  operatorApprovalRef: 'approval-123',\n});\n\nif (preflight.canProceed) {\n  // Prepare draft\n  const draft = await adapter.prepareDraft(input, preflight);\n  \n  // Submit\n  const submission = await adapter.submit(draft, {\n    draftId: draft.draftId,\n    loopId: 'loop-123',\n    idempotencyKey: 'unique-key-123',\n    approvalStillValid: true,\n    revisionAtSubmission: 1,\n  });\n  \n  // Get receipt\n  const receipt = await adapter.getReceipt({\n    submissionId: submission.submissionId,\n    idempotencyKey: 'unique-key-123',\n  });\n}\n```\n\n## Architecture\n\n- Pure TypeScript implementation with no external provider dependencies.\n- In-memory storage for drafts, submissions, and receipts.\n- Fails closed on production mode detection.\n- Supports idempotency for safe retry semantics.\n\n## Safety\n\n- **Always rejects production mode** - set `rejectProductionMode: true` (default).\n- Requires idempotency keys for all operations.\n- Requires operator approval references.\n- Duplicate idempotency keys return existing receipts (idempotent).\n\n## Local Commands\n\n- `bun run dev` — contractspec-bun-build dev\n- `bun run build` — contractspec-bun-build build\n- `bun run test` — bun test\n- `bun run lint:check` — biome check .\n","sourcePath":"packages/integrations/fake-outbox-adapter/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/fake-outbox-adapter/README.md","blobSha":"84c5d8c9191a3eccc1dc47f0abb535ed3aca0f4e","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":"integrations-and-providers","areaTitle":"Integrations and provider selection","displayName":"integration.fake-outbox-adapter","runtimes":["node"],"platforms":["server"],"kind":"integration","scope":"Package manifest","canonicalRoute":"/docs/packages/integration.fake-outbox-adapter/","contextUrl":"/docs/packages/integration.fake-outbox-adapter.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}