@guidelytech/shared 0.8.0 → 0.10.0

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/dist/index.js CHANGED
@@ -1,11 +1,22 @@
1
1
  import {
2
+ ARTICLE_VISIBILITIES,
2
3
  CAPTURE_PARAM,
3
4
  CAPTURE_SCREENSHOT_MAX_BYTES,
5
+ COMPLAINT_EVENTS,
6
+ COMPLAINT_FIELD_TYPES,
7
+ COMPLAINT_STATUSES,
4
8
  DEFAULT_PLATFORMS,
5
9
  EMBED_IFRAME_ATTRS,
6
10
  FILE_LINK_CLASS,
7
11
  GUIDELY_ID_ATTRIBUTE,
12
+ GUIDE_VISIBILITIES,
13
+ LOGGED_IN_AUDIENCE,
8
14
  MAX_COLLECTION_DEPTH,
15
+ MAX_COMPLAINT_ANSWER_LENGTH,
16
+ MAX_COMPLAINT_ATTACHMENT_BYTES,
17
+ MAX_COMPLAINT_CHOICES,
18
+ MAX_COMPLAINT_FIELDS,
19
+ MAX_COMPLAINT_LENGTH,
9
20
  MAX_PROPERTY_BYTES,
10
21
  MAX_STACK_FRAMES,
11
22
  MEDIA_FILE_MAX_BYTES,
@@ -27,6 +38,8 @@ import {
27
38
  SENSITIVE_PARAM_PATTERN,
28
39
  SENSITIVE_PROPERTY_PATTERN,
29
40
  SERVER_ASSISTED_FIELDS,
41
+ SHOW_ME_CLASS,
42
+ SHOW_ME_HREF_PREFIX,
30
43
  SOURCEMAP_MAX_FILES_PER_UPLOAD,
31
44
  SOURCEMAP_MAX_FILE_BYTES,
32
45
  VIDEO_ATTRS,
@@ -35,6 +48,7 @@ import {
35
48
  clamp,
36
49
  compare,
37
50
  compareVersions,
51
+ complaintReference,
38
52
  describeRule,
39
53
  emptyRuleGroup,
40
54
  evaluateRule,
@@ -46,6 +60,7 @@ import {
46
60
  getPath,
47
61
  guidePlatforms,
48
62
  guidelyIdFromSelector,
63
+ hasVideoMedia,
49
64
  isAllowedEmbedSrc,
50
65
  isArticleListed,
51
66
  isChecklistComplete,
@@ -58,6 +73,7 @@ import {
58
73
  isVideoContentType,
59
74
  matchUrlPattern,
60
75
  matchesAudiences,
76
+ matchesHelpQuery,
61
77
  mediaKind,
62
78
  mediaMaxBytes,
63
79
  normalizeErrorMessage,
@@ -71,12 +87,18 @@ import {
71
87
  safeRegExp,
72
88
  sanitizeProperties,
73
89
  screenPath,
90
+ servedArticleAudiences,
91
+ showMeHref,
92
+ showMeKeyFromHref,
93
+ showMeKeys,
74
94
  slugify,
75
95
  stripOrigin,
76
96
  supportsPlatform,
77
97
  toEmbedUrl,
78
- visibleArticleIds
79
- } from "./chunk-OLWGMDRX.js";
98
+ visibleArticleIds,
99
+ visitorAudiences,
100
+ withVisibility
101
+ } from "./chunk-UW6NRYRY.js";
80
102
 
81
103
  // src/targeting.ts
82
104
  import { z } from "zod";
@@ -222,7 +244,7 @@ var ChecklistTaskSchema = z2.object({
222
244
  required: z2.boolean().default(true)
223
245
  });
224
246
  var ChecklistConfigSchema = z2.object({
225
- tasks: z2.array(ChecklistTaskSchema).min(1).max(30),
247
+ tasks: z2.array(ChecklistTaskSchema).min(1),
226
248
  ordered: z2.boolean().default(false),
227
249
  launcherLabel: z2.string().max(60).default("Getting started"),
228
250
  position: z2.enum(["bottom-right", "bottom-left"]).default("bottom-right"),
@@ -256,6 +278,8 @@ var SurveyConfigSchema = z2.object({
256
278
  });
257
279
  var GuideConfigSchema = z2.object({
258
280
  steps: z2.array(StepSchema).max(50).default([]),
281
+ /** Everyone, only identified (logged-in) users, or only anonymous visitors; applied on top of `targeting`. */
282
+ visibility: z2.enum(GUIDE_VISIBILITIES).default("everyone"),
259
283
  targeting: RuleGroupSchema.default(() => emptyRuleGroup()),
260
284
  trigger: TriggerSchema.default({}),
261
285
  frequency: FrequencySchema.default({}),
@@ -495,19 +519,40 @@ var ConversationRatingSchema = z5.object({
495
519
  comment: z5.string().max(1e3).optional()
496
520
  });
497
521
 
498
- // src/capture.ts
522
+ // src/complaints.ts
499
523
  import { z as z6 } from "zod";
500
- var AutocaptureSettingsSchema = z6.object({ pageviews: z6.boolean(), pageLeave: z6.boolean(), clicks: z6.boolean(), rageClicks: z6.boolean(), heatmaps: z6.boolean(), mouseMovement: z6.boolean() }).partial();
501
- var ErrorTrackingSettingsSchema = z6.object({ enabled: z6.boolean() }).partial();
502
- var ReplaySettingsSchema = z6.object({
503
- enabled: z6.boolean(),
504
- sampleRate: z6.number().int().min(0).max(100),
505
- recordConsole: z6.boolean(),
506
- recordNetwork: z6.boolean(),
507
- recordNetworkPayloads: z6.boolean(),
508
- maskAllText: z6.boolean(),
509
- blockSelectors: z6.array(z6.string().min(1).max(200)).max(50),
510
- retentionDays: z6.number().int().min(1).max(365)
524
+ var FileComplaintSchema = z6.object({
525
+ anonymousId: z6.string().min(1).max(128),
526
+ userId: z6.string().max(256).optional().nullable(),
527
+ categoryId: z6.string().min(1).max(64),
528
+ description: z6.string().trim().min(1).max(MAX_COMPLAINT_LENGTH),
529
+ /** Answers to the category's extra questions, by field id. */
530
+ answers: z6.record(z6.string().max(64), z6.string().trim().max(MAX_COMPLAINT_ANSWER_LENGTH)).default({}),
531
+ /** Required from visitors the app hasn't identified. */
532
+ email: z6.string().trim().toLowerCase().email().max(254).optional().nullable(),
533
+ pageUrl: z6.string().max(2e3).optional(),
534
+ /** File it in this conversation (send its token in `X-Guidely-Conversation`); otherwise a new one is started. */
535
+ conversationId: z6.string().min(1).max(64).optional().nullable(),
536
+ /** One screenshot, base64-encoded (png, jpeg, webp or gif). */
537
+ attachment: z6.object({
538
+ fileName: z6.string().trim().min(1).max(200),
539
+ data: z6.string().max(Math.ceil(MAX_COMPLAINT_ATTACHMENT_BYTES * 4 / 3) + 4)
540
+ }).optional().nullable()
541
+ });
542
+
543
+ // src/capture.ts
544
+ import { z as z7 } from "zod";
545
+ var AutocaptureSettingsSchema = z7.object({ pageviews: z7.boolean(), pageLeave: z7.boolean(), clicks: z7.boolean(), rageClicks: z7.boolean(), heatmaps: z7.boolean(), mouseMovement: z7.boolean() }).partial();
546
+ var ErrorTrackingSettingsSchema = z7.object({ enabled: z7.boolean() }).partial();
547
+ var ReplaySettingsSchema = z7.object({
548
+ enabled: z7.boolean(),
549
+ sampleRate: z7.number().int().min(0).max(100),
550
+ recordConsole: z7.boolean(),
551
+ recordNetwork: z7.boolean(),
552
+ recordNetworkPayloads: z7.boolean(),
553
+ maskAllText: z7.boolean(),
554
+ blockSelectors: z7.array(z7.string().min(1).max(200)).max(50),
555
+ retentionDays: z7.number().int().min(1).max(365)
511
556
  }).partial();
512
557
  var DEFAULT_CAPTURE_SETTINGS = {
513
558
  autocapture: { pageviews: true, pageLeave: true, clicks: true, rageClicks: true, heatmaps: true, mouseMovement: true },
@@ -528,18 +573,18 @@ function resolveCaptureSettings(settings) {
528
573
  };
529
574
  }
530
575
  var HEATMAP_VIEWPORTS = { mobile: [0, 767], tablet: [768, 1279], desktop: [1280, 1e5] };
531
- var ReplayChunkSchema = z6.object({
532
- sessionId: z6.string().min(1).max(128),
533
- windowId: z6.string().min(1).max(64),
534
- seq: z6.number().int().min(0).max(1e6),
535
- anonymousId: z6.string().min(1).max(128),
536
- userId: z6.string().max(256).optional().nullable(),
576
+ var ReplayChunkSchema = z7.object({
577
+ sessionId: z7.string().min(1).max(128),
578
+ windowId: z7.string().min(1).max(64),
579
+ seq: z7.number().int().min(0).max(1e6),
580
+ anonymousId: z7.string().min(1).max(128),
581
+ userId: z7.string().max(256).optional().nullable(),
537
582
  /** rrweb `eventWithTime` objects, in order. */
538
- events: z6.array(z6.object({ type: z6.number().int(), timestamp: z6.number() }).passthrough()).min(1).max(5e4),
539
- url: z6.string().max(2e3).optional(),
540
- device: z6.object({ type: z6.string().max(20), browser: z6.string().max(40).optional(), os: z6.string().max(40).optional() }).optional(),
541
- viewport: z6.object({ width: z6.number().int().min(0).max(1e5), height: z6.number().int().min(0).max(1e5) }).optional(),
542
- sdk: z6.object({ name: z6.string().max(60), version: z6.string().max(30) }).optional()
583
+ events: z7.array(z7.object({ type: z7.number().int(), timestamp: z7.number() }).passthrough()).min(1).max(5e4),
584
+ url: z7.string().max(2e3).optional(),
585
+ device: z7.object({ type: z7.string().max(20), browser: z7.string().max(40).optional(), os: z7.string().max(40).optional() }).optional(),
586
+ viewport: z7.object({ width: z7.number().int().min(0).max(1e5), height: z7.number().int().min(0).max(1e5) }).optional(),
587
+ sdk: z7.object({ name: z7.string().max(60), version: z7.string().max(30) }).optional()
543
588
  });
544
589
  var REPLAY_MAX_COMPRESSED_BYTES = 2 * 1024 * 1024;
545
590
  var REPLAY_MAX_RAW_BYTES = 16 * 1024 * 1024;
@@ -723,39 +768,39 @@ function templateConfig(id) {
723
768
  }
724
769
 
725
770
  // src/howto.ts
726
- import { z as z7 } from "zod";
771
+ import { z as z8 } from "zod";
727
772
  var HOWTO_STEP_KINDS = ["action", "text", "heading", "tip", "alert"];
728
773
  var HOWTO_ACTIONS = ["click", "type", "select", "navigate"];
729
- var NormalizedRectSchema = z7.object({
730
- x: z7.number().min(0).max(1),
731
- y: z7.number().min(0).max(1),
732
- width: z7.number().min(0).max(1),
733
- height: z7.number().min(0).max(1)
774
+ var NormalizedRectSchema = z8.object({
775
+ x: z8.number().min(0).max(1),
776
+ y: z8.number().min(0).max(1),
777
+ width: z8.number().min(0).max(1),
778
+ height: z8.number().min(0).max(1)
734
779
  });
735
- var CapturedElementSchema = z7.object({
780
+ var CapturedElementSchema = z8.object({
736
781
  /** Visible name: aria-label, associated label, text, placeholder, alt or title. */
737
- label: z7.string().max(200).default(""),
782
+ label: z8.string().max(200).default(""),
738
783
  /** button, link, tab, menuitem, checkbox, radio, field, dropdown, option, element… */
739
- role: z7.string().max(40).default("element"),
740
- tag: z7.string().max(40).default("")
784
+ role: z8.string().max(40).default("element"),
785
+ tag: z8.string().max(40).default("")
741
786
  });
742
- var CaptureStepSchema = z7.object({
787
+ var CaptureStepSchema = z8.object({
743
788
  /** Random id from the SDK; a retried upload with the same id is stored once. */
744
- clientId: z7.string().min(1).max(64),
745
- action: z7.enum(HOWTO_ACTIONS),
746
- url: z7.string().max(2e3),
747
- pageTitle: z7.string().max(300).default(""),
789
+ clientId: z8.string().min(1).max(64),
790
+ action: z8.enum(HOWTO_ACTIONS),
791
+ url: z8.string().max(2e3),
792
+ pageTitle: z8.string().max(300).default(""),
748
793
  element: CapturedElementSchema.optional(),
749
794
  /** Typed text or chosen option; absent when it was sensitive (`valueRedacted`). */
750
- value: z7.string().max(200).optional(),
751
- valueRedacted: z7.boolean().default(false),
795
+ value: z8.string().max(200).optional(),
796
+ valueRedacted: z8.boolean().default(false),
752
797
  /** Selectors for the element, so the step can later become an interactive tour step. */
753
- selectors: z7.array(SelectorStrategySchema).max(10).default([]),
798
+ selectors: z8.array(SelectorStrategySchema).max(10).default([]),
754
799
  /** Where the element sits in the screenshot. */
755
800
  highlight: NormalizedRectSchema.optional(),
756
801
  /** Number of regions the SDK blurred in the screenshot before upload. */
757
- redactions: z7.number().int().min(0).max(1e3).default(0),
758
- occurredAt: z7.string().datetime().optional()
802
+ redactions: z8.number().int().min(0).max(1e3).default(0),
803
+ occurredAt: z8.string().datetime().optional()
759
804
  });
760
805
  function quoted(s) {
761
806
  const t = (s ?? "").replace(/\s+/g, " ").trim();
@@ -826,21 +871,55 @@ function hostAndPath(url) {
826
871
  return url.slice(0, 80);
827
872
  }
828
873
  }
829
- var NormalizedPointSchema = z7.object({ x: z7.number().min(0).max(1), y: z7.number().min(0).max(1) });
874
+ var NormalizedPointSchema = z8.object({ x: z8.number().min(0).max(1), y: z8.number().min(0).max(1) });
830
875
  var ANNOTATION_COLORS = ["brand", "red", "amber", "green", "black", "white"];
831
- var HowToAnnotationSchema = z7.discriminatedUnion("type", [
832
- z7.object({ id: z7.string().min(1).max(32), type: z7.literal("arrow"), from: NormalizedPointSchema, to: NormalizedPointSchema, color: z7.enum(ANNOTATION_COLORS).default("brand") }),
833
- z7.object({ id: z7.string().min(1).max(32), type: z7.literal("text"), at: NormalizedPointSchema, text: z7.string().trim().min(1).max(120), color: z7.enum(ANNOTATION_COLORS).default("brand") }),
834
- z7.object({ id: z7.string().min(1).max(32), type: z7.literal("box"), rect: NormalizedRectSchema, color: z7.enum(ANNOTATION_COLORS).default("brand") })
876
+ var HowToAnnotationSchema = z8.discriminatedUnion("type", [
877
+ z8.object({ id: z8.string().min(1).max(32), type: z8.literal("arrow"), from: NormalizedPointSchema, to: NormalizedPointSchema, color: z8.enum(ANNOTATION_COLORS).default("brand") }),
878
+ z8.object({ id: z8.string().min(1).max(32), type: z8.literal("text"), at: NormalizedPointSchema, text: z8.string().trim().min(1).max(120), color: z8.enum(ANNOTATION_COLORS).default("brand") }),
879
+ z8.object({ id: z8.string().min(1).max(32), type: z8.literal("box"), rect: NormalizedRectSchema, color: z8.enum(ANNOTATION_COLORS).default("brand") })
835
880
  ]);
836
881
  var MAX_ANNOTATIONS = 30;
837
882
 
883
+ // src/snippet.ts
884
+ var SCRIPT_STUB_METHODS = [
885
+ "identify",
886
+ "track",
887
+ "page",
888
+ "reset",
889
+ "setAccount",
890
+ "updateTraits",
891
+ "setConsent",
892
+ "startGuide",
893
+ "stopGuide",
894
+ "dismissGuide",
895
+ "openMessenger",
896
+ "closeMessenger",
897
+ "showNewMessage",
898
+ "openResourceCenter",
899
+ "closeResourceCenter",
900
+ "openChecklist",
901
+ "closeChecklist",
902
+ "completeChecklistTask",
903
+ "openComplaint",
904
+ "captureException",
905
+ "on"
906
+ ];
907
+ var SCRIPT_STUB = `!function(w){if(w.Guidely)return;var g=w.Guidely={_q:[]},c=g._c={};function q(o,k){o[k]=function(){g._q.push([o===c?1:0,k,[].slice.call(arguments)])}}q(g,"init");"${SCRIPT_STUB_METHODS.join(" ")}".split(" ").forEach(function(k){q(c,k)});c.isFeatureEnabled=function(k,f){return!!f};c.getFeatureValue=function(k,f){return f};g.get=function(){return c}}(window);`;
908
+ function scriptSnippet(scriptUrl, initOptions) {
909
+ return `<script>
910
+ ${SCRIPT_STUB}
911
+ Guidely.init(${initOptions});
912
+ </script>
913
+ <script src="${scriptUrl}" async></script>`;
914
+ }
915
+
838
916
  // src/index.ts
839
917
  var SDK_API_VERSION = "v1";
840
- var SHARED_VERSION = "0.8.0";
918
+ var SHARED_VERSION = "0.10.0";
841
919
  export {
842
920
  ADVANCE_ON,
843
921
  ANNOTATION_COLORS,
922
+ ARTICLE_VISIBILITIES,
844
923
  AUTOCAPTURE_EVENTS,
845
924
  AppearanceSchema,
846
925
  AuthoringPickSchema,
@@ -849,6 +928,9 @@ export {
849
928
  ButtonSchema,
850
929
  CAPTURE_PARAM,
851
930
  CAPTURE_SCREENSHOT_MAX_BYTES,
931
+ COMPLAINT_EVENTS,
932
+ COMPLAINT_FIELD_TYPES,
933
+ COMPLAINT_STATUSES,
852
934
  CaptureStepSchema,
853
935
  CapturedElementSchema,
854
936
  ChecklistConfigSchema,
@@ -863,12 +945,14 @@ export {
863
945
  ErrorTrackingSettingsSchema,
864
946
  EventBatchSchema,
865
947
  FILE_LINK_CLASS,
948
+ FileComplaintSchema,
866
949
  FrequencySchema,
867
950
  GUIDELY_ID_ATTRIBUTE,
868
951
  GUIDE_KINDS,
869
952
  GUIDE_LIFECYCLE_EVENTS,
870
953
  GUIDE_STATUSES,
871
954
  GUIDE_TEMPLATES,
955
+ GUIDE_VISIBILITIES,
872
956
  GuideConfigSchema,
873
957
  GuideStateUpdateSchema,
874
958
  HEATMAP_VIEWPORTS,
@@ -876,8 +960,14 @@ export {
876
960
  HOWTO_STEP_KINDS,
877
961
  HowToAnnotationSchema,
878
962
  IdentifyRequestSchema,
963
+ LOGGED_IN_AUDIENCE,
879
964
  MAX_ANNOTATIONS,
880
965
  MAX_COLLECTION_DEPTH,
966
+ MAX_COMPLAINT_ANSWER_LENGTH,
967
+ MAX_COMPLAINT_ATTACHMENT_BYTES,
968
+ MAX_COMPLAINT_CHOICES,
969
+ MAX_COMPLAINT_FIELDS,
970
+ MAX_COMPLAINT_LENGTH,
881
971
  MAX_MESSAGE_LENGTH,
882
972
  MAX_PROPERTY_BYTES,
883
973
  MAX_STACK_FRAMES,
@@ -911,6 +1001,8 @@ export {
911
1001
  ReplaySettingsSchema,
912
1002
  RuleGroupSchema,
913
1003
  RuleSchema,
1004
+ SCRIPT_STUB,
1005
+ SCRIPT_STUB_METHODS,
914
1006
  SDK_API_VERSION,
915
1007
  SELECTOR_KINDS,
916
1008
  SENSITIVE_HEADER_PATTERN,
@@ -918,6 +1010,8 @@ export {
918
1010
  SENSITIVE_PROPERTY_PATTERN,
919
1011
  SERVER_ASSISTED_FIELDS,
920
1012
  SHARED_VERSION,
1013
+ SHOW_ME_CLASS,
1014
+ SHOW_ME_HREF_PREFIX,
921
1015
  SOURCEMAP_MAX_FILES_PER_UPLOAD,
922
1016
  SOURCEMAP_MAX_FILE_BYTES,
923
1017
  STATUS_LEVELS,
@@ -941,6 +1035,7 @@ export {
941
1035
  cleanLabel,
942
1036
  compare,
943
1037
  compareVersions,
1038
+ complaintReference,
944
1039
  defaultGuideConfig,
945
1040
  defaultStep,
946
1041
  describeCaptureStep,
@@ -955,6 +1050,7 @@ export {
955
1050
  getPath,
956
1051
  guidePlatforms,
957
1052
  guidelyIdFromSelector,
1053
+ hasVideoMedia,
958
1054
  isAllowedEmbedSrc,
959
1055
  isArticleListed,
960
1056
  isChecklistComplete,
@@ -967,6 +1063,7 @@ export {
967
1063
  isVideoContentType,
968
1064
  matchUrlPattern,
969
1065
  matchesAudiences,
1066
+ matchesHelpQuery,
970
1067
  mediaKind,
971
1068
  mediaMaxBytes,
972
1069
  normalizeErrorMessage,
@@ -982,6 +1079,11 @@ export {
982
1079
  safeRegExp,
983
1080
  sanitizeProperties,
984
1081
  screenPath,
1082
+ scriptSnippet,
1083
+ servedArticleAudiences,
1084
+ showMeHref,
1085
+ showMeKeyFromHref,
1086
+ showMeKeys,
985
1087
  slugify,
986
1088
  stripOrigin,
987
1089
  supportsPlatform,
@@ -989,6 +1091,8 @@ export {
989
1091
  toEmbedUrl,
990
1092
  validateGuideConfig,
991
1093
  visibleArticleIds,
992
- visibleButtons
1094
+ visibleButtons,
1095
+ visitorAudiences,
1096
+ withVisibility
993
1097
  };
994
1098
  //# sourceMappingURL=index.js.map