{"version":3,"file":"passkey-native-ceremony.mjs","names":[],"sources":["../../src/internal/passkey-native-ceremony.ts"],"sourcesContent":["import * as M from \"@yielded/auth/Passkey\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { PasskeyCeremonyMapping } from \"./models/passkey-model\";\nimport type { NativeSqlTables } from \"./native-sql-table\";\nimport { passkeyOperationInputs } from \"./passkey-inputs\";\nimport { preparePasskeyNative } from \"./passkey-native\";\nimport { makePasskeyNativeFlow } from \"./passkey-native-flow\";\nimport { invalidPasskeyState } from \"./passkey-native-state\";\nimport { makeSqlCommitExecutor, SqlBatchCommit } from \"./sql-commit\";\nimport type { TableModel } from \"./table-model\";\n\n// Physical SQL expressions are validated by the table compiler.\n// oxlint-disable-next-line no-explicit-any\nexport type NativePasskeyCeremonyMapping = PasskeyCeremonyMapping<TableModel, any>;\n\nexport const makeNativePasskeyCeremonyServices = Effect.fnUntraced(function* (\n  tables: NativeSqlTables,\n  mapping: NativePasskeyCeremonyMapping,\n  batch?: SqlBatchCommit[\"Service\"],\n) {\n  const flow = yield* makePasskeyNativeFlow(tables, mapping);\n  const executor = yield* makeSqlCommitExecutor(() => M.PasskeyUnavailable.make({}));\n\n  const run = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n    batch === undefined\n      ? executor.run(effect, \"statement\")\n      : executor.batch(effect).pipe(Effect.provideService(SqlBatchCommit, batch));\n\n  const passkeyPersistence: M.PasskeyPersistence[\"Service\"] = {\n    issue: () => Effect.fail(M.PasskeyUnavailable.make({})),\n    consume: () => Effect.fail(M.PasskeyUnavailable.make({})),\n    context: (access) =>\n      executor.read(\n        Effect.gen(function* () {\n          const input = M.snapshotPasskeySync(M.PasskeyAccess, access);\n\n          if (!(input.purpose === \"registration\")) return yield* invalidPasskeyState();\n\n          return yield* flow.context(input);\n        }),\n      ),\n    cleanup: (original, prepare) =>\n      run(\n        Effect.gen(function* () {\n          const input = M.snapshotPasskeySync(passkeyOperationInputs.cleanup, original);\n\n          if (!flow.validModule(input.moduleId)) return yield* invalidPasskeyState();\n\n          return yield* preparePasskeyNative(\n            yield* flow.cleanup(input.moduleId, input.limit, batch !== undefined),\n            prepare,\n          );\n        }),\n      ),\n  };\n\n  return {\n    passkeyPersistence,\n    capabilities: {\n      purposes: [\"registration\"] as const,\n      issue: \"registration-authority\" as const,\n      assertionConsumption: false as const,\n    },\n  };\n});\n"],"mappings":";;;;;;;;AAgBA,MAAa,oCAAoC,OAAO,WAAW,WACjE,QACA,SACA,OACA;CACA,MAAM,OAAO,OAAO,sBAAsB,QAAQ,OAAO;CACzD,MAAM,WAAW,OAAO,4BAA4B,EAAE,mBAAmB,KAAK,CAAC,CAAC,CAAC;CAEjF,MAAM,OAAgB,WACpB,UAAU,KAAA,IACN,SAAS,IAAI,QAAQ,WAAW,IAChC,SAAS,MAAM,MAAM,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,KAAK,CAAC;CA8B9E,OAAO;EACL,oBAAA;GA5BA,aAAa,OAAO,KAAK,EAAE,mBAAmB,KAAK,CAAC,CAAC,CAAC;GACtD,eAAe,OAAO,KAAK,EAAE,mBAAmB,KAAK,CAAC,CAAC,CAAC;GACxD,UAAU,WACR,SAAS,KACP,OAAO,IAAI,aAAa;IACtB,MAAM,QAAQ,EAAE,oBAAoB,EAAE,eAAe,MAAM;IAE3D,IAAI,EAAE,MAAM,YAAY,iBAAiB,OAAO,OAAO,oBAAoB;IAE3E,OAAO,OAAO,KAAK,QAAQ,KAAK;GAClC,CAAC,CACH;GACF,UAAU,UAAU,YAClB,IACE,OAAO,IAAI,aAAa;IACtB,MAAM,QAAQ,EAAE,oBAAoB,uBAAuB,SAAS,QAAQ;IAE5E,IAAI,CAAC,KAAK,YAAY,MAAM,QAAQ,GAAG,OAAO,OAAO,oBAAoB;IAEzE,OAAO,OAAO,qBACZ,OAAO,KAAK,QAAQ,MAAM,UAAU,MAAM,OAAO,UAAU,KAAA,CAAS,GACpE,OACF;GACF,CAAC,CACH;EAIe;EACjB,cAAc;GACZ,UAAU,CAAC,cAAc;GACzB,OAAO;GACP,sBAAsB;EACxB;CACF;AACF,CAAC"}