{"version":3,"file":"session-drivers.mjs","names":[],"sources":["../../src/drizzle/session-drivers.ts"],"sourcesContent":["import {\n  makeNativeAuthenticationAuthorityServices,\n  type NativeAuthenticationAuthorityMapping,\n  makeNativePendingAuthenticationServices,\n  type NativePendingAuthenticationMapping,\n  makeNativeStatefulSessionServices,\n  type NativeStatefulSessionMapping,\n  makeNativeSignedSessionValidityServices,\n  type NativeSignedSessionValidityMapping,\n  makeNativeSessionStepUpServices,\n  type NativeSessionStepUpMapping,\n  makeNativeSessionCleanupServices,\n} from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { reportAuthDiagnostic } from \"@yielded/auth/Persistence\";\nimport {\n  AuthenticationAuthority,\n  SessionUnavailable,\n  type PendingAuthentication,\n  type StatefulSessionPersistence,\n  type SessionRepository,\n  type SignedSessionValidity,\n  type SessionStepUpPersistence,\n} from \"@yielded/auth/Sessions\";\nimport type { Table } from \"drizzle-orm\";\nimport * as Cause from \"effect/Cause\";\nimport type * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { NativeDriverDatabase, NativeDriverTransaction } from \"./driver-types\";\nimport { nativeClock, type MappedClock } from \"./native-clock\";\nimport { NativeDatabase, nativeDatabase } from \"./native-database\";\nimport {\n  nativeTarget,\n  coordinateNativeTarget,\n  type NativeTargetConfiguration,\n} from \"./native-target\";\nimport type {\n  AuthenticationAuthorityMapping,\n  PendingAuthenticationMapping,\n  StatefulSessionMapping,\n  SignedSessionValidityMapping,\n  SessionCleanupMapping,\n} from \"./session-model\";\nimport type { SessionStepUpMapping } from \"./step-up-model\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\nconst unavailable = () => SessionUnavailable.make({});\n\nconst clockMapping = <T extends { readonly clock: MappedClock }>(mapping: T) => ({\n  ...mapping,\n  clock: nativeClock(mapping.clock),\n});\n\n/** Foreign table/ID callback variance is erased only at this physical mapping\n * boundary. All subjects, sessions, pending payloads and policy use their codecs. */\nexport const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(\n  databaseService: Context.Service<DatabaseId, D>,\n  configuration: NativeTargetConfiguration,\n) => {\n  const authenticationAuthority = Effect.fnUntraced(function* <Claims>(\n    mapping: NativeAuthenticationAuthorityMapping<Claims>,\n  ) {\n    yield* validateDrizzleStorage(mapping).pipe(\n      Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n    );\n    if (\n      configuration.mode === \"batch\" &&\n      (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n    )\n      return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n        Effect.andThen(unavailable()),\n      );\n    const target = yield* nativeTarget(configuration);\n\n    return yield* target.provide(makeNativeAuthenticationAuthorityServices(target.tables, mapping));\n  });\n\n  function coordinateAuthenticationAuthority<\n    DB extends D,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    N,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n      readonly transaction?: never;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<\n    A,\n    E | DE | SessionUnavailable,\n    Exclude<R, AuthenticationAuthority> | DR | LifecycleHooks\n  >;\n  function coordinateAuthenticationAuthority<\n    DB extends D,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    N,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n      readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<\n    A,\n    E | DE | SessionUnavailable,\n    Exclude<R, AuthenticationAuthority | TxId> | DR | LifecycleHooks\n  >;\n  function coordinateAuthenticationAuthority<\n    DB extends D,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    N,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n      readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ) {\n    return Effect.flatMap(nativeDatabase(acquire), (database) =>\n      coordinateNativeTarget(\n        unavailable,\n        database,\n        configuration,\n        authenticationAuthority(\n          clockMapping(options.mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n        ),\n        (\n          transaction: NativeDriverTransaction<DB>,\n          services,\n        ): Effect.Effect<A, E, Exclude<R, AuthenticationAuthority>> => {\n          const work = body.pipe(\n            Effect.provideService(AuthenticationAuthority, services.authenticationAuthority),\n          );\n\n          return options.transaction === undefined\n            ? work\n            : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n        },\n      ),\n    );\n  }\n\n  const pendingAuthentication = Effect.fnUntraced(function* <Claims>(\n    mapping: NativePendingAuthenticationMapping<Claims>,\n  ) {\n    yield* validateDrizzleStorage(mapping).pipe(\n      Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n    );\n    if (\n      configuration.mode === \"batch\" &&\n      (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n    )\n      return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n        Effect.andThen(unavailable()),\n      );\n    const target = yield* nativeTarget(configuration);\n\n    return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));\n  });\n\n  function coordinatePendingAuthentication<\n    DB extends D,\n    Id,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    N,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n      readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n      readonly transaction?: never;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n  function coordinatePendingAuthentication<\n    DB extends D,\n    Id,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    N,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n      readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n      readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n  function coordinatePendingAuthentication<\n    DB extends D,\n    Id,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    N,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n      readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n      readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ) {\n    return Effect.flatMap(nativeDatabase(acquire), (database) =>\n      coordinateNativeTarget(\n        unavailable,\n        database,\n        configuration,\n        pendingAuthentication(\n          clockMapping(options.mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n        ),\n        (\n          transaction: NativeDriverTransaction<DB>,\n          services,\n        ): Effect.Effect<A, E, Exclude<R, Id>> => {\n          const work = body.pipe(\n            Effect.provideService(options.target, services.pendingAuthentication),\n          );\n\n          return options.transaction === undefined\n            ? work\n            : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n        },\n      ),\n    );\n  }\n\n  const statefulSessionPersistence = Effect.fnUntraced(function* <Claims>(\n    mapping: NativeStatefulSessionMapping<Claims>,\n  ) {\n    yield* validateDrizzleStorage(mapping).pipe(\n      Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n    );\n    if (\n      configuration.mode === \"batch\" &&\n      (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n    )\n      return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n        Effect.andThen(unavailable()),\n      );\n    const target = yield* nativeTarget(configuration);\n\n    return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));\n  });\n\n  function coordinateStatefulSessions<\n    DB extends D,\n    Id,\n    RepositoryId,\n    Claims,\n    S extends Table,\n    C extends Table,\n    Session extends Table,\n    P extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n      readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n      readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n      readonly transaction?: never;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<\n    A,\n    E | DE | SessionUnavailable,\n    Exclude<R, Id | RepositoryId> | DR | LifecycleHooks\n  >;\n  function coordinateStatefulSessions<\n    DB extends D,\n    Id,\n    RepositoryId,\n    Claims,\n    S extends Table,\n    C extends Table,\n    Session extends Table,\n    P extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n      readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n      readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n      readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<\n    A,\n    E | DE | SessionUnavailable,\n    Exclude<R, Id | RepositoryId | TxId> | DR | LifecycleHooks\n  >;\n  function coordinateStatefulSessions<\n    DB extends D,\n    Id,\n    RepositoryId,\n    Claims,\n    S extends Table,\n    C extends Table,\n    Session extends Table,\n    P extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n      readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n      readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n      readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ) {\n    return Effect.flatMap(nativeDatabase(acquire), (database) =>\n      coordinateNativeTarget(\n        unavailable,\n        database,\n        configuration,\n        statefulSessionPersistence(\n          clockMapping(options.mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n        ),\n        (\n          transaction: NativeDriverTransaction<DB>,\n          services,\n        ): Effect.Effect<A, E, Exclude<Exclude<R, Id>, RepositoryId>> => {\n          const work = body.pipe(\n            Effect.provideService(options.persistence, services.statefulSessionPersistence),\n            Effect.provideService(options.repository, services.sessionRepository),\n          );\n\n          return options.transaction === undefined\n            ? work\n            : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n        },\n      ),\n    );\n  }\n\n  const signedSessionValidity = Effect.fnUntraced(function* (\n    mapping: NativeSignedSessionValidityMapping,\n  ) {\n    yield* validateDrizzleStorage(mapping).pipe(\n      Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n    );\n    if (configuration.mode === \"batch\" && mapping.d1?.primary !== true)\n      return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n        Effect.andThen(unavailable()),\n      );\n    const target = yield* nativeTarget(configuration);\n\n    return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));\n  });\n\n  function coordinateSignedSessionValidity<\n    DB extends D,\n    Id,\n    S extends Table,\n    T extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n      readonly target: SuppliedService<Id, SignedSessionValidity>;\n      readonly transaction?: never;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n  function coordinateSignedSessionValidity<\n    DB extends D,\n    Id,\n    S extends Table,\n    T extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n      readonly target: SuppliedService<Id, SignedSessionValidity>;\n      readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n  function coordinateSignedSessionValidity<\n    DB extends D,\n    Id,\n    S extends Table,\n    T extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n      readonly target: SuppliedService<Id, SignedSessionValidity>;\n      readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ) {\n    return Effect.flatMap(nativeDatabase(acquire), (database) =>\n      coordinateNativeTarget(\n        unavailable,\n        database,\n        configuration,\n        signedSessionValidity(\n          clockMapping(options.mapping) as unknown as NativeSignedSessionValidityMapping,\n        ),\n        (\n          transaction: NativeDriverTransaction<DB>,\n          services,\n        ): Effect.Effect<A, E, Exclude<R, Id>> => {\n          const work = body.pipe(\n            Effect.provideService(options.target, services.signedSessionValidity),\n          );\n\n          return options.transaction === undefined\n            ? work\n            : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n        },\n      ),\n    );\n  }\n\n  const sessionStepUpPersistence = Effect.fnUntraced(function* <Claims>(\n    mapping: NativeSessionStepUpMapping<Claims>,\n  ) {\n    yield* validateDrizzleStorage(mapping).pipe(\n      Effect.catchCause((cause) => Effect.failCause(Cause.map(cause, unavailable))),\n    );\n    if (\n      configuration.mode === \"batch\" &&\n      (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n    )\n      return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n        Effect.andThen(unavailable()),\n      );\n    const target = yield* nativeTarget(configuration);\n\n    return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));\n  });\n\n  function coordinateSessionStepUp<\n    DB extends D,\n    Id,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    Session extends Table,\n    T extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n      readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n      readonly transaction?: never;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n  function coordinateSessionStepUp<\n    DB extends D,\n    Id,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    Session extends Table,\n    T extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n      readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n      readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n  function coordinateSessionStepUp<\n    DB extends D,\n    Id,\n    Claims,\n    S extends Table,\n    C extends Table,\n    P extends Table,\n    Session extends Table,\n    T extends Table,\n    N,\n    NS,\n    A,\n    E,\n    R,\n    DE,\n    DR,\n    TxId,\n    TxShape,\n  >(\n    acquire: Effect.Effect<DB, DE, DR>,\n    options: {\n      readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n      readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n      readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n    },\n    body: Effect.Effect<A, E, R>,\n  ) {\n    return Effect.flatMap(nativeDatabase(acquire), (database) =>\n      coordinateNativeTarget(\n        unavailable,\n        database,\n        configuration,\n        sessionStepUpPersistence(\n          clockMapping(options.mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n        ),\n        (\n          transaction: NativeDriverTransaction<DB>,\n          services,\n        ): Effect.Effect<A, E, Exclude<R, Id>> => {\n          const work = body.pipe(\n            Effect.provideService(options.target, services.sessionStepUpPersistence),\n          );\n\n          return options.transaction === undefined\n            ? work\n            : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n        },\n      ),\n    );\n  }\n\n  return {\n    coordinateAuthenticationAuthority,\n    makeAuthenticationAuthorityServices: <\n      Claims,\n      S extends Table,\n      C extends Table,\n      P extends Table,\n      N,\n    >(\n      mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>,\n    ) =>\n      authenticationAuthority(\n        clockMapping(mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n      ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n    coordinatePendingAuthentication,\n    makePendingAuthenticationServices: <\n      Claims,\n      S extends Table,\n      C extends Table,\n      P extends Table,\n      N,\n    >(\n      mapping: PendingAuthenticationMapping<Claims, S, C, P, N>,\n    ) =>\n      pendingAuthentication(\n        clockMapping(mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n      ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n    coordinateStatefulSessions,\n    makeStatefulSessionServices: <\n      Claims,\n      S extends Table,\n      C extends Table,\n      Session extends Table,\n      P extends Table,\n      N,\n      NS,\n    >(\n      mapping: StatefulSessionMapping<Claims, S, C, Session, P, N, NS>,\n    ) =>\n      statefulSessionPersistence(\n        clockMapping(mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n      ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n    coordinateSignedSessionValidity,\n    makeSignedSessionValidityServices: <S extends Table, T extends Table, N, NS>(\n      mapping: SignedSessionValidityMapping<S, T, N, NS>,\n    ) =>\n      signedSessionValidity(\n        clockMapping(mapping) as unknown as NativeSignedSessionValidityMapping,\n      ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n    coordinateSessionStepUp,\n    makeSessionStepUpServices: <\n      Claims,\n      S extends Table,\n      C extends Table,\n      P extends Table,\n      Session extends Table,\n      T extends Table,\n      N,\n      NS,\n      Id,\n    >(\n      mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>,\n      target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n    ) =>\n      sessionStepUpPersistence(\n        clockMapping(mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n      ).pipe(\n        Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n        Effect.map((services) => ({\n          sessionStepUpPersistence: target.of(services.sessionStepUpPersistence),\n        })),\n      ),\n    makeSessionCleanupServices: Effect.fnUntraced(\n      function* <P extends Table, T extends Table, N, NS>(\n        mapping: SessionCleanupMapping<P, T, N, NS>,\n      ) {\n        const target = yield* nativeTarget(configuration);\n\n        return yield* target.provide(\n          makeNativeSessionCleanupServices(\n            target.tables,\n            clockMapping(mapping) as unknown as Parameters<\n              typeof makeNativeSessionCleanupServices\n            >[1],\n          ),\n        );\n      },\n      Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n    ),\n  };\n};\n"],"mappings":";;;;;;;;;;AAgDA,MAAM,oBAAoB,mBAAmB,KAAK,CAAC,CAAC;AAEpD,MAAM,gBAA2D,aAAgB;CAC/E,GAAG;CACH,OAAO,YAAY,QAAQ,KAAK;AAClC;;;AAIA,MAAa,qBACX,iBACA,kBACG;CACH,MAAM,0BAA0B,OAAO,WAAW,WAChD,SACA;EACA,OAAO,uBAAuB,OAAO,CAAC,CAAC,KACrC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;EACA,IACE,cAAc,SAAS,YACtB,QAAQ,IAAI,YAAY,QAAQ,QAAQ,QAAQ,uBAAuB,KAAA,IAExE,OAAO,OAAO,qBAAqB,0BAA0B,eAAe,CAAC,CAAC,KAC5E,OAAO,QAAQ,YAAY,CAAC,CAC9B;EACF,MAAM,SAAS,OAAO,aAAa,aAAa;EAEhD,OAAO,OAAO,OAAO,QAAQ,0CAA0C,OAAO,QAAQ,OAAO,CAAC;CAChG,CAAC;CAoDD,SAAS,kCAeP,SACA,SAIA,MACA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,uBACE,aACA,UACA,eACA,wBACE,aAAa,QAAQ,OAAO,CAC9B,IAEE,aACA,aAC6D;GAC7D,MAAM,OAAO,KAAK,KAChB,OAAO,eAAe,yBAAyB,SAAS,uBAAuB,CACjF;GAEA,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,MAAM,wBAAwB,OAAO,WAAW,WAC9C,SACA;EACA,OAAO,uBAAuB,OAAO,CAAC,CAAC,KACrC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;EACA,IACE,cAAc,SAAS,YACtB,QAAQ,IAAI,YAAY,QAAQ,QAAQ,QAAQ,uBAAuB,KAAA,IAExE,OAAO,OAAO,qBAAqB,0BAA0B,eAAe,CAAC,CAAC,KAC5E,OAAO,QAAQ,YAAY,CAAC,CAC9B;EACF,MAAM,SAAS,OAAO,aAAa,aAAa;EAEhD,OAAO,OAAO,OAAO,QAAQ,wCAAwC,OAAO,QAAQ,OAAO,CAAC;CAC9F,CAAC;CAgDD,SAAS,gCAgBP,SACA,SAKA,MACA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,uBACE,aACA,UACA,eACA,sBACE,aAAa,QAAQ,OAAO,CAC9B,IAEE,aACA,aACwC;GACxC,MAAM,OAAO,KAAK,KAChB,OAAO,eAAe,QAAQ,QAAQ,SAAS,qBAAqB,CACtE;GAEA,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,MAAM,6BAA6B,OAAO,WAAW,WACnD,SACA;EACA,OAAO,uBAAuB,OAAO,CAAC,CAAC,KACrC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;EACA,IACE,cAAc,SAAS,YACtB,QAAQ,IAAI,YAAY,QAAQ,QAAQ,QAAQ,uBAAuB,KAAA,IAExE,OAAO,OAAO,qBAAqB,0BAA0B,eAAe,CAAC,CAAC,KAC5E,OAAO,QAAQ,YAAY,CAAC,CAC9B;EACF,MAAM,SAAS,OAAO,aAAa,aAAa;EAEhD,OAAO,OAAO,OAAO,QAAQ,kCAAkC,OAAO,QAAQ,OAAO,CAAC;CACxF,CAAC;CAgED,SAAS,2BAmBP,SACA,SAMA,MACA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,uBACE,aACA,UACA,eACA,2BACE,aAAa,QAAQ,OAAO,CAC9B,IAEE,aACA,aAC+D;GAC/D,MAAM,OAAO,KAAK,KAChB,OAAO,eAAe,QAAQ,aAAa,SAAS,0BAA0B,GAC9E,OAAO,eAAe,QAAQ,YAAY,SAAS,iBAAiB,CACtE;GAEA,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,MAAM,wBAAwB,OAAO,WAAW,WAC9C,SACA;EACA,OAAO,uBAAuB,OAAO,CAAC,CAAC,KACrC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;EACA,IAAI,cAAc,SAAS,WAAW,QAAQ,IAAI,YAAY,MAC5D,OAAO,OAAO,qBAAqB,0BAA0B,eAAe,CAAC,CAAC,KAC5E,OAAO,QAAQ,YAAY,CAAC,CAC9B;EACF,MAAM,SAAS,OAAO,aAAa,aAAa;EAEhD,OAAO,OAAO,OAAO,QAAQ,wCAAwC,OAAO,QAAQ,OAAO,CAAC;CAC9F,CAAC;CA8CD,SAAS,gCAeP,SACA,SAKA,MACA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,uBACE,aACA,UACA,eACA,sBACE,aAAa,QAAQ,OAAO,CAC9B,IAEE,aACA,aACwC;GACxC,MAAM,OAAO,KAAK,KAChB,OAAO,eAAe,QAAQ,QAAQ,SAAS,qBAAqB,CACtE;GAEA,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,MAAM,2BAA2B,OAAO,WAAW,WACjD,SACA;EACA,OAAO,uBAAuB,OAAO,CAAC,CAAC,KACrC,OAAO,YAAY,UAAU,OAAO,UAAU,MAAM,IAAI,OAAO,WAAW,CAAC,CAAC,CAC9E;EACA,IACE,cAAc,SAAS,YACtB,QAAQ,IAAI,YAAY,QAAQ,QAAQ,QAAQ,uBAAuB,KAAA,IAExE,OAAO,OAAO,qBAAqB,0BAA0B,eAAe,CAAC,CAAC,KAC5E,OAAO,QAAQ,YAAY,CAAC,CAC9B;EACF,MAAM,SAAS,OAAO,aAAa,aAAa;EAEhD,OAAO,OAAO,OAAO,QAAQ,gCAAgC,OAAO,QAAQ,OAAO,CAAC;CACtF,CAAC;CAsDD,SAAS,wBAmBP,SACA,SAKA,MACA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,uBACE,aACA,UACA,eACA,yBACE,aAAa,QAAQ,OAAO,CAC9B,IAEE,aACA,aACwC;GACxC,MAAM,OAAO,KAAK,KAChB,OAAO,eAAe,QAAQ,QAAQ,SAAS,wBAAwB,CACzE;GAEA,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,OAAO;EACL;EACA,sCAOE,YAEA,wBACE,aAAa,OAAO,CACtB,CAAC,CAAC,KAAK,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAAC;EACrF;EACA,oCAOE,YAEA,sBACE,aAAa,OAAO,CACtB,CAAC,CAAC,KAAK,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAAC;EACrF;EACA,8BASE,YAEA,2BACE,aAAa,OAAO,CACtB,CAAC,CAAC,KAAK,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAAC;EACrF;EACA,oCACE,YAEA,sBACE,aAAa,OAAO,CACtB,CAAC,CAAC,KAAK,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAAC;EACrF;EACA,4BAWE,SACA,WAEA,yBACE,aAAa,OAAO,CACtB,CAAC,CAAC,KACA,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,GAC3E,OAAO,KAAK,cAAc,EACxB,0BAA0B,OAAO,GAAG,SAAS,wBAAwB,EACvE,EAAE,CACJ;EACF,4BAA4B,OAAO,WACjC,WACE,SACA;GACA,MAAM,SAAS,OAAO,aAAa,aAAa;GAEhD,OAAO,OAAO,OAAO,QACnB,iCACE,OAAO,QACP,aAAa,OAAO,CAGtB,CACF;EACF,GACA,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;CACF;AACF"}