{"version":3,"file":"proof-target.mjs","names":[],"sources":["../../src/drizzle/proof-target.ts"],"sourcesContent":["import {\n  makeNativeProofServices,\n  requireStandalone,\n  type AnyProofPersistenceMapping as SharedMapping,\n} from \"@yielded/auth-persistence/Adapter\";\nimport { ProofUnavailable, ProofPersistence } from \"@yielded/auth/Proofs\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { nativeClock } from \"./native-clock\";\nimport type { NativeDatabaseHandle } from \"./native-database\";\nimport {\n  coordinateNativeTarget,\n  nativeTarget,\n  type NativeTargetConfiguration,\n} from \"./native-target\";\nimport type { AnyProofPersistenceMapping } from \"./proof-model\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\nconst unavailable = () => ProofUnavailable.make({});\n\nexport const sqlClientProofStandaloneGuard = (marker: Parameters<typeof requireStandalone>[1]) =>\n  requireStandalone(unavailable, marker);\n\nexport const nativeProofMapping = (value: AnyProofPersistenceMapping): SharedMapping => ({\n  ...value,\n  clock: nativeClock(value.clock),\n});\n\nexport const makeTargetProofPersistenceServices = Effect.fnUntraced(function* (\n  source: AnyProofPersistenceMapping,\n  configuration: NativeTargetConfiguration,\n) {\n  yield* validateDrizzleStorage(source).pipe(\n    Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n  );\n  if (configuration.mode === \"batch\" && source.d1?.primary !== true) return yield* unavailable();\n  const target = yield* nativeTarget(configuration);\n\n  return yield* target.provide(makeNativeProofServices(target.tables, nativeProofMapping(source)));\n});\n\nexport const coordinateTargetProofPersistence = <Transaction, A, E, R>(\n  database: NativeDatabaseHandle,\n  source: AnyProofPersistenceMapping,\n  configuration: NativeTargetConfiguration,\n  body: (\n    transaction: Transaction,\n    services: { readonly proofPersistence: ProofPersistence[\"Service\"] },\n  ) => Effect.Effect<A, E, R>,\n) =>\n  coordinateNativeTarget(\n    unavailable,\n    database,\n    configuration,\n    makeTargetProofPersistenceServices(source, configuration),\n    body,\n  );\n\nexport const proofPersistenceLayer = <E, R>(\n  services: Effect.Effect<{ readonly proofPersistence: ProofPersistence[\"Service\"] }, E, R>,\n) =>\n  Layer.effect(\n    ProofPersistence,\n    Effect.map(services, (value) => value.proofPersistence),\n  );\n"],"mappings":";;;;;;;;;AAoBA,MAAM,oBAAoB,iBAAiB,KAAK,CAAC,CAAC;AAKlD,MAAa,sBAAsB,WAAsD;CACvF,GAAG;CACH,OAAO,YAAY,MAAM,KAAK;AAChC;AAEA,MAAa,qCAAqC,OAAO,WAAW,WAClE,QACA,eACA;CACA,OAAO,uBAAuB,MAAM,CAAC,CAAC,KACpC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;CACA,IAAI,cAAc,SAAS,WAAW,OAAO,IAAI,YAAY,MAAM,OAAO,OAAO,YAAY;CAC7F,MAAM,SAAS,OAAO,aAAa,aAAa;CAEhD,OAAO,OAAO,OAAO,QAAQ,wBAAwB,OAAO,QAAQ,mBAAmB,MAAM,CAAC,CAAC;AACjG,CAAC;AAED,MAAa,oCACX,UACA,QACA,eACA,SAKA,uBACE,aACA,UACA,eACA,mCAAmC,QAAQ,aAAa,GACxD,IACF;AAEF,MAAa,yBACX,aAEA,MAAM,OACJ,kBACA,OAAO,IAAI,WAAW,UAAU,MAAM,gBAAgB,CACxD"}