ngx-webauthn 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-webauthn.mjs","sources":["../tmp-esm2022/lib/models/register-config.models.js","../tmp-esm2022/lib/presets/webauthn.presets.js","../tmp-esm2022/lib/utils/preset.utils.js","../tmp-esm2022/lib/errors/webauthn.errors.js","../tmp-esm2022/lib/config/webauthn.config.js","../tmp-esm2022/lib/utils/webauthn.utils.js","../tmp-esm2022/lib/services/webauthn.service.js","../tmp-esm2022/lib/providers/webauthn.providers.js","../tmp-esm2022/index.js","../tmp-esm2022/ngx-webauthn.js"],"sourcesContent":["/**\n * High-level configuration interfaces for WebAuthn operations\n *\n * These interfaces provide a convenient, preset-driven API while still allowing\n * full customization through override properties. They derive from standard WebAuthn\n * types where possible to reduce duplication and ensure compatibility.\n */\n/**\n * Type guard to check if input is a RegisterConfig\n */\nexport function isRegisterConfig(input) {\n return typeof input === 'object' && input !== null && 'username' in input;\n}\n/**\n * Type guard to check if input is an AuthenticateConfig\n */\nexport function isAuthenticateConfig(input) {\n return (typeof input === 'object' &&\n input !== null &&\n ('username' in input || 'preset' in input) &&\n !('rp' in input) && // WebAuthn options have 'rp'\n !('user' in input)); // WebAuthn options have 'user'\n}\n/**\n * Type guard to check if input is WebAuthn creation options\n */\nexport function isCreationOptions(input) {\n return (typeof input === 'object' &&\n input !== null &&\n 'rp' in input &&\n 'user' in input);\n}\n/**\n * Type guard to check if input is WebAuthn request options\n */\nexport function isRequestOptions(input) {\n return (typeof input === 'object' &&\n input !== null &&\n !('username' in input) &&\n !('rp' in input) &&\n !('user' in input));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItY29uZmlnLm1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXdlYmF1dGhuL3NyYy9saWIvbW9kZWxzL3JlZ2lzdGVyLWNvbmZpZy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBc0tIOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO0FBQzVFLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsS0FBYztJQUVkLE9BQU8sQ0FDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLEtBQUssS0FBSyxJQUFJO1FBQ2QsQ0FBQyxVQUFVLElBQUksS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUM7UUFDMUMsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSw2QkFBNkI7UUFDakQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FDbkIsQ0FBQyxDQUFDLCtCQUErQjtBQUNwQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLEtBQWM7SUFJZCxPQUFPLENBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixLQUFLLEtBQUssSUFBSTtRQUNkLElBQUksSUFBSSxLQUFLO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDaEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsS0FBYztJQUlkLE9BQU8sQ0FDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLEtBQUssS0FBSyxJQUFJO1FBQ2QsQ0FBQyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFDdEIsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7UUFDaEIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FDbkIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSGlnaC1sZXZlbCBjb25maWd1cmF0aW9uIGludGVyZmFjZXMgZm9yIFdlYkF1dGhuIG9wZXJhdGlvbnNcclxuICpcclxuICogVGhlc2UgaW50ZXJmYWNlcyBwcm92aWRlIGEgY29udmVuaWVudCwgcHJlc2V0LWRyaXZlbiBBUEkgd2hpbGUgc3RpbGwgYWxsb3dpbmdcclxuICogZnVsbCBjdXN0b21pemF0aW9uIHRocm91Z2ggb3ZlcnJpZGUgcHJvcGVydGllcy4gVGhleSBkZXJpdmUgZnJvbSBzdGFuZGFyZCBXZWJBdXRoblxyXG4gKiB0eXBlcyB3aGVyZSBwb3NzaWJsZSB0byByZWR1Y2UgZHVwbGljYXRpb24gYW5kIGVuc3VyZSBjb21wYXRpYmlsaXR5LlxyXG4gKi9cclxuXHJcbmltcG9ydCB0eXBlIHsgUHJlc2V0TmFtZSB9IGZyb20gJy4uL3ByZXNldHMvd2ViYXV0aG4ucHJlc2V0cyc7XHJcblxyXG4vLyBSZS1leHBvcnQgUHJlc2V0TmFtZSBmb3IgY29udmVuaWVuY2VcclxuZXhwb3J0IHR5cGUgeyBQcmVzZXROYW1lIH0gZnJvbSAnLi4vcHJlc2V0cy93ZWJhdXRobi5wcmVzZXRzJztcclxuXHJcbi8qKlxyXG4gKiBSZWx5aW5nIHBhcnR5IGNvbmZpZ3VyYXRpb24gdXNpbmcgc3RhbmRhcmQgV2ViQXV0aG4gdHlwZVxyXG4gKiBObyBkdXBsaWNhdGlvbiBuZWVkZWQgLSB1c2VzIFB1YmxpY0tleUNyZWRlbnRpYWxScEVudGl0eSBkaXJlY3RseVxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRW5oYW5jZWRSZWx5aW5nUGFydHkgPSBQdWJsaWNLZXlDcmVkZW50aWFsUnBFbnRpdHk7XHJcblxyXG4vKipcclxuICogRmxleGlibGUgdXNlciBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIGEgc3RyaW5nIG9yIFVpbnQ4QXJyYXlcclxuICogUHJvdmlkZXMgYmV0dGVyIERYIHdoaWxlIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgd2l0aCBXZWJBdXRobiBzdGFuZGFyZHNcclxuICovXHJcbmV4cG9ydCB0eXBlIEZsZXhpYmxlVXNlcklkID0gc3RyaW5nIHwgVWludDhBcnJheTtcclxuXHJcbi8qKlxyXG4gKiBGbGV4aWJsZSBjaGFsbGVuZ2UgdGhhdCBjYW4gYmUgYSBzdHJpbmcgb3IgVWludDhBcnJheVxyXG4gKiBQcm92aWRlcyBiZXR0ZXIgRFggd2hpbGUgbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSB3aXRoIFdlYkF1dGhuIHN0YW5kYXJkc1xyXG4gKi9cclxuZXhwb3J0IHR5cGUgRmxleGlibGVDaGFsbGVuZ2UgPSBzdHJpbmcgfCBVaW50OEFycmF5O1xyXG5cclxuLyoqXHJcbiAqIEZsZXhpYmxlIGNyZWRlbnRpYWwgZGVzY3JpcHRvcnMgdGhhdCBjYW4gYmUgZWl0aGVyIGZ1bGwgZGVzY3JpcHRvcnMgb3IganVzdCBJRCBzdHJpbmdzXHJcbiAqIFByb3ZpZGVzIGJldHRlciBEWCBmb3IgY29tbW9uIHVzZSBjYXNlcyB3aGlsZSBtYWludGFpbmluZyBmdWxsIGZsZXhpYmlsaXR5XHJcbiAqL1xyXG5leHBvcnQgdHlwZSBGbGV4aWJsZUNyZWRlbnRpYWxEZXNjcmlwdG9ycyA9XHJcbiAgfCBQdWJsaWNLZXlDcmVkZW50aWFsRGVzY3JpcHRvcltdXHJcbiAgfCBzdHJpbmdbXTtcclxuXHJcbi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIGZvciBXZWJBdXRobiBjcmVkZW50aWFsIHJlZ2lzdHJhdGlvblxyXG4gKlxyXG4gKiBUaGlzIGludGVyZmFjZSBleHRlbmRzIHN0YW5kYXJkIFdlYkF1dGhuIHR5cGVzIHdpdGggcHJlc2V0IHN1cHBvcnQgYW5kIGVuaGFuY2VkIFVYLlxyXG4gKiBJdCBkZXJpdmVzIGZyb20gUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB3aGVyZSBwb3NzaWJsZSB0byBhdm9pZCBkdXBsaWNhdGlvbi5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJDb25maWdcclxuICBleHRlbmRzIFBhcnRpYWw8XHJcbiAgICBQaWNrPFxyXG4gICAgICBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLFxyXG4gICAgICB8ICd0aW1lb3V0J1xyXG4gICAgICB8ICdhdHRlc3RhdGlvbidcclxuICAgICAgfCAnYXV0aGVudGljYXRvclNlbGVjdGlvbidcclxuICAgICAgfCAncHViS2V5Q3JlZFBhcmFtcydcclxuICAgICAgfCAnZXh0ZW5zaW9ucydcclxuICAgID5cclxuICA+IHtcclxuICAvKipcclxuICAgKiBVc2VybmFtZSBmb3IgdGhlIGNyZWRlbnRpYWxcclxuICAgKiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHVzZXIubmFtZSBhbmQgdXNlci5pZCBpZiBub3QgZXhwbGljaXRseSBwcm92aWRlZFxyXG4gICAqL1xyXG4gIHVzZXJuYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHByZXNldCB0byB1c2UgYXMgYmFzZSBjb25maWd1cmF0aW9uXHJcbiAgICogLSAncGFzc2tleSc6IE1vZGVybiBwYXNzd29yZGxlc3MsIGNyb3NzLWRldmljZSBjcmVkZW50aWFsc1xyXG4gICAqIC0gJ3NlY29uZEZhY3Rvcic6IFNlY3VyaXR5IGtleSBhcyBzZWNvbmQgZmFjdG9yIGFmdGVyIHBhc3N3b3JkXHJcbiAgICogLSAnZGV2aWNlQm91bmQnOiBIaWdoLXNlY3VyaXR5LCBkZXZpY2UtYm91bmQgY3JlZGVudGlhbHNcclxuICAgKi9cclxuICBwcmVzZXQ/OiBQcmVzZXROYW1lO1xyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IG5hbWUgZm9yIHRoZSB1c2VyIChvcHRpb25hbCBvdmVycmlkZSlcclxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGRlZmF1bHRzIHRvIHRoZSB1c2VybmFtZVxyXG4gICAqL1xyXG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBSZWx5aW5nIFBhcnR5IGNvbmZpZ3VyYXRpb24gKG9wdGlvbmFsIG92ZXJyaWRlKVxyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgd2lsbCBuZWVkIHRvIGJlIHNldCBieSB0aGUgYXBwbGljYXRpb24gb3Igc2VydmljZVxyXG4gICAqIFVzZXMgc3RhbmRhcmQgUHVibGljS2V5Q3JlZGVudGlhbFJwRW50aXR5IHN0cnVjdHVyZVxyXG4gICAqL1xyXG4gIHJwPzogRW5oYW5jZWRSZWx5aW5nUGFydHk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYWxsZW5nZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiAob3B0aW9uYWwgb3ZlcnJpZGUpXHJcbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIHNlY3VyZSByYW5kb20gY2hhbGxlbmdlIHdpbGwgYmUgZ2VuZXJhdGVkXHJcbiAgICogQ2FuIGJlIGVpdGhlciBiYXNlNjR1cmwgc3RyaW5nIG9yIFVpbnQ4QXJyYXkgZm9yIGJldHRlciBEWFxyXG4gICAqL1xyXG4gIGNoYWxsZW5nZT86IEZsZXhpYmxlQ2hhbGxlbmdlO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVkZW50aWFscyB0byBleGNsdWRlIGZyb20gcmVnaXN0cmF0aW9uIChvcHRpb25hbCBvdmVycmlkZSlcclxuICAgKiBDYW4gYmUgYW4gYXJyYXkgb2YgY3JlZGVudGlhbCBJRHMgKGJhc2U2NHVybCBzdHJpbmdzKSBvciBmdWxsIGRlc2NyaXB0b3JzXHJcbiAgICogRW5oYW5jZWQgdG8gYWNjZXB0IHNpbXBsZSBzdHJpbmcgYXJyYXlzIGZvciBiZXR0ZXIgRFhcclxuICAgKi9cclxuICBleGNsdWRlQ3JlZGVudGlhbHM/OiBGbGV4aWJsZUNyZWRlbnRpYWxEZXNjcmlwdG9ycztcclxuXHJcbiAgLyoqXHJcbiAgICogVXNlciBJRCBvdmVycmlkZSAob3B0aW9uYWwpXHJcbiAgICogSWYgbm90IHByb3ZpZGVkLCBhIHVzZXIgSUQgd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbSB0aGUgdXNlcm5hbWVcclxuICAgKiBDYW4gYmUgZWl0aGVyIGJhc2U2NHVybCBzdHJpbmcgb3IgVWludDhBcnJheSBmb3IgYmV0dGVyIERYXHJcbiAgICovXHJcbiAgdXNlcklkPzogRmxleGlibGVVc2VySWQ7XHJcblxyXG4gIC8vIEFsbCBvdGhlciBwcm9wZXJ0aWVzICh0aW1lb3V0LCBhdHRlc3RhdGlvbiwgYXV0aGVudGljYXRvclNlbGVjdGlvbixcclxuICAvLyBwdWJLZXlDcmVkUGFyYW1zLCBleHRlbnNpb25zKSBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIFBhcnRpYWw8UGljazwuLi4+PlxyXG4gIC8vIFRoaXMgZWxpbWluYXRlcyBkdXBsaWNhdGlvbiB3aGlsZSBtYWludGFpbmluZyBmdWxsIHR5cGUgc2FmZXR5XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb25maWd1cmF0aW9uIGZvciBXZWJBdXRobiBhdXRoZW50aWNhdGlvblxyXG4gKlxyXG4gKiBUaGlzIGludGVyZmFjZSBleHRlbmRzIHN0YW5kYXJkIFdlYkF1dGhuIHR5cGVzIHdpdGggcHJlc2V0IHN1cHBvcnQgYW5kIGVuaGFuY2VkIFVYLlxyXG4gKiBJdCBkZXJpdmVzIGZyb20gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHdoZXJlIHBvc3NpYmxlIHRvIGF2b2lkIGR1cGxpY2F0aW9uLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdGVDb25maWdcclxuICBleHRlbmRzIFBhcnRpYWw8XHJcbiAgICBQaWNrPFxyXG4gICAgICBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsXHJcbiAgICAgICd0aW1lb3V0JyB8ICd1c2VyVmVyaWZpY2F0aW9uJyB8ICdleHRlbnNpb25zJ1xyXG4gICAgPlxyXG4gID4ge1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHVzZXJuYW1lIGhpbnQgZm9yIGRpc2NvdmVyYWJsZSBjcmVkZW50aWFsc1xyXG4gICAqIE5vdCByZXF1aXJlZCBmb3IgYXV0aGVudGljYXRpb24sIGJ1dCBjYW4gYmUgdXNlZCBmb3IgdXNlciBleHBlcmllbmNlXHJcbiAgICovXHJcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHByZXNldCB0byB1c2UgYXMgYmFzZSBjb25maWd1cmF0aW9uXHJcbiAgICogQWZmZWN0cyB1c2VyIHZlcmlmaWNhdGlvbiBhbmQgb3RoZXIgYXV0aGVudGljYXRpb24gcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHByZXNldD86IFByZXNldE5hbWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYWxsZW5nZSBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIChvcHRpb25hbCBvdmVycmlkZSlcclxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgc2VjdXJlIHJhbmRvbSBjaGFsbGVuZ2Ugd2lsbCBiZSBnZW5lcmF0ZWRcclxuICAgKiBDYW4gYmUgZWl0aGVyIGJhc2U2NHVybCBzdHJpbmcgb3IgVWludDhBcnJheSBmb3IgYmV0dGVyIERYXHJcbiAgICovXHJcbiAgY2hhbGxlbmdlPzogRmxleGlibGVDaGFsbGVuZ2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNwZWNpZmljIGNyZWRlbnRpYWxzIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiAob3B0aW9uYWwgb3ZlcnJpZGUpXHJcbiAgICogQ2FuIGJlIGFuIGFycmF5IG9mIGNyZWRlbnRpYWwgSURzIChiYXNlNjR1cmwgc3RyaW5ncykgb3IgZnVsbCBkZXNjcmlwdG9yc1xyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgYWxsb3dzIGFueSBjcmVkZW50aWFsIChkaXNjb3ZlcmFibGUgY3JlZGVudGlhbCBmbG93KVxyXG4gICAqIEVuaGFuY2VkIHRvIGFjY2VwdCBzaW1wbGUgc3RyaW5nIGFycmF5cyBmb3IgYmV0dGVyIERYXHJcbiAgICovXHJcbiAgYWxsb3dDcmVkZW50aWFscz86IEZsZXhpYmxlQ3JlZGVudGlhbERlc2NyaXB0b3JzO1xyXG5cclxuICAvLyBBbGwgb3RoZXIgcHJvcGVydGllcyAodGltZW91dCwgdXNlclZlcmlmaWNhdGlvbiwgZXh0ZW5zaW9ucykgYXJlIGluaGVyaXRlZFxyXG4gIC8vIGZyb20gdGhlIFBhcnRpYWw8UGljazwuLi4+PiBUaGlzIGVsaW1pbmF0ZXMgZHVwbGljYXRpb24gd2hpbGUgbWFpbnRhaW5pbmdcclxuICAvLyBmdWxsIHR5cGUgc2FmZXR5IGFuZCBjb21wYXRpYmlsaXR5IHdpdGggc3RhbmRhcmQgV2ViQXV0aG4gdHlwZXNcclxufVxyXG5cclxuLyoqXHJcbiAqIFVuaW9uIHR5cGUgZm9yIGFsbCBwb3NzaWJsZSByZWdpc3RlciBpbnB1dHNcclxuICogU3VwcG9ydHMgYm90aCBoaWdoLWxldmVsIGNvbmZpZyBhbmQgZGlyZWN0IFdlYkF1dGhuIG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCB0eXBlIFJlZ2lzdGVySW5wdXQgPVxyXG4gIHwgUmVnaXN0ZXJDb25maWdcclxuICB8IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNcclxuICB8IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNKU09OO1xyXG5cclxuLyoqXHJcbiAqIFVuaW9uIHR5cGUgZm9yIGFsbCBwb3NzaWJsZSBhdXRoZW50aWNhdGUgaW5wdXRzXHJcbiAqIFN1cHBvcnRzIGJvdGggaGlnaC1sZXZlbCBjb25maWcgYW5kIGRpcmVjdCBXZWJBdXRobiBvcHRpb25zXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBBdXRoZW50aWNhdGVJbnB1dCA9XHJcbiAgfCBBdXRoZW50aWNhdGVDb25maWdcclxuICB8IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc1xyXG4gIHwgUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zSlNPTjtcclxuXHJcbi8qKlxyXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGlucHV0IGlzIGEgUmVnaXN0ZXJDb25maWdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlZ2lzdGVyQ29uZmlnKGlucHV0OiB1bmtub3duKTogaW5wdXQgaXMgUmVnaXN0ZXJDb25maWcge1xyXG4gIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmIGlucHV0ICE9PSBudWxsICYmICd1c2VybmFtZScgaW4gaW5wdXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGlucHV0IGlzIGFuIEF1dGhlbnRpY2F0ZUNvbmZpZ1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXV0aGVudGljYXRlQ29uZmlnKFxyXG4gIGlucHV0OiB1bmtub3duXHJcbik6IGlucHV0IGlzIEF1dGhlbnRpY2F0ZUNvbmZpZyB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcclxuICAgIGlucHV0ICE9PSBudWxsICYmXHJcbiAgICAoJ3VzZXJuYW1lJyBpbiBpbnB1dCB8fCAncHJlc2V0JyBpbiBpbnB1dCkgJiZcclxuICAgICEoJ3JwJyBpbiBpbnB1dCkgJiYgLy8gV2ViQXV0aG4gb3B0aW9ucyBoYXZlICdycCdcclxuICAgICEoJ3VzZXInIGluIGlucHV0KVxyXG4gICk7IC8vIFdlYkF1dGhuIG9wdGlvbnMgaGF2ZSAndXNlcidcclxufVxyXG5cclxuLyoqXHJcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgaW5wdXQgaXMgV2ViQXV0aG4gY3JlYXRpb24gb3B0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3JlYXRpb25PcHRpb25zKFxyXG4gIGlucHV0OiB1bmtub3duXHJcbik6IGlucHV0IGlzXHJcbiAgfCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zXHJcbiAgfCBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zSlNPTiB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiZcclxuICAgIGlucHV0ICE9PSBudWxsICYmXHJcbiAgICAncnAnIGluIGlucHV0ICYmXHJcbiAgICAndXNlcicgaW4gaW5wdXRcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBpbnB1dCBpcyBXZWJBdXRobiByZXF1ZXN0IG9wdGlvbnNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1JlcXVlc3RPcHRpb25zKFxyXG4gIGlucHV0OiB1bmtub3duXHJcbik6IGlucHV0IGlzXHJcbiAgfCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNcclxuICB8IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc0pTT04ge1xyXG4gIHJldHVybiAoXHJcbiAgICB0eXBlb2YgaW5wdXQgPT09ICdvYmplY3QnICYmXHJcbiAgICBpbnB1dCAhPT0gbnVsbCAmJlxyXG4gICAgISgndXNlcm5hbWUnIGluIGlucHV0KSAmJlxyXG4gICAgISgncnAnIGluIGlucHV0KSAmJlxyXG4gICAgISgndXNlcicgaW4gaW5wdXQpXHJcbiAgKTtcclxufVxyXG4iXX0=","/**\n * WebAuthn Preset Configurations\n *\n * This file contains predefined configurations for common WebAuthn use cases.\n * These presets provide sensible defaults while remaining fully customizable.\n */\n/**\n * A shared configuration for common, strong, and widely-supported\n * public key credential algorithms.\n */\nexport const COMMON_PUB_KEY_CRED_PARAMS = {\n pubKeyCredParams: [\n { type: 'public-key', alg: -7 }, // ES256 (ECDSA w/ SHA-256)\n { type: 'public-key', alg: -257 }, // RS256 (RSASSA-PKCS1-v1_5 w/ SHA-256)\n ],\n};\n/**\n * Preset for modern, passwordless, cross-device credentials.\n *\n * Best for: Passkey-based authentication where users can sync credentials\n * across devices and use them for passwordless login.\n *\n * Features:\n * - Requires resident keys (discoverable credentials)\n * - Prefers user verification but doesn't require it\n * - Works with both platform and cross-platform authenticators\n * - Supports credential syncing across devices\n */\nexport const PASSKEY_PRESET = {\n ...COMMON_PUB_KEY_CRED_PARAMS,\n authenticatorSelection: {\n residentKey: 'required',\n userVerification: 'preferred',\n },\n};\n/**\n * Preset for using a security key as a second factor after a password.\n *\n * Best for: Traditional 2FA scenarios where users already have a password\n * and want to add hardware security key as a second factor.\n *\n * Features:\n * - Discourages resident keys (server-side credential storage)\n * - Prefers user verification\n * - Favors cross-platform authenticators (USB/NFC security keys)\n * - Credentials typically not synced between devices\n */\nexport const SECOND_FACTOR_PRESET = {\n ...COMMON_PUB_KEY_CRED_PARAMS,\n authenticatorSelection: {\n residentKey: 'discouraged',\n userVerification: 'preferred',\n authenticatorAttachment: 'cross-platform',\n },\n};\n/**\n * Preset for high-security, non-synced, single-device credentials.\n *\n * Best for: High-security scenarios where credentials must stay on a single\n * device and user verification is mandatory.\n *\n * Features:\n * - Requires platform authenticators (built-in biometrics/PIN)\n * - Requires resident keys for discoverability\n * - Requires user verification (biometric/PIN)\n * - Credentials bound to specific device (no syncing)\n */\nexport const DEVICE_BOUND_PRESET = {\n ...COMMON_PUB_KEY_CRED_PARAMS,\n authenticatorSelection: {\n authenticatorAttachment: 'platform',\n residentKey: 'required',\n userVerification: 'required',\n },\n};\n/**\n * Map of preset names to their configurations\n * Used internally for preset resolution\n */\nexport const PRESET_MAP = {\n passkey: PASSKEY_PRESET,\n secondFactor: SECOND_FACTOR_PRESET,\n deviceBound: DEVICE_BOUND_PRESET,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXV0aG4ucHJlc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXdlYmF1dGhuL3NyYy9saWIvcHJlc2V0cy93ZWJhdXRobi5wcmVzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUc7SUFDeEMsZ0JBQWdCLEVBQUU7UUFDaEIsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLDJCQUEyQjtRQUM1RCxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsdUNBQXVDO0tBQzNFO0NBQ08sQ0FBQztBQUVYOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHO0lBQzVCLEdBQUcsMEJBQTBCO0lBQzdCLHNCQUFzQixFQUFFO1FBQ3RCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLGdCQUFnQixFQUFFLFdBQVc7S0FDOUI7Q0FDTyxDQUFDO0FBRVg7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRztJQUNsQyxHQUFHLDBCQUEwQjtJQUM3QixzQkFBc0IsRUFBRTtRQUN0QixXQUFXLEVBQUUsYUFBYTtRQUMxQixnQkFBZ0IsRUFBRSxXQUFXO1FBQzdCLHVCQUF1QixFQUFFLGdCQUFnQjtLQUMxQztDQUNPLENBQUM7QUFFWDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLEdBQUcsMEJBQTBCO0lBQzdCLHNCQUFzQixFQUFFO1FBQ3RCLHVCQUF1QixFQUFFLFVBQVU7UUFDbkMsV0FBVyxFQUFFLFVBQVU7UUFDdkIsZ0JBQWdCLEVBQUUsVUFBVTtLQUM3QjtDQUNPLENBQUM7QUFFWDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsT0FBTyxFQUFFLGNBQWM7SUFDdkIsWUFBWSxFQUFFLG9CQUFvQjtJQUNsQyxXQUFXLEVBQUUsbUJBQW1CO0NBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogV2ViQXV0aG4gUHJlc2V0IENvbmZpZ3VyYXRpb25zXHJcbiAqXHJcbiAqIFRoaXMgZmlsZSBjb250YWlucyBwcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb25zIGZvciBjb21tb24gV2ViQXV0aG4gdXNlIGNhc2VzLlxyXG4gKiBUaGVzZSBwcmVzZXRzIHByb3ZpZGUgc2Vuc2libGUgZGVmYXVsdHMgd2hpbGUgcmVtYWluaW5nIGZ1bGx5IGN1c3RvbWl6YWJsZS5cclxuICovXHJcblxyXG4vKipcclxuICogQSBzaGFyZWQgY29uZmlndXJhdGlvbiBmb3IgY29tbW9uLCBzdHJvbmcsIGFuZCB3aWRlbHktc3VwcG9ydGVkXHJcbiAqIHB1YmxpYyBrZXkgY3JlZGVudGlhbCBhbGdvcml0aG1zLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IENPTU1PTl9QVUJfS0VZX0NSRURfUEFSQU1TID0ge1xyXG4gIHB1YktleUNyZWRQYXJhbXM6IFtcclxuICAgIHsgdHlwZTogJ3B1YmxpYy1rZXknLCBhbGc6IC03IH0sIC8vIEVTMjU2IChFQ0RTQSB3LyBTSEEtMjU2KVxyXG4gICAgeyB0eXBlOiAncHVibGljLWtleScsIGFsZzogLTI1NyB9LCAvLyBSUzI1NiAoUlNBU1NBLVBLQ1MxLXYxXzUgdy8gU0hBLTI1NilcclxuICBdLFxyXG59IGFzIGNvbnN0O1xyXG5cclxuLyoqXHJcbiAqIFByZXNldCBmb3IgbW9kZXJuLCBwYXNzd29yZGxlc3MsIGNyb3NzLWRldmljZSBjcmVkZW50aWFscy5cclxuICpcclxuICogQmVzdCBmb3I6IFBhc3NrZXktYmFzZWQgYXV0aGVudGljYXRpb24gd2hlcmUgdXNlcnMgY2FuIHN5bmMgY3JlZGVudGlhbHNcclxuICogYWNyb3NzIGRldmljZXMgYW5kIHVzZSB0aGVtIGZvciBwYXNzd29yZGxlc3MgbG9naW4uXHJcbiAqXHJcbiAqIEZlYXR1cmVzOlxyXG4gKiAtIFJlcXVpcmVzIHJlc2lkZW50IGtleXMgKGRpc2NvdmVyYWJsZSBjcmVkZW50aWFscylcclxuICogLSBQcmVmZXJzIHVzZXIgdmVyaWZpY2F0aW9uIGJ1dCBkb2Vzbid0IHJlcXVpcmUgaXRcclxuICogLSBXb3JrcyB3aXRoIGJvdGggcGxhdGZvcm0gYW5kIGNyb3NzLXBsYXRmb3JtIGF1dGhlbnRpY2F0b3JzXHJcbiAqIC0gU3VwcG9ydHMgY3JlZGVudGlhbCBzeW5jaW5nIGFjcm9zcyBkZXZpY2VzXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUEFTU0tFWV9QUkVTRVQgPSB7XHJcbiAgLi4uQ09NTU9OX1BVQl9LRVlfQ1JFRF9QQVJBTVMsXHJcbiAgYXV0aGVudGljYXRvclNlbGVjdGlvbjoge1xyXG4gICAgcmVzaWRlbnRLZXk6ICdyZXF1aXJlZCcsXHJcbiAgICB1c2VyVmVyaWZpY2F0aW9uOiAncHJlZmVycmVkJyxcclxuICB9LFxyXG59IGFzIGNvbnN0O1xyXG5cclxuLyoqXHJcbiAqIFByZXNldCBmb3IgdXNpbmcgYSBzZWN1cml0eSBrZXkgYXMgYSBzZWNvbmQgZmFjdG9yIGFmdGVyIGEgcGFzc3dvcmQuXHJcbiAqXHJcbiAqIEJlc3QgZm9yOiBUcmFkaXRpb25hbCAyRkEgc2NlbmFyaW9zIHdoZXJlIHVzZXJzIGFscmVhZHkgaGF2ZSBhIHBhc3N3b3JkXHJcbiAqIGFuZCB3YW50IHRvIGFkZCBoYXJkd2FyZSBzZWN1cml0eSBrZXkgYXMgYSBzZWNvbmQgZmFjdG9yLlxyXG4gKlxyXG4gKiBGZWF0dXJlczpcclxuICogLSBEaXNjb3VyYWdlcyByZXNpZGVudCBrZXlzIChzZXJ2ZXItc2lkZSBjcmVkZW50aWFsIHN0b3JhZ2UpXHJcbiAqIC0gUHJlZmVycyB1c2VyIHZlcmlmaWNhdGlvblxyXG4gKiAtIEZhdm9ycyBjcm9zcy1wbGF0Zm9ybSBhdXRoZW50aWNhdG9ycyAoVVNCL05GQyBzZWN1cml0eSBrZXlzKVxyXG4gKiAtIENyZWRlbnRpYWxzIHR5cGljYWxseSBub3Qgc3luY2VkIGJldHdlZW4gZGV2aWNlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFNFQ09ORF9GQUNUT1JfUFJFU0VUID0ge1xyXG4gIC4uLkNPTU1PTl9QVUJfS0VZX0NSRURfUEFSQU1TLFxyXG4gIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb246IHtcclxuICAgIHJlc2lkZW50S2V5OiAnZGlzY291cmFnZWQnLFxyXG4gICAgdXNlclZlcmlmaWNhdGlvbjogJ3ByZWZlcnJlZCcsXHJcbiAgICBhdXRoZW50aWNhdG9yQXR0YWNobWVudDogJ2Nyb3NzLXBsYXRmb3JtJyxcclxuICB9LFxyXG59IGFzIGNvbnN0O1xyXG5cclxuLyoqXHJcbiAqIFByZXNldCBmb3IgaGlnaC1zZWN1cml0eSwgbm9uLXN5bmNlZCwgc2luZ2xlLWRldmljZSBjcmVkZW50aWFscy5cclxuICpcclxuICogQmVzdCBmb3I6IEhpZ2gtc2VjdXJpdHkgc2NlbmFyaW9zIHdoZXJlIGNyZWRlbnRpYWxzIG11c3Qgc3RheSBvbiBhIHNpbmdsZVxyXG4gKiBkZXZpY2UgYW5kIHVzZXIgdmVyaWZpY2F0aW9uIGlzIG1hbmRhdG9yeS5cclxuICpcclxuICogRmVhdHVyZXM6XHJcbiAqIC0gUmVxdWlyZXMgcGxhdGZvcm0gYXV0aGVudGljYXRvcnMgKGJ1aWx0LWluIGJpb21ldHJpY3MvUElOKVxyXG4gKiAtIFJlcXVpcmVzIHJlc2lkZW50IGtleXMgZm9yIGRpc2NvdmVyYWJpbGl0eVxyXG4gKiAtIFJlcXVpcmVzIHVzZXIgdmVyaWZpY2F0aW9uIChiaW9tZXRyaWMvUElOKVxyXG4gKiAtIENyZWRlbnRpYWxzIGJvdW5kIHRvIHNwZWNpZmljIGRldmljZSAobm8gc3luY2luZylcclxuICovXHJcbmV4cG9ydCBjb25zdCBERVZJQ0VfQk9VTkRfUFJFU0VUID0ge1xyXG4gIC4uLkNPTU1PTl9QVUJfS0VZX0NSRURfUEFSQU1TLFxyXG4gIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb246IHtcclxuICAgIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50OiAncGxhdGZvcm0nLFxyXG4gICAgcmVzaWRlbnRLZXk6ICdyZXF1aXJlZCcsXHJcbiAgICB1c2VyVmVyaWZpY2F0aW9uOiAncmVxdWlyZWQnLFxyXG4gIH0sXHJcbn0gYXMgY29uc3Q7XHJcblxyXG4vKipcclxuICogTWFwIG9mIHByZXNldCBuYW1lcyB0byB0aGVpciBjb25maWd1cmF0aW9uc1xyXG4gKiBVc2VkIGludGVybmFsbHkgZm9yIHByZXNldCByZXNvbHV0aW9uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgUFJFU0VUX01BUCA9IHtcclxuICBwYXNza2V5OiBQQVNTS0VZX1BSRVNFVCxcclxuICBzZWNvbmRGYWN0b3I6IFNFQ09ORF9GQUNUT1JfUFJFU0VULFxyXG4gIGRldmljZUJvdW5kOiBERVZJQ0VfQk9VTkRfUFJFU0VULFxyXG59IGFzIGNvbnN0O1xyXG5cclxuLyoqXHJcbiAqIEF2YWlsYWJsZSBwcmVzZXQgbmFtZXMgYXMgYSB1bmlvbiB0eXBlXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBQcmVzZXROYW1lID0ga2V5b2YgdHlwZW9mIFBSRVNFVF9NQVA7XHJcbiJdfQ==","/**\n * Utility functions for resolving and merging WebAuthn presets\n *\n * These utilities handle the logic of taking a RegisterConfig or AuthenticateConfig,\n * resolving any preset, and merging it with user overrides to produce final\n * WebAuthn options ready for the browser API.\n */\nimport { PRESET_MAP } from '../presets/webauthn.presets';\n/**\n * Deep merge utility that properly handles nested objects\n * Later properties override earlier ones\n */\nfunction deepMerge(target, ...sources) {\n if (!sources.length)\n return target;\n const source = sources.shift();\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key])\n Object.assign(target, { [key]: {} });\n deepMerge(target[key], source[key]);\n }\n else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n return deepMerge(target, ...sources);\n}\n/**\n * Check if a value is a plain object\n */\nfunction isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item);\n}\n/**\n * Generate a secure random challenge as Uint8Array\n */\nfunction generateChallenge() {\n return crypto.getRandomValues(new Uint8Array(32));\n}\n/**\n * Generate a user ID from username\n * Uses TextEncoder to convert username to Uint8Array for consistency\n */\nfunction generateUserId(username) {\n return new TextEncoder().encode(username);\n}\n/**\n * Convert challenge to appropriate format\n * Handles both string (base64url) and Uint8Array inputs\n */\nfunction processChallenge(challenge) {\n if (!challenge) {\n return generateChallenge();\n }\n if (typeof challenge === 'string') {\n // Assume base64url string, convert to Uint8Array\n return Uint8Array.from(atob(challenge.replace(/-/g, '+').replace(/_/g, '/')), (c) => c.charCodeAt(0));\n }\n return challenge;\n}\n/**\n * Convert user ID to appropriate format\n * Handles both string (base64url) and Uint8Array inputs\n */\nfunction processUserId(userId, username) {\n if (userId) {\n if (typeof userId === 'string') {\n // Assume base64url string, convert to Uint8Array\n return Uint8Array.from(atob(userId.replace(/-/g, '+').replace(/_/g, '/')), (c) => c.charCodeAt(0));\n }\n return userId;\n }\n if (username) {\n return generateUserId(username);\n }\n // Fallback to random ID\n return crypto.getRandomValues(new Uint8Array(16));\n}\n/**\n * Convert string credential IDs to PublicKeyCredentialDescriptor format\n */\nfunction processCredentialDescriptors(credentials) {\n if (!credentials || credentials.length === 0) {\n return undefined;\n }\n // If already in descriptor format, return as-is\n if (typeof credentials[0] === 'object' && 'type' in credentials[0]) {\n return credentials;\n }\n // Convert string IDs to descriptors\n return credentials.map((id) => ({\n type: 'public-key',\n id: Uint8Array.from(atob(id.replace(/-/g, '+').replace(/_/g, '/')), (c) => c.charCodeAt(0)),\n }));\n}\n/**\n * Resolve a preset configuration by name\n */\nexport function resolvePreset(presetName) {\n const preset = PRESET_MAP[presetName];\n if (!preset) {\n throw new Error(`Unknown preset: ${presetName}`);\n }\n return preset;\n}\n/**\n * Build complete PublicKeyCredentialCreationOptions from RegisterConfig\n * Now uses WebAuthnConfig for better defaults and relying party information\n */\nexport function buildCreationOptionsFromConfig(config, webAuthnConfig) {\n // Start with base configuration from WebAuthnConfig\n let options = {\n timeout: webAuthnConfig.defaultTimeout || 60000,\n attestation: webAuthnConfig.defaultAttestation || 'none',\n };\n // Apply preset if specified\n if (config.preset) {\n const preset = resolvePreset(config.preset);\n options = deepMerge(options, {\n authenticatorSelection: preset.authenticatorSelection,\n pubKeyCredParams: [...preset.pubKeyCredParams], // Convert readonly to mutable\n });\n }\n else {\n // Apply default authenticator selection from config\n if (webAuthnConfig.defaultAuthenticatorSelection) {\n options.authenticatorSelection =\n webAuthnConfig.defaultAuthenticatorSelection;\n }\n }\n // Apply user overrides\n if (config.timeout !== undefined) {\n options.timeout = config.timeout;\n }\n if (config.attestation !== undefined) {\n options.attestation = config.attestation;\n }\n if (config.authenticatorSelection !== undefined) {\n options.authenticatorSelection = deepMerge(options.authenticatorSelection || {}, config.authenticatorSelection);\n }\n if (config.pubKeyCredParams !== undefined) {\n options.pubKeyCredParams = config.pubKeyCredParams;\n }\n if (config.extensions !== undefined) {\n options.extensions = config.extensions;\n }\n // Handle required fields\n const challenge = processChallenge(config.challenge);\n const userId = processUserId(config.userId, config.username);\n // Use relying party from config, with user override capability\n const relyingParty = config.rp || webAuthnConfig.relyingParty;\n // Build final options\n const finalOptions = {\n ...options,\n rp: relyingParty,\n user: {\n id: userId,\n name: config.username,\n displayName: config.displayName || config.username,\n },\n challenge,\n pubKeyCredParams: options.pubKeyCredParams ||\n webAuthnConfig.defaultAlgorithms || [\n { type: 'public-key', alg: -7 }, // ES256\n { type: 'public-key', alg: -257 }, // RS256\n ],\n excludeCredentials: processCredentialDescriptors(config.excludeCredentials),\n };\n return finalOptions;\n}\n/**\n * Build complete PublicKeyCredentialRequestOptions from AuthenticateConfig\n * Now uses WebAuthnConfig for better defaults\n */\nexport function buildRequestOptionsFromConfig(config, webAuthnConfig) {\n // Start with base configuration from WebAuthnConfig\n const options = {\n timeout: webAuthnConfig.defaultTimeout || 60000,\n userVerification: webAuthnConfig.enforceUserVerification\n ? 'required'\n : 'preferred',\n };\n // Apply preset if specified\n if (config.preset) {\n const preset = resolvePreset(config.preset);\n // Extract relevant parts for authentication (userVerification from authenticatorSelection)\n if (preset.authenticatorSelection?.userVerification) {\n options.userVerification = preset.authenticatorSelection.userVerification;\n }\n }\n // Apply user overrides\n if (config.timeout !== undefined) {\n options.timeout = config.timeout;\n }\n if (config.userVerification !== undefined) {\n options.userVerification = config.userVerification;\n }\n if (config.extensions !== undefined) {\n options.extensions = config.extensions;\n }\n // Handle required fields\n const challenge = processChallenge(config.challenge);\n // Build final options\n const finalOptions = {\n ...options,\n challenge,\n allowCredentials: processCredentialDescriptors(config.allowCredentials),\n };\n return finalOptions;\n}\n/**\n * Validate that a RegisterConfig has all required fields\n */\nexport function validateRegisterConfig(config) {\n if (!config.username || typeof config.username !== 'string') {\n throw new Error('RegisterConfig must have a valid username');\n }\n if (config.preset && !PRESET_MAP[config.preset]) {\n throw new Error(`Invalid preset: ${config.preset}. Valid presets are: ${Object.keys(PRESET_MAP).join(', ')}`);\n }\n}\n/**\n * Validate that an AuthenticateConfig has all required fields\n */\nexport function validateAuthenticateConfig(config) {\n if (config.preset && !PRESET_MAP[config.preset]) {\n throw new Error(`Invalid preset: ${config.preset}. Valid presets are: ${Object.keys(PRESET_MAP).join(', ')}`);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtd2ViYXV0aG4vc3JjL2xpYi91dGlscy9wcmVzZXQudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztBQU8xRTs7O0dBR0c7QUFDSCxTQUFTLFNBQVMsQ0FDaEIsTUFBUyxFQUNULEdBQUcsT0FBYztJQUVqQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFL0IsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDekMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN6QixJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztvQkFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsTUFBTSxFQUFFLEdB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O0dBRUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsTUFBMEI7SUFDbkUsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQ2IsbUJBQW1CLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixNQUFNLENBQUMsSUFBSSxDQUNqRSxVQUFVLENBQ1gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDZixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHJlc29sdmluZyBhbmQgbWVyZ2luZyBXZWJBdXRobiBwcmVzZXRzXHJcbiAqXHJcbiAqIFRoZXNlIHV0aWxpdGllcyBoYW5kbGUgdGhlIGxvZ2ljIG9mIHRha2luZyBhIFJlZ2lzdGVyQ29uZmlnIG9yIEF1dGhlbnRpY2F0ZUNvbmZpZyxcclxuICogcmVzb2x2aW5nIGFueSBwcmVzZXQsIGFuZCBtZXJnaW5nIGl0IHdpdGggdXNlciBvdmVycmlkZXMgdG8gcHJvZHVjZSBmaW5hbFxyXG4gKiBXZWJBdXRobiBvcHRpb25zIHJlYWR5IGZvciB0aGUgYnJvd3NlciBBUEkuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUFJFU0VUX01BUCwgdHlwZSBQcmVzZXROYW1lIH0gZnJvbSAnLi4vcHJlc2V0cy93ZWJhdXRobi5wcmVzZXRzJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIFJlZ2lzdGVyQ29uZmlnLFxyXG4gIEF1dGhlbnRpY2F0ZUNvbmZpZyxcclxufSBmcm9tICcuLi9tb2RlbHMvcmVnaXN0ZXItY29uZmlnLm1vZGVscyc7XHJcbmltcG9ydCB0eXBlIHsgV2ViQXV0aG5Db25maWcgfSBmcm9tICcuLi9jb25maWcvd2ViYXV0aG4uY29uZmlnJztcclxuXHJcbi8qKlxyXG4gKiBEZWVwIG1lcmdlIHV0aWxpdHkgdGhhdCBwcm9wZXJseSBoYW5kbGVzIG5lc3RlZCBvYmplY3RzXHJcbiAqIExhdGVyIHByb3BlcnRpZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzXHJcbiAqL1xyXG5mdW5jdGlvbiBkZWVwTWVyZ2U8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KFxyXG4gIHRhcmdldDogVCxcclxuICAuLi5zb3VyY2VzOiBhbnlbXVxyXG4pOiBUIHtcclxuICBpZiAoIXNvdXJjZXMubGVuZ3RoKSByZXR1cm4gdGFyZ2V0O1xyXG4gIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcclxuXHJcbiAgaWYgKGlzT2JqZWN0KHRhcmdldCkgJiYgaXNPYmplY3Qoc291cmNlKSkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XHJcbiAgICAgIGlmIChpc09iamVjdChzb3VyY2Vba2V5XSkpIHtcclxuICAgICAgICBpZiAoIXRhcmdldFtrZXldKSBPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XToge30gfSk7XHJcbiAgICAgICAgZGVlcE1lcmdlKHRhcmdldFtrZXldLCBzb3VyY2Vba2V5XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHNvdXJjZVtrZXldIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGVlcE1lcmdlKHRhcmdldCwgLi4uc291cmNlcyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0XHJcbiAqL1xyXG5mdW5jdGlvbiBpc09iamVjdChpdGVtOiBhbnkpOiBpdGVtIGlzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gIHJldHVybiBpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIGEgc2VjdXJlIHJhbmRvbSBjaGFsbGVuZ2UgYXMgVWludDhBcnJheVxyXG4gKi9cclxuZnVuY3Rpb24gZ2VuZXJhdGVDaGFsbGVuZ2UoKTogVWludDhBcnJheSB7XHJcbiAgcmV0dXJuIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMzIpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIGEgdXNlciBJRCBmcm9tIHVzZXJuYW1lXHJcbiAqIFVzZXMgVGV4dEVuY29kZXIgdG8gY29udmVydCB1c2VybmFtZSB0byBVaW50OEFycmF5IGZvciBjb25zaXN0ZW5jeVxyXG4gKi9cclxuZnVuY3Rpb24gZ2VuZXJhdGVVc2VySWQodXNlcm5hbWU6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xyXG4gIHJldHVybiBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodXNlcm5hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBjaGFsbGVuZ2UgdG8gYXBwcm9wcmlhdGUgZm9ybWF0XHJcbiAqIEhhbmRsZXMgYm90aCBzdHJpbmcgKGJhc2U2NHVybCkgYW5kIFVpbnQ4QXJyYXkgaW5wdXRzXHJcbiAqL1xyXG5mdW5jdGlvbiBwcm9jZXNzQ2hhbGxlbmdlKGNoYWxsZW5nZT86IHN0cmluZyB8IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcclxuICBpZiAoIWNoYWxsZW5nZSkge1xyXG4gICAgcmV0dXJuIGdlbmVyYXRlQ2hhbGxlbmdlKCk7XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZW9mIGNoYWxsZW5nZSA9PT0gJ3N0cmluZycpIHtcclxuICAgIC8vIEFzc3VtZSBiYXNlNjR1cmwgc3RyaW5nLCBjb252ZXJ0IHRvIFVpbnQ4QXJyYXlcclxuICAgIHJldHVybiBVaW50OEFycmF5LmZyb20oXHJcbiAgICAgIGF0b2IoY2hhbGxlbmdlLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJykpLFxyXG4gICAgICAoYykgPT4gYy5jaGFyQ29kZUF0KDApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNoYWxsZW5nZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgdXNlciBJRCB0byBhcHByb3ByaWF0ZSBmb3JtYXRcclxuICogSGFuZGxlcyBib3RoIHN0cmluZyAoYmFzZTY0dXJsKSBhbmQgVWludDhBcnJheSBpbnB1dHNcclxuICovXHJcbmZ1bmN0aW9uIHByb2Nlc3NVc2VySWQoXHJcbiAgdXNlcklkPzogc3RyaW5nIHwgVWludDhBcnJheSxcclxuICB1c2VybmFtZT86IHN0cmluZ1xyXG4pOiBVaW50OEFycmF5IHtcclxuICBpZiAodXNlcklkKSB7XHJcbiAgICBpZiAodHlwZW9mIHVzZXJJZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgLy8gQXNzdW1lIGJhc2U2NHVybCBzdHJpbmcsIGNvbnZlcnQgdG8gVWludDhBcnJheVxyXG4gICAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKFxyXG4gICAgICAgIGF0b2IodXNlcklkLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJykpLFxyXG4gICAgICAgIChjKSA9PiBjLmNoYXJDb2RlQXQoMClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VySWQ7XHJcbiAgfVxyXG5cclxuICBpZiAodXNlcm5hbWUpIHtcclxuICAgIHJldHVybiBnZW5lcmF0ZVVzZXJJZCh1c2VybmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLyBGYWxsYmFjayB0byByYW5kb20gSURcclxuICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxNikpO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBzdHJpbmcgY3JlZGVudGlhbCBJRHMgdG8gUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3IgZm9ybWF0XHJcbiAqL1xyXG5mdW5jdGlvbiBwcm9jZXNzQ3JlZGVudGlhbERlc2NyaXB0b3JzKFxyXG4gIGNyZWRlbnRpYWxzPzogUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXSB8IHN0cmluZ1tdXHJcbik6IFB1YmxpY0tleUNyZWRlbnRpYWxEZXNjcmlwdG9yW10gfCB1bmRlZmluZWQge1xyXG4gIGlmICghY3JlZGVudGlhbHMgfHwgY3JlZGVudGlhbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLy8gSWYgYWxyZWFkeSBpbiBkZXNjcmlwdG9yIGZvcm1hdCwgcmV0dXJuIGFzLWlzXHJcbiAgaWYgKHR5cGVvZiBjcmVkZW50aWFsc1swXSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIGNyZWRlbnRpYWxzWzBdKSB7XHJcbiAgICByZXR1cm4gY3JlZGVudGlhbHMgYXMgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3JbXTtcclxuICB9XHJcblxyXG4gIC8vIENvbnZlcnQgc3RyaW5nIElEcyB0byBkZXNjcmlwdG9yc1xyXG4gIHJldHVybiAoY3JlZGVudGlhbHMgYXMgc3RyaW5nW10pLm1hcCgoaWQpID0+ICh7XHJcbiAgICB0eXBlOiAncHVibGljLWtleScgYXMgY29uc3QsXHJcbiAgICBpZDogVWludDhBcnJheS5mcm9tKGF0b2IoaWQucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKSksIChjKSA9PlxyXG4gICAgICBjLmNoYXJDb2RlQXQoMClcclxuICAgICksXHJcbiAgfSkpO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZSBhIHByZXNldCBjb25maWd1cmF0aW9uIGJ5IG5hbWVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUHJlc2V0KHByZXNldE5hbWU6IFByZXNldE5hbWUpIHtcclxuICBjb25zdCBwcmVzZXQgPSBQUkVTRVRfTUFQW3ByZXNldE5hbWVdO1xyXG4gIGlmICghcHJlc2V0KSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcHJlc2V0OiAke3ByZXNldE5hbWV9YCk7XHJcbiAgfVxyXG4gIHJldHVybiBwcmVzZXQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsZCBjb21wbGV0ZSBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGZyb20gUmVnaXN0ZXJDb25maWdcclxuICogTm93IHVzZXMgV2ViQXV0aG5Db25maWcgZm9yIGJldHRlciBkZWZhdWx0cyBhbmQgcmVseWluZyBwYXJ0eSBpbmZvcm1hdGlvblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQ3JlYXRpb25PcHRpb25zRnJvbUNvbmZpZyhcclxuICBjb25maWc6IFJlZ2lzdGVyQ29uZmlnLFxyXG4gIHdlYkF1dGhuQ29uZmlnOiBXZWJBdXRobkNvbmZpZ1xyXG4pOiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHtcclxuICAvLyBTdGFydCB3aXRoIGJhc2UgY29uZmlndXJhdGlvbiBmcm9tIFdlYkF1dGhuQ29uZmlnXHJcbiAgbGV0IG9wdGlvbnM6IFBhcnRpYWw8UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucz4gPSB7XHJcbiAgICB0aW1lb3V0OiB3ZWJBdXRobkNvbmZpZy5kZWZhdWx0VGltZW91dCB8fCA2MDAwMCxcclxuICAgIGF0dGVzdGF0aW9uOiB3ZWJBdXRobkNvbmZpZy5kZWZhdWx0QXR0ZXN0YXRpb24gfHwgJ25vbmUnLFxyXG4gIH07XHJcblxyXG4gIC8vIEFwcGx5IHByZXNldCBpZiBzcGVjaWZpZWRcclxuICBpZiAoY29uZmlnLnByZXNldCkge1xyXG4gICAgY29uc3QgcHJlc2V0ID0gcmVzb2x2ZVByZXNldChjb25maWcucHJlc2V0KTtcclxuICAgIG9wdGlvbnMgPSBkZWVwTWVyZ2Uob3B0aW9ucywge1xyXG4gICAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiBwcmVzZXQuYXV0aGVudGljYXRvclNlbGVjdGlvbixcclxuICAgICAgcHViS2V5Q3JlZFBhcmFtczogWy4uLnByZXNldC5wdWJLZXlDcmVkUGFyYW1zXSwgLy8gQ29udmVydCByZWFkb25seSB0byBtdXRhYmxlXHJcbiAgICB9KTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gQXBwbHkgZGVmYXVsdCBhdXRoZW50aWNhdG9yIHNlbGVjdGlvbiBmcm9tIGNvbmZpZ1xyXG4gICAgaWYgKHdlYkF1dGhuQ29uZmlnLmRlZmF1bHRBdXRoZW50aWNhdG9yU2VsZWN0aW9uKSB7XHJcbiAgICAgIG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbiA9XHJcbiAgICAgICAgd2ViQXV0aG5Db25maWcuZGVmYXVsdEF1dGhlbnRpY2F0b3JTZWxlY3Rpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBBcHBseSB1c2VyIG92ZXJyaWRlc1xyXG4gIGlmIChjb25maWcudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICBvcHRpb25zLnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcclxuICB9XHJcblxyXG4gIGlmIChjb25maWcuYXR0ZXN0YXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucy5hdHRlc3RhdGlvbiA9IGNvbmZpZy5hdHRlc3RhdGlvbjtcclxuICB9XHJcblxyXG4gIGlmIChjb25maWcuYXV0aGVudGljYXRvclNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICBvcHRpb25zLmF1dGhlbnRpY2F0b3JTZWxlY3Rpb24gPSBkZWVwTWVyZ2UoXHJcbiAgICAgIG9wdGlvbnMuYXV0aGVudGljYXRvclNlbGVjdGlvbiB8fCB7fSxcclxuICAgICAgY29uZmlnLmF1dGhlbnRpY2F0b3JTZWxlY3Rpb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpZiAoY29uZmlnLnB1YktleUNyZWRQYXJhbXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucy5wdWJLZXlDcmVkUGFyYW1zID0gY29uZmlnLnB1YktleUNyZWRQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBpZiAoY29uZmlnLmV4dGVuc2lvbnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucy5leHRlbnNpb25zID0gY29uZmlnLmV4dGVuc2lvbnM7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgcmVxdWlyZWQgZmllbGRzXHJcbiAgY29uc3QgY2hhbGxlbmdlID0gcHJvY2Vzc0NoYWxsZW5nZShjb25maWcuY2hhbGxlbmdlKTtcclxuICBjb25zdCB1c2VySWQgPSBwcm9jZXNzVXNlcklkKGNvbmZpZy51c2VySWQsIGNvbmZpZy51c2VybmFtZSk7XHJcblxyXG4gIC8vIFVzZSByZWx5aW5nIHBhcnR5IGZyb20gY29uZmlnLCB3aXRoIHVzZXIgb3ZlcnJpZGUgY2FwYWJpbGl0eVxyXG4gIGNvbnN0IHJlbHlpbmdQYXJ0eSA9IGNvbmZpZy5ycCB8fCB3ZWJBdXRobkNvbmZpZy5yZWx5aW5nUGFydHk7XHJcblxyXG4gIC8vIEJ1aWxkIGZpbmFsIG9wdGlvbnNcclxuICBjb25zdCBmaW5hbE9wdGlvbnM6IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgPSB7XHJcbiAgICAuLi5vcHRpb25zLFxyXG4gICAgcnA6IHJlbHlpbmdQYXJ0eSxcclxuICAgIHVzZXI6IHtcclxuICAgICAgaWQ6IHVzZXJJZCxcclxuICAgICAgbmFtZTogY29uZmlnLnVzZXJuYW1lLFxyXG4gICAgICBkaXNwbGF5TmFtZTogY29uZmlnLmRpc3BsYXlOYW1lIHx8IGNvbmZpZy51c2VybmFtZSxcclxuICAgIH0sXHJcbiAgICBjaGFsbGVuZ2UsXHJcbiAgICBwdWJLZXlDcmVkUGFyYW1zOiBvcHRpb25zLnB1YktleUNyZWRQYXJhbXMgfHxcclxuICAgICAgd2ViQXV0aG5Db25maWcuZGVmYXVsdEFsZ29yaXRobXMgfHwgW1xyXG4gICAgICAgIHsgdHlwZTogJ3B1YmxpYy1rZXknLCBhbGc6IC03IH0sIC8vIEVTMjU2XHJcbiAgICAgICAgeyB0eXBlOiAncHVibGljLWtleScsIGFsZzogLTI1NyB9LCAvLyBSUzI1NlxyXG4gICAgICBdLFxyXG4gICAgZXhjbHVkZUNyZWRlbnRpYWxzOiBwcm9jZXNzQ3JlZGVudGlhbERlc2NyaXB0b3JzKGNvbmZpZy5leGNsdWRlQ3JlZGVudGlhbHMpLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBmaW5hbE9wdGlvbnM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsZCBjb21wbGV0ZSBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgZnJvbSBBdXRoZW50aWNhdGVDb25maWdcclxuICogTm93IHVzZXMgV2ViQXV0aG5Db25maWcgZm9yIGJldHRlciBkZWZhdWx0c1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUmVxdWVzdE9wdGlvbnNGcm9tQ29uZmlnKFxyXG4gIGNvbmZpZzogQXV0aGVudGljYXRlQ29uZmlnLFxyXG4gIHdlYkF1dGhuQ29uZmlnOiBXZWJBdXRobkNvbmZpZ1xyXG4pOiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMge1xyXG4gIC8vIFN0YXJ0IHdpdGggYmFzZSBjb25maWd1cmF0aW9uIGZyb20gV2ViQXV0aG5Db25maWdcclxuICBjb25zdCBvcHRpb25zOiBQYXJ0aWFsPFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucz4gPSB7XHJcbiAgICB0aW1lb3V0OiB3ZWJBdXRobkNvbmZpZy5kZWZhdWx0VGltZW91dCB8fCA2MDAwMCxcclxuICAgIHVzZXJWZXJpZmljYXRpb246IHdlYkF1dGhuQ29uZmlnLmVuZm9yY2VVc2VyVmVyaWZpY2F0aW9uXHJcbiAgICAgID8gJ3JlcXVpcmVkJ1xyXG4gICAgICA6ICdwcmVmZXJyZWQnLFxyXG4gIH07XHJcblxyXG4gIC8vIEFwcGx5IHByZXNldCBpZiBzcGVjaWZpZWRcclxuICBpZiAoY29uZmlnLnByZXNldCkge1xyXG4gICAgY29uc3QgcHJlc2V0ID0gcmVzb2x2ZVByZXNldChjb25maWcucHJlc2V0KTtcclxuICAgIC8vIEV4dHJhY3QgcmVsZXZhbnQgcGFydHMgZm9yIGF1dGhlbnRpY2F0aW9uICh1c2VyVmVyaWZpY2F0aW9uIGZyb20gYXV0aGVudGljYXRvclNlbGVjdGlvbilcclxuICAgIGlmIChwcmVzZXQuYXV0aGVudGljYXRvclNlbGVjdGlvbj8udXNlclZlcmlmaWNhdGlvbikge1xyXG4gICAgICBvcHRpb25zLnVzZXJWZXJpZmljYXRpb24gPSBwcmVzZXQuYXV0aGVudGljYXRvclNlbGVjdGlvbi51c2VyVmVyaWZpY2F0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gQXBwbHkgdXNlciBvdmVycmlkZXNcclxuICBpZiAoY29uZmlnLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucy50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XHJcbiAgfVxyXG5cclxuICBpZiAoY29uZmlnLnVzZXJWZXJpZmljYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucy51c2VyVmVyaWZpY2F0aW9uID0gY29uZmlnLnVzZXJWZXJpZmljYXRpb247XHJcbiAgfVxyXG5cclxuICBpZiAoY29uZmlnLmV4dGVuc2lvbnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgb3B0aW9ucy5leHRlbnNpb25zID0gY29uZmlnLmV4dGVuc2lvbnM7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgcmVxdWlyZWQgZmllbGRzXHJcbiAgY29uc3QgY2hhbGxlbmdlID0gcHJvY2Vzc0NoYWxsZW5nZShjb25maWcuY2hhbGxlbmdlKTtcclxuXHJcbiAgLy8gQnVpbGQgZmluYWwgb3B0aW9uc1xyXG4gIGNvbnN0IGZpbmFsT3B0aW9uczogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAgLi4ub3B0aW9ucyxcclxuICAgIGNoYWxsZW5nZSxcclxuICAgIGFsbG93Q3JlZGVudGlhbHM6IHByb2Nlc3NDcmVkZW50aWFsRGVzY3JpcHRvcnMoY29uZmlnLmFsbG93Q3JlZGVudGlhbHMpLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiBmaW5hbE9wdGlvbnM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZSB0aGF0IGEgUmVnaXN0ZXJDb25maWcgaGFzIGFsbCByZXF1aXJlZCBmaWVsZHNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJlZ2lzdGVyQ29uZmlnKGNvbmZpZzogUmVnaXN0ZXJDb25maWcpOiB2b2lkIHtcclxuICBpZiAoIWNvbmZpZy51c2VybmFtZSB8fCB0eXBlb2YgY29uZmlnLnVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWdpc3RlckNvbmZpZyBtdXN0IGhhdmUgYSB2YWxpZCB1c2VybmFtZScpO1xyXG4gIH1cclxuXHJcbiAgaWYgKGNvbmZpZy5wcmVzZXQgJiYgIVBSRVNFVF9NQVBbY29uZmlnLnByZXNldF0pIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYEludmFsaWQgcHJlc2V0OiAke2NvbmZpZy5wcmVzZXR9LiBWYWxpZCBwcmVzZXRzIGFyZTogJHtPYmplY3Qua2V5cyhcclxuICAgICAgICBQUkVTRVRfTUFQXHJcbiAgICAgICkuam9pbignLCAnKX1gXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlIHRoYXQgYW4gQXV0aGVudGljYXRlQ29uZmlnIGhhcyBhbGwgcmVxdWlyZWQgZmllbGRzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVBdXRoZW50aWNhdGVDb25maWcoY29uZmlnOiBBdXRoZW50aWNhdGVDb25maWcpOiB2b2lkIHtcclxuICBpZiAoY29uZmlnLnByZXNldCAmJiAhUFJFU0VUX01BUFtjb25maWcucHJlc2V0XSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgSW52YWxpZCBwcmVzZXQ6ICR7Y29uZmlnLnByZXNldH0uIFZhbGlkIHByZXNldHMgYXJlOiAke09iamVjdC5rZXlzKFxyXG4gICAgICAgIFBSRVNFVF9NQVBcclxuICAgICAgKS5qb2luKCcsICcpfWBcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==","/**\n * Enhanced WebAuthn Error Classes\n * Provides specific, actionable error types for better developer experience\n */\nexport var WebAuthnErrorType;\n(function (WebAuthnErrorType) {\n WebAuthnErrorType[\"NOT_SUPPORTED\"] = \"NOT_SUPPORTED\";\n WebAuthnErrorType[\"USER_CANCELLED\"] = \"USER_CANCELLED\";\n WebAuthnErrorType[\"AUTHENTICATOR_ERROR\"] = \"AUTHENTICATOR_ERROR\";\n WebAuthnErrorType[\"INVALID_OPTIONS\"] = \"INVALID_OPTIONS\";\n WebAuthnErrorType[\"UNSUPPORTED_OPERATION\"] = \"UNSUPPORTED_OPERATION\";\n WebAuthnErrorType[\"NETWORK_ERROR\"] = \"NETWORK_ERROR\";\n WebAuthnErrorType[\"SECURITY_ERROR\"] = \"SECURITY_ERROR\";\n WebAuthnErrorType[\"TIMEOUT_ERROR\"] = \"TIMEOUT_ERROR\";\n WebAuthnErrorType[\"UNKNOWN\"] = \"UNKNOWN\";\n})(WebAuthnErrorType || (WebAuthnErrorType = {}));\n/**\n * Base WebAuthn error class with additional context\n */\nexport class WebAuthnError extends Error {\n type;\n originalError;\n constructor(type, message, originalError) {\n super(message);\n this.type = type;\n this.originalError = originalError;\n this.name = 'WebAuthnError';\n }\n static fromDOMException(error) {\n const type = WebAuthnError.mapDOMExceptionToType(error.name);\n return new WebAuthnError(type, error.message, error);\n }\n static mapDOMExceptionToType(name) {\n switch (name) {\n case 'NotSupportedError':\n return WebAuthnErrorType.NOT_SUPPORTED;\n case 'NotAllowedError':\n return WebAuthnErrorType.USER_CANCELLED;\n case 'InvalidStateError':\n return WebAuthnErrorType.AUTHENTICATOR_ERROR;\n case 'SecurityError':\n return WebAuthnErrorType.SECURITY_ERROR;\n case 'TimeoutError':\n return WebAuthnErrorType.TIMEOUT_ERROR;\n case 'NetworkError':\n return WebAuthnErrorType.NETWORK_ERROR;\n case 'EncodingError':\n return WebAuthnErrorType.INVALID_OPTIONS;\n default:\n return WebAuthnErrorType.UNKNOWN;\n }\n }\n}\n/**\n * Error thrown when user cancels the WebAuthn operation\n */\nexport class UserCancelledError extends WebAuthnError {\n constructor(originalError) {\n super(WebAuthnErrorType.USER_CANCELLED, 'User cancelled the WebAuthn operation', originalError);\n this.name = 'UserCancelledError';\n }\n}\n/**\n * Error thrown when there's an issue with the authenticator\n */\nexport class AuthenticatorError extends WebAuthnError {\n constructor(message, originalError) {\n super(WebAuthnErrorType.AUTHENTICATOR_ERROR, `Authenticator error: ${message}`, originalError);\n this.name = 'AuthenticatorError';\n }\n}\n/**\n * Error thrown when the provided options are invalid\n */\nexport class InvalidOptionsError extends WebAuthnError {\n constructor(message, originalError) {\n super(WebAuthnErrorType.INVALID_OPTIONS, `Invalid options: ${message}`, originalError);\n this.name = 'InvalidOptionsError';\n }\n}\n/**\n * Error thrown when the requested operation is not supported\n */\nexport class UnsupportedOperationError extends WebAuthnError {\n constructor(message, originalError) {\n super(WebAuthnErrorType.UNSUPPORTED_OPERATION, `Unsupported operation: ${message}`, originalError);\n this.name = 'UnsupportedOperationError';\n }\n}\n/**\n * Error thrown when there's a network-related issue\n */\nexport class NetworkError extends WebAuthnError {\n constructor(message, originalError) {\n super(WebAuthnErrorType.NETWORK_ERROR, `Network error: ${message}`, originalError);\n this.name = 'NetworkError';\n }\n}\n/**\n * Error thrown when there's a security-related issue\n */\nexport class SecurityError extends WebAuthnError {\n constructor(message, originalError) {\n super(WebAuthnErrorType.SECURITY_ERROR, `Security error: ${message}`, originalError);\n this.name = 'SecurityError';\n }\n}\n/**\n * Error thrown when the operation times out\n */\nexport class TimeoutError extends WebAuthnError {\n constructor(message, originalError) {\n super(WebAuthnErrorType.TIMEOUT_ERROR, `Timeout error: ${message}`, originalError);\n this.name = 'TimeoutError';\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXV0aG4uZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtd2ViYXV0aG4vc3JjL2xpYi9lcnJvcnMvd2ViYXV0aG4uZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE1BQU0sQ0FBTixJQUFZLGlCQVVYO0FBVkQsV0FBWSxpQkFBaUI7SUFDM0Isb0RBQStCLENBQUE7SUFDL0Isc0RBQWlDLENBQUE7SUFDakMsZ0VBQTJDLENBQUE7SUFDM0Msd0RBQW1DLENBQUE7SUFDbkMsb0VBQStDLENBQUE7SUFDL0Msb0RBQStCLENBQUE7SUFDL0Isc0RBQWlDLENBQUE7SUFDakMsb0RBQStCLENBQUE7SUFDL0Isd0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVZXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFVNUI7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFjLFNBQVEsS0FBSztJQUVwQjtJQUVBO0lBSGxCLFlBQ2tCLElBQXVCLEVBQ3ZDLE9BQWUsRUFDQyxhQUFxQjtRQUVyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFKQyxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUV2QixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUdyQyxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQW1CO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQVk7UUFDL0MsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssbUJB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Ii8qKlxuICogRW5oYW5jZWQgV2ViQXV0aG4gRXJyb3IgQ2xhc3Nlc1xuICogUHJvdmlkZXMgc3BlY2lmaWMsIGFjdGlvbmFibGUgZXJyb3IgdHlwZXMgZm9yIGJldHRlciBkZXZlbG9wZXIgZXhwZXJpZW5jZVxuICovXG5cbmV4cG9ydCBlbnVtIFdlYkF1dGhuRXJyb3JUeXBlIHtcbiAgTk9UX1NVUFBPUlRFRCA9ICdOT1RfU1VQUE9SVEVEJyxcbiAgVVNFUl9DQU5DRUxMRUQgPSAnVVNFUl9DQU5DRUxMRUQnLFxuICBBVVRIRU5USUNBVE9SX0VSUk9SID0gJ0FVVEhFTlRJQ0FUT1JfRVJST1InLFxuICBJTlZBTElEX09QVElPTlMgPSAnSU5WQUxJRF9PUFRJT05TJyxcbiAgVU5TVVBQT1JURURfT1BFUkFUSU9OID0gJ1VOU1VQUE9SVEVEX09QRVJBVElPTicsXG4gIE5FVFdPUktfRVJST1IgPSAnTkVUV09SS19FUlJPUicsXG4gIFNFQ1VSSVRZX0VSUk9SID0gJ1NFQ1VSSVRZX0VSUk9SJyxcbiAgVElNRU9VVF9FUlJPUiA9ICdUSU1FT1VUX0VSUk9SJyxcbiAgVU5LTk9XTiA9ICdVTktOT1dOJyxcbn1cblxuLyoqXG4gKiBCYXNlIFdlYkF1dGhuIGVycm9yIGNsYXNzIHdpdGggYWRkaXRpb25hbCBjb250ZXh0XG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJBdXRobkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdHlwZTogV2ViQXV0aG5FcnJvclR5cGUsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBvcmlnaW5hbEVycm9yPzogRXJyb3JcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1dlYkF1dGhuRXJyb3InO1xuICB9XG5cbiAgc3RhdGljIGZyb21ET01FeGNlcHRpb24oZXJyb3I6IERPTUV4Y2VwdGlvbik6IFdlYkF1dGhuRXJyb3Ige1xuICAgIGNvbnN0IHR5cGUgPSBXZWJBdXRobkVycm9yLm1hcERPTUV4Y2VwdGlvblRvVHlwZShlcnJvci5uYW1lKTtcbiAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3IodHlwZSwgZXJyb3IubWVzc2FnZSwgZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWFwRE9NRXhjZXB0aW9uVG9UeXBlKG5hbWU6IHN0cmluZyk6IFdlYkF1dGhuRXJyb3JUeXBlIHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ05vdFN1cHBvcnRlZEVycm9yJzpcbiAgICAgICAgcmV0dXJuIFdlYkF1dGhuRXJyb3JUeXBlLk5PVF9TVVBQT1JURUQ7XG4gICAgICBjYXNlICdOb3RBbGxvd2VkRXJyb3InOlxuICAgICAgICByZXR1cm4gV2ViQXV0aG5FcnJvclR5cGUuVVNFUl9DQU5DRUxMRUQ7XG4gICAgICBjYXNlICdJbnZhbGlkU3RhdGVFcnJvcic6XG4gICAgICAgIHJldHVybiBXZWJBdXRobkVycm9yVHlwZS5BVVRIRU5USUNBVE9SX0VSUk9SO1xuICAgICAgY2FzZSAnU2VjdXJpdHlFcnJvcic6XG4gICAgICAgIHJldHVybiBXZWJBdXRobkVycm9yVHlwZS5TRUNVUklUWV9FUlJPUjtcbiAgICAgIGNhc2UgJ1RpbWVvdXRFcnJvcic6XG4gICAgICAgIHJldHVybiBXZWJBdXRobkVycm9yVHlwZS5USU1FT1VUX0VSUk9SO1xuICAgICAgY2FzZSAnTmV0d29ya0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIFdlYkF1dGhuRXJyb3JUeXBlLk5FVFdPUktfRVJST1I7XG4gICAgICBjYXNlICdFbmNvZGluZ0Vycm9yJzpcbiAgICAgICAgcmV0dXJuIFdlYkF1dGhuRXJyb3JUeXBlLklOVkFMSURfT1BUSU9OUztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBXZWJBdXRobkVycm9yVHlwZS5VTktOT1dOO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHVzZXIgY2FuY2VscyB0aGUgV2ViQXV0aG4gb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBVc2VyQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBXZWJBdXRobkVycm9yIHtcbiAgY29uc3RydWN0b3Iob3JpZ2luYWxFcnJvcj86IEVycm9yKSB7XG4gICAgc3VwZXIoXG4gICAgICBXZWJBdXRobkVycm9yVHlwZS5VU0VSX0NBTkNFTExFRCxcbiAgICAgICdVc2VyIGNhbmNlbGxlZCB0aGUgV2ViQXV0aG4gb3BlcmF0aW9uJyxcbiAgICAgIG9yaWdpbmFsRXJyb3JcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdVc2VyQ2FuY2VsbGVkRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gdGhlcmUncyBhbiBpc3N1ZSB3aXRoIHRoZSBhdXRoZW50aWNhdG9yXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdG9yRXJyb3IgZXh0ZW5kcyBXZWJBdXRobkVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcmlnaW5hbEVycm9yPzogRXJyb3IpIHtcbiAgICBzdXBlcihcbiAgICAgIFdlYkF1dGhuRXJyb3JUeXBlLkFVVEhFTlRJQ0FUT1JfRVJST1IsXG4gICAgICBgQXV0aGVudGljYXRvciBlcnJvcjogJHttZXNzYWdlfWAsXG4gICAgICBvcmlnaW5hbEVycm9yXG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnQXV0aGVudGljYXRvckVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHRoZSBwcm92aWRlZCBvcHRpb25zIGFyZSBpbnZhbGlkXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkT3B0aW9uc0Vycm9yIGV4dGVuZHMgV2ViQXV0aG5FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgb3JpZ2luYWxFcnJvcj86IEVycm9yKSB7XG4gICAgc3VwZXIoXG4gICAgICBXZWJBdXRobkVycm9yVHlwZS5JTlZBTElEX09QVElPTlMsXG4gICAgICBgSW52YWxpZCBvcHRpb25zOiAke21lc3NhZ2V9YCxcbiAgICAgIG9yaWdpbmFsRXJyb3JcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkT3B0aW9uc0Vycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWRcbiAqL1xuZXhwb3J0IGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBXZWJBdXRobkVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBvcmlnaW5hbEVycm9yPzogRXJyb3IpIHtcbiAgICBzdXBlcihcbiAgICAgIFdlYkF1dGhuRXJyb3JUeXBlLlVOU1VQUE9SVEVEX09QRVJBVElPTixcbiAgICAgIGBVbnN1cHBvcnRlZCBvcGVyYXRpb246ICR7bWVzc2FnZX1gLFxuICAgICAgb3JpZ2luYWxFcnJvclxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gdGhlcmUncyBhIG5ldHdvcmstcmVsYXRlZCBpc3N1ZVxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0Vycm9yIGV4dGVuZHMgV2ViQXV0aG5FcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgb3JpZ2luYWxFcnJvcj86IEVycm9yKSB7XG4gICAgc3VwZXIoXG4gICAgICBXZWJBdXRobkVycm9yVHlwZS5ORVRXT1JLX0VSUk9SLFxuICAgICAgYE5ldHdvcmsgZXJyb3I6ICR7bWVzc2FnZX1gLFxuICAgICAgb3JpZ2luYWxFcnJvclxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ05ldHdvcmtFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiB0aGVyZSdzIGEgc2VjdXJpdHktcmVsYXRlZCBpc3N1ZVxuICovXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlFcnJvciBleHRlbmRzIFdlYkF1dGhuRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9yaWdpbmFsRXJyb3I/OiBFcnJvcikge1xuICAgIHN1cGVyKFxuICAgICAgV2ViQXV0aG5FcnJvclR5cGUuU0VDVVJJVFlfRVJST1IsXG4gICAgICBgU2VjdXJpdHkgZXJyb3I6ICR7bWVzc2FnZX1gLFxuICAgICAgb3JpZ2luYWxFcnJvclxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ1NlY3VyaXR5RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gdGhlIG9wZXJhdGlvbiB0aW1lcyBvdXRcbiAqL1xuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIFdlYkF1dGhuRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIG9yaWdpbmFsRXJyb3I/OiBFcnJvcikge1xuICAgIHN1cGVyKFxuICAgICAgV2ViQXV0aG5FcnJvclR5cGUuVElNRU9VVF9FUlJPUixcbiAgICAgIGBUaW1lb3V0IGVycm9yOiAke21lc3NhZ2V9YCxcbiAgICAgIG9yaWdpbmFsRXJyb3JcbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICB9XG59XG4iXX0=","/**\n * WebAuthn Configuration\n * Provides configuration interfaces and injection token for WebAuthn service\n */\nimport { InjectionToken } from '@angular/core';\n/**\n * Default configuration for WebAuthn service\n * Note: relyingParty must be provided by the application\n */\nexport const DEFAULT_WEBAUTHN_CONFIG = {\n defaultTimeout: 60000,\n defaultAlgorithms: [\n { type: 'public-key', alg: -7 }, // ES256 (ECDSA w/ SHA-256)\n { type: 'public-key', alg: -257 }, // RS256 (RSASSA-PKCS1-v1_5 w/ SHA-256)\n ],\n enforceUserVerification: false,\n defaultAttestation: 'none',\n defaultAuthenticatorSelection: {\n userVerification: 'preferred',\n },\n};\n/**\n * Injection token for WebAuthn configuration\n */\nexport const WEBAUTHN_CONFIG = new InjectionToken('WEBAUTHN_CONFIG');\n/**\n * Creates a complete WebAuthn configuration with required relying party information\n * @param relyingParty Required relying party configuration\n * @param overrides Optional configuration overrides\n */\nexport function createWebAuthnConfig(relyingParty, overrides) {\n return {\n relyingParty,\n ...DEFAULT_WEBAUTHN_CONFIG,\n ...overrides,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXV0aG4uY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtd2ViYXV0aG4vc3JjL2xpYi9jb25maWcvd2ViYXV0aG4uY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUE0RC9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUF5QztJQUMzRSxjQUFjLEVBQUUsS0FBSztJQUNyQixpQkFBaUIsRUFBRTtRQUNqQixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsMkJBQTJCO1FBQzVELEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSx1Q0FBdUM7S0FDM0U7SUFDRCx1QkFBdUIsRUFBRSxLQUFLO0lBQzlCLGtCQUFrQixFQUFFLE1BQU07SUFDMUIsNkJBQTZCLEVBQUU7UUFDN0IsZ0JBQWdCLEVBQUUsV0FBVztLQUM5QjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FDL0MsaUJBQWlCLENBQ2xCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxZQUFnQyxFQUNoQyxTQUF5RDtJQUV6RCxPQUFPO1FBQ0wsWUFBWTtRQUNaLEdBQUcsdUJBQXVCO1FBQzFCLEdBQUcsU0FBUztLQUNiLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFdlYkF1dGhuIENvbmZpZ3VyYXRpb25cclxuICogUHJvdmlkZXMgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIGFuZCBpbmplY3Rpb24gdG9rZW4gZm9yIFdlYkF1dGhuIHNlcnZpY2VcclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIFJlcXVpcmVkIHJlbHlpbmcgcGFydHkgY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBSZWx5aW5nUGFydHlDb25maWcge1xyXG4gIC8qKlxyXG4gICAqIEh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXIgZm9yIHRoZSBSZWx5aW5nIFBhcnR5XHJcbiAgICogQGV4YW1wbGUgXCJBQ01FIENvcnBvcmF0aW9uXCJcclxuICAgKi9cclxuICBuYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEEgdmFsaWQgZG9tYWluIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgdGhlIFJlbHlpbmcgUGFydHkgb24gd2hvc2UgYmVoYWxmIGEgZ2l2ZW4gcmVnaXN0cmF0aW9uIG9yIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGlzIGJlaW5nIHBlcmZvcm1lZFxyXG4gICAqIEBleGFtcGxlIFwibG9naW4uZXhhbXBsZS5jb21cIiBvciBcImV4YW1wbGUuY29tXCJcclxuICAgKi9cclxuICBpZD86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBXZWJBdXRobiBzZXJ2aWNlXHJcbiAqIE5vdyBpbmNsdWRlcyByZXF1aXJlZCByZWx5aW5nIHBhcnR5IGluZm9ybWF0aW9uIGFuZCBhZHZhbmNlZCBvcHRpb25zXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ29uZmlnIHtcclxuICAvKipcclxuICAgKiBSZXF1aXJlZCByZWx5aW5nIHBhcnR5IGluZm9ybWF0aW9uIGZvciBXZWJBdXRobiBvcGVyYXRpb25zXHJcbiAgICogVGhpcyBpcyBjcml0aWNhbCBmb3Igc2VjdXJpdHkgLSBtdXN0IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgZm9yIHByb2R1Y3Rpb24gdXNlXHJcbiAgICovXHJcbiAgcmVseWluZ1BhcnR5OiBSZWx5aW5nUGFydHlDb25maWc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgdGltZW91dCBmb3IgV2ViQXV0aG4gb3BlcmF0aW9ucyBpbiBtaWxsaXNlY29uZHNcclxuICAgKiBAZGVmYXVsdCA2MDAwMFxyXG4gICAqL1xyXG4gIGRlZmF1bHRUaW1lb3V0PzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IHB1YmxpYyBrZXkgY3JlZGVudGlhbCBhbGdvcml0aG1zIGluIG9yZGVyIG9mIHByZWZlcmVuY2VcclxuICAgKiBAZGVmYXVsdCBbRVMyNTYsIFJTMjU2XVxyXG4gICAqL1xyXG4gIGRlZmF1bHRBbGdvcml0aG1zPzogUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0byBlbmZvcmNlIHVzZXIgdmVyaWZpY2F0aW9uIGJ5IGRlZmF1bHRcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIGVuZm9yY2VVc2VyVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmYXVsdCBhdHRlc3RhdGlvbiBjb252ZXlhbmNlIHByZWZlcmVuY2VcclxuICAgKiBAZGVmYXVsdCBcIm5vbmVcIlxyXG4gICAqL1xyXG4gIGRlZmF1bHRBdHRlc3RhdGlvbj86IEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmF1bHQgYXV0aGVudGljYXRvciBzZWxlY3Rpb24gY3JpdGVyaWFcclxuICAgKi9cclxuICBkZWZhdWx0QXV0aGVudGljYXRvclNlbGVjdGlvbj86IEF1dGhlbnRpY2F0b3JTZWxlY3Rpb25Dcml0ZXJpYTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgV2ViQXV0aG4gc2VydmljZVxyXG4gKiBOb3RlOiByZWx5aW5nUGFydHkgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb25cclxuICovXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX1dFQkFVVEhOX0NPTkZJRzogT21pdDxXZWJBdXRobkNvbmZpZywgJ3JlbHlpbmdQYXJ0eSc+ID0ge1xyXG4gIGRlZmF1bHRUaW1lb3V0OiA2MDAwMCxcclxuICBkZWZhdWx0QWxnb3JpdGhtczogW1xyXG4gICAgeyB0eXBlOiAncHVibGljLWtleScsIGFsZzogLTcgfSwgLy8gRVMyNTYgKEVDRFNBIHcvIFNIQS0yNTYpXHJcbiAgICB7IHR5cGU6ICdwdWJsaWMta2V5JywgYWxnOiAtMjU3IH0sIC8vIFJTMjU2IChSU0FTU0EtUEtDUzEtdjFfNSB3LyBTSEEtMjU2KVxyXG4gIF0sXHJcbiAgZW5mb3JjZVVzZXJWZXJpZmljYXRpb246IGZhbHNlLFxyXG4gIGRlZmF1bHRBdHRlc3RhdGlvbjogJ25vbmUnLFxyXG4gIGRlZmF1bHRBdXRoZW50aWNhdG9yU2VsZWN0aW9uOiB7XHJcbiAgICB1c2VyVmVyaWZpY2F0aW9uOiAncHJlZmVycmVkJyxcclxuICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEluamVjdGlvbiB0b2tlbiBmb3IgV2ViQXV0aG4gY29uZmlndXJhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFdFQkFVVEhOX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxXZWJBdXRobkNvbmZpZz4oXHJcbiAgJ1dFQkFVVEhOX0NPTkZJRydcclxuKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgV2ViQXV0aG4gY29uZmlndXJhdGlvbiB3aXRoIHJlcXVpcmVkIHJlbHlpbmcgcGFydHkgaW5mb3JtYXRpb25cclxuICogQHBhcmFtIHJlbHlpbmdQYXJ0eSBSZXF1aXJlZCByZWx5aW5nIHBhcnR5IGNvbmZpZ3VyYXRpb25cclxuICogQHBhcmFtIG92ZXJyaWRlcyBPcHRpb25hbCBjb25maWd1cmF0aW9uIG92ZXJyaWRlc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYkF1dGhuQ29uZmlnKFxyXG4gIHJlbHlpbmdQYXJ0eTogUmVseWluZ1BhcnR5Q29uZmlnLFxyXG4gIG92ZXJyaWRlcz86IFBhcnRpYWw8T21pdDxXZWJBdXRobkNvbmZpZywgJ3JlbHlpbmdQYXJ0eSc+PlxyXG4pOiBXZWJBdXRobkNvbmZpZyB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHJlbHlpbmdQYXJ0eSxcclxuICAgIC4uLkRFRkFVTFRfV0VCQVVUSE5fQ09ORklHLFxyXG4gICAgLi4ub3ZlcnJpZGVzLFxyXG4gIH07XHJcbn1cclxuIl19","/**\n * WebAuthn Utility Functions\n * Centralized utilities for ArrayBuffer conversions and WebAuthn-specific operations\n * This is the single source of truth for data transformation functions\n */\n/**\n * Converts a string to ArrayBuffer\n */\nexport function stringToArrayBuffer(str) {\n const encoder = new TextEncoder();\n return encoder.encode(str);\n}\n/**\n * Converts ArrayBuffer to string\n */\nexport function arrayBufferToString(buffer) {\n const decoder = new TextDecoder();\n return decoder.decode(buffer);\n}\n/**\n * Converts ArrayBuffer to base64 string\n */\nexport function arrayBufferToBase64(buffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n/**\n * Converts base64 string to ArrayBuffer\n */\nexport function base64ToArrayBuffer(base64) {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n}\n/**\n * Converts base64url string to ArrayBuffer\n */\nexport function base64urlToArrayBuffer(base64url) {\n // Convert base64url to base64\n const base64 = base64url.replace(/-/g, '+').replace(/_/g, '/');\n // Add padding if necessary\n const padded = base64 + '==='.slice(0, (4 - (base64.length % 4)) % 4);\n return base64ToArrayBuffer(padded);\n}\n/**\n * Converts ArrayBuffer to base64url string\n * This is the canonical implementation used throughout the library\n */\nexport function arrayBufferToBase64url(buffer) {\n const base64 = arrayBufferToBase64(buffer);\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n}\n/**\n * Generates a random challenge as ArrayBuffer\n */\nexport function generateChallenge(length = 32) {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return array.buffer;\n}\n/**\n * Generates a random user ID as ArrayBuffer\n */\nexport function generateUserId(length = 32) {\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return array.buffer;\n}\n/**\n * Converts credential ID string to ArrayBuffer for WebAuthn API\n */\nexport function credentialIdToArrayBuffer(credentialId) {\n return base64urlToArrayBuffer(credentialId);\n}\n/**\n * Converts ArrayBuffer credential ID to string\n */\nexport function arrayBufferToCredentialId(buffer) {\n return arrayBufferToBase64url(buffer);\n}\n/**\n * Checks if the current environment supports WebAuthn\n */\nexport function isWebAuthnSupported() {\n return !!(typeof window !== 'undefined' &&\n window.PublicKeyCredential &&\n typeof navigator !== 'undefined' &&\n navigator.credentials &&\n typeof navigator.credentials.create === 'function' &&\n typeof navigator.credentials.get === 'function');\n}\n/**\n * Checks if platform authenticator is available\n */\nexport async function isPlatformAuthenticatorAvailable() {\n if (!isWebAuthnSupported()) {\n return false;\n }\n try {\n return await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n }\n catch {\n return false;\n }\n}\n/**\n * Gets supported authenticator transports for this platform\n * Enhanced detection with better browser compatibility\n */\nexport function getSupportedTransports() {\n const transports = ['usb', 'internal'];\n // Add NFC support for Android devices\n if (typeof navigator !== 'undefined' &&\n /Android/i.test(navigator.userAgent)) {\n transports.push('nfc');\n }\n // Add BLE support for modern browsers with Web Bluetooth API\n if (typeof navigator !== 'undefined' && navigator.bluetooth) {\n transports.push('ble');\n }\n return transports;\n}\n/**\n * Validates that required WebAuthn options are present\n */\nexport function validateRegistrationOptions(options) {\n if (!options.user) {\n throw new Error('User information is required for registration');\n }\n if (!options.user.id) {\n throw new Error('User ID is required for registration');\n }\n if (!options.user.name) {\n throw new Error('User name is required for registration');\n }\n if (!options.user.displayName) {\n throw new Error('User display name is required for registration');\n }\n if (!options.rp) {\n throw new Error('Relying party information is required for registration');\n }\n if (!options.rp.name) {\n throw new Error('Relying party name is required for registration');\n }\n}\n/**\n * Creates default public key credential parameters\n */\nexport function getDefaultPubKeyCredParams() {\n return [\n {\n type: 'public-key',\n alg: -7, // ES256\n },\n {\n type: 'public-key',\n alg: -257, // RS256\n },\n ];\n}\n/**\n * Enhanced type guard to detect JSON-formatted WebAuthn options\n * More robust than simple challenge type checking\n */\nexport function isJSONOptions(options) {\n if (!options || typeof options !== 'object') {\n return false;\n }\n // Check multiple indicators that this is JSON format (base64url strings)\n return (typeof options.challenge === 'string' ||\n (options.user && typeof options.user.id === 'string') ||\n (options.allowCredentials?.length > 0 &&\n typeof options.allowCredentials[0]?.id === 'string') ||\n (options.excludeCredentials?.length > 0 &&\n typeof options.excludeCredentials[0]?.id === 'string'));\n}\n/**\n * Type guard to check if input is a PublicKeyCredential\n */\nexport function isPublicKeyCredential(credential) {\n return credential !== null && credential.type === 'public-key';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXV0aG4udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC13ZWJhdXRobi9zcmMvbGliL3V0aWxzL3dlYmF1dGhuLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFXO0lBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFtQjtJQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBbUI7SUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFjO0lBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixNQUFNLEtBQUssR0FB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Q0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxVQUE2QjtJQUU3QixPQUFPLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUM7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBXZWJBdXRobiBVdGlsaXR5IEZ1bmN0aW9uc1xyXG4gKiBDZW50cmFsaXplZCB1dGlsaXRpZXMgZm9yIEFycmF5QnVmZmVyIGNvbnZlcnNpb25zIGFuZCBXZWJBdXRobi1zcGVjaWZpYyBvcGVyYXRpb25zXHJcbiAqIFRoaXMgaXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGRhdGEgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb25zXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIEFycmF5QnVmZmVyXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9BcnJheUJ1ZmZlcihzdHI6IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcclxuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XHJcbiAgcmV0dXJuIGVuY29kZXIuZW5jb2RlKHN0cik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBBcnJheUJ1ZmZlciB0byBzdHJpbmdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhcnJheUJ1ZmZlclRvU3RyaW5nKGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoYnVmZmVyKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIEFycmF5QnVmZmVyIHRvIGJhc2U2NCBzdHJpbmdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICBsZXQgYmluYXJ5ID0gJyc7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5ieXRlTGVuZ3RoOyBpKyspIHtcclxuICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICB9XHJcbiAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGJhc2U2NCBzdHJpbmcgdG8gQXJyYXlCdWZmZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjRUb0FycmF5QnVmZmVyKGJhc2U2NDogc3RyaW5nKTogQXJyYXlCdWZmZXIge1xyXG4gIGNvbnN0IGJpbmFyeSA9IGF0b2IoYmFzZTY0KTtcclxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeS5sZW5ndGgpO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICBieXRlc1tpXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGkpO1xyXG4gIH1cclxuICByZXR1cm4gYnl0ZXMuYnVmZmVyO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydHMgYmFzZTY0dXJsIHN0cmluZyB0byBBcnJheUJ1ZmZlclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NHVybFRvQXJyYXlCdWZmZXIoYmFzZTY0dXJsOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XHJcbiAgLy8gQ29udmVydCBiYXNlNjR1cmwgdG8gYmFzZTY0XHJcbiAgY29uc3QgYmFzZTY0ID0gYmFzZTY0dXJsLnJlcGxhY2UoLy0vZywgJysnKS5yZXBsYWNlKC9fL2csICcvJyk7XHJcbiAgLy8gQWRkIHBhZGRpbmcgaWYgbmVjZXNzYXJ5XHJcbiAgY29uc3QgcGFkZGVkID0gYmFzZTY0ICsgJz09PScuc2xpY2UoMCwgKDQgLSAoYmFzZTY0Lmxlbmd0aCAlIDQpKSAlIDQpO1xyXG4gIHJldHVybiBiYXNlNjRUb0FycmF5QnVmZmVyKHBhZGRlZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBBcnJheUJ1ZmZlciB0byBiYXNlNjR1cmwgc3RyaW5nXHJcbiAqIFRoaXMgaXMgdGhlIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiB1c2VkIHRocm91Z2hvdXQgdGhlIGxpYnJhcnlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmFzZTY0dXJsKGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGJhc2U2NCA9IGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyKTtcclxuICByZXR1cm4gYmFzZTY0LnJlcGxhY2UoL1xcKy9nLCAnLScpLnJlcGxhY2UoL1xcLy9nLCAnXycpLnJlcGxhY2UoLz0vZywgJycpO1xyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIGNoYWxsZW5nZSBhcyBBcnJheUJ1ZmZlclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2hhbGxlbmdlKGxlbmd0aCA9IDMyKTogQXJyYXlCdWZmZXIge1xyXG4gIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcclxuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcclxuICByZXR1cm4gYXJyYXkuYnVmZmVyO1xyXG59XHJcblxyXG4vKipcclxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHVzZXIgSUQgYXMgQXJyYXlCdWZmZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVVzZXJJZChsZW5ndGggPSAzMik6IEFycmF5QnVmZmVyIHtcclxuICBjb25zdCBhcnJheSA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XHJcbiAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSk7XHJcbiAgcmV0dXJuIGFycmF5LmJ1ZmZlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGNyZWRlbnRpYWwgSUQgc3RyaW5nIHRvIEFycmF5QnVmZmVyIGZvciBXZWJBdXRobiBBUElcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVkZW50aWFsSWRUb0FycmF5QnVmZmVyKGNyZWRlbnRpYWxJZDogc3RyaW5nKTogQXJyYXlCdWZmZXIge1xyXG4gIHJldHVybiBiYXNlNjR1cmxUb0FycmF5QnVmZmVyKGNyZWRlbnRpYWxJZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBBcnJheUJ1ZmZlciBjcmVkZW50aWFsIElEIHRvIHN0cmluZ1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5QnVmZmVyVG9DcmVkZW50aWFsSWQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFycmF5QnVmZmVyVG9CYXNlNjR1cmwoYnVmZmVyKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBXZWJBdXRoblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViQXV0aG5TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuICEhKFxyXG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgIHdpbmRvdy5QdWJsaWNLZXlDcmVkZW50aWFsICYmXHJcbiAgICB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgbmF2aWdhdG9yLmNyZWRlbnRpYWxzICYmXHJcbiAgICB0eXBlb2YgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxyXG4gICAgdHlwZW9mIG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQgPT09ICdmdW5jdGlvbidcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIGlmIHBsYXRmb3JtIGF1dGhlbnRpY2F0b3IgaXMgYXZhaWxhYmxlXHJcbiAqL1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgaWYgKCFpc1dlYkF1dGhuU3VwcG9ydGVkKCkpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gYXdhaXQgUHVibGljS2V5Q3JlZGVudGlhbC5pc1VzZXJWZXJpZnlpbmdQbGF0Zm9ybUF1dGhlbnRpY2F0b3JBdmFpbGFibGUoKTtcclxuICB9IGNhdGNoIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHN1cHBvcnRlZCBhdXRoZW50aWNhdG9yIHRyYW5zcG9ydHMgZm9yIHRoaXMgcGxhdGZvcm1cclxuICogRW5oYW5jZWQgZGV0ZWN0aW9uIHdpdGggYmV0dGVyIGJyb3dzZXIgY29tcGF0aWJpbGl0eVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFN1cHBvcnRlZFRyYW5zcG9ydHMoKTogQXV0aGVudGljYXRvclRyYW5zcG9ydFtdIHtcclxuICBjb25zdCB0cmFuc3BvcnRzOiBBdXRoZW50aWNhdG9yVHJhbnNwb3J0W10gPSBbJ3VzYicsICdpbnRlcm5hbCddO1xyXG5cclxuICAvLyBBZGQgTkZDIHN1cHBvcnQgZm9yIEFuZHJvaWQgZGV2aWNlc1xyXG4gIGlmIChcclxuICAgIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAvQW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudClcclxuICApIHtcclxuICAgIHRyYW5zcG9ydHMucHVzaCgnbmZjJyk7XHJcbiAgfVxyXG5cclxuICAvLyBBZGQgQkxFIHN1cHBvcnQgZm9yIG1vZGVybiBicm93c2VycyB3aXRoIFdlYiBCbHVldG9vdGggQVBJXHJcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChuYXZpZ2F0b3IgYXMgYW55KS5ibHVldG9vdGgpIHtcclxuICAgIHRyYW5zcG9ydHMucHVzaCgnYmxlJyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJhbnNwb3J0cztcclxufVxyXG5cclxuLyoqXHJcbiAqIFZhbGlkYXRlcyB0aGF0IHJlcXVpcmVkIFdlYkF1dGhuIG9wdGlvbnMgYXJlIHByZXNlbnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJlZ2lzdHJhdGlvbk9wdGlvbnMob3B0aW9uczogYW55KTogdm9pZCB7XHJcbiAgaWYgKCFvcHRpb25zLnVzZXIpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignVXNlciBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZCBmb3IgcmVnaXN0cmF0aW9uJyk7XHJcbiAgfVxyXG5cclxuICBpZiAoIW9wdGlvbnMudXNlci5pZCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIElEIGlzIHJlcXVpcmVkIGZvciByZWdpc3RyYXRpb24nKTtcclxuICB9XHJcblxyXG4gIGlmICghb3B0aW9ucy51c2VyLm5hbWUpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignVXNlciBuYW1lIGlzIHJlcXVpcmVkIGZvciByZWdpc3RyYXRpb24nKTtcclxuICB9XHJcblxyXG4gIGlmICghb3B0aW9ucy51c2VyLmRpc3BsYXlOYW1lKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgZGlzcGxheSBuYW1lIGlzIHJlcXVpcmVkIGZvciByZWdpc3RyYXRpb24nKTtcclxuICB9XHJcblxyXG4gIGlmICghb3B0aW9ucy5ycCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZWx5aW5nIHBhcnR5IGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkIGZvciByZWdpc3RyYXRpb24nKTtcclxuICB9XHJcblxyXG4gIGlmICghb3B0aW9ucy5ycC5uYW1lKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbHlpbmcgcGFydHkgbmFtZSBpcyByZXF1aXJlZCBmb3IgcmVnaXN0cmF0aW9uJyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBkZWZhdWx0IHB1YmxpYyBrZXkgY3JlZGVudGlhbCBwYXJhbWV0ZXJzXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFB1YktleUNyZWRQYXJhbXMoKTogUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnNbXSB7XHJcbiAgcmV0dXJuIFtcclxuICAgIHtcclxuICAgICAgdHlwZTogJ3B1YmxpYy1rZXknLFxyXG4gICAgICBhbGc6IC03LCAvLyBFUzI1NlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgdHlwZTogJ3B1YmxpYy1rZXknLFxyXG4gICAgICBhbGc6IC0yNTcsIC8vIFJTMjU2XHJcbiAgICB9LFxyXG4gIF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbmhhbmNlZCB0eXBlIGd1YXJkIHRvIGRldGVjdCBKU09OLWZvcm1hdHRlZCBXZWJBdXRobiBvcHRpb25zXHJcbiAqIE1vcmUgcm9idXN0IHRoYW4gc2ltcGxlIGNoYWxsZW5nZSB0eXBlIGNoZWNraW5nXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNKU09OT3B0aW9ucyhvcHRpb25zOiBhbnkpOiBib29sZWFuIHtcclxuICBpZiAoIW9wdGlvbnMgfHwgdHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBDaGVjayBtdWx0aXBsZSBpbmRpY2F0b3JzIHRoYXQgdGhpcyBpcyBKU09OIGZvcm1hdCAoYmFzZTY0dXJsIHN0cmluZ3MpXHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBvcHRpb25zLmNoYWxsZW5nZSA9PT0gJ3N0cmluZycgfHxcclxuICAgIChvcHRpb25zLnVzZXIgJiYgdHlwZW9mIG9wdGlvbnMudXNlci5pZCA9PT0gJ3N0cmluZycpIHx8XHJcbiAgICAob3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgIHR5cGVvZiBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHNbMF0/LmlkID09PSAnc3RyaW5nJykgfHxcclxuICAgIChvcHRpb25zLmV4Y2x1ZGVDcmVkZW50aWFscz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICB0eXBlb2Ygb3B0aW9ucy5leGNsdWRlQ3JlZGVudGlhbHNbMF0/LmlkID09PSAnc3RyaW5nJylcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBpbnB1dCBpcyBhIFB1YmxpY0tleUNyZWRlbnRpYWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1B1YmxpY0tleUNyZWRlbnRpYWwoXHJcbiAgY3JlZGVudGlhbDogQ3JlZGVudGlhbCB8IG51bGxcclxuKTogY3JlZGVudGlhbCBpcyBQdWJsaWNLZXlDcmVkZW50aWFsIHtcclxuICByZXR1cm4gY3JlZGVudGlhbCAhPT0gbnVsbCAmJiBjcmVkZW50aWFsLnR5cGUgPT09ICdwdWJsaWMta2V5JztcclxufVxyXG4iXX0=","/**\n * Enhanced WebAuthn Service\n *\n * Provides a clean, high-level API for WebAuthn operations with:\n * - Modern inject() pattern instead of constructor DI\n * - Flexible options (JSON base64url strings OR native ArrayBuffers)\n * - Enhanced error handling with specific error types\n * - Native browser parsing functions for optimal performance\n * - Clean, developer-friendly response objects\n */\nimport { Injectable, inject } from '@angular/core';\nimport { from, throwError } from 'rxjs';\nimport { map, catchError } from 'rxjs/operators';\nimport { isRegisterConfig, isAuthenticateConfig, } from '../models/register-config.models';\nimport { buildCreationOptionsFromConfig, buildRequestOptionsFromConfig, validateRegisterConfig, validateAuthenticateConfig, } from '../utils/preset.utils';\nimport { WebAuthnError, WebAuthnErrorType, UserCancelledError, AuthenticatorError, InvalidOptionsError, UnsupportedOperationError, SecurityError, TimeoutError, } from '../errors/webauthn.errors';\nimport { WEBAUTHN_CONFIG } from '../config/webauthn.config';\n// Import consolidated utility functions\nimport { arrayBufferToBase64url, getSupportedTransports, isJSONOptions, isPublicKeyCredential, isWebAuthnSupported, } from '../utils/webauthn.utils';\nimport * as i0 from \"@angular/core\";\n/**\n * Enhanced Angular service for WebAuthn operations\n * Provides a clean abstraction over the WebAuthn API with RxJS observables\n * and enhanced error handling\n */\nexport class WebAuthnService {\n config = inject(WEBAUTHN_CONFIG);\n /**\n * Checks if WebAuthn is supported in the current browser\n */\n isSupported() {\n return isWebAuthnSupported();\n }\n /**\n * Gets comprehensive WebAuthn support information\n */\n getSupport() {\n if (!this.isSupported()) {\n return throwError(() => new UnsupportedOperationError('WebAuthn is not supported in this browser'));\n }\n return from(PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()).pipe(map((isPlatformAvailable) => ({\n isSupported: true,\n isPlatformAuthenticatorAvailable: isPlatformAvailable,\n supportedTransports: getSupportedTransports(),\n })), catchError((error) => throwError(() => new WebAuthnError(WebAuthnErrorType.UNKNOWN, 'Failed to check WebAuthn support', error))));\n }\n /**\n * Registers a new WebAuthn credential with flexible configuration support\n *\n * @param input Either a high-level RegisterConfig with presets, or direct WebAuthn creation options\n * @returns Observable of RegistrationResponse with clean, developer-friendly format\n *\n * @example\n * ```typescript\n * // Simple preset usage\n * this.webAuthnService.register({ username: 'john.doe', preset: 'passkey' });\n *\n * // Preset with overrides\n * this.webAuthnService.register({\n * username: 'john.doe',\n * preset: 'passkey',\n * authenticatorSelection: { userVerification: 'required' }\n * });\n *\n * // Direct WebAuthn options (native)\n * const nativeOptions: PublicKeyCredentialCreationOptions = {\n * challenge: new Uint8Array([...]),\n * rp: { name: \"My App\" },\n * user: { id: new Uint8Array([...]), name: \"user@example.com\", displayName: \"User\" },\n * pubKeyCredParams: [{ type: \"public-key\", alg: -7 }]\n * };\n * this.webAuthnService.register(nativeOptions);\n *\n * // Direct WebAuthn options (JSON)\n * const jsonOptions: PublicKeyCredentialCreationOptionsJSON = {\n * challenge: \"Y2hhbGxlbmdl\",\n * rp: { name: \"My App\" },\n * user: { id: \"dXNlcklk\", name: \"user@example.com\", displayName: \"User\" },\n * pubKeyCredParams: [{ type: \"public-key\", alg: -7 }]\n * };\n * this.webAuthnService.register(jsonOptions);\n * ```\n */\n register(input) {\n if (!this.isSupported()) {\n return throwError(() => new UnsupportedOperationError('WebAuthn is not supported in this browser'));\n }\n try {\n let creationOptions;\n if (isRegisterConfig(input)) {\n // High-level config path: validate, resolve preset, build options\n validateRegisterConfig(input);\n creationOptions = buildCreationOptionsFromConfig(input, this.config);\n }\n else {\n // Direct options path: use provided options\n creationOptions = input;\n }\n const parsedOptions = this.parseRegistrationOptions(creationOptions);\n return from(navigator.credentials.create({ publicKey: parsedOptions })).pipe(map((credential) => this.processRegistrationResult(credential)), catchError((error) => this.handleWebAuthnError(error)));\n }\n catch (error) {\n return throwError(() => new InvalidOptionsError('Failed to process registration input', error));\n }\n }\n /**\n * Authenticates using an existing WebAuthn credential with flexible configuration support\n *\n * @param input Either a high-level AuthenticateConfig with presets, or direct WebAuthn request options\n * @returns Observable of AuthenticationResponse with clean, developer-friendly format\n *\n * @example\n * ```typescript\n * // Simple preset usage\n * this.webAuthnService.authenticate({ preset: 'passkey' });\n *\n * // Config with credential filtering\n * this.webAuthnService.authenticate({\n * username: 'john.doe',\n * preset: 'secondFactor',\n * allowCredentials: ['credential-id-1', 'credential-id-2']\n * });\n *\n * // Direct WebAuthn options (JSON)\n * const jsonOptions: PublicKeyCredentialRequestOptionsJSON = {\n * challenge: \"Y2hhbGxlbmdl\",\n * allowCredentials: [{\n * type: \"public-key\",\n * id: \"Y3JlZElk\"\n * }]\n * };\n * this.webAuthnService.authenticate(jsonOptions);\n *\n * // Direct WebAuthn options (native)\n * const nativeOptions: PublicKeyCredentialRequestOptions = {\n * challenge: new Uint8Array([...]),\n * allowCredentials: [{\n * type: \"public-key\",\n * id: new Uint8Array([...])\n * }]\n * };\n * this.webAuthnService.authenticate(nativeOptions);\n * ```\n */\n authenticate(input) {\n if (!this.isSupported()) {\n return throwError(() => new UnsupportedOperationError('WebAuthn is not supported in this browser'));\n }\n try {\n let requestOptions;\n if (isAuthenticateConfig(input)) {\n // High-level config path: validate, resolve preset, build options\n validateAuthenticateConfig(input);\n requestOptions = buildRequestOptionsFromConfig(input, this.config);\n }\n else {\n // Direct options path: use provided options\n requestOptions = input;\n }\n const parsedOptions = this.parseAuthenticationOptions(requestOptions);\n return from(navigator.credentials.get({ publicKey: parsedOptions })).pipe(map((credential) => this.processAuthenticationResult(credential)), catchError((error) => this.handleWebAuthnError(error)));\n }\n catch (error) {\n return throwError(() => new InvalidOptionsError('Failed to process authentication input', error));\n }\n }\n /**\n * Parses registration options, handling both JSON and native formats\n */\n parseRegistrationOptions(options) {\n if (isJSONOptions(options)) {\n // Use native browser function for JSON options\n return PublicKeyCredential.parseCreationOptionsFromJSON(options);\n }\n else {\n // Options are already in native format\n return options;\n }\n }\n /**\n * Parses authentication options, handling both JSON and native formats\n */\n parseAuthenticationOptions(options) {\n if (isJSONOptions(options)) {\n // Use native browser function for JSON options\n return PublicKeyCredential.parseRequestOptionsFromJSON(options);\n }\n else {\n // Options are already in native format\n return options;\n }\n }\n /**\n * Processes the raw credential result into a clean RegistrationResponse\n */\n processRegistrationResult(credential) {\n if (!isPublicKeyCredential(credential)) {\n throw new AuthenticatorError('No credential returned from authenticator');\n }\n const response = credential.response;\n // Extract data using the response methods\n const credentialId = arrayBufferToBase64url(credential.rawId);\n const transports = (response.getTransports?.() ||\n []);\n let publicKey;\n try {\n const publicKeyBuffer = response.getPublicKey?.();\n if (publicKeyBuffer) {\n publicKey = arrayBufferToBase64url(publicKeyBuffer);\n }\n }\n catch {\n // Public key extraction failed - this is okay, not all algorithms are supported\n }\n // Create the raw response for backward compatibility\n const rawResponse = {\n credentialId,\n publicKey: publicKey ||\n arrayBufferToBase64url(response.getPublicKey?.() || new ArrayBuffer(0)),\n attestationObject: arrayBufferToBase64url(response.attestationObject),\n clientDataJSON: arrayBufferToBase64url(response.clientDataJSON),\n transports: transports,\n };\n return {\n success: true,\n credentialId,\n publicKey,\n transports,\n rawResponse,\n };\n }\n /**\n * Processes the raw credential result into a clean AuthenticationResponse\n */\n processAuthenticationResult(credential) {\n if (!isPublicKeyCredential(credential)) {\n throw new AuthenticatorError('No credential returned from authenticator');\n }\n const response = credential.response;\n const credentialId = arrayBufferToBase64url(credential.rawId);\n let userHandle;\n if (response.userHandle) {\n userHandle = arrayBufferToBase64url(response.userHandle);\n }\n // Create the raw response for backward compatibility\n const rawResponse = {\n credentialId,\n authenticatorData: arrayBufferToBase64url(response.authenticatorData),\n clientDataJSON: arrayBufferToBase64url(response.clientDataJSON),\n signature: arrayBufferToBase64url(response.signature),\n userHandle,\n };\n return {\n success: true,\n credentialId,\n userHandle,\n rawResponse,\n };\n }\n /**\n * Enhanced error handling that maps DOMExceptions to specific error types\n */\n handleWebAuthnError(error) {\n // Handle DOMExceptions from WebAuthn API\n if (error instanceof DOMException) {\n switch (error.name) {\n case 'NotAllowedError':\n return throwError(() => new UserCancelledError(error));\n case 'InvalidStateError':\n return throwError(() => new AuthenticatorError('Invalid authenticator state', error));\n case 'NotSupportedError':\n return throwError(() => new UnsupportedOperationError('Operation not supported', error));\n case 'SecurityError':\n return throwError(() => new SecurityError('Security error occurred', error));\n case 'TimeoutError':\n return throwError(() => new TimeoutError('Operation timed out', error));\n case 'EncodingError':\n return throwError(() => new InvalidOptionsError('Encoding error in options', error));\n default:\n return throwError(() => new WebAuthnError(WebAuthnErrorType.UNKNOWN, `Unknown WebAuthn error: ${error.message}`, error));\n }\n }\n // Handle JSON parsing errors\n if (error instanceof TypeError &&\n (error.message.includes('parseCreationOptionsFromJSON') ||\n error.message.includes('parseRequestOptionsFromJSON'))) {\n return throwError(() => new InvalidOptionsError('Invalid JSON options format', error));\n }\n // Handle other errors\n return throwError(() => new WebAuthnError(WebAuthnErrorType.UNKNOWN, `Unexpected error: ${error.message}`, error));\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: WebAuthnService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: WebAuthnService, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: WebAuthnService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXV0aG4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LXdlYmF1dGhuL3NyYy9saWIvc2VydmljZXMvd2ViYXV0aG4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBVWpELE9BQU8sRUFHTCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEdBQ3JCLE1BQU0sa0NBQWtDLENBQUM7QUFFMUMsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0Isc0JBQXNCLEVBQ3RCLDBCQUEwQixHQUMzQixNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixhQUFhLEVBQ2IsWUFBWSxHQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELHdDQUF3QztBQUN4QyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDOztBQUVqQzs7OztHQUlHO0FBSUgsTUFBTSxPQUFPLGVBQWU7SUFDVCxNQUFNLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRWxEOztPQUVHO0lBQ0gsV0FBVztRQUNULE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lB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QVUsQ0FDZixHQUFHLEVBQUUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUNwRSxDQUFDO1FBQ0osQ0FBQztRQUVELHNCQUFzQjtRQUN0QixPQUFPLFVBQVUsQ0FDZixHQUFHLEVBQUUsQ0FDSCxJQUFJLGFBQWEsQ0FDZixpQkFBaUIsQ0FBQyxPQUFPLEVBQ3pCLHFCQUFxQixLQUFLLENBQUMsT0FBTyxFQUFFLEVBQ3BDLEtBQUssQ0FDTixDQUNKLENBQUM7SUFDSixDQUFDO3VHQWxZVSxlQUFlOzJHQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBFbmhhbmNlZCBXZWJBdXRobiBTZXJ2aWNlXHJcbiAqXHJcbiAqIFByb3ZpZGVzIGEgY2xlYW4sIGhpZ2gtbGV2ZWwgQVBJIGZvciBXZWJBdXRobiBvcGVyYXRpb25zIHdpdGg6XHJcbiAqIC0gTW9kZXJuIGluamVjdCgpIHBhdHRlcm4gaW5zdGVhZCBvZiBjb25zdHJ1Y3RvciBESVxyXG4gKiAtIEZsZXhpYmxlIG9wdGlvbnMgKEpTT04gYmFzZTY0dXJsIHN0cmluZ3MgT1IgbmF0aXZlIEFycmF5QnVmZmVycylcclxuICogLSBFbmhhbmNlZCBlcnJvciBoYW5kbGluZyB3aXRoIHNwZWNpZmljIGVycm9yIHR5cGVzXHJcbiAqIC0gTmF0aXZlIGJyb3dzZXIgcGFyc2luZyBmdW5jdGlvbnMgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2VcclxuICogLSBDbGVhbiwgZGV2ZWxvcGVyLWZyaWVuZGx5IHJlc3BvbnNlIG9iamVjdHNcclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFdlYkF1dGhuU3VwcG9ydCxcclxuICBSZWdpc3RyYXRpb25SZXNwb25zZSxcclxuICBBdXRoZW50aWNhdGlvblJlc3BvbnNlLFxyXG4gIFdlYkF1dGhuUmVnaXN0cmF0aW9uUmVzdWx0LFxyXG4gIFdlYkF1dGhuQXV0aGVudGljYXRpb25SZXN1bHQsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3dlYmF1dGhuLm1vZGVscyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFJlZ2lzdGVySW5wdXQsXHJcbiAgQXV0aGVudGljYXRlSW5wdXQsXHJcbiAgaXNSZWdpc3RlckNvbmZpZyxcclxuICBpc0F1dGhlbnRpY2F0ZUNvbmZpZyxcclxufSBmcm9tICcuLi9tb2RlbHMvcmVnaXN0ZXItY29uZmlnLm1vZGVscyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIGJ1aWxkQ3JlYXRpb25PcHRpb25zRnJvbUNvbmZpZyxcclxuICBidWlsZFJlcXVlc3RPcHRpb25zRnJvbUNvbmZpZyxcclxuICB2YWxpZGF0ZVJlZ2lzdGVyQ29uZmlnLFxyXG4gIHZhbGlkYXRlQXV0aGVudGljYXRlQ29uZmlnLFxyXG59IGZyb20gJy4uL3V0aWxzL3ByZXNldC51dGlscyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFdlYkF1dGhuRXJyb3IsXHJcbiAgV2ViQXV0aG5FcnJvclR5cGUsXHJcbiAgVXNlckNhbmNlbGxlZEVycm9yLFxyXG4gIEF1dGhlbnRpY2F0b3JFcnJvcixcclxuICBJbnZhbGlkT3B0aW9uc0Vycm9yLFxyXG4gIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IsXHJcbiAgU2VjdXJpdHlFcnJvcixcclxuICBUaW1lb3V0RXJyb3IsXHJcbn0gZnJvbSAnLi4vZXJyb3JzL3dlYmF1dGhuLmVycm9ycyc7XHJcblxyXG5pbXBvcnQgeyBXRUJBVVRITl9DT05GSUcgfSBmcm9tICcuLi9jb25maWcvd2ViYXV0aG4uY29uZmlnJztcclxuXHJcbi8vIEltcG9ydCBjb25zb2xpZGF0ZWQgdXRpbGl0eSBmdW5jdGlvbnNcclxuaW1wb3J0IHtcclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0dXJsLFxyXG4gIGdldFN1cHBvcnRlZFRyYW5zcG9ydHMsXHJcbiAgaXNKU09OT3B0aW9ucyxcclxuICBpc1B1YmxpY0tleUNyZWRlbnRpYWwsXHJcbiAgaXNXZWJBdXRoblN1cHBvcnRlZCxcclxufSBmcm9tICcuLi91dGlscy93ZWJhdXRobi51dGlscyc7XHJcblxyXG4vKipcclxuICogRW5oYW5jZWQgQW5ndWxhciBzZXJ2aWNlIGZvciBXZWJBdXRobiBvcGVyYXRpb25zXHJcbiAqIFByb3ZpZGVzIGEgY2xlYW4gYWJzdHJhY3Rpb24gb3ZlciB0aGUgV2ViQXV0aG4gQVBJIHdpdGggUnhKUyBvYnNlcnZhYmxlc1xyXG4gKiBhbmQgZW5oYW5jZWQgZXJyb3IgaGFuZGxpbmdcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXZWJBdXRoblNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFdFQkFVVEhOX0NPTkZJRyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBXZWJBdXRobiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGN1cnJlbnQgYnJvd3NlclxyXG4gICAqL1xyXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGlzV2ViQXV0aG5TdXBwb3J0ZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgY29tcHJlaGVuc2l2ZSBXZWJBdXRobiBzdXBwb3J0IGluZm9ybWF0aW9uXHJcbiAgICovXHJcbiAgZ2V0U3VwcG9ydCgpOiBPYnNlcnZhYmxlPFdlYkF1dGhuU3VwcG9ydD4ge1xyXG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKCkpIHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXHJcbiAgICAgICAgKCkgPT5cclxuICAgICAgICAgIG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFxyXG4gICAgICAgICAgICAnV2ViQXV0aG4gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIFB1YmxpY0tleUNyZWRlbnRpYWwuaXNVc2VyVmVyaWZ5aW5nUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlKClcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKChpc1BsYXRmb3JtQXZhaWxhYmxlKSA9PiAoe1xyXG4gICAgICAgIGlzU3VwcG9ydGVkOiB0cnVlLFxyXG4gICAgICAgIGlzUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlOiBpc1BsYXRmb3JtQXZhaWxhYmxlLFxyXG4gICAgICAgIHN1cHBvcnRlZFRyYW5zcG9ydHM6IGdldFN1cHBvcnRlZFRyYW5zcG9ydHMoKSxcclxuICAgICAgfSkpLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT5cclxuICAgICAgICB0aHJvd0Vycm9yKFxyXG4gICAgICAgICAgKCkgPT5cclxuICAgICAgICAgICAgbmV3IFdlYkF1dGhuRXJyb3IoXHJcbiAgICAgICAgICAgICAgV2ViQXV0aG5FcnJvclR5cGUuVU5LTk9XTixcclxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGNoZWNrIFdlYkF1dGhuIHN1cHBvcnQnLFxyXG4gICAgICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgYSBuZXcgV2ViQXV0aG4gY3JlZGVudGlhbCB3aXRoIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24gc3VwcG9ydFxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlucHV0IEVpdGhlciBhIGhpZ2gtbGV2ZWwgUmVnaXN0ZXJDb25maWcgd2l0aCBwcmVzZXRzLCBvciBkaXJlY3QgV2ViQXV0aG4gY3JlYXRpb24gb3B0aW9uc1xyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgUmVnaXN0cmF0aW9uUmVzcG9uc2Ugd2l0aCBjbGVhbiwgZGV2ZWxvcGVyLWZyaWVuZGx5IGZvcm1hdFxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICogLy8gU2ltcGxlIHByZXNldCB1c2FnZVxyXG4gICAqIHRoaXMud2ViQXV0aG5TZXJ2aWNlLnJlZ2lzdGVyKHsgdXNlcm5hbWU6ICdqb2huLmRvZScsIHByZXNldDogJ3Bhc3NrZXknIH0pO1xyXG4gICAqXHJcbiAgICogLy8gUHJlc2V0IHdpdGggb3ZlcnJpZGVzXHJcbiAgICogdGhpcy53ZWJBdXRoblNlcnZpY2UucmVnaXN0ZXIoe1xyXG4gICAqICAgdXNlcm5hbWU6ICdqb2huLmRvZScsXHJcbiAgICogICBwcmVzZXQ6ICdwYXNza2V5JyxcclxuICAgKiAgIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb246IHsgdXNlclZlcmlmaWNhdGlvbjogJ3JlcXVpcmVkJyB9XHJcbiAgICogfSk7XHJcbiAgICpcclxuICAgKiAvLyBEaXJlY3QgV2ViQXV0aG4gb3B0aW9ucyAobmF0aXZlKVxyXG4gICAqIGNvbnN0IG5hdGl2ZU9wdGlvbnM6IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgPSB7XHJcbiAgICogICBjaGFsbGVuZ2U6IG5ldyBVaW50OEFycmF5KFsuLi5dKSxcclxuICAgKiAgIHJwOiB7IG5hbWU6IFwiTXkgQXBwXCIgfSxcclxuICAgKiAgIHVzZXI6IHsgaWQ6IG5ldyBVaW50OEFycmF5KFsuLi5dKSwgbmFtZTogXCJ1c2VyQGV4YW1wbGUuY29tXCIsIGRpc3BsYXlOYW1lOiBcIlVzZXJcIiB9LFxyXG4gICAqICAgcHViS2V5Q3JlZFBhcmFtczogW3sgdHlwZTogXCJwdWJsaWMta2V5XCIsIGFsZzogLTcgfV1cclxuICAgKiB9O1xyXG4gICAqIHRoaXMud2ViQXV0aG5TZXJ2aWNlLnJlZ2lzdGVyKG5hdGl2ZU9wdGlvbnMpO1xyXG4gICAqXHJcbiAgICogLy8gRGlyZWN0IFdlYkF1dGhuIG9wdGlvbnMgKEpTT04pXHJcbiAgICogY29uc3QganNvbk9wdGlvbnM6IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNKU09OID0ge1xyXG4gICAqICAgY2hhbGxlbmdlOiBcIlkyaGhiR3hsYm1kbFwiLFxyXG4gICAqICAgcnA6IHsgbmFtZTogXCJNeSBBcHBcIiB9LFxyXG4gICAqICAgdXNlcjogeyBpZDogXCJkWE5sY2tsa1wiLCBuYW1lOiBcInVzZXJAZXhhbXBsZS5jb21cIiwgZGlzcGxheU5hbWU6IFwiVXNlclwiIH0sXHJcbiAgICogICBwdWJLZXlDcmVkUGFyYW1zOiBbeyB0eXBlOiBcInB1YmxpYy1rZXlcIiwgYWxnOiAtNyB9XVxyXG4gICAqIH07XHJcbiAgICogdGhpcy53ZWJBdXRoblNlcnZpY2UucmVnaXN0ZXIoanNvbk9wdGlvbnMpO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyKGlucHV0OiBSZWdpc3RlcklucHV0KTogT2JzZXJ2YWJsZTxSZWdpc3RyYXRpb25SZXNwb25zZT4ge1xyXG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKCkpIHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXHJcbiAgICAgICAgKCkgPT5cclxuICAgICAgICAgIG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFxyXG4gICAgICAgICAgICAnV2ViQXV0aG4gaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGNyZWF0aW9uT3B0aW9uczpcclxuICAgICAgICB8IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNcclxuICAgICAgICB8IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNKU09OO1xyXG5cclxuICAgICAgaWYgKGlzUmVnaXN0ZXJDb25maWcoaW5wdXQpKSB7XHJcbiAgICAgICAgLy8gSGlnaC1sZXZlbCBjb25maWcgcGF0aDogdmFsaWRhdGUsIHJlc29sdmUgcHJlc2V0LCBidWlsZCBvcHRpb25zXHJcbiAgICAgICAgdmFsaWRhdGVSZWdpc3RlckNvbmZpZyhpbnB1dCk7XHJcbiAgICAgICAgY3JlYXRpb25PcHRpb25zID0gYnVpbGRDcmVhdGlvbk9wdGlvbnNGcm9tQ29uZmlnKGlucHV0LCB0aGlzLmNvbmZpZyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gRGlyZWN0IG9wdGlvbnMgcGF0aDogdXNlIHByb3ZpZGVkIG9wdGlvbnNcclxuICAgICAgICBjcmVhdGlvbk9wdGlvbnMgPSBpbnB1dDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHRoaXMucGFyc2VSZWdpc3RyYXRpb25PcHRpb25zKGNyZWF0aW9uT3B0aW9ucyk7XHJcblxyXG4gICAgICByZXR1cm4gZnJvbShcclxuICAgICAgICBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHsgcHVibGljS2V5OiBwYXJzZWRPcHRpb25zIH0pXHJcbiAgICAgICkucGlwZShcclxuICAgICAgICBtYXAoKGNyZWRlbnRpYWwpID0+IHRoaXMucHJvY2Vzc1JlZ2lzdHJhdGlvblJlc3VsdChjcmVkZW50aWFsKSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHRoaXMuaGFuZGxlV2ViQXV0aG5FcnJvcihlcnJvcikpXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcclxuICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgbmV3IEludmFsaWRPcHRpb25zRXJyb3IoXHJcbiAgICAgICAgICAgICdGYWlsZWQgdG8gcHJvY2VzcyByZWdpc3RyYXRpb24gaW5wdXQnLFxyXG4gICAgICAgICAgICBlcnJvciBhcyBFcnJvclxyXG4gICAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXV0aGVudGljYXRlcyB1c2luZyBhbiBleGlzdGluZyBXZWJBdXRobiBjcmVkZW50aWFsIHdpdGggZmxleGlibGUgY29uZmlndXJhdGlvbiBzdXBwb3J0XHJcbiAgICpcclxuICAgKiBAcGFyYW0gaW5wdXQgRWl0aGVyIGEgaGlnaC1sZXZlbCBBdXRoZW50aWNhdGVDb25maWcgd2l0aCBwcmVzZXRzLCBvciBkaXJlY3QgV2ViQXV0aG4gcmVxdWVzdCBvcHRpb25zXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBBdXRoZW50aWNhdGlvblJlc3BvbnNlIHdpdGggY2xlYW4sIGRldmVsb3Blci1mcmllbmRseSBmb3JtYXRcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAqIC8vIFNpbXBsZSBwcmVzZXQgdXNhZ2VcclxuICAgKiB0aGlzLndlYkF1dGhuU2VydmljZS5hdXRoZW50aWNhdGUoeyBwcmVzZXQ6ICdwYXNza2V5JyB9KTtcclxuICAgKlxyXG4gICAqIC8vIENvbmZpZyB3aXRoIGNyZWRlbnRpYWwgZmlsdGVyaW5nXHJcbiAgICogdGhpcy53ZWJBdXRoblNlcnZpY2UuYXV0aGVudGljYXRlKHtcclxuICAgKiAgIHVzZXJuYW1lOiAnam9obi5kb2UnLFxyXG4gICAqICAgcHJlc2V0OiAnc2Vjb25kRmFjdG9yJyxcclxuICAgKiAgIGFsbG93Q3JlZGVudGlhbHM6IFsnY3JlZGVudGlhbC1pZC0xJywgJ2NyZWRlbnRpYWwtaWQtMiddXHJcbiAgICogfSk7XHJcbiAgICpcclxuICAgKiAvLyBEaXJlY3QgV2ViQXV0aG4gb3B0aW9ucyAoSlNPTilcclxuICAgKiBjb25zdCBqc29uT3B0aW9uczogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zSlNPTiA9IHtcclxuICAgKiAgIGNoYWxsZW5nZTogXCJZMmhoYkd4bGJtZGxcIixcclxuICAgKiAgIGFsbG93Q3JlZGVudGlhbHM6IFt7XHJcbiAgICogICAgIHR5cGU6IFwicHVibGljLWtleVwiLFxyXG4gICAqICAgICBpZDogXCJZM0psWkVsa1wiXHJcbiAgICogICB9XVxyXG4gICAqIH07XHJcbiAgICogdGhpcy53ZWJBdXRoblNlcnZpY2UuYXV0aGVudGljYXRlKGpzb25PcHRpb25zKTtcclxuICAgKlxyXG4gICAqIC8vIERpcmVjdCBXZWJBdXRobiBvcHRpb25zIChuYXRpdmUpXHJcbiAgICogY29uc3QgbmF0aXZlT3B0aW9uczogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zID0ge1xyXG4gICAqICAgY2hhbGxlbmdlOiBuZXcgVWludDhBcnJheShbLi4uXSksXHJcbiAgICogICBhbGxvd0NyZWRlbnRpYWxzOiBbe1xyXG4gICAqICAgICB0eXBlOiBcInB1YmxpYy1rZXlcIixcclxuICAgKiAgICAgaWQ6IG5ldyBVaW50OEFycmF5KFsuLi5dKVxyXG4gICAqICAgfV1cclxuICAgKiB9O1xyXG4gICAqIHRoaXMud2ViQXV0aG5TZXJ2aWNlLmF1dGhlbnRpY2F0ZShuYXRpdmVPcHRpb25zKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuICBhdXRoZW50aWNhdGUoaW5wdXQ6IEF1dGhlbnRpY2F0ZUlucHV0KTogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGlvblJlc3BvbnNlPiB7XHJcbiAgICBpZiAoIXRoaXMuaXNTdXBwb3J0ZWQoKSkge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcclxuICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXHJcbiAgICAgICAgICAgICdXZWJBdXRobiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlcidcclxuICAgICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcmVxdWVzdE9wdGlvbnM6XHJcbiAgICAgICAgfCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNcclxuICAgICAgICB8IFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc0pTT047XHJcblxyXG4gICAgICBpZiAoaXNBdXRoZW50aWNhdGVDb25maWcoaW5wdXQpKSB7XHJcbiAgICAgICAgLy8gSGlnaC1sZXZlbCBjb25maWcgcGF0aDogdmFsaWRhdGUsIHJlc29sdmUgcHJlc2V0LCBidWlsZCBvcHRpb25zXHJcbiAgICAgICAgdmFsaWRhdGVBdXRoZW50aWNhdGVDb25maWcoaW5wdXQpO1xyXG4gICAgICAgIHJlcXVlc3RPcHRpb25zID0gYnVpbGRSZXF1ZXN0T3B0aW9uc0Zyb21Db25maWcoaW5wdXQsIHRoaXMuY29uZmlnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBEaXJlY3Qgb3B0aW9ucyBwYXRoOiB1c2UgcHJvdmlkZWQgb3B0aW9uc1xyXG4gICAgICAgIHJlcXVlc3RPcHRpb25zID0gaW5wdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0aGlzLnBhcnNlQXV0aGVudGljYXRpb25PcHRpb25zKHJlcXVlc3RPcHRpb25zKTtcclxuXHJcbiAgICAgIHJldHVybiBmcm9tKG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQoeyBwdWJsaWNLZXk6IHBhcnNlZE9wdGlvbnMgfSkpLnBpcGUoXHJcbiAgICAgICAgbWFwKChjcmVkZW50aWFsKSA9PiB0aGlzLnByb2Nlc3NBdXRoZW50aWNhdGlvblJlc3VsdChjcmVkZW50aWFsKSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHRoaXMuaGFuZGxlV2ViQXV0aG5FcnJvcihlcnJvcikpXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcclxuICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgbmV3IEludmFsaWRPcHRpb25zRXJyb3IoXHJcbiAgICAgICAgICAgICdGYWlsZWQgdG8gcHJvY2VzcyBhdXRoZW50aWNhdGlvbiBpbnB1dCcsXHJcbiAgICAgICAgICAgIGVycm9yIGFzIEVycm9yXHJcbiAgICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZXMgcmVnaXN0cmF0aW9uIG9wdGlvbnMsIGhhbmRsaW5nIGJvdGggSlNPTiBhbmQgbmF0aXZlIGZvcm1hdHNcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlUmVnaXN0cmF0aW9uT3B0aW9ucyhcclxuICAgIG9wdGlvbnM6XHJcbiAgICAgIHwgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc1xyXG4gICAgICB8IFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNKU09OXHJcbiAgKTogUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7XHJcbiAgICBpZiAoaXNKU09OT3B0aW9ucyhvcHRpb25zKSkge1xyXG4gICAgICAvLyBVc2UgbmF0aXZlIGJyb3dzZXIgZnVuY3Rpb24gZm9yIEpTT04gb3B0aW9uc1xyXG4gICAgICByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbC5wYXJzZUNyZWF0aW9uT3B0aW9uc0Zyb21KU09OKFxyXG4gICAgICAgIG9wdGlvbnMgYXMgUHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc0pTT05cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wdGlvbnMgYXJlIGFscmVhZHkgaW4gbmF0aXZlIGZvcm1hdFxyXG4gICAgICByZXR1cm4gb3B0aW9ucyBhcyBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2VzIGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMsIGhhbmRsaW5nIGJvdGggSlNPTiBhbmQgbmF0aXZlIGZvcm1hdHNcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlQXV0aGVudGljYXRpb25PcHRpb25zKFxyXG4gICAgb3B0aW9uczpcclxuICAgICAgfCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNcclxuICAgICAgfCBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnNKU09OXHJcbiAgKTogUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zIHtcclxuICAgIGlmIChpc0pTT05PcHRpb25zKG9wdGlvbnMpKSB7XHJcbiAgICAgIC8vIFVzZSBuYXRpdmUgYnJvd3NlciBmdW5jdGlvbiBmb3IgSlNPTiBvcHRpb25zXHJcbiAgICAgIHJldHVybiBQdWJsaWNLZXlDcmVkZW50aWFsLnBhcnNlUmVxdWVzdE9wdGlvbnNGcm9tSlNPTihcclxuICAgICAgICBvcHRpb25zIGFzIFB1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc0pTT05cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE9wdGlvbnMgYXJlIGFscmVhZHkgaW4gbmF0aXZlIGZvcm1hdFxyXG4gICAgICByZXR1cm4gb3B0aW9ucyBhcyBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzZXMgdGhlIHJhdyBjcmVkZW50aWFsIHJlc3VsdCBpbnRvIGEgY2xlYW4gUmVnaXN0cmF0aW9uUmVzcG9uc2VcclxuICAgKi9cclxuICBwcml2YXRlIHByb2Nlc3NSZWdpc3RyYXRpb25SZXN1bHQoXHJcbiAgICBjcmVkZW50aWFsOiBDcmVkZW50aWFsIHwgbnVsbFxyXG4gICk6IFJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcclxuICAgIGlmICghaXNQdWJsaWNLZXlDcmVkZW50aWFsKGNyZWRlbnRpYWwpKSB7XHJcbiAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdG9yRXJyb3IoJ05vIGNyZWRlbnRpYWwgcmV0dXJuZWQgZnJvbSBhdXRoZW50aWNhdG9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBjcmVkZW50aWFsLnJlc3BvbnNlIGFzIEF1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlO1xyXG5cclxuICAgIC8vIEV4dHJhY3QgZGF0YSB1c2luZyB0aGUgcmVzcG9uc2UgbWV0aG9kc1xyXG4gICAgY29uc3QgY3JlZGVudGlhbElkID0gYXJyYXlCdWZmZXJUb0Jhc2U2NHVybChjcmVkZW50aWFsLnJhd0lkKTtcclxuICAgIGNvbnN0IHRyYW5zcG9ydHMgPSAocmVzcG9uc2UuZ2V0VHJhbnNwb3J0cz8uKCkgfHxcclxuICAgICAgW10pIGFzIEF1dGhlbnRpY2F0b3JUcmFuc3BvcnRbXTtcclxuXHJcbiAgICBsZXQgcHVibGljS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBwdWJsaWNLZXlCdWZmZXIgPSByZXNwb25zZS5nZXRQdWJsaWNLZXk/LigpO1xyXG4gICAgICBpZiAocHVibGljS2V5QnVmZmVyKSB7XHJcbiAgICAgICAgcHVibGljS2V5ID0gYXJyYXlCdWZmZXJUb0Jhc2U2NHVybChwdWJsaWNLZXlCdWZmZXIpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gUHVibGljIGtleSBleHRyYWN0aW9uIGZhaWxlZCAtIHRoaXMgaXMgb2theSwgbm90IGFsbCBhbGdvcml0aG1zIGFyZSBzdXBwb3J0ZWRcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgdGhlIHJhdyByZXNwb25zZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxyXG4gICAgY29uc3QgcmF3UmVzcG9uc2U6IFdlYkF1dGhuUmVnaXN0cmF0aW9uUmVzdWx0ID0ge1xyXG4gICAgICBjcmVkZW50aWFsSWQsXHJcbiAgICAgIHB1YmxpY0tleTpcclxuICAgICAgICBwdWJsaWNLZXkgfHxcclxuICAgICAgICBhcnJheUJ1ZmZlclRvQmFzZTY0dXJsKHJlc3BvbnNlLmdldFB1YmxpY0tleT8uKCkgfHwgbmV3IEFycmF5QnVmZmVyKDApKSxcclxuICAgICAgYXR0ZXN0YXRpb25PYmplY3Q6IGFycmF5QnVmZmVyVG9CYXNlNjR1cmwocmVzcG9uc2UuYXR0ZXN0YXRpb25PYmplY3QpLFxyXG4gICAgICBjbGllbnREYXRhSlNPTjogYXJyYXlCdWZmZXJUb0Jhc2U2NHVybChyZXNwb25zZS5jbGllbnREYXRhSlNPTiksXHJcbiAgICAgIHRyYW5zcG9ydHM6IHRyYW5zcG9ydHMsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgIGNyZWRlbnRpYWxJZCxcclxuICAgICAgcHVibGljS2V5LFxyXG4gICAgICB0cmFuc3BvcnRzLFxyXG4gICAgICByYXdSZXNwb25zZSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzZXMgdGhlIHJhdyBjcmVkZW50aWFsIHJlc3VsdCBpbnRvIGEgY2xlYW4gQXV0aGVudGljYXRpb25SZXNwb25zZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcHJvY2Vzc0F1dGhlbnRpY2F0aW9uUmVzdWx0KFxyXG4gICAgY3JlZGVudGlhbDogQ3JlZGVudGlhbCB8IG51bGxcclxuICApOiBBdXRoZW50aWNhdGlvblJlc3BvbnNlIHtcclxuICAgIGlmICghaXNQdWJsaWNLZXlDcmVkZW50aWFsKGNyZWRlbnRpYWwpKSB7XHJcbiAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdG9yRXJyb3IoJ05vIGNyZWRlbnRpYWwgcmV0dXJuZWQgZnJvbSBhdXRoZW50aWNhdG9yJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBjcmVkZW50aWFsLnJlc3BvbnNlIGFzIEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZTtcclxuICAgIGNvbnN0IGNyZWRlbnRpYWxJZCA9IGFycmF5QnVmZmVyVG9CYXNlNjR1cmwoY3JlZGVudGlhbC5yYXdJZCk7XHJcblxyXG4gICAgbGV0IHVzZXJIYW5kbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGlmIChyZXNwb25zZS51c2VySGFuZGxlKSB7XHJcbiAgICAgIHVzZXJIYW5kbGUgPSBhcnJheUJ1ZmZlclRvQmFzZTY0dXJsKHJlc3BvbnNlLnVzZXJIYW5kbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSB0aGUgcmF3IHJlc3BvbnNlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XHJcbiAgICBjb25zdCByYXdSZXNwb25zZTogV2ViQXV0aG5BdXRoZW50aWNhdGlvblJlc3VsdCA9IHtcclxuICAgICAgY3JlZGVudGlhbElkLFxyXG4gICAgICBhdXRoZW50aWNhdG9yRGF0YTogYXJyYXlCdWZmZXJUb0Jhc2U2NHVybChyZXNwb25zZS5hdXRoZW50aWNhdG9yRGF0YSksXHJcbiAgICAgIGNsaWVudERhdGFKU09OOiBhcnJheUJ1ZmZlclRvQmFzZTY0dXJsKHJlc3BvbnNlLmNsaWVudERhdGFKU09OKSxcclxuICAgICAgc2lnbmF0dXJlOiBhcnJheUJ1ZmZlclRvQmFzZTY0dXJsKHJlc3BvbnNlLnNpZ25hdHVyZSksXHJcbiAgICAgIHVzZXJIYW5kbGUsXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgIGNyZWRlbnRpYWxJZCxcclxuICAgICAgdXNlckhhbmRsZSxcclxuICAgICAgcmF3UmVzcG9uc2UsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5oYW5jZWQgZXJyb3IgaGFuZGxpbmcgdGhhdCBtYXBzIERPTUV4Y2VwdGlvbnMgdG8gc3BlY2lmaWMgZXJyb3IgdHlwZXNcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZVdlYkF1dGhuRXJyb3IoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8bmV2ZXI+IHtcclxuICAgIC8vIEhhbmRsZSBET01FeGNlcHRpb25zIGZyb20gV2ViQXV0aG4gQVBJXHJcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pIHtcclxuICAgICAgc3dpdGNoIChlcnJvci5uYW1lKSB7XHJcbiAgICAgICAgY2FzZSAnTm90QWxsb3dlZEVycm9yJzpcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBVc2VyQ2FuY2VsbGVkRXJyb3IoZXJyb3IpKTtcclxuICAgICAgICBjYXNlICdJbnZhbGlkU3RhdGVFcnJvcic6XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcclxuICAgICAgICAgICAgKCkgPT4gbmV3IEF1dGhlbnRpY2F0b3JFcnJvcignSW52YWxpZCBhdXRoZW50aWNhdG9yIHN0YXRlJywgZXJyb3IpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgJ05vdFN1cHBvcnRlZEVycm9yJzpcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxyXG4gICAgICAgICAgICAoKSA9PlxyXG4gICAgICAgICAgICAgIG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKCdPcGVyYXRpb24gbm90IHN1cHBvcnRlZCcsIGVycm9yKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICBjYXNlICdTZWN1cml0eUVycm9yJzpcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxyXG4gICAgICAgICAgICAoKSA9PiBuZXcgU2VjdXJpdHlFcnJvcignU2VjdXJpdHkgZXJyb3Igb2NjdXJyZWQnLCBlcnJvcilcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgY2FzZSAnVGltZW91dEVycm9yJzpcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxyXG4gICAgICAgICAgICAoKSA9PiBuZXcgVGltZW91dEVycm9yKCdPcGVyYXRpb24gdGltZWQgb3V0JywgZXJyb3IpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIGNhc2UgJ0VuY29kaW5nRXJyb3InOlxyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoXHJcbiAgICAgICAgICAgICgpID0+IG5ldyBJbnZhbGlkT3B0aW9uc0Vycm9yKCdFbmNvZGluZyBlcnJvciBpbiBvcHRpb25zJywgZXJyb3IpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihcclxuICAgICAgICAgICAgKCkgPT5cclxuICAgICAgICAgICAgICBuZXcgV2ViQXV0aG5FcnJvcihcclxuICAgICAgICAgICAgICAgIFdlYkF1dGhuRXJyb3JUeXBlLlVOS05PV04sXHJcbiAgICAgICAgICAgICAgICBgVW5rbm93biBXZWJBdXRobiBlcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsXHJcbiAgICAgICAgICAgICAgICBlcnJvclxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBIYW5kbGUgSlNPTiBwYXJzaW5nIGVycm9yc1xyXG4gICAgaWYgKFxyXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJlxyXG4gICAgICAoZXJyb3IubWVzc2FnZS5pbmNsdWRlcygncGFyc2VDcmVhdGlvbk9wdGlvbnNGcm9tSlNPTicpIHx8XHJcbiAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygncGFyc2VSZXF1ZXN0T3B0aW9uc0Zyb21KU09OJykpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXHJcbiAgICAgICAgKCkgPT4gbmV3IEludmFsaWRPcHRpb25zRXJyb3IoJ0ludmFsaWQgSlNPTiBvcHRpb25zIGZvcm1hdCcsIGVycm9yKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBvdGhlciBlcnJvcnNcclxuICAgIHJldHVybiB0aHJvd0Vycm9yKFxyXG4gICAgICAoKSA9PlxyXG4gICAgICAgIG5ldyBXZWJBdXRobkVycm9yKFxyXG4gICAgICAgICAgV2ViQXV0aG5FcnJvclR5cGUuVU5LTk9XTixcclxuICAgICAgICAgIGBVbmV4cGVjdGVkIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCxcclxuICAgICAgICAgIGVycm9yXHJcbiAgICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19","/**\n * WebAuthn Providers\n * Modern Angular standalone provider function for WebAuthn service\n */\nimport { WebAuthnService } from '../services/webauthn.service';\nimport { WEBAUTHN_CONFIG, createWebAuthnConfig, } from '../config/webauthn.config';\n/**\n * Provides WebAuthn service with required relying party configuration\n *\n * @param relyingParty Required relying party configuration\n * @param config Optional configuration overrides\n * @returns Array of providers for WebAuthn functionality\n *\n * @example\n * ```typescript\n * // main.ts\n * bootstrapApplication(AppComponent, {\n * providers: [\n * provideWebAuthn(\n * { name: 'My App', id: 'myapp.com' },\n * { defaultTimeout: 30000 }\n * )\n * ]\n * });\n * ```\n */\nexport function provideWebAuthn(relyingParty, config = {}) {\n return [\n {\n provide: WEBAUTHN_CONFIG,\n useValue: createWebAuthnConfig(relyingParty, config),\n },\n WebAuthnService,\n ];\n}\n/**\n * @deprecated Use provideWebAuthn(relyingParty, config) instead.\n * This version is kept for backward compatibility but requires relying party information.\n */\nexport function provideWebAuthnLegacy(config) {\n if (!config.relyingParty) {\n throw new Error('WebAuthn configuration must include relying party information. Use provideWebAuthn(relyingParty, config) instead.');\n }\n return [\n {\n provide: WEBAUTHN_CONFIG,\n useValue: config,\n },\n WebAuthnService,\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViYXV0aG4ucHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gtd2ViYXV0aG4vc3JjL2xpYi9wcm92aWRlcnMvd2ViYXV0aG4ucHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBR0wsZUFBZSxFQUNmLG9CQUFvQixHQUNyQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsWUFBZ0MsRUFDaEMsU0FBd0QsRUFBRTtJQUUxRCxPQUFPO1FBQ0w7WUFDRSxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsb0JBQW9CLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztTQUNyRDtRQUNELGVBQWU7S0FDaEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBc0I7SUFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLG1IQUFtSCxDQUNwSCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTDtZQUNFLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO1FBQ0QsZUFBZTtLQUNoQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBXZWJBdXRobiBQcm92aWRlcnNcclxuICogTW9kZXJuIEFuZ3VsYXIgc3RhbmRhbG9uZSBwcm92aWRlciBmdW5jdGlvbiBmb3IgV2ViQXV0aG4gc2VydmljZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFdlYkF1dGhuU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlYmF1dGhuLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFdlYkF1dGhuQ29uZmlnLFxyXG4gIFJlbHlpbmdQYXJ0eUNvbmZpZyxcclxuICBXRUJBVVRITl9DT05GSUcsXHJcbiAgY3JlYXRlV2ViQXV0aG5Db25maWcsXHJcbn0gZnJvbSAnLi4vY29uZmlnL3dlYmF1dGhuLmNvbmZpZyc7XHJcblxyXG4vKipcclxuICogUHJvdmlkZXMgV2ViQXV0aG4gc2VydmljZSB3aXRoIHJlcXVpcmVkIHJlbHlpbmcgcGFydHkgY29uZmlndXJhdGlvblxyXG4gKlxyXG4gKiBAcGFyYW0gcmVseWluZ1BhcnR5IFJlcXVpcmVkIHJlbHlpbmcgcGFydHkgY29uZmlndXJhdGlvblxyXG4gKiBAcGFyYW0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXHJcbiAqIEByZXR1cm5zIEFycmF5IG9mIHByb3ZpZGVycyBmb3IgV2ViQXV0aG4gZnVuY3Rpb25hbGl0eVxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIC8vIG1haW4udHNcclxuICogYm9vdHN0cmFwQXBwbGljYXRpb24oQXBwQ29tcG9uZW50LCB7XHJcbiAqICAgcHJvdmlkZXJzOiBbXHJcbiAqICAgICBwcm92aWRlV2ViQXV0aG4oXHJcbiAqICAgICAgIHsgbmFtZTogJ015IEFwcCcsIGlkOiAnbXlhcHAuY29tJyB9LFxyXG4gKiAgICAgICB7IGRlZmF1bHRUaW1lb3V0OiAzMDAwMCB9XHJcbiAqICAgICApXHJcbiAqICAgXVxyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVdlYkF1dGhuKFxyXG4gIHJlbHlpbmdQYXJ0eTogUmVseWluZ1BhcnR5Q29uZmlnLFxyXG4gIGNvbmZpZzogUGFydGlhbDxPbWl0PFdlYkF1dGhuQ29uZmlnLCAncmVseWluZ1BhcnR5Jz4+ID0ge31cclxuKTogUHJvdmlkZXJbXSB7XHJcbiAgcmV0dXJuIFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogV0VCQVVUSE5fQ09ORklHLFxyXG4gICAgICB1c2VWYWx1ZTogY3JlYXRlV2ViQXV0aG5Db25maWcocmVseWluZ1BhcnR5LCBjb25maWcpLFxyXG4gICAgfSxcclxuICAgIFdlYkF1dGhuU2VydmljZSxcclxuICBdO1xyXG59XHJcblxyXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIHByb3ZpZGVXZWJBdXRobihyZWx5aW5nUGFydHksIGNvbmZpZykgaW5zdGVhZC5cclxuICogVGhpcyB2ZXJzaW9uIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYnV0IHJlcXVpcmVzIHJlbHlpbmcgcGFydHkgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVdlYkF1dGhuTGVnYWN5KGNvbmZpZzogV2ViQXV0aG5Db25maWcpOiBQcm92aWRlcltdIHtcclxuICBpZiAoIWNvbmZpZy5yZWx5aW5nUGFydHkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ1dlYkF1dGhuIGNvbmZpZ3VyYXRpb24gbXVzdCBpbmNsdWRlIHJlbHlpbmcgcGFydHkgaW5mb3JtYXRpb24uIFVzZSBwcm92aWRlV2ViQXV0aG4ocmVseWluZ1BhcnR5LCBjb25maWcpIGluc3RlYWQuJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFdFQkFVVEhOX0NPTkZJRyxcclxuICAgICAgdXNlVmFsdWU6IGNvbmZpZyxcclxuICAgIH0sXHJcbiAgICBXZWJBdXRoblNlcnZpY2UsXHJcbiAgXTtcclxufVxyXG4iXX0=","// Core service\nexport { WebAuthnService } from './lib/services/webauthn.service';\nexport { WEBAUTHN_CONFIG, createWebAuthnConfig, DEFAULT_WEBAUTHN_CONFIG, } from './lib/config/webauthn.config';\n// Providers\nexport { provideWebAuthn, provideWebAuthnLegacy, } from './lib/providers/webauthn.providers';\n// Error types for enhanced error handling\nexport { WebAuthnError, WebAuthnErrorType, UserCancelledError, AuthenticatorError, InvalidOptionsError, UnsupportedOperationError, SecurityError, TimeoutError, NetworkError, } from './lib/errors/webauthn.errors';\n// Utility functions\nexport { arrayBufferToBase64url, base64urlToArrayBuffer, arrayBufferToBase64, base64ToArrayBuffer, stringToArrayBuffer, arrayBufferToString, generateChallenge, generateUserId, credentialIdToArrayBuffer, arrayBufferToCredentialId, isWebAuthnSupported, isPlatformAuthenticatorAvailable, getSupportedTransports, validateRegistrationOptions, getDefaultPubKeyCredParams, isJSONOptions, isPublicKeyCredential, } from './lib/utils/webauthn.utils';\n// Preset configurations\nexport { PRESET_MAP, PASSKEY_PRESET, SECOND_FACTOR_PRESET, DEVICE_BOUND_PRESET, } from './lib/presets/webauthn.presets';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC13ZWJhdXRobi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZTtBQUNmLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQU9sRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLG9CQUFvQixFQUNwQix1QkFBdUIsR0FDeEIsTUFBTSw4QkFBOEIsQ0FBQztBQUV0QyxZQUFZO0FBQ1osT0FBTyxFQUNMLGVBQWUsRUFDZixxQkFBcUIsR0FDdEIsTUFBTSxvQ0FBb0MsQ0FBQztBQXVCNUMsMENBQTBDO0FBQzFDLE9BQU8sRUFDTCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixhQUFhLEVBQ2IsWUFBWSxFQUNaLFlBQVksR0FDYixNQUFNLDhCQUE4QixDQUFDO0FBRXRDLG9CQUFvQjtBQUNwQixPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixnQ0FBZ0MsRUFDaEMsc0JBQXNCLEVBQ3RCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsYUFBYSxFQUNiLHFCQUFxQixHQUN0QixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLHdCQUF3QjtBQUN4QixPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0NBQWdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3JlIHNlcnZpY2VcclxuZXhwb3J0IHsgV2ViQXV0aG5TZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvd2ViYXV0aG4uc2VydmljZSc7XHJcblxyXG4vLyBDb25maWd1cmF0aW9uIHN5c3RlbVxyXG5leHBvcnQgdHlwZSB7XHJcbiAgV2ViQXV0aG5Db25maWcsXHJcbiAgUmVseWluZ1BhcnR5Q29uZmlnLFxyXG59IGZyb20gJy4vbGliL2NvbmZpZy93ZWJhdXRobi5jb25maWcnO1xyXG5leHBvcnQge1xyXG4gIFdFQkFVVEhOX0NPTkZJRyxcclxuICBjcmVhdGVXZWJBdXRobkNvbmZpZyxcclxuICBERUZBVUxUX1dFQkFVVEhOX0NPTkZJRyxcclxufSBmcm9tICcuL2xpYi9jb25maWcvd2ViYXV0aG4uY29uZmlnJztcclxuXHJcbi8vIFByb3ZpZGVyc1xyXG5leHBvcnQge1xyXG4gIHByb3ZpZGVXZWJBdXRobixcclxuICBwcm92aWRlV2ViQXV0aG5MZWdhY3ksXHJcbn0gZnJvbSAnLi9saWIvcHJvdmlkZXJzL3dlYmF1dGhuLnByb3ZpZGVycyc7XHJcblxyXG4vLyBDb3JlIG1vZGVscyBhbmQgcmVzcG9uc2UgdHlwZXNcclxuZXhwb3J0IHR5cGUge1xyXG4gIFdlYkF1dGhuUmVnaXN0cmF0aW9uUmVzdWx0LFxyXG4gIFdlYkF1dGhuQXV0aGVudGljYXRpb25SZXN1bHQsXHJcbiAgV2ViQXV0aG5TdXBwb3J0LFxyXG4gIFJlZ2lzdHJhdGlvblJlc3BvbnNlLFxyXG4gIEF1dGhlbnRpY2F0aW9uUmVzcG9uc2UsXHJcbiAgLy8gTmV3IGNvbmZpZ3VyYXRpb24gdHlwZXNcclxuICBSZWdpc3RlckNvbmZpZyxcclxuICBBdXRoZW50aWNhdGVDb25maWcsXHJcbiAgUmVnaXN0ZXJJbnB1dCxcclxuICBBdXRoZW50aWNhdGVJbnB1dCxcclxuICBQcmVzZXROYW1lLFxyXG59IGZyb20gJy4vbGliL21vZGVscy93ZWJhdXRobi5tb2RlbHMnO1xyXG5cclxuLy8gQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG1vZGVsc1xyXG5leHBvcnQgdHlwZSB7XHJcbiAgUmVnaXN0ZXJDb25maWcgYXMgUmVnaXN0ZXJDb25maWdNb2RlbCxcclxuICBBdXRoZW50aWNhdGVDb25maWcgYXMgQXV0aGVudGljYXRlQ29uZmlnTW9kZWwsXHJcbn0gZnJvbSAnLi9saWIvbW9kZWxzL3JlZ2lzdGVyLWNvbmZpZy5tb2RlbHMnO1xyXG5cclxuLy8gRXJyb3IgdHlwZXMgZm9yIGVuaGFuY2VkIGVycm9yIGhhbmRsaW5nXHJcbmV4cG9ydCB7XHJcbiAgV2ViQXV0aG5FcnJvcixcclxuICBXZWJBdXRobkVycm9yVHlwZSxcclxuICBVc2VyQ2FuY2VsbGVkRXJyb3IsXHJcbiAgQXV0aGVudGljYXRvckVycm9yLFxyXG4gIEludmFsaWRPcHRpb25zRXJyb3IsXHJcbiAgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcixcclxuICBTZWN1cml0eUVycm9yLFxyXG4gIFRpbWVvdXRFcnJvcixcclxuICBOZXR3b3JrRXJyb3IsXHJcbn0gZnJvbSAnLi9saWIvZXJyb3JzL3dlYmF1dGhuLmVycm9ycyc7XHJcblxyXG4vLyBVdGlsaXR5IGZ1bmN0aW9uc1xyXG5leHBvcnQge1xyXG4gIGFycmF5QnVmZmVyVG9CYXNlNjR1cmwsXHJcbiAgYmFzZTY0dXJsVG9BcnJheUJ1ZmZlcixcclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0LFxyXG4gIGJhc2U2NFRvQXJyYXlCdWZmZXIsXHJcbiAgc3RyaW5nVG9BcnJheUJ1ZmZlcixcclxuICBhcnJheUJ1ZmZlclRvU3RyaW5nLFxyXG4gIGdlbmVyYXRlQ2hhbGxlbmdlLFxyXG4gIGdlbmVyYXRlVXNlcklkLFxyXG4gIGNyZWRlbnRpYWxJZFRvQXJyYXlCdWZmZXIsXHJcbiAgYXJyYXlCdWZmZXJUb0NyZWRlbnRpYWxJZCxcclxuICBpc1dlYkF1dGhuU3VwcG9ydGVkLFxyXG4gIGlzUGxhdGZvcm1BdXRoZW50aWNhdG9yQXZhaWxhYmxlLFxyXG4gIGdldFN1cHBvcnRlZFRyYW5zcG9ydHMsXHJcbiAgdmFsaWRhdGVSZWdpc3RyYXRpb25PcHRpb25zLFxyXG4gIGdldERlZmF1bHRQdWJLZXlDcmVkUGFyYW1zLFxyXG4gIGlzSlNPTk9wdGlvbnMsXHJcbiAgaXNQdWJsaWNLZXlDcmVkZW50aWFsLFxyXG59IGZyb20gJy4vbGliL3V0aWxzL3dlYmF1dGhuLnV0aWxzJztcclxuXHJcbi8vIFByZXNldCBjb25maWd1cmF0aW9uc1xyXG5leHBvcnQge1xyXG4gIFBSRVNFVF9NQVAsXHJcbiAgUEFTU0tFWV9QUkVTRVQsXHJcbiAgU0VDT05EX0ZBQ1RPUl9QUkVTRVQsXHJcbiAgREVWSUNFX0JPVU5EX1BSRVNFVCxcclxufSBmcm9tICcuL2xpYi9wcmVzZXRzL3dlYmF1dGhuLnByZXNldHMnO1xyXG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXdlYmF1dGhuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3gtd2ViYXV0aG4vc3JjL25neC13ZWJhdXRobi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["generateChallenge","generateUserId"],"mappings":"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"}