@dbx-tools/postgres 0.9.131 → 0.9.132
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 +65 -63
- package/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @dbx-tools/postgres
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
The package provides advisory locks, a typed topic bus, optional message
|
|
7
|
-
persistence, sender identity, and connection helpers for Node services.
|
|
3
|
+
Use connection-correct PostgreSQL advisory locks and a structured
|
|
4
|
+
`LISTEN`/`NOTIFY` topic bus from Node.js. The package also provides optional
|
|
5
|
+
message persistence, sender identity, and connection helpers.
|
|
8
6
|
|
|
9
7
|
Both work against a plain `pg.Pool` or anything structurally compatible with one,
|
|
10
|
-
including the pool AppKit's Lakebase plugin exports
|
|
8
|
+
including the pool AppKit's Lakebase plugin exports, so a Databricks App gets
|
|
11
9
|
them without a second database client or connection pool.
|
|
12
10
|
|
|
13
|
-
## Quick
|
|
11
|
+
## Quick start
|
|
14
12
|
|
|
15
13
|
Run protected work on the same PostgreSQL connection that holds the lock:
|
|
16
14
|
|
|
17
15
|
```ts
|
|
18
|
-
import { withAdvisoryLock } from "@dbx-tools/postgres";
|
|
16
|
+
import { postgresConnectionOptions, withAdvisoryLock } from "@dbx-tools/postgres";
|
|
17
|
+
import { Pool } from "pg";
|
|
18
|
+
|
|
19
|
+
const pool = new Pool(postgresConnectionOptions({}));
|
|
20
|
+
const invoiceId = 42;
|
|
19
21
|
|
|
20
22
|
await withAdvisoryLock(pool, ["invoice", invoiceId], async (client) => {
|
|
21
23
|
await client.query("UPDATE invoices SET status = 'sent' WHERE id = $1", [invoiceId]);
|
|
22
24
|
});
|
|
23
25
|
```
|
|
24
26
|
|
|
25
|
-
##
|
|
27
|
+
## Capabilities
|
|
26
28
|
|
|
27
29
|
- Converts an arbitrary structured key (string, array, object, `Date`, or an
|
|
28
30
|
explicit `bigint`) into a stable signed 64-bit advisory-lock identifier.
|
|
@@ -39,14 +41,14 @@ await withAdvisoryLock(pool, ["invoice", invoiceId], async (client) => {
|
|
|
39
41
|
- Rejects a payload that would not survive a JSON round trip unchanged, at the
|
|
40
42
|
call site rather than on the wire.
|
|
41
43
|
- Reconnects a dropped listener with bounded backoff while subscribers remain.
|
|
42
|
-
- Optionally
|
|
44
|
+
- Optionally persists every published message to a package-owned table, so a
|
|
43
45
|
subscriber that was not listening can replay history by cursor, with a default
|
|
44
46
|
TTL and cleanup on insert.
|
|
45
47
|
- Two payload styles: the whole envelope in the notification, or a pointer the
|
|
46
|
-
listener reads back
|
|
47
|
-
contents behind a table grant.
|
|
48
|
+
listener reads back. The pointer lifts the 8000-byte `NOTIFY` limit and keeps
|
|
49
|
+
the contents behind a table grant.
|
|
48
50
|
|
|
49
|
-
## Session
|
|
51
|
+
## Session roles
|
|
50
52
|
|
|
51
53
|
Set `DBX_TOOLS_POSTGRES_ROLE` when every repository-owned PostgreSQL connection
|
|
52
54
|
should assume one role after authenticating. `postgresConnectionOptions()` adds
|
|
@@ -70,14 +72,14 @@ service-principal and per-user OBO pools. Every login identity that can reach th
|
|
|
70
72
|
pool must therefore be a member of the configured role, or otherwise have
|
|
71
73
|
permission to `SET ROLE`, before the pool can connect successfully.
|
|
72
74
|
|
|
73
|
-
## Use
|
|
75
|
+
## Use with AppKit Lakebase
|
|
74
76
|
|
|
75
77
|
Use AppKit `lakebase()` to obtain and refresh the PostgreSQL pool. This package
|
|
76
78
|
does not replace that plugin. Add it when work needs connection-correct advisory
|
|
77
79
|
locks or cross-instance `LISTEN`/`NOTIFY` delivery, capabilities the native
|
|
78
80
|
Lakebase plugin does not provide.
|
|
79
81
|
|
|
80
|
-
## Advisory
|
|
82
|
+
## Advisory locks
|
|
81
83
|
|
|
82
84
|
```ts
|
|
83
85
|
import { postgresConnectionOptions, withAdvisoryLock } from "@dbx-tools/postgres";
|
|
@@ -107,7 +109,7 @@ await withAdvisoryTransactionLock(pool, { schema: "my_feature", version: 1 }, as
|
|
|
107
109
|
`identity.advisoryLockId(key)` exposes the same reduction as a JSON-safe decimal
|
|
108
110
|
string. A `bigint` key is
|
|
109
111
|
used directly (narrowed to 64 bits) rather than hashed, so a lock can interoperate
|
|
110
|
-
with another implementation that publishes its numeric lock id
|
|
112
|
+
with another implementation that publishes its numeric lock id, such as `pgmq`'s
|
|
111
113
|
installer lock, for instance. Anything else is canonicalized with
|
|
112
114
|
`object.toStableKey` from `@dbx-tools/shared-core` and hashed, so key order in an
|
|
113
115
|
object does not matter while a `1` and a `"1"` stay different locks. An array is
|
|
@@ -115,7 +117,7 @@ read as several parts, so `["invoice", 7]` and `"invoice_7"` are different locks
|
|
|
115
117
|
non-finite number or a cyclic key throws `TypeError` rather than yielding an
|
|
116
118
|
identity two callers could disagree about.
|
|
117
119
|
|
|
118
|
-
## Topic
|
|
120
|
+
## Topic bus
|
|
119
121
|
|
|
120
122
|
```ts
|
|
121
123
|
import { PostgresTopicBus } from "@dbx-tools/postgres";
|
|
@@ -139,27 +141,27 @@ await unsubscribe();
|
|
|
139
141
|
await bus.close();
|
|
140
142
|
```
|
|
141
143
|
|
|
142
|
-
Every process listening on the channel receives every message
|
|
143
|
-
competing consumers.
|
|
144
|
-
|
|
145
|
-
|
|
144
|
+
Every process listening on the channel receives every message. There are no
|
|
145
|
+
competing consumers. The bus fits live fan-out such as an SSE stream per browser
|
|
146
|
+
tab, a cache invalidation, or a presence ping. It doesn't distribute work.
|
|
147
|
+
Delivery is live-only by default. Turn on `persist` when a
|
|
146
148
|
subscriber needs replay, and use a real queue when it needs acks.
|
|
147
149
|
|
|
148
|
-
###
|
|
150
|
+
### Message envelope
|
|
149
151
|
|
|
150
152
|
| Field | Source | Notes |
|
|
151
153
|
| ------------- | ------ | ------------------------------------------------------------------ |
|
|
152
154
|
| `id` | bus | Unique per message across instances. Use it to dedupe or as `id:`. |
|
|
153
155
|
| `topic` | bus | The `broadcast` topic. Listeners on other topics never see it. |
|
|
154
|
-
| `type` | caller | Event name,
|
|
156
|
+
| `type` | caller | Event name, for example `order.updated`. Required, non-blank. |
|
|
155
157
|
| `metadata` | merged | Automatic context under the caller's. See below. |
|
|
156
158
|
| `body` | caller | Passed through unchanged. |
|
|
157
|
-
| `publishedAt` | bus | ISO-8601, from the publisher's clock
|
|
159
|
+
| `publishedAt` | bus | ISO-8601, from the publisher's clock, not the database's. |
|
|
158
160
|
|
|
159
161
|
`publishedAt` and `id` are for display and dedupe. Neither orders messages from
|
|
160
162
|
different instances reliably.
|
|
161
163
|
|
|
162
|
-
### Metadata
|
|
164
|
+
### Metadata precedence
|
|
163
165
|
|
|
164
166
|
Weakest to strongest: automatic machine context, then AppKit sender identity, then
|
|
165
167
|
the bus's `metadata` option, then the per-message `metadata`. A key present at a
|
|
@@ -174,23 +176,23 @@ Automatic keys, each omitted when it resolves to nothing: `project` (from
|
|
|
174
176
|
architecture, runtime name, and runtime version are left out on purpose: IPs and
|
|
175
177
|
pids are noisy (and often sensitive), the rest are constant per deployment, and
|
|
176
178
|
every message would pay for them against the payload limit. Pass a `metadata`
|
|
177
|
-
function when a process
|
|
179
|
+
function when a process needs one of those values.
|
|
178
180
|
|
|
179
181
|
The example above attaches a discovered public IP that way. The function runs on
|
|
180
182
|
every broadcast, so memoize anything expensive.
|
|
181
183
|
|
|
182
184
|
With the optional `@databricks/appkit` peer installed and a user execution context
|
|
183
185
|
active, `senderId`, `senderName`, and `senderEmail` are added too. AppKit is
|
|
184
|
-
imported lazily and never required
|
|
185
|
-
bus
|
|
186
|
+
imported lazily and never required. Outside a request, or without the package, the
|
|
187
|
+
bus skips those keys.
|
|
186
188
|
|
|
187
|
-
###
|
|
189
|
+
### Supported message values
|
|
188
190
|
|
|
189
191
|
The body and metadata must survive `JSON.parse(JSON.stringify(x))` unchanged, which
|
|
190
192
|
is stricter than `JSON.stringify` not throwing. A `Date` becomes a string, `NaN`
|
|
191
|
-
and `Infinity` become `null`, a `Map` becomes `{}`, and `undefined` vanishes
|
|
192
|
-
reaches the listener as something other than what was sent, so all of them
|
|
193
|
-
`TypeError` at the call instead. Cycles, functions, symbols, bigints, and class
|
|
193
|
+
and `Infinity` become `null`, a `Map` becomes `{}`, and `undefined` vanishes.
|
|
194
|
+
Each reaches the listener as something other than what was sent, so all of them
|
|
195
|
+
throw `TypeError` at the call instead. Cycles, functions, symbols, bigints, and class
|
|
194
196
|
instances are rejected for the same reason.
|
|
195
197
|
|
|
196
198
|
The rule lives in `@dbx-tools/shared-core` as `object.isSerializableValue` and
|
|
@@ -202,16 +204,16 @@ The encoded envelope is capped at 7900 bytes, under PostgreSQL's 8000-byte
|
|
|
202
204
|
`NOTIFY` limit, and a larger one throws `RangeError`. Automatic metadata counts
|
|
203
205
|
against that, so broadcast a reference and let the receiver fetch anything big.
|
|
204
206
|
|
|
205
|
-
### Connections,
|
|
207
|
+
### Connections, lifecycle, and failure
|
|
206
208
|
|
|
207
209
|
Publishing borrows a pooled connection per call. Listening cannot: `LISTEN` is
|
|
208
|
-
session state, so the bus checks out
|
|
210
|
+
session state, so the bus checks out one dedicated client and keeps it for as long
|
|
209
211
|
as it has subscribers, however many topics and listeners are registered. Size the
|
|
210
212
|
pool with that long-lived checkout in mind.
|
|
211
213
|
|
|
212
214
|
Nothing connects until the first `listen`, or an explicit `start()` when you would
|
|
213
215
|
rather find out about a connection problem at boot. `close()` releases the client
|
|
214
|
-
and is required
|
|
216
|
+
and is required. Register it with the host's shutdown hook. A closed bus stays
|
|
215
217
|
closed and throws instead of silently reconnecting.
|
|
216
218
|
|
|
217
219
|
When the notification connection drops, the bus reconnects on its own: immediately
|
|
@@ -219,15 +221,15 @@ first, then doubling from 250ms to a 5s ceiling, indefinitely, for as long as
|
|
|
219
221
|
subscribers remain. A Postgres restart or a rotated Lakebase credential recovers
|
|
220
222
|
without intervention. Messages published during the gap are lost. Every failed
|
|
221
223
|
attempt, every dropped connection, and every listener that throws is reported
|
|
222
|
-
through `onError`, which defaults to swallowing them
|
|
224
|
+
through `onError`, which defaults to swallowing them. Configure a logger in
|
|
223
225
|
anything long-running. A failing listener never affects the publisher or the other
|
|
224
226
|
listeners.
|
|
225
227
|
|
|
226
|
-
One channel carries many topics, so adding a topic costs nothing
|
|
227
|
-
high-volume
|
|
228
|
+
One channel carries many topics, so adding a topic costs nothing. Give an
|
|
229
|
+
unrelated high-volume stream its own channel because every listening
|
|
228
230
|
session decodes every message on the channel.
|
|
229
231
|
|
|
230
|
-
### Replay
|
|
232
|
+
### Replay with `persist`
|
|
231
233
|
|
|
232
234
|
`NOTIFY` has no replay: a process that was not listening never learns what it
|
|
233
235
|
missed. Set `persist` and each published message is INSERTed in the same
|
|
@@ -246,13 +248,13 @@ do {
|
|
|
246
248
|
} while (cursor);
|
|
247
249
|
```
|
|
248
250
|
|
|
249
|
-
The row and the notification
|
|
251
|
+
The row and the notification commit together, which is the property the whole
|
|
250
252
|
design rests on: `NOTIFY` is delivered at commit rather than at statement time, so
|
|
251
253
|
a listener can never be told about a row it cannot yet read.
|
|
252
254
|
|
|
253
255
|
| Option | Default | Behavior |
|
|
254
256
|
| ------------------ | ----------------- | -------------------------------------------------------------- |
|
|
255
|
-
| `schema` | `dbx_message_bus` | Schema used for message persistence.
|
|
257
|
+
| `schema` | `dbx_message_bus` | Schema used for message persistence. |
|
|
256
258
|
| `scope` | `open` | Which tier's table publishes and history read by default. |
|
|
257
259
|
| `tables` | `*_messages` | Override a tier's table name for a managed installation. |
|
|
258
260
|
| `ttl` | `24 hours` | Per-message expiry. `false` keeps messages until deleted. |
|
|
@@ -261,44 +263,44 @@ a listener can never be told about a row it cannot yet read.
|
|
|
261
263
|
| `provision` | `true` | Create the schema, tables, and indexes on first persisted use. |
|
|
262
264
|
|
|
263
265
|
Messages EXPIRE by default. A 24-hour TTL is the default precisely because an
|
|
264
|
-
unbounded message table is the failure this feature would otherwise introduce
|
|
265
|
-
|
|
266
|
+
unbounded message table is the failure this feature would otherwise introduce.
|
|
267
|
+
Expired rows are deleted in bounded batches on each persisted publish, and
|
|
266
268
|
`cleanupExpired()` runs the same sweep on demand. `ttl: false` opts one bus (or
|
|
267
|
-
`{ ttl: false }` on a single `broadcast`) out of expiry
|
|
268
|
-
|
|
269
|
+
`{ ttl: false }` on a single `broadcast`) out of expiry. It is available but
|
|
270
|
+
isn't the default.
|
|
269
271
|
|
|
270
272
|
Two tiers, `open` and `restricted`, exist so one channel can carry messages with
|
|
271
273
|
different read audiences: they are separate tables, so a role granted the open
|
|
272
274
|
table cannot read restricted history. `messageBusGrantStatements(roles, scope,
|
|
273
275
|
options)` emits exactly the grants a tier needs, and a `history` cursor is bound
|
|
274
|
-
to the tier it came from
|
|
275
|
-
throws
|
|
276
|
+
to the tier it came from. Resuming an open page against the restricted table
|
|
277
|
+
throws instead of returning someone else's rows. Publish to a tier
|
|
276
278
|
per-message with `broadcast(topic, { scope: "restricted", ... })`.
|
|
277
279
|
|
|
278
|
-
Set `provision: false` when a migration owns the schema
|
|
280
|
+
Set `provision: false` when a migration owns the schema. The statements are
|
|
279
281
|
otherwise applied once, under an advisory transaction lock, so concurrent
|
|
280
282
|
instances installing at boot do not race.
|
|
281
283
|
|
|
282
|
-
### Envelope
|
|
284
|
+
### Envelope or pointer
|
|
283
285
|
|
|
284
286
|
`payload: "envelope"` (the default) puts the whole message in the notification.
|
|
285
287
|
One round trip, no read amplification, bounded by PostgreSQL's payload limit.
|
|
286
288
|
|
|
287
|
-
`payload: "pointer"` notifies with routing and identity only
|
|
288
|
-
id, sequence }`
|
|
289
|
+
`payload: "pointer"` notifies with routing and identity only
|
|
290
|
+
(`{ v, scope, topic, id, sequence }`), and the listener reads the envelope back. That lifts the size
|
|
289
291
|
limit entirely (a body larger than 7900 bytes is only publishable this way) and
|
|
290
292
|
means a subscriber without the tier's table grant learns that something happened
|
|
291
293
|
without learning what. The cost is one read per notification. Listeners receive
|
|
292
|
-
the same `TopicMessage` either way
|
|
294
|
+
the same `TopicMessage` either way. The difference is invisible above `listen`.
|
|
293
295
|
|
|
294
296
|
A pointer whose row is already gone (TTL cleanup won the race) or unreadable
|
|
295
|
-
delivers nothing
|
|
297
|
+
delivers nothing instead of raising, which is expected on the restricted tier. Use
|
|
296
298
|
`decodePointer` if a non-bus consumer needs to read the raw notification.
|
|
297
299
|
|
|
298
|
-
###
|
|
300
|
+
### Name a channel
|
|
299
301
|
|
|
300
|
-
`channel` takes whatever identifies the channel, not a pre-sanitized identifier
|
|
301
|
-
a name, a tenant id, a `[env, feature]` pair, a config object. One value or many:
|
|
302
|
+
`channel` takes whatever identifies the channel, not a pre-sanitized identifier:
|
|
303
|
+
a name, a tenant id, a `[env, feature]` pair, or a config object. One value or many:
|
|
302
304
|
an array is read as several parts, anything else as one.
|
|
303
305
|
|
|
304
306
|
```ts
|
|
@@ -313,31 +315,31 @@ form (`object.toStableKey`) is appended. The hash is what makes the mapping
|
|
|
313
315
|
trustworthy: tokenizing alone is lossy, so `my-app`, `my_app`, and `myApp` would
|
|
314
316
|
collapse onto one channel, and a name long enough to hit Postgres's 63-character
|
|
315
317
|
limit would collide with anything sharing its leading tokens. With the suffix the
|
|
316
|
-
readable part stays readable and distinct inputs stay distinct
|
|
318
|
+
readable part stays readable and distinct inputs stay distinct, including
|
|
317
319
|
`["billing", "prod"]` versus `"billing_prod"`, which differ in structure.
|
|
318
320
|
|
|
319
321
|
Derivation is deterministic across processes and runs, so every participant that
|
|
320
322
|
passes equivalent parts lands on the same channel without coordinating. Object key
|
|
321
|
-
order does not matter
|
|
323
|
+
order does not matter. A different spelling does. Read `bus.channelName` to see
|
|
322
324
|
what a set of parts resolved to, or to confirm two processes agree. Defaults to a
|
|
323
325
|
shared `dbx_tools_topic_bus` channel.
|
|
324
326
|
|
|
325
327
|
`identity.channelName(parts)` exposes the derivation without constructing a bus,
|
|
326
328
|
which is useful for configuration checks and cross-runtime contract tests.
|
|
327
329
|
|
|
328
|
-
## Connection
|
|
330
|
+
## Connection lifecycles
|
|
329
331
|
|
|
330
|
-
Advisory locks are connection-scoped, and
|
|
332
|
+
Advisory locks are connection-scoped, and incorrect pool use can fail invisibly:
|
|
331
333
|
taking the lock with `pool.query()` and doing the protected work with another
|
|
332
334
|
`pool.query()` can use two different connections, so the lock protects nothing and
|
|
333
335
|
the code looks correct. The same applies to `LISTEN`, which is session state a
|
|
334
336
|
pooled query cannot hold. These helpers keep both lifecycles on dedicated
|
|
335
337
|
connections and depend only on `pg`.
|
|
336
338
|
|
|
337
|
-
AppKit supplies the Lakebase pool
|
|
339
|
+
AppKit supplies the Lakebase pool. These helpers add locks and cross-instance
|
|
338
340
|
message delivery on top of it.
|
|
339
341
|
|
|
340
|
-
## Module
|
|
342
|
+
## Module map
|
|
341
343
|
|
|
342
344
|
| Module | Purpose |
|
|
343
345
|
| -------------- | ---------------------------------------------------------------------- |
|
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/postgres";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.132";
|
|
7
7
|
export * as advisoryLock from "./src/advisory-lock.ts";
|
|
8
8
|
export * as bindings from "./src/bindings.ts";
|
|
9
9
|
export * as identity from "./src/identity.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/postgres";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.132";
|
|
3
3
|
export * as advisoryLock from "./src/advisory-lock.ts";
|
|
4
4
|
export * as bindings from "./src/bindings.ts";
|
|
5
5
|
export * as identity from "./src/identity.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/postgres";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.132";
|
|
6
6
|
export * as advisoryLock from "./src/advisory-lock.js";
|
|
7
7
|
export * as bindings from "./src/bindings.js";
|
|
8
8
|
export * as identity from "./src/identity.js";
|
|
@@ -12,4 +12,4 @@ export * as topicBus from "./src/topic-bus.js";
|
|
|
12
12
|
export { POINTER_VERSION } from "./src/persistence.js";
|
|
13
13
|
export { PostgresTopicBus } from "./src/topic-bus.js";
|
|
14
14
|
export * from "./exports.js";
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxXQUFXLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0RCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvcG9zdGdyZXNcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xMzJcIjtcbmV4cG9ydCAqIGFzIGFkdmlzb3J5TG9jayBmcm9tIFwiLi9zcmMvYWR2aXNvcnktbG9jay50c1wiO1xuZXhwb3J0ICogYXMgYmluZGluZ3MgZnJvbSBcIi4vc3JjL2JpbmRpbmdzLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIHBlcnNpc3RlbmNlIGZyb20gXCIuL3NyYy9wZXJzaXN0ZW5jZS50c1wiO1xuZXhwb3J0ICogYXMgc2Vzc2lvbiBmcm9tIFwiLi9zcmMvc2Vzc2lvbi50c1wiO1xuZXhwb3J0ICogYXMgdG9waWNCdXMgZnJvbSBcIi4vc3JjL3RvcGljLWJ1cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZHZpc29yeUxvY2tLZXksIFBnUG9vbExpa2UsIFBnUXVlcnlhYmxlIH0gZnJvbSBcIi4vc3JjL2Fkdmlzb3J5LWxvY2sudHNcIjtcbmV4cG9ydCB7IFBPSU5URVJfVkVSU0lPTiB9IGZyb20gXCIuL3NyYy9wZXJzaXN0ZW5jZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBEdXJhdGlvbklucHV0LCBSZXNvbHZlZFRvcGljQnVzUGVyc2lzdGVuY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3BlcnNpc3RlbmNlLnRzXCI7XG5leHBvcnQgeyBQb3N0Z3Jlc1RvcGljQnVzIH0gZnJvbSBcIi4vc3JjL3RvcGljLWJ1cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBUb3BpY01ldGFkYXRhLCBUb3BpY01lc3NhZ2UsIFRvcGljUHVibGlzaElucHV0LCBUb3BpY0xpc3RlbmVyLCBUb3BpY01ldGFkYXRhUHJvdmlkZXIsIFBvc3RncmVzVG9waWNCdXNPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3RvcGljLWJ1cy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhwb3J0cy50c1wiO1xuIl19
|
package/package.json
CHANGED
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"@databricks/appkit": "0.81.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@dbx-tools/lakebase": "^0.9.
|
|
32
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
31
|
+
"@dbx-tools/lakebase": "^0.9.132",
|
|
32
|
+
"@dbx-tools/shared-core": "^0.9.132",
|
|
33
33
|
"pg": "^8.22.0"
|
|
34
34
|
},
|
|
35
35
|
"main": "./lib/index.js",
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
"./package.json": "./package.json"
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
|
-
"version": "0.9.
|
|
77
|
+
"version": "0.9.132",
|
|
78
78
|
"types": "./lib/index.d.ts",
|
|
79
79
|
"dbxToolsConfig": {
|
|
80
80
|
"tags": [
|