hunter-mate 0.1.2 → 0.1.4
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/LICENSE +21 -0
- package/dist/assets/extension/_locales/en_US/messages.json +5 -0
- package/dist/assets/extension/_locales/zh_CN/messages.json +5 -0
- package/dist/assets/extension/background/service-worker.js +3342 -0
- package/dist/assets/extension/content/index.js +13765 -0
- package/dist/assets/extension/manifest.json +47 -0
- package/dist/assets/extension/package.json +24 -0
- package/dist/assets/extension/sidepanel/index.html +400 -0
- package/dist/assets/extension/sidepanel/index.js +926 -0
- package/dist/assets/server/agent-session/agent-session.controller.d.ts +32 -0
- package/dist/assets/server/agent-session/agent-session.controller.js +83 -0
- package/dist/assets/server/agent-session/agent-session.controller.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.guard.d.ts +4 -0
- package/dist/assets/server/agent-session/agent-session.guard.js +32 -0
- package/dist/assets/server/agent-session/agent-session.guard.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.module.d.ts +2 -0
- package/dist/assets/server/agent-session/agent-session.module.js +28 -0
- package/dist/assets/server/agent-session/agent-session.module.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.service.d.ts +54 -0
- package/dist/assets/server/agent-session/agent-session.service.js +431 -0
- package/dist/assets/server/agent-session/agent-session.service.js.map +1 -0
- package/dist/assets/server/agent-session/agent-session.types.d.ts +56 -0
- package/dist/assets/server/agent-session/agent-session.types.js +3 -0
- package/dist/assets/server/agent-session/agent-session.types.js.map +1 -0
- package/dist/assets/server/agent-session/entities/agent-event.entity.d.ts +12 -0
- package/dist/assets/server/agent-session/entities/agent-event.entity.js +73 -0
- package/dist/assets/server/agent-session/entities/agent-event.entity.js.map +1 -0
- package/dist/assets/server/agent-session/entities/agent-message.entity.d.ts +13 -0
- package/dist/assets/server/agent-session/entities/agent-message.entity.js +77 -0
- package/dist/assets/server/agent-session/entities/agent-message.entity.js.map +1 -0
- package/dist/assets/server/agent-session/entities/agent-session.entity.d.ts +14 -0
- package/dist/assets/server/agent-session/entities/agent-session.entity.js +83 -0
- package/dist/assets/server/agent-session/entities/agent-session.entity.js.map +1 -0
- package/dist/assets/server/app.module.d.ts +4 -0
- package/dist/assets/server/app.module.js +127 -0
- package/dist/assets/server/app.module.js.map +1 -0
- package/dist/assets/server/auth/auth.controller.d.ts +22 -0
- package/dist/assets/server/auth/auth.controller.js +88 -0
- package/dist/assets/server/auth/auth.controller.js.map +1 -0
- package/dist/assets/server/auth/auth.middleware.d.ts +5 -0
- package/dist/assets/server/auth/auth.middleware.js +34 -0
- package/dist/assets/server/auth/auth.middleware.js.map +1 -0
- package/dist/assets/server/auth/auth.module.d.ts +2 -0
- package/dist/assets/server/auth/auth.module.js +24 -0
- package/dist/assets/server/auth/auth.module.js.map +1 -0
- package/dist/assets/server/auth/auth.service.d.ts +30 -0
- package/dist/assets/server/auth/auth.service.js +183 -0
- package/dist/assets/server/auth/auth.service.js.map +1 -0
- package/dist/assets/server/auth/auth.types.d.ts +28 -0
- package/dist/assets/server/auth/auth.types.js +3 -0
- package/dist/assets/server/auth/auth.types.js.map +1 -0
- package/dist/assets/server/build-info.json +4 -0
- package/dist/assets/server/common/common.module.d.ts +2 -0
- package/dist/assets/server/common/common.module.js +22 -0
- package/dist/assets/server/common/common.module.js.map +1 -0
- package/dist/assets/server/common/crypto.service.d.ts +11 -0
- package/dist/assets/server/common/crypto.service.js +73 -0
- package/dist/assets/server/common/crypto.service.js.map +1 -0
- package/dist/assets/server/communication/communication-record.entity.d.ts +15 -0
- package/dist/assets/server/communication/communication-record.entity.js +80 -0
- package/dist/assets/server/communication/communication-record.entity.js.map +1 -0
- package/dist/assets/server/communication/communication.controller.d.ts +12 -0
- package/dist/assets/server/communication/communication.controller.js +61 -0
- package/dist/assets/server/communication/communication.controller.js.map +1 -0
- package/dist/assets/server/communication/communication.module.d.ts +2 -0
- package/dist/assets/server/communication/communication.module.js +25 -0
- package/dist/assets/server/communication/communication.module.js.map +1 -0
- package/dist/assets/server/communication/communication.service.d.ts +23 -0
- package/dist/assets/server/communication/communication.service.js +51 -0
- package/dist/assets/server/communication/communication.service.js.map +1 -0
- package/dist/assets/server/db/schema-validator.service.d.ts +25 -0
- package/dist/assets/server/db/schema-validator.service.js +107 -0
- package/dist/assets/server/db/schema-validator.service.js.map +1 -0
- package/dist/assets/server/db/schema-version.entity.d.ts +5 -0
- package/dist/assets/server/db/schema-version.entity.js +35 -0
- package/dist/assets/server/db/schema-version.entity.js.map +1 -0
- package/dist/assets/server/db/sqlite.module.d.ts +2 -0
- package/dist/assets/server/db/sqlite.module.js +83 -0
- package/dist/assets/server/db/sqlite.module.js.map +1 -0
- package/dist/assets/server/devops/devops-sink-init.d.ts +23 -0
- package/dist/assets/server/devops/devops-sink-init.js +101 -0
- package/dist/assets/server/devops/devops-sink-init.js.map +1 -0
- package/dist/assets/server/devops/devops-sink-init.spec.d.ts +1 -0
- package/dist/assets/server/devops/devops-sink-init.spec.js +71 -0
- package/dist/assets/server/devops/devops-sink-init.spec.js.map +1 -0
- package/dist/assets/server/devops/devops-sink.module.d.ts +2 -0
- package/dist/assets/server/devops/devops-sink.module.js +22 -0
- package/dist/assets/server/devops/devops-sink.module.js.map +1 -0
- package/dist/assets/server/doctor/doctor.controller.d.ts +13 -0
- package/dist/assets/server/doctor/doctor.controller.js +62 -0
- package/dist/assets/server/doctor/doctor.controller.js.map +1 -0
- package/dist/assets/server/doctor/doctor.module.d.ts +2 -0
- package/dist/assets/server/doctor/doctor.module.js +27 -0
- package/dist/assets/server/doctor/doctor.module.js.map +1 -0
- package/dist/assets/server/doctor/doctor.service.d.ts +15 -0
- package/dist/assets/server/doctor/doctor.service.js +209 -0
- package/dist/assets/server/doctor/doctor.service.js.map +1 -0
- package/dist/assets/server/doctor/doctor.types.d.ts +46 -0
- package/dist/assets/server/doctor/doctor.types.js +3 -0
- package/dist/assets/server/doctor/doctor.types.js.map +1 -0
- package/dist/assets/server/extension/extension-control.controller.d.ts +67 -0
- package/dist/assets/server/extension/extension-control.controller.js +173 -0
- package/dist/assets/server/extension/extension-control.controller.js.map +1 -0
- package/dist/assets/server/extension/extension-control.service.d.ts +46 -0
- package/dist/assets/server/extension/extension-control.service.js +212 -0
- package/dist/assets/server/extension/extension-control.service.js.map +1 -0
- package/dist/assets/server/extension/extension-core.module.d.ts +2 -0
- package/dist/assets/server/extension/extension-core.module.js +21 -0
- package/dist/assets/server/extension/extension-core.module.js.map +1 -0
- package/dist/assets/server/extension/extension-version.controller.d.ts +6 -0
- package/dist/assets/server/extension/extension-version.controller.js +41 -0
- package/dist/assets/server/extension/extension-version.controller.js.map +1 -0
- package/dist/assets/server/extension/extension.module.d.ts +2 -0
- package/dist/assets/server/extension/extension.module.js +25 -0
- package/dist/assets/server/extension/extension.module.js.map +1 -0
- package/dist/assets/server/extraction/adapter.service.d.ts +55 -0
- package/dist/assets/server/extraction/adapter.service.js +275 -0
- package/dist/assets/server/extraction/adapter.service.js.map +1 -0
- package/dist/assets/server/extraction/anomaly-report.service.d.ts +12 -0
- package/dist/assets/server/extraction/anomaly-report.service.js +81 -0
- package/dist/assets/server/extraction/anomaly-report.service.js.map +1 -0
- package/dist/assets/server/extraction/entities/adapter-rule.entity.d.ts +13 -0
- package/dist/assets/server/extraction/entities/adapter-rule.entity.js +71 -0
- package/dist/assets/server/extraction/entities/adapter-rule.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/company-profile.entity.d.ts +14 -0
- package/dist/assets/server/extraction/entities/company-profile.entity.js +81 -0
- package/dist/assets/server/extraction/entities/company-profile.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/job-posting.entity.d.ts +15 -0
- package/dist/assets/server/extraction/entities/job-posting.entity.js +86 -0
- package/dist/assets/server/extraction/entities/job-posting.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/parse-log.entity.d.ts +18 -0
- package/dist/assets/server/extraction/entities/parse-log.entity.js +102 -0
- package/dist/assets/server/extraction/entities/parse-log.entity.js.map +1 -0
- package/dist/assets/server/extraction/entities/talent-profile.entity.d.ts +15 -0
- package/dist/assets/server/extraction/entities/talent-profile.entity.js +86 -0
- package/dist/assets/server/extraction/entities/talent-profile.entity.js.map +1 -0
- package/dist/assets/server/extraction/extraction-entity.controller.d.ts +138 -0
- package/dist/assets/server/extraction/extraction-entity.controller.js +493 -0
- package/dist/assets/server/extraction/extraction-entity.controller.js.map +1 -0
- package/dist/assets/server/extraction/extraction-rule.controller.d.ts +7 -0
- package/dist/assets/server/extraction/extraction-rule.controller.js +48 -0
- package/dist/assets/server/extraction/extraction-rule.controller.js.map +1 -0
- package/dist/assets/server/extraction/extraction-rule.entity.d.ts +15 -0
- package/dist/assets/server/extraction/extraction-rule.entity.js +80 -0
- package/dist/assets/server/extraction/extraction-rule.entity.js.map +1 -0
- package/dist/assets/server/extraction/extraction-rule.service.d.ts +24 -0
- package/dist/assets/server/extraction/extraction-rule.service.js +89 -0
- package/dist/assets/server/extraction/extraction-rule.service.js.map +1 -0
- package/dist/assets/server/extraction/extraction.module.d.ts +2 -0
- package/dist/assets/server/extraction/extraction.module.js +53 -0
- package/dist/assets/server/extraction/extraction.module.js.map +1 -0
- package/dist/assets/server/extraction/extraction.service.d.ts +78 -0
- package/dist/assets/server/extraction/extraction.service.js +430 -0
- package/dist/assets/server/extraction/extraction.service.js.map +1 -0
- package/dist/assets/server/extraction/linkedin-extractor.d.ts +1 -0
- package/dist/assets/server/extraction/linkedin-extractor.js +244 -0
- package/dist/assets/server/extraction/linkedin-extractor.js.map +1 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.d.ts +15 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.js +48 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.js.map +1 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.d.ts +1 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js +60 -0
- package/dist/assets/server/extraction/rrweb-snapshot.utils.spec.js.map +1 -0
- package/dist/assets/server/extraction/script-rule.d.ts +14 -0
- package/dist/assets/server/extraction/script-rule.js +49 -0
- package/dist/assets/server/extraction/script-rule.js.map +1 -0
- package/dist/assets/server/extraction/snapshot-analysis.service.d.ts +23 -0
- package/dist/assets/server/extraction/snapshot-analysis.service.js +147 -0
- package/dist/assets/server/extraction/snapshot-analysis.service.js.map +1 -0
- package/dist/assets/server/extraction/structured-data.d.ts +7 -0
- package/dist/assets/server/extraction/structured-data.js +96 -0
- package/dist/assets/server/extraction/structured-data.js.map +1 -0
- package/dist/assets/server/hcapi/hcapi.module.d.ts +2 -0
- package/dist/assets/server/hcapi/hcapi.module.js +23 -0
- package/dist/assets/server/hcapi/hcapi.module.js.map +1 -0
- package/dist/assets/server/hcapi/hcapi.service.d.ts +28 -0
- package/dist/assets/server/hcapi/hcapi.service.js +81 -0
- package/dist/assets/server/hcapi/hcapi.service.js.map +1 -0
- package/dist/assets/server/health/health.controller.d.ts +19 -0
- package/dist/assets/server/health/health.controller.js +59 -0
- package/dist/assets/server/health/health.controller.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.controller.d.ts +12 -0
- package/dist/assets/server/jobcase/jobcase.controller.js +61 -0
- package/dist/assets/server/jobcase/jobcase.controller.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.entity.d.ts +13 -0
- package/dist/assets/server/jobcase/jobcase.entity.js +71 -0
- package/dist/assets/server/jobcase/jobcase.entity.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.module.d.ts +2 -0
- package/dist/assets/server/jobcase/jobcase.module.js +26 -0
- package/dist/assets/server/jobcase/jobcase.module.js.map +1 -0
- package/dist/assets/server/jobcase/jobcase.service.d.ts +21 -0
- package/dist/assets/server/jobcase/jobcase.service.js +56 -0
- package/dist/assets/server/jobcase/jobcase.service.js.map +1 -0
- package/dist/assets/server/llm/llm.module.d.ts +2 -0
- package/dist/assets/server/llm/llm.module.js +21 -0
- package/dist/assets/server/llm/llm.module.js.map +1 -0
- package/dist/assets/server/llm/llm.service.d.ts +18 -0
- package/dist/assets/server/llm/llm.service.js +65 -0
- package/dist/assets/server/llm/llm.service.js.map +1 -0
- package/dist/assets/server/main.d.ts +1 -0
- package/dist/assets/server/main.js +30 -0
- package/dist/assets/server/main.js.map +1 -0
- package/dist/assets/server/matching/matching.controller.d.ts +16 -0
- package/dist/assets/server/matching/matching.controller.js +97 -0
- package/dist/assets/server/matching/matching.controller.js.map +1 -0
- package/dist/assets/server/matching/matching.module.d.ts +2 -0
- package/dist/assets/server/matching/matching.module.js +36 -0
- package/dist/assets/server/matching/matching.module.js.map +1 -0
- package/dist/assets/server/matching/matching.service.d.ts +55 -0
- package/dist/assets/server/matching/matching.service.js +409 -0
- package/dist/assets/server/matching/matching.service.js.map +1 -0
- package/dist/assets/server/package.json +57 -0
- package/dist/assets/server/parsed-resume/parsed-resume.controller.d.ts +6 -0
- package/dist/assets/server/parsed-resume/parsed-resume.controller.js +42 -0
- package/dist/assets/server/parsed-resume/parsed-resume.controller.js.map +1 -0
- package/dist/assets/server/parsed-resume/parsed-resume.entity.d.ts +124 -0
- package/dist/assets/server/parsed-resume/parsed-resume.entity.js +72 -0
- package/dist/assets/server/parsed-resume/parsed-resume.entity.js.map +1 -0
- package/dist/assets/server/parsed-resume/parsed-resume.module.d.ts +2 -0
- package/dist/assets/server/parsed-resume/parsed-resume.module.js +26 -0
- package/dist/assets/server/parsed-resume/parsed-resume.module.js.map +1 -0
- package/dist/assets/server/parsed-resume/parsed-resume.service.d.ts +10 -0
- package/dist/assets/server/parsed-resume/parsed-resume.service.js +45 -0
- package/dist/assets/server/parsed-resume/parsed-resume.service.js.map +1 -0
- package/dist/assets/server/parsing/parse-error-report.entity.d.ts +11 -0
- package/dist/assets/server/parsing/parse-error-report.entity.js +66 -0
- package/dist/assets/server/parsing/parse-error-report.entity.js.map +1 -0
- package/dist/assets/server/parsing/parsing.controller.d.ts +19 -0
- package/dist/assets/server/parsing/parsing.controller.js +97 -0
- package/dist/assets/server/parsing/parsing.controller.js.map +1 -0
- package/dist/assets/server/parsing/parsing.module.d.ts +2 -0
- package/dist/assets/server/parsing/parsing.module.js +38 -0
- package/dist/assets/server/parsing/parsing.module.js.map +1 -0
- package/dist/assets/server/parsing/parsing.service.d.ts +38 -0
- package/dist/assets/server/parsing/parsing.service.js +263 -0
- package/dist/assets/server/parsing/parsing.service.js.map +1 -0
- package/dist/assets/server/query/fields-meta.controller.d.ts +28 -0
- package/dist/assets/server/query/fields-meta.controller.js +57 -0
- package/dist/assets/server/query/fields-meta.controller.js.map +1 -0
- package/dist/assets/server/query/query-builder.controller.d.ts +11 -0
- package/dist/assets/server/query/query-builder.controller.js +40 -0
- package/dist/assets/server/query/query-builder.controller.js.map +1 -0
- package/dist/assets/server/query/query-builder.service.d.ts +8 -0
- package/dist/assets/server/query/query-builder.service.js +41 -0
- package/dist/assets/server/query/query-builder.service.js.map +1 -0
- package/dist/assets/server/query/query.module.d.ts +2 -0
- package/dist/assets/server/query/query.module.js +23 -0
- package/dist/assets/server/query/query.module.js.map +1 -0
- package/dist/assets/server/recording/entities/recording-event.entity.d.ts +9 -0
- package/dist/assets/server/recording/entities/recording-event.entity.js +56 -0
- package/dist/assets/server/recording/entities/recording-event.entity.js.map +1 -0
- package/dist/assets/server/recording/entities/recording-snapshot.entity.d.ts +16 -0
- package/dist/assets/server/recording/entities/recording-snapshot.entity.js +91 -0
- package/dist/assets/server/recording/entities/recording-snapshot.entity.js.map +1 -0
- package/dist/assets/server/recording/recording-event-bus.service.d.ts +4 -0
- package/dist/assets/server/recording/recording-event-bus.service.js +25 -0
- package/dist/assets/server/recording/recording-event-bus.service.js.map +1 -0
- package/dist/assets/server/recording/recording-snapshot.service.d.ts +13 -0
- package/dist/assets/server/recording/recording-snapshot.service.js +81 -0
- package/dist/assets/server/recording/recording-snapshot.service.js.map +1 -0
- package/dist/assets/server/recording/recording-snapshot.service.spec.d.ts +1 -0
- package/dist/assets/server/recording/recording-snapshot.service.spec.js +65 -0
- package/dist/assets/server/recording/recording-snapshot.service.spec.js.map +1 -0
- package/dist/assets/server/recording/recording.controller.d.ts +54 -0
- package/dist/assets/server/recording/recording.controller.js +77 -0
- package/dist/assets/server/recording/recording.controller.js.map +1 -0
- package/dist/assets/server/recording/recording.gateway.d.ts +15 -0
- package/dist/assets/server/recording/recording.gateway.js +117 -0
- package/dist/assets/server/recording/recording.gateway.js.map +1 -0
- package/dist/assets/server/recording/recording.module.d.ts +2 -0
- package/dist/assets/server/recording/recording.module.js +36 -0
- package/dist/assets/server/recording/recording.module.js.map +1 -0
- package/dist/assets/server/recording/recording.service.d.ts +43 -0
- package/dist/assets/server/recording/recording.service.js +124 -0
- package/dist/assets/server/recording/recording.service.js.map +1 -0
- package/dist/assets/server/remark/remark.controller.d.ts +21 -0
- package/dist/assets/server/remark/remark.controller.js +59 -0
- package/dist/assets/server/remark/remark.controller.js.map +1 -0
- package/dist/assets/server/remark/remark.entity.d.ts +18 -0
- package/dist/assets/server/remark/remark.entity.js +67 -0
- package/dist/assets/server/remark/remark.entity.js.map +1 -0
- package/dist/assets/server/remark/remark.module.d.ts +2 -0
- package/dist/assets/server/remark/remark.module.js +26 -0
- package/dist/assets/server/remark/remark.module.js.map +1 -0
- package/dist/assets/server/remark/remark.service.d.ts +8 -0
- package/dist/assets/server/remark/remark.service.js +39 -0
- package/dist/assets/server/remark/remark.service.js.map +1 -0
- package/dist/assets/server/report/report.controller.d.ts +18 -0
- package/dist/assets/server/report/report.controller.js +41 -0
- package/dist/assets/server/report/report.controller.js.map +1 -0
- package/dist/assets/server/report/report.module.d.ts +2 -0
- package/dist/assets/server/report/report.module.js +24 -0
- package/dist/assets/server/report/report.module.js.map +1 -0
- package/dist/assets/server/report/report.service.d.ts +23 -0
- package/dist/assets/server/report/report.service.js +54 -0
- package/dist/assets/server/report/report.service.js.map +1 -0
- package/dist/assets/server/rules/rules.controller.d.ts +6 -0
- package/dist/assets/server/rules/rules.controller.js +35 -0
- package/dist/assets/server/rules/rules.controller.js.map +1 -0
- package/dist/assets/server/rules/rules.module.d.ts +2 -0
- package/dist/assets/server/rules/rules.module.js +23 -0
- package/dist/assets/server/rules/rules.module.js.map +1 -0
- package/dist/assets/server/rules/rules.service.d.ts +10 -0
- package/dist/assets/server/rules/rules.service.js +26 -0
- package/dist/assets/server/rules/rules.service.js.map +1 -0
- package/dist/assets/server/search/search.controller.d.ts +6 -0
- package/dist/assets/server/search/search.controller.js +53 -0
- package/dist/assets/server/search/search.controller.js.map +1 -0
- package/dist/assets/server/search/search.module.d.ts +2 -0
- package/dist/assets/server/search/search.module.js +24 -0
- package/dist/assets/server/search/search.module.js.map +1 -0
- package/dist/assets/server/search/search.service.d.ts +6 -0
- package/dist/assets/server/search/search.service.js +46 -0
- package/dist/assets/server/search/search.service.js.map +1 -0
- package/dist/assets/server/sentry.d.ts +3 -0
- package/dist/assets/server/sentry.js +10 -0
- package/dist/assets/server/sentry.js.map +1 -0
- package/dist/assets/server/site/entities/site-registry.entity.d.ts +13 -0
- package/dist/assets/server/site/entities/site-registry.entity.js +76 -0
- package/dist/assets/server/site/entities/site-registry.entity.js.map +1 -0
- package/dist/assets/server/site/site.controller.d.ts +38 -0
- package/dist/assets/server/site/site.controller.js +60 -0
- package/dist/assets/server/site/site.controller.js.map +1 -0
- package/dist/assets/server/site/site.module.d.ts +2 -0
- package/dist/assets/server/site/site.module.js +26 -0
- package/dist/assets/server/site/site.module.js.map +1 -0
- package/dist/assets/server/site/site.service.d.ts +38 -0
- package/dist/assets/server/site/site.service.js +141 -0
- package/dist/assets/server/site/site.service.js.map +1 -0
- package/dist/assets/server/snapshot/raw-snapshot.entity.d.ts +35 -0
- package/dist/assets/server/snapshot/raw-snapshot.entity.js +62 -0
- package/dist/assets/server/snapshot/raw-snapshot.entity.js.map +1 -0
- package/dist/assets/server/snapshot/snapshot.controller.d.ts +18 -0
- package/dist/assets/server/snapshot/snapshot.controller.js +76 -0
- package/dist/assets/server/snapshot/snapshot.controller.js.map +1 -0
- package/dist/assets/server/snapshot/snapshot.module.d.ts +2 -0
- package/dist/assets/server/snapshot/snapshot.module.js +26 -0
- package/dist/assets/server/snapshot/snapshot.module.js.map +1 -0
- package/dist/assets/server/snapshot/snapshot.service.d.ts +10 -0
- package/dist/assets/server/snapshot/snapshot.service.js +48 -0
- package/dist/assets/server/snapshot/snapshot.service.js.map +1 -0
- package/dist/assets/server/system/system.controller.d.ts +39 -0
- package/dist/assets/server/system/system.controller.js +93 -0
- package/dist/assets/server/system/system.controller.js.map +1 -0
- package/dist/assets/server/system/system.module.d.ts +2 -0
- package/dist/assets/server/system/system.module.js +26 -0
- package/dist/assets/server/system/system.module.js.map +1 -0
- package/dist/assets/server/system/system.service.d.ts +86 -0
- package/dist/assets/server/system/system.service.js +433 -0
- package/dist/assets/server/system/system.service.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.d.ts +28 -0
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js +186 -0
- package/dist/assets/server/talent-fingerprint/fingerprint-match.service.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.d.ts +30 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js +55 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.entity.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.d.ts +2 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js +25 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.module.js.map +1 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.d.ts +8 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js +44 -0
- package/dist/assets/server/talent-fingerprint/talent-fingerprint.service.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.controller.d.ts +6 -0
- package/dist/assets/server/talent-job-match/talent-job-match.controller.js +42 -0
- package/dist/assets/server/talent-job-match/talent-job-match.controller.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.entity.d.ts +33 -0
- package/dist/assets/server/talent-job-match/talent-job-match.entity.js +73 -0
- package/dist/assets/server/talent-job-match/talent-job-match.entity.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.module.d.ts +2 -0
- package/dist/assets/server/talent-job-match/talent-job-match.module.js +26 -0
- package/dist/assets/server/talent-job-match/talent-job-match.module.js.map +1 -0
- package/dist/assets/server/talent-job-match/talent-job-match.service.d.ts +9 -0
- package/dist/assets/server/talent-job-match/talent-job-match.service.js +42 -0
- package/dist/assets/server/talent-job-match/talent-job-match.service.js.map +1 -0
- package/dist/assets/server/talent-portrait/portrait-merge.service.d.ts +17 -0
- package/dist/assets/server/talent-portrait/portrait-merge.service.js +200 -0
- package/dist/assets/server/talent-portrait/portrait-merge.service.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.controller.d.ts +7 -0
- package/dist/assets/server/talent-portrait/talent-portrait.controller.js +52 -0
- package/dist/assets/server/talent-portrait/talent-portrait.controller.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.entity.d.ts +91 -0
- package/dist/assets/server/talent-portrait/talent-portrait.entity.js +71 -0
- package/dist/assets/server/talent-portrait/talent-portrait.entity.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.module.d.ts +2 -0
- package/dist/assets/server/talent-portrait/talent-portrait.module.js +27 -0
- package/dist/assets/server/talent-portrait/talent-portrait.module.js.map +1 -0
- package/dist/assets/server/talent-portrait/talent-portrait.service.d.ts +10 -0
- package/dist/assets/server/talent-portrait/talent-portrait.service.js +46 -0
- package/dist/assets/server/talent-portrait/talent-portrait.service.js.map +1 -0
- package/dist/assets/server/telemetry/telemetry.module.d.ts +2 -0
- package/dist/assets/server/telemetry/telemetry.module.js +24 -0
- package/dist/assets/server/telemetry/telemetry.module.js.map +1 -0
- package/dist/assets/server/telemetry/telemetry.service.d.ts +29 -0
- package/dist/assets/server/telemetry/telemetry.service.js +116 -0
- package/dist/assets/server/telemetry/telemetry.service.js.map +1 -0
- package/dist/auto-doctor.d.ts +8 -0
- package/dist/auto-doctor.js +34 -0
- package/dist/bundled-assets.d.ts +22 -0
- package/dist/bundled-assets.js +80 -0
- package/dist/cache/db.js +10 -54
- package/dist/commands/addons.js +46 -71
- package/dist/commands/cache.js +29 -27
- package/dist/commands/config.d.ts +1 -1
- package/dist/commands/config.js +8 -12
- package/dist/commands/doctor.d.ts +38 -1
- package/dist/commands/doctor.js +214 -74
- package/dist/commands/extension.js +84 -98
- package/dist/commands/extras.d.ts +32 -2
- package/dist/commands/extras.js +252 -64
- package/dist/commands/init.js +18 -46
- package/dist/commands/install.js +31 -60
- package/dist/commands/job.js +27 -65
- package/dist/commands/login.js +50 -37
- package/dist/commands/logout.js +8 -12
- package/dist/commands/ops.js +94 -67
- package/dist/commands/record.js +21 -59
- package/dist/commands/report.js +14 -18
- package/dist/commands/search.js +14 -21
- package/dist/commands/server.d.ts +1 -1
- package/dist/commands/server.js +126 -112
- package/dist/commands/status.js +23 -27
- package/dist/commands/update.js +44 -79
- package/dist/config.d.ts +3 -0
- package/dist/config.js +12 -46
- package/dist/i18n/index.js +5 -11
- package/dist/i18n/locales/en-US.json +24 -1
- package/dist/i18n/locales/zh-CN.json +24 -1
- package/dist/index.cmd +3 -0
- package/dist/index.js +90 -98
- package/dist/index.ps1 +3 -0
- package/dist/keychain.js +9 -44
- package/dist/logger.d.ts +7 -0
- package/dist/logger.js +80 -0
- package/dist/native-check.d.ts +6 -0
- package/dist/native-check.js +23 -0
- package/dist/sentry.js +4 -8
- package/dist/updater.js +15 -52
- package/dist/utils/proc.d.ts +35 -0
- package/dist/utils/proc.js +81 -0
- package/dist/utils/spawn.d.ts +19 -0
- package/dist/utils/spawn.js +60 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +183 -81
- package/dist/watchdog.d.ts +1 -0
- package/dist/watchdog.js +128 -0
- package/package.json +7 -6
- package/dist/commands/native-check.d.ts +0 -22
- package/dist/commands/native-check.js +0 -93
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractLinkedInProfile = extractLinkedInProfile;
|
|
4
|
+
const cheerio_1 = require("cheerio");
|
|
5
|
+
const SECTION_KEYWORDS = new Set([
|
|
6
|
+
'About', 'Experience', 'Education', 'Skills', 'Projects', 'Featured', 'Activity',
|
|
7
|
+
'People you may know', 'You might like', 'Ad Options', 'Don’t want to see this',
|
|
8
|
+
'Explore Premium profiles', 'People who follow',
|
|
9
|
+
]);
|
|
10
|
+
function isSectionLike(text) {
|
|
11
|
+
const t = text.trim();
|
|
12
|
+
if (!t)
|
|
13
|
+
return true;
|
|
14
|
+
for (const kw of SECTION_KEYWORDS) {
|
|
15
|
+
if (t.includes(kw))
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
const NON_NAME_KEYWORDS = /notifications|messages|jobs|network|home|search/i;
|
|
21
|
+
function looksLikeName(text) {
|
|
22
|
+
const t = text.trim();
|
|
23
|
+
return (t.length > 0 &&
|
|
24
|
+
t.length <= 80 &&
|
|
25
|
+
!isSectionLike(t) &&
|
|
26
|
+
!NON_NAME_KEYWORDS.test(t));
|
|
27
|
+
}
|
|
28
|
+
function isPunctuationOnly(text) {
|
|
29
|
+
return /^[^\p{L}\p{N}]*$/u.test(text.trim());
|
|
30
|
+
}
|
|
31
|
+
function looksLikeLocation(text) {
|
|
32
|
+
const t = text.trim();
|
|
33
|
+
const parts = t.split(',').map((s) => s.trim()).filter(Boolean);
|
|
34
|
+
if (parts.length === 0 || parts.length > 3)
|
|
35
|
+
return false;
|
|
36
|
+
return parts.every((p) => /^[A-Za-zÀ-ſ\s'-]{2,40}$/.test(p) && !/\d/.test(p));
|
|
37
|
+
}
|
|
38
|
+
function looksLikeUrl(text) {
|
|
39
|
+
return /^https?:\/\//.test(text.trim());
|
|
40
|
+
}
|
|
41
|
+
function looksLikeFollowers(text) {
|
|
42
|
+
const t = text.trim();
|
|
43
|
+
return /followers|connections/i.test(t) || /^[\d,]+\+?\s*$/.test(t);
|
|
44
|
+
}
|
|
45
|
+
function looksLikeExperienceLocation(text) {
|
|
46
|
+
const t = text.trim();
|
|
47
|
+
if (t.length > 60)
|
|
48
|
+
return false;
|
|
49
|
+
if (/\b(Area|Region|City|Metropolitan)\b/i.test(t))
|
|
50
|
+
return true;
|
|
51
|
+
if (/^[A-Z][a-z]+(?:\s+[A-Z][a-z]+){0,5}(?:\s+(Area|Region|City|Metropolitan))?$/i.test(t))
|
|
52
|
+
return true;
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
function looksLikeDateRange(text) {
|
|
56
|
+
const t = text.trim();
|
|
57
|
+
const hasYear = /\b(19|20)\d{2}\b/.test(t);
|
|
58
|
+
const hasMonthOrPresent = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|Present|present|至今)\b/.test(t);
|
|
59
|
+
const yearRange = /\b(19|20)\d{2}\b\s*[-–—]\s*\b(19|20)\d{2}\b/.test(t);
|
|
60
|
+
return hasYear && (hasMonthOrPresent || yearRange);
|
|
61
|
+
}
|
|
62
|
+
function firstText($, container) {
|
|
63
|
+
return $(container).text().replace(/\s+/g, ' ').trim();
|
|
64
|
+
}
|
|
65
|
+
function extractLinkedInProfile(html) {
|
|
66
|
+
const $ = (0, cheerio_1.load)(html);
|
|
67
|
+
const out = {};
|
|
68
|
+
const h2s = $('h2');
|
|
69
|
+
let name = null;
|
|
70
|
+
let nameEl = null;
|
|
71
|
+
h2s.each((_i, el) => {
|
|
72
|
+
if (name)
|
|
73
|
+
return;
|
|
74
|
+
const $el = $(el);
|
|
75
|
+
const cls = $el.attr('class') || '';
|
|
76
|
+
const parentCls = $el.parent().attr('class') || '';
|
|
77
|
+
const t = $el.text().replace(/\s+/g, ' ').trim().replace(/\s*\|\s*$/, '');
|
|
78
|
+
if (looksLikeName(t) &&
|
|
79
|
+
(cls.includes('_1f667e81') || parentCls.includes('a8841267'))) {
|
|
80
|
+
name = t;
|
|
81
|
+
nameEl = $el;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
if (!name) {
|
|
85
|
+
h2s.each((_i, el) => {
|
|
86
|
+
if (name)
|
|
87
|
+
return;
|
|
88
|
+
const t = $(el).text().replace(/\s+/g, ' ').trim().replace(/\s*\|\s*$/, '');
|
|
89
|
+
if (looksLikeName(t)) {
|
|
90
|
+
name = t;
|
|
91
|
+
nameEl = $(el);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (name)
|
|
96
|
+
out.name = name;
|
|
97
|
+
const topCard = nameEl
|
|
98
|
+
? nameEl.closest('section').first()
|
|
99
|
+
: h2s.first().closest('section').first();
|
|
100
|
+
const topTexts = [];
|
|
101
|
+
topCard.find('p').each((_i, el) => {
|
|
102
|
+
const t = $(el).text().replace(/\s+/g, ' ').trim();
|
|
103
|
+
if (t && !topTexts.includes(t))
|
|
104
|
+
topTexts.push(t);
|
|
105
|
+
});
|
|
106
|
+
const meaningfulTop = topTexts.filter((t) => !/^·\s*\d+(?:rd|th|nd|st)?$/.test(t));
|
|
107
|
+
if (meaningfulTop[0] && !isSectionLike(meaningfulTop[0])) {
|
|
108
|
+
out.headline = meaningfulTop[0];
|
|
109
|
+
}
|
|
110
|
+
if (meaningfulTop[1] && !isSectionLike(meaningfulTop[1]) && !isPunctuationOnly(meaningfulTop[1])) {
|
|
111
|
+
out.currentCompany = meaningfulTop[1];
|
|
112
|
+
}
|
|
113
|
+
for (let i = 0; i < meaningfulTop.length; i++) {
|
|
114
|
+
const t = meaningfulTop[i];
|
|
115
|
+
if (t === out.headline || t === out.currentCompany)
|
|
116
|
+
continue;
|
|
117
|
+
if (!out.location && looksLikeLocation(t))
|
|
118
|
+
out.location = t;
|
|
119
|
+
if (looksLikeUrl(t))
|
|
120
|
+
out.website = t;
|
|
121
|
+
if (looksLikeFollowers(t)) {
|
|
122
|
+
const next = meaningfulTop[i + 1];
|
|
123
|
+
out.followers = next && /connections|followers/i.test(next) ? `${t} ${next}` : t;
|
|
124
|
+
if (next && /connections|followers/i.test(next))
|
|
125
|
+
i++;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const aboutH2 = h2s.filter((_i, el) => $(el).text().includes('About')).first();
|
|
129
|
+
if (aboutH2.length) {
|
|
130
|
+
let cursor = aboutH2.parent().next();
|
|
131
|
+
const summaryParts = [];
|
|
132
|
+
for (let i = 0; i < 6 && cursor.length; i++) {
|
|
133
|
+
const tag = cursor.prop('tagName')?.toLowerCase();
|
|
134
|
+
if (tag === 'h2')
|
|
135
|
+
break;
|
|
136
|
+
const t = firstText($, cursor);
|
|
137
|
+
if (t.length > 20 && !isSectionLike(t))
|
|
138
|
+
summaryParts.push(t);
|
|
139
|
+
cursor = cursor.next();
|
|
140
|
+
}
|
|
141
|
+
if (summaryParts.length)
|
|
142
|
+
out.summary = summaryParts.join(' ');
|
|
143
|
+
}
|
|
144
|
+
const expH2 = h2s.filter((_i, el) => $(el).text().includes('Experience')).first();
|
|
145
|
+
if (expH2.length) {
|
|
146
|
+
const section = expH2.closest('section').first();
|
|
147
|
+
const pTexts = [];
|
|
148
|
+
section.find('p').each((_i, el) => {
|
|
149
|
+
const t = firstText($, el);
|
|
150
|
+
if (t && !isSectionLike(t))
|
|
151
|
+
pTexts.push(t);
|
|
152
|
+
});
|
|
153
|
+
const experiences = [];
|
|
154
|
+
let lastDateIdx = -1;
|
|
155
|
+
for (let i = 0; i < pTexts.length; i++) {
|
|
156
|
+
if (looksLikeDateRange(pTexts[i])) {
|
|
157
|
+
const item = { duration: pTexts[i] };
|
|
158
|
+
if (pTexts[i - 1])
|
|
159
|
+
item.company = pTexts[i - 1];
|
|
160
|
+
if (pTexts[i - 2])
|
|
161
|
+
item.title = pTexts[i - 2];
|
|
162
|
+
if (experiences.length > 0 && lastDateIdx >= 0) {
|
|
163
|
+
const desc = pTexts.slice(lastDateIdx + 1, i - 2);
|
|
164
|
+
if (desc.length) {
|
|
165
|
+
const first = desc[0];
|
|
166
|
+
if (looksLikeExperienceLocation(first)) {
|
|
167
|
+
experiences[experiences.length - 1].location = first;
|
|
168
|
+
if (desc.length > 1) {
|
|
169
|
+
experiences[experiences.length - 1].description = desc.slice(1).join(' ');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
experiences[experiences.length - 1].description = desc.join(' ');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (Object.keys(item).length > 1)
|
|
178
|
+
experiences.push(item);
|
|
179
|
+
lastDateIdx = i;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (experiences.length)
|
|
183
|
+
out.experiences = experiences;
|
|
184
|
+
}
|
|
185
|
+
const eduH2 = h2s.filter((_i, el) => $(el).text().includes('Education')).first();
|
|
186
|
+
if (eduH2.length) {
|
|
187
|
+
const section = eduH2.closest('section').first();
|
|
188
|
+
const pTexts = [];
|
|
189
|
+
section.find('p').each((_i, el) => {
|
|
190
|
+
const t = firstText($, el);
|
|
191
|
+
if (t && !isSectionLike(t))
|
|
192
|
+
pTexts.push(t);
|
|
193
|
+
});
|
|
194
|
+
const education = [];
|
|
195
|
+
let lastDateIdx = -1;
|
|
196
|
+
for (let i = 0; i < pTexts.length; i++) {
|
|
197
|
+
if (looksLikeDateRange(pTexts[i])) {
|
|
198
|
+
const item = { years: pTexts[i] };
|
|
199
|
+
if (pTexts[i - 2]) {
|
|
200
|
+
item.school = pTexts[i - 2];
|
|
201
|
+
item.degree = pTexts[i - 1];
|
|
202
|
+
}
|
|
203
|
+
else if (pTexts[i - 1]) {
|
|
204
|
+
item.school = pTexts[i - 1];
|
|
205
|
+
}
|
|
206
|
+
if (Object.keys(item).length > 1)
|
|
207
|
+
education.push(item);
|
|
208
|
+
lastDateIdx = i;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (lastDateIdx >= 0 && lastDateIdx < pTexts.length - 1) {
|
|
212
|
+
const tail = pTexts.slice(lastDateIdx + 1);
|
|
213
|
+
if (tail.length >= 2) {
|
|
214
|
+
education.push({ school: tail[0], degree: tail[1] });
|
|
215
|
+
}
|
|
216
|
+
else if (tail.length === 1) {
|
|
217
|
+
education.push({ school: tail[0] });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (education.length)
|
|
221
|
+
out.education = education;
|
|
222
|
+
}
|
|
223
|
+
const skillH2 = h2s.filter((_i, el) => $(el).text().includes('Skills')).first();
|
|
224
|
+
if (skillH2.length) {
|
|
225
|
+
const section = skillH2.closest('section, div').first();
|
|
226
|
+
const skills = new Set();
|
|
227
|
+
section.find('span, button, a, li, div[role="listitem"]').each((_i, el) => {
|
|
228
|
+
const t = firstText($, el);
|
|
229
|
+
if (t &&
|
|
230
|
+
t.length <= 50 &&
|
|
231
|
+
t.length >= 2 &&
|
|
232
|
+
!isSectionLike(t) &&
|
|
233
|
+
!looksLikeDateRange(t) &&
|
|
234
|
+
!looksLikeFollowers(t) &&
|
|
235
|
+
!looksLikeUrl(t)) {
|
|
236
|
+
skills.add(t);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
if (skills.size)
|
|
240
|
+
out.skills = Array.from(skills).slice(0, 50);
|
|
241
|
+
}
|
|
242
|
+
return out;
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=linkedin-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkedin-extractor.js","sourceRoot":"","sources":["../../src/extraction/linkedin-extractor.ts"],"names":[],"mappings":";;AA2EA,wDAsLC;AAjQD,qCAA2C;AAO3C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IAChF,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,EAAE,wBAAwB;IAC/E,0BAA0B,EAAE,mBAAmB;CAChD,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,iBAAiB,GAAG,kDAAkD,CAAC;AAE7E,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,OAAO,CACL,CAAC,CAAC,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,MAAM,IAAI,EAAE;QACd,CAAC,aAAa,CAAC,CAAC,CAAC;QACjB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IAErC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY;IAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,sCAAsC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChE,IAAI,8EAA8E,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACxG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,iBAAiB,GAAG,0EAA0E,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,SAAS,GAAG,6CAA6C,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,OAAO,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,SAAS,CAAC,CAAa,EAAE,SAAc;IAC9C,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACzD,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAY;IACjD,MAAM,CAAC,GAAG,IAAA,cAAI,EAAC,IAAI,CAAC,CAAC;IACrB,MAAM,GAAG,GAAwB,EAAE,CAAC;IAGpC,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,MAAM,GAAQ,IAAI,CAAC;IACvB,GAAG,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAO,EAAE,EAAE;QAC/B,IAAI,IAAI;YAAE,OAAO;QACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAClB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC1E,IACE,aAAa,CAAC,CAAC,CAAC;YAChB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAC7D,CAAC;YACD,IAAI,GAAG,CAAC,CAAC;YACT,MAAM,GAAG,GAAG,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,GAAG,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAO,EAAE,EAAE;YAC/B,IAAI,IAAI;gBAAE,OAAO;YACjB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YAC5E,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;IAK1B,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE;QACnC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAO,EAAE,EAAE;QAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAIH,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,GAAG,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,cAAc;YAAE,SAAS;QAC7D,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,iBAAiB,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC5D,IAAI,YAAY,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;QACrC,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;YAE1B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,GAAG,CAAC,SAAS,GAAG,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,IAAI,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,CAAC,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAGD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/E,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;YAClD,IAAI,GAAG,KAAK,IAAI;gBAAE,MAAM;YACxB,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,YAAY,CAAC,MAAM;YAAE,GAAG,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IAID,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAClF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAO,EAAE,EAAE;YAC7C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAA0B,EAAE,CAAC;QAC9C,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAwB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;oBAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChD,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;oBAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE9C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;oBAClD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;4BACvC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;4BACrD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gCACpB,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAC5E,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACN,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnE,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;oBAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzD,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,IAAI,WAAW,CAAC,MAAM;YAAE,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IACxD,CAAC;IAGD,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IACjF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAO,EAAE,EAAE;YAC7C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAA0B,EAAE,CAAC;QAC5C,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAwB,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvD,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,CAAC;qBAAM,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;oBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvD,WAAW,GAAG,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,IAAI,WAAW,IAAI,CAAC,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACrB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvD,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM;YAAE,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAClD,CAAC;IAGD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAChF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAO,EAAE,EAAE;YACrF,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,IACE,CAAC;gBACD,CAAC,CAAC,MAAM,IAAI,EAAE;gBACd,CAAC,CAAC,MAAM,IAAI,CAAC;gBACb,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjB,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACtB,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACtB,CAAC,YAAY,CAAC,CAAC,CAAC,EAChB,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SnapshotNode {
|
|
2
|
+
type: number;
|
|
3
|
+
tagName?: string;
|
|
4
|
+
name?: string;
|
|
5
|
+
publicId?: string;
|
|
6
|
+
systemId?: string;
|
|
7
|
+
textContent?: string;
|
|
8
|
+
data?: string;
|
|
9
|
+
attributes?: Record<string, string>;
|
|
10
|
+
childNodes?: SnapshotNode[];
|
|
11
|
+
}
|
|
12
|
+
export declare function nodeToHtml(node: SnapshotNode): string;
|
|
13
|
+
export declare function isFullSnapshot(payload: Record<string, any> | undefined): boolean;
|
|
14
|
+
export declare function isCheckoutEvent(payload: Record<string, any> | undefined): boolean;
|
|
15
|
+
export declare function snapshotTimestamp(payload: Record<string, any> | undefined): Date | undefined;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nodeToHtml = nodeToHtml;
|
|
4
|
+
exports.isFullSnapshot = isFullSnapshot;
|
|
5
|
+
exports.isCheckoutEvent = isCheckoutEvent;
|
|
6
|
+
exports.snapshotTimestamp = snapshotTimestamp;
|
|
7
|
+
function nodeToHtml(node) {
|
|
8
|
+
if (!node)
|
|
9
|
+
return '';
|
|
10
|
+
switch (node.type) {
|
|
11
|
+
case 0:
|
|
12
|
+
return (node.childNodes || []).map(nodeToHtml).join('');
|
|
13
|
+
case 1:
|
|
14
|
+
return `<!DOCTYPE ${node.name || 'html'}>`;
|
|
15
|
+
case 2: {
|
|
16
|
+
if (!node.tagName)
|
|
17
|
+
return '';
|
|
18
|
+
const attrs = Object.entries(node.attributes || {})
|
|
19
|
+
.map(([k, v]) => `${k}="${String(v).replace(/"/g, '"')}"`)
|
|
20
|
+
.join(' ');
|
|
21
|
+
const open = attrs ? `<${node.tagName} ${attrs}>` : `<${node.tagName}>`;
|
|
22
|
+
const voidTags = new Set(['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']);
|
|
23
|
+
if (voidTags.has(node.tagName.toLowerCase()))
|
|
24
|
+
return open;
|
|
25
|
+
const children = (node.childNodes || []).map(nodeToHtml).join('');
|
|
26
|
+
return `${open}${children}</${node.tagName}>`;
|
|
27
|
+
}
|
|
28
|
+
case 3:
|
|
29
|
+
return node.textContent ?? node.data ?? '';
|
|
30
|
+
case 5:
|
|
31
|
+
return `<!--${node.data || ''}-->`;
|
|
32
|
+
default:
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function isFullSnapshot(payload) {
|
|
37
|
+
return payload?.type === 2 && !!payload.data?.node;
|
|
38
|
+
}
|
|
39
|
+
function isCheckoutEvent(payload) {
|
|
40
|
+
return !!payload && isFullSnapshot(payload) && payload.isCheckout === true;
|
|
41
|
+
}
|
|
42
|
+
function snapshotTimestamp(payload) {
|
|
43
|
+
if (payload && payload.timestamp && typeof payload.timestamp === 'number') {
|
|
44
|
+
return new Date(payload.timestamp);
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=rrweb-snapshot.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rrweb-snapshot.utils.js","sourceRoot":"","sources":["../../src/extraction/rrweb-snapshot.utils.ts"],"names":[],"mappings":";;AAkBA,gCAyBC;AAED,wCAEC;AAED,0CAEC;AAED,8CAKC;AAxCD,SAAgB,UAAU,CAAC,IAAkB;IAC3C,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC;YACJ,OAAO,aAAa,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC;QAC7C,KAAK,CAAC,CAAC,CAAC,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;iBAChD,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;iBAC9D,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;YACxE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1I,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC1D,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,GAAG,IAAI,GAAG,QAAQ,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC;QAChD,CAAC;QACD,KAAK,CAAC;YACJ,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7C,KAAK,CAAC;YACJ,OAAO,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC;QACrC;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,cAAc,CAAC,OAAwC;IACrE,OAAO,OAAO,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACrD,CAAC;AAED,SAAgB,eAAe,CAAC,OAAwC;IACtE,OAAO,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC;AAC7E,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAwC;IACxE,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const rrweb_snapshot_utils_1 = require("./rrweb-snapshot.utils");
|
|
4
|
+
describe('rrweb-snapshot.utils', () => {
|
|
5
|
+
describe('nodeToHtml', () => {
|
|
6
|
+
it('should serialize element with attributes and children', () => {
|
|
7
|
+
const node = {
|
|
8
|
+
type: 2,
|
|
9
|
+
tagName: 'div',
|
|
10
|
+
attributes: { class: 'profile', id: 'p1' },
|
|
11
|
+
childNodes: [
|
|
12
|
+
{ type: 3, textContent: 'Jensen Huang' },
|
|
13
|
+
],
|
|
14
|
+
};
|
|
15
|
+
expect((0, rrweb_snapshot_utils_1.nodeToHtml)(node)).toContain('<div class="profile" id="p1"');
|
|
16
|
+
expect((0, rrweb_snapshot_utils_1.nodeToHtml)(node)).toContain('Jensen Huang');
|
|
17
|
+
expect((0, rrweb_snapshot_utils_1.nodeToHtml)(node)).toContain('</div>');
|
|
18
|
+
});
|
|
19
|
+
it('should handle void tags without closing tag', () => {
|
|
20
|
+
const node = { type: 2, tagName: 'img', attributes: { src: 'a.jpg' } };
|
|
21
|
+
expect((0, rrweb_snapshot_utils_1.nodeToHtml)(node)).toBe('<img src="a.jpg">');
|
|
22
|
+
});
|
|
23
|
+
it('should return empty string for null node', () => {
|
|
24
|
+
expect((0, rrweb_snapshot_utils_1.nodeToHtml)(null)).toBe('');
|
|
25
|
+
});
|
|
26
|
+
it('should escape attribute double quotes', () => {
|
|
27
|
+
const node = { type: 2, tagName: 'span', attributes: { title: 'say "hi"' } };
|
|
28
|
+
expect((0, rrweb_snapshot_utils_1.nodeToHtml)(node)).toBe('<span title="say "hi""></span>');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('isFullSnapshot', () => {
|
|
32
|
+
it('should recognize rrweb full snapshot payload', () => {
|
|
33
|
+
expect((0, rrweb_snapshot_utils_1.isFullSnapshot)({ type: 2, data: { node: { type: 2, tagName: 'html' } } })).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it('should reject incremental snapshot', () => {
|
|
36
|
+
expect((0, rrweb_snapshot_utils_1.isFullSnapshot)({ type: 3, data: { source: 0 } })).toBe(false);
|
|
37
|
+
});
|
|
38
|
+
it('should handle undefined payload', () => {
|
|
39
|
+
expect((0, rrweb_snapshot_utils_1.isFullSnapshot)(undefined)).toBe(false);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('isCheckoutEvent', () => {
|
|
43
|
+
it('should return true when full snapshot is checkout', () => {
|
|
44
|
+
expect((0, rrweb_snapshot_utils_1.isCheckoutEvent)({ type: 2, isCheckout: true, data: { node: {} } })).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it('should return false for non-checkout full snapshot', () => {
|
|
47
|
+
expect((0, rrweb_snapshot_utils_1.isCheckoutEvent)({ type: 2, data: { node: {} } })).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('snapshotTimestamp', () => {
|
|
51
|
+
it('should convert timestamp to Date', () => {
|
|
52
|
+
const ts = Date.now();
|
|
53
|
+
expect((0, rrweb_snapshot_utils_1.snapshotTimestamp)({ timestamp: ts })).toEqual(new Date(ts));
|
|
54
|
+
});
|
|
55
|
+
it('should return undefined when no timestamp', () => {
|
|
56
|
+
expect((0, rrweb_snapshot_utils_1.snapshotTimestamp)({})).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=rrweb-snapshot.utils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rrweb-snapshot.utils.spec.js","sourceRoot":"","sources":["../../src/extraction/rrweb-snapshot.utils.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ScriptFieldRule {
|
|
2
|
+
selector: string;
|
|
3
|
+
attr?: string;
|
|
4
|
+
regex?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ScriptRulePayload {
|
|
7
|
+
engine?: string;
|
|
8
|
+
fields?: Record<string, ScriptFieldRule>;
|
|
9
|
+
lists?: Record<string, {
|
|
10
|
+
selector: string;
|
|
11
|
+
fields: Record<string, ScriptFieldRule>;
|
|
12
|
+
}>;
|
|
13
|
+
}
|
|
14
|
+
export declare function applyScriptRule(html: string, payload: ScriptRulePayload): Record<string, any>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyScriptRule = applyScriptRule;
|
|
4
|
+
const cheerio_1 = require("cheerio");
|
|
5
|
+
const linkedin_extractor_1 = require("./linkedin-extractor");
|
|
6
|
+
function readField($, root, rule) {
|
|
7
|
+
const el = root.find(rule.selector).first();
|
|
8
|
+
if (!el.length)
|
|
9
|
+
return null;
|
|
10
|
+
let value;
|
|
11
|
+
if (!rule.attr || rule.attr === 'text')
|
|
12
|
+
value = el.text().trim();
|
|
13
|
+
else if (rule.attr === 'html')
|
|
14
|
+
value = el.html();
|
|
15
|
+
else
|
|
16
|
+
value = el.attr(rule.attr) ?? null;
|
|
17
|
+
if (value == null)
|
|
18
|
+
return null;
|
|
19
|
+
if (rule.regex) {
|
|
20
|
+
const m = value.match(new RegExp(rule.regex, 's'));
|
|
21
|
+
value = m?.[1]?.trim() ?? null;
|
|
22
|
+
}
|
|
23
|
+
return value || null;
|
|
24
|
+
}
|
|
25
|
+
function applyScriptRule(html, payload) {
|
|
26
|
+
if (payload.engine === 'linkedin-profile') {
|
|
27
|
+
return (0, linkedin_extractor_1.extractLinkedInProfile)(html);
|
|
28
|
+
}
|
|
29
|
+
const $ = (0, cheerio_1.load)(html);
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const [field, rule] of Object.entries(payload.fields || {})) {
|
|
32
|
+
out[field] = readField($, $('body').length ? $('body') : $.root(), rule);
|
|
33
|
+
}
|
|
34
|
+
for (const [listName, listRule] of Object.entries(payload.lists || {})) {
|
|
35
|
+
const items = [];
|
|
36
|
+
$(listRule.selector).each((_i, el) => {
|
|
37
|
+
const item = {};
|
|
38
|
+
for (const [field, rule] of Object.entries(listRule.fields)) {
|
|
39
|
+
item[field] = readField($, $(el), rule);
|
|
40
|
+
}
|
|
41
|
+
if (Object.values(item).some((v) => v != null))
|
|
42
|
+
items.push(item);
|
|
43
|
+
});
|
|
44
|
+
if (items.length)
|
|
45
|
+
out[listName] = items;
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=script-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-rule.js","sourceRoot":"","sources":["../../src/extraction/script-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { Repository } from 'typeorm';
|
|
3
|
+
import { RecordingEventBus } from '../recording/recording-event-bus.service';
|
|
4
|
+
import { RecordingSnapshotService } from '../recording/recording-snapshot.service';
|
|
5
|
+
import { ParseLog } from './entities/parse-log.entity';
|
|
6
|
+
import { AdapterService } from './adapter.service';
|
|
7
|
+
import { ExtractionService } from './extraction.service';
|
|
8
|
+
import { AnomalyReportService } from './anomaly-report.service';
|
|
9
|
+
export declare class SnapshotAnalysisService implements OnModuleInit {
|
|
10
|
+
private readonly eventBus;
|
|
11
|
+
private readonly snapshotService;
|
|
12
|
+
private readonly adapterService;
|
|
13
|
+
private readonly extractionService;
|
|
14
|
+
private readonly anomalyReport;
|
|
15
|
+
private readonly parseLogRepo;
|
|
16
|
+
private debounceTimers;
|
|
17
|
+
constructor(eventBus: RecordingEventBus, snapshotService: RecordingSnapshotService, adapterService: AdapterService, extractionService: ExtractionService, anomalyReport: AnomalyReportService, parseLogRepo: Repository<ParseLog>);
|
|
18
|
+
onModuleInit(): void;
|
|
19
|
+
private debouncedAnalyze;
|
|
20
|
+
private analyzeSnapshot;
|
|
21
|
+
private detectAnomaly;
|
|
22
|
+
private extractDomain;
|
|
23
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SnapshotAnalysisService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
18
|
+
const typeorm_2 = require("typeorm");
|
|
19
|
+
const recording_event_bus_service_1 = require("../recording/recording-event-bus.service");
|
|
20
|
+
const recording_snapshot_service_1 = require("../recording/recording-snapshot.service");
|
|
21
|
+
const parse_log_entity_1 = require("./entities/parse-log.entity");
|
|
22
|
+
const adapter_service_1 = require("./adapter.service");
|
|
23
|
+
const extraction_service_1 = require("./extraction.service");
|
|
24
|
+
const anomaly_report_service_1 = require("./anomaly-report.service");
|
|
25
|
+
const CRITICAL_FIELDS = {
|
|
26
|
+
talent: ['name'],
|
|
27
|
+
job: ['title'],
|
|
28
|
+
company: ['name'],
|
|
29
|
+
};
|
|
30
|
+
let SnapshotAnalysisService = class SnapshotAnalysisService {
|
|
31
|
+
eventBus;
|
|
32
|
+
snapshotService;
|
|
33
|
+
adapterService;
|
|
34
|
+
extractionService;
|
|
35
|
+
anomalyReport;
|
|
36
|
+
parseLogRepo;
|
|
37
|
+
debounceTimers = new Map();
|
|
38
|
+
constructor(eventBus, snapshotService, adapterService, extractionService, anomalyReport, parseLogRepo) {
|
|
39
|
+
this.eventBus = eventBus;
|
|
40
|
+
this.snapshotService = snapshotService;
|
|
41
|
+
this.adapterService = adapterService;
|
|
42
|
+
this.extractionService = extractionService;
|
|
43
|
+
this.anomalyReport = anomalyReport;
|
|
44
|
+
this.parseLogRepo = parseLogRepo;
|
|
45
|
+
}
|
|
46
|
+
onModuleInit() {
|
|
47
|
+
this.eventBus.on('recording.snapshot.created', (evt) => {
|
|
48
|
+
this.debouncedAnalyze(evt.sessionId, evt.snapshotId);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
debouncedAnalyze(sessionId, snapshotId) {
|
|
52
|
+
const existing = this.debounceTimers.get(sessionId);
|
|
53
|
+
if (existing)
|
|
54
|
+
clearTimeout(existing);
|
|
55
|
+
this.debounceTimers.set(sessionId, setTimeout(() => {
|
|
56
|
+
this.debounceTimers.delete(sessionId);
|
|
57
|
+
this.analyzeSnapshot(snapshotId).catch((err) => {
|
|
58
|
+
console.error('[SnapshotAnalysis] analyze failed', err);
|
|
59
|
+
});
|
|
60
|
+
}, 1000));
|
|
61
|
+
}
|
|
62
|
+
async analyzeSnapshot(snapshotId) {
|
|
63
|
+
const snapshot = await this.snapshotService.getById(snapshotId);
|
|
64
|
+
if (!snapshot)
|
|
65
|
+
return;
|
|
66
|
+
const recent = await this.parseLogRepo.findOne({
|
|
67
|
+
where: { sessionId: snapshot.sessionId },
|
|
68
|
+
order: { createdAt: 'DESC' },
|
|
69
|
+
});
|
|
70
|
+
if (recent &&
|
|
71
|
+
recent.status === 'ok' &&
|
|
72
|
+
recent.createdAt &&
|
|
73
|
+
snapshot.snapshotTimestamp.getTime() - recent.createdAt.getTime() < 5000) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const analysis = await this.adapterService.analyzeSnapshot(snapshot);
|
|
77
|
+
const domain = snapshot.domain ? (0, extraction_service_1.etldPlus1)(snapshot.domain) : this.extractDomain(snapshot.sourceUrl);
|
|
78
|
+
const entity = await this.extractionService.incrementalUpsertEntity(analysis.pageClass, domain, snapshot.sourceUrl || '', analysis.extracted, [], snapshot.sessionId, analysis.adapterVersion);
|
|
79
|
+
const anomaly = this.detectAnomaly(analysis.pageClass, analysis.extracted, analysis.matchedRules, domain);
|
|
80
|
+
const status = anomaly.isAnomaly ? 'anomaly' : entity ? 'ok' : analysis.matchedRules.length ? 'empty' : 'no-rule';
|
|
81
|
+
await this.snapshotService.updateParseStatus(snapshot.id, status, anomaly.score);
|
|
82
|
+
const parseLog = await this.parseLogRepo.save(this.parseLogRepo.create({
|
|
83
|
+
sessionId: snapshot.sessionId,
|
|
84
|
+
sourceUrl: snapshot.sourceUrl || '',
|
|
85
|
+
domain,
|
|
86
|
+
pageClass: analysis.pageClass,
|
|
87
|
+
status,
|
|
88
|
+
hasSnapshot: true,
|
|
89
|
+
snapshotId: snapshot.id,
|
|
90
|
+
adapterVersion: analysis.adapterVersion,
|
|
91
|
+
matchedRuleIds: analysis.matchedRules.map((r) => `${r.platform}:${r.version}:${r.id}`),
|
|
92
|
+
extractedFields: Object.fromEntries(Object.entries(analysis.extracted).filter(([, v]) => v != null)),
|
|
93
|
+
missingFields: Object.entries(analysis.extracted).filter(([, v]) => v == null).map(([k]) => k),
|
|
94
|
+
entityId: entity?.id ?? null,
|
|
95
|
+
anomalyScore: anomaly.score,
|
|
96
|
+
}));
|
|
97
|
+
if (status === 'anomaly') {
|
|
98
|
+
await this.anomalyReport.report(snapshot.sessionId, snapshot.id, parseLog.id, anomaly.reason);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
detectAnomaly(pageClass, extracted, matchedRules, domain) {
|
|
102
|
+
const reasons = [];
|
|
103
|
+
if (pageClass === 'unknown' && matchedRules.length > 0) {
|
|
104
|
+
reasons.push('enabled site but unknown page class');
|
|
105
|
+
}
|
|
106
|
+
if (matchedRules.length === 0 && domain) {
|
|
107
|
+
reasons.push('no adapter rules matched for enabled domain');
|
|
108
|
+
}
|
|
109
|
+
const critical = CRITICAL_FIELDS[pageClass] || [];
|
|
110
|
+
for (const field of critical) {
|
|
111
|
+
if (!extracted[field])
|
|
112
|
+
reasons.push(`missing critical field: ${field}`);
|
|
113
|
+
}
|
|
114
|
+
const nonEmptyFields = Object.values(extracted).filter((v) => v != null && String(v).trim() !== '').length;
|
|
115
|
+
if (nonEmptyFields === 0 && matchedRules.length > 0) {
|
|
116
|
+
reasons.push('all extracted fields are empty after adapter rules');
|
|
117
|
+
}
|
|
118
|
+
const score = Math.min(1, reasons.length * 0.25 + 0.1);
|
|
119
|
+
return {
|
|
120
|
+
isAnomaly: reasons.length > 0,
|
|
121
|
+
score,
|
|
122
|
+
reason: reasons.join('; ') || 'ok',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
extractDomain(sourceUrl) {
|
|
126
|
+
if (!sourceUrl)
|
|
127
|
+
return '';
|
|
128
|
+
try {
|
|
129
|
+
return (0, extraction_service_1.etldPlus1)(new URL(sourceUrl).hostname);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return '';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
exports.SnapshotAnalysisService = SnapshotAnalysisService;
|
|
137
|
+
exports.SnapshotAnalysisService = SnapshotAnalysisService = __decorate([
|
|
138
|
+
(0, common_1.Injectable)(),
|
|
139
|
+
__param(5, (0, typeorm_1.InjectRepository)(parse_log_entity_1.ParseLog)),
|
|
140
|
+
__metadata("design:paramtypes", [recording_event_bus_service_1.RecordingEventBus,
|
|
141
|
+
recording_snapshot_service_1.RecordingSnapshotService,
|
|
142
|
+
adapter_service_1.AdapterService,
|
|
143
|
+
extraction_service_1.ExtractionService,
|
|
144
|
+
anomaly_report_service_1.AnomalyReportService,
|
|
145
|
+
typeorm_2.Repository])
|
|
146
|
+
], SnapshotAnalysisService);
|
|
147
|
+
//# sourceMappingURL=snapshot-analysis.service.js.map
|