@usequeek/app-sdk 0.5.1 → 0.6.1

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.
Files changed (76) hide show
  1. package/README.md +179 -12
  2. package/dist/app-auth.d.ts +9 -1
  3. package/dist/app-auth.d.ts.map +1 -1
  4. package/dist/app-auth.js +11 -1
  5. package/dist/app-auth.js.map +1 -1
  6. package/dist/auth-fetch.d.ts +91 -0
  7. package/dist/auth-fetch.d.ts.map +1 -0
  8. package/dist/auth-fetch.js +263 -0
  9. package/dist/auth-fetch.js.map +1 -0
  10. package/dist/browser.d.ts +25 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +27 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/client.d.ts +32 -10
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +6 -2
  17. package/dist/client.js.map +1 -1
  18. package/dist/frame.d.ts +233 -4
  19. package/dist/frame.d.ts.map +1 -1
  20. package/dist/frame.js +694 -19
  21. package/dist/frame.js.map +1 -1
  22. package/dist/handoff.d.ts +32 -2
  23. package/dist/handoff.d.ts.map +1 -1
  24. package/dist/handoff.js +2 -1
  25. package/dist/handoff.js.map +1 -1
  26. package/dist/hono.d.ts +13 -0
  27. package/dist/hono.d.ts.map +1 -1
  28. package/dist/hono.js +15 -0
  29. package/dist/hono.js.map +1 -1
  30. package/dist/index.d.ts +11 -7
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +10 -6
  33. package/dist/index.js.map +1 -1
  34. package/dist/install-handlers.d.ts +33 -8
  35. package/dist/install-handlers.d.ts.map +1 -1
  36. package/dist/install-handlers.js +133 -15
  37. package/dist/install-handlers.js.map +1 -1
  38. package/dist/merchant-schema.d.ts +1550 -68
  39. package/dist/merchant-schema.d.ts.map +1 -1
  40. package/dist/merchant-schema.js +1 -1
  41. package/dist/proxy.d.ts +122 -0
  42. package/dist/proxy.d.ts.map +1 -0
  43. package/dist/proxy.js +204 -0
  44. package/dist/proxy.js.map +1 -0
  45. package/dist/react.d.ts +78 -0
  46. package/dist/react.d.ts.map +1 -0
  47. package/dist/react.js +262 -0
  48. package/dist/react.js.map +1 -0
  49. package/dist/scopes.d.ts +174 -0
  50. package/dist/scopes.d.ts.map +1 -0
  51. package/dist/scopes.js +297 -0
  52. package/dist/scopes.js.map +1 -0
  53. package/dist/server.d.ts +1 -1
  54. package/dist/server.js +1 -1
  55. package/dist/session.d.ts +17 -5
  56. package/dist/session.d.ts.map +1 -1
  57. package/dist/session.js +35 -16
  58. package/dist/session.js.map +1 -1
  59. package/dist/store.d.ts +33 -0
  60. package/dist/store.d.ts.map +1 -1
  61. package/dist/store.js +114 -4
  62. package/dist/store.js.map +1 -1
  63. package/dist/theme.d.ts +100 -0
  64. package/dist/theme.d.ts.map +1 -0
  65. package/dist/theme.js +162 -0
  66. package/dist/theme.js.map +1 -0
  67. package/dist/tokens.d.ts +30 -15
  68. package/dist/tokens.d.ts.map +1 -1
  69. package/dist/tokens.js +57 -19
  70. package/dist/tokens.js.map +1 -1
  71. package/dist/webhooks.d.ts.map +1 -1
  72. package/dist/webhooks.js +1 -1
  73. package/dist/webhooks.js.map +1 -1
  74. package/package.json +21 -5
  75. package/CHANGELOG.md +0 -162
  76. package/openapi/merchant.json +0 -21452
package/dist/frame.d.ts CHANGED
@@ -1,19 +1,86 @@
1
1
  /**
2
- * Framed-page handshake client (S4 stage 2): the browser-safe half of the
2
+ * Framed-page bridge client, v1 (U2): the browser-safe half of the
3
3
  * dashboard bridge. Carries NO secret and performs NO verification — it only
4
4
  * shapes and addresses messages. The dashboard (queek-merchant) enforces
5
5
  * origin+source binding and mints tokens; the app backend verifies them via
6
6
  * `./server` (`verifySessionToken`).
7
7
  *
8
+ * Byte-compatible with today's protocol (`ready`/`token`/`resize`/
9
+ * `resize-ack`/`ack`, sources `queek-app`/`queek-merchant`, exact-origin
10
+ * postMessage): v1 only ADDS optional fields and new message types, and both
11
+ * directions ignore unknown types.
12
+ *
8
13
  * DOM-free by design (structural minimal types): the app passes its own
9
14
  * window/parent in, so this module needs no DOM lib and stays import-safe
10
15
  * in edge runtimes.
11
16
  */
12
17
  export declare const DASHBOARD_SOURCE = "queek-merchant";
13
18
  export declare const APP_SOURCE = "queek-app";
19
+ /** Bridge protocol version this SDK speaks. */
20
+ export declare const BRIDGE_VERSION = "1";
21
+ /** Client-side length caps: every outbound string is truncated to its cap. */
22
+ export declare const MAX_HEADING_LENGTH = 200;
23
+ export declare const MAX_LABEL_LENGTH = 80;
24
+ export declare const MAX_ACTION_ID_LENGTH = 64;
25
+ export declare const MAX_TOAST_LENGTH = 500;
26
+ export declare const MAX_PATH_LENGTH = 2048;
27
+ export declare const MAX_TARGET_LENGTH = 2048;
28
+ export declare const MAX_LOCALE_LENGTH = 32;
29
+ export declare const MAX_SDK_VERSION_LENGTH = 32;
30
+ export declare const MAX_CAPABILITY_LENGTH = 64;
31
+ export declare const MAX_CAPABILITIES = 32;
32
+ export declare const MAX_SECONDARY_ACTIONS = 5;
33
+ export declare const MAX_SELECTION_IDS = 100;
34
+ export declare const MAX_SELECTION_ID_LENGTH = 128;
35
+ export declare const MAX_RESOURCE_TITLE_LENGTH = 300;
36
+ export declare const MAX_IMAGE_URL_LENGTH = 2048;
37
+ export declare const MAX_FILTER_LENGTH = 64;
38
+ export declare const MAX_TOAST_DURATION_MS = 10000;
39
+ export declare const MAX_RESIZE_HEIGHT = 10000;
40
+ /** Dashboard answers carry at most this many picked items; the rest is dropped. */
41
+ export declare const MAX_PICKED_ITEMS = 100;
42
+ /** Picker request ids are opaque correlation tokens, capped like action ids. */
43
+ export declare const MAX_REQUEST_ID_LENGTH = 64;
44
+ export type ThemeMode = "light" | "dark";
45
+ export type SaveBarState = "dirty" | "clean";
46
+ export type SaveBarAction = "save" | "discard";
47
+ export type ToastTone = "info" | "success" | "warning" | "critical";
48
+ export type TitleActionTone = "default" | "critical";
49
+ export interface TitleActionDef {
50
+ id: string;
51
+ label: string;
52
+ tone?: TitleActionTone;
53
+ }
54
+ export interface ResourceItem {
55
+ p_id: string;
56
+ title: string;
57
+ image?: string;
58
+ }
59
+ export interface PickResourceRequest {
60
+ resourceType: "product";
61
+ multiple?: boolean;
62
+ filter?: string;
63
+ selectionIds?: string[];
64
+ requestId?: string;
65
+ }
66
+ export interface BridgeTheme {
67
+ mode: ThemeMode;
68
+ locale?: string;
69
+ /**
70
+ * The dashboard's own capabilities (e.g. `["pick-resource"]`), declared on
71
+ * its handshake theme message. Absent on legacy dashboards — the app must
72
+ * then assume the v0 set (ready/token/resize only). Documented in README
73
+ * "Bridge handshake".
74
+ */
75
+ capabilities?: string[];
76
+ /** The dashboard's bridge version (`"1"`); absent on legacy dashboards. */
77
+ bridge?: string;
78
+ }
14
79
  export type AppOutboundMessage = {
15
80
  source: typeof APP_SOURCE;
16
81
  type: "ready";
82
+ capabilities?: string[];
83
+ sdkVersion?: string;
17
84
  } | {
18
85
  source: typeof APP_SOURCE;
19
86
  type: "resize";
@@ -21,6 +88,38 @@ export type AppOutboundMessage = {
21
88
  } | {
22
89
  source: typeof APP_SOURCE;
23
90
  type: "ack";
91
+ } | {
92
+ source: typeof APP_SOURCE;
93
+ type: "title";
94
+ heading: string;
95
+ primaryAction?: TitleActionDef;
96
+ secondaryActions?: TitleActionDef[];
97
+ } | {
98
+ source: typeof APP_SOURCE;
99
+ type: "toast";
100
+ message: string;
101
+ tone?: ToastTone;
102
+ durationMs?: number;
103
+ } | {
104
+ source: typeof APP_SOURCE;
105
+ type: "save-bar";
106
+ state: SaveBarState;
107
+ } | {
108
+ source: typeof APP_SOURCE;
109
+ type: "navigated";
110
+ path: string;
111
+ } | {
112
+ source: typeof APP_SOURCE;
113
+ type: "open";
114
+ target: string;
115
+ } | {
116
+ source: typeof APP_SOURCE;
117
+ type: "pick-resource";
118
+ resourceType: "product";
119
+ multiple?: boolean;
120
+ filter?: string;
121
+ selectionIds?: string[];
122
+ requestId?: string;
24
123
  };
25
124
  export type AppInboundMessage = {
26
125
  source: typeof DASHBOARD_SOURCE;
@@ -29,10 +128,40 @@ export type AppInboundMessage = {
29
128
  } | {
30
129
  source: typeof DASHBOARD_SOURCE;
31
130
  type: "resize-ack";
131
+ } | {
132
+ source: typeof DASHBOARD_SOURCE;
133
+ type: "theme";
134
+ mode: ThemeMode;
135
+ locale?: string;
136
+ capabilities?: string[];
137
+ bridge?: string;
138
+ } | {
139
+ source: typeof DASHBOARD_SOURCE;
140
+ type: "title-action";
141
+ id: string;
142
+ } | {
143
+ source: typeof DASHBOARD_SOURCE;
144
+ type: "save-bar-action";
145
+ action: SaveBarAction;
146
+ } | {
147
+ source: typeof DASHBOARD_SOURCE;
148
+ type: "navigate";
149
+ path: string;
150
+ } | {
151
+ source: typeof DASHBOARD_SOURCE;
152
+ type: "resource-picked";
153
+ items: ResourceItem[];
154
+ requestId?: string;
155
+ } | {
156
+ source: typeof DASHBOARD_SOURCE;
157
+ type: "resource-pick-cancelled";
158
+ requestId?: string;
32
159
  };
33
160
  export interface EmbedEvent {
34
161
  origin: string;
35
162
  data: unknown;
163
+ /** The sender window (`MessageEvent.source`); checked when `expectSource` is set. */
164
+ source?: unknown;
36
165
  }
37
166
  export interface EmbedEventTarget {
38
167
  addEventListener(type: "message", listener: (event: EmbedEvent) => void): void;
@@ -45,14 +174,114 @@ export interface FrameBridgeOptions {
45
174
  /** Exact dashboard origin (e.g. from the embed query or app config). */
46
175
  dashboardOrigin: string;
47
176
  target?: EmbedEventTarget;
177
+ /**
178
+ * When set, only events whose `source` is this exact value are accepted
179
+ * (normally the embedding window — an origin check alone does not bind
180
+ * WHICH frame sent the message).
181
+ */
182
+ expectSource?: unknown;
48
183
  onToken?: (token: string) => void;
49
184
  onResizeAck?: () => void;
185
+ onTheme?: (theme: BridgeTheme) => void;
186
+ onTitleAction?: (id: string) => void;
187
+ onSaveBarAction?: (action: SaveBarAction) => void;
188
+ onNavigate?: (path: string) => void;
189
+ onResourcePicked?: (items: ResourceItem[], requestId?: string) => void;
190
+ onResourcePickCancelled?: (requestId?: string) => void;
191
+ }
192
+ export interface ReadyOptions {
193
+ capabilities?: string[];
194
+ sdkVersion?: string;
50
195
  }
196
+ /** Truncate an outbound string client-side. Non-strings become "". */
197
+ export declare function capText(value: unknown, max: number): string;
198
+ /** Image URLs the dashboard may attach to picked items. */
199
+ export declare function isAllowedImageUrl(image: unknown): boolean;
200
+ /**
201
+ * Open targets the app may ask the dashboard to open: a dashboard-relative
202
+ * reference (resolves under the dashboard origin) or an absolute https URL
203
+ * (the dashboard applies its own allowlist on top). Everything else is
204
+ * refused — see `isSafeOpenShape`. The dashboard re-validates every target.
205
+ */
206
+ export declare function isAllowedOpenTarget(target: unknown, dashboardOrigin: string): boolean;
207
+ /**
208
+ * Parse one dashboard→app message. Returns null for anything else —
209
+ * wrong source, unknown type, malformed shape — so unknown types are
210
+ * silently ignored (forward compatibility, both directions).
211
+ */
212
+ export declare function parseInboundMessage(data: unknown): AppInboundMessage | null;
213
+ /**
214
+ * Parse one app→dashboard message — this parser is what the dashboard runs,
215
+ * so it must be trustworthy. Each branch validates the raw shape strictly
216
+ * (malformed required fields and mistyped optionals reject the message with
217
+ * null; malformed enum values reject too) and then delegates every cap and
218
+ * allow-list to `clipOutbound`, the same sanitizer the senders use — one
219
+ * copy of the policy, both directions. Unknown types return null — ignored,
220
+ * never acted on. Pass the dashboard origin to also gate `open` targets via
221
+ * `isAllowedOpenTarget`.
222
+ */
223
+ export declare function parseOutboundMessage(data: unknown, dashboardOrigin?: string): AppOutboundMessage | null;
224
+ /**
225
+ * Post one app→dashboard message to the exact origin — never `"*"`.
226
+ * Every message runs through `clipOutbound`; unpostable messages are
227
+ * silently skipped.
228
+ */
229
+ export declare function sendBridgeMessage(dashboardOrigin: string, target: EmbedPostTarget | undefined, message: AppOutboundMessage): void;
230
+ /**
231
+ * Build the `ready` announcement (capped). The one shared `ready` builder:
232
+ * `sendReady`, `installAuthFetch`'s refresh, and the React provider all
233
+ * announce through it so the dashboard sees identical capabilities.
234
+ */
235
+ export declare function buildReadyMessage(options?: ReadyOptions): AppOutboundMessage;
236
+ /** Announce readiness to the exact dashboard origin — never `"*"`. */
237
+ export declare function sendReady(dashboardOrigin: string, target?: EmbedPostTarget, options?: ReadyOptions): void;
238
+ /**
239
+ * Report the document height for auto-height. Builds raw — `clipOutbound`
240
+ * (via `sendBridgeMessage`) clamps and drops non-finite asks.
241
+ */
242
+ export declare function sendResize(dashboardOrigin: string, target: EmbedPostTarget | undefined, height: number): void;
243
+ /** Delivery confirmation with no state — accepted and ignored by decision. */
244
+ export declare function sendAck(dashboardOrigin: string, target?: EmbedPostTarget): void;
245
+ /**
246
+ * Drive the dashboard title bar (heading + up to 5 secondary actions).
247
+ * Builds raw — malformed defs are dropped, caps applied downstream.
248
+ */
249
+ export declare function sendTitle(dashboardOrigin: string, target: EmbedPostTarget | undefined, heading: string, actions?: {
250
+ primaryAction?: TitleActionDef;
251
+ secondaryActions?: TitleActionDef[];
252
+ }): void;
253
+ /** Ask the dashboard to show a toast. Builds raw — tone/duration sanitized downstream. */
254
+ export declare function sendToast(dashboardOrigin: string, target: EmbedPostTarget | undefined, message: string, options?: {
255
+ tone?: ToastTone;
256
+ durationMs?: number;
257
+ }): void;
258
+ /** Show (dirty) or hide (clean) the dashboard save bar. Bad states are dropped downstream. */
259
+ export declare function sendSaveBar(dashboardOrigin: string, target: EmbedPostTarget | undefined, state: SaveBarState): void;
260
+ /** Report an in-app move so the dashboard can mirror it in its URL (U2b). */
261
+ export declare function sendNavigated(dashboardOrigin: string, target: EmbedPostTarget | undefined, path: string): void;
262
+ /**
263
+ * Ask the dashboard to open a dashboard path or https URL (sandbox-safe).
264
+ * Anything `isAllowedOpenTarget` refuses is never posted — the dashboard
265
+ * re-validates every target before acting on it.
266
+ */
267
+ export declare function sendOpen(dashboardOrigin: string, target: EmbedPostTarget | undefined, openTarget: string): void;
268
+ /**
269
+ * Ask the dashboard to render its product picker (one at a time).
270
+ * Builds raw — `clipOutbound` validates, caps, and drops non-product asks.
271
+ */
272
+ export declare function sendPickResource(dashboardOrigin: string, target: EmbedPostTarget | undefined, request: PickResourceRequest): void;
51
273
  /**
52
274
  * Listen for dashboard messages, accepting only the exact dashboard
53
- * origin. Returns an unsubscribe function. Never touches any secret.
275
+ * origin. Unknown types are ignored. Returns an unsubscribe function.
276
+ * Never touches any secret.
54
277
  */
55
278
  export declare function listenToDashboard(options: FrameBridgeOptions): () => void;
56
- /** Announce readiness to the exact dashboard origin — never `"*"`. */
57
- export declare function sendReady(dashboardOrigin: string, target?: EmbedPostTarget): void;
279
+ /**
280
+ * The single choke point for everything the app posts: caps every string,
281
+ * allow-lists every enum, clamps every number, re-gates `open` targets
282
+ * against scheme attacks. Returns null when the message is unpostable
283
+ * (malformed required field, bad save-bar state, non-finite height,
284
+ * blocked open target, non-product pick) — `sendBridgeMessage` skips null.
285
+ */
286
+ export declare function clipOutbound(message: AppOutboundMessage): AppOutboundMessage | null;
58
287
  //# sourceMappingURL=frame.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AACjD,eAAO,MAAM,UAAU,cAAc,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC5C;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,MAAM,EAAE,OAAO,UAAU,CAAC;IAAC,IAAI,EAAE,KAAK,CAAA;CAAE,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GACzB;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,MAAM,EAAE,OAAO,gBAAgB,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/E,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;CACnF;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;CAC1B;AAgBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAkBzE;AAED,sEAAsE;AACtE,wBAAgB,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAGjF"}
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"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"}