camusdb 0.2.0 → 0.3.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.
Files changed (93) hide show
  1. package/README.md +65 -4
  2. package/dist/auth/rest-login-client.d.ts.map +1 -1
  3. package/dist/auth/rest-login-client.js +15 -1
  4. package/dist/auth/rest-login-client.js.map +1 -1
  5. package/dist/auth/token-provider.d.ts +14 -0
  6. package/dist/auth/token-provider.d.ts.map +1 -1
  7. package/dist/auth/token-provider.js +39 -11
  8. package/dist/auth/token-provider.js.map +1 -1
  9. package/dist/client.d.ts +24 -3
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +78 -8
  12. package/dist/client.js.map +1 -1
  13. package/dist/config.d.ts +29 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +20 -0
  16. package/dist/config.js.map +1 -1
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +1 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/json.d.ts.map +1 -1
  22. package/dist/json.js +42 -8
  23. package/dist/json.js.map +1 -1
  24. package/dist/own-record.d.ts +16 -0
  25. package/dist/own-record.d.ts.map +1 -0
  26. package/dist/own-record.js +18 -0
  27. package/dist/own-record.js.map +1 -0
  28. package/dist/query-stream.d.ts +4 -4
  29. package/dist/query-stream.js +4 -4
  30. package/dist/result-set.d.ts +4 -2
  31. package/dist/result-set.d.ts.map +1 -1
  32. package/dist/result-set.js +25 -8
  33. package/dist/result-set.js.map +1 -1
  34. package/dist/retry.d.ts +4 -1
  35. package/dist/retry.d.ts.map +1 -1
  36. package/dist/retry.js +16 -4
  37. package/dist/retry.js.map +1 -1
  38. package/dist/runtime.js +2 -0
  39. package/dist/runtime.js.map +1 -1
  40. package/dist/sequence.d.ts +62 -0
  41. package/dist/sequence.d.ts.map +1 -0
  42. package/dist/sequence.js +70 -0
  43. package/dist/sequence.js.map +1 -0
  44. package/dist/sql-syntax.d.ts +21 -1
  45. package/dist/sql-syntax.d.ts.map +1 -1
  46. package/dist/sql-syntax.js +30 -1
  47. package/dist/sql-syntax.js.map +1 -1
  48. package/dist/statements.d.ts.map +1 -1
  49. package/dist/statements.js +5 -0
  50. package/dist/statements.js.map +1 -1
  51. package/dist/transport/grpc/batch-frames.d.ts +67 -0
  52. package/dist/transport/grpc/batch-frames.d.ts.map +1 -0
  53. package/dist/transport/grpc/batch-frames.js +111 -0
  54. package/dist/transport/grpc/batch-frames.js.map +1 -0
  55. package/dist/transport/grpc/batcher.d.ts +132 -3
  56. package/dist/transport/grpc/batcher.d.ts.map +1 -1
  57. package/dist/transport/grpc/batcher.js +389 -30
  58. package/dist/transport/grpc/batcher.js.map +1 -1
  59. package/dist/transport/grpc/grpc-transport.d.ts +8 -1
  60. package/dist/transport/grpc/grpc-transport.d.ts.map +1 -1
  61. package/dist/transport/grpc/grpc-transport.js +59 -8
  62. package/dist/transport/grpc/grpc-transport.js.map +1 -1
  63. package/dist/transport/grpc/messages.d.ts +18 -2
  64. package/dist/transport/grpc/messages.d.ts.map +1 -1
  65. package/dist/transport/grpc/messages.js +6 -0
  66. package/dist/transport/grpc/messages.js.map +1 -1
  67. package/dist/transport/grpc/proto.d.ts +1 -1
  68. package/dist/transport/grpc/proto.d.ts.map +1 -1
  69. package/dist/transport/grpc/proto.js.map +1 -1
  70. package/dist/transport/http.d.ts.map +1 -1
  71. package/dist/transport/http.js +5 -1
  72. package/dist/transport/http.js.map +1 -1
  73. package/dist/transport/ndjson-row-source.d.ts.map +1 -1
  74. package/dist/transport/ndjson-row-source.js +16 -3
  75. package/dist/transport/ndjson-row-source.js.map +1 -1
  76. package/dist/transport/rest-transport.d.ts.map +1 -1
  77. package/dist/transport/rest-transport.js +5 -2
  78. package/dist/transport/rest-transport.js.map +1 -1
  79. package/dist/transport/transport.d.ts +4 -3
  80. package/dist/transport/transport.d.ts.map +1 -1
  81. package/dist/transport/transport.js.map +1 -1
  82. package/dist/values/encode.d.ts.map +1 -1
  83. package/dist/values/encode.js +7 -2
  84. package/dist/values/encode.js.map +1 -1
  85. package/dist/values/typed.d.ts.map +1 -1
  86. package/dist/values/typed.js +22 -1
  87. package/dist/values/typed.js.map +1 -1
  88. package/dist/values/uuid.d.ts +7 -1
  89. package/dist/values/uuid.d.ts.map +1 -1
  90. package/dist/values/uuid.js +15 -6
  91. package/dist/values/uuid.js.map +1 -1
  92. package/package.json +1 -1
  93. package/proto/camus_sql.proto +39 -2
@@ -48,6 +48,14 @@ export declare class PreparedStatementStaleError extends Error {
48
48
  export interface BatchStream {
49
49
  /** Identifies this stream. A handle registered on it is invalid on any other. */
50
50
  readonly id: number;
51
+ /**
52
+ * True once this stream's server announced that it reads request frames.
53
+ *
54
+ * It never blocks, and it never goes back to false. It is false until the announcement arrives,
55
+ * and it stays false against a server that makes none. It belongs to one stream, so a rebuilt
56
+ * stream negotiates again on its own.
57
+ */
58
+ readonly framesAnnounced: boolean;
51
59
  send(request: GrpcBatchExecuteRequest): void;
52
60
  /** Registers the callbacks that drive the reader loop. Called once, right after construction. */
53
61
  listen(handlers: {
@@ -65,21 +73,59 @@ export interface BatchStream {
65
73
  * share a transaction go to one stream, in arrival order, so the server sees them in the order the
66
74
  * caller wrote them; autocommit statements are free to use any stream.
67
75
  *
76
+ * Operations that wait together travel together. The pump writes the operations it drained for one
77
+ * stream as a single stream message — a frame — when that stream's server announced that it reads
78
+ * one, and it reads a response frame at any time. A frame never waits: it packs only the
79
+ * operations that already sit in the inbox, and a lone operation stays the plain single message it
80
+ * always was. It is a transport optimization alone. It gives no atomicity and no ordering that the
81
+ * stream does not already give.
82
+ *
68
83
  * A stream that faults is rebuilt by the next write, and every operation that was in flight on the
69
84
  * old one is failed so its caller can decide whether to replay it. Prepared statements are scoped
70
85
  * to the stream that registered them, and a handle from a stream that is gone is refused at the
71
86
  * last moment before it would be written.
87
+ *
88
+ * A stream is rotated when the credential it opened under is superseded. A stream presents its
89
+ * bearer token once, in its opening metadata, and then outlives it: the provider renews the token
90
+ * every few minutes, and the stream is meant to last a session. Whether the server tolerates that
91
+ * is the server's decision, and a server that re-checks the opening token per operation ends the
92
+ * stream at that token's expiry, with every transaction on it. The client does not rely on it.
93
+ *
94
+ * When the next unbound operation of a slot finds the credential changed, the slot opens a fresh
95
+ * stream under the new token, and the old one is retired. A retired stream takes no new work. It
96
+ * keeps serving the transactions that began on it, because a transaction cannot change streams,
97
+ * and the server rolls a transaction back when its stream closes. It is closed as soon as the last
98
+ * of them ends, or after `streamDrainTimeoutMs`. Rotation happens on the write path, so an idle
99
+ * client rotates on its first operation after the renewal, before that operation is sent.
72
100
  */
73
101
  export declare class GrpcBatcher {
74
102
  private readonly options;
75
103
  private readonly streamFactory;
104
+ /**
105
+ * Reports the credential a stream opened now would carry, which in practice is the current
106
+ * bearer token. It is compared, never inspected: a value that differs from the one a stream
107
+ * opened under is what retires that stream. Undefined means that a stream carries no credential
108
+ * that can change, and that nothing is ever rotated.
109
+ */
110
+ private readonly credentialStamp;
76
111
  private readonly slots;
77
112
  private readonly pending;
113
+ /**
114
+ * The stream each open transaction began on, by handle. An entry is written when a start is
115
+ * answered, and removed when the server answers the commit or the rollback, or when that stream
116
+ * ends. It is what lets a transaction keep its stream across a rotation of its slot.
117
+ */
118
+ private readonly openTransactions;
119
+ /**
120
+ * Retired streams that still drain, so disposal can reach them: a slot references its current
121
+ * stream alone.
122
+ */
123
+ private readonly retiring;
78
124
  private requestIdSeq;
79
125
  private roundRobin;
80
126
  private transportIdSeq;
81
127
  private disposed;
82
- constructor(options: GrpcBatchOptions, streamFactory: (id: number) => BatchStream);
128
+ constructor(options: GrpcBatchOptions, streamFactory: (id: number) => BatchStream, credentialStamp?: () => unknown);
83
129
  /** Reserves a stream for a transaction, so all of its operations land in one ordering chain. */
84
130
  reserveSlot(): number;
85
131
  enqueueQuery(request: GrpcSqlRequest, slotIndex: number | undefined, signal: AbortSignal | undefined, expectedTransportId?: number): Promise<BatchQueryResult>;
@@ -106,17 +152,100 @@ export declare class GrpcBatcher {
106
152
  closePrepared(slotIndex: number, entry: PreparedSlotEntry, signal: AbortSignal | undefined): Promise<void>;
107
153
  private enqueue;
108
154
  private enqueueTracked;
155
+ /**
156
+ * Starts the slot's pump after the current turn, and not inside it.
157
+ *
158
+ * A caller that issues several statements at once — one `Promise.all` over six of them — queues
159
+ * them all in one synchronous turn. A pump that ran inside `enqueue` would write the first
160
+ * before the second was queued, and every operation would then travel alone. One microtask of
161
+ * delay costs no round trip, and it lets the operations that were issued together share a frame.
162
+ */
163
+ private schedule;
109
164
  /**
110
165
  * Drains one slot's queue onto its stream.
111
166
  *
112
167
  * Only one pump runs per slot, so the slot's stream has exactly one writer and needs no lock.
113
168
  */
114
169
  private pump;
115
- private writeItem;
116
- private reconnect;
170
+ /**
171
+ * Prepares one operation for the wire, then either writes it alone or adds it to the slot's run.
172
+ *
173
+ * A run is the set of operations that will share the next stream message. It holds consecutive
174
+ * operations bound for one stream. The operations of one drain can belong to different streams,
175
+ * so an operation for another stream flushes the run first. Operations are never reordered to
176
+ * fill a frame: the server chains the operations of a transaction by arrival order, and inbox
177
+ * order is the only order the callers gave.
178
+ */
179
+ private stage;
180
+ /**
181
+ * Writes the slot's run: one frame, or the plain single message when one operation is left in
182
+ * it, so a quiet stream stays byte-identical to a stream without frames.
183
+ *
184
+ * A frame is never resent. A frame whose write failed may or may not have reached the server,
185
+ * which is true of every operation in it, so every one of them faults with the transport error.
186
+ * The retry contract above the batcher then decides, exactly as it does for the operations of a
187
+ * stream that faulted.
188
+ */
189
+ private flush;
190
+ private send;
191
+ /**
192
+ * False for an operation whose caller left — it was cancelled, or it timed out — before the
193
+ * operation was written. The server is never asked to run it.
194
+ *
195
+ * A rollback and a close are written whatever happens. Each one only releases what the server
196
+ * holds, which is a transaction's locks or a statement handle, and nothing else would.
197
+ */
198
+ private mustStillBeWritten;
199
+ /**
200
+ * The stream one operation belongs on.
201
+ *
202
+ * A transaction stays on the stream it began on, whatever the slot has moved to since. Anything
203
+ * else takes the slot's current stream, and that is where a credential change is noticed.
204
+ */
205
+ private route;
206
+ /**
207
+ * Opens a fresh stream for a slot and makes it the current one.
208
+ *
209
+ * The stamp is read before the factory reads the credential itself. If the credential is renewed
210
+ * in between, the stream is stamped older than it is, and it rotates once more than it needs to.
211
+ * Read afterwards, it could be stamped newer than it is, and would never rotate at all.
212
+ */
213
+ private connect;
214
+ /**
215
+ * Takes a stream out of rotation.
216
+ *
217
+ * It stays open for the transactions that began on it, and it closes when the last one ends — or
218
+ * after `streamDrainTimeoutMs`, because a transaction its caller abandoned would otherwise hold
219
+ * the stream, and its locks, open for good. Closing the stream is what makes the server roll
220
+ * such a transaction back.
221
+ */
222
+ private retire;
223
+ private closeIfDrained;
224
+ /**
225
+ * Closes a stream once, and forgets everything that was riding on it.
226
+ *
227
+ * It runs whichever end closes the stream first: this client, when a retired stream has drained,
228
+ * or the server, through the stream's own close event.
229
+ */
230
+ private close;
231
+ /** Drops an operation's hold on its stream, once however many paths race to do it. */
232
+ private release;
233
+ private transactionBegan;
234
+ private transactionEnded;
235
+ /**
236
+ * True when a transaction began on a stream that was rotated out, and is finishing there.
237
+ *
238
+ * Such a transaction must not run prepared. A slot keeps one registration per statement, and
239
+ * that registration belongs to the slot's current stream, where this transaction does not write.
240
+ * To register the statement on the retired stream instead would evict the entry every autocommit
241
+ * caller is using, and the two would re-prepare against each other until the old stream closes.
242
+ * To run the statement inline is always correct, and the window is short.
243
+ */
244
+ isBoundToRetiredStream(txnIdPT: bigint, txnIdCounter: number): boolean;
117
245
  private demux;
118
246
  private complete;
119
247
  private fault;
248
+ private finalizesTransaction;
120
249
  private settle;
121
250
  /** Fails every operation still in flight on a stream that closed, so its caller can replay. */
122
251
  private failStreamPending;
@@ -1 +1 @@
1
- {"version":3,"file":"batcher.d.ts","sourceRoot":"","sources":["../../../src/transport/grpc/batcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batcher.d.ts","sourceRoot":"","sources":["../../../src/transport/grpc/batcher.ts"],"names":[],"mappings":"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"}