@redrockswebdevelopment/formstack-form-testing 0.1.12 → 0.1.13

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,69 @@
1
+ import type { LiveFormFieldProbeTarget } from "./effects.js";
2
+ export interface FormstackIframeBridgeMessage<Payload = unknown> {
3
+ readonly channel: string;
4
+ readonly requestId: string;
5
+ readonly type: string;
6
+ readonly payload?: Payload;
7
+ }
8
+ export interface FormstackIframeBridgeResponse<Payload = unknown> extends FormstackIframeBridgeMessage<Payload> {
9
+ readonly ok: boolean;
10
+ readonly error?: string;
11
+ }
12
+ export interface FormstackIframeBridgeClientOptions {
13
+ readonly channel: string;
14
+ readonly targetOrigin: string;
15
+ readonly iframe?: HTMLIFrameElement;
16
+ readonly iframeSelector?: string;
17
+ readonly allowedOrigins?: readonly string[];
18
+ readonly timeoutMs?: number;
19
+ readonly windowObject?: Window;
20
+ }
21
+ export interface FormstackIframeBridgeRequestOptions<Payload = unknown> {
22
+ readonly type: string;
23
+ readonly payload?: Payload;
24
+ readonly requestId?: string;
25
+ readonly responseType?: string;
26
+ readonly timeoutMs?: number;
27
+ }
28
+ export interface FormstackIframeBridgeClient {
29
+ request<Payload = unknown, ResponsePayload = unknown>(options: FormstackIframeBridgeRequestOptions<Payload>): Promise<FormstackIframeBridgeResponse<ResponsePayload>>;
30
+ prefill<Payload = unknown, ResponsePayload = unknown>(payload: Payload, options?: Omit<FormstackIframeBridgeRequestOptions<Payload>, "type" | "payload">): Promise<FormstackIframeBridgeResponse<ResponsePayload>>;
31
+ dispose(): void;
32
+ }
33
+ export interface FormstackIframeBridgeHandlerContext<Payload = unknown> {
34
+ readonly event: MessageEvent;
35
+ readonly message: FormstackIframeBridgeMessage<Payload>;
36
+ reply<ResponsePayload = unknown>(payload?: ResponsePayload): void;
37
+ }
38
+ export type FormstackIframeBridgeHandler<Payload = unknown> = (context: FormstackIframeBridgeHandlerContext<Payload>) => Promise<unknown> | unknown;
39
+ export interface FormstackIframeBridgeServerOptions {
40
+ readonly channel: string;
41
+ readonly allowedOrigins?: readonly string[];
42
+ readonly responseOrigin?: string;
43
+ readonly handlers: Record<string, FormstackIframeBridgeHandler>;
44
+ readonly windowObject?: Window;
45
+ }
46
+ export interface FormstackIframeBridgeServer {
47
+ dispose(): void;
48
+ }
49
+ export interface LiveFormBridgeFieldWriter {
50
+ writeField(target: LiveFormFieldProbeTarget, value: unknown, options?: {
51
+ readonly suppressEffects?: boolean;
52
+ readonly source?: string;
53
+ readonly transactionId?: string;
54
+ }): Promise<void>;
55
+ }
56
+ export interface CreateLiveFormPrefillBridgeHandlerOptions {
57
+ readonly fields: Record<string, LiveFormFieldProbeTarget>;
58
+ readonly writer: LiveFormBridgeFieldWriter;
59
+ readonly suppressEffects?: boolean;
60
+ readonly source?: string;
61
+ }
62
+ export interface LiveFormPrefillBridgeResult {
63
+ readonly updated: readonly string[];
64
+ readonly skipped: readonly string[];
65
+ }
66
+ export declare function createFormstackIframeBridgeClient(options: FormstackIframeBridgeClientOptions): FormstackIframeBridgeClient;
67
+ export declare function createFormstackIframeBridgeServer(options: FormstackIframeBridgeServerOptions): FormstackIframeBridgeServer;
68
+ export declare function createLiveFormPrefillBridgeHandler(options: CreateLiveFormPrefillBridgeHandlerOptions): FormstackIframeBridgeHandler<Record<string, unknown>>;
69
+ //# sourceMappingURL=iframe-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe-bridge.d.ts","sourceRoot":"","sources":["../src/iframe-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ function createRequestId(prefix = "fspt-iframe") {
2
+ return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
3
+ }
4
+ function getWindow(windowObject) {
5
+ const win = windowObject ?? globalThis.window;
6
+ if (!win)
7
+ throw new Error("A browser window is required for iframe bridge helpers.");
8
+ return win;
9
+ }
10
+ function resolveIframe(win, options) {
11
+ const iframe = options.iframe ?? (options.iframeSelector ? win.document.querySelector(options.iframeSelector) : null);
12
+ if (!iframe || !("contentWindow" in iframe) || !iframe.contentWindow) {
13
+ throw new Error(`Unable to resolve iframe${options.iframeSelector ? ` "${options.iframeSelector}"` : ""}.`);
14
+ }
15
+ return iframe;
16
+ }
17
+ function isBridgeMessage(value) {
18
+ return Boolean(value &&
19
+ typeof value === "object" &&
20
+ typeof Reflect.get(value, "channel") === "string" &&
21
+ typeof Reflect.get(value, "requestId") === "string" &&
22
+ typeof Reflect.get(value, "type") === "string");
23
+ }
24
+ export function createFormstackIframeBridgeClient(options) {
25
+ const win = getWindow(options.windowObject);
26
+ const pending = new Map();
27
+ const listener = (event) => {
28
+ if (options.allowedOrigins?.length && !options.allowedOrigins.includes(event.origin))
29
+ return;
30
+ if (!isBridgeMessage(event.data))
31
+ return;
32
+ if (event.data.channel !== options.channel)
33
+ return;
34
+ const pendingRequest = pending.get(event.data.requestId);
35
+ if (!pendingRequest || event.data.type !== pendingRequest.responseType)
36
+ return;
37
+ win.clearTimeout(pendingRequest.timeoutId);
38
+ pending.delete(event.data.requestId);
39
+ pendingRequest.resolve(event.data);
40
+ };
41
+ win.addEventListener("message", listener);
42
+ const request = async (requestOptions) => {
43
+ const iframe = resolveIframe(win, options);
44
+ const requestId = requestOptions.requestId ?? createRequestId();
45
+ const responseType = requestOptions.responseType ?? `${requestOptions.type}:response`;
46
+ const message = {
47
+ channel: options.channel,
48
+ requestId,
49
+ type: requestOptions.type,
50
+ ...(requestOptions.payload === undefined ? {} : { payload: requestOptions.payload }),
51
+ };
52
+ return await new Promise((resolve, reject) => {
53
+ const timeoutId = win.setTimeout(() => {
54
+ pending.delete(requestId);
55
+ reject(new Error(`Timed out waiting for iframe bridge response "${responseType}" for request "${requestId}".`));
56
+ }, requestOptions.timeoutMs ?? options.timeoutMs ?? 5_000);
57
+ pending.set(requestId, { responseType, resolve: resolve, reject, timeoutId });
58
+ iframe.contentWindow?.postMessage(message, options.targetOrigin);
59
+ });
60
+ };
61
+ return {
62
+ request,
63
+ prefill: (payload, requestOptions = {}) => {
64
+ return request({
65
+ ...requestOptions,
66
+ type: "prefill",
67
+ responseType: requestOptions.responseType ?? "prefill:response",
68
+ payload,
69
+ });
70
+ },
71
+ dispose: () => {
72
+ win.removeEventListener("message", listener);
73
+ for (const [requestId, pendingRequest] of pending) {
74
+ win.clearTimeout(pendingRequest.timeoutId);
75
+ pendingRequest.reject(new Error(`Iframe bridge client disposed before response for request "${requestId}".`));
76
+ }
77
+ pending.clear();
78
+ },
79
+ };
80
+ }
81
+ export function createFormstackIframeBridgeServer(options) {
82
+ const win = getWindow(options.windowObject);
83
+ const listener = async (event) => {
84
+ if (options.allowedOrigins?.length && !options.allowedOrigins.includes(event.origin))
85
+ return;
86
+ if (!isBridgeMessage(event.data))
87
+ return;
88
+ if (event.data.channel !== options.channel)
89
+ return;
90
+ const handler = options.handlers[event.data.type];
91
+ if (!handler)
92
+ return;
93
+ const reply = (response) => {
94
+ const message = {
95
+ channel: options.channel,
96
+ requestId: event.data.requestId,
97
+ type: response.type ?? `${event.data.type}:response`,
98
+ ok: response.ok,
99
+ ...(response.payload === undefined ? {} : { payload: response.payload }),
100
+ ...(response.error === undefined ? {} : { error: response.error }),
101
+ };
102
+ const postMessage = event.source && "postMessage" in event.source ? event.source.postMessage : null;
103
+ if (typeof postMessage === "function")
104
+ Reflect.apply(postMessage, event.source, [message, options.responseOrigin ?? event.origin]);
105
+ };
106
+ try {
107
+ await handler({
108
+ event,
109
+ message: event.data,
110
+ reply: (payload) => reply({ ok: true, payload }),
111
+ });
112
+ }
113
+ catch (error) {
114
+ reply({ ok: false, error: error instanceof Error ? error.message : String(error) });
115
+ }
116
+ };
117
+ win.addEventListener("message", listener);
118
+ return {
119
+ dispose: () => win.removeEventListener("message", listener),
120
+ };
121
+ }
122
+ export function createLiveFormPrefillBridgeHandler(options) {
123
+ return async ({ message, reply }) => {
124
+ const payload = message.payload;
125
+ if (!payload || typeof payload !== "object") {
126
+ reply({ updated: [], skipped: Object.keys(options.fields) });
127
+ return;
128
+ }
129
+ const updated = [];
130
+ const skipped = [];
131
+ for (const [key, value] of Object.entries(payload)) {
132
+ const target = options.fields[key];
133
+ if (!target) {
134
+ skipped.push(key);
135
+ continue;
136
+ }
137
+ await options.writer.writeField(target, value, {
138
+ suppressEffects: options.suppressEffects ?? false,
139
+ source: options.source ?? "iframe-prefill",
140
+ transactionId: message.requestId,
141
+ });
142
+ updated.push(key);
143
+ }
144
+ reply({ updated, skipped });
145
+ };
146
+ }
147
+ //# sourceMappingURL=iframe-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe-bridge.js","sourceRoot":"","sources":["../src/iframe-bridge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redrockswebdevelopment/formstack-form-testing",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "description": "Playwright-compatible testing utilities for Formstack forms.",
6
6
  "main": "dist/index.js",
@@ -13,6 +13,10 @@
13
13
  "./effects": {
14
14
  "types": "./dist/effects.d.ts",
15
15
  "import": "./dist/effects.js"
16
+ },
17
+ "./iframe-bridge": {
18
+ "types": "./dist/iframe-bridge.d.ts",
19
+ "import": "./dist/iframe-bridge.js"
16
20
  }
17
21
  },
18
22
  "files": [