{"id":"@lssm-tech/integration.creator-persistence","slug":"integration.creator-persistence","name":"@lssm-tech/integration.creator-persistence","version":"0.2.4","path":"packages/integrations/creator-persistence","manifestPath":"packages/integrations/creator-persistence/package.json","manifestBlobSha":"8a8ad31baf295f72885c1efd1d6004694ee9bd79","layer":"integrations","physicalArea":null,"primaryArea":"content-and-growth","classification":{"privateDeclared":null,"catalogFamily":"integrations","catalogKind":"integration","catalogStatus":"active","adoptionMode":"adoptable","stability":"experimental"},"description":"Reusable transactional creator operations.","descriptionOrigin":"package.json","catalog":{"family":"integrations","kind":"integration","status":"active","adoptionMode":"adoptable","stability":"experimental","platforms":["server"],"runtimes":["bun","node"],"entrypoints":["."],"documentation":[{"title":"@lssm-tech/integration.creator-persistence","url":"https://github.com/lssm-tech/contractspec/tree/main/packages/integrations/creator-persistence","kind":"readme"}],"capabilities":[{"id":"package.lssm.tech.integration.creator.persistence","title":"Transactional creator records and wallet storage","description":"Reusable transactional creator operations.","status":"active","useCases":["Transactional creator records and wallet storage"],"aliases":["creator","campaign","wallet","settlement"],"pythonEquivalents":[],"canonicalImports":[{"from":"@lssm-tech/integration.creator-persistence","symbols":["SqlCreatorStore"]}],"constraints":{"platforms":["server"],"runtimes":["bun","node"],"requires":["TypeScript","Host-owned authority"],"avoidWhen":["Full Hirly application parity or live payment qualification is required without host integration."]},"alternatives":[],"relationships":[],"resolutionPriority":65}]},"canonicalImports":[{"capabilityId":"package.lssm.tech.integration.creator.persistence","from":"@lssm-tech/integration.creator-persistence","symbols":["SqlCreatorStore"]}],"scripts":{"build":"contractspec-bun-build build","build:bundle":"contractspec-bun-build transpile","build:types":"contractspec-bun-build types","lint:check":"node ../../../scripts/biome.cjs check .","test":"bun test","prebuild":"contractspec-bun-build prebuild","typecheck":"tsgo --noEmit","publish:pkg":"bun publish --tolerate-republish --ignore-scripts --verbose"},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.contracts-integrations":"workspace:^","@lssm-tech/lib.creator-operations-spec":"workspace:^"},"devDependencies":{"@lssm-tech/tool.bun":"workspace:*","@lssm-tech/tool.typescript":"workspace:*","@types/bun":"catalog:types","typescript":"catalog:","@electric-sql/pglite":"catalog:data","@lssm-tech/lib.creator-operations-runtime":"workspace:^"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./creator-persistence.integration":"./src/creator-persistence.integration.ts","./ddl":"./src/ddl.ts","./quiz-attempt-store":"./src/quiz-attempt-store.ts","./records":"./src/records.ts","./store":"./src/store.ts","./training-import":"./src/training-import.ts","./training-legacy-import":"./src/training-legacy-import.ts","./training-store":"./src/training-store.ts","./transitions":"./src/transitions.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"},"./creator-persistence.integration":{"types":"./dist/creator-persistence.integration.d.ts","browser":"./dist/browser/creator-persistence.integration.js","bun":"./dist/creator-persistence.integration.js","node":"./dist/node/creator-persistence.integration.js","default":"./dist/creator-persistence.integration.js"},"./ddl":{"types":"./dist/ddl.d.ts","browser":"./dist/browser/ddl.js","bun":"./dist/ddl.js","node":"./dist/node/ddl.js","default":"./dist/ddl.js"},"./quiz-attempt-store":{"types":"./dist/quiz-attempt-store.d.ts","browser":"./dist/browser/quiz-attempt-store.js","bun":"./dist/quiz-attempt-store.js","node":"./dist/node/quiz-attempt-store.js","default":"./dist/quiz-attempt-store.js"},"./records":{"types":"./dist/records.d.ts","browser":"./dist/browser/records.js","bun":"./dist/records.js","node":"./dist/node/records.js","default":"./dist/records.js"},"./store":{"types":"./dist/store.d.ts","browser":"./dist/browser/store.js","bun":"./dist/store.js","node":"./dist/node/store.js","default":"./dist/store.js"},"./training-import":{"types":"./dist/training-import.d.ts","browser":"./dist/browser/training-import.js","bun":"./dist/training-import.js","node":"./dist/node/training-import.js","default":"./dist/training-import.js"},"./training-legacy-import":{"types":"./dist/training-legacy-import.d.ts","browser":"./dist/browser/training-legacy-import.js","bun":"./dist/training-legacy-import.js","node":"./dist/node/training-legacy-import.js","default":"./dist/training-legacy-import.js"},"./training-store":{"types":"./dist/training-store.d.ts","browser":"./dist/browser/training-store.js","bun":"./dist/training-store.js","node":"./dist/node/training-store.js","default":"./dist/training-store.js"},"./transitions":{"types":"./dist/transitions.d.ts","browser":"./dist/browser/transitions.js","bun":"./dist/transitions.js","node":"./dist/node/transitions.js","default":"./dist/transitions.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.creator-persistence","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/integrations/creator-persistence/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./creator-persistence.integration","importPath":"@lssm-tech/integration.creator-persistence/creator-persistence.integration","target":"./src/creator-persistence.integration.ts","targets":[{"conditions":[],"target":"./src/creator-persistence.integration.ts","sourcePath":"packages/integrations/creator-persistence/src/creator-persistence.integration.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/creator-persistence.integration.ts","sourceStatus":"verified source file"}]},{"subpath":"./ddl","importPath":"@lssm-tech/integration.creator-persistence/ddl","target":"./src/ddl.ts","targets":[{"conditions":[],"target":"./src/ddl.ts","sourcePath":"packages/integrations/creator-persistence/src/ddl.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/ddl.ts","sourceStatus":"verified source file"}]},{"subpath":"./quiz-attempt-store","importPath":"@lssm-tech/integration.creator-persistence/quiz-attempt-store","target":"./src/quiz-attempt-store.ts","targets":[{"conditions":[],"target":"./src/quiz-attempt-store.ts","sourcePath":"packages/integrations/creator-persistence/src/quiz-attempt-store.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/quiz-attempt-store.ts","sourceStatus":"verified source file"}]},{"subpath":"./records","importPath":"@lssm-tech/integration.creator-persistence/records","target":"./src/records.ts","targets":[{"conditions":[],"target":"./src/records.ts","sourcePath":"packages/integrations/creator-persistence/src/records.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/records.ts","sourceStatus":"verified source file"}]},{"subpath":"./store","importPath":"@lssm-tech/integration.creator-persistence/store","target":"./src/store.ts","targets":[{"conditions":[],"target":"./src/store.ts","sourcePath":"packages/integrations/creator-persistence/src/store.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/store.ts","sourceStatus":"verified source file"}]},{"subpath":"./training-import","importPath":"@lssm-tech/integration.creator-persistence/training-import","target":"./src/training-import.ts","targets":[{"conditions":[],"target":"./src/training-import.ts","sourcePath":"packages/integrations/creator-persistence/src/training-import.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/training-import.ts","sourceStatus":"verified source file"}]},{"subpath":"./training-legacy-import","importPath":"@lssm-tech/integration.creator-persistence/training-legacy-import","target":"./src/training-legacy-import.ts","targets":[{"conditions":[],"target":"./src/training-legacy-import.ts","sourcePath":"packages/integrations/creator-persistence/src/training-legacy-import.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/training-legacy-import.ts","sourceStatus":"verified source file"}]},{"subpath":"./training-store","importPath":"@lssm-tech/integration.creator-persistence/training-store","target":"./src/training-store.ts","targets":[{"conditions":[],"target":"./src/training-store.ts","sourcePath":"packages/integrations/creator-persistence/src/training-store.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/training-store.ts","sourceStatus":"verified source file"}]},{"subpath":"./transitions","importPath":"@lssm-tech/integration.creator-persistence/transitions","target":"./src/transitions.ts","targets":[{"conditions":[],"target":"./src/transitions.ts","sourcePath":"packages/integrations/creator-persistence/src/transitions.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/src/transitions.ts","sourceStatus":"verified source file"}]}],"entryCount":10,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"@lssm-tech/integration.creator-persistence","url":"https://github.com/lssm-tech/contractspec/tree/main/packages/integrations/creator-persistence","kind":"readme","pinnedUrl":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence","sourceStatus":"verified pinned repository path"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.creator-persistence.txt"},"readme":{"status":"available","body":"# Creator operations persistence\n\n`SqlCreatorStore` implements canonical creator records, immutable agreements,\naccruals and ledger entries using the existing `DatabaseProvider` transaction port.\nThe host owns connection configuration, schema migration and runtime database roles.\n\nCall `migrate()` through the host migration workflow. State is placed in the private\n`creator_operations` schema. Workspace-level row locks serialize financial mutations;\nrecord revision checks and history updates commit together. Compound unique indexes\nprotect accepted terms, observation accruals and ledger sources.\n\nWallet availability subtracts paid debits and all reserved/submitting/unknown payouts.\nMixed currency or scale totals are never combined. The adapter has no provider calls,\nsecrets, public Data API routes or authority defaults. Production payout rails and\nHirly data migration require separate qualification.\n\n\nSqlCreatorTrainingStore implements scope/creator-serialized training state and immutable\nrequest receipts through the library-owned DatabaseProvider. State and receipt commit\ntogether; creator/course identity is preserved and version conflicts fail. Migrate the\ntraining tables before installing CreatorTrainingService. Existing Hirly tables are not\nread or mutated by this adapter.\n\n\nCreatorTrainingSnapshotImporter supports additive migration rehearsals using authorized\nexports. Migrate the training store first. Imported snapshots retain progress, timestamps\nand versions; divergent existing state is rejected. Replaying an identical import does\nnot overwrite later updates. Source record/evidence references remain recorded. Legacy\nrequest-receipt compatibility must be handled separately before a writer cutover.\n\n\n`importCreatorTrainingLegacyReceipt` imports authorized native result-only receipts after\nstate import. It retains source/evidence references, rejects divergence or collision with\nexact-input receipts, and never invents missing original event payloads. The training\nservice requires explicit native compatibility mode to replay these records.\n\n\nTraining reads verify payload course/version against selected columns and validate\ncreator/request/scope bindings on both exact and legacy receipts. Corrupt or mismatched\nrecords fail rather than being replayed as another creator's progress.\n\n\nThe clean marketing consumer check exercises training initialization, quiz updates,\nexact replay and tenant isolation under Bun and Node using packed files and real SQL.\nIts authorization fixture is simulated; production enrollment remains host-owned.\n\n\nSqlCreatorQuizAttemptStore persists private server-scored attempt receipts. Concurrent\nidentical attempts preserve the first scoring timestamp; changed answers, result or key\nevidence under the same scoped attempt ID are rejected. Reads validate scope and result\nconsistency. Authorization and trusted answer-key loading remain service responsibilities.\n","sourcePath":"packages/integrations/creator-persistence/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/creator-persistence/README.md","blobSha":"2a983c80056cd613bf655ad755ccecabdb28a301","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":"content-and-growth","areaTitle":"Content, growth and creator operations","displayName":"integration.creator-persistence","runtimes":["bun","node"],"platforms":["server"],"kind":"integration","scope":"Package manifest","canonicalRoute":"/docs/packages/integration.creator-persistence/","contextUrl":"/docs/packages/integration.creator-persistence.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}