@getuserfeedback/protocol 3.0.2 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-commands.d.ts","sourceRoot":"","sources":["../src/core-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AA6J9B,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAInC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,129 @@
1
+ import * as z from "zod/mini";
2
+ import { appEventCustomerTrackSchema, appEventExternalIdSchema, appEventSystemTrackSchema, } from "./app-event.js";
3
+ import { ErrorEventSchema } from "./errors.js";
4
+ import { responseMetadataInputSchema } from "./response-metadata.js";
5
+ import { configureOptionsSchema, initOptionsSchema } from "./widget-config.js";
6
+ const flowHandleIdSchema = z.string().check(z.trim(), z.minLength(1));
7
+ const flowIdSchema = z.string().check(z.trim(), z.minLength(1));
8
+ const identifyTraitsSchema = z.record(z.string(), z.unknown());
9
+ const identifyOptionsSchema = z.strictObject({
10
+ externalIds: z.optional(z.array(appEventExternalIdSchema).check(z.maxLength(20))),
11
+ });
12
+ const identifyPayloadSchema = z.union([
13
+ z.strictObject({
14
+ kind: z.literal("identify"),
15
+ traits: identifyTraitsSchema,
16
+ options: z.optional(identifyOptionsSchema),
17
+ }),
18
+ z.strictObject({
19
+ kind: z.literal("identify"),
20
+ userId: z.string().check(z.trim(), z.minLength(1)),
21
+ traits: z.optional(identifyTraitsSchema),
22
+ options: z.optional(identifyOptionsSchema),
23
+ }),
24
+ ]);
25
+ const legacySystemTrackPayloadSchema = z.pipe(z.extend(appEventSystemTrackSchema, {
26
+ kind: z.literal("track"),
27
+ origin: z.optional(z.literal("system")),
28
+ }), z.transform(({ origin: _origin, ...rest }) => ({
29
+ ...rest,
30
+ origin: "system",
31
+ })));
32
+ const customerTrackPayloadSchema = z.extend(appEventCustomerTrackSchema, {
33
+ kind: z.literal("track"),
34
+ });
35
+ const trackPayloadSchema = z.union([
36
+ legacySystemTrackPayloadSchema,
37
+ customerTrackPayloadSchema,
38
+ ]);
39
+ const prefetchPayloadSchema = z.strictObject({
40
+ kind: z.literal("prefetch"),
41
+ flowId: flowIdSchema,
42
+ flowHandleId: z.optional(flowHandleIdSchema),
43
+ });
44
+ const openCorePayloadSchema = z.strictObject({
45
+ kind: z.literal("open"),
46
+ flowId: flowIdSchema,
47
+ flowHandleId: z.optional(flowHandleIdSchema),
48
+ metadata: z.optional(responseMetadataInputSchema),
49
+ hideCloseButton: z.optional(z.boolean()),
50
+ });
51
+ const prerenderCorePayloadSchema = z.strictObject({
52
+ kind: z.literal("prerender"),
53
+ flowId: flowIdSchema,
54
+ flowHandleId: z.optional(flowHandleIdSchema),
55
+ hideCloseButton: z.optional(z.boolean()),
56
+ });
57
+ const closeCorePayloadSchema = z.object({
58
+ kind: z.literal("close"),
59
+ flowHandleId: z.optional(flowHandleIdSchema),
60
+ reasonCode: z.optional(z.enum(["CLOSED", "RESET"])),
61
+ });
62
+ const hostContextUpdatedPayloadSchema = z.object({
63
+ kind: z.literal("hostContextUpdated"),
64
+ context: z.object({
65
+ url: z.string().check(z.url()),
66
+ env: z.optional(z.record(z.string(), z.string())),
67
+ storage: z.optional(z.record(z.string(), z.string())),
68
+ page: z.optional(z.object({
69
+ path: z.optional(z.string()),
70
+ referrer: z.optional(z.string()),
71
+ search: z.optional(z.string()),
72
+ })),
73
+ }),
74
+ });
75
+ const hostSignalPayloadSchema = z.object({
76
+ kind: z.literal("hostSignal"),
77
+ name: z.string(),
78
+ data: z.optional(z.unknown()),
79
+ });
80
+ const setTargetingPlanPayloadSchema = z.object({
81
+ kind: z.literal("setTargetingPlan"),
82
+ plan: z.object({
83
+ strategy: z.optional(z.enum(["firstMatch"])),
84
+ candidates: z.array(z.object({
85
+ action: z.enum(["open", "prefetch"]),
86
+ flowId: flowIdSchema,
87
+ rules: z.array(z.unknown()),
88
+ })),
89
+ }),
90
+ });
91
+ const telemetryPayloadSchema = z.object({
92
+ kind: z.literal("telemetry"),
93
+ name: z.string(),
94
+ props: z.optional(z.record(z.string(), z.unknown())),
95
+ });
96
+ const errorPayloadSchema = z.object({
97
+ kind: z.literal("error"),
98
+ event: ErrorEventSchema,
99
+ });
100
+ const configureCorePayloadSchema = z.object({
101
+ kind: z.literal("configure"),
102
+ opts: configureOptionsSchema,
103
+ });
104
+ const initCorePayloadSchema = z.strictObject({
105
+ kind: z.literal("init"),
106
+ opts: initOptionsSchema,
107
+ });
108
+ const resetPayloadSchema = z.object({
109
+ kind: z.literal("reset"),
110
+ });
111
+ const coreCommandPayloadWithoutIdentifySchema = z.discriminatedUnion("kind", [
112
+ openCorePayloadSchema,
113
+ prefetchPayloadSchema,
114
+ prerenderCorePayloadSchema,
115
+ hostContextUpdatedPayloadSchema,
116
+ hostSignalPayloadSchema,
117
+ setTargetingPlanPayloadSchema,
118
+ telemetryPayloadSchema,
119
+ configureCorePayloadSchema,
120
+ initCorePayloadSchema,
121
+ closeCorePayloadSchema,
122
+ resetPayloadSchema,
123
+ errorPayloadSchema,
124
+ ]);
125
+ export const coreCommandPayloadSchema = z.union([
126
+ coreCommandPayloadWithoutIdentifySchema,
127
+ identifyPayloadSchema,
128
+ trackPayloadSchema,
129
+ ]);
@@ -124,19 +124,19 @@ export declare const commandEnvelopeSchema: z.ZodMiniObject<{
124
124
  dark: "dark";
125
125
  }>]>>;
126
126
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
127
- pending: "pending";
128
127
  granted: "granted";
129
128
  denied: "denied";
129
+ pending: "pending";
130
130
  revoked: "revoked";
131
131
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
132
+ "functionality.storage": "functionality.storage";
133
+ "security.storage": "security.storage";
132
134
  "analytics.storage": "analytics.storage";
133
135
  "analytics.measurement": "analytics.measurement";
134
136
  "personalization.storage": "personalization.storage";
135
137
  "ads.storage": "ads.storage";
136
138
  "ads.user_data": "ads.user_data";
137
139
  "ads.personalization": "ads.personalization";
138
- "functionality.storage": "functionality.storage";
139
- "security.storage": "security.storage";
140
140
  }>>]>>;
141
141
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
142
142
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
@@ -167,19 +167,19 @@ export declare const commandEnvelopeSchema: z.ZodMiniObject<{
167
167
  disableTelemetry: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
168
168
  enableDebug: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
169
169
  defaultConsent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
170
- pending: "pending";
171
170
  granted: "granted";
172
171
  denied: "denied";
172
+ pending: "pending";
173
173
  revoked: "revoked";
174
174
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
175
+ "functionality.storage": "functionality.storage";
176
+ "security.storage": "security.storage";
175
177
  "analytics.storage": "analytics.storage";
176
178
  "analytics.measurement": "analytics.measurement";
177
179
  "personalization.storage": "personalization.storage";
178
180
  "ads.storage": "ads.storage";
179
181
  "ads.user_data": "ads.user_data";
180
182
  "ads.personalization": "ads.personalization";
181
- "functionality.storage": "functionality.storage";
182
- "security.storage": "security.storage";
183
183
  }>>]>>;
184
184
  clientMeta: z.ZodMiniOptional<z.ZodMiniObject<{
185
185
  loader: z.ZodMiniEnum<{
@@ -559,19 +559,19 @@ export declare const commandEnvelopeWithInstanceIdSchema: z.ZodMiniObject<{
559
559
  dark: "dark";
560
560
  }>]>>;
561
561
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
562
- pending: "pending";
563
562
  granted: "granted";
564
563
  denied: "denied";
564
+ pending: "pending";
565
565
  revoked: "revoked";
566
566
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
567
+ "functionality.storage": "functionality.storage";
568
+ "security.storage": "security.storage";
567
569
  "analytics.storage": "analytics.storage";
568
570
  "analytics.measurement": "analytics.measurement";
569
571
  "personalization.storage": "personalization.storage";
570
572
  "ads.storage": "ads.storage";
571
573
  "ads.user_data": "ads.user_data";
572
574
  "ads.personalization": "ads.personalization";
573
- "functionality.storage": "functionality.storage";
574
- "security.storage": "security.storage";
575
575
  }>>]>>;
576
576
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
577
577
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
@@ -602,19 +602,19 @@ export declare const commandEnvelopeWithInstanceIdSchema: z.ZodMiniObject<{
602
602
  disableTelemetry: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
603
603
  enableDebug: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
604
604
  defaultConsent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
605
- pending: "pending";
606
605
  granted: "granted";
607
606
  denied: "denied";
607
+ pending: "pending";
608
608
  revoked: "revoked";
609
609
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
610
+ "functionality.storage": "functionality.storage";
611
+ "security.storage": "security.storage";
610
612
  "analytics.storage": "analytics.storage";
611
613
  "analytics.measurement": "analytics.measurement";
612
614
  "personalization.storage": "personalization.storage";
613
615
  "ads.storage": "ads.storage";
614
616
  "ads.user_data": "ads.user_data";
615
617
  "ads.personalization": "ads.personalization";
616
- "functionality.storage": "functionality.storage";
617
- "security.storage": "security.storage";
618
618
  }>>]>>;
619
619
  clientMeta: z.ZodMiniOptional<z.ZodMiniObject<{
620
620
  loader: z.ZodMiniEnum<{
@@ -102,8 +102,8 @@ export declare const handleInvalidatedDetailSchema: z.ZodMiniObject<{
102
102
  handleId: z.ZodMiniString<string>;
103
103
  reasonCode: z.ZodMiniEnum<{
104
104
  INTERNAL: "INTERNAL";
105
- RESET: "RESET";
106
105
  CLOSED: "CLOSED";
106
+ RESET: "RESET";
107
107
  STALE_HANDLE: "STALE_HANDLE";
108
108
  OWNERSHIP_CONFLICT: "OWNERSHIP_CONFLICT";
109
109
  OWNER_DISPOSED: "OWNER_DISPOSED";
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { type AppEventCapability, type AppEventExternalId, type AppEventFlag, type AppEventJsonValue, type AppEventPayload, type AppEventTrackInput, appEventBaseSchema, appEventCapabilitySchema, appEventContextSchema, appEventCustomerTrackSchema, appEventExternalIdSchema, appEventFlagProviderSchema, appEventFlagSchema, appEventFlowDismissedSchema, appEventIdentitySchema, appEventIdentityTypeSchema, appEventPayloadSchema, appEventSurveyViewedSchema, appEventSystemBaseSchema, appEventSystemTrackSchema, appEventTrackSchema, reservedSystemAppEventNames, } from "./app-event.js";
2
2
  export { type ClientMeta, clientMetaSchema, } from "./client-meta.js";
3
+ export { type CommandContext, type CoreCommandEnvelope, coreCommandEnvelopeSchema, } from "./core-command-envelope.js";
4
+ export { type CoreCommandPayload, coreCommandPayloadSchema, } from "./core-commands.js";
3
5
  export { DEFAULT_AUTO_DETECT_COLOR_SCHEME_ATTRS } from "./defaults.js";
4
6
  export type { ErrorEvent, ProtocolErrorCode } from "./errors.js";
5
7
  export { ErrorCategory, ErrorCategorySchema, ErrorEventSchema, ProtocolError, } from "./errors.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  export { appEventBaseSchema, appEventCapabilitySchema, appEventContextSchema, appEventCustomerTrackSchema, appEventExternalIdSchema, appEventFlagProviderSchema, appEventFlagSchema, appEventFlowDismissedSchema, appEventIdentitySchema, appEventIdentityTypeSchema, appEventPayloadSchema, appEventSurveyViewedSchema, appEventSystemBaseSchema, appEventSystemTrackSchema, appEventTrackSchema, reservedSystemAppEventNames, } from "./app-event.js";
2
2
  export { clientMetaSchema, } from "./client-meta.js";
3
+ export { coreCommandEnvelopeSchema, } from "./core-command-envelope.js";
4
+ export { coreCommandPayloadSchema, } from "./core-commands.js";
3
5
  export { DEFAULT_AUTO_DETECT_COLOR_SCHEME_ATTRS } from "./defaults.js";
4
6
  export { ErrorCategory, ErrorCategorySchema, ErrorEventSchema, ProtocolError, } from "./errors.js";
5
7
  export { claimPendingFlowAssignmentsRequestSchema, claimPendingFlowAssignmentsResponseSchema, flowAssignmentRecipientRequestSchema, flowAssignmentRecordSchema, flowAssignmentStatusSchema, flowAssignmentTargetingContextSchema, listPendingFlowAssignmentsResponseSchema, nullableUpdateFlowAssignmentLifecycleResponseSchema, releaseFlowAssignmentClaimRequestSchema, releaseFlowAssignmentClaimResponseSchema, updateFlowAssignmentLifecycleRequestSchema, updateFlowAssignmentLifecycleResponseSchema, } from "./flow-assignments.js";
package/dist/scopes.d.ts CHANGED
@@ -10,14 +10,14 @@ export declare const SCOPE_IDS: readonly [
10
10
  "ads.personalization"
11
11
  ];
12
12
  export declare const scopeIdSchema: z.ZodMiniEnum<{
13
+ "functionality.storage": "functionality.storage";
14
+ "security.storage": "security.storage";
13
15
  "analytics.storage": "analytics.storage";
14
16
  "analytics.measurement": "analytics.measurement";
15
17
  "personalization.storage": "personalization.storage";
16
18
  "ads.storage": "ads.storage";
17
19
  "ads.user_data": "ads.user_data";
18
20
  "ads.personalization": "ads.personalization";
19
- "functionality.storage": "functionality.storage";
20
- "security.storage": "security.storage";
21
21
  }>;
22
22
  export type Scope = (typeof SCOPE_IDS)[number];
23
23
  export declare function isScope(value: unknown): value is Scope;
@@ -124,19 +124,19 @@ export declare const webViewCommandEnvelopeSchema: z.ZodMiniObject<{
124
124
  dark: "dark";
125
125
  }>]>>;
126
126
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
127
- pending: "pending";
128
127
  granted: "granted";
129
128
  denied: "denied";
129
+ pending: "pending";
130
130
  revoked: "revoked";
131
131
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
132
+ "functionality.storage": "functionality.storage";
133
+ "security.storage": "security.storage";
132
134
  "analytics.storage": "analytics.storage";
133
135
  "analytics.measurement": "analytics.measurement";
134
136
  "personalization.storage": "personalization.storage";
135
137
  "ads.storage": "ads.storage";
136
138
  "ads.user_data": "ads.user_data";
137
139
  "ads.personalization": "ads.personalization";
138
- "functionality.storage": "functionality.storage";
139
- "security.storage": "security.storage";
140
140
  }>>]>>;
141
141
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
142
142
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
@@ -167,19 +167,19 @@ export declare const webViewCommandEnvelopeSchema: z.ZodMiniObject<{
167
167
  disableTelemetry: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
168
168
  enableDebug: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
169
169
  defaultConsent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
170
- pending: "pending";
171
170
  granted: "granted";
172
171
  denied: "denied";
172
+ pending: "pending";
173
173
  revoked: "revoked";
174
174
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
175
+ "functionality.storage": "functionality.storage";
176
+ "security.storage": "security.storage";
175
177
  "analytics.storage": "analytics.storage";
176
178
  "analytics.measurement": "analytics.measurement";
177
179
  "personalization.storage": "personalization.storage";
178
180
  "ads.storage": "ads.storage";
179
181
  "ads.user_data": "ads.user_data";
180
182
  "ads.personalization": "ads.personalization";
181
- "functionality.storage": "functionality.storage";
182
- "security.storage": "security.storage";
183
183
  }>>]>>;
184
184
  clientMeta: z.ZodMiniOptional<z.ZodMiniObject<{
185
185
  loader: z.ZodMiniEnum<{
@@ -563,19 +563,19 @@ export declare const webViewTransportNativeMessageSchema: z.ZodMiniDiscriminated
563
563
  dark: "dark";
564
564
  }>]>>;
565
565
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
566
- pending: "pending";
567
566
  granted: "granted";
568
567
  denied: "denied";
568
+ pending: "pending";
569
569
  revoked: "revoked";
570
570
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
571
+ "functionality.storage": "functionality.storage";
572
+ "security.storage": "security.storage";
571
573
  "analytics.storage": "analytics.storage";
572
574
  "analytics.measurement": "analytics.measurement";
573
575
  "personalization.storage": "personalization.storage";
574
576
  "ads.storage": "ads.storage";
575
577
  "ads.user_data": "ads.user_data";
576
578
  "ads.personalization": "ads.personalization";
577
- "functionality.storage": "functionality.storage";
578
- "security.storage": "security.storage";
579
579
  }>>]>>;
580
580
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
581
581
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
@@ -606,19 +606,19 @@ export declare const webViewTransportNativeMessageSchema: z.ZodMiniDiscriminated
606
606
  disableTelemetry: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
607
607
  enableDebug: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
608
608
  defaultConsent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
609
- pending: "pending";
610
609
  granted: "granted";
611
610
  denied: "denied";
611
+ pending: "pending";
612
612
  revoked: "revoked";
613
613
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
614
+ "functionality.storage": "functionality.storage";
615
+ "security.storage": "security.storage";
614
616
  "analytics.storage": "analytics.storage";
615
617
  "analytics.measurement": "analytics.measurement";
616
618
  "personalization.storage": "personalization.storage";
617
619
  "ads.storage": "ads.storage";
618
620
  "ads.user_data": "ads.user_data";
619
621
  "ads.personalization": "ads.personalization";
620
- "functionality.storage": "functionality.storage";
621
- "security.storage": "security.storage";
622
622
  }>>]>>;
623
623
  clientMeta: z.ZodMiniOptional<z.ZodMiniObject<{
624
624
  loader: z.ZodMiniEnum<{
@@ -933,8 +933,8 @@ export declare const webViewTransportHostEventSchema: z.ZodMiniDiscriminatedUnio
933
933
  handleId: z.ZodMiniString<string>;
934
934
  reasonCode: z.ZodMiniEnum<{
935
935
  INTERNAL: "INTERNAL";
936
- RESET: "RESET";
937
936
  CLOSED: "CLOSED";
937
+ RESET: "RESET";
938
938
  STALE_HANDLE: "STALE_HANDLE";
939
939
  OWNERSHIP_CONFLICT: "OWNERSHIP_CONFLICT";
940
940
  OWNER_DISPOSED: "OWNER_DISPOSED";
@@ -1518,8 +1518,8 @@ export declare const webViewTransportWebMessageSchema: z.ZodMiniDiscriminatedUni
1518
1518
  handleId: z.ZodMiniString<string>;
1519
1519
  reasonCode: z.ZodMiniEnum<{
1520
1520
  INTERNAL: "INTERNAL";
1521
- RESET: "RESET";
1522
1521
  CLOSED: "CLOSED";
1522
+ RESET: "RESET";
1523
1523
  STALE_HANDLE: "STALE_HANDLE";
1524
1524
  OWNERSHIP_CONFLICT: "OWNERSHIP_CONFLICT";
1525
1525
  OWNER_DISPOSED: "OWNER_DISPOSED";
@@ -109,19 +109,19 @@ export declare const publicCommandPayloadSchema: z.ZodMiniUnion<readonly [z.ZodM
109
109
  dark: "dark";
110
110
  }>]>>;
111
111
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
112
- pending: "pending";
113
112
  granted: "granted";
114
113
  denied: "denied";
114
+ pending: "pending";
115
115
  revoked: "revoked";
116
116
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
117
+ "functionality.storage": "functionality.storage";
118
+ "security.storage": "security.storage";
117
119
  "analytics.storage": "analytics.storage";
118
120
  "analytics.measurement": "analytics.measurement";
119
121
  "personalization.storage": "personalization.storage";
120
122
  "ads.storage": "ads.storage";
121
123
  "ads.user_data": "ads.user_data";
122
124
  "ads.personalization": "ads.personalization";
123
- "functionality.storage": "functionality.storage";
124
- "security.storage": "security.storage";
125
125
  }>>]>>;
126
126
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
127
127
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
@@ -152,19 +152,19 @@ export declare const publicCommandPayloadSchema: z.ZodMiniUnion<readonly [z.ZodM
152
152
  disableTelemetry: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
153
153
  enableDebug: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
154
154
  defaultConsent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
155
- pending: "pending";
156
155
  granted: "granted";
157
156
  denied: "denied";
157
+ pending: "pending";
158
158
  revoked: "revoked";
159
159
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
160
+ "functionality.storage": "functionality.storage";
161
+ "security.storage": "security.storage";
160
162
  "analytics.storage": "analytics.storage";
161
163
  "analytics.measurement": "analytics.measurement";
162
164
  "personalization.storage": "personalization.storage";
163
165
  "ads.storage": "ads.storage";
164
166
  "ads.user_data": "ads.user_data";
165
167
  "ads.personalization": "ads.personalization";
166
- "functionality.storage": "functionality.storage";
167
- "security.storage": "security.storage";
168
168
  }>>]>>;
169
169
  clientMeta: z.ZodMiniOptional<z.ZodMiniObject<{
170
170
  loader: z.ZodMiniEnum<{
@@ -12,19 +12,19 @@ export declare const telemetryConfigInputSchema: z.ZodMiniObject<{
12
12
  }, z.core.$strip>;
13
13
  export type TelemetryConfigInput = z.output<typeof telemetryConfigInputSchema>;
14
14
  export declare const consentConfigInputSchema: z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
15
- pending: "pending";
16
15
  granted: "granted";
17
16
  denied: "denied";
17
+ pending: "pending";
18
18
  revoked: "revoked";
19
19
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
20
+ "functionality.storage": "functionality.storage";
21
+ "security.storage": "security.storage";
20
22
  "analytics.storage": "analytics.storage";
21
23
  "analytics.measurement": "analytics.measurement";
22
24
  "personalization.storage": "personalization.storage";
23
25
  "ads.storage": "ads.storage";
24
26
  "ads.user_data": "ads.user_data";
25
27
  "ads.personalization": "ads.personalization";
26
- "functionality.storage": "functionality.storage";
27
- "security.storage": "security.storage";
28
28
  }>>]>;
29
29
  export type ConsentConfigInput = z.output<typeof consentConfigInputSchema>;
30
30
  export declare const debugInputSchema: z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>;
@@ -149,19 +149,19 @@ export declare const configureOptionsSchema: z.ZodMiniObject<{
149
149
  dark: "dark";
150
150
  }>]>>;
151
151
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
152
- pending: "pending";
153
152
  granted: "granted";
154
153
  denied: "denied";
154
+ pending: "pending";
155
155
  revoked: "revoked";
156
156
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
157
+ "functionality.storage": "functionality.storage";
158
+ "security.storage": "security.storage";
157
159
  "analytics.storage": "analytics.storage";
158
160
  "analytics.measurement": "analytics.measurement";
159
161
  "personalization.storage": "personalization.storage";
160
162
  "ads.storage": "ads.storage";
161
163
  "ads.user_data": "ads.user_data";
162
164
  "ads.personalization": "ads.personalization";
163
- "functionality.storage": "functionality.storage";
164
- "security.storage": "security.storage";
165
165
  }>>]>>;
166
166
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
167
167
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
@@ -191,19 +191,19 @@ export declare const initOptionsSchema: z.ZodMiniObject<{
191
191
  disableTelemetry: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
192
192
  enableDebug: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>;
193
193
  defaultConsent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
194
- pending: "pending";
195
194
  granted: "granted";
196
195
  denied: "denied";
196
+ pending: "pending";
197
197
  revoked: "revoked";
198
198
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
199
+ "functionality.storage": "functionality.storage";
200
+ "security.storage": "security.storage";
199
201
  "analytics.storage": "analytics.storage";
200
202
  "analytics.measurement": "analytics.measurement";
201
203
  "personalization.storage": "personalization.storage";
202
204
  "ads.storage": "ads.storage";
203
205
  "ads.user_data": "ads.user_data";
204
206
  "ads.personalization": "ads.personalization";
205
- "functionality.storage": "functionality.storage";
206
- "security.storage": "security.storage";
207
207
  }>>]>>;
208
208
  clientMeta: z.ZodMiniOptional<z.ZodMiniObject<{
209
209
  loader: z.ZodMiniEnum<{
@@ -341,19 +341,19 @@ export declare const instanceUpdateableConfigSchema: z.ZodMiniObject<{
341
341
  dark: "dark";
342
342
  }>]>>;
343
343
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
344
- pending: "pending";
345
344
  granted: "granted";
346
345
  denied: "denied";
346
+ pending: "pending";
347
347
  revoked: "revoked";
348
348
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
349
+ "functionality.storage": "functionality.storage";
350
+ "security.storage": "security.storage";
349
351
  "analytics.storage": "analytics.storage";
350
352
  "analytics.measurement": "analytics.measurement";
351
353
  "personalization.storage": "personalization.storage";
352
354
  "ads.storage": "ads.storage";
353
355
  "ads.user_data": "ads.user_data";
354
356
  "ads.personalization": "ads.personalization";
355
- "functionality.storage": "functionality.storage";
356
- "security.storage": "security.storage";
357
357
  }>>]>>;
358
358
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
359
359
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
@@ -402,19 +402,19 @@ export declare const coreInstanceConfigSchema: z.ZodMiniObject<{
402
402
  disableTelemetry: z.ZodMiniDefault<z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>>;
403
403
  enableDebug: z.ZodMiniDefault<z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniBoolean<boolean>, z.ZodMiniString<string>, z.ZodMiniArray<z.ZodMiniString<string>>]>>>;
404
404
  consent: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
405
- pending: "pending";
406
405
  granted: "granted";
407
406
  denied: "denied";
407
+ pending: "pending";
408
408
  revoked: "revoked";
409
409
  }>, z.ZodMiniArray<z.ZodMiniEnum<{
410
+ "functionality.storage": "functionality.storage";
411
+ "security.storage": "security.storage";
410
412
  "analytics.storage": "analytics.storage";
411
413
  "analytics.measurement": "analytics.measurement";
412
414
  "personalization.storage": "personalization.storage";
413
415
  "ads.storage": "ads.storage";
414
416
  "ads.user_data": "ads.user_data";
415
417
  "ads.personalization": "ads.personalization";
416
- "functionality.storage": "functionality.storage";
417
- "security.storage": "security.storage";
418
418
  }>>]>>;
419
419
  auth: z.ZodMiniOptional<z.ZodMiniObject<{
420
420
  jwt: z.ZodMiniOptional<z.ZodMiniUnion<readonly [z.ZodMiniObject<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getuserfeedback/protocol",
3
- "version": "3.0.2",
3
+ "version": "3.0.3",
4
4
  "description": "getuserfeedback widget protocol — host surface and (later) wire protocol",
5
5
  "keywords": [
6
6
  "getuserfeedback",
@@ -0,0 +1,27 @@
1
+ import * as z from "zod/mini";
2
+ import { type ClientMeta, clientMetaSchema } from "./client-meta.js";
3
+ import { coreCommandPayloadSchema } from "./core-commands.js";
4
+
5
+ const requestIdSchema = z.string().check(z.trim(), z.minLength(1));
6
+ const idempotencyKeySchema = z.string().check(z.trim(), z.minLength(1));
7
+ const versionSchema = z.literal("1");
8
+
9
+ /** Loader -> core iframe command envelope (MessagePort transport). */
10
+ export const coreCommandEnvelopeSchema = z.object({
11
+ version: versionSchema,
12
+ instanceId: z.string().check(z.trim(), z.minLength(1)),
13
+ requestId: requestIdSchema,
14
+ idempotencyKey: idempotencyKeySchema,
15
+ clientMeta: z.optional(clientMetaSchema),
16
+ command: coreCommandPayloadSchema,
17
+ });
18
+
19
+ export type CoreCommandEnvelope = z.output<typeof coreCommandEnvelopeSchema>;
20
+
21
+ /** Context passed to core plugin handlers after envelope validation. */
22
+ export type CommandContext = {
23
+ instanceId: string;
24
+ requestId: string;
25
+ idempotencyKey: string;
26
+ clientMeta?: ClientMeta;
27
+ };