@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.
Files changed (110) hide show
  1. package/README.md +35 -6
  2. package/dist/index.cjs +1379 -667
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +83 -33
  5. package/dist/index.d.ts +83 -33
  6. package/dist/index.js +1384 -676
  7. package/dist/index.js.map +1 -1
  8. package/docs/api/assets/hierarchy.js +1 -1
  9. package/docs/api/assets/navigation.js +1 -1
  10. package/docs/api/assets/search.js +1 -1
  11. package/docs/api/classes/ClaimHydrationError.html +6 -3
  12. package/docs/api/classes/ConnectionClosedError.html +6 -3
  13. package/docs/api/classes/FerricStoreClient.html +4 -4
  14. package/docs/api/classes/FerricStoreError.html +6 -3
  15. package/docs/api/classes/FlowAlreadyExistsError.html +6 -3
  16. package/docs/api/classes/FlowBatchError.html +6 -3
  17. package/docs/api/classes/FlowNotFoundError.html +6 -3
  18. package/docs/api/classes/FlowWrongStateError.html +6 -3
  19. package/docs/api/classes/InvalidCommandError.html +6 -3
  20. package/docs/api/classes/KeyValueStore.html +2 -2
  21. package/docs/api/classes/LeaseRenewalError.html +1 -1
  22. package/docs/api/classes/LockHeldError.html +6 -3
  23. package/docs/api/classes/LockNotOwnedError.html +6 -3
  24. package/docs/api/classes/NativeAdapter.html +2 -2
  25. package/docs/api/classes/OverloadedError.html +6 -4
  26. package/docs/api/classes/QueueCompletionError.html +1 -1
  27. package/docs/api/classes/ReconnectingExecutor.html +4 -4
  28. package/docs/api/classes/RequestTimeoutError.html +6 -3
  29. package/docs/api/classes/RerouteError.html +6 -3
  30. package/docs/api/classes/StaleLeaseError.html +6 -3
  31. package/docs/api/classes/StalePolicyGenerationError.html +39 -0
  32. package/docs/api/classes/TDigestStore.html +2 -2
  33. package/docs/api/classes/TopKStore.html +1 -1
  34. package/docs/api/classes/TopologyNativeAdapterPool.html +3 -3
  35. package/docs/api/classes/Workflow.html +1 -1
  36. package/docs/api/classes/WorkflowWorker.html +2 -2
  37. package/docs/api/functions/classifyServerError.html +1 -1
  38. package/docs/api/functions/isReconnectableClosedConnectionError.html +1 -1
  39. package/docs/api/functions/mapException.html +1 -1
  40. package/docs/api/hierarchy.html +1 -1
  41. package/docs/api/index.html +22 -8
  42. package/docs/api/interfaces/AdminListOptions.html +1 -1
  43. package/docs/api/interfaces/CancelOptions.html +2 -2
  44. package/docs/api/interfaces/ClaimDueOptions.html +3 -3
  45. package/docs/api/interfaces/CompleteJobsAndClaimJobsResult.html +6 -6
  46. package/docs/api/interfaces/CompleteManyOptions.html +2 -2
  47. package/docs/api/interfaces/CompleteOptions.html +2 -2
  48. package/docs/api/interfaces/CompleteOutcome.html +1 -1
  49. package/docs/api/interfaces/CreateManyOptions.html +1 -1
  50. package/docs/api/interfaces/EffectCompensateOptions.html +1 -1
  51. package/docs/api/interfaces/EffectConfirmOptions.html +1 -1
  52. package/docs/api/interfaces/EffectFailOptions.html +1 -1
  53. package/docs/api/interfaces/EffectStatusOptions.html +1 -1
  54. package/docs/api/interfaces/ExtendLeaseOptions.html +2 -2
  55. package/docs/api/interfaces/FailOptions.html +2 -2
  56. package/docs/api/interfaces/FailOutcome.html +1 -1
  57. package/docs/api/interfaces/FerricStoreClientFromUrlOptions.html +1 -1
  58. package/docs/api/interfaces/FerricStoreClientOptions.html +1 -1
  59. package/docs/api/interfaces/{FetchOrComputeLegacyResult.html → FetchOrComputeComputeResult.html} +2 -2
  60. package/docs/api/interfaces/FlowMaxActiveFailure.html +3 -0
  61. package/docs/api/interfaces/FlowPolicyBackoffSnapshot.html +5 -0
  62. package/docs/api/interfaces/FlowPolicyOptions.html +8 -4
  63. package/docs/api/interfaces/FlowPolicyRetentionSnapshot.html +3 -0
  64. package/docs/api/interfaces/FlowPolicyRetrySnapshot.html +4 -0
  65. package/docs/api/interfaces/FlowPolicySnapshot.html +17 -0
  66. package/docs/api/interfaces/FlowPolicyStateSnapshot.html +6 -0
  67. package/docs/api/interfaces/FlowRecord.html +4 -2
  68. package/docs/api/interfaces/FlowStatePolicy.html +2 -2
  69. package/docs/api/interfaces/HistoryOptions.html +2 -2
  70. package/docs/api/interfaces/InvocationCreateOptions.html +2 -2
  71. package/docs/api/interfaces/LeaseMutationOptions.html +2 -2
  72. package/docs/api/interfaces/LimitListOptions.html +1 -1
  73. package/docs/api/interfaces/MutateOptions.html +2 -2
  74. package/docs/api/interfaces/NamedValueMutation.html +1 -1
  75. package/docs/api/interfaces/ProtocolCommand.html +2 -2
  76. package/docs/api/interfaces/ReadOptions.html +2 -2
  77. package/docs/api/interfaces/ReclaimOptions.html +2 -2
  78. package/docs/api/interfaces/RequestContext.html +2 -2
  79. package/docs/api/interfaces/RequestContextOptions.html +2 -2
  80. package/docs/api/interfaces/RetryOptions.html +2 -2
  81. package/docs/api/interfaces/RetryOutcome.html +1 -1
  82. package/docs/api/interfaces/RunStepsItem.html +2 -2
  83. package/docs/api/interfaces/RunStepsManyOptions.html +2 -2
  84. package/docs/api/interfaces/SearchOptions.html +2 -2
  85. package/docs/api/interfaces/StartAndClaimOptions.html +4 -2
  86. package/docs/api/interfaces/StepContinueOptions.html +3 -3
  87. package/docs/api/interfaces/TDigestCreateOptions.html +1 -1
  88. package/docs/api/interfaces/TDigestMergeOptions.html +1 -1
  89. package/docs/api/interfaces/TransitionOptions.html +2 -2
  90. package/docs/api/interfaces/TransitionOutcome.html +1 -1
  91. package/docs/api/modules.html +1 -1
  92. package/docs/api/types/ConnectionRequestDisposition.html +1 -1
  93. package/docs/api/types/FetchOrComputeFencedResult.html +1 -0
  94. package/docs/api/types/FetchOrComputeResult.html +1 -1
  95. package/docs/api/types/FlowPolicyBackoffKind.html +1 -0
  96. package/docs/api/types/FlowStateMode.html +1 -1
  97. package/docs/api/types/FlowStatePolicyLike.html +1 -1
  98. package/docs/api/types/ManagementPairs.html +1 -1
  99. package/docs/api/types/RequestDisposition.html +1 -1
  100. package/docs/api/types/SearchStateMeta.html +1 -1
  101. package/docs/api/types/TopKReserveOptions.html +1 -1
  102. package/docs/api/variables/COMMAND_OPCODES.html +1 -1
  103. package/docs/api/variables/FERRICSTORE_MINIMUM_SERVER_VERSION.html +2 -0
  104. package/docs/api/variables/FERRICSTORE_NATIVE_PROTOCOL_VERSION.html +2 -0
  105. package/docs/api/variables/FERRICSTORE_SDK_VERSION.html +2 -0
  106. package/docs/api/variables/MAX_FLOW_POLICY_GENERATION.html +1 -0
  107. package/package.json +6 -1
  108. package/docs/api/interfaces/FetchOrComputeFencedResult.html +0 -9
  109. package/docs/api/types/FetchOrComputeComputeResult.html +0 -1
  110. 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.7.5
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 `safe_to_retry: true`. Split or scattered pipelines and
118
- uncertain connection failures are never replayed.
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 `STARTUP` and
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 `STARTUP`.
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