@hesohq/node 0.4.3 → 0.5.0-dev.101

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 (3) hide show
  1. package/index.d.ts +247 -9
  2. package/index.js +14 -1
  3. package/package.json +6 -6
package/index.d.ts CHANGED
@@ -72,9 +72,75 @@ export declare function verify(receiptBytes: Buffer | Uint8Array | string): Acti
72
72
  /** Verify a receipt AND report its trusted-time status separately. */
73
73
  export declare function verifyWithTime(receiptBytesInput: Buffer | Uint8Array | string): ActionVerdictWithTime
74
74
  /**
75
- * Verify a receipt AND re-derive its ERT classification from the embedded taxonomy.
76
- * Uses heso-engine's ClassifyReDeriver (embedded taxonomy). Only available
77
- * when the `process` feature is enabled (pulls heso-engine).
75
+ * The base verdict + the rendered signed metrics + the offline-recomputed cost.
76
+ *
77
+ * `verdict` / `trustLevel` are exactly what [`verify`] returns. The metric fields
78
+ * are the SIGNED values (the closed `status` / `token_source` enums rendered to
79
+ * their wire snake_case strings). `recomputedCostMicros` / `costDisplay` are
80
+ * RECOMPUTED from the rate card the caller passed in — `priced == false` (and
81
+ * both absent) when that card does not price the model; never a guessed figure.
82
+ * `cardIdMatches` tells the reader whether the card handed in is the one the
83
+ * receipt actually named.
84
+ */
85
+ export interface MetricsVerdict {
86
+ /** The base `ActionOutcome` verdict tag (`"Valid"`, `"HashMismatch"`, …). */
87
+ verdict: string
88
+ /** The re-derived trust level (`"L0"`/`"L1"`); `""` unless `verdict == "Valid"`. */
89
+ trustLevel: string
90
+ /** Whether the receipt carried a signed `metrics` block. */
91
+ hasMetrics: boolean
92
+ /** Wall-clock duration in whole milliseconds. */
93
+ durationMs?: number
94
+ /** Execution-outcome class, wire snake_case (`"ok"`, `"server_error"`, …). */
95
+ status?: string
96
+ /** Transport status code, when one applied. */
97
+ statusCode?: number
98
+ /** Provider-reported (or estimated) input tokens. */
99
+ tokensIn?: number
100
+ /** Provider-reported (or estimated) output tokens. */
101
+ tokensOut?: number
102
+ /** Token-count source, wire snake_case (`"provider_reported"`/`"estimated"`). */
103
+ tokenSource?: string
104
+ /** Request bytes sent, when the transport exposed it. */
105
+ bytesIn?: number
106
+ /** Response bytes received, when the transport exposed it. */
107
+ bytesOut?: number
108
+ /** Transport-level retries before this outcome. */
109
+ retries?: number
110
+ /** The rate-card id AS NAMED in the signed receipt. */
111
+ rateCardId?: string
112
+ /** The `provider/model` key derived from the signed `action.fields`. */
113
+ modelKey?: string
114
+ /** Recomputed cost in micro-USD (`BigInt`); absent when not priced. */
115
+ recomputedCostMicros?: bigint
116
+ /** Recomputed cost as a 6-decimal display string; absent when not priced. */
117
+ costDisplay?: string
118
+ /** `true` iff the model is priced by the passed-in card. */
119
+ priced: boolean
120
+ /** Whether the passed-in card is the one the receipt named. */
121
+ cardIdMatches: boolean
122
+ }
123
+ /**
124
+ * Verify a single `ActionReceipt` AND render its signed metrics + recompute cost
125
+ * from the passed-in public rate card — the node mirror of the WASM
126
+ * `verifyActionReceiptWithRates`.
127
+ *
128
+ * Runs the EXISTING offline verify for the base outcome + trust level (so that
129
+ * path is unchanged), then renders the signed metrics and recomputes the cost via
130
+ * the SHARED `heso_action::metrics_view` glue. Never throws on a malformed receipt
131
+ * or card — those degrade to `has_metrics: false` / `priced: false` exactly as the
132
+ * WASM export does. The cost render is purely informational and NEVER masks a
133
+ * verify failure: a tampered metric flips the `action_hash`, so `verdict` is a
134
+ * non-`Valid` tag while the (meaningless) recompute still reflects whatever bytes
135
+ * are present — the caller branches on `verdict`, never the dollar figure.
136
+ *
137
+ * `receipt_bytes` — the raw `ActionReceipt` JSON bytes (Buffer/Uint8Array/string).
138
+ * `rate_card_json` — the public rate-card JSON the cost is recomputed from.
139
+ */
140
+ export declare function verifyWithRates(receiptBytes: Buffer | Uint8Array | string, rateCardJson: string): MetricsVerdict
141
+ /**
142
+ * Verify a receipt AND re-derive its ERT classification from the embedded taxonomy
143
+ * (heso-engine's ClassifyReDeriver). Only available when `process` is enabled.
78
144
  */
79
145
  export declare function verifyRederiving(receiptBytesInput: Buffer | Uint8Array | string): ActionVerdict
80
146
  /**
@@ -126,6 +192,74 @@ export declare function verifyApprovalToken(token: Buffer, actionCanonical: Buff
126
192
  * `now_unix_secs` — current time as BigInt Unix seconds
127
193
  */
128
194
  export declare function verifyDelegation(wire: Buffer, registeredOperatorKey: Buffer, actionHash: Buffer, approvalToken: Buffer, requiredScope: string, requiredDecision: string, nowUnixSecs: bigint): VerifiedDelegation
195
+ /**
196
+ * The kind-tagged verdict of [`verify_commitment`]. `verdict` is one of
197
+ * `"Valid"`, `"InvalidSignature"`, `"FingerprintMismatch"`, `"WrongAlgorithm"`,
198
+ * `"Malformed"`; the cloud appends ONLY on `"Valid"`. `signer_fpr` carries the
199
+ * recomputed `blake3(pubkey)` fingerprint (only meaningful on `"Valid"`).
200
+ */
201
+ export interface CommitmentVerdict {
202
+ verdict: string
203
+ signerFpr: string
204
+ }
205
+ /**
206
+ * REJECT-MORE-ONLY. Verify a detached commitment-envelope signature received by
207
+ * the cloud: parse the envelope JSON bytes, re-canonicalize VIA THE KERNEL,
208
+ * `verify_strict` the detached Ed25519 signature under
209
+ * `COMMITMENT_SIGNING_DOMAIN`, and confirm the recomputed commitment fingerprint
210
+ * (`blake3(pubkey)`) equals `claimedSignerFpr`. Produces ZERO new canonical/
211
+ * signed bytes. Never throws — every outcome (including malformed input) is a
212
+ * kind-tagged [`CommitmentVerdict`] so the caller fails closed on any
213
+ * non-`"Valid"`.
214
+ *
215
+ * `envelopeBytes` — the envelope as JSON on the wire (Buffer)
216
+ * `operatorPubkeyB64` — the operator Ed25519 public key (base64 standard)
217
+ * `detachedSigB64` — the detached Ed25519 signature (base64 standard)
218
+ * `claimedSignerFpr` — the wire `signer_fpr` (`blake3(pubkey)` 64-hex)
219
+ */
220
+ export declare function verifyCommitment(envelopeBytes: Buffer, operatorPubkeyB64: string, detachedSigB64: string, claimedSignerFpr: string): CommitmentVerdict
221
+ /**
222
+ * PURE. Return the RFC-8785 (JCS) canonical bytes of a commitment envelope JSON
223
+ * string — the exact bytes the detached operator signature is computed over
224
+ * (after the `COMMITMENT_SIGNING_DOMAIN` prefix). Delegates to the single kernel
225
+ * JCS impl; never re-canonicalizes. Throws `[MALFORMED]` if the JSON does not
226
+ * parse as a `CommitmentEnvelope` and `[CANON]` if it cannot be canonicalized.
227
+ */
228
+ export declare function commitmentEnvelopeCanonicalBytes(envelopeJson: string): Buffer
229
+ /**
230
+ * The **commitment fingerprint** of an Ed25519 public key: `blake3(raw_pubkey)`,
231
+ * the full 32-byte digest, lowercase 64-hex, NO prefix. This is the value the
232
+ * producer puts in the wire `signer_fpr` and the cloud joins `approver_keys` on.
233
+ * It is DISTINCT from [`signer_fingerprint`] (the `heso:`-prefixed Grade-0
234
+ * fingerprint). Throws `[MALFORMED]` if `pubkeyB64` is not base64 of 32 bytes.
235
+ */
236
+ export declare function commitmentFingerprint(pubkeyB64: string): string
237
+ /**
238
+ * The `heso:`-prefixed Grade-0 **signer fingerprint** of an Ed25519 public key
239
+ * (`heso_verify::signer_fingerprint`). This is the identity-tier fingerprint —
240
+ * NOT the commitment fingerprint (see [`commitment_fingerprint`]). Exposed here
241
+ * because it is otherwise unexposed in every binding and other surfaces need it.
242
+ * Returns `null` when `pubkeyB64` is not a valid 32-byte Ed25519 key.
243
+ */
244
+ export declare function signerFingerprint(pubkeyB64: string): string | null
245
+ /**
246
+ * Stamp the cross-receipt chain block (`session_id`, `seq`, `prev_receipt_hash`)
247
+ * into an `ActionContent` BEFORE it is signed, then recompute its `action_hash`
248
+ * so the returned content is ready to sign — the producer-side helper that closes
249
+ * the JS verifiable-chain gap (CORE-WIRE design §A.4).
250
+ *
251
+ * `contentJson` — the unstamped `ActionContent` JSON
252
+ * `sessionId` — the chain/session this action is bound to
253
+ * `prevContentJson` — the predecessor receipt's `ActionContent` JSON, or `null`
254
+ * for genesis. The link hash + next `seq` are COMPUTED from
255
+ * it via the kernel's `link_hash` rule (matching `derive.py`).
256
+ *
257
+ * CRYPTO-SAFETY: stamping the chain block changes `action_canonical_bytes` →
258
+ * `action_hash` → the operator signature. This is a SUCCESS-PATH byte change. It
259
+ * is invoked ONLY for chained sessions; a standalone receipt (no call here) stays
260
+ * byte-identical to the existing standalone goldens.
261
+ */
262
+ export declare function bindIntoChainJs(contentJson: string, sessionId: string, prevContentJson?: string | undefined | null): Buffer
129
263
  /**
130
264
  * Verify an ordered array of ActionReceipts as a tamper-evident chain.
131
265
  * Input: array of Buffers (one per receipt) OR a JSON string of an array.
@@ -155,6 +289,49 @@ export declare function verifyConsistencyJs(oldSize: number, oldRootHex: string,
155
289
  export declare function verifyAuditChain(bytes: Buffer | string): boolean
156
290
  /** Return the hex hash of the embedded taxonomy (golden: 9f3bbaaf…). */
157
291
  export declare function taxonomyHash(): string
292
+ /**
293
+ * The derived ERT a `classify` probe returns — the structural classification of
294
+ * observed facts against the taxonomy. Read-only and advisory: it signs/mints
295
+ * nothing and touches NO canonical/signed bytes (the same role as the PyO3
296
+ * `classify`). The string fields are the `snake_case` wire spellings.
297
+ */
298
+ export interface ClassifyErt {
299
+ /** The matched taxonomy resource class id (e.g. `payment_endpoint`). */
300
+ resourceClass: string
301
+ /** The resource effect (`read_only`/`mutating`/`destructive`/…). */
302
+ effect: string
303
+ /** The egress lane (`none`/`internal`/`external`/…). */
304
+ egress: string
305
+ /** The observability lane. */
306
+ observability: string
307
+ /** The coarse verb wire spelling (`delete`/`payment`/`account_change`/…). */
308
+ coarseVerb: string
309
+ }
310
+ /**
311
+ * Classify observed facts against the taxonomy and return the derived ERT.
312
+ *
313
+ * `signal_hints_json`: JSON-encoded `SignalHints` (Buffer, Uint8Array, or string)
314
+ * — the same wire shape as the `signal` field in `ProcessInput`. The target host
315
+ * is read out-of-band from a custom top-level `host` JSON key (SignalHints itself
316
+ * has no host field), exactly as the PyO3 `classify` twin does.
317
+ * `taxonomy_src`: pass `null` for the embedded taxonomy (the pinned
318
+ * `9f3bbaaf…` anchor), or TOML bytes to classify against a custom taxonomy.
319
+ *
320
+ * PURE READ-ONLY: this is an advisory probe — it signs/mints nothing and touches
321
+ * no canonical/signed bytes. It mirrors the fixed PyO3 `classify` byte-for-byte:
322
+ * the recorded enum hints (`effect`/`origin`/`observed_via`) are lowered via the
323
+ * SAME `Effect::parse`/`Origin::parse`/`ObservedVia::parse` the engine uses, so an
324
+ * unrecognized value parses to `None` (never an invented/relaxed lane). Only
325
+ * available with the `process` feature (it links `heso-engine`).
326
+ */
327
+ export declare function classify(signalHintsJson: Buffer | Uint8Array | string, taxonomySrc?: Buffer | undefined | null): ClassifyErt
328
+ /**
329
+ * True when a coarse verb wire spelling trips the credential floor's
330
+ * "destructive" lane — the LOCKED set `{delete, payment, account_change}`. The
331
+ * single source of this mapping for JS callers, mirroring the PyO3 helper so the
332
+ * two bindings agree. Pure read-only.
333
+ */
334
+ export declare function isDestructive(coarseVerb: string): boolean
158
335
  /** Destructively redact fields and return the modified fields JSON. */
159
336
  export declare function redactDestructiveJs(fieldsJson: string, fieldPaths: Array<string>): string
160
337
  /**
@@ -162,6 +339,17 @@ export declare function redactDestructiveJs(fieldsJson: string, fieldPaths: Arra
162
339
  * `salts` is an array of 32-byte Buffers (one per field, in order).
163
340
  */
164
341
  export declare function redactCommitJs(fieldsJson: string, fieldPaths: Array<string>, salts: Array<Buffer>): RedactCommitResult
342
+ /**
343
+ * Verify a single commit-and-reveal field reveal against its signed redaction
344
+ * marker: recompute `BLAKE3(salt ++ field_path ++ value)` and check it equals
345
+ * `marker.commitment`. Pure (no OsRng, no filesystem); returns a bool, never
346
+ * throws on a mismatch. The Node half of "reveal-and-prove a redacted field".
347
+ *
348
+ * `reveal_json` — a `FieldReveal`: `{ field_path, salt_hex, value_json }`.
349
+ * `marker_json` — the matching `RedactionMarker` from the signed receipt's
350
+ * `content.redaction.markers`.
351
+ */
352
+ export declare function verifyRevealJs(revealJson: string, markerJson: string): boolean
165
353
  /**
166
354
  * Construct an OperatorKey from a 32-byte seed (OsRng-free, deterministic).
167
355
  * The preferred/documented entry point.
@@ -202,10 +390,16 @@ export declare function processAction(processInputJson: Buffer | Uint8Array | st
202
390
  * returned ONLY if it opens `Valid(L1)`; any other verdict is surfaced as an
203
391
  * error rather than handing back a receipt the offline verifier would reject.
204
392
  *
205
- * Returns the serialized ActionReceipt JSON bytes. Only available with `process`
206
- * (loads a key from the filesystem; never wasm-reachable).
393
+ * Returns the serialized ActionReceipt JSON bytes WITH the kernel-signed
394
+ * commitment block spliced in as a top-level `commitment` sibling (the same shape
395
+ * the engine `process` path emits, and the shape the SDK finalize consumer lifts
396
+ * via `receipt.get("commitment")`). The commitment is signed over the FINAL L1
397
+ * body by the SAME operator key — the SDK never holds the key (CORE-WIRE design
398
+ * §0.2). `chainHead` is the prior chain head this commitment links to (the SDK
399
+ * reads it off its local chain); absent/empty defaults to genesis. Only available
400
+ * with `process` (loads a key from the filesystem; never wasm-reachable).
207
401
  */
208
- export declare function assembleL1FromParts(suspendedContentJson: string, approverRecordJson: string, approverPubkeyB64: string, coSigB64: string, projectRoot: string, keyPassphrase?: string | undefined | null, relayedAnchorJson?: string | undefined | null): Buffer
402
+ export declare function assembleL1FromParts(suspendedContentJson: string, approverRecordJson: string, approverPubkeyB64: string, coSigB64: string, projectRoot: string, keyPassphrase?: string | undefined | null, relayedAnchorJson?: string | undefined | null, chainHead?: string | undefined | null): Buffer
209
403
  /**
210
404
  * Assemble a complete multi-approver k-of-n QUORUM ActionReceipt from a suspended
211
405
  * L0 body, the gate's `threshold` + `roster`, and the per-approver detached
@@ -224,10 +418,54 @@ export declare function assembleL1FromParts(suspendedContentJson: string, approv
224
418
  * `parts_json` is a JSON array of `{ record, approverPubkeyB64, coSigB64 }`
225
419
  * objects. `roster_json` is a JSON array of base64 approver public keys.
226
420
  *
227
- * Returns the serialized ActionReceipt JSON bytes. Only available with `process`
228
- * (loads a key from the filesystem; never wasm-reachable).
421
+ * Returns the serialized ActionReceipt JSON bytes WITH the kernel-signed commitment
422
+ * block spliced in as a top-level `commitment` sibling (the same shape the engine
423
+ * `process` path emits, and the shape the SDK finalize consumer lifts via
424
+ * `receipt.get("commitment")`). The commitment is signed over the FINAL quorum L1
425
+ * body by the SAME operator key — the SDK never holds the key (§0.2). `chainHead`
426
+ * is the prior chain head this commitment links to; absent/empty defaults to
427
+ * genesis. Only available with `process` (loads a key from the filesystem; never
428
+ * wasm-reachable).
429
+ */
430
+ export declare function assembleQuorumFromParts(suspendedContentJson: string, threshold: number, rosterJson: string, partsJson: string, projectRoot: string, keyPassphrase?: string | undefined | null, chainHead?: string | undefined | null): Buffer
431
+ /**
432
+ * Suspend a gated action: mint the signed `suspended` chain link and return the
433
+ * raw resume token (returned ONCE) plus the action spec hash. Mirrors the PyO3
434
+ * `process_suspend` body 1:1 — the ProcessInput MUST carry `reclassify=false` so
435
+ * the descriptor is signed verbatim and stays byte-stable across the lifecycle.
436
+ *
437
+ * Returns JSON bytes:
438
+ * `{"session_id": str, "resume_token": str, "action_spec": str, "chain_path": str}`.
439
+ */
440
+ export declare function processSuspend(processInputJson: Buffer | Uint8Array | string, projectRoot: string, sessionId: string, sla: string, expiresAt: string, onTimeout: string, contextScheme: string, contextBlob: Buffer, toolVersionHash?: string | undefined | null): Buffer
441
+ /**
442
+ * Resume a suspended session: re-read the chain, apply the decision, fire-or-replay.
443
+ * Mirrors the PyO3 `process_resume` body 1:1. On `Fire` it mints + appends the
444
+ * `completed` link under `ACTION_SIGNING_DOMAIN` and advances the cursor.
445
+ *
446
+ * Returns JSON bytes `{"decision": str, "committed": bool, "kind"?: str,
447
+ * "reason"?: str}` where `decision` is one of
448
+ * `fire`/`replay`/`pending`/`terminal`/`uncertain`/`refused`.
449
+ */
450
+ export declare function processResume(processInputJson: Buffer | Uint8Array | string, projectRoot: string, sessionId: string, presentedToken: string, contextBlob: Buffer): Buffer
451
+ /**
452
+ * Append an approver/ledger-signed decision link to a session's chain. Mirrors the
453
+ * PyO3 `process_append_decision` body 1:1.
454
+ *
455
+ * `kind`: one of `"approved"` / `"denied"` / `"escalated"` / `"expired"`. **Fails
456
+ * closed** without a `decision.key` unless [`INSECURE_DECISION_KEY_ENV`] is set
457
+ * (see `load_decision_signer`) — the approver key is cloud-custodied in prod.
458
+ */
459
+ export declare function processAppendDecision(projectRoot: string, sessionId: string, kind: string, reason?: string | undefined | null, decidedAt?: string | undefined | null): void
460
+ /**
461
+ * Read the current lifecycle state of a session chain (the head link's kind).
462
+ * Mirrors the PyO3 `process_read_chain_head` body 1:1.
463
+ *
464
+ * Returns the head kind as a lowercase string (`"suspended"` / `"approved"` /
465
+ * `"denied"` / `"expired"` / `"completed"` / `"escalated"`), or `None` if no chain
466
+ * exists yet.
229
467
  */
230
- export declare function assembleQuorumFromParts(suspendedContentJson: string, threshold: number, rosterJson: string, partsJson: string, projectRoot: string, keyPassphrase?: string | undefined | null): Buffer
468
+ export declare function processReadChainHead(projectRoot: string, sessionId: string): string | null
231
469
  /** A loaded operator key, exposing just the public-key surface. */
232
470
  export declare class OperatorKey {
233
471
  /** Return the base64 standard-alphabet public key. */
package/index.js CHANGED
@@ -310,11 +310,12 @@ if (!nativeBinding) {
310
310
  throw new Error(`Failed to load native binding`)
311
311
  }
312
312
 
313
- const { OperatorKey, verify, verifyWithTime, verifyRederiving, actionCanonicalBytesJs, l1ContentCanonicalBytesJs, contentHash, anchoredContentHashJs, shortHash, chainHashHex, verifyApprovalToken, verifyDelegation, verifyChain, verifySessionChainJs, verifySessionChainWithRotationJs, verifyInclusionJs, verifyConsistencyJs, verifyAuditChain, taxonomyHash, redactDestructiveJs, redactCommitJs, keyFromSeed, generateKey, blake3Hex, processAction, assembleL1FromParts, assembleQuorumFromParts } = nativeBinding
313
+ const { OperatorKey, verify, verifyWithTime, verifyWithRates, verifyRederiving, actionCanonicalBytesJs, l1ContentCanonicalBytesJs, contentHash, anchoredContentHashJs, shortHash, chainHashHex, verifyApprovalToken, verifyDelegation, verifyCommitment, commitmentEnvelopeCanonicalBytes, commitmentFingerprint, signerFingerprint, bindIntoChainJs, verifyChain, verifySessionChainJs, verifySessionChainWithRotationJs, verifyInclusionJs, verifyConsistencyJs, verifyAuditChain, taxonomyHash, classify, isDestructive, redactDestructiveJs, redactCommitJs, verifyRevealJs, keyFromSeed, generateKey, blake3Hex, processAction, assembleL1FromParts, assembleQuorumFromParts, processSuspend, processResume, processAppendDecision, processReadChainHead } = nativeBinding
314
314
 
315
315
  module.exports.OperatorKey = OperatorKey
316
316
  module.exports.verify = verify
317
317
  module.exports.verifyWithTime = verifyWithTime
318
+ module.exports.verifyWithRates = verifyWithRates
318
319
  module.exports.verifyRederiving = verifyRederiving
319
320
  module.exports.actionCanonicalBytesJs = actionCanonicalBytesJs
320
321
  module.exports.l1ContentCanonicalBytesJs = l1ContentCanonicalBytesJs
@@ -324,6 +325,11 @@ module.exports.shortHash = shortHash
324
325
  module.exports.chainHashHex = chainHashHex
325
326
  module.exports.verifyApprovalToken = verifyApprovalToken
326
327
  module.exports.verifyDelegation = verifyDelegation
328
+ module.exports.verifyCommitment = verifyCommitment
329
+ module.exports.commitmentEnvelopeCanonicalBytes = commitmentEnvelopeCanonicalBytes
330
+ module.exports.commitmentFingerprint = commitmentFingerprint
331
+ module.exports.signerFingerprint = signerFingerprint
332
+ module.exports.bindIntoChainJs = bindIntoChainJs
327
333
  module.exports.verifyChain = verifyChain
328
334
  module.exports.verifySessionChainJs = verifySessionChainJs
329
335
  module.exports.verifySessionChainWithRotationJs = verifySessionChainWithRotationJs
@@ -331,11 +337,18 @@ module.exports.verifyInclusionJs = verifyInclusionJs
331
337
  module.exports.verifyConsistencyJs = verifyConsistencyJs
332
338
  module.exports.verifyAuditChain = verifyAuditChain
333
339
  module.exports.taxonomyHash = taxonomyHash
340
+ module.exports.classify = classify
341
+ module.exports.isDestructive = isDestructive
334
342
  module.exports.redactDestructiveJs = redactDestructiveJs
335
343
  module.exports.redactCommitJs = redactCommitJs
344
+ module.exports.verifyRevealJs = verifyRevealJs
336
345
  module.exports.keyFromSeed = keyFromSeed
337
346
  module.exports.generateKey = generateKey
338
347
  module.exports.blake3Hex = blake3Hex
339
348
  module.exports.processAction = processAction
340
349
  module.exports.assembleL1FromParts = assembleL1FromParts
341
350
  module.exports.assembleQuorumFromParts = assembleQuorumFromParts
351
+ module.exports.processSuspend = processSuspend
352
+ module.exports.processResume = processResume
353
+ module.exports.processAppendDecision = processAppendDecision
354
+ module.exports.processReadChainHead = processReadChainHead
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hesohq/node",
3
- "version": "0.4.3",
3
+ "version": "0.5.0-dev.101",
4
4
  "description": "napi-rs native Node.js addon for the HESO Enterprise trust layer",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -34,10 +34,10 @@
34
34
  },
35
35
  "license": "LicenseRef-Proprietary",
36
36
  "optionalDependencies": {
37
- "@hesohq/node-darwin-arm64": "0.4.3",
38
- "@hesohq/node-darwin-x64": "0.4.3",
39
- "@hesohq/node-linux-arm64-gnu": "0.4.3",
40
- "@hesohq/node-linux-x64-gnu": "0.4.3",
41
- "@hesohq/node-win32-x64-msvc": "0.4.3"
37
+ "@hesohq/node-darwin-arm64": "0.5.0-dev.101",
38
+ "@hesohq/node-darwin-x64": "0.5.0-dev.101",
39
+ "@hesohq/node-linux-arm64-gnu": "0.5.0-dev.101",
40
+ "@hesohq/node-linux-x64-gnu": "0.5.0-dev.101",
41
+ "@hesohq/node-win32-x64-msvc": "0.5.0-dev.101"
42
42
  }
43
43
  }