@ferricstore/ferricstore 0.1.7 → 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.
- package/README.md +35 -6
- package/dist/index.cjs +1379 -667
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +83 -33
- package/dist/index.d.ts +83 -33
- package/dist/index.js +1384 -676
- package/dist/index.js.map +1 -1
- package/docs/api/assets/hierarchy.js +1 -1
- package/docs/api/assets/navigation.js +1 -1
- package/docs/api/assets/search.js +1 -1
- package/docs/api/classes/ClaimHydrationError.html +6 -3
- package/docs/api/classes/ConnectionClosedError.html +6 -3
- package/docs/api/classes/FerricStoreClient.html +4 -4
- package/docs/api/classes/FerricStoreError.html +6 -3
- package/docs/api/classes/FlowAlreadyExistsError.html +6 -3
- package/docs/api/classes/FlowBatchError.html +6 -3
- package/docs/api/classes/FlowNotFoundError.html +6 -3
- package/docs/api/classes/FlowWrongStateError.html +6 -3
- package/docs/api/classes/InvalidCommandError.html +6 -3
- package/docs/api/classes/KeyValueStore.html +2 -2
- package/docs/api/classes/LeaseRenewalError.html +1 -1
- package/docs/api/classes/LockHeldError.html +6 -3
- package/docs/api/classes/LockNotOwnedError.html +6 -3
- package/docs/api/classes/NativeAdapter.html +2 -2
- package/docs/api/classes/OverloadedError.html +6 -4
- package/docs/api/classes/QueueCompletionError.html +1 -1
- package/docs/api/classes/ReconnectingExecutor.html +4 -4
- package/docs/api/classes/RequestTimeoutError.html +6 -3
- package/docs/api/classes/RerouteError.html +6 -3
- package/docs/api/classes/StaleLeaseError.html +6 -3
- package/docs/api/classes/StalePolicyGenerationError.html +39 -0
- package/docs/api/classes/TDigestStore.html +2 -2
- package/docs/api/classes/TopKStore.html +1 -1
- package/docs/api/classes/TopologyNativeAdapterPool.html +3 -3
- package/docs/api/classes/Workflow.html +1 -1
- package/docs/api/classes/WorkflowWorker.html +2 -2
- package/docs/api/functions/classifyServerError.html +1 -1
- package/docs/api/functions/isReconnectableClosedConnectionError.html +1 -1
- package/docs/api/functions/mapException.html +1 -1
- package/docs/api/hierarchy.html +1 -1
- package/docs/api/index.html +22 -8
- package/docs/api/interfaces/AdminListOptions.html +1 -1
- package/docs/api/interfaces/CancelOptions.html +2 -2
- package/docs/api/interfaces/ClaimDueOptions.html +3 -3
- package/docs/api/interfaces/CompleteJobsAndClaimJobsResult.html +6 -6
- package/docs/api/interfaces/CompleteManyOptions.html +2 -2
- package/docs/api/interfaces/CompleteOptions.html +2 -2
- package/docs/api/interfaces/CompleteOutcome.html +1 -1
- package/docs/api/interfaces/CreateManyOptions.html +1 -1
- package/docs/api/interfaces/EffectCompensateOptions.html +1 -1
- package/docs/api/interfaces/EffectConfirmOptions.html +1 -1
- package/docs/api/interfaces/EffectFailOptions.html +1 -1
- package/docs/api/interfaces/EffectStatusOptions.html +1 -1
- package/docs/api/interfaces/ExtendLeaseOptions.html +2 -2
- package/docs/api/interfaces/FailOptions.html +2 -2
- package/docs/api/interfaces/FailOutcome.html +1 -1
- package/docs/api/interfaces/FerricStoreClientFromUrlOptions.html +1 -1
- package/docs/api/interfaces/FerricStoreClientOptions.html +1 -1
- package/docs/api/interfaces/{FetchOrComputeLegacyResult.html → FetchOrComputeComputeResult.html} +2 -2
- package/docs/api/interfaces/FlowMaxActiveFailure.html +3 -0
- package/docs/api/interfaces/FlowPolicyBackoffSnapshot.html +5 -0
- package/docs/api/interfaces/FlowPolicyOptions.html +8 -4
- package/docs/api/interfaces/FlowPolicyRetentionSnapshot.html +3 -0
- package/docs/api/interfaces/FlowPolicyRetrySnapshot.html +4 -0
- package/docs/api/interfaces/FlowPolicySnapshot.html +17 -0
- package/docs/api/interfaces/FlowPolicyStateSnapshot.html +6 -0
- package/docs/api/interfaces/FlowRecord.html +4 -2
- package/docs/api/interfaces/FlowStatePolicy.html +2 -2
- package/docs/api/interfaces/HistoryOptions.html +2 -2
- package/docs/api/interfaces/InvocationCreateOptions.html +2 -2
- package/docs/api/interfaces/LeaseMutationOptions.html +2 -2
- package/docs/api/interfaces/LimitListOptions.html +1 -1
- package/docs/api/interfaces/MutateOptions.html +2 -2
- package/docs/api/interfaces/NamedValueMutation.html +1 -1
- package/docs/api/interfaces/ProtocolCommand.html +2 -2
- package/docs/api/interfaces/ReadOptions.html +2 -2
- package/docs/api/interfaces/ReclaimOptions.html +2 -2
- package/docs/api/interfaces/RequestContext.html +2 -2
- package/docs/api/interfaces/RequestContextOptions.html +2 -2
- package/docs/api/interfaces/RetryOptions.html +2 -2
- package/docs/api/interfaces/RetryOutcome.html +1 -1
- package/docs/api/interfaces/RunStepsItem.html +2 -2
- package/docs/api/interfaces/RunStepsManyOptions.html +2 -2
- package/docs/api/interfaces/SearchOptions.html +2 -2
- package/docs/api/interfaces/StartAndClaimOptions.html +4 -2
- package/docs/api/interfaces/StepContinueOptions.html +3 -3
- package/docs/api/interfaces/TDigestCreateOptions.html +1 -1
- package/docs/api/interfaces/TDigestMergeOptions.html +1 -1
- package/docs/api/interfaces/TransitionOptions.html +2 -2
- package/docs/api/interfaces/TransitionOutcome.html +1 -1
- package/docs/api/modules.html +1 -1
- package/docs/api/types/ConnectionRequestDisposition.html +1 -1
- package/docs/api/types/FetchOrComputeFencedResult.html +1 -0
- package/docs/api/types/FetchOrComputeResult.html +1 -1
- package/docs/api/types/FlowPolicyBackoffKind.html +1 -0
- package/docs/api/types/FlowStateMode.html +1 -1
- package/docs/api/types/FlowStatePolicyLike.html +1 -1
- package/docs/api/types/ManagementPairs.html +1 -1
- package/docs/api/types/RequestDisposition.html +1 -1
- package/docs/api/types/SearchStateMeta.html +1 -1
- package/docs/api/types/TopKReserveOptions.html +1 -1
- package/docs/api/variables/COMMAND_OPCODES.html +1 -1
- package/docs/api/variables/FERRICSTORE_MINIMUM_SERVER_VERSION.html +2 -0
- package/docs/api/variables/FERRICSTORE_NATIVE_PROTOCOL_VERSION.html +2 -0
- package/docs/api/variables/FERRICSTORE_SDK_VERSION.html +2 -0
- package/docs/api/variables/MAX_FLOW_POLICY_GENERATION.html +1 -0
- package/package.json +6 -1
- package/docs/api/interfaces/FetchOrComputeFencedResult.html +0 -9
- package/docs/api/types/FetchOrComputeComputeResult.html +0 -1
- package/docs/api/variables/COMPACT_RESPONSE_OPCODES.html +0 -2
package/README.md
CHANGED
|
@@ -16,6 +16,14 @@ npm install @ferricstore/ferricstore
|
|
|
16
16
|
|
|
17
17
|
Requires Node.js 22.22 or newer. The SDK ships ESM and CommonJS builds and is tested with Node 22, 24, and 26.
|
|
18
18
|
|
|
19
|
+
## Compatibility
|
|
20
|
+
|
|
21
|
+
SDK `0.3.x` requires FerricStore server `0.9.1` or newer. FerricStore 0.9.1 is a
|
|
22
|
+
breaking beta API contract update, while the native wire protocol remains v1
|
|
23
|
+
(`FSNP` framing and existing opcode numbers are unchanged). Capabilities and
|
|
24
|
+
response-size limits are negotiated per connection from the HELLO-shaped
|
|
25
|
+
startup response rather than inferred from a server version table.
|
|
26
|
+
|
|
19
27
|
ESM:
|
|
20
28
|
|
|
21
29
|
```ts
|
|
@@ -34,7 +42,7 @@ const { FerricStoreClient, JsonCodec } = require("@ferricstore/ferricstore");
|
|
|
34
42
|
docker run -p 6388:6388 \
|
|
35
43
|
-e FERRICSTORE_PROTECTED_MODE=false \
|
|
36
44
|
-v ferricstore_data:/data \
|
|
37
|
-
ghcr.io/ferricstore/ferricstore:0.
|
|
45
|
+
ghcr.io/ferricstore/ferricstore:0.9.1
|
|
38
46
|
```
|
|
39
47
|
|
|
40
48
|
## Cluster-aware client
|
|
@@ -114,8 +122,10 @@ timeouts while waiting for a local flow-control or write-queue slot are
|
|
|
114
122
|
|
|
115
123
|
Topology-aware clients retry one routed command or one physical fused pipeline
|
|
116
124
|
after a successful topology refresh only when the server's typed reroute error
|
|
117
|
-
explicitly reports `
|
|
118
|
-
|
|
125
|
+
explicitly reports both `retryable: true` and `safe_to_retry: true`. Producer
|
|
126
|
+
backpressure follows the same flags and honors `retry_after_ms` within the
|
|
127
|
+
configured delay cap. Split or scattered pipelines and uncertain connection
|
|
128
|
+
failures are never replayed.
|
|
119
129
|
|
|
120
130
|
Connection-local state mutations (`AUTH`, `CLIENT SETNAME`, `QUIT`, `RESET`,
|
|
121
131
|
and related native controls) are rejected on reconnecting and topology clients
|
|
@@ -161,12 +171,14 @@ const flow = await FerricStoreClient.fromUrl("ferric://fs0.example.com:6388", {
|
|
|
161
171
|
});
|
|
162
172
|
```
|
|
163
173
|
|
|
164
|
-
Native connections honor the flow-control windows advertised by
|
|
174
|
+
Native connections honor the flow-control windows advertised by the
|
|
175
|
+
HELLO-shaped `STARTUP` response and
|
|
165
176
|
`WINDOW_UPDATE`. Available data-request slots are refilled immediately as
|
|
166
177
|
responses finish; waiting requests are scheduled fairly across protocol lanes.
|
|
167
178
|
The adapter also caps automatic lanes and same-lane work to the advertised lane
|
|
168
179
|
queue, and caps ordered pipeline chunks and outbound frame bodies to the limits
|
|
169
|
-
negotiated during
|
|
180
|
+
negotiated during startup. Compact response codecs and aggregate response sizes
|
|
181
|
+
are enabled only when advertised for that connection.
|
|
170
182
|
Set `nativeOptions.maxQueuedRequests` to bound the local waiter queue (default
|
|
171
183
|
`65_536`, or `0` to reject immediately when all advertised slots are occupied).
|
|
172
184
|
Queue waiting counts toward `nativeOptions.timeoutMs`.
|
|
@@ -375,12 +387,25 @@ await flow.scheduleCreate("orders-every-five-minutes", {
|
|
|
375
387
|
FIFO Flow state policy is opt-in per state:
|
|
376
388
|
|
|
377
389
|
```ts
|
|
378
|
-
await flow.installPolicy("email", {
|
|
390
|
+
const policy = await flow.installPolicy("email", {
|
|
379
391
|
states: {
|
|
380
392
|
queued: { mode: "fifo" }
|
|
381
393
|
}
|
|
382
394
|
});
|
|
383
395
|
|
|
396
|
+
// Direct writes deep-patch by default. Fence concurrent editors with generation CAS.
|
|
397
|
+
const updated = await flow.installPolicy("email", {
|
|
398
|
+
expectedGeneration: policy.generation,
|
|
399
|
+
maxActiveMs: 300_000
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
// Full replacement is explicit on the client API.
|
|
403
|
+
await flow.installPolicy("email", {
|
|
404
|
+
expectedGeneration: updated.generation,
|
|
405
|
+
replace: true,
|
|
406
|
+
states: { queued: { mode: "fifo" } }
|
|
407
|
+
});
|
|
408
|
+
|
|
384
409
|
await flow.create("email-3", {
|
|
385
410
|
partitionKey: "tenant-a:email",
|
|
386
411
|
payload: Buffer.from("welcome"),
|
|
@@ -390,6 +415,10 @@ await flow.create("email-3", {
|
|
|
390
415
|
```
|
|
391
416
|
|
|
392
417
|
FIFO states require a `partitionKey`; priority is for parallel states.
|
|
418
|
+
`Workflow.installPolicy()` defaults to full replacement because workflow declarations
|
|
419
|
+
describe a complete policy. Pass `replace: false` when a workflow install should patch.
|
|
420
|
+
FIFO ordering is enforced by the server per `(type, state, partitionKey)`; worker
|
|
421
|
+
concurrency remains available across different partitions.
|
|
393
422
|
|
|
394
423
|
## FerricStore KV And Data Structures
|
|
395
424
|
|