{"version":3,"file":"password-target.mjs","names":[],"sources":["../../src/drizzle/password-target.ts"],"sourcesContent":["import {\n  makeNativePasswordServices,\n  makeNativePasswordRegistrationServices,\n  requireStandalone,\n  type AnyPasswordPersistenceMapping as SharedPasswordMapping,\n  type PasswordRegistrationAuthority,\n} from \"@yielded/auth-persistence/Adapter\";\nimport { PasswordPersistence, PasswordUnavailable } from \"@yielded/auth/Password\";\nimport * as Cause from \"effect/Cause\";\nimport type * as Context from \"effect/Context\";\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  nativeTarget,\n  coordinateNativeTarget,\n  type NativeTargetConfiguration,\n} from \"./native-target\";\nimport type {\n  AnyPasswordPersistenceMapping,\n  AnyPasswordRegistrationMapping,\n} from \"./password-model\";\nimport type { AnyProofPersistenceMapping } from \"./proof-model\";\nimport { nativeProofMapping } from \"./proof-target\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\nconst unavailable = () => PasswordUnavailable.make({});\n\nexport const sqlClientPasswordStandaloneGuard = (marker: Parameters<typeof requireStandalone>[1]) =>\n  requireStandalone(unavailable, marker);\n\nconst mapped = (value: AnyPasswordPersistenceMapping): SharedPasswordMapping => ({\n  ...value,\n  clock: nativeClock(value.clock),\n});\n\nexport const makeTargetPasswordPersistenceServices = Effect.fnUntraced(function* (\n  mapping: AnyPasswordPersistenceMapping,\n  configuration: NativeTargetConfiguration,\n  proofs?: AnyProofPersistenceMapping,\n) {\n  yield* validateDrizzleStorage(mapping).pipe(\n    Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n  );\n  if (proofs !== undefined)\n    yield* validateDrizzleStorage(proofs).pipe(\n      Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n    );\n  if (\n    configuration.mode === \"batch\" &&\n    (mapping.d1?.primary !== true || (proofs !== undefined && proofs.d1?.primary !== true))\n  )\n    return yield* unavailable();\n  const target = yield* nativeTarget(configuration);\n\n  return yield* target.provide(\n    makeNativePasswordServices(\n      target.tables,\n      mapped(mapping),\n      proofs === undefined ? undefined : nativeProofMapping(proofs),\n    ),\n  );\n});\n\nexport const makeTargetPasswordRegistrationServices = Effect.fnUntraced(function* <Registration>(\n  mapping: AnyPasswordRegistrationMapping<Registration>,\n  configuration: NativeTargetConfiguration,\n) {\n  yield* validateDrizzleStorage(mapping).pipe(\n    Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n  );\n  const target = yield* nativeTarget(configuration);\n\n  return yield* target.provide(\n    makeNativePasswordRegistrationServices(target.tables, mapping, target.batch),\n  );\n});\n\nexport const coordinateTargetPasswordPersistence = <Transaction, A, E, R>(\n  database: NativeDatabaseHandle,\n  mapping: AnyPasswordPersistenceMapping,\n  configuration: NativeTargetConfiguration,\n  body: (\n    transaction: Transaction,\n    services: { readonly passwordPersistence: PasswordPersistence[\"Service\"] },\n  ) => Effect.Effect<A, E, R>,\n  proofs?: AnyProofPersistenceMapping,\n) =>\n  coordinateNativeTarget(\n    unavailable,\n    database,\n    configuration,\n    makeTargetPasswordPersistenceServices(mapping, configuration, proofs),\n    body,\n  );\n\nexport const coordinateTargetPasswordRegistration = <Registration, Transaction, A, E, R>(\n  database: NativeDatabaseHandle,\n  mapping: AnyPasswordRegistrationMapping<Registration>,\n  configuration: NativeTargetConfiguration,\n  body: (\n    transaction: Transaction,\n    services: { readonly registrationAuthority: PasswordRegistrationAuthority<Registration> },\n  ) => Effect.Effect<A, E, R>,\n) =>\n  coordinateNativeTarget(\n    unavailable,\n    database,\n    configuration,\n    makeTargetPasswordRegistrationServices(mapping, configuration),\n    body,\n  );\n\nexport const passwordPersistenceLayer = <E, R>(\n  services: Effect.Effect<{ readonly passwordPersistence: PasswordPersistence[\"Service\"] }, E, R>,\n) =>\n  Layer.effect(\n    PasswordPersistence,\n    Effect.map(services, (value) => value.passwordPersistence),\n  );\n\nexport const passwordRegistrationLayer = <Id, Registration, E, R>(\n  target: Context.Key<Id, PasswordRegistrationAuthority<Registration>>,\n  services: Effect.Effect<\n    { readonly registrationAuthority: PasswordRegistrationAuthority<Registration> },\n    E,\n    R\n  >,\n) =>\n  Layer.effect(\n    target,\n    Effect.map(services, (value) => value.registrationAuthority),\n  );\n"],"mappings":";;;;;;;;;;AA4BA,MAAM,oBAAoB,oBAAoB,KAAK,CAAC,CAAC;AAKrD,MAAM,UAAU,WAAiE;CAC/E,GAAG;CACH,OAAO,YAAY,MAAM,KAAK;AAChC;AAEA,MAAa,wCAAwC,OAAO,WAAW,WACrE,SACA,eACA,QACA;CACA,OAAO,uBAAuB,OAAO,CAAC,CAAC,KACrC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;CACA,IAAI,WAAW,KAAA,GACb,OAAO,uBAAuB,MAAM,CAAC,CAAC,KACpC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;CACF,IACE,cAAc,SAAS,YACtB,QAAQ,IAAI,YAAY,QAAS,WAAW,KAAA,KAAa,OAAO,IAAI,YAAY,OAEjF,OAAO,OAAO,YAAY;CAC5B,MAAM,SAAS,OAAO,aAAa,aAAa;CAEhD,OAAO,OAAO,OAAO,QACnB,2BACE,OAAO,QACP,OAAO,OAAO,GACd,WAAW,KAAA,IAAY,KAAA,IAAY,mBAAmB,MAAM,CAC9D,CACF;AACF,CAAC;AAED,MAAa,yCAAyC,OAAO,WAAW,WACtE,SACA,eACA;CACA,OAAO,uBAAuB,OAAO,CAAC,CAAC,KACrC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;CACA,MAAM,SAAS,OAAO,aAAa,aAAa;CAEhD,OAAO,OAAO,OAAO,QACnB,uCAAuC,OAAO,QAAQ,SAAS,OAAO,KAAK,CAC7E;AACF,CAAC;AAED,MAAa,uCACX,UACA,SACA,eACA,MAIA,WAEA,uBACE,aACA,UACA,eACA,sCAAsC,SAAS,eAAe,MAAM,GACpE,IACF;AAEF,MAAa,wCACX,UACA,SACA,eACA,SAKA,uBACE,aACA,UACA,eACA,uCAAuC,SAAS,aAAa,GAC7D,IACF;AAEF,MAAa,4BACX,aAEA,MAAM,OACJ,qBACA,OAAO,IAAI,WAAW,UAAU,MAAM,mBAAmB,CAC3D;AAEF,MAAa,6BACX,QACA,aAMA,MAAM,OACJ,QACA,OAAO,IAAI,WAAW,UAAU,MAAM,qBAAqB,CAC7D"}