experimental-a2 0.21.1 → 0.22.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/CHANGELOG.md +21 -0
- package/dist/{actor-HnGmrOZZ.d.ts → actor-CqibLgjQ.d.ts} +13 -5
- package/dist/actor-CqibLgjQ.d.ts.map +1 -0
- package/dist/actor-client.d.ts +1 -1
- package/dist/actor-react.d.ts +1 -1
- package/dist/actor-react.js +1 -1
- package/dist/actor-shared-DFET5q16.js.map +1 -1
- package/dist/actor.d.ts +1 -1
- package/dist/actor.js +3 -3
- package/dist/{ai-CvEnqVfo.d.ts → ai-DAu77CDr.d.ts} +2 -2
- package/dist/{ai-CvEnqVfo.d.ts.map → ai-DAu77CDr.d.ts.map} +1 -1
- package/dist/{ai-CzE672Q3.js → ai-EEfKyc-z.js} +2 -2
- package/dist/{ai-CzE672Q3.js.map → ai-EEfKyc-z.js.map} +1 -1
- package/dist/ai-client.d.ts +1 -1
- package/dist/ai-client.js +2 -2
- package/dist/ai-fx.d.ts +4 -2
- package/dist/ai-fx.d.ts.map +1 -1
- package/dist/ai-fx.js +211 -61
- package/dist/ai-fx.js.map +1 -1
- package/dist/{ai-harness-Bfk-Lycn.d.ts → ai-harness-DTjkAr2T.d.ts} +2 -2
- package/dist/{ai-harness-Bfk-Lycn.d.ts.map → ai-harness-DTjkAr2T.d.ts.map} +1 -1
- package/dist/ai-harness-dQeJaR1t.js.map +1 -1
- package/dist/ai-pi.d.ts +1 -1
- package/dist/ai-pi.js +1 -1
- package/dist/ai-react.d.ts +1 -1
- package/dist/ai-react.js +2 -2
- package/dist/ai-server.d.ts +3 -3
- package/dist/ai-server.d.ts.map +1 -1
- package/dist/ai-server.js +10 -4
- package/dist/ai-server.js.map +1 -1
- package/dist/ai.d.ts +1 -1
- package/dist/ai.js +1 -1
- package/dist/{client-9IeTsiAs.js → client-BQS4i_V9.js} +27 -4
- package/dist/client-BQS4i_V9.js.map +1 -0
- package/dist/client-CUMbS_38.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/{internal-Bc4PvfHk.js → internal-CvsrprnU.js} +32 -15
- package/dist/{internal-Bc4PvfHk.js.map → internal-CvsrprnU.js.map} +1 -1
- package/dist/react.js +1 -1
- package/dist/{runtime-consumer-BWmht60z.js → runtime-consumer-CIeL33wj.js} +2 -2
- package/dist/{runtime-consumer-BWmht60z.js.map → runtime-consumer-CIeL33wj.js.map} +1 -1
- package/dist/scheduler-qstash.d.ts +2 -2
- package/dist/scheduler-qstash.js +2 -2
- package/dist/scheduler-vercel.d.ts +2 -2
- package/dist/scheduler-vercel.js +2 -2
- package/dist/{server-DvIB8kj5.js → server-DtFrWxi3.js} +30 -8
- package/dist/server-DtFrWxi3.js.map +1 -0
- package/dist/{server-BshFZ0eL.d.ts → server-qgez0Xny.d.ts} +3 -3
- package/dist/{server-BshFZ0eL.d.ts.map → server-qgez0Xny.d.ts.map} +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.js +1 -1
- package/dist/{session-clear-Bk_29eEw.d.ts → session-clear-D1PFe7xl.d.ts} +2 -2
- package/dist/session-clear-D1PFe7xl.d.ts.map +1 -0
- package/dist/{store-Z2qjw50n.d.ts → store-D0MhBvg6.d.ts} +15 -6
- package/dist/store-D0MhBvg6.d.ts.map +1 -0
- package/dist/store-N8PXxDAS.js.map +1 -1
- package/dist/store-memory.d.ts +1 -1
- package/dist/store-memory.d.ts.map +1 -1
- package/dist/store-memory.js +15 -17
- package/dist/store-memory.js.map +1 -1
- package/dist/{store-polling-DYNyxCev.js → store-polling-BZt2Rf3D.js} +2 -2
- package/dist/{store-polling-DYNyxCev.js.map → store-polling-BZt2Rf3D.js.map} +1 -1
- package/dist/store-postgres.d.ts +1 -1
- package/dist/store-postgres.d.ts.map +1 -1
- package/dist/store-postgres.js +31 -40
- package/dist/store-postgres.js.map +1 -1
- package/dist/store-presence-polling-JuAy2Ck2.js +111 -0
- package/dist/store-presence-polling-JuAy2Ck2.js.map +1 -0
- package/dist/store-redis-http.d.ts +1 -1
- package/dist/store-redis-http.js +3 -3
- package/dist/{store-redis-notify-IiVdlYHc.js → store-redis-notify-CsJw_hfD.js} +538 -397
- package/dist/store-redis-notify-CsJw_hfD.js.map +1 -0
- package/dist/store-redis.d.ts +1 -1
- package/dist/store-redis.d.ts.map +1 -1
- package/dist/store-redis.js +3 -4
- package/dist/store-redis.js.map +1 -1
- package/dist/store-sqlite.d.ts +1 -1
- package/dist/store-sqlite.d.ts.map +1 -1
- package/dist/store-sqlite.js +16 -18
- package/dist/store-sqlite.js.map +1 -1
- package/dist/stream-buffer-DrTyiIuo.js +57 -0
- package/dist/stream-buffer-DrTyiIuo.js.map +1 -0
- package/dist/{wire-CZGqNZRx.js → wire-CV-Z7wz-.js} +3 -3
- package/dist/{wire-CZGqNZRx.js.map → wire-CV-Z7wz-.js.map} +1 -1
- package/docs/actors/01-introduction.mdx +5 -2
- package/docs/agents/03-conversations.mdx +9 -8
- package/docs/agents/04-harnesses.mdx +7 -4
- package/docs/reference/01-core.mdx +3 -2
- package/docs/reference/02-server.mdx +5 -1
- package/docs/reference/04-ai.mdx +13 -4
- package/docs/reference/06-errors.mdx +1 -1
- package/docs/server/01-consumers.mdx +4 -1
- package/docs/server/06-guarantees.mdx +7 -4
- package/docs/stores/02-redis.mdx +16 -10
- package/docs/stores/03-redis-http.mdx +6 -4
- package/docs/stores/04-postgres.mdx +2 -2
- package/docs/upgrades/01-overview.mdx +1 -0
- package/docs/upgrades/78-0-22.mdx +115 -0
- package/examples/playground/app/a0/sandbox.ts +58 -13
- package/examples/playground/app/a2slack/db/a2.ts +7 -4
- package/examples/playground/app/a2slack/db/migrations/0004_a2_session_event_ids.sql +2 -0
- package/examples/playground/app/a2slack/db/migrations/meta/0004_snapshot.json +1165 -0
- package/examples/playground/app/a2slack/db/migrations/meta/_journal.json +8 -1
- package/examples/playground/app/chat/server.ts +2 -2
- package/examples/playground/lib/store.ts +1 -1
- package/examples/playground/package.json +1 -1
- package/package.json +1 -1
- package/sql/postgres/drizzle-schema.ts +7 -4
- package/sql/postgres/schema.sql +24 -3
- package/src/actor-shared.ts +10 -2
- package/src/ai-agent.ts +13 -0
- package/src/ai-fx.ts +321 -77
- package/src/ai-harness.ts +7 -0
- package/src/client.ts +19 -2
- package/src/deterministic-id.ts +1 -1
- package/src/internal.ts +42 -11
- package/src/presence-recovery.ts +18 -11
- package/src/presence-tombstones.ts +52 -0
- package/src/push-envelope.ts +2 -2
- package/src/server.ts +49 -15
- package/src/store-memory.ts +24 -32
- package/src/store-postgres.ts +43 -53
- package/src/store-presence-polling.ts +59 -34
- package/src/store-redis-core.ts +595 -439
- package/src/store-redis-notify.ts +74 -26
- package/src/store-redis.ts +2 -3
- package/src/store-sqlite.ts +34 -40
- package/src/store.ts +14 -5
- package/dist/actor-HnGmrOZZ.d.ts.map +0 -1
- package/dist/client-9IeTsiAs.js.map +0 -1
- package/dist/server-DvIB8kj5.js.map +0 -1
- package/dist/session-clear-Bk_29eEw.d.ts.map +0 -1
- package/dist/store-Z2qjw50n.d.ts.map +0 -1
- package/dist/store-presence-polling-CzQ0wdtM.js +0 -94
- package/dist/store-presence-polling-CzQ0wdtM.js.map +0 -1
- package/dist/store-redis-notify-IiVdlYHc.js.map +0 -1
- package/dist/stream-buffer-Cx7AAPGq.js +0 -23
- package/dist/stream-buffer-Cx7AAPGq.js.map +0 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { a as POLL_TIMINGS } from "./internal-CvsrprnU.js";
|
|
2
|
+
import { t as defaultSleep } from "./store-polling-BZt2Rf3D.js";
|
|
3
|
+
//#region src/store-presence-polling.ts
|
|
4
|
+
const key = ({ participant, field }) => JSON.stringify([participant, field]);
|
|
5
|
+
function pollPresence({ read, deliver, sleep = defaultSleep }) {
|
|
6
|
+
let stopped = false;
|
|
7
|
+
let pending;
|
|
8
|
+
let interval = Math.min(POLL_TIMINGS.activeFloorMs, POLL_TIMINGS.idleCeilingMs);
|
|
9
|
+
let version = 0;
|
|
10
|
+
const seen = /* @__PURE__ */ new Map();
|
|
11
|
+
const activate = () => {
|
|
12
|
+
version += 1;
|
|
13
|
+
interval = Math.min(POLL_TIMINGS.activeFloorMs, POLL_TIMINGS.idleCeilingMs);
|
|
14
|
+
pending?.cancel();
|
|
15
|
+
};
|
|
16
|
+
const ready = read().then((rows) => {
|
|
17
|
+
if (stopped) return;
|
|
18
|
+
for (const row of rows) seen.set(key(row), row);
|
|
19
|
+
}).catch(() => void 0);
|
|
20
|
+
/** Delivers how `rows` differ from what was seen; true when they do. */
|
|
21
|
+
const reconcile = (rows) => {
|
|
22
|
+
const live = /* @__PURE__ */ new Set();
|
|
23
|
+
let changed = false;
|
|
24
|
+
for (const row of rows) {
|
|
25
|
+
const id = key(row);
|
|
26
|
+
live.add(id);
|
|
27
|
+
const prior = seen.get(id);
|
|
28
|
+
seen.set(id, row);
|
|
29
|
+
if (prior?.seen === row.seen && prior.at.getTime() === row.at.getTime() && JSON.stringify(prior.value) === JSON.stringify(row.value)) continue;
|
|
30
|
+
changed = true;
|
|
31
|
+
deliver({
|
|
32
|
+
participant: row.participant,
|
|
33
|
+
values: { [row.field]: row.value },
|
|
34
|
+
seen: row.seen,
|
|
35
|
+
at: row.at
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
for (const [id, row] of seen) {
|
|
39
|
+
if (live.has(id)) continue;
|
|
40
|
+
seen.delete(id);
|
|
41
|
+
changed = true;
|
|
42
|
+
deliver({
|
|
43
|
+
participant: row.participant,
|
|
44
|
+
values: { [row.field]: null },
|
|
45
|
+
seen: row.seen,
|
|
46
|
+
at: row.at
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return changed;
|
|
50
|
+
};
|
|
51
|
+
const run = async () => {
|
|
52
|
+
await ready;
|
|
53
|
+
for (;;) {
|
|
54
|
+
if (stopped) return;
|
|
55
|
+
const before = version;
|
|
56
|
+
pending = sleep(interval);
|
|
57
|
+
await pending.promise;
|
|
58
|
+
if (stopped) return;
|
|
59
|
+
try {
|
|
60
|
+
const reading = version;
|
|
61
|
+
const rows = await read();
|
|
62
|
+
if (stopped) return;
|
|
63
|
+
if (version !== reading) continue;
|
|
64
|
+
if (reconcile(rows)) activate();
|
|
65
|
+
else if (version === before) interval = Math.min(interval * 2, POLL_TIMINGS.idleCeilingMs);
|
|
66
|
+
} catch {
|
|
67
|
+
interval = POLL_TIMINGS.idleCeilingMs;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
run();
|
|
72
|
+
return {
|
|
73
|
+
ready,
|
|
74
|
+
async snapshot(readSnapshot) {
|
|
75
|
+
const reading = version;
|
|
76
|
+
const rows = await readSnapshot();
|
|
77
|
+
if (!stopped && version === reading && reconcile(rows)) activate();
|
|
78
|
+
return rows;
|
|
79
|
+
},
|
|
80
|
+
wake: activate,
|
|
81
|
+
update(patch) {
|
|
82
|
+
for (const [field, value] of Object.entries(patch.values)) {
|
|
83
|
+
const id = key({
|
|
84
|
+
participant: patch.participant,
|
|
85
|
+
field
|
|
86
|
+
});
|
|
87
|
+
if (value === null) {
|
|
88
|
+
seen.delete(id);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
seen.set(id, {
|
|
92
|
+
participant: patch.participant,
|
|
93
|
+
field,
|
|
94
|
+
value,
|
|
95
|
+
seen: patch.seen,
|
|
96
|
+
at: patch.at
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
activate();
|
|
100
|
+
},
|
|
101
|
+
stop() {
|
|
102
|
+
stopped = true;
|
|
103
|
+
pending?.cancel();
|
|
104
|
+
seen.clear();
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//#endregion
|
|
109
|
+
export { pollPresence as t };
|
|
110
|
+
|
|
111
|
+
//# sourceMappingURL=store-presence-polling-JuAy2Ck2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-presence-polling-JuAy2Ck2.js","names":[],"sources":["../src/store-presence-polling.ts"],"sourcesContent":["import type { PresencePatch } from './contract.ts'\nimport { POLL_TIMINGS } from './internal.ts'\nimport { defaultSleep, type Sleeper } from './store-polling.ts'\nimport type { PresenceRow } from './store.ts'\n\nconst key = ({\n participant,\n field,\n}: Pick<PresenceRow, 'participant' | 'field'>): string =>\n JSON.stringify([participant, field])\n\nexport function pollPresence({\n read,\n deliver,\n sleep = defaultSleep,\n}: {\n read: () => Promise<PresenceRow[]>\n deliver: (patch: PresencePatch) => void\n sleep?: (ms: number) => Sleeper\n}): {\n ready: Promise<void>\n /**\n * Runs a foreground snapshot read and counts it as a poll, so a stamp a\n * viewer paints from it is one later deletes carry.\n */\n snapshot(read: () => Promise<PresenceRow[]>): Promise<PresenceRow[]>\n update(patch: PresencePatch): void\n wake(): void\n stop(): void\n} {\n let stopped = false\n let pending: Sleeper | undefined\n let interval = Math.min(\n POLL_TIMINGS.activeFloorMs,\n POLL_TIMINGS.idleCeilingMs,\n )\n let version = 0\n const seen = new Map<string, Omit<PresenceRow, 'expiresAt'>>()\n const activate = (): void => {\n version += 1\n interval = Math.min(POLL_TIMINGS.activeFloorMs, POLL_TIMINGS.idleCeilingMs)\n pending?.cancel()\n }\n const ready = read()\n .then((rows) => {\n if (stopped) return\n for (const row of rows) seen.set(key(row), row)\n return undefined\n })\n // Seeding is best effort; foreground snapshots still report read errors.\n .catch(() => undefined)\n\n /** Delivers how `rows` differ from what was seen; true when they do. */\n const reconcile = (rows: PresenceRow[]): boolean => {\n const live = new Set<string>()\n let changed = false\n for (const row of rows) {\n const id = key(row)\n live.add(id)\n const prior = seen.get(id)\n seen.set(id, row)\n if (\n prior?.seen === row.seen &&\n prior.at.getTime() === row.at.getTime() &&\n JSON.stringify(prior.value) === JSON.stringify(row.value)\n )\n continue\n changed = true\n deliver({\n participant: row.participant,\n values: { [row.field]: row.value },\n seen: row.seen,\n at: row.at,\n })\n }\n for (const [id, row] of seen) {\n if (live.has(id)) continue\n seen.delete(id)\n changed = true\n deliver({\n participant: row.participant,\n values: { [row.field]: null },\n seen: row.seen,\n // The last seen stamp, never this poller's clock: only\n // senders' clocks order the plane, and an observer-stamped\n // delete could outrank the sender's next set.\n at: row.at,\n })\n }\n return changed\n }\n\n const run = async (): Promise<void> => {\n await ready\n for (;;) {\n if (stopped) return\n const before = version\n pending = sleep(interval)\n // oxlint-disable-next-line no-await-in-loop -- adaptive presence polling\n await pending.promise\n if (stopped) return\n try {\n const reading = version\n // oxlint-disable-next-line no-await-in-loop -- read each new presence snapshot\n const rows = await read()\n if (stopped) return\n if (version !== reading) continue\n if (reconcile(rows)) activate()\n else if (version === before)\n interval = Math.min(interval * 2, POLL_TIMINGS.idleCeilingMs)\n } catch {\n interval = POLL_TIMINGS.idleCeilingMs\n }\n }\n }\n void run()\n return {\n ready,\n async snapshot(readSnapshot) {\n const reading = version\n const rows = await readSnapshot()\n if (!stopped && version === reading && reconcile(rows)) activate()\n return rows\n },\n wake: activate,\n update(patch) {\n for (const [field, value] of Object.entries(patch.values)) {\n const id = key({ participant: patch.participant, field })\n // A deleted field is one the next read should not find.\n if (value === null) {\n seen.delete(id)\n continue\n }\n seen.set(id, {\n participant: patch.participant,\n field,\n value,\n seen: patch.seen,\n at: patch.at,\n })\n }\n activate()\n },\n stop() {\n stopped = true\n pending?.cancel()\n seen.clear()\n },\n }\n}\n"],"mappings":";;;AAKA,MAAM,OAAO,EACX,aACA,YAEA,KAAK,UAAU,CAAC,aAAa,KAAK,CAAC;AAErC,SAAgB,aAAa,EAC3B,MACA,SACA,QAAQ,gBAeR;CACA,IAAI,UAAU;CACd,IAAI;CACJ,IAAI,WAAW,KAAK,IAClB,aAAa,eACb,aAAa,aACf;CACA,IAAI,UAAU;CACd,MAAM,uBAAO,IAAI,IAA4C;CAC7D,MAAM,iBAAuB;EAC3B,WAAW;EACX,WAAW,KAAK,IAAI,aAAa,eAAe,aAAa,aAAa;EAC1E,SAAS,OAAO;CAClB;CACA,MAAM,QAAQ,KAAK,CAAC,CACjB,MAAM,SAAS;EACd,IAAI,SAAS;EACb,KAAK,MAAM,OAAO,MAAM,KAAK,IAAI,IAAI,GAAG,GAAG,GAAG;CAEhD,CAAC,CAAC,CAED,YAAY,KAAA,CAAS;;CAGxB,MAAM,aAAa,SAAiC;EAClD,MAAM,uBAAO,IAAI,IAAY;EAC7B,IAAI,UAAU;EACd,KAAK,MAAM,OAAO,MAAM;GACtB,MAAM,KAAK,IAAI,GAAG;GAClB,KAAK,IAAI,EAAE;GACX,MAAM,QAAQ,KAAK,IAAI,EAAE;GACzB,KAAK,IAAI,IAAI,GAAG;GAChB,IACE,OAAO,SAAS,IAAI,QACpB,MAAM,GAAG,QAAQ,MAAM,IAAI,GAAG,QAAQ,KACtC,KAAK,UAAU,MAAM,KAAK,MAAM,KAAK,UAAU,IAAI,KAAK,GAExD;GACF,UAAU;GACV,QAAQ;IACN,aAAa,IAAI;IACjB,QAAQ,GAAG,IAAI,QAAQ,IAAI,MAAM;IACjC,MAAM,IAAI;IACV,IAAI,IAAI;GACV,CAAC;EACH;EACA,KAAK,MAAM,CAAC,IAAI,QAAQ,MAAM;GAC5B,IAAI,KAAK,IAAI,EAAE,GAAG;GAClB,KAAK,OAAO,EAAE;GACd,UAAU;GACV,QAAQ;IACN,aAAa,IAAI;IACjB,QAAQ,GAAG,IAAI,QAAQ,KAAK;IAC5B,MAAM,IAAI;IAIV,IAAI,IAAI;GACV,CAAC;EACH;EACA,OAAO;CACT;CAEA,MAAM,MAAM,YAA2B;EACrC,MAAM;EACN,SAAS;GACP,IAAI,SAAS;GACb,MAAM,SAAS;GACf,UAAU,MAAM,QAAQ;GAExB,MAAM,QAAQ;GACd,IAAI,SAAS;GACb,IAAI;IACF,MAAM,UAAU;IAEhB,MAAM,OAAO,MAAM,KAAK;IACxB,IAAI,SAAS;IACb,IAAI,YAAY,SAAS;IACzB,IAAI,UAAU,IAAI,GAAG,SAAS;SACzB,IAAI,YAAY,QACnB,WAAW,KAAK,IAAI,WAAW,GAAG,aAAa,aAAa;GAChE,QAAQ;IACN,WAAW,aAAa;GAC1B;EACF;CACF;CACA,IAAS;CACT,OAAO;EACL;EACA,MAAM,SAAS,cAAc;GAC3B,MAAM,UAAU;GAChB,MAAM,OAAO,MAAM,aAAa;GAChC,IAAI,CAAC,WAAW,YAAY,WAAW,UAAU,IAAI,GAAG,SAAS;GACjE,OAAO;EACT;EACA,MAAM;EACN,OAAO,OAAO;GACZ,KAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,MAAM,MAAM,GAAG;IACzD,MAAM,KAAK,IAAI;KAAE,aAAa,MAAM;KAAa;IAAM,CAAC;IAExD,IAAI,UAAU,MAAM;KAClB,KAAK,OAAO,EAAE;KACd;IACF;IACA,KAAK,IAAI,IAAI;KACX,aAAa,MAAM;KACnB;KACA;KACA,MAAM,MAAM;KACZ,IAAI,MAAM;IACZ,CAAC;GACH;GACA,SAAS;EACX;EACA,OAAO;GACL,UAAU;GACV,SAAS,OAAO;GAChB,KAAK,MAAM;EACb;CACF;AACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as Clock, s as IdSource, t as A2Store } from "./store-
|
|
1
|
+
import { r as Clock, s as IdSource, t as A2Store } from "./store-D0MhBvg6.js";
|
|
2
2
|
//#region src/store-redis-http.d.ts
|
|
3
3
|
type RedisHttpStoreOptions = {
|
|
4
4
|
/** REST endpoint, e.g. `process.env.UPSTASH_REDIS_REST_URL`. */
|
package/dist/store-redis-http.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { i as A2Error } from "./session-clear-wHd5GCpZ.js";
|
|
2
|
-
import {
|
|
3
|
-
import { t as defaultSleep } from "./store-polling-
|
|
2
|
+
import { i as NOTIFY_TIMINGS } from "./internal-CvsrprnU.js";
|
|
3
|
+
import { t as defaultSleep } from "./store-polling-BZt2Rf3D.js";
|
|
4
4
|
import { n as SYSTEM_CLOCK, t as RANDOM_IDS } from "./store-N8PXxDAS.js";
|
|
5
|
-
import { t as createRedisNotifyStore } from "./store-redis-notify-
|
|
5
|
+
import { t as createRedisNotifyStore } from "./store-redis-notify-CsJw_hfD.js";
|
|
6
6
|
//#region src/redis-http-subscriptions.ts
|
|
7
7
|
function redisHttpSubscriptions({ url, token, onReconnect, fallback }) {
|
|
8
8
|
const subscriptions = /* @__PURE__ */ new Map();
|