@pawabase/client 0.0.0-stage → 0.1.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/README.md +313 -2
- package/dist/cjs/admin.d.ts +187 -0
- package/dist/cjs/admin.d.ts.map +1 -0
- package/dist/cjs/admin.js +235 -0
- package/dist/cjs/admin.js.map +1 -0
- package/dist/cjs/auth.d.ts +448 -0
- package/dist/cjs/auth.d.ts.map +1 -0
- package/dist/cjs/auth.js +1016 -0
- package/dist/cjs/auth.js.map +1 -0
- package/dist/cjs/client.d.ts +103 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +144 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/data.d.ts +220 -0
- package/dist/cjs/data.d.ts.map +1 -0
- package/dist/cjs/data.js +490 -0
- package/dist/cjs/data.js.map +1 -0
- package/dist/cjs/errors.d.ts +167 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +316 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/files.d.ts +80 -0
- package/dist/cjs/files.d.ts.map +1 -0
- package/dist/cjs/files.js +167 -0
- package/dist/cjs/files.js.map +1 -0
- package/dist/cjs/functions.d.ts +66 -0
- package/dist/cjs/functions.d.ts.map +1 -0
- package/dist/cjs/functions.js +109 -0
- package/dist/cjs/functions.js.map +1 -0
- package/dist/cjs/http.d.ts +101 -0
- package/dist/cjs/http.d.ts.map +1 -0
- package/dist/cjs/http.js +249 -0
- package/dist/cjs/http.js.map +1 -0
- package/dist/cjs/index.d.ts +22 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/manage/access.d.ts +136 -0
- package/dist/cjs/manage/access.d.ts.map +1 -0
- package/dist/cjs/manage/access.js +162 -0
- package/dist/cjs/manage/access.js.map +1 -0
- package/dist/cjs/manage/automation.d.ts +106 -0
- package/dist/cjs/manage/automation.d.ts.map +1 -0
- package/dist/cjs/manage/automation.js +144 -0
- package/dist/cjs/manage/automation.js.map +1 -0
- package/dist/cjs/manage/base.d.ts +52 -0
- package/dist/cjs/manage/base.d.ts.map +1 -0
- package/dist/cjs/manage/base.js +69 -0
- package/dist/cjs/manage/base.js.map +1 -0
- package/dist/cjs/manage/data.d.ts +100 -0
- package/dist/cjs/manage/data.d.ts.map +1 -0
- package/dist/cjs/manage/data.js +141 -0
- package/dist/cjs/manage/data.js.map +1 -0
- package/dist/cjs/manage/files.d.ts +45 -0
- package/dist/cjs/manage/files.d.ts.map +1 -0
- package/dist/cjs/manage/files.js +73 -0
- package/dist/cjs/manage/files.js.map +1 -0
- package/dist/cjs/manage/functions.d.ts +48 -0
- package/dist/cjs/manage/functions.d.ts.map +1 -0
- package/dist/cjs/manage/functions.js +61 -0
- package/dist/cjs/manage/functions.js.map +1 -0
- package/dist/cjs/manage/index.d.ts +76 -0
- package/dist/cjs/manage/index.d.ts.map +1 -0
- package/dist/cjs/manage/index.js +134 -0
- package/dist/cjs/manage/index.js.map +1 -0
- package/dist/cjs/manage/lifecycle.d.ts +128 -0
- package/dist/cjs/manage/lifecycle.d.ts.map +1 -0
- package/dist/cjs/manage/lifecycle.js +167 -0
- package/dist/cjs/manage/lifecycle.js.map +1 -0
- package/dist/cjs/manage/mail.d.ts +16 -0
- package/dist/cjs/manage/mail.d.ts.map +1 -0
- package/dist/cjs/manage/mail.js +24 -0
- package/dist/cjs/manage/mail.js.map +1 -0
- package/dist/cjs/manage/observe.d.ts +149 -0
- package/dist/cjs/manage/observe.d.ts.map +1 -0
- package/dist/cjs/manage/observe.js +168 -0
- package/dist/cjs/manage/observe.js.map +1 -0
- package/dist/cjs/manage/realtime.d.ts +52 -0
- package/dist/cjs/manage/realtime.d.ts.map +1 -0
- package/dist/cjs/manage/realtime.js +71 -0
- package/dist/cjs/manage/realtime.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/realtime.d.ts +207 -0
- package/dist/cjs/realtime.d.ts.map +1 -0
- package/dist/cjs/realtime.js +704 -0
- package/dist/cjs/realtime.js.map +1 -0
- package/dist/cjs/session-store.d.ts +16 -0
- package/dist/cjs/session-store.d.ts.map +1 -0
- package/dist/cjs/session-store.js +37 -0
- package/dist/cjs/session-store.js.map +1 -0
- package/dist/cjs/typegen.d.ts +26 -0
- package/dist/cjs/typegen.d.ts.map +1 -0
- package/dist/cjs/typegen.js +167 -0
- package/dist/cjs/typegen.js.map +1 -0
- package/dist/cjs/types.d.ts +178 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +4 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/util.d.ts +27 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +115 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/cjs/version.d.ts +2 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +5 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/admin.d.ts +187 -0
- package/dist/esm/admin.d.ts.map +1 -0
- package/dist/esm/admin.js +222 -0
- package/dist/esm/admin.js.map +1 -0
- package/dist/esm/auth.d.ts +448 -0
- package/dist/esm/auth.d.ts.map +1 -0
- package/dist/esm/auth.js +1012 -0
- package/dist/esm/auth.js.map +1 -0
- package/dist/esm/cli/gen-types.d.ts +2 -0
- package/dist/esm/cli/gen-types.d.ts.map +1 -0
- package/dist/esm/cli/gen-types.js +100 -0
- package/dist/esm/cli/gen-types.js.map +1 -0
- package/dist/esm/client.d.ts +103 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +139 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/data.d.ts +220 -0
- package/dist/esm/data.d.ts.map +1 -0
- package/dist/esm/data.js +485 -0
- package/dist/esm/data.js.map +1 -0
- package/dist/esm/errors.d.ts +167 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +293 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/files.d.ts +80 -0
- package/dist/esm/files.d.ts.map +1 -0
- package/dist/esm/files.js +162 -0
- package/dist/esm/files.js.map +1 -0
- package/dist/esm/functions.d.ts +66 -0
- package/dist/esm/functions.d.ts.map +1 -0
- package/dist/esm/functions.js +103 -0
- package/dist/esm/functions.js.map +1 -0
- package/dist/esm/http.d.ts +101 -0
- package/dist/esm/http.d.ts.map +1 -0
- package/dist/esm/http.js +245 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/manage/access.d.ts +136 -0
- package/dist/esm/manage/access.d.ts.map +1 -0
- package/dist/esm/manage/access.js +155 -0
- package/dist/esm/manage/access.js.map +1 -0
- package/dist/esm/manage/automation.d.ts +106 -0
- package/dist/esm/manage/automation.d.ts.map +1 -0
- package/dist/esm/manage/automation.js +134 -0
- package/dist/esm/manage/automation.js.map +1 -0
- package/dist/esm/manage/base.d.ts +52 -0
- package/dist/esm/manage/base.d.ts.map +1 -0
- package/dist/esm/manage/base.js +63 -0
- package/dist/esm/manage/base.js.map +1 -0
- package/dist/esm/manage/data.d.ts +100 -0
- package/dist/esm/manage/data.d.ts.map +1 -0
- package/dist/esm/manage/data.js +130 -0
- package/dist/esm/manage/data.js.map +1 -0
- package/dist/esm/manage/files.d.ts +45 -0
- package/dist/esm/manage/files.d.ts.map +1 -0
- package/dist/esm/manage/files.js +68 -0
- package/dist/esm/manage/files.js.map +1 -0
- package/dist/esm/manage/functions.d.ts +48 -0
- package/dist/esm/manage/functions.d.ts.map +1 -0
- package/dist/esm/manage/functions.js +57 -0
- package/dist/esm/manage/functions.js.map +1 -0
- package/dist/esm/manage/index.d.ts +76 -0
- package/dist/esm/manage/index.d.ts.map +1 -0
- package/dist/esm/manage/index.js +115 -0
- package/dist/esm/manage/index.js.map +1 -0
- package/dist/esm/manage/lifecycle.d.ts +128 -0
- package/dist/esm/manage/lifecycle.d.ts.map +1 -0
- package/dist/esm/manage/lifecycle.js +161 -0
- package/dist/esm/manage/lifecycle.js.map +1 -0
- package/dist/esm/manage/mail.d.ts +16 -0
- package/dist/esm/manage/mail.d.ts.map +1 -0
- package/dist/esm/manage/mail.js +19 -0
- package/dist/esm/manage/mail.js.map +1 -0
- package/dist/esm/manage/observe.d.ts +149 -0
- package/dist/esm/manage/observe.d.ts.map +1 -0
- package/dist/esm/manage/observe.js +161 -0
- package/dist/esm/manage/observe.js.map +1 -0
- package/dist/esm/manage/realtime.d.ts +52 -0
- package/dist/esm/manage/realtime.d.ts.map +1 -0
- package/dist/esm/manage/realtime.js +66 -0
- package/dist/esm/manage/realtime.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/realtime.d.ts +207 -0
- package/dist/esm/realtime.d.ts.map +1 -0
- package/dist/esm/realtime.js +699 -0
- package/dist/esm/realtime.js.map +1 -0
- package/dist/esm/session-store.d.ts +16 -0
- package/dist/esm/session-store.d.ts.map +1 -0
- package/dist/esm/session-store.js +32 -0
- package/dist/esm/session-store.js.map +1 -0
- package/dist/esm/typegen.d.ts +26 -0
- package/dist/esm/typegen.d.ts.map +1 -0
- package/dist/esm/typegen.js +163 -0
- package/dist/esm/typegen.js.map +1 -0
- package/dist/esm/types.d.ts +178 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/util.d.ts +27 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +102 -0
- package/dist/esm/util.js.map +1 -0
- package/dist/esm/version.d.ts +2 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +84 -4
- package/src/admin.ts +311 -0
- package/src/auth.ts +1180 -0
- package/src/cli/gen-types.ts +105 -0
- package/src/client.ts +189 -0
- package/src/data.ts +576 -0
- package/src/errors.ts +330 -0
- package/src/files.ts +208 -0
- package/src/functions.ts +131 -0
- package/src/http.ts +354 -0
- package/src/index.ts +56 -0
- package/src/manage/access.ts +206 -0
- package/src/manage/automation.ts +162 -0
- package/src/manage/base.ts +83 -0
- package/src/manage/data.ts +159 -0
- package/src/manage/files.ts +79 -0
- package/src/manage/functions.ts +69 -0
- package/src/manage/index.ts +132 -0
- package/src/manage/lifecycle.ts +208 -0
- package/src/manage/mail.ts +22 -0
- package/src/manage/observe.ts +226 -0
- package/src/manage/realtime.ts +95 -0
- package/src/realtime.ts +765 -0
- package/src/session-store.ts +36 -0
- package/src/typegen.ts +192 -0
- package/src/types.ts +195 -0
- package/src/util.ts +114 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Service, seg } from "./base.js";
|
|
2
|
+
const wire = (rule) => {
|
|
3
|
+
const map = {
|
|
4
|
+
kind: rule.kind,
|
|
5
|
+
subscribe: rule.subscribe,
|
|
6
|
+
publish: rule.publish,
|
|
7
|
+
presence: rule.presence,
|
|
8
|
+
history: rule.history,
|
|
9
|
+
message_size_limit: rule.messageSizeLimit,
|
|
10
|
+
publish_rate_limit: rule.publishRateLimit,
|
|
11
|
+
subscription_limit: rule.subscriptionLimit,
|
|
12
|
+
retention_seconds: rule.retentionSeconds,
|
|
13
|
+
description: rule.description,
|
|
14
|
+
};
|
|
15
|
+
return Object.fromEntries(Object.entries(map).filter(([, value]) => value !== undefined));
|
|
16
|
+
};
|
|
17
|
+
/** Durable channel rules: a channel name pattern (`chat:*`), its kind, who may subscribe and publish, presence, history and limits. */
|
|
18
|
+
export class RealtimeChannels extends Service {
|
|
19
|
+
list() {
|
|
20
|
+
return this.get("/realtime-channels");
|
|
21
|
+
}
|
|
22
|
+
/** Add a rule for channels matching `pattern`. */
|
|
23
|
+
create(pattern, rule = {}) {
|
|
24
|
+
return this.post("/realtime-channels", { pattern, ...wire(rule) });
|
|
25
|
+
}
|
|
26
|
+
update(channelId, changes) {
|
|
27
|
+
return this.patch(seg("realtime-channels", channelId), wire(changes));
|
|
28
|
+
}
|
|
29
|
+
remove(channelId) {
|
|
30
|
+
return this.del(seg("realtime-channels", channelId));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Dashboards: read-only boards over your data, defined as JSON, optionally published at a public address. */
|
|
34
|
+
export class Dashboards extends Service {
|
|
35
|
+
list() {
|
|
36
|
+
return this.get("/dashboards");
|
|
37
|
+
}
|
|
38
|
+
/** One dashboard with its full definition. */
|
|
39
|
+
getOne(dashboardId) {
|
|
40
|
+
return this.get(seg("dashboards", dashboardId));
|
|
41
|
+
}
|
|
42
|
+
/** Make a dashboard (`name`: lowercase letters, digits and dashes). The definition is checked; a problem comes back as a 422 with the list. */
|
|
43
|
+
create(name, options = {}) {
|
|
44
|
+
return this.post("/dashboards", {
|
|
45
|
+
name,
|
|
46
|
+
title: options.title ?? "",
|
|
47
|
+
description: options.description ?? "",
|
|
48
|
+
definition: options.definition ?? { pages: [] },
|
|
49
|
+
enabled: options.enabled ?? true,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
update(dashboardId, changes) {
|
|
53
|
+
return this.patch(seg("dashboards", dashboardId), Object.fromEntries(Object.entries(changes).filter(([, value]) => value !== undefined)));
|
|
54
|
+
}
|
|
55
|
+
remove(dashboardId) {
|
|
56
|
+
return this.del(seg("dashboards", dashboardId));
|
|
57
|
+
}
|
|
58
|
+
/** Turn the public page on or off. Turning it on needs the environment's publishable key once (it is sealed and never returned). */
|
|
59
|
+
publish(dashboardId, options) {
|
|
60
|
+
return this.put(seg("dashboards", dashboardId, "publish"), {
|
|
61
|
+
public: options.public,
|
|
62
|
+
...(options.publishableKey ? { publishable_key: options.publishableKey } : {}),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=realtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../../src/manage/realtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import type { AuthClient } from "./auth.js";
|
|
2
|
+
import { RealtimeError } from "./errors.js";
|
|
3
|
+
import type { HttpClient } from "./http.js";
|
|
4
|
+
import type { ChannelMessage, PresenceMember } from "./types.js";
|
|
5
|
+
export type RealtimeStatus = "idle" | "connecting" | "open" | "reconnecting" | "closed";
|
|
6
|
+
/** The slice of the WebSocket API the client uses; the browser's, Node's and `ws` all fit. */
|
|
7
|
+
export interface WebSocketLike {
|
|
8
|
+
readyState: number;
|
|
9
|
+
send(data: string): void;
|
|
10
|
+
close(code?: number, reason?: string): void;
|
|
11
|
+
onopen: ((event: unknown) => void) | null;
|
|
12
|
+
onmessage: ((event: {
|
|
13
|
+
data: unknown;
|
|
14
|
+
}) => void) | null;
|
|
15
|
+
onclose: ((event: {
|
|
16
|
+
code: number;
|
|
17
|
+
reason?: string;
|
|
18
|
+
}) => void) | null;
|
|
19
|
+
onerror: ((event: unknown) => void) | null;
|
|
20
|
+
}
|
|
21
|
+
export type WebSocketConstructor = new (url: string) => WebSocketLike;
|
|
22
|
+
export interface RealtimeOptions {
|
|
23
|
+
/** A WebSocket implementation. Default: the global one (browsers, Node 22+). On older Node pass `ws`. */
|
|
24
|
+
webSocket?: WebSocketConstructor;
|
|
25
|
+
/** Seconds between pings. Default `25`. The connection is recycled after two silent intervals. */
|
|
26
|
+
heartbeatSeconds?: number;
|
|
27
|
+
/** Milliseconds to wait for the server to acknowledge a request. Default `10000`. */
|
|
28
|
+
ackTimeoutMs?: number;
|
|
29
|
+
/** Milliseconds to wait for the connection to open. Default `10000`. */
|
|
30
|
+
connectTimeoutMs?: number;
|
|
31
|
+
/** Reconnect after a drop. `false` to stay closed. */
|
|
32
|
+
reconnect?: false | {
|
|
33
|
+
baseDelayMs?: number;
|
|
34
|
+
maxDelayMs?: number;
|
|
35
|
+
maxAttempts?: number;
|
|
36
|
+
};
|
|
37
|
+
/** Called with protocol-level surprises (unknown frames, invalid JSON). */
|
|
38
|
+
onProtocolError?: (detail: string) => void;
|
|
39
|
+
}
|
|
40
|
+
export interface ChannelOptions {
|
|
41
|
+
/** Your presence data: shown to everyone on the channel while you are subscribed. Needs presence enabled by the channel's rule. */
|
|
42
|
+
presence?: Record<string, unknown>;
|
|
43
|
+
/**
|
|
44
|
+
* After a reconnect, fetch this many recent messages and deliver the ones you missed
|
|
45
|
+
* (de-duplicated by id). `0`/omitted: only messages sent while connected are delivered.
|
|
46
|
+
*/
|
|
47
|
+
replay?: number;
|
|
48
|
+
}
|
|
49
|
+
export interface PresenceChange<M> {
|
|
50
|
+
joins: PresenceMember<M>[];
|
|
51
|
+
leaves: PresenceMember<M>[];
|
|
52
|
+
/** Everyone present after the change. */
|
|
53
|
+
members: PresenceMember<M>[];
|
|
54
|
+
}
|
|
55
|
+
export interface ChannelEvents<T, M> {
|
|
56
|
+
message: ChannelMessage<T>;
|
|
57
|
+
presence: PresenceChange<M>;
|
|
58
|
+
subscribed: undefined;
|
|
59
|
+
/** The channel stopped receiving: unsubscribed, or the connection was lost (it resubscribes by itself when it can). */
|
|
60
|
+
closed: {
|
|
61
|
+
reason: string;
|
|
62
|
+
};
|
|
63
|
+
error: RealtimeError;
|
|
64
|
+
}
|
|
65
|
+
type Handler<V> = (value: V) => void;
|
|
66
|
+
export declare class RealtimeClient {
|
|
67
|
+
private readonly http;
|
|
68
|
+
private readonly auth;
|
|
69
|
+
private readonly options;
|
|
70
|
+
private socket;
|
|
71
|
+
private currentStatus;
|
|
72
|
+
private readonly channels;
|
|
73
|
+
private readonly pending;
|
|
74
|
+
private readonly statusListeners;
|
|
75
|
+
private refs;
|
|
76
|
+
private attempts;
|
|
77
|
+
private manual;
|
|
78
|
+
private connecting;
|
|
79
|
+
private heartbeat;
|
|
80
|
+
private reconnectTimer;
|
|
81
|
+
private lastActivity;
|
|
82
|
+
private triedRefresh;
|
|
83
|
+
private authSubscription;
|
|
84
|
+
/** The server's id for this connection, once welcomed. */
|
|
85
|
+
connectionId: string | null;
|
|
86
|
+
constructor(http: HttpClient, auth: AuthClient | null, options?: RealtimeOptions & {
|
|
87
|
+
project?: string | undefined;
|
|
88
|
+
environment?: string | undefined;
|
|
89
|
+
});
|
|
90
|
+
get status(): RealtimeStatus;
|
|
91
|
+
onStatusChange(handler: Handler<RealtimeStatus>): () => void;
|
|
92
|
+
private setStatus;
|
|
93
|
+
/**
|
|
94
|
+
* A channel by name. Asking twice returns the same object, so listeners are shared.
|
|
95
|
+
* Channel names are authorised by the project's realtime rules.
|
|
96
|
+
*/
|
|
97
|
+
channel<T = unknown, M = Record<string, unknown>>(name: string, options?: ChannelOptions): RealtimeChannel<T, M>;
|
|
98
|
+
/** Forget a channel object once it is unsubscribed. */
|
|
99
|
+
forget(name: string): void;
|
|
100
|
+
private url;
|
|
101
|
+
/** Open the connection (channels do this for you). Resolves once the server has welcomed it. */
|
|
102
|
+
connect(): Promise<void>;
|
|
103
|
+
private open;
|
|
104
|
+
/** Close the connection and stop reconnecting. Channels keep their listeners and rejoin on the next `connect()`. */
|
|
105
|
+
disconnect(): void;
|
|
106
|
+
private onClose;
|
|
107
|
+
private scheduleReconnect;
|
|
108
|
+
private startHeartbeat;
|
|
109
|
+
private stopHeartbeat;
|
|
110
|
+
/** Tell the server about a refreshed (or removed) token without reconnecting. */
|
|
111
|
+
private watchAuth;
|
|
112
|
+
private resubscribe;
|
|
113
|
+
private parse;
|
|
114
|
+
private onMessage;
|
|
115
|
+
private take;
|
|
116
|
+
private failPending;
|
|
117
|
+
/** Send a frame and wait for its acknowledgement (or, for `history`, its answer). */
|
|
118
|
+
request(frame: Record<string, unknown>, expect?: "ack" | "history"): Promise<Record<string, unknown>>;
|
|
119
|
+
/** Publish from anywhere, without a socket. The channel's `publish` rule applies. */
|
|
120
|
+
publish(channel: string, event: string, payload?: unknown): Promise<{
|
|
121
|
+
id: string;
|
|
122
|
+
channel: string;
|
|
123
|
+
event: string;
|
|
124
|
+
}>;
|
|
125
|
+
/**
|
|
126
|
+
* Listen to channels over Server-Sent Events: one-way, over plain HTTP, with no socket to manage. Iterate the frames
|
|
127
|
+
* (`welcome`, `message`, `presence_diff`) until you `break` or abort the `signal`. Publish with {@link publish}. At most 20 channels
|
|
128
|
+
* per stream; the signed-in user, if any, is who is listening.
|
|
129
|
+
*
|
|
130
|
+
* ```ts
|
|
131
|
+
* for await (const frame of pawabase.realtime.stream(["chat:lobby"])) if (frame.type === "message") show(frame.payload);
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
stream(channels: string | string[], options?: {
|
|
135
|
+
signal?: AbortSignal;
|
|
136
|
+
}): AsyncGenerator<Record<string, any>>;
|
|
137
|
+
/** Who is on a channel right now. */
|
|
138
|
+
presence<M = Record<string, unknown>>(channel: string): Promise<PresenceMember<M>[]>;
|
|
139
|
+
/** Recent messages on a channel, oldest first. */
|
|
140
|
+
history<T = unknown>(channel: string, limit?: number): Promise<ChannelMessage<T>[]>;
|
|
141
|
+
/**
|
|
142
|
+
* Wait until the socket is really open, or `ms` pass: after a drop the status can lag the
|
|
143
|
+
* socket for a moment, and a reconnect takes a few. Connects first when idle or closed.
|
|
144
|
+
*/
|
|
145
|
+
whenOpen(ms?: number): Promise<void>;
|
|
146
|
+
}
|
|
147
|
+
/** One named channel: receive messages and presence, publish, and see who is here. */
|
|
148
|
+
export declare class RealtimeChannel<T = unknown, M = Record<string, unknown>> {
|
|
149
|
+
private readonly client;
|
|
150
|
+
readonly name: string;
|
|
151
|
+
private readonly handlers;
|
|
152
|
+
private options;
|
|
153
|
+
private joined;
|
|
154
|
+
private joining;
|
|
155
|
+
private wanted;
|
|
156
|
+
private readonly members;
|
|
157
|
+
private readonly seen;
|
|
158
|
+
private readonly order;
|
|
159
|
+
private readonly queue;
|
|
160
|
+
private readonly waiters;
|
|
161
|
+
private ended;
|
|
162
|
+
constructor(client: RealtimeClient, name: string, options: ChannelOptions);
|
|
163
|
+
/** @internal */
|
|
164
|
+
configure(options: ChannelOptions): void;
|
|
165
|
+
/** True while the channel is subscribed on the open connection. */
|
|
166
|
+
get subscribed(): boolean;
|
|
167
|
+
/** @internal Whether the channel should rejoin after a reconnect. */
|
|
168
|
+
get wantsJoin(): boolean;
|
|
169
|
+
/** Listen to `message`, `presence`, `subscribed`, `closed` or `error`. Returns a function that stops listening. */
|
|
170
|
+
on<K extends keyof ChannelEvents<T, M>>(event: K, handler: Handler<ChannelEvents<T, M>[K]>): () => void;
|
|
171
|
+
/** Listen to messages with one event name only. */
|
|
172
|
+
onEvent(event: string, handler: Handler<ChannelMessage<T>>): () => void;
|
|
173
|
+
private emit;
|
|
174
|
+
/**
|
|
175
|
+
* Start receiving. Connects first if needed. Rejects with a {@link RealtimeError} when the
|
|
176
|
+
* channel's rule refuses (`code: "forbidden"`). Safe to call twice.
|
|
177
|
+
*/
|
|
178
|
+
subscribe(): Promise<this>;
|
|
179
|
+
/** @internal Rejoin after a reconnect. */
|
|
180
|
+
rejoin(): Promise<void>;
|
|
181
|
+
private join;
|
|
182
|
+
/** Stop receiving. Pending iterators end. */
|
|
183
|
+
unsubscribe(): Promise<void>;
|
|
184
|
+
/** Publish to the channel over the socket. Resolves with the message id once the server accepted it. */
|
|
185
|
+
send(event: string, payload?: T): Promise<{
|
|
186
|
+
id: string;
|
|
187
|
+
}>;
|
|
188
|
+
/** Set the presence data others see for you. Subscribe first. */
|
|
189
|
+
track(meta: Record<string, unknown>): Promise<void>;
|
|
190
|
+
/** Recent messages, oldest first. */
|
|
191
|
+
history(limit?: number): Promise<ChannelMessage<T>[]>;
|
|
192
|
+
/** Who is on the channel now, as last told by the server. Empty unless presence is enabled for it. */
|
|
193
|
+
presenceState(): PresenceMember<M>[];
|
|
194
|
+
/** @internal */
|
|
195
|
+
deliver(message: ChannelMessage): void;
|
|
196
|
+
/** @internal */
|
|
197
|
+
setPresence(list: PresenceMember[]): void;
|
|
198
|
+
/** @internal */
|
|
199
|
+
applyPresence(joins: PresenceMember[], leaves: PresenceMember[]): void;
|
|
200
|
+
/** @internal The connection dropped; the channel will rejoin by itself if it can. */
|
|
201
|
+
markClosed(reason: string): void;
|
|
202
|
+
private end;
|
|
203
|
+
/** Iterate messages: `for await (const message of channel) { … }`. Ends on `unsubscribe()`. */
|
|
204
|
+
[Symbol.asyncIterator](): AsyncIterator<ChannelMessage<T>>;
|
|
205
|
+
}
|
|
206
|
+
export {};
|
|
207
|
+
//# sourceMappingURL=realtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/realtime.ts"],"names":[],"mappings":"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"}
|