@pawabase/client 0.0.0-stage → 0.1.3

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 (243) hide show
  1. package/README.md +313 -2
  2. package/dist/cjs/admin.d.ts +187 -0
  3. package/dist/cjs/admin.d.ts.map +1 -0
  4. package/dist/cjs/admin.js +235 -0
  5. package/dist/cjs/admin.js.map +1 -0
  6. package/dist/cjs/auth.d.ts +448 -0
  7. package/dist/cjs/auth.d.ts.map +1 -0
  8. package/dist/cjs/auth.js +1016 -0
  9. package/dist/cjs/auth.js.map +1 -0
  10. package/dist/cjs/client.d.ts +103 -0
  11. package/dist/cjs/client.d.ts.map +1 -0
  12. package/dist/cjs/client.js +144 -0
  13. package/dist/cjs/client.js.map +1 -0
  14. package/dist/cjs/data.d.ts +220 -0
  15. package/dist/cjs/data.d.ts.map +1 -0
  16. package/dist/cjs/data.js +490 -0
  17. package/dist/cjs/data.js.map +1 -0
  18. package/dist/cjs/errors.d.ts +167 -0
  19. package/dist/cjs/errors.d.ts.map +1 -0
  20. package/dist/cjs/errors.js +316 -0
  21. package/dist/cjs/errors.js.map +1 -0
  22. package/dist/cjs/files.d.ts +80 -0
  23. package/dist/cjs/files.d.ts.map +1 -0
  24. package/dist/cjs/files.js +167 -0
  25. package/dist/cjs/files.js.map +1 -0
  26. package/dist/cjs/functions.d.ts +66 -0
  27. package/dist/cjs/functions.d.ts.map +1 -0
  28. package/dist/cjs/functions.js +109 -0
  29. package/dist/cjs/functions.js.map +1 -0
  30. package/dist/cjs/http.d.ts +101 -0
  31. package/dist/cjs/http.d.ts.map +1 -0
  32. package/dist/cjs/http.js +249 -0
  33. package/dist/cjs/http.js.map +1 -0
  34. package/dist/cjs/index.d.ts +22 -0
  35. package/dist/cjs/index.d.ts.map +1 -0
  36. package/dist/cjs/index.js +45 -0
  37. package/dist/cjs/index.js.map +1 -0
  38. package/dist/cjs/manage/access.d.ts +136 -0
  39. package/dist/cjs/manage/access.d.ts.map +1 -0
  40. package/dist/cjs/manage/access.js +162 -0
  41. package/dist/cjs/manage/access.js.map +1 -0
  42. package/dist/cjs/manage/automation.d.ts +106 -0
  43. package/dist/cjs/manage/automation.d.ts.map +1 -0
  44. package/dist/cjs/manage/automation.js +144 -0
  45. package/dist/cjs/manage/automation.js.map +1 -0
  46. package/dist/cjs/manage/base.d.ts +52 -0
  47. package/dist/cjs/manage/base.d.ts.map +1 -0
  48. package/dist/cjs/manage/base.js +69 -0
  49. package/dist/cjs/manage/base.js.map +1 -0
  50. package/dist/cjs/manage/data.d.ts +100 -0
  51. package/dist/cjs/manage/data.d.ts.map +1 -0
  52. package/dist/cjs/manage/data.js +141 -0
  53. package/dist/cjs/manage/data.js.map +1 -0
  54. package/dist/cjs/manage/files.d.ts +45 -0
  55. package/dist/cjs/manage/files.d.ts.map +1 -0
  56. package/dist/cjs/manage/files.js +73 -0
  57. package/dist/cjs/manage/files.js.map +1 -0
  58. package/dist/cjs/manage/functions.d.ts +48 -0
  59. package/dist/cjs/manage/functions.d.ts.map +1 -0
  60. package/dist/cjs/manage/functions.js +61 -0
  61. package/dist/cjs/manage/functions.js.map +1 -0
  62. package/dist/cjs/manage/index.d.ts +76 -0
  63. package/dist/cjs/manage/index.d.ts.map +1 -0
  64. package/dist/cjs/manage/index.js +134 -0
  65. package/dist/cjs/manage/index.js.map +1 -0
  66. package/dist/cjs/manage/lifecycle.d.ts +128 -0
  67. package/dist/cjs/manage/lifecycle.d.ts.map +1 -0
  68. package/dist/cjs/manage/lifecycle.js +167 -0
  69. package/dist/cjs/manage/lifecycle.js.map +1 -0
  70. package/dist/cjs/manage/mail.d.ts +16 -0
  71. package/dist/cjs/manage/mail.d.ts.map +1 -0
  72. package/dist/cjs/manage/mail.js +24 -0
  73. package/dist/cjs/manage/mail.js.map +1 -0
  74. package/dist/cjs/manage/observe.d.ts +149 -0
  75. package/dist/cjs/manage/observe.d.ts.map +1 -0
  76. package/dist/cjs/manage/observe.js +168 -0
  77. package/dist/cjs/manage/observe.js.map +1 -0
  78. package/dist/cjs/manage/realtime.d.ts +52 -0
  79. package/dist/cjs/manage/realtime.d.ts.map +1 -0
  80. package/dist/cjs/manage/realtime.js +71 -0
  81. package/dist/cjs/manage/realtime.js.map +1 -0
  82. package/dist/cjs/package.json +1 -0
  83. package/dist/cjs/realtime.d.ts +207 -0
  84. package/dist/cjs/realtime.d.ts.map +1 -0
  85. package/dist/cjs/realtime.js +704 -0
  86. package/dist/cjs/realtime.js.map +1 -0
  87. package/dist/cjs/session-store.d.ts +16 -0
  88. package/dist/cjs/session-store.d.ts.map +1 -0
  89. package/dist/cjs/session-store.js +37 -0
  90. package/dist/cjs/session-store.js.map +1 -0
  91. package/dist/cjs/typegen.d.ts +26 -0
  92. package/dist/cjs/typegen.d.ts.map +1 -0
  93. package/dist/cjs/typegen.js +167 -0
  94. package/dist/cjs/typegen.js.map +1 -0
  95. package/dist/cjs/types.d.ts +178 -0
  96. package/dist/cjs/types.d.ts.map +1 -0
  97. package/dist/cjs/types.js +4 -0
  98. package/dist/cjs/types.js.map +1 -0
  99. package/dist/cjs/util.d.ts +27 -0
  100. package/dist/cjs/util.d.ts.map +1 -0
  101. package/dist/cjs/util.js +115 -0
  102. package/dist/cjs/util.js.map +1 -0
  103. package/dist/cjs/version.d.ts +2 -0
  104. package/dist/cjs/version.d.ts.map +1 -0
  105. package/dist/cjs/version.js +5 -0
  106. package/dist/cjs/version.js.map +1 -0
  107. package/dist/esm/admin.d.ts +187 -0
  108. package/dist/esm/admin.d.ts.map +1 -0
  109. package/dist/esm/admin.js +222 -0
  110. package/dist/esm/admin.js.map +1 -0
  111. package/dist/esm/auth.d.ts +448 -0
  112. package/dist/esm/auth.d.ts.map +1 -0
  113. package/dist/esm/auth.js +1012 -0
  114. package/dist/esm/auth.js.map +1 -0
  115. package/dist/esm/cli/gen-types.d.ts +2 -0
  116. package/dist/esm/cli/gen-types.d.ts.map +1 -0
  117. package/dist/esm/cli/gen-types.js +100 -0
  118. package/dist/esm/cli/gen-types.js.map +1 -0
  119. package/dist/esm/client.d.ts +103 -0
  120. package/dist/esm/client.d.ts.map +1 -0
  121. package/dist/esm/client.js +139 -0
  122. package/dist/esm/client.js.map +1 -0
  123. package/dist/esm/data.d.ts +220 -0
  124. package/dist/esm/data.d.ts.map +1 -0
  125. package/dist/esm/data.js +485 -0
  126. package/dist/esm/data.js.map +1 -0
  127. package/dist/esm/errors.d.ts +167 -0
  128. package/dist/esm/errors.d.ts.map +1 -0
  129. package/dist/esm/errors.js +293 -0
  130. package/dist/esm/errors.js.map +1 -0
  131. package/dist/esm/files.d.ts +80 -0
  132. package/dist/esm/files.d.ts.map +1 -0
  133. package/dist/esm/files.js +162 -0
  134. package/dist/esm/files.js.map +1 -0
  135. package/dist/esm/functions.d.ts +66 -0
  136. package/dist/esm/functions.d.ts.map +1 -0
  137. package/dist/esm/functions.js +103 -0
  138. package/dist/esm/functions.js.map +1 -0
  139. package/dist/esm/http.d.ts +101 -0
  140. package/dist/esm/http.d.ts.map +1 -0
  141. package/dist/esm/http.js +245 -0
  142. package/dist/esm/http.js.map +1 -0
  143. package/dist/esm/index.d.ts +22 -0
  144. package/dist/esm/index.d.ts.map +1 -0
  145. package/dist/esm/index.js +12 -0
  146. package/dist/esm/index.js.map +1 -0
  147. package/dist/esm/manage/access.d.ts +136 -0
  148. package/dist/esm/manage/access.d.ts.map +1 -0
  149. package/dist/esm/manage/access.js +155 -0
  150. package/dist/esm/manage/access.js.map +1 -0
  151. package/dist/esm/manage/automation.d.ts +106 -0
  152. package/dist/esm/manage/automation.d.ts.map +1 -0
  153. package/dist/esm/manage/automation.js +134 -0
  154. package/dist/esm/manage/automation.js.map +1 -0
  155. package/dist/esm/manage/base.d.ts +52 -0
  156. package/dist/esm/manage/base.d.ts.map +1 -0
  157. package/dist/esm/manage/base.js +63 -0
  158. package/dist/esm/manage/base.js.map +1 -0
  159. package/dist/esm/manage/data.d.ts +100 -0
  160. package/dist/esm/manage/data.d.ts.map +1 -0
  161. package/dist/esm/manage/data.js +130 -0
  162. package/dist/esm/manage/data.js.map +1 -0
  163. package/dist/esm/manage/files.d.ts +45 -0
  164. package/dist/esm/manage/files.d.ts.map +1 -0
  165. package/dist/esm/manage/files.js +68 -0
  166. package/dist/esm/manage/files.js.map +1 -0
  167. package/dist/esm/manage/functions.d.ts +48 -0
  168. package/dist/esm/manage/functions.d.ts.map +1 -0
  169. package/dist/esm/manage/functions.js +57 -0
  170. package/dist/esm/manage/functions.js.map +1 -0
  171. package/dist/esm/manage/index.d.ts +76 -0
  172. package/dist/esm/manage/index.d.ts.map +1 -0
  173. package/dist/esm/manage/index.js +115 -0
  174. package/dist/esm/manage/index.js.map +1 -0
  175. package/dist/esm/manage/lifecycle.d.ts +128 -0
  176. package/dist/esm/manage/lifecycle.d.ts.map +1 -0
  177. package/dist/esm/manage/lifecycle.js +161 -0
  178. package/dist/esm/manage/lifecycle.js.map +1 -0
  179. package/dist/esm/manage/mail.d.ts +16 -0
  180. package/dist/esm/manage/mail.d.ts.map +1 -0
  181. package/dist/esm/manage/mail.js +19 -0
  182. package/dist/esm/manage/mail.js.map +1 -0
  183. package/dist/esm/manage/observe.d.ts +149 -0
  184. package/dist/esm/manage/observe.d.ts.map +1 -0
  185. package/dist/esm/manage/observe.js +161 -0
  186. package/dist/esm/manage/observe.js.map +1 -0
  187. package/dist/esm/manage/realtime.d.ts +52 -0
  188. package/dist/esm/manage/realtime.d.ts.map +1 -0
  189. package/dist/esm/manage/realtime.js +66 -0
  190. package/dist/esm/manage/realtime.js.map +1 -0
  191. package/dist/esm/package.json +1 -0
  192. package/dist/esm/realtime.d.ts +207 -0
  193. package/dist/esm/realtime.d.ts.map +1 -0
  194. package/dist/esm/realtime.js +699 -0
  195. package/dist/esm/realtime.js.map +1 -0
  196. package/dist/esm/session-store.d.ts +16 -0
  197. package/dist/esm/session-store.d.ts.map +1 -0
  198. package/dist/esm/session-store.js +32 -0
  199. package/dist/esm/session-store.js.map +1 -0
  200. package/dist/esm/typegen.d.ts +26 -0
  201. package/dist/esm/typegen.d.ts.map +1 -0
  202. package/dist/esm/typegen.js +163 -0
  203. package/dist/esm/typegen.js.map +1 -0
  204. package/dist/esm/types.d.ts +178 -0
  205. package/dist/esm/types.d.ts.map +1 -0
  206. package/dist/esm/types.js +3 -0
  207. package/dist/esm/types.js.map +1 -0
  208. package/dist/esm/util.d.ts +27 -0
  209. package/dist/esm/util.d.ts.map +1 -0
  210. package/dist/esm/util.js +102 -0
  211. package/dist/esm/util.js.map +1 -0
  212. package/dist/esm/version.d.ts +2 -0
  213. package/dist/esm/version.d.ts.map +1 -0
  214. package/dist/esm/version.js +2 -0
  215. package/dist/esm/version.js.map +1 -0
  216. package/package.json +92 -4
  217. package/src/admin.ts +311 -0
  218. package/src/auth.ts +1180 -0
  219. package/src/cli/gen-types.ts +105 -0
  220. package/src/client.ts +189 -0
  221. package/src/data.ts +576 -0
  222. package/src/errors.ts +330 -0
  223. package/src/files.ts +208 -0
  224. package/src/functions.ts +131 -0
  225. package/src/http.ts +354 -0
  226. package/src/index.ts +56 -0
  227. package/src/manage/access.ts +206 -0
  228. package/src/manage/automation.ts +162 -0
  229. package/src/manage/base.ts +83 -0
  230. package/src/manage/data.ts +159 -0
  231. package/src/manage/files.ts +79 -0
  232. package/src/manage/functions.ts +69 -0
  233. package/src/manage/index.ts +132 -0
  234. package/src/manage/lifecycle.ts +208 -0
  235. package/src/manage/mail.ts +22 -0
  236. package/src/manage/observe.ts +226 -0
  237. package/src/manage/realtime.ts +95 -0
  238. package/src/realtime.ts +765 -0
  239. package/src/session-store.ts +36 -0
  240. package/src/typegen.ts +192 -0
  241. package/src/types.ts +195 -0
  242. package/src/util.ts +114 -0
  243. package/src/version.ts +1 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Health = exports.StatusPage = exports.Alarms = exports.Observability = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const iso = (value) => (value instanceof Date ? value.toISOString() : value);
6
+ class Observability extends base_js_1.Service {
7
+ /** The environment at a glance: traffic, errors, latency, workers, storage. */
8
+ overview(options = {}) {
9
+ return this.get("/overview", options);
10
+ }
11
+ /** Traffic over a `range` (`1h`, `24h`, `7d`…) or between `from` and `to`. */
12
+ analytics(options = {}) {
13
+ return this.get("/analytics", { range: options.range, from: iso(options.from), to: iso(options.to) });
14
+ }
15
+ /** Recent requests. `status` is an exact code or a class (`5xx`); `search` matches the path. */
16
+ requests(options = {}) {
17
+ const { requestId, ...rest } = options;
18
+ return this.get("/requests", { ...rest, request_id: requestId });
19
+ }
20
+ /** One request: its logs, database calls, spans, and the traceback if it failed. */
21
+ request(requestId) {
22
+ return this.get((0, base_js_1.seg)("requests", requestId));
23
+ }
24
+ /** Search application and access logs. `after` continues from the last entry you saw. */
25
+ logs(options = {}) {
26
+ return this.get("/logs", { q: options.q || undefined, minutes: options.minutes ?? 60, limit: options.limit ?? 200, after: iso(options.after) });
27
+ }
28
+ errors(options = {}) {
29
+ return this.get("/observability/errors", options);
30
+ }
31
+ /** Per-route traffic, latency and errors. */
32
+ routes(options = {}) {
33
+ return this.get("/observability/routes", options);
34
+ }
35
+ route(method, route, options = {}) {
36
+ return this.get("/observability/routes/detail", { method, route, ...options });
37
+ }
38
+ /** CPU, memory and connection figures over time. */
39
+ system(options = {}) {
40
+ return this.get("/observability/system", options);
41
+ }
42
+ /** Findings the platform spotted: slow routes, missing indexes, noisy errors. */
43
+ advisor(options = {}) {
44
+ return this.get("/advisor", options);
45
+ }
46
+ /** Counters per minute. */
47
+ metrics(options = {}) {
48
+ return this.get("/metrics", options);
49
+ }
50
+ /** The metrics you can chart or alarm on. */
51
+ metricCatalog() {
52
+ return this.get("/metric-catalog");
53
+ }
54
+ /** One metric over time; `comparePrevious` adds the span before it. */
55
+ metricSeries(metric = "requests", options = {}) {
56
+ return this.get("/metric-series", { metric, minutes: options.minutes ?? 60, period: options.period, compare: options.comparePrevious ? "previous" : undefined });
57
+ }
58
+ workers() {
59
+ return this.get("/workers");
60
+ }
61
+ /** What the environment is running with. */
62
+ configuration() {
63
+ return this.get("/configuration");
64
+ }
65
+ capacity() {
66
+ return this.get("/capacity");
67
+ }
68
+ }
69
+ exports.Observability = Observability;
70
+ /** Alarms on a metric: when it crosses `threshold` for `breachesNeeded` checks in a row, `recipients` are mailed. */
71
+ class Alarms extends base_js_1.Service {
72
+ list() {
73
+ return this.get("/alarms");
74
+ }
75
+ create(alarm) {
76
+ return this.post("/alarms", {
77
+ name: alarm.name,
78
+ metric: alarm.metric,
79
+ threshold: alarm.threshold,
80
+ comparison: alarm.comparison ?? "gt",
81
+ window_minutes: alarm.windowMinutes ?? 5,
82
+ breaches_needed: alarm.breachesNeeded ?? 1,
83
+ recipients: alarm.recipients ?? [],
84
+ description: alarm.description ?? "",
85
+ enabled: alarm.enabled ?? true,
86
+ renotify_minutes: alarm.renotifyMinutes ?? 0,
87
+ });
88
+ }
89
+ /** Change some fields, using the server's names (`mute_minutes: 60` silences it for an hour, `0` un-mutes). */
90
+ update(alarmId, changes) {
91
+ return this.patch((0, base_js_1.seg)("alarms", alarmId), changes);
92
+ }
93
+ remove(alarmId) {
94
+ return this.del((0, base_js_1.seg)("alarms", alarmId));
95
+ }
96
+ /** Evaluate it now. */
97
+ check(alarmId) {
98
+ return this.post((0, base_js_1.seg)("alarms", alarmId, "check"));
99
+ }
100
+ /** Send the notification mail now. */
101
+ test(alarmId) {
102
+ return this.post((0, base_js_1.seg)("alarms", alarmId, "test"));
103
+ }
104
+ /** When alarms fired and recovered: one alarm's, or all. */
105
+ history(alarmId) {
106
+ return alarmId ? this.get((0, base_js_1.seg)("alarms", alarmId, "events")) : this.get("/alarm-events");
107
+ }
108
+ }
109
+ exports.Alarms = Alarms;
110
+ /** The public status page and its incidents. */
111
+ class StatusPage extends base_js_1.Service {
112
+ page() {
113
+ return this.get("/status-page");
114
+ }
115
+ configure(options = {}) {
116
+ return this.put("/status-page", {
117
+ enabled: options.enabled ?? true,
118
+ title: options.title ?? "Status",
119
+ description: options.description ?? "",
120
+ contact_url: options.contactUrl ?? "",
121
+ components: options.components ?? [],
122
+ });
123
+ }
124
+ incidents() {
125
+ return this.get("/incidents");
126
+ }
127
+ /** `status`: investigating, identified, monitoring, resolved. `impact`: none, minor, major, critical. */
128
+ openIncident(title, options = {}) {
129
+ return this.post("/incidents", {
130
+ title,
131
+ message: options.message ?? "",
132
+ status: options.status ?? "investigating",
133
+ impact: options.impact ?? "minor",
134
+ components: options.components ?? [],
135
+ });
136
+ }
137
+ updateIncident(incidentId, message, options) {
138
+ return this.post((0, base_js_1.seg)("incidents", incidentId, "updates"), { status: options.status, message, impact: options.impact });
139
+ }
140
+ removeIncident(incidentId) {
141
+ return this.del((0, base_js_1.seg)("incidents", incidentId));
142
+ }
143
+ }
144
+ exports.StatusPage = StatusPage;
145
+ /** Service health, plan usage and the platform's own audit trail. */
146
+ class Health extends base_js_1.Service {
147
+ /** Each service (database, cache, queue, storage, mail…) with its state, latency and error rate. */
148
+ services() {
149
+ return this.get("/service-health");
150
+ }
151
+ /** Each plan limit and how much of it is used. */
152
+ usage() {
153
+ return this.get("/plan-usage");
154
+ }
155
+ retryPolicies() {
156
+ return this.project("GET", "/retry-policies");
157
+ }
158
+ /** Management-plane changes: who did what, to what, when. */
159
+ audit(filter = {}) {
160
+ return this.project("GET", "/audit", { query: { ...filter, since: iso(filter.since), until: iso(filter.until) } });
161
+ }
162
+ /** The audit trail as a file's contents (`jsonl` or `csv`), for the same filters as {@link audit}. */
163
+ exportAudit(filter = {}) {
164
+ return this.project("GET", "/audit/export", { query: { ...filter, format: filter.format ?? "jsonl", since: iso(filter.since), until: iso(filter.until) }, parse: "text" });
165
+ }
166
+ }
167
+ exports.Health = Health;
168
+ //# sourceMappingURL=observe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe.js","sourceRoot":"","sources":["../../../src/manage/observe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { type Api, Service } from "./base.js";
2
+ export type ChannelKind = "public" | "private" | "presence" | "protected" | "ephemeral" | "durable";
3
+ export interface ChannelRule {
4
+ kind?: ChannelKind;
5
+ /** The policy that decides who may subscribe. Default `authenticated`. */
6
+ subscribe?: string;
7
+ /** The policy that decides who may publish. Default `authenticated`. */
8
+ publish?: string;
9
+ presence?: boolean;
10
+ /** How many recent messages are kept (0 to 1000). */
11
+ history?: number;
12
+ /** A limit of `0` means none. */
13
+ messageSizeLimit?: number;
14
+ publishRateLimit?: number;
15
+ subscriptionLimit?: number;
16
+ retentionSeconds?: number;
17
+ description?: string;
18
+ }
19
+ /** Durable channel rules: a channel name pattern (`chat:*`), its kind, who may subscribe and publish, presence, history and limits. */
20
+ export declare class RealtimeChannels extends Service {
21
+ list(): Promise<Api>;
22
+ /** Add a rule for channels matching `pattern`. */
23
+ create(pattern: string, rule?: ChannelRule): Promise<Api>;
24
+ update(channelId: string, changes: ChannelRule): Promise<Api>;
25
+ remove(channelId: string): Promise<Api>;
26
+ }
27
+ /** Dashboards: read-only boards over your data, defined as JSON, optionally published at a public address. */
28
+ export declare class Dashboards extends Service {
29
+ list(): Promise<Api>;
30
+ /** One dashboard with its full definition. */
31
+ getOne(dashboardId: string): Promise<Api>;
32
+ /** Make a dashboard (`name`: lowercase letters, digits and dashes). The definition is checked; a problem comes back as a 422 with the list. */
33
+ create(name: string, options?: {
34
+ definition?: Record<string, unknown>;
35
+ title?: string;
36
+ description?: string;
37
+ enabled?: boolean;
38
+ }): Promise<Api>;
39
+ update(dashboardId: string, changes: {
40
+ title?: string;
41
+ description?: string;
42
+ definition?: Record<string, unknown>;
43
+ enabled?: boolean;
44
+ }): Promise<Api>;
45
+ remove(dashboardId: string): Promise<Api>;
46
+ /** Turn the public page on or off. Turning it on needs the environment's publishable key once (it is sealed and never returned). */
47
+ publish(dashboardId: string, options: {
48
+ public: boolean;
49
+ publishableKey?: string;
50
+ }): Promise<Api>;
51
+ }
52
+ //# sourceMappingURL=realtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../../src/manage/realtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;AAEpG,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAkBD,uIAAuI;AACvI,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAIpB,kDAAkD;IAClD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,GAAG,CAAC;IAI7D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAI7D,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAGxC;AAED,8GAA8G;AAC9G,qBAAa,UAAW,SAAQ,OAAO;IACrC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAIpB,8CAA8C;IAC9C,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIzC,+IAA+I;IAC/I,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAUnJ,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIrJ,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIzC,oIAAoI;IACpI,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;CAMlG"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Dashboards = exports.RealtimeChannels = void 0;
4
+ const base_js_1 = require("./base.js");
5
+ const wire = (rule) => {
6
+ const map = {
7
+ kind: rule.kind,
8
+ subscribe: rule.subscribe,
9
+ publish: rule.publish,
10
+ presence: rule.presence,
11
+ history: rule.history,
12
+ message_size_limit: rule.messageSizeLimit,
13
+ publish_rate_limit: rule.publishRateLimit,
14
+ subscription_limit: rule.subscriptionLimit,
15
+ retention_seconds: rule.retentionSeconds,
16
+ description: rule.description,
17
+ };
18
+ return Object.fromEntries(Object.entries(map).filter(([, value]) => value !== undefined));
19
+ };
20
+ /** Durable channel rules: a channel name pattern (`chat:*`), its kind, who may subscribe and publish, presence, history and limits. */
21
+ class RealtimeChannels extends base_js_1.Service {
22
+ list() {
23
+ return this.get("/realtime-channels");
24
+ }
25
+ /** Add a rule for channels matching `pattern`. */
26
+ create(pattern, rule = {}) {
27
+ return this.post("/realtime-channels", { pattern, ...wire(rule) });
28
+ }
29
+ update(channelId, changes) {
30
+ return this.patch((0, base_js_1.seg)("realtime-channels", channelId), wire(changes));
31
+ }
32
+ remove(channelId) {
33
+ return this.del((0, base_js_1.seg)("realtime-channels", channelId));
34
+ }
35
+ }
36
+ exports.RealtimeChannels = RealtimeChannels;
37
+ /** Dashboards: read-only boards over your data, defined as JSON, optionally published at a public address. */
38
+ class Dashboards extends base_js_1.Service {
39
+ list() {
40
+ return this.get("/dashboards");
41
+ }
42
+ /** One dashboard with its full definition. */
43
+ getOne(dashboardId) {
44
+ return this.get((0, base_js_1.seg)("dashboards", dashboardId));
45
+ }
46
+ /** Make a dashboard (`name`: lowercase letters, digits and dashes). The definition is checked; a problem comes back as a 422 with the list. */
47
+ create(name, options = {}) {
48
+ return this.post("/dashboards", {
49
+ name,
50
+ title: options.title ?? "",
51
+ description: options.description ?? "",
52
+ definition: options.definition ?? { pages: [] },
53
+ enabled: options.enabled ?? true,
54
+ });
55
+ }
56
+ update(dashboardId, changes) {
57
+ return this.patch((0, base_js_1.seg)("dashboards", dashboardId), Object.fromEntries(Object.entries(changes).filter(([, value]) => value !== undefined)));
58
+ }
59
+ remove(dashboardId) {
60
+ return this.del((0, base_js_1.seg)("dashboards", dashboardId));
61
+ }
62
+ /** Turn the public page on or off. Turning it on needs the environment's publishable key once (it is sealed and never returned). */
63
+ publish(dashboardId, options) {
64
+ return this.put((0, base_js_1.seg)("dashboards", dashboardId, "publish"), {
65
+ public: options.public,
66
+ ...(options.publishableKey ? { publishable_key: options.publishableKey } : {}),
67
+ });
68
+ }
69
+ }
70
+ exports.Dashboards = Dashboards;
71
+ //# 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":"commonjs"}
@@ -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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"}