@sinequa/assistant 3.10.4 → 3.10.10
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.
- package/chat/index.d.ts +2155 -3
- package/fesm2022/sinequa-assistant-chat.mjs +764 -593
- package/fesm2022/sinequa-assistant-chat.mjs.map +1 -1
- package/index.d.ts +3 -5
- package/node_modules/zod/LICENSE +21 -0
- package/node_modules/zod/README.md +208 -0
- package/node_modules/zod/index.cjs +33 -0
- package/node_modules/zod/index.d.cts +4 -0
- package/node_modules/zod/index.d.ts +4 -0
- package/node_modules/zod/index.js +4 -0
- package/node_modules/zod/locales/index.cjs +17 -0
- package/node_modules/zod/locales/index.d.cts +1 -0
- package/node_modules/zod/locales/index.d.ts +1 -0
- package/node_modules/zod/locales/index.js +1 -0
- package/node_modules/zod/locales/package.json +6 -0
- package/node_modules/zod/mini/index.cjs +32 -0
- package/node_modules/zod/mini/index.d.cts +3 -0
- package/node_modules/zod/mini/index.d.ts +3 -0
- package/node_modules/zod/mini/index.js +3 -0
- package/node_modules/zod/mini/package.json +6 -0
- package/node_modules/zod/package.json +135 -0
- package/node_modules/zod/src/index.ts +4 -0
- package/node_modules/zod/src/locales/index.ts +1 -0
- package/node_modules/zod/src/mini/index.ts +3 -0
- package/node_modules/zod/src/v3/ZodError.ts +330 -0
- package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
- package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
- package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
- package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
- package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
- package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
- package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
- package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
- package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
- package/node_modules/zod/src/v3/errors.ts +13 -0
- package/node_modules/zod/src/v3/external.ts +6 -0
- package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
- package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
- package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
- package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
- package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
- package/node_modules/zod/src/v3/helpers/util.ts +224 -0
- package/node_modules/zod/src/v3/index.ts +4 -0
- package/node_modules/zod/src/v3/locales/en.ts +124 -0
- package/node_modules/zod/src/v3/standard-schema.ts +113 -0
- package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
- package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
- package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
- package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
- package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
- package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
- package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
- package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
- package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
- package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
- package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
- package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
- package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
- package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
- package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
- package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
- package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
- package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
- package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
- package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
- package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
- package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
- package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
- package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
- package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
- package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
- package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
- package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
- package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
- package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
- package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
- package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
- package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
- package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
- package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
- package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
- package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
- package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
- package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
- package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
- package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
- package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
- package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
- package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
- package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
- package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
- package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
- package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
- package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
- package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
- package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
- package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
- package/node_modules/zod/src/v3/types.ts +5138 -0
- package/node_modules/zod/src/v4/classic/checks.ts +32 -0
- package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
- package/node_modules/zod/src/v4/classic/compat.ts +70 -0
- package/node_modules/zod/src/v4/classic/errors.ts +82 -0
- package/node_modules/zod/src/v4/classic/external.ts +51 -0
- package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
- package/node_modules/zod/src/v4/classic/index.ts +5 -0
- package/node_modules/zod/src/v4/classic/iso.ts +90 -0
- package/node_modules/zod/src/v4/classic/parse.ts +82 -0
- package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
- package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
- package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
- package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
- package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
- package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
- package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
- package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
- package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
- package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
- package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
- package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
- package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
- package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
- package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
- package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
- package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
- package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
- package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
- package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
- package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
- package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
- package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
- package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
- package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
- package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
- package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
- package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
- package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
- package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
- package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
- package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
- package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
- package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
- package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
- package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
- package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
- package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
- package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
- package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
- package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
- package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
- package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
- package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
- package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
- package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
- package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
- package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
- package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
- package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
- package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
- package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
- package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
- package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
- package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
- package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
- package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
- package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
- package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
- package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
- package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
- package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
- package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
- package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
- package/node_modules/zod/src/v4/core/api.ts +1798 -0
- package/node_modules/zod/src/v4/core/checks.ts +1293 -0
- package/node_modules/zod/src/v4/core/config.ts +15 -0
- package/node_modules/zod/src/v4/core/core.ts +138 -0
- package/node_modules/zod/src/v4/core/doc.ts +44 -0
- package/node_modules/zod/src/v4/core/errors.ts +448 -0
- package/node_modules/zod/src/v4/core/index.ts +16 -0
- package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
- package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
- package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
- package/node_modules/zod/src/v4/core/parse.ts +195 -0
- package/node_modules/zod/src/v4/core/regexes.ts +183 -0
- package/node_modules/zod/src/v4/core/registries.ts +105 -0
- package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
- package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
- package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
- package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
- package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
- package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
- package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
- package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
- package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
- package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
- package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
- package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
- package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
- package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
- package/node_modules/zod/src/v4/core/util.ts +966 -0
- package/node_modules/zod/src/v4/core/versions.ts +5 -0
- package/node_modules/zod/src/v4/core/zsf.ts +323 -0
- package/node_modules/zod/src/v4/index.ts +4 -0
- package/node_modules/zod/src/v4/locales/ar.ts +115 -0
- package/node_modules/zod/src/v4/locales/az.ts +111 -0
- package/node_modules/zod/src/v4/locales/be.ts +176 -0
- package/node_modules/zod/src/v4/locales/bg.ts +128 -0
- package/node_modules/zod/src/v4/locales/ca.ts +116 -0
- package/node_modules/zod/src/v4/locales/cs.ts +118 -0
- package/node_modules/zod/src/v4/locales/da.ts +123 -0
- package/node_modules/zod/src/v4/locales/de.ts +116 -0
- package/node_modules/zod/src/v4/locales/en.ts +119 -0
- package/node_modules/zod/src/v4/locales/eo.ts +118 -0
- package/node_modules/zod/src/v4/locales/es.ts +141 -0
- package/node_modules/zod/src/v4/locales/fa.ts +126 -0
- package/node_modules/zod/src/v4/locales/fi.ts +121 -0
- package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
- package/node_modules/zod/src/v4/locales/fr.ts +116 -0
- package/node_modules/zod/src/v4/locales/he.ts +246 -0
- package/node_modules/zod/src/v4/locales/hu.ts +117 -0
- package/node_modules/zod/src/v4/locales/hy.ts +164 -0
- package/node_modules/zod/src/v4/locales/id.ts +115 -0
- package/node_modules/zod/src/v4/locales/index.ts +49 -0
- package/node_modules/zod/src/v4/locales/is.ts +119 -0
- package/node_modules/zod/src/v4/locales/it.ts +116 -0
- package/node_modules/zod/src/v4/locales/ja.ts +114 -0
- package/node_modules/zod/src/v4/locales/ka.ts +123 -0
- package/node_modules/zod/src/v4/locales/kh.ts +7 -0
- package/node_modules/zod/src/v4/locales/km.ts +119 -0
- package/node_modules/zod/src/v4/locales/ko.ts +121 -0
- package/node_modules/zod/src/v4/locales/lt.ts +239 -0
- package/node_modules/zod/src/v4/locales/mk.ts +118 -0
- package/node_modules/zod/src/v4/locales/ms.ts +115 -0
- package/node_modules/zod/src/v4/locales/nl.ts +121 -0
- package/node_modules/zod/src/v4/locales/no.ts +116 -0
- package/node_modules/zod/src/v4/locales/ota.ts +117 -0
- package/node_modules/zod/src/v4/locales/pl.ts +118 -0
- package/node_modules/zod/src/v4/locales/ps.ts +126 -0
- package/node_modules/zod/src/v4/locales/pt.ts +116 -0
- package/node_modules/zod/src/v4/locales/ru.ts +176 -0
- package/node_modules/zod/src/v4/locales/sl.ts +118 -0
- package/node_modules/zod/src/v4/locales/sv.ts +119 -0
- package/node_modules/zod/src/v4/locales/ta.ts +118 -0
- package/node_modules/zod/src/v4/locales/th.ts +119 -0
- package/node_modules/zod/src/v4/locales/tr.ts +111 -0
- package/node_modules/zod/src/v4/locales/ua.ts +7 -0
- package/node_modules/zod/src/v4/locales/uk.ts +117 -0
- package/node_modules/zod/src/v4/locales/ur.ts +119 -0
- package/node_modules/zod/src/v4/locales/uz.ts +116 -0
- package/node_modules/zod/src/v4/locales/vi.ts +117 -0
- package/node_modules/zod/src/v4/locales/yo.ts +124 -0
- package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
- package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
- package/node_modules/zod/src/v4/mini/checks.ts +32 -0
- package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
- package/node_modules/zod/src/v4/mini/external.ts +40 -0
- package/node_modules/zod/src/v4/mini/index.ts +3 -0
- package/node_modules/zod/src/v4/mini/iso.ts +66 -0
- package/node_modules/zod/src/v4/mini/parse.ts +14 -0
- package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
- package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
- package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
- package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
- package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
- package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
- package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
- package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
- package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
- package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
- package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
- package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
- package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
- package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
- package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
- package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
- package/node_modules/zod/src/v4-mini/index.ts +3 -0
- package/node_modules/zod/v3/ZodError.cjs +138 -0
- package/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/node_modules/zod/v3/ZodError.js +133 -0
- package/node_modules/zod/v3/errors.cjs +17 -0
- package/node_modules/zod/v3/errors.d.cts +5 -0
- package/node_modules/zod/v3/errors.d.ts +5 -0
- package/node_modules/zod/v3/errors.js +9 -0
- package/node_modules/zod/v3/external.cjs +22 -0
- package/node_modules/zod/v3/external.d.cts +6 -0
- package/node_modules/zod/v3/external.d.ts +6 -0
- package/node_modules/zod/v3/external.js +6 -0
- package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/node_modules/zod/v3/helpers/util.js +133 -0
- package/node_modules/zod/v3/index.cjs +33 -0
- package/node_modules/zod/v3/index.d.cts +4 -0
- package/node_modules/zod/v3/index.d.ts +4 -0
- package/node_modules/zod/v3/index.js +4 -0
- package/node_modules/zod/v3/locales/en.cjs +112 -0
- package/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/node_modules/zod/v3/locales/en.js +109 -0
- package/node_modules/zod/v3/package.json +6 -0
- package/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/node_modules/zod/v3/standard-schema.js +1 -0
- package/node_modules/zod/v3/types.cjs +3777 -0
- package/node_modules/zod/v3/types.d.cts +1034 -0
- package/node_modules/zod/v3/types.d.ts +1034 -0
- package/node_modules/zod/v3/types.js +3695 -0
- package/node_modules/zod/v4/classic/checks.cjs +33 -0
- package/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/node_modules/zod/v4/classic/checks.js +1 -0
- package/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/node_modules/zod/v4/classic/coerce.js +17 -0
- package/node_modules/zod/v4/classic/compat.cjs +61 -0
- package/node_modules/zod/v4/classic/compat.d.cts +50 -0
- package/node_modules/zod/v4/classic/compat.d.ts +50 -0
- package/node_modules/zod/v4/classic/compat.js +31 -0
- package/node_modules/zod/v4/classic/errors.cjs +74 -0
- package/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/node_modules/zod/v4/classic/errors.js +48 -0
- package/node_modules/zod/v4/classic/external.cjs +73 -0
- package/node_modules/zod/v4/classic/external.d.cts +15 -0
- package/node_modules/zod/v4/classic/external.d.ts +15 -0
- package/node_modules/zod/v4/classic/external.js +20 -0
- package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
- package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
- package/node_modules/zod/v4/classic/index.cjs +33 -0
- package/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/node_modules/zod/v4/classic/index.js +4 -0
- package/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/node_modules/zod/v4/classic/iso.js +30 -0
- package/node_modules/zod/v4/classic/package.json +6 -0
- package/node_modules/zod/v4/classic/parse.cjs +41 -0
- package/node_modules/zod/v4/classic/parse.d.cts +31 -0
- package/node_modules/zod/v4/classic/parse.d.ts +31 -0
- package/node_modules/zod/v4/classic/parse.js +15 -0
- package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
- package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
- package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
- package/node_modules/zod/v4/classic/schemas.js +1157 -0
- package/node_modules/zod/v4/core/api.cjs +1222 -0
- package/node_modules/zod/v4/core/api.d.cts +304 -0
- package/node_modules/zod/v4/core/api.d.ts +304 -0
- package/node_modules/zod/v4/core/api.js +1082 -0
- package/node_modules/zod/v4/core/checks.cjs +601 -0
- package/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/node_modules/zod/v4/core/checks.js +575 -0
- package/node_modules/zod/v4/core/core.cjs +83 -0
- package/node_modules/zod/v4/core/core.d.cts +70 -0
- package/node_modules/zod/v4/core/core.d.ts +70 -0
- package/node_modules/zod/v4/core/core.js +76 -0
- package/node_modules/zod/v4/core/doc.cjs +39 -0
- package/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/node_modules/zod/v4/core/doc.js +35 -0
- package/node_modules/zod/v4/core/errors.cjs +213 -0
- package/node_modules/zod/v4/core/errors.d.cts +220 -0
- package/node_modules/zod/v4/core/errors.d.ts +220 -0
- package/node_modules/zod/v4/core/errors.js +182 -0
- package/node_modules/zod/v4/core/index.cjs +47 -0
- package/node_modules/zod/v4/core/index.d.cts +16 -0
- package/node_modules/zod/v4/core/index.d.ts +16 -0
- package/node_modules/zod/v4/core/index.js +16 -0
- package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
- package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
- package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
- package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
- package/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
- package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
- package/node_modules/zod/v4/core/json-schema.js +1 -0
- package/node_modules/zod/v4/core/package.json +6 -0
- package/node_modules/zod/v4/core/parse.cjs +131 -0
- package/node_modules/zod/v4/core/parse.d.cts +49 -0
- package/node_modules/zod/v4/core/parse.d.ts +49 -0
- package/node_modules/zod/v4/core/parse.js +93 -0
- package/node_modules/zod/v4/core/regexes.cjs +166 -0
- package/node_modules/zod/v4/core/regexes.d.cts +79 -0
- package/node_modules/zod/v4/core/regexes.d.ts +79 -0
- package/node_modules/zod/v4/core/regexes.js +133 -0
- package/node_modules/zod/v4/core/registries.cjs +56 -0
- package/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/node_modules/zod/v4/core/registries.js +51 -0
- package/node_modules/zod/v4/core/schemas.cjs +2124 -0
- package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
- package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
- package/node_modules/zod/v4/core/schemas.js +2093 -0
- package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
- package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
- package/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
- package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
- package/node_modules/zod/v4/core/to-json-schema.js +437 -0
- package/node_modules/zod/v4/core/util.cjs +710 -0
- package/node_modules/zod/v4/core/util.d.cts +199 -0
- package/node_modules/zod/v4/core/util.d.ts +199 -0
- package/node_modules/zod/v4/core/util.js +651 -0
- package/node_modules/zod/v4/core/versions.cjs +8 -0
- package/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/node_modules/zod/v4/core/versions.js +5 -0
- package/node_modules/zod/v4/index.cjs +22 -0
- package/node_modules/zod/v4/index.d.cts +3 -0
- package/node_modules/zod/v4/index.d.ts +3 -0
- package/node_modules/zod/v4/index.js +3 -0
- package/node_modules/zod/v4/locales/ar.cjs +133 -0
- package/node_modules/zod/v4/locales/ar.d.cts +5 -0
- package/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/node_modules/zod/v4/locales/ar.js +106 -0
- package/node_modules/zod/v4/locales/az.cjs +132 -0
- package/node_modules/zod/v4/locales/az.d.cts +5 -0
- package/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/node_modules/zod/v4/locales/az.js +105 -0
- package/node_modules/zod/v4/locales/be.cjs +183 -0
- package/node_modules/zod/v4/locales/be.d.cts +5 -0
- package/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/node_modules/zod/v4/locales/be.js +156 -0
- package/node_modules/zod/v4/locales/bg.cjs +147 -0
- package/node_modules/zod/v4/locales/bg.d.cts +5 -0
- package/node_modules/zod/v4/locales/bg.d.ts +4 -0
- package/node_modules/zod/v4/locales/bg.js +120 -0
- package/node_modules/zod/v4/locales/ca.cjs +134 -0
- package/node_modules/zod/v4/locales/ca.d.cts +5 -0
- package/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/node_modules/zod/v4/locales/ca.js +107 -0
- package/node_modules/zod/v4/locales/cs.cjs +138 -0
- package/node_modules/zod/v4/locales/cs.d.cts +5 -0
- package/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/node_modules/zod/v4/locales/cs.js +111 -0
- package/node_modules/zod/v4/locales/da.cjs +142 -0
- package/node_modules/zod/v4/locales/da.d.cts +5 -0
- package/node_modules/zod/v4/locales/da.d.ts +4 -0
- package/node_modules/zod/v4/locales/da.js +115 -0
- package/node_modules/zod/v4/locales/de.cjs +135 -0
- package/node_modules/zod/v4/locales/de.d.cts +5 -0
- package/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/node_modules/zod/v4/locales/de.js +108 -0
- package/node_modules/zod/v4/locales/en.cjs +136 -0
- package/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/node_modules/zod/v4/locales/en.d.ts +4 -0
- package/node_modules/zod/v4/locales/en.js +109 -0
- package/node_modules/zod/v4/locales/eo.cjs +136 -0
- package/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/node_modules/zod/v4/locales/eo.d.ts +4 -0
- package/node_modules/zod/v4/locales/eo.js +109 -0
- package/node_modules/zod/v4/locales/es.cjs +159 -0
- package/node_modules/zod/v4/locales/es.d.cts +5 -0
- package/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/node_modules/zod/v4/locales/es.js +132 -0
- package/node_modules/zod/v4/locales/fa.cjs +141 -0
- package/node_modules/zod/v4/locales/fa.d.cts +5 -0
- package/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/node_modules/zod/v4/locales/fa.js +114 -0
- package/node_modules/zod/v4/locales/fi.cjs +139 -0
- package/node_modules/zod/v4/locales/fi.d.cts +5 -0
- package/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/node_modules/zod/v4/locales/fi.js +112 -0
- package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
- package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr-CA.js +107 -0
- package/node_modules/zod/v4/locales/fr.cjs +135 -0
- package/node_modules/zod/v4/locales/fr.d.cts +5 -0
- package/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/node_modules/zod/v4/locales/fr.js +108 -0
- package/node_modules/zod/v4/locales/he.cjs +241 -0
- package/node_modules/zod/v4/locales/he.d.cts +5 -0
- package/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/node_modules/zod/v4/locales/he.js +214 -0
- package/node_modules/zod/v4/locales/hu.cjs +135 -0
- package/node_modules/zod/v4/locales/hu.d.cts +5 -0
- package/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/node_modules/zod/v4/locales/hu.js +108 -0
- package/node_modules/zod/v4/locales/hy.cjs +174 -0
- package/node_modules/zod/v4/locales/hy.d.cts +5 -0
- package/node_modules/zod/v4/locales/hy.d.ts +4 -0
- package/node_modules/zod/v4/locales/hy.js +147 -0
- package/node_modules/zod/v4/locales/id.cjs +133 -0
- package/node_modules/zod/v4/locales/id.d.cts +5 -0
- package/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/node_modules/zod/v4/locales/id.js +106 -0
- package/node_modules/zod/v4/locales/index.cjs +104 -0
- package/node_modules/zod/v4/locales/index.d.cts +49 -0
- package/node_modules/zod/v4/locales/index.d.ts +49 -0
- package/node_modules/zod/v4/locales/index.js +49 -0
- package/node_modules/zod/v4/locales/is.cjs +136 -0
- package/node_modules/zod/v4/locales/is.d.cts +5 -0
- package/node_modules/zod/v4/locales/is.d.ts +4 -0
- package/node_modules/zod/v4/locales/is.js +109 -0
- package/node_modules/zod/v4/locales/it.cjs +135 -0
- package/node_modules/zod/v4/locales/it.d.cts +5 -0
- package/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/node_modules/zod/v4/locales/it.js +108 -0
- package/node_modules/zod/v4/locales/ja.cjs +134 -0
- package/node_modules/zod/v4/locales/ja.d.cts +5 -0
- package/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/node_modules/zod/v4/locales/ja.js +107 -0
- package/node_modules/zod/v4/locales/ka.cjs +139 -0
- package/node_modules/zod/v4/locales/ka.d.cts +5 -0
- package/node_modules/zod/v4/locales/ka.d.ts +4 -0
- package/node_modules/zod/v4/locales/ka.js +112 -0
- package/node_modules/zod/v4/locales/kh.cjs +12 -0
- package/node_modules/zod/v4/locales/kh.d.cts +5 -0
- package/node_modules/zod/v4/locales/kh.d.ts +5 -0
- package/node_modules/zod/v4/locales/kh.js +5 -0
- package/node_modules/zod/v4/locales/km.cjs +137 -0
- package/node_modules/zod/v4/locales/km.d.cts +5 -0
- package/node_modules/zod/v4/locales/km.d.ts +4 -0
- package/node_modules/zod/v4/locales/km.js +110 -0
- package/node_modules/zod/v4/locales/ko.cjs +138 -0
- package/node_modules/zod/v4/locales/ko.d.cts +5 -0
- package/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/node_modules/zod/v4/locales/ko.js +111 -0
- package/node_modules/zod/v4/locales/lt.cjs +230 -0
- package/node_modules/zod/v4/locales/lt.d.cts +5 -0
- package/node_modules/zod/v4/locales/lt.d.ts +4 -0
- package/node_modules/zod/v4/locales/lt.js +203 -0
- package/node_modules/zod/v4/locales/mk.cjs +136 -0
- package/node_modules/zod/v4/locales/mk.d.cts +5 -0
- package/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/node_modules/zod/v4/locales/mk.js +109 -0
- package/node_modules/zod/v4/locales/ms.cjs +134 -0
- package/node_modules/zod/v4/locales/ms.d.cts +5 -0
- package/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/node_modules/zod/v4/locales/ms.js +107 -0
- package/node_modules/zod/v4/locales/nl.cjs +137 -0
- package/node_modules/zod/v4/locales/nl.d.cts +5 -0
- package/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/node_modules/zod/v4/locales/nl.js +110 -0
- package/node_modules/zod/v4/locales/no.cjs +135 -0
- package/node_modules/zod/v4/locales/no.d.cts +5 -0
- package/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/node_modules/zod/v4/locales/no.js +108 -0
- package/node_modules/zod/v4/locales/ota.cjs +136 -0
- package/node_modules/zod/v4/locales/ota.d.cts +5 -0
- package/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/node_modules/zod/v4/locales/ota.js +109 -0
- package/node_modules/zod/v4/locales/package.json +6 -0
- package/node_modules/zod/v4/locales/pl.cjs +136 -0
- package/node_modules/zod/v4/locales/pl.d.cts +5 -0
- package/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/node_modules/zod/v4/locales/pl.js +109 -0
- package/node_modules/zod/v4/locales/ps.cjs +141 -0
- package/node_modules/zod/v4/locales/ps.d.cts +5 -0
- package/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/node_modules/zod/v4/locales/ps.js +114 -0
- package/node_modules/zod/v4/locales/pt.cjs +135 -0
- package/node_modules/zod/v4/locales/pt.d.cts +5 -0
- package/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/node_modules/zod/v4/locales/pt.js +108 -0
- package/node_modules/zod/v4/locales/ru.cjs +183 -0
- package/node_modules/zod/v4/locales/ru.d.cts +5 -0
- package/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/node_modules/zod/v4/locales/ru.js +156 -0
- package/node_modules/zod/v4/locales/sl.cjs +136 -0
- package/node_modules/zod/v4/locales/sl.d.cts +5 -0
- package/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/node_modules/zod/v4/locales/sl.js +109 -0
- package/node_modules/zod/v4/locales/sv.cjs +137 -0
- package/node_modules/zod/v4/locales/sv.d.cts +5 -0
- package/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/node_modules/zod/v4/locales/sv.js +110 -0
- package/node_modules/zod/v4/locales/ta.cjs +137 -0
- package/node_modules/zod/v4/locales/ta.d.cts +5 -0
- package/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/node_modules/zod/v4/locales/ta.js +110 -0
- package/node_modules/zod/v4/locales/th.cjs +137 -0
- package/node_modules/zod/v4/locales/th.d.cts +5 -0
- package/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/node_modules/zod/v4/locales/th.js +110 -0
- package/node_modules/zod/v4/locales/tr.cjs +132 -0
- package/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/node_modules/zod/v4/locales/tr.d.ts +4 -0
- package/node_modules/zod/v4/locales/tr.js +105 -0
- package/node_modules/zod/v4/locales/ua.cjs +12 -0
- package/node_modules/zod/v4/locales/ua.d.cts +5 -0
- package/node_modules/zod/v4/locales/ua.d.ts +5 -0
- package/node_modules/zod/v4/locales/ua.js +5 -0
- package/node_modules/zod/v4/locales/uk.cjs +135 -0
- package/node_modules/zod/v4/locales/uk.d.cts +5 -0
- package/node_modules/zod/v4/locales/uk.d.ts +4 -0
- package/node_modules/zod/v4/locales/uk.js +108 -0
- package/node_modules/zod/v4/locales/ur.cjs +137 -0
- package/node_modules/zod/v4/locales/ur.d.cts +5 -0
- package/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/node_modules/zod/v4/locales/ur.js +110 -0
- package/node_modules/zod/v4/locales/uz.cjs +136 -0
- package/node_modules/zod/v4/locales/uz.d.cts +5 -0
- package/node_modules/zod/v4/locales/uz.d.ts +4 -0
- package/node_modules/zod/v4/locales/uz.js +109 -0
- package/node_modules/zod/v4/locales/vi.cjs +135 -0
- package/node_modules/zod/v4/locales/vi.d.cts +5 -0
- package/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/node_modules/zod/v4/locales/vi.js +108 -0
- package/node_modules/zod/v4/locales/yo.cjs +134 -0
- package/node_modules/zod/v4/locales/yo.d.cts +5 -0
- package/node_modules/zod/v4/locales/yo.d.ts +4 -0
- package/node_modules/zod/v4/locales/yo.js +107 -0
- package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
- package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-CN.js +109 -0
- package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
- package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
- package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/node_modules/zod/v4/locales/zh-TW.js +107 -0
- package/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/node_modules/zod/v4/mini/checks.js +1 -0
- package/node_modules/zod/v4/mini/coerce.cjs +52 -0
- package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/node_modules/zod/v4/mini/coerce.js +22 -0
- package/node_modules/zod/v4/mini/external.cjs +63 -0
- package/node_modules/zod/v4/mini/external.d.cts +12 -0
- package/node_modules/zod/v4/mini/external.d.ts +12 -0
- package/node_modules/zod/v4/mini/external.js +14 -0
- package/node_modules/zod/v4/mini/index.cjs +32 -0
- package/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/node_modules/zod/v4/mini/index.js +3 -0
- package/node_modules/zod/v4/mini/iso.cjs +64 -0
- package/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/node_modules/zod/v4/mini/iso.js +34 -0
- package/node_modules/zod/v4/mini/package.json +6 -0
- package/node_modules/zod/v4/mini/parse.cjs +16 -0
- package/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/node_modules/zod/v4/mini/parse.js +1 -0
- package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
- package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
- package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
- package/node_modules/zod/v4/mini/schemas.js +925 -0
- package/node_modules/zod/v4/package.json +6 -0
- package/node_modules/zod/v4-mini/index.cjs +32 -0
- package/node_modules/zod/v4-mini/index.d.cts +3 -0
- package/node_modules/zod/v4-mini/index.d.ts +3 -0
- package/node_modules/zod/v4-mini/index.js +3 -0
- package/node_modules/zod/v4-mini/package.json +6 -0
- package/package.json +11 -10
- package/chat/charts/chart/chart.component.d.ts +0 -13
- package/chat/chat-message/chat-message.component.d.ts +0 -75
- package/chat/chat-settings-v3/chat-settings-v3.component.d.ts +0 -48
- package/chat/chat.component.d.ts +0 -387
- package/chat/chat.service.d.ts +0 -370
- package/chat/custom-elements/components/code-block.component.d.ts +0 -11
- package/chat/custom-elements/components/document-reference.component.d.ts +0 -13
- package/chat/custom-elements/components/image-reference.component.d.ts +0 -14
- package/chat/custom-elements/components/page-reference.component.d.ts +0 -14
- package/chat/custom-elements/components/table-tools.component.d.ts +0 -11
- package/chat/custom-elements/custom-elements.config.d.ts +0 -2
- package/chat/custom-elements/custom-elements.service.d.ts +0 -14
- package/chat/debug-message/debug-message-details/debug-message-details.component.d.ts +0 -18
- package/chat/debug-message/debug-message.component.d.ts +0 -14
- package/chat/debug-message/debug-message.service.d.ts +0 -15
- package/chat/dialogs/delete-saved-chat.component.d.ts +0 -22
- package/chat/dialogs/rename-saved-chat.component.d.ts +0 -21
- package/chat/dialogs/updates.component.d.ts +0 -15
- package/chat/documents-upload/document-list/document-list.component.d.ts +0 -64
- package/chat/documents-upload/document-overview/document-overview.component.d.ts +0 -17
- package/chat/documents-upload/document-upload/document-upload.component.d.ts +0 -91
- package/chat/documents-upload/documents-upload.model.d.ts +0 -66
- package/chat/documents-upload/documents-upload.service.d.ts +0 -161
- package/chat/fetch-patcher/app-injector.d.ts +0 -9
- package/chat/fetch-patcher/fetch-patcher.d.ts +0 -31
- package/chat/fetch-patcher/global-error-handler.service.d.ts +0 -36
- package/chat/fetch-patcher/handle-unauthorized-logic.d.ts +0 -13
- package/chat/format-icon/format-icon.component.d.ts +0 -10
- package/chat/format-icon/icons.d.ts +0 -5
- package/chat/initials-avatar/initials-avatar.component.d.ts +0 -35
- package/chat/instance-manager.service.d.ts +0 -28
- package/chat/markdown-it/markdown-it.config.d.ts +0 -4
- package/chat/markdown-it/plugins/code-block.plugin.d.ts +0 -2
- package/chat/markdown-it/plugins/document-reference.plugin.d.ts +0 -8
- package/chat/markdown-it/plugins/image-reference.plugin.d.ts +0 -9
- package/chat/markdown-it/plugins/link.plugin.d.ts +0 -5
- package/chat/markdown-it/plugins/page-reference.plugin.d.ts +0 -9
- package/chat/markdown-it/plugins/table-tools.plugin.d.ts +0 -2
- package/chat/pipes/message-content.pipe.d.ts +0 -16
- package/chat/public-api.d.ts +0 -35
- package/chat/references/chat-reference/chat-reference.component.d.ts +0 -24
- package/chat/references/chat-reference-image/chat-reference-image.component.d.ts +0 -20
- package/chat/references/chat-reference-page/chat-reference-page.component.d.ts +0 -20
- package/chat/saved-chats/saved-chats.component.d.ts +0 -37
- package/chat/saved-chats/saved-chats.service.d.ts +0 -29
- package/chat/services/app.service.d.ts +0 -9
- package/chat/services/assistant-configuration.service.d.ts +0 -34
- package/chat/services/assistant-metadata.service.d.ts +0 -20
- package/chat/services/assistant-tokens-tracking.service.d.ts +0 -23
- package/chat/services/assistant-ws-frames.service.d.ts +0 -50
- package/chat/services/dialog.service.d.ts +0 -12
- package/chat/services/notification.service.d.ts +0 -10
- package/chat/services/principal.service.d.ts +0 -7
- package/chat/services/search.service.d.ts +0 -7
- package/chat/services/signalR-connection.service.d.ts +0 -25
- package/chat/services/signalR.web.service.d.ts +0 -35
- package/chat/services/ui.service.d.ts +0 -13
- package/chat/services/user-settings.service.d.ts +0 -7
- package/chat/smart-renderer/smart-renderer.d.ts +0 -25
- package/chat/token-progress-bar/token-progress-bar.component.d.ts +0 -24
- package/chat/tooltip/tooltip.component.d.ts +0 -12
- package/chat/tooltip/tooltip.directive.d.ts +0 -81
- package/chat/types/message-content.types.d.ts +0 -54
- package/chat/types/message-reference.types.d.ts +0 -14
- package/chat/types.d.ts +0 -920
- package/chat/utils/assistant-json.d.ts +0 -2
- package/chat/utils/utils.service.d.ts +0 -67
- package/chat/version.d.ts +0 -1
- package/esm2022/chat/charts/chart/chart.component.mjs +0 -40
- package/esm2022/chat/chat-message/chat-message.component.mjs +0 -252
- package/esm2022/chat/chat-settings-v3/chat-settings-v3.component.mjs +0 -121
- package/esm2022/chat/chat.component.mjs +0 -1115
- package/esm2022/chat/chat.service.mjs +0 -636
- package/esm2022/chat/custom-elements/components/code-block.component.mjs +0 -97
- package/esm2022/chat/custom-elements/components/document-reference.component.mjs +0 -85
- package/esm2022/chat/custom-elements/components/image-reference.component.mjs +0 -79
- package/esm2022/chat/custom-elements/components/page-reference.component.mjs +0 -79
- package/esm2022/chat/custom-elements/components/table-tools.component.mjs +0 -111
- package/esm2022/chat/custom-elements/custom-elements.config.mjs +0 -6
- package/esm2022/chat/custom-elements/custom-elements.service.mjs +0 -35
- package/esm2022/chat/debug-message/debug-message-details/debug-message-details.component.mjs +0 -43
- package/esm2022/chat/debug-message/debug-message.component.mjs +0 -40
- package/esm2022/chat/debug-message/debug-message.service.mjs +0 -49
- package/esm2022/chat/dialogs/delete-saved-chat.component.mjs +0 -81
- package/esm2022/chat/dialogs/rename-saved-chat.component.mjs +0 -85
- package/esm2022/chat/dialogs/updates.component.mjs +0 -61
- package/esm2022/chat/documents-upload/document-list/document-list.component.mjs +0 -141
- package/esm2022/chat/documents-upload/document-overview/document-overview.component.mjs +0 -42
- package/esm2022/chat/documents-upload/document-upload/document-upload.component.mjs +0 -254
- package/esm2022/chat/documents-upload/documents-upload.model.mjs +0 -2
- package/esm2022/chat/documents-upload/documents-upload.service.mjs +0 -274
- package/esm2022/chat/fetch-patcher/app-injector.mjs +0 -19
- package/esm2022/chat/fetch-patcher/fetch-patcher.mjs +0 -62
- package/esm2022/chat/fetch-patcher/global-error-handler.service.mjs +0 -92
- package/esm2022/chat/fetch-patcher/handle-unauthorized-logic.mjs +0 -19
- package/esm2022/chat/format-icon/format-icon.component.mjs +0 -23
- package/esm2022/chat/format-icon/icons.mjs +0 -138
- package/esm2022/chat/initials-avatar/initials-avatar.component.mjs +0 -60
- package/esm2022/chat/instance-manager.service.mjs +0 -46
- package/esm2022/chat/markdown-it/markdown-it.config.mjs +0 -6
- package/esm2022/chat/markdown-it/plugins/code-block.plugin.mjs +0 -14
- package/esm2022/chat/markdown-it/plugins/document-reference.plugin.mjs +0 -66
- package/esm2022/chat/markdown-it/plugins/image-reference.plugin.mjs +0 -67
- package/esm2022/chat/markdown-it/plugins/link.plugin.mjs +0 -15
- package/esm2022/chat/markdown-it/plugins/page-reference.plugin.mjs +0 -67
- package/esm2022/chat/markdown-it/plugins/table-tools.plugin.mjs +0 -12
- package/esm2022/chat/pipes/message-content.pipe.mjs +0 -37
- package/esm2022/chat/public-api.mjs +0 -37
- package/esm2022/chat/references/chat-reference/chat-reference.component.mjs +0 -72
- package/esm2022/chat/references/chat-reference-image/chat-reference-image.component.mjs +0 -42
- package/esm2022/chat/references/chat-reference-page/chat-reference-page.component.mjs +0 -42
- package/esm2022/chat/saved-chats/saved-chats.component.mjs +0 -115
- package/esm2022/chat/saved-chats/saved-chats.service.mjs +0 -170
- package/esm2022/chat/services/app.service.mjs +0 -30
- package/esm2022/chat/services/assistant-configuration.service.mjs +0 -158
- package/esm2022/chat/services/assistant-metadata.service.mjs +0 -85
- package/esm2022/chat/services/assistant-tokens-tracking.service.mjs +0 -50
- package/esm2022/chat/services/assistant-ws-frames.service.mjs +0 -391
- package/esm2022/chat/services/dialog.service.mjs +0 -40
- package/esm2022/chat/services/notification.service.mjs +0 -25
- package/esm2022/chat/services/principal.service.mjs +0 -16
- package/esm2022/chat/services/search.service.mjs +0 -13
- package/esm2022/chat/services/signalR-connection.service.mjs +0 -102
- package/esm2022/chat/services/signalR.web.service.mjs +0 -69
- package/esm2022/chat/services/ui.service.mjs +0 -61
- package/esm2022/chat/services/user-settings.service.mjs +0 -25
- package/esm2022/chat/sinequa-assistant-chat.mjs +0 -5
- package/esm2022/chat/smart-renderer/smart-renderer.mjs +0 -104
- package/esm2022/chat/token-progress-bar/token-progress-bar.component.mjs +0 -52
- package/esm2022/chat/tooltip/tooltip.component.mjs +0 -44
- package/esm2022/chat/tooltip/tooltip.directive.mjs +0 -203
- package/esm2022/chat/types/message-content.types.mjs +0 -2
- package/esm2022/chat/types/message-reference.types.mjs +0 -2
- package/esm2022/chat/types.mjs +0 -130
- package/esm2022/chat/utils/assistant-json.mjs +0 -12
- package/esm2022/chat/utils/utils.service.mjs +0 -170
- package/esm2022/chat/version.mjs +0 -3
- package/esm2022/public-api.mjs +0 -3
- package/esm2022/sinequa-assistant.mjs +0 -5
- package/public-api.d.ts +0 -1
|
@@ -1,636 +0,0 @@
|
|
|
1
|
-
import { Injectable, inject } from "@angular/core";
|
|
2
|
-
import { TranslocoService } from "@jsverse/transloco";
|
|
3
|
-
import { BehaviorSubject, catchError, defer, filter, forkJoin, from, map, switchMap, take, tap, throwError } from "rxjs";
|
|
4
|
-
import { Audit, guid, globalConfig } from "@sinequa/atomic";
|
|
5
|
-
import { AppService } from "./services/app.service";
|
|
6
|
-
import { NotificationsService } from "./services/notification.service";
|
|
7
|
-
import { PrincipalService } from "./services/principal.service";
|
|
8
|
-
import { UserSettingsWebService } from "./services/user-settings.service";
|
|
9
|
-
import { AssistantUtils } from "./utils/utils.service";
|
|
10
|
-
import { SavedChatsService } from "./saved-chats/saved-chats.service";
|
|
11
|
-
import { SignalRConnectionService } from "./services/signalR-connection.service";
|
|
12
|
-
import { AssistantConfigurationService } from "./services/assistant-configuration.service";
|
|
13
|
-
import { AssistantMetadataService } from "./services/assistant-metadata.service";
|
|
14
|
-
import { AssistantTokensTrackingService } from "./services/assistant-tokens-tracking.service";
|
|
15
|
-
import { AssistantWsFramesService } from "./services/assistant-ws-frames.service";
|
|
16
|
-
import { DebugMessageService } from "./debug-message/debug-message.service";
|
|
17
|
-
import { LIB_VERSION } from "./version";
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
export class ChatService {
|
|
20
|
-
constructor() {
|
|
21
|
-
/** Emit true once the initialization of the assistant process is done. */
|
|
22
|
-
this.initProcess$ = new BehaviorSubject(false);
|
|
23
|
-
/** Emit true once the initialization of the assistant config is done. */
|
|
24
|
-
this.initConfig$ = new BehaviorSubject(false);
|
|
25
|
-
/** Emit the global configuration of the assistant. */
|
|
26
|
-
this.assistantConfig$ = new BehaviorSubject(undefined);
|
|
27
|
-
/** Emit true if the user has been overridden, false otherwise. */
|
|
28
|
-
this.userOverride$ = new BehaviorSubject(undefined);
|
|
29
|
-
/**
|
|
30
|
-
* Emit true if the fetch of an assistant's response is ongoing (it includes Streaming status of the assistant endpoint AND saving the discussion if save Chat is enabled).
|
|
31
|
-
* This is used to prevent multiple fetches at the same time.
|
|
32
|
-
* Typically, there is no problem chaining fetches, but when forcing a reload after query changes cases, it can't be allowed because it breaks the whole business logic.
|
|
33
|
-
*/
|
|
34
|
-
this.streaming$ = new BehaviorSubject(false);
|
|
35
|
-
/** List of saved chats. */
|
|
36
|
-
this.savedChats$ = new BehaviorSubject([]);
|
|
37
|
-
/** Whether there is an error with saved chats. */
|
|
38
|
-
this.savedChatsError$ = new BehaviorSubject(false);
|
|
39
|
-
/** Emit the saved chat to load. */
|
|
40
|
-
this.loadSavedChat$ = new BehaviorSubject(undefined);
|
|
41
|
-
/** Emit the quota each time the chat is invoked. */
|
|
42
|
-
this.quota$ = new BehaviorSubject(undefined);
|
|
43
|
-
/** Emit the calculated user's token consumption based on the quota. */
|
|
44
|
-
this.userTokenConsumption$ = new BehaviorSubject(undefined);
|
|
45
|
-
/** Emit the chat usage metrics each time the generation of the assistant response is completed. */
|
|
46
|
-
this.chatUsageMetrics$ = new BehaviorSubject(undefined);
|
|
47
|
-
/** Emit the calculated chat's token consumption based on the chat usage metrics. */
|
|
48
|
-
this.chatTokenConsumption$ = new BehaviorSubject(undefined);
|
|
49
|
-
/** Emit true if "CancelTasks" is ongoing. */
|
|
50
|
-
this.stoppingGeneration$ = new BehaviorSubject(false);
|
|
51
|
-
this.userSettingsService = inject(UserSettingsWebService);
|
|
52
|
-
this.notificationsService = inject(NotificationsService);
|
|
53
|
-
this.appService = inject(AppService);
|
|
54
|
-
this.principalService = inject(PrincipalService);
|
|
55
|
-
this.assistantUtils = inject(AssistantUtils);
|
|
56
|
-
this.savedChatsService = inject(SavedChatsService);
|
|
57
|
-
// Inject the SignalRConnectionService using 'new' to ensure a separate local instance for each ChatService instance
|
|
58
|
-
this.signalRConnectionService = new SignalRConnectionService();
|
|
59
|
-
this.assistantConfigurationService = inject(AssistantConfigurationService);
|
|
60
|
-
this.assistantMetadataService = new AssistantMetadataService();
|
|
61
|
-
this.assistantTokensTrackingService = inject(AssistantTokensTrackingService);
|
|
62
|
-
this.debugMessageService = inject(DebugMessageService);
|
|
63
|
-
// Inject the AssistantWsFramesService using 'new' to ensure a separate local instance for each ChatService instance
|
|
64
|
-
this.assistantWsFramesService = new (AssistantWsFramesService);
|
|
65
|
-
this.transloco = inject(TranslocoService);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Initialize the assistant process.
|
|
69
|
-
* It includes building and starting a connection, executing parallel requests for models and functions, and handling errors during the process.
|
|
70
|
-
* ⚠️ This method MUST be called ONLY if the user is loggedIn and once when the assistant is initialized.
|
|
71
|
-
*
|
|
72
|
-
* @returns An Observable<boolean> indicating the success of the initialization process.
|
|
73
|
-
*/
|
|
74
|
-
init() {
|
|
75
|
-
// Ensure all logic is executed when subscribed to the observable
|
|
76
|
-
return defer(() => {
|
|
77
|
-
this._initAssistantConfigurationService();
|
|
78
|
-
return from(this.initChatConfig());
|
|
79
|
-
}).pipe(
|
|
80
|
-
// Wait for the configuration to be initialized
|
|
81
|
-
switchMap(() => this.initConfig$.pipe(filter(Boolean), take(1))), switchMap(() => {
|
|
82
|
-
this.getWSRequestsUrl();
|
|
83
|
-
this.getRESTRequestsUrl();
|
|
84
|
-
this._initAssistantMetadataService();
|
|
85
|
-
this._initAssistantTokensTrackingService();
|
|
86
|
-
this._initSavedChatsService();
|
|
87
|
-
this._initDebugMessageService();
|
|
88
|
-
this._initSignalRConnectionService();
|
|
89
|
-
return this.checkVersionAlignment();
|
|
90
|
-
}),
|
|
91
|
-
// Build and start the SignalR connection
|
|
92
|
-
switchMap(() => this.buildConnection()), tap(() => {
|
|
93
|
-
// Initialize AssistantWsFramesService here, now that 'this.connection' is set
|
|
94
|
-
this._initAssistantWsFramesService();
|
|
95
|
-
this.initMessageHandlers();
|
|
96
|
-
}),
|
|
97
|
-
// Start the connection
|
|
98
|
-
switchMap(() => this.startConnection()),
|
|
99
|
-
// Fetch metadata in parallel
|
|
100
|
-
switchMap(() => forkJoin([
|
|
101
|
-
this.listModels(),
|
|
102
|
-
this.listFunctions()
|
|
103
|
-
])),
|
|
104
|
-
// Map the results of parallel requests to a boolean indicating success
|
|
105
|
-
map(([models, functions]) => {
|
|
106
|
-
const result = (models !== undefined && functions !== undefined && !!models && !!functions);
|
|
107
|
-
this.initProcess$.next(result);
|
|
108
|
-
return result;
|
|
109
|
-
}),
|
|
110
|
-
// Any errors during the process are caught, logged, and re-thrown to propagate the error further
|
|
111
|
-
catchError((error) => {
|
|
112
|
-
console.error('Error occurred:', error);
|
|
113
|
-
return throwError(() => error);
|
|
114
|
-
}), take(1));
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Define the endpoint to use for the websocket requests
|
|
118
|
-
* It can be overridden by the app config
|
|
119
|
-
*/
|
|
120
|
-
getWSRequestsUrl() {
|
|
121
|
-
this.assistantConfigurationService.getWSRequestsUrl();
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Define the endpoint to use for the http requests
|
|
125
|
-
* It can be overridden by the app config
|
|
126
|
-
*/
|
|
127
|
-
getRESTRequestsUrl() {
|
|
128
|
-
this.assistantConfigurationService.getRESTRequestsUrl();
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Retrieves the plugin version information.
|
|
132
|
-
* @returns An Observable of PluginVersion or undefined.
|
|
133
|
-
*/
|
|
134
|
-
getPluginVersion() {
|
|
135
|
-
return this.assistantMetadataService.getPluginVersion();
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Retrieves the Sinequa Enterprise Search version.
|
|
139
|
-
* @returns The Sinequa Enterprise Search version as a string, or undefined if not available.
|
|
140
|
-
*/
|
|
141
|
-
getSinequaESVersion() {
|
|
142
|
-
return this.assistantMetadataService.getSinequaESVersion();
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Checks and logs the version alignment between the Angular library, plugin, and Sinequa ES.
|
|
146
|
-
* It fetches the plugin and Sinequa ES versions in parallel and logs the information to the console.
|
|
147
|
-
*/
|
|
148
|
-
checkVersionAlignment() {
|
|
149
|
-
return forkJoin([
|
|
150
|
-
this.getSinequaESVersion(),
|
|
151
|
-
this.getPluginVersion()
|
|
152
|
-
]).pipe(tap(([esVersion, pluginVersion]) => {
|
|
153
|
-
const infoMessage = `[INFO] - Assistant instance [${this.chatInstanceId}]: Angular Library [${LIB_VERSION}] Plugin [${pluginVersion?.pluginVersion}] Build [${esVersion}]`;
|
|
154
|
-
console.log("%cℹ️ " + infoMessage, "background: #E0F8F8; color: #222; border: 1px solid #222; padding: 2px 6px; border-radius: 4px; font-weight: 500;");
|
|
155
|
-
if (pluginVersion?.pluginVersion !== LIB_VERSION) {
|
|
156
|
-
const warningMessage = `[WARN] - Assistant instance [${this.chatInstanceId}]: Version mismatch between the Angular library [${LIB_VERSION}] and Plugin [${pluginVersion?.pluginVersion}].\n💡 [HELP] Please ensure both are on the same version to avoid potential issues.`;
|
|
157
|
-
console.log("%c⚠️ " + warningMessage, "background: #FFF4E5; color: #222; border: 1px solid #222; padding: 2px 6px; border-radius: 4px; font-weight: 500;");
|
|
158
|
-
}
|
|
159
|
-
}));
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Initializes the SavedChatsService with the necessary configuration.
|
|
163
|
-
*
|
|
164
|
-
* This method sets up the `SavedChatsService` by providing it with a configuration object
|
|
165
|
-
* (`SavedChatsOperationConfig`) that includes various callbacks and properties required
|
|
166
|
-
* for its operation. The initialization will only proceed if both `assistantConfig$` and
|
|
167
|
-
* `REST_REQUEST_URL` are available.
|
|
168
|
-
*
|
|
169
|
-
* The configuration object includes:
|
|
170
|
-
* - Application name retrieval.
|
|
171
|
-
* - Instance ID retrieval.
|
|
172
|
-
* - REST API URL retrieval.
|
|
173
|
-
* - Debug flag retrieval.
|
|
174
|
-
* - Chat ID for new saves.
|
|
175
|
-
* - Saved chats enablement check.
|
|
176
|
-
* - Methods for setting a saved chat ID, updating the saved chats list, and generating audit events.
|
|
177
|
-
*
|
|
178
|
-
* If the required dependencies are not ready, an error is logged to the console.
|
|
179
|
-
*
|
|
180
|
-
* @private
|
|
181
|
-
*/
|
|
182
|
-
_initSavedChatsService() {
|
|
183
|
-
if (this.assistantConfig$.value && this.REST_REQUEST_URL) {
|
|
184
|
-
const savedChatsOpConfig = {
|
|
185
|
-
getAppName: () => this.appService.appName,
|
|
186
|
-
getInstanceId: () => this.chatInstanceId,
|
|
187
|
-
getRestUrl: () => this.REST_REQUEST_URL,
|
|
188
|
-
getDebugFlag: () => this.assistantConfig$.value.defaultValues.debug,
|
|
189
|
-
isSavedChatsEnabled: () => !!this.assistantConfig$.value?.savedChatSettings.enabled,
|
|
190
|
-
setSavedChatsErrorStatus: (hasError) => this.savedChatsError$.next(hasError),
|
|
191
|
-
updateSavedChatsList: (chats) => this.savedChats$.next(chats),
|
|
192
|
-
generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id),
|
|
193
|
-
};
|
|
194
|
-
this.savedChatsService.init(savedChatsOpConfig);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
// This case should ideally not happen if init order is correct
|
|
198
|
-
console.error("Cannot initialize SavedChatsService: assistantConfig or REST_REQUEST_URL not ready.");
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Initializes the SignalR connection service with the necessary configuration.
|
|
203
|
-
*
|
|
204
|
-
* This method ensures that the SignalR connection service is properly set up
|
|
205
|
-
* by providing it with the required configuration values, such as the WebSocket
|
|
206
|
-
* request URL and assistant configuration. It also manages the SignalR hub connection
|
|
207
|
-
* instance.
|
|
208
|
-
*
|
|
209
|
-
* Preconditions:
|
|
210
|
-
* - `assistantConfig$.value` must be available.
|
|
211
|
-
* - `WS_REQUEST_URL` must be defined.
|
|
212
|
-
*
|
|
213
|
-
* If these preconditions are not met, an error is logged to the console.
|
|
214
|
-
*
|
|
215
|
-
* @private
|
|
216
|
-
*/
|
|
217
|
-
_initSignalRConnectionService() {
|
|
218
|
-
if (this.assistantConfig$.value && this.WS_REQUEST_URL) {
|
|
219
|
-
const signalROpConfig = {
|
|
220
|
-
getWsRequestUrl: () => this.WS_REQUEST_URL,
|
|
221
|
-
getAssistantConfigValue: () => this.assistantConfig$.value,
|
|
222
|
-
getHubConnection: () => this.connection, // Using getHubConnection as per user's file
|
|
223
|
-
setHubConnection: (conn) => { this.connection = conn; }
|
|
224
|
-
};
|
|
225
|
-
this.signalRConnectionService.init(signalROpConfig);
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
// This case should ideally not happen if init order is correct
|
|
229
|
-
console.error("Cannot initialize SignalRConnectionService: assistantConfig or WS_REQUEST_URL not ready.");
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Initializes the Assistant Configuration Service with the necessary operation context.
|
|
234
|
-
* This method sets up the configuration context by providing various utility functions
|
|
235
|
-
* and state management mechanisms required for the assistant's configuration operations.
|
|
236
|
-
*
|
|
237
|
-
* The operation context includes:
|
|
238
|
-
* - Methods to retrieve chat instance and chat IDs.
|
|
239
|
-
* - Methods to get and set assistant configuration values.
|
|
240
|
-
* - Methods to set WebSocket and REST request URLs.
|
|
241
|
-
* - Methods to update the initialization configuration status.
|
|
242
|
-
* - A method to generate audit events for tracking operations.
|
|
243
|
-
*
|
|
244
|
-
* @private
|
|
245
|
-
*/
|
|
246
|
-
_initAssistantConfigurationService() {
|
|
247
|
-
const configOpContext = {
|
|
248
|
-
getChatInstanceId: () => this.chatInstanceId,
|
|
249
|
-
getChatId: () => this.chatId,
|
|
250
|
-
getAssistantConfigValue: () => this.assistantConfig$.value,
|
|
251
|
-
setWSRequestsUrl: (url) => this.WS_REQUEST_URL = url,
|
|
252
|
-
setRESTRequestsUrl: (url) => this.REST_REQUEST_URL = url,
|
|
253
|
-
setAssistantConfig: (config) => this.assistantConfig$.next(config),
|
|
254
|
-
setInitConfigStatus: (status) => this.initConfig$.next(status),
|
|
255
|
-
generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id)
|
|
256
|
-
};
|
|
257
|
-
this.assistantConfigurationService.init(configOpContext);
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Initializes the AssistantMetadataService with the necessary operation context.
|
|
261
|
-
*
|
|
262
|
-
* This method checks if the `assistantConfig$` value and `REST_REQUEST_URL` are available.
|
|
263
|
-
* If both are ready, it creates an `AssistantMetadataOperationContext` object and
|
|
264
|
-
* initializes the `assistantMetadataService` with it. The operation context provides
|
|
265
|
-
* methods to retrieve the REST URL, assistant configuration, and to set models and functions.
|
|
266
|
-
*
|
|
267
|
-
* If the required values are not ready, an error is logged to the console.
|
|
268
|
-
*
|
|
269
|
-
* @private
|
|
270
|
-
*/
|
|
271
|
-
_initAssistantMetadataService() {
|
|
272
|
-
if (this.assistantConfig$.value && this.REST_REQUEST_URL) {
|
|
273
|
-
const metadataOpContext = {
|
|
274
|
-
getRestUrl: () => this.REST_REQUEST_URL,
|
|
275
|
-
getAssistantConfigValue: () => this.assistantConfig$.value,
|
|
276
|
-
setModels: (models) => { this.models = models; },
|
|
277
|
-
setFunctions: (functions) => { this.functions = functions; }
|
|
278
|
-
};
|
|
279
|
-
this.assistantMetadataService.init(metadataOpContext);
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
console.error("Cannot initialize AssistantMetadataService: assistantConfig or REST_REQUEST_URL not ready.");
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
/**
|
|
286
|
-
* Initializes the Assistant Tokens Tracking Service with the necessary operation context.
|
|
287
|
-
* This method sets up the service by providing it with functions to manage quotas,
|
|
288
|
-
* token consumption, usage metrics, and audit events, as well as access to assistant configuration
|
|
289
|
-
* and model retrieval.
|
|
290
|
-
*
|
|
291
|
-
* The initialization will only proceed if the assistant configuration is available.
|
|
292
|
-
* If the configuration is not ready, an error message is logged to the console.
|
|
293
|
-
*
|
|
294
|
-
* @private
|
|
295
|
-
*/
|
|
296
|
-
_initAssistantTokensTrackingService() {
|
|
297
|
-
if (this.assistantConfig$.value) {
|
|
298
|
-
const tokensOpContext = {
|
|
299
|
-
getAssistantConfigValue: () => this.assistantConfig$.value,
|
|
300
|
-
setQuota: (quota) => this.quota$.next(quota),
|
|
301
|
-
setUserTokenConsumption: (consumption) => this.userTokenConsumption$.next(consumption),
|
|
302
|
-
setChatUsageMetrics: (metrics) => this.chatUsageMetrics$.next(metrics),
|
|
303
|
-
setChatTokenConsumption: (consumption) => this.chatTokenConsumption$.next(consumption),
|
|
304
|
-
generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id),
|
|
305
|
-
getModel: (serviceId, modelId) => this.getModel(serviceId, modelId)
|
|
306
|
-
};
|
|
307
|
-
this.assistantTokensTrackingService.init(tokensOpContext);
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
console.error("Cannot initialize AssistantTokensTrackingService: assistantConfig not ready.");
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Initializes the Assistant WebSocket Frames Service with the necessary operation context.
|
|
315
|
-
* This method sets up the required dependencies and configuration for the service to function properly.
|
|
316
|
-
* It ensures that the assistant configuration and connection are available before initializing the service.
|
|
317
|
-
*
|
|
318
|
-
* The operation context provides various utility functions and state management methods, including:
|
|
319
|
-
* - Accessing the assistant configuration, chat instance ID, saved chat ID, and chat history.
|
|
320
|
-
* - Managing streaming and stopping generation statuses.
|
|
321
|
-
* - Updating quota and chat usage metrics.
|
|
322
|
-
* - Generating audit events.
|
|
323
|
-
* - Managing saved chats (adding, updating, and listing).
|
|
324
|
-
*
|
|
325
|
-
* If the required dependencies (`assistantConfig$` and `connection`) are not ready, an error is logged.
|
|
326
|
-
*
|
|
327
|
-
* @private
|
|
328
|
-
*/
|
|
329
|
-
_initAssistantWsFramesService() {
|
|
330
|
-
if (this.assistantConfig$.value && this.connection) {
|
|
331
|
-
const wsFramesOpContext = {
|
|
332
|
-
getAssistantConfig: () => this.assistantConfig$.value,
|
|
333
|
-
getChatInstanceId: () => this.chatInstanceId,
|
|
334
|
-
getChatId: () => this.chatId,
|
|
335
|
-
getHubConnection: () => this.connection,
|
|
336
|
-
getChatHistory: () => this.chatHistory,
|
|
337
|
-
setStreamingStatus: (isStreaming) => this.streaming$.next(isStreaming),
|
|
338
|
-
setChatHistory: (history) => { this.chatHistory = history; },
|
|
339
|
-
setStoppingGenerationStatus: (isStopping) => this.stoppingGeneration$.next(isStopping),
|
|
340
|
-
setSavedChatsErrorStatus: (hasError) => this.savedChatsError$.next(hasError),
|
|
341
|
-
updateQuota: (quota, propagateError) => this.updateQuota(quota, propagateError),
|
|
342
|
-
updateChatUsageMetrics: (metrics) => this.updateChatUsageMetrics(metrics),
|
|
343
|
-
generateAuditEvent: (type, details, id) => this.generateAuditEvent(type, details, id),
|
|
344
|
-
addSavedChat: (id, messages) => this.addSavedChat(id, messages),
|
|
345
|
-
updateSavedChat: (id, name, messages) => this.updateSavedChat(id, name, messages),
|
|
346
|
-
listSavedChat: () => this.listSavedChat(),
|
|
347
|
-
isExistingSavedChat: (id) => this.isExistingSavedChat(id)
|
|
348
|
-
};
|
|
349
|
-
this.assistantWsFramesService.init(wsFramesOpContext);
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
console.error("Cannot initialize AssistantWsFramesService: core dependencies not ready.");
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
_initDebugMessageService() {
|
|
356
|
-
if (this.assistantConfig$.value && this.REST_REQUEST_URL) {
|
|
357
|
-
const debugMessageOpContext = {
|
|
358
|
-
getRestUrl: () => this.REST_REQUEST_URL
|
|
359
|
-
};
|
|
360
|
-
this.debugMessageService.init(debugMessageOpContext);
|
|
361
|
-
}
|
|
362
|
-
else {
|
|
363
|
-
console.error("Cannot initialize DebugMessageService: assistantConfig or REST_REQUEST_URL not ready.");
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
get assistants() {
|
|
367
|
-
return this.assistantConfigurationService.getAssistantsSetting();
|
|
368
|
-
}
|
|
369
|
-
/**
|
|
370
|
-
* Get the instance ID of the chat service
|
|
371
|
-
* @returns The instance ID of the chat service
|
|
372
|
-
*/
|
|
373
|
-
get chatInstanceId() {
|
|
374
|
-
return this._chatInstanceId;
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* Persist the instance ID of the chat service
|
|
378
|
-
* @param instanceId The instance ID of the chat service
|
|
379
|
-
*/
|
|
380
|
-
setChatInstanceId(instanceId) {
|
|
381
|
-
this._chatInstanceId = instanceId;
|
|
382
|
-
}
|
|
383
|
-
/**
|
|
384
|
-
* Get the ID of the current chat discussion which is used to save/get/delete the discussion and identify audit events
|
|
385
|
-
* @returns The ID of the current chat discussion
|
|
386
|
-
*/
|
|
387
|
-
get chatId() {
|
|
388
|
-
return this._chatId;
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Generate an GUID for the current chat discussion which is used to save/get/delete it and identify audit events
|
|
392
|
-
* @param chatId if provided, it will be considered as the ID of the current chat discussion which is used to identify audit events
|
|
393
|
-
*/
|
|
394
|
-
generateChatId(chatId) {
|
|
395
|
-
this._chatId = chatId || guid();
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* Initialize the chat config by managing ONLY sub-object **defaultValues** configs of the standard app config (defined in the customization json tab ) and the user preferences.
|
|
399
|
-
* To do so, a tracking mechanism is implemented to notify the user about the available updates in the defaultValues object of the standard app config.
|
|
400
|
-
* The rest of the config object coming from "standard app config" is used as it is without any override.
|
|
401
|
-
* Thus, the user preferences are used only for the defaultValues object.
|
|
402
|
-
* This provide a centralized way to manage the rest of the config object by admins and ensure a unique common behavior for all users.
|
|
403
|
-
*/
|
|
404
|
-
async initChatConfig() {
|
|
405
|
-
this.assistantConfigurationService.initChatConfig();
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Update the chat config and store its defaultValues in the user preferences
|
|
409
|
-
* @param config The updated chat config
|
|
410
|
-
* @param hashes The updated hashes to store in the user preferences
|
|
411
|
-
* @param notify Whether to notify the user about the update
|
|
412
|
-
* @param successCallback The callback to execute if the update is successful
|
|
413
|
-
* @param errorCallback The callback to execute if the update fails
|
|
414
|
-
*/
|
|
415
|
-
updateChatConfig(config, hashes, notify = true, successCallback, errorCallback) {
|
|
416
|
-
this.assistantConfigurationService.updateChatConfig(config, hashes, notify, successCallback, errorCallback);
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* Overrides the logged in user
|
|
420
|
-
*/
|
|
421
|
-
overrideUser() {
|
|
422
|
-
const { userOverrideActive, userOverride } = globalConfig;
|
|
423
|
-
if (!(userOverrideActive && userOverride)) {
|
|
424
|
-
this.userOverride$.next(false);
|
|
425
|
-
return;
|
|
426
|
-
}
|
|
427
|
-
// Prepare the payload to send to the OverrideUser method
|
|
428
|
-
const data = {
|
|
429
|
-
instanceId: this.chatInstanceId,
|
|
430
|
-
user: userOverride.username,
|
|
431
|
-
domain: userOverride.domain
|
|
432
|
-
};
|
|
433
|
-
// Invoke the OverrideUser method and handle errors
|
|
434
|
-
this.connection.invoke('OverrideUser', data)
|
|
435
|
-
.then((res) => this.userOverride$.next(!!res))
|
|
436
|
-
.catch(error => {
|
|
437
|
-
console.error('Error invoking OverrideUser:', error);
|
|
438
|
-
return Promise.resolve(); // Return a resolved promise to handle the error and prevent unhandled promise rejection when no further error handling exists downstream
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
/**
|
|
442
|
-
* Calls the Fetch API to retrieve a new message given all previous messages
|
|
443
|
-
*/
|
|
444
|
-
fetch(messages, query) {
|
|
445
|
-
return this.assistantWsFramesService.fetch(messages, query);
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Return the list of models available on the server
|
|
449
|
-
*/
|
|
450
|
-
listModels() {
|
|
451
|
-
return this.assistantMetadataService.listModels();
|
|
452
|
-
}
|
|
453
|
-
/**
|
|
454
|
-
* Return the list of functions available on the server AND matching enabled functions in the chat config
|
|
455
|
-
*/
|
|
456
|
-
listFunctions() {
|
|
457
|
-
return this.assistantMetadataService.listFunctions();
|
|
458
|
-
}
|
|
459
|
-
/**
|
|
460
|
-
* Stops the assistant answer generation and cancels all the ongoing and pending related tasks
|
|
461
|
-
*/
|
|
462
|
-
stopGeneration() {
|
|
463
|
-
return this.assistantWsFramesService.stopGeneration();
|
|
464
|
-
}
|
|
465
|
-
/**
|
|
466
|
-
* A handler for quota updates each time the chat is invoked.
|
|
467
|
-
* It emits the updated quota to the quota$ subject, emits accordingly the updated user's tokens consumption and notifies the user if the max quota is reached.
|
|
468
|
-
* @param quota The updated quota
|
|
469
|
-
* @param propagateError Whether to propagate the error to the caller
|
|
470
|
-
*/
|
|
471
|
-
updateQuota(quota, propagateError = false) {
|
|
472
|
-
this.assistantTokensTrackingService.updateQuota(quota, propagateError);
|
|
473
|
-
}
|
|
474
|
-
/**
|
|
475
|
-
* A handler for chat usage metrics each time the generation of the assistant response is completed.
|
|
476
|
-
* It emits the chat usage metrics to the chatUsageMetrics$ subject, emits accordingly the updated chat's tokens consumption
|
|
477
|
-
* @param chatUsageMetrics The chat usage metrics
|
|
478
|
-
*/
|
|
479
|
-
updateChatUsageMetrics(chatUsageMetrics) {
|
|
480
|
-
this.assistantTokensTrackingService.updateChatUsageMetrics(chatUsageMetrics);
|
|
481
|
-
}
|
|
482
|
-
/**
|
|
483
|
-
* Get the model description for the given (serviceId + modelId)
|
|
484
|
-
* If a model is not found, an error message is returned
|
|
485
|
-
* @param serviceId The serviceId of the model
|
|
486
|
-
* @param modelId The modelId of the model
|
|
487
|
-
* @returns The model description
|
|
488
|
-
*/
|
|
489
|
-
getModel(serviceId, modelId) {
|
|
490
|
-
const model = this.models?.find(m => m.serviceId === serviceId && m.modelId === modelId);
|
|
491
|
-
// Handle obsolete config
|
|
492
|
-
if (!model) {
|
|
493
|
-
this.notificationsService.error(`FATAL ERROR : The model (serviceId = '${serviceId}', modelId = '${modelId}') is no longer available. Please contact an admin for further information.`);
|
|
494
|
-
throw new Error(`FATAL ERROR : The model (serviceId = '${serviceId}', modelId = '${modelId}') is no longer available`);
|
|
495
|
-
}
|
|
496
|
-
return model;
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Fetch the list saved chats belonging to a specific instance of the assistant
|
|
500
|
-
*/
|
|
501
|
-
listSavedChat() {
|
|
502
|
-
this.savedChatsService.listChats();
|
|
503
|
-
}
|
|
504
|
-
/**
|
|
505
|
-
* Return the saved chat with the given id, if exists. Otherwise, return undefined
|
|
506
|
-
* @param id The id of the saved chat
|
|
507
|
-
*/
|
|
508
|
-
getSavedChat(id) {
|
|
509
|
-
return this.savedChatsService.getChatById(id);
|
|
510
|
-
}
|
|
511
|
-
/**
|
|
512
|
-
* Check if a saved chat with the given id already exists
|
|
513
|
-
* @param id The id of the saved chat
|
|
514
|
-
* @returns True if the saved chat exists, false otherwise
|
|
515
|
-
*/
|
|
516
|
-
isExistingSavedChat(id) {
|
|
517
|
-
return this.savedChatsService.isExistingChat(id);
|
|
518
|
-
}
|
|
519
|
-
/**
|
|
520
|
-
* Save a chat with the given messages
|
|
521
|
-
* @param messages The messages to add to the saved chat index
|
|
522
|
-
* @returns The saved chat
|
|
523
|
-
*/
|
|
524
|
-
addSavedChat(id, messages) {
|
|
525
|
-
return this.savedChatsService.addChat(id, messages);
|
|
526
|
-
}
|
|
527
|
-
/**
|
|
528
|
-
* Update a saved chat with the given id.
|
|
529
|
-
* @param id The id of the saved chat
|
|
530
|
-
* @param name The new name of the saved chat, if provided
|
|
531
|
-
* @param messages The messages to update the saved chat history, if provided
|
|
532
|
-
* @returns True if the saved chat has been successfully updated
|
|
533
|
-
*/
|
|
534
|
-
updateSavedChat(id, name, messages) {
|
|
535
|
-
return this.savedChatsService.updateChat(id, name, messages);
|
|
536
|
-
}
|
|
537
|
-
/**
|
|
538
|
-
* Bulk delete of saved chats matching the given ids
|
|
539
|
-
* @param ids List of ids of the saved chats to delete
|
|
540
|
-
* @returns The number of deleted chats
|
|
541
|
-
*/
|
|
542
|
-
deleteSavedChat(ids) {
|
|
543
|
-
return this.savedChatsService.deleteChat(ids);
|
|
544
|
-
}
|
|
545
|
-
getDebugMessage(message) {
|
|
546
|
-
return this.debugMessageService.getDebugMessage(message);
|
|
547
|
-
}
|
|
548
|
-
/**
|
|
549
|
-
* Initialize out-of-the-box handlers
|
|
550
|
-
* It is a placeholder for non-streaming scenarios, where you invoke a specific hub method, and the server responds with frame message(s)
|
|
551
|
-
*/
|
|
552
|
-
initMessageHandlers() {
|
|
553
|
-
this.assistantWsFramesService.initMessageHandlers();
|
|
554
|
-
}
|
|
555
|
-
/**
|
|
556
|
-
* Override and register the entire _messageHandlers map by merging the provided map with the default one
|
|
557
|
-
* @param _messageHandlers
|
|
558
|
-
*/
|
|
559
|
-
overrideMessageHandlers(_messageHandlers) {
|
|
560
|
-
this.assistantWsFramesService.overrideMessageHandlers(_messageHandlers);
|
|
561
|
-
}
|
|
562
|
-
/**
|
|
563
|
-
* Add a listener for a specific event.
|
|
564
|
-
* If a listener for this same event already exists, it will be overridden.
|
|
565
|
-
* If the listener has "isGlobalHandler" set to true, it will be registered to the hub connection.
|
|
566
|
-
* @param eventName Name of the event to register a listener for
|
|
567
|
-
* @param eventHandler The handler to be called when the event is received
|
|
568
|
-
*/
|
|
569
|
-
addMessageHandler(eventName, eventHandler) {
|
|
570
|
-
this.assistantWsFramesService.addMessageHandler(eventName, eventHandler);
|
|
571
|
-
}
|
|
572
|
-
/**
|
|
573
|
-
* Remove a listener for a specific event from the _messageHandlers map and unsubscribe from receiving messages for this event from the SignalR hub.
|
|
574
|
-
* @param eventName Name of the event to remove the listener for
|
|
575
|
-
*/
|
|
576
|
-
removeMessageHandler(eventName) {
|
|
577
|
-
this.assistantWsFramesService.removeMessageHandler(eventName);
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* Build a connection to the signalR websocket and register default listeners to the methods defined in the server hub class
|
|
581
|
-
* @param options The options for the connection. It overrides the default options
|
|
582
|
-
* @param logLevel Define the log level displayed in the console
|
|
583
|
-
* @returns Promise that resolves when the connection is built
|
|
584
|
-
*/
|
|
585
|
-
buildConnection(options) {
|
|
586
|
-
return this.signalRConnectionService.buildConnection(options);
|
|
587
|
-
}
|
|
588
|
-
/**
|
|
589
|
-
* Start the connection
|
|
590
|
-
* @returns Promise that resolves when the connection is started
|
|
591
|
-
*/
|
|
592
|
-
startConnection() {
|
|
593
|
-
return this.signalRConnectionService.startConnection();
|
|
594
|
-
}
|
|
595
|
-
/**
|
|
596
|
-
* Stop the connection
|
|
597
|
-
* @returns Promise that resolves when the connection is stopped
|
|
598
|
-
*/
|
|
599
|
-
stopConnection() {
|
|
600
|
-
return this.signalRConnectionService.stopConnection();
|
|
601
|
-
}
|
|
602
|
-
/**
|
|
603
|
-
* Generate an audit event with the given type and details. The generated audit event is sent afterwards via the AuditWebService
|
|
604
|
-
* @param type Audit event type
|
|
605
|
-
* @param details Audit event details
|
|
606
|
-
* @param id Actions (savedChat delete/rename/...) may occur on a specific chat different than the current one stored in this service, so the chat id can be provided
|
|
607
|
-
*/
|
|
608
|
-
async generateAuditEvent(type, details, id) {
|
|
609
|
-
const baseDetails = {
|
|
610
|
-
"url": decodeURIComponent(window.location.href),
|
|
611
|
-
"app": this.appService.appName,
|
|
612
|
-
"user-id": this.principalService.principal?.userId,
|
|
613
|
-
"instance-id": this.chatInstanceId,
|
|
614
|
-
"chat-id": id || this.chatId,
|
|
615
|
-
"service-id": this.assistantConfig$.value.defaultValues.service_id,
|
|
616
|
-
"model-id": this.assistantConfig$.value.defaultValues.model_id
|
|
617
|
-
};
|
|
618
|
-
if (type === "ast-message.message") {
|
|
619
|
-
baseDetails["is-user-input"] = false;
|
|
620
|
-
}
|
|
621
|
-
const audit = {
|
|
622
|
-
type,
|
|
623
|
-
detail: {
|
|
624
|
-
...baseDetails,
|
|
625
|
-
...details
|
|
626
|
-
}
|
|
627
|
-
};
|
|
628
|
-
await Audit.notify(audit);
|
|
629
|
-
}
|
|
630
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
631
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService }); }
|
|
632
|
-
}
|
|
633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChatService, decorators: [{
|
|
634
|
-
type: Injectable
|
|
635
|
-
}] });
|
|
636
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sUUFBUSxFQUNSLElBQUksRUFDSixHQUFHLEVBRUgsU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0gsVUFBVSxFQUNYLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUNMLEtBQUssRUFFTCxJQUFJLEVBQ0osWUFBWSxFQUNiLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBc0IxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUE2QixNQUFNLG1DQUFtQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBb0MsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsNkJBQTZCLEVBQTBDLE1BQU0sNENBQTRDLENBQUM7QUFDbkksT0FBTyxFQUFFLHdCQUF3QixFQUFxQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ3BILE9BQU8sRUFBRSw4QkFBOEIsRUFBMkMsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2SSxP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QkFBcUIsRUFBRSxDQUFDO1lBQ25DLFdBQVcsQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdkMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHO1lBQ1osSUFBSTtZQUNKLE1BQU0sRUFBRTtnQkFDTixHQUFHLFdBQVc7Z0JBQ2QsR0FBRyxPQUFPO2FBQ1g7U0FDRixDQUFBO1FBQ0QsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBOXFCVSxXQUFXO21IQUFYLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gXCJAanN2ZXJzZS90cmFuc2xvY29cIjtcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgZGVmZXIsXG4gIGZpbHRlcixcbiAgZm9ya0pvaW4sXG4gIGZyb20sXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXAsXG4gIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb24gfSBmcm9tIFwiQG1pY3Jvc29mdC9zaWduYWxyXCI7XG5pbXBvcnQge1xuICBBdWRpdCxcbiAgUXVlcnksXG4gIGd1aWQsXG4gIGdsb2JhbENvbmZpZ1xufSBmcm9tIFwiQHNpbmVxdWEvYXRvbWljXCI7XG5cbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hcHAuc2VydmljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgUHJpbmNpcGFsU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL3ByaW5jaXBhbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NXZWJTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvdXNlci1zZXR0aW5ncy5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBDaGF0Q29uZmlnLFxuICBDaGF0TWVzc2FnZSxcbiAgQ2hhdFJlc3BvbnNlLFxuICBDaGF0VXNhZ2VNZXRyaWNzLFxuICBEZWJ1Z01lc3NhZ2UsXG4gIERlbGV0ZVNhdmVkQ2hhdFJlc3BvbnNlLFxuICBHbGxtRnVuY3Rpb24sXG4gIEdsbG1Nb2RlbERlc2NyaXB0aW9uLFxuICBLdk9iamVjdCxcbiAgTGlzdE9iamVjdCxcbiAgTWVzc2FnZUhhbmRsZXIsXG4gIFBsdWdpblZlcnNpb24sXG4gIFF1b3RhLFxuICBTYXZlZENoYXQsXG4gIFNhdmVkQ2hhdEhpc3RvcnksXG4gIFNhdmVkQ2hhdFJlc3BvbnNlLFxuICBUb2tlbkNvbnN1bXB0aW9uLFxuICBVc2VyVG9rZW5Db25zdW1wdGlvblxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9zZXJ2aWNlcy9zaWduYWxSLndlYi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRVdGlscyB9IGZyb20gXCIuL3V0aWxzL3V0aWxzLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNhdmVkQ2hhdHNTZXJ2aWNlLCBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vc2F2ZWQtY2hhdHMvc2F2ZWQtY2hhdHMuc2VydmljZVwiO1xuaW1wb3J0IHsgU2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlLCBTaWduYWxSQ29ubmVjdGlvbk9wZXJhdGlvbkNvbmZpZyB9IGZyb20gXCIuL3NlcnZpY2VzL3NpZ25hbFItY29ubmVjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSwgQXNzaXN0YW50Q29uZmlndXJhdGlvbk9wZXJhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3Npc3RhbnQtY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UsIEFzc2lzdGFudE1ldGFkYXRhT3BlcmF0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC1tZXRhZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UsIEFzc2lzdGFudFRva2Vuc1RyYWNraW5nT3BlcmF0aW9uQ29udGV4dCB9IGZyb20gXCIuL3NlcnZpY2VzL2Fzc2lzdGFudC10b2tlbnMtdHJhY2tpbmcuc2VydmljZVwiO1xuaW1wb3J0IHsgQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLCBBc3Npc3RhbnRXc0ZyYW1lc0NvbnRleHQgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hc3Npc3RhbnQtd3MtZnJhbWVzLnNlcnZpY2VcIjtcbmltcG9ydCB7IERlYnVnTWVzc2FnZU9wZXJhdGlvbkNvbmZpZywgRGVidWdNZXNzYWdlU2VydmljZSB9IGZyb20gXCIuL2RlYnVnLW1lc3NhZ2UvZGVidWctbWVzc2FnZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBMSUJfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb25cIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENoYXRTZXJ2aWNlIHtcblxuICAvKiogTmFtZSBvZiB0aGUgYXNzaXN0YW50IHdlYnNvY2tldCBlbmRwb2ludC4gKi9cbiAgV1NfUkVRVUVTVF9VUkw6IHN0cmluZztcbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCBSRVNUIGVuZHBvaW50LiAqL1xuICBSRVNUX1JFUVVFU1RfVVJMOiBzdHJpbmc7XG4gIC8qKiBTaWduYWxSIGNvbm5lY3Rpb24gaW5zdGFuY2UgKi9cbiAgcHVibGljIGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKiBFbWl0IHRydWUgb25jZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGFzc2lzdGFudCBwcm9jZXNzIGlzIGRvbmUuICovXG4gIGluaXRQcm9jZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogRW1pdCB0cnVlIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgY29uZmlnIGlzIGRvbmUuICovXG4gIGluaXRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBFbWl0IHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgYXNzaXN0YW50LiAqL1xuICBhc3Npc3RhbnRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGF0Q29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0cnVlIGlmIHRoZSB1c2VyIGhhcyBiZWVuIG92ZXJyaWRkZW4sIGZhbHNlIG90aGVyd2lzZS4gKi9cbiAgdXNlck92ZXJyaWRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqXG4gICAqIEVtaXQgdHJ1ZSBpZiB0aGUgZmV0Y2ggb2YgYW4gYXNzaXN0YW50J3MgcmVzcG9uc2UgaXMgb25nb2luZyAoaXQgaW5jbHVkZXMgU3RyZWFtaW5nIHN0YXR1cyBvZiB0aGUgYXNzaXN0YW50IGVuZHBvaW50IEFORCBzYXZpbmcgdGhlIGRpc2N1c3Npb24gaWYgc2F2ZSBDaGF0IGlzIGVuYWJsZWQpLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBmZXRjaGVzIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIFR5cGljYWxseSwgdGhlcmUgaXMgbm8gcHJvYmxlbSBjaGFpbmluZyBmZXRjaGVzLCBidXQgd2hlbiBmb3JjaW5nIGEgcmVsb2FkIGFmdGVyIHF1ZXJ5IGNoYW5nZXMgY2FzZXMsIGl0IGNhbid0IGJlIGFsbG93ZWQgYmVjYXVzZSBpdCBicmVha3MgdGhlIHdob2xlIGJ1c2luZXNzIGxvZ2ljLlxuICAqL1xuICBzdHJlYW1pbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBTdG9yZSB0aGUgbWVzc2FnZXMgaGlzdG9yeSBvZiB0aGUgY3VycmVudCBjaGF0LiAqL1xuICBjaGF0SGlzdG9yeTogQ2hhdE1lc3NhZ2VbXSB8IHVuZGVmaW5lZDtcbiAgLyoqIExpc3Qgb2YgbW9kZWxzIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyLiAqL1xuICBtb2RlbHM6IEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBMaXN0IG9mIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci4gKi9cbiAgZnVuY3Rpb25zOiBHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZDtcbiAgLyoqIExpc3Qgb2Ygc2F2ZWQgY2hhdHMuICovXG4gIHNhdmVkQ2hhdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYXZlZENoYXRbXT4oW10pO1xuICAvKiogV2hldGhlciB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHNhdmVkIGNoYXRzLiAqL1xuICBzYXZlZENoYXRzRXJyb3IkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBFbWl0IHRoZSBzYXZlZCBjaGF0IHRvIGxvYWQuICovXG4gIGxvYWRTYXZlZENoYXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYXZlZENoYXQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBFbWl0IHRoZSBxdW90YSBlYWNoIHRpbWUgdGhlIGNoYXQgaXMgaW52b2tlZC4gKi9cbiAgcXVvdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdW90YSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIGNhbGN1bGF0ZWQgdXNlcidzIHRva2VuIGNvbnN1bXB0aW9uIGJhc2VkIG9uIHRoZSBxdW90YS4gKi9cbiAgdXNlclRva2VuQ29uc3VtcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyVG9rZW5Db25zdW1wdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIGNoYXQgdXNhZ2UgbWV0cmljcyBlYWNoIHRpbWUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGFzc2lzdGFudCByZXNwb25zZSBpcyBjb21wbGV0ZWQuICovXG4gIGNoYXRVc2FnZU1ldHJpY3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGF0VXNhZ2VNZXRyaWNzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0aGUgY2FsY3VsYXRlZCBjaGF0J3MgdG9rZW4gY29uc3VtcHRpb24gYmFzZWQgb24gdGhlIGNoYXQgdXNhZ2UgbWV0cmljcy4gKi9cbiAgY2hhdFRva2VuQ29uc3VtcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUb2tlbkNvbnN1bXB0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0cnVlIGlmIFwiQ2FuY2VsVGFza3NcIiBpcyBvbmdvaW5nLiAqL1xuICBzdG9wcGluZ0dlbmVyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBJbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlIGRlZmluaW5nIHRoZSBhc3Npc3RhbnQgaW5zdGFuY2UuICovXG4gIHByaXZhdGUgX2NoYXRJbnN0YW5jZUlkOiBzdHJpbmc7XG4gIC8qKiBHZW5lcmF0ZWQgR1VJRCBmb3IgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0IGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHMuICovXG4gIHByaXZhdGUgX2NoYXRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyB1c2VyU2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXR0aW5nc1dlYlNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcbiAgcHVibGljIHByaW5jaXBhbFNlcnZpY2UgPSBpbmplY3QoUHJpbmNpcGFsU2VydmljZSk7XG4gIHB1YmxpYyBhc3Npc3RhbnRVdGlscyA9IGluamVjdChBc3Npc3RhbnRVdGlscyk7XG4gIHByaXZhdGUgc2F2ZWRDaGF0c1NlcnZpY2UgPSBpbmplY3QoU2F2ZWRDaGF0c1NlcnZpY2UpO1xuICAvLyBJbmplY3QgdGhlIFNpZ25hbFJDb25uZWN0aW9uU2VydmljZSB1c2luZyAnbmV3JyB0byBlbnN1cmUgYSBzZXBhcmF0ZSBsb2NhbCBpbnN0YW5jZSBmb3IgZWFjaCBDaGF0U2VydmljZSBpbnN0YW5jZVxuICBwcml2YXRlIHNpZ25hbFJDb25uZWN0aW9uU2VydmljZSA9IG5ldyBTaWduYWxSQ29ubmVjdGlvblNlcnZpY2UoKTtcbiAgcHJpdmF0ZSBhc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdChBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgYXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlID0gbmV3IEFzc2lzdGFudE1ldGFkYXRhU2VydmljZSgpO1xuICBwcml2YXRlIGFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZSA9IGluamVjdChBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UpO1xuICBwcml2YXRlIGRlYnVnTWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoRGVidWdNZXNzYWdlU2VydmljZSk7XG4gIC8vIEluamVjdCB0aGUgQXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlIHVzaW5nICduZXcnIHRvIGVuc3VyZSBhIHNlcGFyYXRlIGxvY2FsIGluc3RhbmNlIGZvciBlYWNoIENoYXRTZXJ2aWNlIGluc3RhbmNlXG4gIHByaXZhdGUgYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlID0gbmV3KEFzc2lzdGFudFdzRnJhbWVzU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xvY28gPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIGFzc2lzdGFudCBwcm9jZXNzLlxuICAgKiBJdCBpbmNsdWRlcyBidWlsZGluZyBhbmQgc3RhcnRpbmcgYSBjb25uZWN0aW9uLCBleGVjdXRpbmcgcGFyYWxsZWwgcmVxdWVzdHMgZm9yIG1vZGVscyBhbmQgZnVuY3Rpb25zLCBhbmQgaGFuZGxpbmcgZXJyb3JzIGR1cmluZyB0aGUgcHJvY2Vzcy5cbiAgICog4pqg77iPIFRoaXMgbWV0aG9kIE1VU1QgYmUgY2FsbGVkIE9OTFkgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkSW4gYW5kIG9uY2Ugd2hlbiB0aGUgYXNzaXN0YW50IGlzIGluaXRpYWxpemVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlPGJvb2xlYW4+IGluZGljYXRpbmcgdGhlIHN1Y2Nlc3Mgb2YgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG4gICAqL1xuICBpbml0KCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIC8vIEVuc3VyZSBhbGwgbG9naWMgaXMgZXhlY3V0ZWQgd2hlbiBzdWJzY3JpYmVkIHRvIHRoZSBvYnNlcnZhYmxlXG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHtcbiAgICAgIHRoaXMuX2luaXRBc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZSgpO1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5pbml0Q2hhdENvbmZpZygpKTtcbiAgICB9KS5waXBlKFxuICAgICAgLy8gV2FpdCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgaW5pdGlhbGl6ZWRcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmluaXRDb25maWckLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlKDEpKSksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmdldFdTUmVxdWVzdHNVcmwoKTtcbiAgICAgICAgdGhpcy5nZXRSRVNUUmVxdWVzdHNVcmwoKTtcbiAgICAgICAgdGhpcy5faW5pdEFzc2lzdGFudE1ldGFkYXRhU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0QXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuX2luaXRTYXZlZENoYXRzU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0RGVidWdNZXNzYWdlU2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0U2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrVmVyc2lvbkFsaWdubWVudCgpO1xuICAgICAgfSksXG4gICAgICAvLyBCdWlsZCBhbmQgc3RhcnQgdGhlIFNpZ25hbFIgY29ubmVjdGlvblxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuYnVpbGRDb25uZWN0aW9uKCkpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UgaGVyZSwgbm93IHRoYXQgJ3RoaXMuY29ubmVjdGlvbicgaXMgc2V0XG4gICAgICAgIHRoaXMuX2luaXRBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5pbml0TWVzc2FnZUhhbmRsZXJzKCk7XG4gICAgICB9KSxcbiAgICAgIC8vIFN0YXJ0IHRoZSBjb25uZWN0aW9uXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zdGFydENvbm5lY3Rpb24oKSksXG4gICAgICAvLyBGZXRjaCBtZXRhZGF0YSBpbiBwYXJhbGxlbFxuICAgICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICAgIGZvcmtKb2luKFtcbiAgICAgICAgICB0aGlzLmxpc3RNb2RlbHMoKSxcbiAgICAgICAgICB0aGlzLmxpc3RGdW5jdGlvbnMoKVxuICAgICAgICBdKVxuICAgICAgKSxcbiAgICAgIC8vIE1hcCB0aGUgcmVzdWx0cyBvZiBwYXJhbGxlbCByZXF1ZXN0cyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzXG4gICAgICBtYXAoKFttb2RlbHMsIGZ1bmN0aW9uc10pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKG1vZGVscyAhPT0gdW5kZWZpbmVkICYmIGZ1bmN0aW9ucyAhPT0gdW5kZWZpbmVkICYmICEhbW9kZWxzICYmICEhZnVuY3Rpb25zKTtcbiAgICAgICAgdGhpcy5pbml0UHJvY2VzcyQubmV4dChyZXN1bHQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSksXG4gICAgICAvLyBBbnkgZXJyb3JzIGR1cmluZyB0aGUgcHJvY2VzcyBhcmUgY2F1Z2h0LCBsb2dnZWQsIGFuZCByZS10aHJvd24gdG8gcHJvcGFnYXRlIHRoZSBlcnJvciBmdXJ0aGVyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBvY2N1cnJlZDonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pLFxuICAgICAgdGFrZSgxKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBlbmRwb2ludCB0byB1c2UgZm9yIHRoZSB3ZWJzb2NrZXQgcmVxdWVzdHNcbiAgICogSXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFwcCBjb25maWdcbiAgICovXG4gIGdldFdTUmVxdWVzdHNVcmwoKSB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRXU1JlcXVlc3RzVXJsKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBlbmRwb2ludCB0byB1c2UgZm9yIHRoZSBodHRwIHJlcXVlc3RzXG4gICAqIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhcHAgY29uZmlnXG4gICAqL1xuICBnZXRSRVNUUmVxdWVzdHNVcmwoKSB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5nZXRSRVNUUmVxdWVzdHNVcmwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBsdWdpbiB2ZXJzaW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIFBsdWdpblZlcnNpb24gb3IgdW5kZWZpbmVkLlxuICAgKi9cbiAgZ2V0UGx1Z2luVmVyc2lvbigpOiBPYnNlcnZhYmxlPFBsdWdpblZlcnNpb24gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UuZ2V0UGx1Z2luVmVyc2lvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgU2luZXF1YSBFbnRlcnByaXNlIFNlYXJjaCB2ZXJzaW9uLlxuICAgKiBAcmV0dXJucyBUaGUgU2luZXF1YSBFbnRlcnByaXNlIFNlYXJjaCB2ZXJzaW9uIGFzIGEgc3RyaW5nLCBvciB1bmRlZmluZWQgaWYgbm90IGF2YWlsYWJsZS5cbiAgICovXG4gIGdldFNpbmVxdWFFU1ZlcnNpb24oKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UuZ2V0U2luZXF1YUVTVmVyc2lvbigpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgYW5kIGxvZ3MgdGhlIHZlcnNpb24gYWxpZ25tZW50IGJldHdlZW4gdGhlIEFuZ3VsYXIgbGlicmFyeSwgcGx1Z2luLCBhbmQgU2luZXF1YSBFUy5cbiAgICogSXQgZmV0Y2hlcyB0aGUgcGx1Z2luIGFuZCBTaW5lcXVhIEVTIHZlcnNpb25zIGluIHBhcmFsbGVsIGFuZCBsb2dzIHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgY29uc29sZS5cbiAgICovXG4gIGNoZWNrVmVyc2lvbkFsaWdubWVudCgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICB0aGlzLmdldFNpbmVxdWFFU1ZlcnNpb24oKSxcbiAgICAgIHRoaXMuZ2V0UGx1Z2luVmVyc2lvbigpXG4gICAgXSkucGlwZShcbiAgICAgIHRhcCgoW2VzVmVyc2lvbiwgcGx1Z2luVmVyc2lvbl0pID0+IHtcbiAgICAgICAgY29uc3QgaW5mb01lc3NhZ2UgPSBgW0lORk9dIC0gQXNzaXN0YW50IGluc3RhbmNlIFske3RoaXMuY2hhdEluc3RhbmNlSWR9XTogQW5ndWxhciBMaWJyYXJ5IFske0xJQl9WRVJTSU9OfV0gUGx1Z2luIFske3BsdWdpblZlcnNpb24/LnBsdWdpblZlcnNpb259XSBCdWlsZCBbJHtlc1ZlcnNpb259XWA7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIFwiJWPihLnvuI8gXCIgKyBpbmZvTWVzc2FnZSxcbiAgICAgICAgICBcImJhY2tncm91bmQ6ICNFMEY4Rjg7IGNvbG9yOiAjMjIyOyBib3JkZXI6IDFweCBzb2xpZCAjMjIyOyBwYWRkaW5nOiAycHggNnB4OyBib3JkZXItcmFkaXVzOiA0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7XCIsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChwbHVnaW5WZXJzaW9uPy5wbHVnaW5WZXJzaW9uICE9PSBMSUJfVkVSU0lPTikge1xuICAgICAgICAgIGNvbnN0IHdhcm5pbmdNZXNzYWdlID0gYFtXQVJOXSAtIEFzc2lzdGFudCBpbnN0YW5jZSBbJHt0aGlzLmNoYXRJbnN0YW5jZUlkfV06IFZlcnNpb24gbWlzbWF0Y2ggYmV0d2VlbiB0aGUgQW5ndWxhciBsaWJyYXJ5IFske0xJQl9WRVJTSU9OfV0gYW5kIFBsdWdpbiBbJHtwbHVnaW5WZXJzaW9uPy5wbHVnaW5WZXJzaW9ufV0uXFxu8J+SoSBbSEVMUF0gUGxlYXNlIGVuc3VyZSBib3RoIGFyZSBvbiB0aGUgc2FtZSB2ZXJzaW9uIHRvIGF2b2lkIHBvdGVudGlhbCBpc3N1ZXMuYDtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIFwiJWPimqDvuI8gXCIgKyB3YXJuaW5nTWVzc2FnZSxcbiAgICAgICAgICAgIFwiYmFja2dyb3VuZDogI0ZGRjRFNTsgY29sb3I6ICMyMjI7IGJvcmRlcjogMXB4IHNvbGlkICMyMjI7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC13ZWlnaHQ6IDUwMDtcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFNhdmVkQ2hhdHNTZXJ2aWNlIHdpdGggdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRoZSBgU2F2ZWRDaGF0c1NlcnZpY2VgIGJ5IHByb3ZpZGluZyBpdCB3aXRoIGEgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICogKGBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnYCkgdGhhdCBpbmNsdWRlcyB2YXJpb3VzIGNhbGxiYWNrcyBhbmQgcHJvcGVydGllcyByZXF1aXJlZFxuICAgKiBmb3IgaXRzIG9wZXJhdGlvbi4gVGhlIGluaXRpYWxpemF0aW9uIHdpbGwgb25seSBwcm9jZWVkIGlmIGJvdGggYGFzc2lzdGFudENvbmZpZyRgIGFuZFxuICAgKiBgUkVTVF9SRVFVRVNUX1VSTGAgYXJlIGF2YWlsYWJsZS5cbiAgICpcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGluY2x1ZGVzOlxuICAgKiAtIEFwcGxpY2F0aW9uIG5hbWUgcmV0cmlldmFsLlxuICAgKiAtIEluc3RhbmNlIElEIHJldHJpZXZhbC5cbiAgICogLSBSRVNUIEFQSSBVUkwgcmV0cmlldmFsLlxuICAgKiAtIERlYnVnIGZsYWcgcmV0cmlldmFsLlxuICAgKiAtIENoYXQgSUQgZm9yIG5ldyBzYXZlcy5cbiAgICogLSBTYXZlZCBjaGF0cyBlbmFibGVtZW50IGNoZWNrLlxuICAgKiAtIE1ldGhvZHMgZm9yIHNldHRpbmcgYSBzYXZlZCBjaGF0IElELCB1cGRhdGluZyB0aGUgc2F2ZWQgY2hhdHMgbGlzdCwgYW5kIGdlbmVyYXRpbmcgYXVkaXQgZXZlbnRzLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBub3QgcmVhZHksIGFuIGVycm9yIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRTYXZlZENoYXRzU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuUkVTVF9SRVFVRVNUX1VSTCkge1xuICAgICAgY29uc3Qgc2F2ZWRDaGF0c09wQ29uZmlnOiBTYXZlZENoYXRzT3BlcmF0aW9uQ29uZmlnID0ge1xuICAgICAgICBnZXRBcHBOYW1lOiAoKSA9PiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZSxcbiAgICAgICAgZ2V0SW5zdGFuY2VJZDogKCkgPT4gdGhpcy5jaGF0SW5zdGFuY2VJZCxcbiAgICAgICAgZ2V0UmVzdFVybDogKCkgPT4gdGhpcy5SRVNUX1JFUVVFU1RfVVJMLFxuICAgICAgICBnZXREZWJ1Z0ZsYWc6ICgpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5kZWJ1ZyxcbiAgICAgICAgaXNTYXZlZENoYXRzRW5hYmxlZDogKCkgPT4gISF0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWU/LnNhdmVkQ2hhdFNldHRpbmdzLmVuYWJsZWQsXG4gICAgICAgIHNldFNhdmVkQ2hhdHNFcnJvclN0YXR1czogKGhhc0Vycm9yKSA9PiB0aGlzLnNhdmVkQ2hhdHNFcnJvciQubmV4dChoYXNFcnJvciksXG4gICAgICAgIHVwZGF0ZVNhdmVkQ2hhdHNMaXN0OiAoY2hhdHMpID0+IHRoaXMuc2F2ZWRDaGF0cyQubmV4dChjaGF0cyksXG4gICAgICAgIGdlbmVyYXRlQXVkaXRFdmVudDogKHR5cGUsIGRldGFpbHMsIGlkKSA9PiB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudCh0eXBlLCBkZXRhaWxzLCBpZCksXG4gICAgICB9O1xuICAgICAgdGhpcy5zYXZlZENoYXRzU2VydmljZS5pbml0KHNhdmVkQ2hhdHNPcENvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgaWRlYWxseSBub3QgaGFwcGVuIGlmIGluaXQgb3JkZXIgaXMgY29ycmVjdFxuICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIFNhdmVkQ2hhdHNTZXJ2aWNlOiBhc3Npc3RhbnRDb25maWcgb3IgUkVTVF9SRVFVRVNUX1VSTCBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgU2lnbmFsUiBjb25uZWN0aW9uIHNlcnZpY2Ugd2l0aCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCB0aGUgU2lnbmFsUiBjb25uZWN0aW9uIHNlcnZpY2UgaXMgcHJvcGVybHkgc2V0IHVwXG4gICAqIGJ5IHByb3ZpZGluZyBpdCB3aXRoIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIHZhbHVlcywgc3VjaCBhcyB0aGUgV2ViU29ja2V0XG4gICAqIHJlcXVlc3QgVVJMIGFuZCBhc3Npc3RhbnQgY29uZmlndXJhdGlvbi4gSXQgYWxzbyBtYW5hZ2VzIHRoZSBTaWduYWxSIGh1YiBjb25uZWN0aW9uXG4gICAqIGluc3RhbmNlLlxuICAgKlxuICAgKiBQcmVjb25kaXRpb25zOlxuICAgKiAtIGBhc3Npc3RhbnRDb25maWckLnZhbHVlYCBtdXN0IGJlIGF2YWlsYWJsZS5cbiAgICogLSBgV1NfUkVRVUVTVF9VUkxgIG11c3QgYmUgZGVmaW5lZC5cbiAgICpcbiAgICogSWYgdGhlc2UgcHJlY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgYW4gZXJyb3IgaXMgbG9nZ2VkIHRvIHRoZSBjb25zb2xlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFNpZ25hbFJDb25uZWN0aW9uU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuV1NfUkVRVUVTVF9VUkwpIHtcbiAgICAgICAgY29uc3Qgc2lnbmFsUk9wQ29uZmlnOiBTaWduYWxSQ29ubmVjdGlvbk9wZXJhdGlvbkNvbmZpZyA9IHtcbiAgICAgICAgICAgIGdldFdzUmVxdWVzdFVybDogKCkgPT4gdGhpcy5XU19SRVFVRVNUX1VSTCxcbiAgICAgICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgICAgICBnZXRIdWJDb25uZWN0aW9uOiAoKSA9PiB0aGlzLmNvbm5lY3Rpb24sIC8vIFVzaW5nIGdldEh1YkNvbm5lY3Rpb24gYXMgcGVyIHVzZXIncyBmaWxlXG4gICAgICAgICAgICBzZXRIdWJDb25uZWN0aW9uOiAoY29ubikgPT4geyB0aGlzLmNvbm5lY3Rpb24gPSBjb25uOyB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2lnbmFsUkNvbm5lY3Rpb25TZXJ2aWNlLmluaXQoc2lnbmFsUk9wQ29uZmlnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBjYXNlIHNob3VsZCBpZGVhbGx5IG5vdCBoYXBwZW4gaWYgaW5pdCBvcmRlciBpcyBjb3JyZWN0XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBTaWduYWxSQ29ubmVjdGlvblNlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBvciBXU19SRVFVRVNUX1VSTCBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50IENvbmZpZ3VyYXRpb24gU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBieSBwcm92aWRpbmcgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9uc1xuICAgKiBhbmQgc3RhdGUgbWFuYWdlbWVudCBtZWNoYW5pc21zIHJlcXVpcmVkIGZvciB0aGUgYXNzaXN0YW50J3MgY29uZmlndXJhdGlvbiBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgaW5jbHVkZXM6XG4gICAqIC0gTWV0aG9kcyB0byByZXRyaWV2ZSBjaGF0IGluc3RhbmNlIGFuZCBjaGF0IElEcy5cbiAgICogLSBNZXRob2RzIHRvIGdldCBhbmQgc2V0IGFzc2lzdGFudCBjb25maWd1cmF0aW9uIHZhbHVlcy5cbiAgICogLSBNZXRob2RzIHRvIHNldCBXZWJTb2NrZXQgYW5kIFJFU1QgcmVxdWVzdCBVUkxzLlxuICAgKiAtIE1ldGhvZHMgdG8gdXBkYXRlIHRoZSBpbml0aWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHN0YXR1cy5cbiAgICogLSBBIG1ldGhvZCB0byBnZW5lcmF0ZSBhdWRpdCBldmVudHMgZm9yIHRyYWNraW5nIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pbml0QXNzaXN0YW50Q29uZmlndXJhdGlvblNlcnZpY2UoKSB7XG4gICAgY29uc3QgY29uZmlnT3BDb250ZXh0OiBBc3Npc3RhbnRDb25maWd1cmF0aW9uT3BlcmF0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgZ2V0Q2hhdEluc3RhbmNlSWQ6ICgpID0+IHRoaXMuY2hhdEluc3RhbmNlSWQsXG4gICAgICAgIGdldENoYXRJZDogKCkgPT4gdGhpcy5jaGF0SWQsXG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIHNldFdTUmVxdWVzdHNVcmw6ICh1cmwpID0+IHRoaXMuV1NfUkVRVUVTVF9VUkwgPSB1cmwsXG4gICAgICAgIHNldFJFU1RSZXF1ZXN0c1VybDogKHVybCkgPT4gdGhpcy5SRVNUX1JFUVVFU1RfVVJMID0gdXJsLFxuICAgICAgICBzZXRBc3Npc3RhbnRDb25maWc6IChjb25maWcpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC5uZXh0KGNvbmZpZyksXG4gICAgICAgIHNldEluaXRDb25maWdTdGF0dXM6IChzdGF0dXMpID0+IHRoaXMuaW5pdENvbmZpZyQubmV4dChzdGF0dXMpLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpXG4gICAgfTtcbiAgICB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmluaXQoY29uZmlnT3BDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlIHdpdGggdGhlIG5lY2Vzc2FyeSBvcGVyYXRpb24gY29udGV4dC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBgYXNzaXN0YW50Q29uZmlnJGAgdmFsdWUgYW5kIGBSRVNUX1JFUVVFU1RfVVJMYCBhcmUgYXZhaWxhYmxlLlxuICAgKiBJZiBib3RoIGFyZSByZWFkeSwgaXQgY3JlYXRlcyBhbiBgQXNzaXN0YW50TWV0YWRhdGFPcGVyYXRpb25Db250ZXh0YCBvYmplY3QgYW5kXG4gICAqIGluaXRpYWxpemVzIHRoZSBgYXNzaXN0YW50TWV0YWRhdGFTZXJ2aWNlYCB3aXRoIGl0LiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgcHJvdmlkZXNcbiAgICogbWV0aG9kcyB0byByZXRyaWV2ZSB0aGUgUkVTVCBVUkwsIGFzc2lzdGFudCBjb25maWd1cmF0aW9uLCBhbmQgdG8gc2V0IG1vZGVscyBhbmQgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgdmFsdWVzIGFyZSBub3QgcmVhZHksIGFuIGVycm9yIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRBc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwpIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhT3BDb250ZXh0OiBBc3Npc3RhbnRNZXRhZGF0YU9wZXJhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGdldFJlc3RVcmw6ICgpID0+IHRoaXMuUkVTVF9SRVFVRVNUX1VSTCxcbiAgICAgICAgZ2V0QXNzaXN0YW50Q29uZmlnVmFsdWU6ICgpID0+IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSxcbiAgICAgICAgc2V0TW9kZWxzOiAobW9kZWxzKSA9PiB7IHRoaXMubW9kZWxzID0gbW9kZWxzOyB9LFxuICAgICAgICBzZXRGdW5jdGlvbnM6IChmdW5jdGlvbnMpID0+IHsgdGhpcy5mdW5jdGlvbnMgPSBmdW5jdGlvbnM7IH1cbiAgICAgIH07XG4gICAgICB0aGlzLmFzc2lzdGFudE1ldGFkYXRhU2VydmljZS5pbml0KG1ldGFkYXRhT3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIEFzc2lzdGFudE1ldGFkYXRhU2VydmljZTogYXNzaXN0YW50Q29uZmlnIG9yIFJFU1RfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIEFzc2lzdGFudCBUb2tlbnMgVHJhY2tpbmcgU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIHNlcnZpY2UgYnkgcHJvdmlkaW5nIGl0IHdpdGggZnVuY3Rpb25zIHRvIG1hbmFnZSBxdW90YXMsXG4gICAqIHRva2VuIGNvbnN1bXB0aW9uLCB1c2FnZSBtZXRyaWNzLCBhbmQgYXVkaXQgZXZlbnRzLCBhcyB3ZWxsIGFzIGFjY2VzcyB0byBhc3Npc3RhbnQgY29uZmlndXJhdGlvblxuICAgKiBhbmQgbW9kZWwgcmV0cmlldmFsLlxuICAgKlxuICAgKiBUaGUgaW5pdGlhbGl6YXRpb24gd2lsbCBvbmx5IHByb2NlZWQgaWYgdGhlIGFzc2lzdGFudCBjb25maWd1cmF0aW9uIGlzIGF2YWlsYWJsZS5cbiAgICogSWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgbm90IHJlYWR5LCBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZCB0byB0aGUgY29uc29sZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2luaXRBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSkge1xuICAgICAgY29uc3QgdG9rZW5zT3BDb250ZXh0OiBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ09wZXJhdGlvbkNvbnRleHQgPSB7XG4gICAgICAgIGdldEFzc2lzdGFudENvbmZpZ1ZhbHVlOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIHNldFF1b3RhOiAocXVvdGEpID0+IHRoaXMucXVvdGEkLm5leHQocXVvdGEpLFxuICAgICAgICBzZXRVc2VyVG9rZW5Db25zdW1wdGlvbjogKGNvbnN1bXB0aW9uKSA9PiB0aGlzLnVzZXJUb2tlbkNvbnN1bXB0aW9uJC5uZXh0KGNvbnN1bXB0aW9uKSxcbiAgICAgICAgc2V0Q2hhdFVzYWdlTWV0cmljczogKG1ldHJpY3MpID0+IHRoaXMuY2hhdFVzYWdlTWV0cmljcyQubmV4dChtZXRyaWNzKSxcbiAgICAgICAgc2V0Q2hhdFRva2VuQ29uc3VtcHRpb246IChjb25zdW1wdGlvbikgPT4gdGhpcy5jaGF0VG9rZW5Db25zdW1wdGlvbiQubmV4dChjb25zdW1wdGlvbiksXG4gICAgICAgIGdlbmVyYXRlQXVkaXRFdmVudDogKHR5cGUsIGRldGFpbHMsIGlkKSA9PiB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudCh0eXBlLCBkZXRhaWxzLCBpZCksXG4gICAgICAgIGdldE1vZGVsOiAoc2VydmljZUlkLCBtb2RlbElkKSA9PiB0aGlzLmdldE1vZGVsKHNlcnZpY2VJZCwgbW9kZWxJZClcbiAgICAgIH07XG4gICAgICB0aGlzLmFzc2lzdGFudFRva2Vuc1RyYWNraW5nU2VydmljZS5pbml0KHRva2Vuc09wQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBc3Npc3RhbnRUb2tlbnNUcmFja2luZ1NlcnZpY2U6IGFzc2lzdGFudENvbmZpZyBub3QgcmVhZHkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgQXNzaXN0YW50IFdlYlNvY2tldCBGcmFtZXMgU2VydmljZSB3aXRoIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9uIGNvbnRleHQuXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UgdG8gZnVuY3Rpb24gcHJvcGVybHkuXG4gICAqIEl0IGVuc3VyZXMgdGhhdCB0aGUgYXNzaXN0YW50IGNvbmZpZ3VyYXRpb24gYW5kIGNvbm5lY3Rpb24gYXJlIGF2YWlsYWJsZSBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBzZXJ2aWNlLlxuICAgKlxuICAgKiBUaGUgb3BlcmF0aW9uIGNvbnRleHQgcHJvdmlkZXMgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgc3RhdGUgbWFuYWdlbWVudCBtZXRob2RzLCBpbmNsdWRpbmc6XG4gICAqIC0gQWNjZXNzaW5nIHRoZSBhc3Npc3RhbnQgY29uZmlndXJhdGlvbiwgY2hhdCBpbnN0YW5jZSBJRCwgc2F2ZWQgY2hhdCBJRCwgYW5kIGNoYXQgaGlzdG9yeS5cbiAgICogLSBNYW5hZ2luZyBzdHJlYW1pbmcgYW5kIHN0b3BwaW5nIGdlbmVyYXRpb24gc3RhdHVzZXMuXG4gICAqIC0gVXBkYXRpbmcgcXVvdGEgYW5kIGNoYXQgdXNhZ2UgbWV0cmljcy5cbiAgICogLSBHZW5lcmF0aW5nIGF1ZGl0IGV2ZW50cy5cbiAgICogLSBNYW5hZ2luZyBzYXZlZCBjaGF0cyAoYWRkaW5nLCB1cGRhdGluZywgYW5kIGxpc3RpbmcpLlxuICAgKlxuICAgKiBJZiB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIChgYXNzaXN0YW50Q29uZmlnJGAgYW5kIGBjb25uZWN0aW9uYCkgYXJlIG5vdCByZWFkeSwgYW4gZXJyb3IgaXMgbG9nZ2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdEFzc2lzdGFudFdzRnJhbWVzU2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlICYmIHRoaXMuY29ubmVjdGlvbikge1xuICAgICAgY29uc3Qgd3NGcmFtZXNPcENvbnRleHQ6IEFzc2lzdGFudFdzRnJhbWVzQ29udGV4dCA9IHtcbiAgICAgICAgZ2V0QXNzaXN0YW50Q29uZmlnOiAoKSA9PiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUsXG4gICAgICAgIGdldENoYXRJbnN0YW5jZUlkOiAoKSA9PiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgICBnZXRDaGF0SWQ6ICgpID0+IHRoaXMuY2hhdElkLFxuICAgICAgICBnZXRIdWJDb25uZWN0aW9uOiAoKSA9PiB0aGlzLmNvbm5lY3Rpb24sXG4gICAgICAgIGdldENoYXRIaXN0b3J5OiAoKSA9PiB0aGlzLmNoYXRIaXN0b3J5LFxuICAgICAgICBzZXRTdHJlYW1pbmdTdGF0dXM6IChpc1N0cmVhbWluZykgPT4gdGhpcy5zdHJlYW1pbmckLm5leHQoaXNTdHJlYW1pbmcpLFxuICAgICAgICBzZXRDaGF0SGlzdG9yeTogKGhpc3RvcnkpID0+IHsgdGhpcy5jaGF0SGlzdG9yeSA9IGhpc3Rvcnk7IH0sXG4gICAgICAgIHNldFN0b3BwaW5nR2VuZXJhdGlvblN0YXR1czogKGlzU3RvcHBpbmcpID0+IHRoaXMuc3RvcHBpbmdHZW5lcmF0aW9uJC5uZXh0KGlzU3RvcHBpbmcpLFxuICAgICAgICBzZXRTYXZlZENoYXRzRXJyb3JTdGF0dXM6IChoYXNFcnJvcikgPT4gdGhpcy5zYXZlZENoYXRzRXJyb3IkLm5leHQoaGFzRXJyb3IpLFxuICAgICAgICB1cGRhdGVRdW90YTogKHF1b3RhLCBwcm9wYWdhdGVFcnJvcikgPT4gdGhpcy51cGRhdGVRdW90YShxdW90YSwgcHJvcGFnYXRlRXJyb3IpLFxuICAgICAgICB1cGRhdGVDaGF0VXNhZ2VNZXRyaWNzOiAobWV0cmljcykgPT4gdGhpcy51cGRhdGVDaGF0VXNhZ2VNZXRyaWNzKG1ldHJpY3MpLFxuICAgICAgICBnZW5lcmF0ZUF1ZGl0RXZlbnQ6ICh0eXBlLCBkZXRhaWxzLCBpZCkgPT4gdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZSwgZGV0YWlscywgaWQpLFxuICAgICAgICBhZGRTYXZlZENoYXQ6IChpZCwgbWVzc2FnZXMpID0+IHRoaXMuYWRkU2F2ZWRDaGF0KGlkLCBtZXNzYWdlcyksXG4gICAgICAgIHVwZGF0ZVNhdmVkQ2hhdDogKGlkLCBuYW1lLCBtZXNzYWdlcykgPT4gdGhpcy51cGRhdGVTYXZlZENoYXQoaWQsIG5hbWUsIG1lc3NhZ2VzKSxcbiAgICAgICAgbGlzdFNhdmVkQ2hhdDogKCkgPT4gdGhpcy5saXN0U2F2ZWRDaGF0KCksXG4gICAgICAgIGlzRXhpc3RpbmdTYXZlZENoYXQ6IChpZCkgPT4gdGhpcy5pc0V4aXN0aW5nU2F2ZWRDaGF0KGlkKVxuICAgICAgfTtcbiAgICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmluaXQod3NGcmFtZXNPcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2U6IGNvcmUgZGVwZW5kZW5jaWVzIG5vdCByZWFkeS5cIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdERlYnVnTWVzc2FnZVNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSAmJiB0aGlzLlJFU1RfUkVRVUVTVF9VUkwpIHtcbiAgICAgIGNvbnN0IGRlYnVnTWVzc2FnZU9wQ29udGV4dDogRGVidWdNZXNzYWdlT3BlcmF0aW9uQ29uZmlnID0ge1xuICAgICAgICBnZXRSZXN0VXJsOiAoKSA9PiB0aGlzLlJFU1RfUkVRVUVTVF9VUkxcbiAgICAgIH07XG4gICAgICB0aGlzLmRlYnVnTWVzc2FnZVNlcnZpY2UuaW5pdChkZWJ1Z01lc3NhZ2VPcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgRGVidWdNZXNzYWdlU2VydmljZTogYXNzaXN0YW50Q29uZmlnIG9yIFJFU1RfUkVRVUVTVF9VUkwgbm90IHJlYWR5LlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgYXNzaXN0YW50cygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudENvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEFzc2lzdGFudHNTZXR0aW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqL1xuICBnZXQgY2hhdEluc3RhbmNlSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhdEluc3RhbmNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdCB0aGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKiBAcGFyYW0gaW5zdGFuY2VJZCBUaGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxuICAgKi9cbiAgc2V0Q2hhdEluc3RhbmNlSWQoaW5zdGFuY2VJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fY2hhdEluc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIHRoZSBkaXNjdXNzaW9uIGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvblxuICAgKi9cbiAgZ2V0IGNoYXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGF0SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gR1VJRCBmb3IgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0IGFuZCBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICogQHBhcmFtIGNoYXRJZCBpZiBwcm92aWRlZCwgaXQgd2lsbCBiZSBjb25zaWRlcmVkIGFzIHRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICovXG4gIGdlbmVyYXRlQ2hhdElkKGNoYXRJZD86IHN0cmluZykge1xuICAgIHRoaXMuX2NoYXRJZCA9IGNoYXRJZCB8fCBndWlkKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY2hhdCBjb25maWcgYnkgbWFuYWdpbmcgT05MWSBzdWItb2JqZWN0ICoqZGVmYXVsdFZhbHVlcyoqIGNvbmZpZ3Mgb2YgdGhlIHN0YW5kYXJkIGFwcCBjb25maWcgKGRlZmluZWQgaW4gdGhlIGN1c3RvbWl6YXRpb24ganNvbiB0YWIgKSBhbmQgdGhlIHVzZXIgcHJlZmVyZW5jZXMuXG4gICAqIFRvIGRvIHNvLCBhIHRyYWNraW5nIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIGF2YWlsYWJsZSB1cGRhdGVzIGluIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdCBvZiB0aGUgc3RhbmRhcmQgYXBwIGNvbmZpZy5cbiAgICogVGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyBvYmplY3QgY29taW5nIGZyb20gXCJzdGFuZGFyZCBhcHAgY29uZmlnXCIgaXMgdXNlZCBhcyBpdCBpcyB3aXRob3V0IGFueSBvdmVycmlkZS5cbiAgICogVGh1cywgdGhlIHVzZXIgcHJlZmVyZW5jZXMgYXJlIHVzZWQgb25seSBmb3IgdGhlIGRlZmF1bHRWYWx1ZXMgb2JqZWN0LlxuICAgKiBUaGlzIHByb3ZpZGUgYSBjZW50cmFsaXplZCB3YXkgdG8gbWFuYWdlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgb2JqZWN0IGJ5IGFkbWlucyBhbmQgZW5zdXJlIGEgdW5pcXVlIGNvbW1vbiBiZWhhdmlvciBmb3IgYWxsIHVzZXJzLlxuICAgKi9cbiAgYXN5bmMgaW5pdENoYXRDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS5pbml0Q2hhdENvbmZpZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY2hhdCBjb25maWcgYW5kIHN0b3JlIGl0cyBkZWZhdWx0VmFsdWVzIGluIHRoZSB1c2VyIHByZWZlcmVuY2VzXG4gICAqIEBwYXJhbSBjb25maWcgIFRoZSB1cGRhdGVkIGNoYXQgY29uZmlnXG4gICAqIEBwYXJhbSBoYXNoZXMgIFRoZSB1cGRhdGVkIGhhc2hlcyB0byBzdG9yZSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlc1xuICAgKiBAcGFyYW0gbm90aWZ5ICBXaGV0aGVyIHRvIG5vdGlmeSB0aGUgdXNlciBhYm91dCB0aGUgdXBkYXRlXG4gICAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1cGRhdGUgaXMgc3VjY2Vzc2Z1bFxuICAgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVwZGF0ZSBmYWlsc1xuICAgKi9cbiAgdXBkYXRlQ2hhdENvbmZpZyhcbiAgICBjb25maWc6IENoYXRDb25maWcsXG4gICAgaGFzaGVzPzogeyBcImFwcGxpZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI/OiBzdHJpbmc7IFwic2tpcHBlZC1kZWZhdWx0VmFsdWVzLWhhc2hcIj86IHN0cmluZyB9LFxuICAgIG5vdGlmeSA9IHRydWUsXG4gICAgc3VjY2Vzc0NhbGxiYWNrPzogKCkgPT4gYW55LFxuICAgIGVycm9yQ2FsbGJhY2s/OiAoKSA9PiBhbnlcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWd1cmF0aW9uU2VydmljZS51cGRhdGVDaGF0Q29uZmlnKGNvbmZpZywgaGFzaGVzLCBub3RpZnksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgKi9cbiAgb3ZlcnJpZGVVc2VyKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdXNlck92ZXJyaWRlQWN0aXZlLCB1c2VyT3ZlcnJpZGUgfSA9IGdsb2JhbENvbmZpZztcbiAgICBpZiAoISh1c2VyT3ZlcnJpZGVBY3RpdmUgJiYgdXNlck92ZXJyaWRlKSkge1xuICAgICAgdGhpcy51c2VyT3ZlcnJpZGUkLm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFByZXBhcmUgdGhlIHBheWxvYWQgdG8gc2VuZCB0byB0aGUgT3ZlcnJpZGVVc2VyIG1ldGhvZFxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpbnN0YW5jZUlkOiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgdXNlcjogdXNlck92ZXJyaWRlLnVzZXJuYW1lLFxuICAgICAgZG9tYWluOiB1c2VyT3ZlcnJpZGUuZG9tYWluXG4gICAgfVxuXG4gICAgLy8gSW52b2tlIHRoZSBPdmVycmlkZVVzZXIgbWV0aG9kIGFuZCBoYW5kbGUgZXJyb3JzXG4gICAgdGhpcy5jb25uZWN0aW9uIS5pbnZva2UoJ092ZXJyaWRlVXNlcicsIGRhdGEpXG4gICAgICAudGhlbigocmVzKSA9PiB0aGlzLnVzZXJPdmVycmlkZSQubmV4dCghIXJlcykpXG4gICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbnZva2luZyBPdmVycmlkZVVzZXI6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IC8vIFJldHVybiBhIHJlc29sdmVkIHByb21pc2UgdG8gaGFuZGxlIHRoZSBlcnJvciBhbmQgcHJldmVudCB1bmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24gd2hlbiBubyBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nIGV4aXN0cyBkb3duc3RyZWFtXG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgRmV0Y2ggQVBJIHRvIHJldHJpZXZlIGEgbmV3IG1lc3NhZ2UgZ2l2ZW4gYWxsIHByZXZpb3VzIG1lc3NhZ2VzXG4gICAqL1xuICBmZXRjaChtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSwgcXVlcnk6IFF1ZXJ5KTogT2JzZXJ2YWJsZTxDaGF0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UuZmV0Y2gobWVzc2FnZXMsIHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgbW9kZWxzIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyXG4gICAqL1xuICBsaXN0TW9kZWxzKCk6IE9ic2VydmFibGU8R2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudE1ldGFkYXRhU2VydmljZS5saXN0TW9kZWxzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gdGhlIHNlcnZlciBBTkQgbWF0Y2hpbmcgZW5hYmxlZCBmdW5jdGlvbnMgaW4gdGhlIGNoYXQgY29uZmlnXG4gICAqL1xuICBsaXN0RnVuY3Rpb25zKCk6IE9ic2VydmFibGU8R2xsbUZ1bmN0aW9uW10gfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3Npc3RhbnRNZXRhZGF0YVNlcnZpY2UubGlzdEZ1bmN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBhc3Npc3RhbnQgYW5zd2VyIGdlbmVyYXRpb24gYW5kIGNhbmNlbHMgYWxsIHRoZSBvbmdvaW5nIGFuZCBwZW5kaW5nIHJlbGF0ZWQgdGFza3NcbiAgICovXG4gIHN0b3BHZW5lcmF0aW9uKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmFzc2lzdGFudFdzRnJhbWVzU2VydmljZS5zdG9wR2VuZXJhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgaGFuZGxlciBmb3IgcXVvdGEgdXBkYXRlcyBlYWNoIHRpbWUgdGhlIGNoYXQgaXMgaW52b2tlZC5cbiAgICogSXQgZW1pdHMgdGhlIHVwZGF0ZWQgcXVvdGEgdG8gdGhlIHF1b3RhJCBzdWJqZWN0LCBlbWl0cyBhY2NvcmRpbmdseSB0aGUgdXBkYXRlZCB1c2VyJ3MgdG9rZW5zIGNvbnN1bXB0aW9uIGFuZCBub3RpZmllcyB0aGUgdXNlciBpZiB0aGUgbWF4IHF1b3RhIGlzIHJlYWNoZWQuXG4gICAqIEBwYXJhbSBxdW90YSBUaGUgdXBkYXRlZCBxdW90YVxuICAgKiBAcGFyYW0gcHJvcGFnYXRlRXJyb3IgV2hldGhlciB0byBwcm9wYWdhdGUgdGhlIGVycm9yIHRvIHRoZSBjYWxsZXJcbiAgICovXG4gIHVwZGF0ZVF1b3RhKHF1b3RhOiBRdW90YSwgcHJvcGFnYXRlRXJyb3IgPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlLnVwZGF0ZVF1b3RhKHF1b3RhLCBwcm9wYWdhdGVFcnJvcik7XG4gIH1cblxuICAvKipcbiAgICogQSBoYW5kbGVyIGZvciBjaGF0IHVzYWdlIG1ldHJpY3MgZWFjaCB0aW1lIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgcmVzcG9uc2UgaXMgY29tcGxldGVkLlxuICAgKiBJdCBlbWl0cyB0aGUgY2hhdCB1c2FnZSBtZXRyaWNzIHRvIHRoZSBjaGF0VXNhZ2VNZXRyaWNzJCBzdWJqZWN0LCBlbWl0cyBhY2NvcmRpbmdseSB0aGUgdXBkYXRlZCBjaGF0J3MgdG9rZW5zIGNvbnN1bXB0aW9uXG4gICAqIEBwYXJhbSBjaGF0VXNhZ2VNZXRyaWNzIFRoZSBjaGF0IHVzYWdlIG1ldHJpY3NcbiAgICovXG4gIHVwZGF0ZUNoYXRVc2FnZU1ldHJpY3MoY2hhdFVzYWdlTWV0cmljczogQ2hhdFVzYWdlTWV0cmljcyk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50VG9rZW5zVHJhY2tpbmdTZXJ2aWNlLnVwZGF0ZUNoYXRVc2FnZU1ldHJpY3MoY2hhdFVzYWdlTWV0cmljcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb2RlbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdpdmVuIChzZXJ2aWNlSWQgKyBtb2RlbElkKVxuICAgKiBJZiBhIG1vZGVsIGlzIG5vdCBmb3VuZCwgYW4gZXJyb3IgbWVzc2FnZSBpcyByZXR1cm5lZFxuICAgKiBAcGFyYW0gc2VydmljZUlkIFRoZSBzZXJ2aWNlSWQgb2YgdGhlIG1vZGVsXG4gICAqIEBwYXJhbSBtb2RlbElkIFRoZSBtb2RlbElkIG9mIHRoZSBtb2RlbFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWwgZGVzY3JpcHRpb25cbiAgICovXG4gIGdldE1vZGVsKHNlcnZpY2VJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBHbGxtTW9kZWxEZXNjcmlwdGlvbiB8IHVuZGVmaW5lZHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMubW9kZWxzPy5maW5kKG0gPT4gbS5zZXJ2aWNlSWQgPT09IHNlcnZpY2VJZCAmJiBtLm1vZGVsSWQgPT09IG1vZGVsSWQpO1xuICAgIC8vIEhhbmRsZSBvYnNvbGV0ZSBjb25maWdcbiAgICBpZighbW9kZWwpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoYEZBVEFMIEVSUk9SIDogVGhlIG1vZGVsIChzZXJ2aWNlSWQgPSAnJHtzZXJ2aWNlSWR9JywgbW9kZWxJZCA9ICcke21vZGVsSWR9JykgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4gUGxlYXNlIGNvbnRhY3QgYW4gYWRtaW4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uYCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZBVEFMIEVSUk9SIDogVGhlIG1vZGVsIChzZXJ2aWNlSWQgPSAnJHtzZXJ2aWNlSWR9JywgbW9kZWxJZCA9ICcke21vZGVsSWR9JykgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZWApO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdGhlIGxpc3Qgc2F2ZWQgY2hhdHMgYmVsb25naW5nIHRvIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgdGhlIGFzc2lzdGFudFxuICAgKi9cbiAgbGlzdFNhdmVkQ2hhdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmxpc3RDaGF0cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2F2ZWQgY2hhdCB3aXRoIHRoZSBnaXZlbiBpZCwgaWYgZXhpc3RzLiBPdGhlcndpc2UsIHJldHVybiB1bmRlZmluZWRcbiAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgc2F2ZWQgY2hhdFxuICAgKi9cbiAgZ2V0U2F2ZWRDaGF0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdEhpc3RvcnkgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5zYXZlZENoYXRzU2VydmljZS5nZXRDaGF0QnlJZChpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBzYXZlZCBjaGF0IHdpdGggdGhlIGdpdmVuIGlkIGFscmVhZHkgZXhpc3RzXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgc2F2ZWQgY2hhdCBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgaXNFeGlzdGluZ1NhdmVkQ2hhdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuaXNFeGlzdGluZ0NoYXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBjaGF0IHdpdGggdGhlIGdpdmVuIG1lc3NhZ2VzXG4gICAqIEBwYXJhbSBtZXNzYWdlcyBUaGUgbWVzc2FnZXMgdG8gYWRkIHRvIHRoZSBzYXZlZCBjaGF0IGluZGV4XG4gICAqIEByZXR1cm5zIFRoZSBzYXZlZCBjaGF0XG4gICAqL1xuICBhZGRTYXZlZENoYXQoaWQ6IHN0cmluZywgbWVzc2FnZXM6IENoYXRNZXNzYWdlW10pOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuc2F2ZWRDaGF0c1NlcnZpY2UuYWRkQ2hhdChpZCwgbWVzc2FnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNhdmVkIGNoYXQgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5ldyBuYW1lIG9mIHRoZSBzYXZlZCBjaGF0LCBpZiBwcm92aWRlZFxuICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIHVwZGF0ZSB0aGUgc2F2ZWQgY2hhdCBoaXN0b3J5LCBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzYXZlZCBjaGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXG4gICAqL1xuICB1cGRhdGVTYXZlZENoYXQoaWQ6IHN0cmluZywgbmFtZT86IHN0cmluZywgbWVzc2FnZXM/OiBDaGF0TWVzc2FnZVtdKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLnVwZGF0ZUNoYXQoaWQsIG5hbWUsIG1lc3NhZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWxrIGRlbGV0ZSBvZiBzYXZlZCBjaGF0cyBtYXRjaGluZyB0aGUgZ2l2ZW4gaWRzXG4gICAqIEBwYXJhbSBpZHMgTGlzdCBvZiBpZHMgb2YgdGhlIHNhdmVkIGNoYXRzIHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRlbGV0ZWQgY2hhdHNcbiAgICovXG4gIGRlbGV0ZVNhdmVkQ2hhdChpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxEZWxldGVTYXZlZENoYXRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnNhdmVkQ2hhdHNTZXJ2aWNlLmRlbGV0ZUNoYXQoaWRzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREZWJ1Z01lc3NhZ2UobWVzc2FnZTogRGVidWdNZXNzYWdlKTogT2JzZXJ2YWJsZTxLdk9iamVjdCB8IExpc3RPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWJ1Z01lc3NhZ2VTZXJ2aWNlLmdldERlYnVnTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIG91dC1vZi10aGUtYm94IGhhbmRsZXJzXG4gICAqIEl0IGlzIGEgcGxhY2Vob2xkZXIgZm9yIG5vbi1zdHJlYW1pbmcgc2NlbmFyaW9zLCB3aGVyZSB5b3UgaW52b2tlIGEgc3BlY2lmaWMgaHViIG1ldGhvZCwgYW5kIHRoZSBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCBmcmFtZSBtZXNzYWdlKHMpXG4gICAqL1xuICBpbml0TWVzc2FnZUhhbmRsZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmluaXRNZXNzYWdlSGFuZGxlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBhbmQgcmVnaXN0ZXIgdGhlIGVudGlyZSBfbWVzc2FnZUhhbmRsZXJzIG1hcCBieSBtZXJnaW5nIHRoZSBwcm92aWRlZCBtYXAgd2l0aCB0aGUgZGVmYXVsdCBvbmVcbiAgICogQHBhcmFtIF9tZXNzYWdlSGFuZGxlcnNcbiAgICovXG4gIG92ZXJyaWRlTWVzc2FnZUhhbmRsZXJzPFQ+KF9tZXNzYWdlSGFuZGxlcnM6IE1hcDxzdHJpbmcsIE1lc3NhZ2VIYW5kbGVyPFQ+Pik6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLm92ZXJyaWRlTWVzc2FnZUhhbmRsZXJzKF9tZXNzYWdlSGFuZGxlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIHNwZWNpZmljIGV2ZW50LlxuICAgKiBJZiBhIGxpc3RlbmVyIGZvciB0aGlzIHNhbWUgZXZlbnQgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICogSWYgdGhlIGxpc3RlbmVyIGhhcyBcImlzR2xvYmFsSGFuZGxlclwiIHNldCB0byB0cnVlLCBpdCB3aWxsIGJlIHJlZ2lzdGVyZWQgdG8gdGhlIGh1YiBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0gZXZlbnROYW1lIE5hbWUgb2YgdGhlIGV2ZW50IHRvIHJlZ2lzdGVyIGEgbGlzdGVuZXIgZm9yXG4gICAqIEBwYXJhbSBldmVudEhhbmRsZXIgVGhlIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gICAqL1xuICBhZGRNZXNzYWdlSGFuZGxlcjxUPihldmVudE5hbWU6IHN0cmluZywgZXZlbnRIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcjxUPik6IHZvaWQge1xuICAgIHRoaXMuYXNzaXN0YW50V3NGcmFtZXNTZXJ2aWNlLmFkZE1lc3NhZ2VIYW5kbGVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBsaXN0ZW5lciBmb3IgYSBzcGVjaWZpYyBldmVudCBmcm9tIHRoZSBfbWVzc2FnZUhhbmRsZXJzIG1hcCBhbmQgdW5zdWJzY3JpYmUgZnJvbSByZWNlaXZpbmcgbWVzc2FnZXMgZm9yIHRoaXMgZXZlbnQgZnJvbSB0aGUgU2lnbmFsUiBodWIuXG4gICAqIEBwYXJhbSBldmVudE5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lciBmb3JcbiAgICovXG4gIHJlbW92ZU1lc3NhZ2VIYW5kbGVyKGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hc3Npc3RhbnRXc0ZyYW1lc1NlcnZpY2UucmVtb3ZlTWVzc2FnZUhhbmRsZXIoZXZlbnROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGNvbm5lY3Rpb24gdG8gdGhlIHNpZ25hbFIgd2Vic29ja2V0IGFuZCByZWdpc3RlciBkZWZhdWx0IGxpc3RlbmVycyB0byB0aGUgbWV0aG9kcyBkZWZpbmVkIGluIHRoZSBzZXJ2ZXIgaHViIGNsYXNzXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgY29ubmVjdGlvbi4gSXQgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9wdGlvbnNcbiAgICogQHBhcmFtIGxvZ0xldmVsIERlZmluZSB0aGUgbG9nIGxldmVsIGRpc3BsYXllZCBpbiB0aGUgY29uc29sZVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBidWlsdFxuICAgKi9cbiAgYnVpbGRDb25uZWN0aW9uKG9wdGlvbnM/OiBDb25uZWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5idWlsZENvbm5lY3Rpb24ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIGNvbm5lY3Rpb25cbiAgICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgc3RhcnRlZFxuICAgKi9cbiAgc3RhcnRDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5zdGFydENvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRoZSBjb25uZWN0aW9uXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIHN0b3BwZWRcbiAgICovXG4gIHN0b3BDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnNpZ25hbFJDb25uZWN0aW9uU2VydmljZS5zdG9wQ29ubmVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGF1ZGl0IGV2ZW50IHdpdGggdGhlIGdpdmVuIHR5cGUgYW5kIGRldGFpbHMuIFRoZSBnZW5lcmF0ZWQgYXVkaXQgZXZlbnQgaXMgc2VudCBhZnRlcndhcmRzIHZpYSB0aGUgQXVkaXRXZWJTZXJ2aWNlXG4gICAqIEBwYXJhbSB0eXBlIEF1ZGl0IGV2ZW50IHR5cGVcbiAgICogQHBhcmFtIGRldGFpbHMgQXVkaXQgZXZlbnQgZGV0YWlsc1xuICAgKiBAcGFyYW0gaWQgQWN0aW9ucyAoc2F2ZWRDaGF0IGRlbGV0ZS9yZW5hbWUvLi4uKSBtYXkgb2NjdXIgb24gYSBzcGVjaWZpYyBjaGF0IGRpZmZlcmVudCB0aGFuIHRoZSBjdXJyZW50IG9uZSBzdG9yZWQgaW4gdGhpcyBzZXJ2aWNlLCBzbyB0aGUgY2hhdCBpZCBjYW4gYmUgcHJvdmlkZWRcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlQXVkaXRFdmVudCh0eXBlOiBzdHJpbmcsIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIGlkPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYmFzZURldGFpbHMgPSB7XG4gICAgICBcInVybFwiOiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpLFxuICAgICAgXCJhcHBcIjogdGhpcy5hcHBTZXJ2aWNlLmFwcE5hbWUsXG4gICAgICBcInVzZXItaWRcIjogdGhpcy5wcmluY2lwYWxTZXJ2aWNlLnByaW5jaXBhbD8udXNlcklkLFxuICAgICAgXCJpbnN0YW5jZS1pZFwiOiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxuICAgICAgXCJjaGF0LWlkXCI6IGlkIHx8IHRoaXMuY2hhdElkLFxuICAgICAgXCJzZXJ2aWNlLWlkXCI6IHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5zZXJ2aWNlX2lkLFxuICAgICAgXCJtb2RlbC1pZFwiOiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMubW9kZWxfaWRcbiAgICB9O1xuXG4gICAgaWYgKHR5cGUgPT09IFwiYXN0LW1lc3NhZ2UubWVzc2FnZVwiKSB7XG4gICAgICBiYXNlRGV0YWlsc1tcImlzLXVzZXItaW5wdXRcIl0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBhdWRpdCA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgLi4uYmFzZURldGFpbHMsXG4gICAgICAgIC4uLmRldGFpbHNcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgQXVkaXQubm90aWZ5KGF1ZGl0KTtcbiAgfVxuXG59XG4iXX0=
|