@fire-spark/realtime 0.5.0 → 0.6.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.d.ts +37 -1
- package/dist/index.js +89 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -70,6 +70,42 @@ declare const listenKiosk: (options: RealtimeListenKioskOptions, deps?: Realtime
|
|
|
70
70
|
//#region src/listenOrder.d.ts
|
|
71
71
|
declare const listenOrder: (options: RealtimeListenOrderOptions, deps?: RealtimeListenDeps) => () => void;
|
|
72
72
|
//#endregion
|
|
73
|
+
//#region src/checkoutRelease.d.ts
|
|
74
|
+
type CheckoutReleaseResult = {
|
|
75
|
+
status: "released";
|
|
76
|
+
payload: OrderChangedPayload$1;
|
|
77
|
+
} | {
|
|
78
|
+
status: "failed";
|
|
79
|
+
payload: OrderChangedPayload$1;
|
|
80
|
+
} | {
|
|
81
|
+
status: "timeout";
|
|
82
|
+
} | {
|
|
83
|
+
status: "stopped";
|
|
84
|
+
};
|
|
85
|
+
interface CheckoutReleaseWatch {
|
|
86
|
+
/** Resolves when the channel is joined, or when the watch settles first. */
|
|
87
|
+
subscribed: Promise<void>;
|
|
88
|
+
result: Promise<CheckoutReleaseResult>;
|
|
89
|
+
/** Starts the timeout. Call after place order is in flight or has returned. */
|
|
90
|
+
arm: () => void;
|
|
91
|
+
/** Drops the subscription. Settles `result` with `stopped` if still open. */
|
|
92
|
+
stop: () => void;
|
|
93
|
+
/** Feed a payload you already have (sale response, replay). */
|
|
94
|
+
consider: (payload: OrderChangedPayload$1 | null) => void;
|
|
95
|
+
}
|
|
96
|
+
type WatchCheckoutReleaseOptions = Omit<RealtimeListenOrderOptions, "on"> & {
|
|
97
|
+
timeoutMs?: number;
|
|
98
|
+
/** Known fulfillment state. A terminal value settles the watch immediately. */
|
|
99
|
+
current?: OrderChangedPayload$1 | null;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* Subscribes to `order.changed` and settles when checkout is released or
|
|
103
|
+
* rejected. The fulfillment snapshot on subscribe covers an event that
|
|
104
|
+
* already happened. `arm` starts the timeout so a missed event cannot spin
|
|
105
|
+
* forever. `stop` on unmount.
|
|
106
|
+
*/
|
|
107
|
+
declare const watchCheckoutRelease: (options: WatchCheckoutReleaseOptions) => CheckoutReleaseWatch;
|
|
108
|
+
//#endregion
|
|
73
109
|
//#region src/index.d.ts
|
|
74
110
|
declare const realtime: {
|
|
75
111
|
listen: typeof listen;
|
|
@@ -77,4 +113,4 @@ declare const realtime: {
|
|
|
77
113
|
listenOrder: typeof listenOrder;
|
|
78
114
|
};
|
|
79
115
|
//#endregion
|
|
80
|
-
export { AVAILABILITY_CHANGED_EVENT, CMS_CHANGED_EVENT, KIOSK_COMMAND_EVENT, KIOSK_CONFIG_CHANGED_EVENT, type KioskCommandPayload, type KioskConfigChangedPayload, type KioskRealtimeToken, MENU_CHANGED_EVENT, ORDER_CHANGED_EVENT, type OrderChangedPayload, type RealtimeListenEvents, type RealtimeListenKioskOptions, type RealtimeListenOptions, type RealtimeListenOrderOptions, type StorefrontAvailabilityChangedPayload, type StorefrontCmsChangedPayload, type StorefrontMenuChangedPayload, type StorefrontRealtimeToken, type StorefrontWorkspaceChangedPayload, listen, listenKiosk, listenOrder, realtime };
|
|
116
|
+
export { AVAILABILITY_CHANGED_EVENT, CMS_CHANGED_EVENT, type CheckoutReleaseResult, type CheckoutReleaseWatch, KIOSK_COMMAND_EVENT, KIOSK_CONFIG_CHANGED_EVENT, type KioskCommandPayload, type KioskConfigChangedPayload, type KioskRealtimeToken, MENU_CHANGED_EVENT, ORDER_CHANGED_EVENT, type OrderChangedPayload, type RealtimeListenEvents, type RealtimeListenKioskOptions, type RealtimeListenOptions, type RealtimeListenOrderOptions, type StorefrontAvailabilityChangedPayload, type StorefrontCmsChangedPayload, type StorefrontMenuChangedPayload, type StorefrontRealtimeToken, type StorefrontWorkspaceChangedPayload, listen, listenKiosk, listenOrder, realtime, watchCheckoutRelease };
|
package/dist/index.js
CHANGED
|
@@ -4086,6 +4086,94 @@ const listenOrder = (options, deps = {}) => {
|
|
|
4086
4086
|
};
|
|
4087
4087
|
};
|
|
4088
4088
|
//#endregion
|
|
4089
|
+
//#region src/checkoutRelease.ts
|
|
4090
|
+
const CHECKOUT_RELEASE_TIMEOUT_MS = 6e4;
|
|
4091
|
+
/** `checkout_state` from `order.changed` or the fulfillment snapshot. */
|
|
4092
|
+
const checkoutReleaseStatus = (payload) => {
|
|
4093
|
+
if (payload.checkout_state === "failed") return "failed";
|
|
4094
|
+
if (payload.checkout_state === "released") return "released";
|
|
4095
|
+
return "pending";
|
|
4096
|
+
};
|
|
4097
|
+
/**
|
|
4098
|
+
* Subscribes to `order.changed` and settles when checkout is released or
|
|
4099
|
+
* rejected. The fulfillment snapshot on subscribe covers an event that
|
|
4100
|
+
* already happened. `arm` starts the timeout so a missed event cannot spin
|
|
4101
|
+
* forever. `stop` on unmount.
|
|
4102
|
+
*/
|
|
4103
|
+
const watchCheckoutRelease = (options) => {
|
|
4104
|
+
const timeoutMs = options.timeoutMs ?? CHECKOUT_RELEASE_TIMEOUT_MS;
|
|
4105
|
+
let settled = false;
|
|
4106
|
+
let stopListen = () => {};
|
|
4107
|
+
let timer = null;
|
|
4108
|
+
let resolveResult = () => void 0;
|
|
4109
|
+
let resolveSubscribed = () => void 0;
|
|
4110
|
+
const result = new Promise((resolve) => {
|
|
4111
|
+
resolveResult = resolve;
|
|
4112
|
+
});
|
|
4113
|
+
const subscribed = new Promise((resolve) => {
|
|
4114
|
+
resolveSubscribed = resolve;
|
|
4115
|
+
});
|
|
4116
|
+
const finish = (value) => {
|
|
4117
|
+
if (settled) return;
|
|
4118
|
+
settled = true;
|
|
4119
|
+
if (timer !== null) clearTimeout(timer);
|
|
4120
|
+
timer = null;
|
|
4121
|
+
stopListen();
|
|
4122
|
+
resolveSubscribed();
|
|
4123
|
+
resolveResult(value);
|
|
4124
|
+
};
|
|
4125
|
+
const take = (payload) => {
|
|
4126
|
+
const status = checkoutReleaseStatus(payload);
|
|
4127
|
+
if (status === "pending") return;
|
|
4128
|
+
if (status === "released") {
|
|
4129
|
+
finish({
|
|
4130
|
+
status: "released",
|
|
4131
|
+
payload
|
|
4132
|
+
});
|
|
4133
|
+
return;
|
|
4134
|
+
}
|
|
4135
|
+
finish({
|
|
4136
|
+
status: "failed",
|
|
4137
|
+
payload
|
|
4138
|
+
});
|
|
4139
|
+
};
|
|
4140
|
+
if (options.current) take(options.current);
|
|
4141
|
+
if (!settled) {
|
|
4142
|
+
const o1 = {
|
|
4143
|
+
orderId: options.orderId,
|
|
4144
|
+
baseUrl: options.baseUrl
|
|
4145
|
+
};
|
|
4146
|
+
const o2 = { accessToken: options.accessToken };
|
|
4147
|
+
const o3 = { fetchImpl: options.fetchImpl };
|
|
4148
|
+
const on = {
|
|
4149
|
+
changed: take,
|
|
4150
|
+
subscribed: () => resolveSubscribed()
|
|
4151
|
+
};
|
|
4152
|
+
stopListen = listenOrder({
|
|
4153
|
+
...o1,
|
|
4154
|
+
...o2,
|
|
4155
|
+
...o3,
|
|
4156
|
+
on
|
|
4157
|
+
});
|
|
4158
|
+
}
|
|
4159
|
+
const arm = () => {
|
|
4160
|
+
if (settled || timer !== null) return;
|
|
4161
|
+
timer = setTimeout(() => finish({ status: "timeout" }), timeoutMs);
|
|
4162
|
+
};
|
|
4163
|
+
const stop = () => finish({ status: "stopped" });
|
|
4164
|
+
const consider = (payload) => {
|
|
4165
|
+
if (!payload) return;
|
|
4166
|
+
take(payload);
|
|
4167
|
+
};
|
|
4168
|
+
return {
|
|
4169
|
+
subscribed,
|
|
4170
|
+
result,
|
|
4171
|
+
arm,
|
|
4172
|
+
stop,
|
|
4173
|
+
consider
|
|
4174
|
+
};
|
|
4175
|
+
};
|
|
4176
|
+
//#endregion
|
|
4089
4177
|
//#region src/index.ts
|
|
4090
4178
|
const realtime = {
|
|
4091
4179
|
listen,
|
|
@@ -4093,4 +4181,4 @@ const realtime = {
|
|
|
4093
4181
|
listenOrder
|
|
4094
4182
|
};
|
|
4095
4183
|
//#endregion
|
|
4096
|
-
export { AVAILABILITY_CHANGED_EVENT, CMS_CHANGED_EVENT, KIOSK_COMMAND_EVENT, KIOSK_CONFIG_CHANGED_EVENT, MENU_CHANGED_EVENT, ORDER_CHANGED_EVENT, listen, listenKiosk, listenOrder, realtime };
|
|
4184
|
+
export { AVAILABILITY_CHANGED_EVENT, CMS_CHANGED_EVENT, KIOSK_COMMAND_EVENT, KIOSK_CONFIG_CHANGED_EVENT, MENU_CHANGED_EVENT, ORDER_CHANGED_EVENT, listen, listenKiosk, listenOrder, realtime, watchCheckoutRelease };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fire-spark/realtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Fire Spark storefront realtime SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@supabase/realtime-js": "^2.100.1",
|
|
21
|
-
"@fire-spark/core": "^0.
|
|
22
|
-
"@fire-spark/types": "^0.
|
|
21
|
+
"@fire-spark/core": "^0.6.0",
|
|
22
|
+
"@fire-spark/types": "^0.6.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"tsdown": "^0.22.14",
|