From 07e15545afc6f8e2b64cadf1fe2cf167f36b8c31 Mon Sep 17 00:00:00 2001 From: Jen Garcia Date: Mon, 12 Oct 2026 13:56:58 -0400 Subject: [PATCH] chore: version packages --- .changeset/adapter-api-lifecycle-noops.md | 5 --- .changeset/adapter-api-open-body-errors.md | 5 --- .changeset/adapter-api-reauth-refusals.md | 5 --- .changeset/adapter-api-request-helpers.md | 5 --- .changeset/core-module-cleanup.md | 13 ------ .changeset/core-subpath-folders.md | 5 --- .changeset/enum-field-kind.md | 7 ---- .changeset/export-association-partition.md | 5 --- .changeset/fts5-not-in-phrase.md | 6 --- .changeset/merge-subscribe-options.md | 8 ---- .changeset/mutate-fresh-read.md | 6 --- .changeset/record-id-messages.md | 6 --- .changeset/reserved-keys-rationale.md | 5 --- .changeset/split-adapter-api.md | 5 --- .changeset/split-conformance-fixtures.md | 5 --- .changeset/split-stack-modules.md | 5 --- .changeset/sqlite-shared-dedupe.md | 6 --- .changeset/sqlite-shared-indexes.md | 6 --- .changeset/typed-collection-filters.md | 7 ---- .changeset/typed-collections.md | 8 ---- .changeset/typed-migrations-at-open.md | 6 --- .changeset/validation-error-headers.md | 7 ---- .changeset/versions-sequence-fixture.md | 5 --- .changeset/wire-types-dedupe.md | 12 ------ .changeset/write-expectation.md | 5 --- packages/adapter-api/CHANGELOG.md | 28 +++++++++++++ packages/adapter-api/package.json | 2 +- packages/adapter-conformance/CHANGELOG.md | 11 +++++ packages/adapter-conformance/package.json | 2 +- packages/adapter-local/CHANGELOG.md | 14 +++++++ packages/adapter-local/package.json | 2 +- packages/blob-adapter-disk/CHANGELOG.md | 11 +++++ packages/blob-adapter-disk/package.json | 2 +- packages/blob-adapter-s3/CHANGELOG.md | 11 +++++ packages/blob-adapter-s3/package.json | 2 +- packages/commons/CHANGELOG.md | 15 +++++++ packages/commons/package.json | 2 +- packages/conformance-fixtures/CHANGELOG.md | 35 ++++++++++++++++ packages/conformance-fixtures/package.json | 2 +- packages/core/CHANGELOG.md | 40 +++++++++++++++++++ packages/core/package.json | 2 +- .../record-adapter-do-sqlite/CHANGELOG.md | 18 +++++++++ .../record-adapter-do-sqlite/package.json | 2 +- packages/record-adapter-sqlite/CHANGELOG.md | 20 ++++++++++ packages/record-adapter-sqlite/package.json | 2 +- packages/wire-types/CHANGELOG.md | 17 ++++++++ packages/wire-types/package.json | 2 +- 47 files changed, 231 insertions(+), 169 deletions(-) delete mode 100644 .changeset/adapter-api-lifecycle-noops.md delete mode 100644 .changeset/adapter-api-open-body-errors.md delete mode 100644 .changeset/adapter-api-reauth-refusals.md delete mode 100644 .changeset/adapter-api-request-helpers.md delete mode 100644 .changeset/core-module-cleanup.md delete mode 100644 .changeset/core-subpath-folders.md delete mode 100644 .changeset/enum-field-kind.md delete mode 100644 .changeset/export-association-partition.md delete mode 100644 .changeset/fts5-not-in-phrase.md delete mode 100644 .changeset/merge-subscribe-options.md delete mode 100644 .changeset/mutate-fresh-read.md delete mode 100644 .changeset/record-id-messages.md delete mode 100644 .changeset/reserved-keys-rationale.md delete mode 100644 .changeset/split-adapter-api.md delete mode 100644 .changeset/split-conformance-fixtures.md delete mode 100644 .changeset/split-stack-modules.md delete mode 100644 .changeset/sqlite-shared-dedupe.md delete mode 100644 .changeset/sqlite-shared-indexes.md delete mode 100644 .changeset/typed-collection-filters.md delete mode 100644 .changeset/typed-collections.md delete mode 100644 .changeset/typed-migrations-at-open.md delete mode 100644 .changeset/validation-error-headers.md delete mode 100644 .changeset/versions-sequence-fixture.md delete mode 100644 .changeset/wire-types-dedupe.md delete mode 100644 .changeset/write-expectation.md diff --git a/.changeset/adapter-api-lifecycle-noops.md b/.changeset/adapter-api-lifecycle-noops.md deleted file mode 100644 index 39add3f4..00000000 --- a/.changeset/adapter-api-lifecycle-noops.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/adapter-api': minor ---- - -`APIAdapter` no longer defines `flush()` or `close()`. Both were no-ops, and both are optional on `StackAdapter`, so `Stack` skips them already; a caller invoking them directly on an `APIAdapter` can drop the call. diff --git a/.changeset/adapter-api-open-body-errors.md b/.changeset/adapter-api-open-body-errors.md deleted file mode 100644 index a1fd191f..00000000 --- a/.changeset/adapter-api-open-body-errors.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/adapter-api': minor ---- - -A discovery or auth handshake response that is empty or not JSON now throws `APIAdapterError` naming the endpoint, as every other success response does, rather than a `SyntaxError` or `TypeError`. diff --git a/.changeset/adapter-api-reauth-refusals.md b/.changeset/adapter-api-reauth-refusals.md deleted file mode 100644 index 93af57fd..00000000 --- a/.changeset/adapter-api-reauth-refusals.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/adapter-api': minor ---- - -Only a refused credential is reported as an authentication failure. A handshake step answering a bare `5xx` now throws `APIAdapterError` rather than `APIAdapterHandshakeError`, and a renewal that fails on a dropped connection or a server error surfaces as that `APIAdapterConnectionError` or `APIAdapterError` rather than as `APIAdapterReauthError`. A change feed whose renewal fails that way keeps reconnecting instead of stopping. diff --git a/.changeset/adapter-api-request-helpers.md b/.changeset/adapter-api-request-helpers.md deleted file mode 100644 index aef62671..00000000 --- a/.changeset/adapter-api-request-helpers.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/adapter-api': patch ---- - -Errors for a response missing its body now name the endpoint exactly as it was requested, encoded path and query string included. diff --git a/.changeset/core-module-cleanup.md b/.changeset/core-module-cleanup.md deleted file mode 100644 index e83e3744..00000000 --- a/.changeset/core-module-cleanup.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@haverstack/core': minor -'@haverstack/conformance-fixtures': minor ---- - -Grantees are checked by one validator, whether they arrive as a permission element, in a `_grant` record, or as a `grantType()`/`listTypeGrants()`/`revokeType()` target: - -- A permission element's grantee errors carry the failing field's path (`permissions[0].grantee.entityId` rather than `permissions[0].grantee`). -- A group grantee missing both `groupId` and `role` reports both problems, on every surface. -- A grant target's refusal is still a 400, now naming every problem after `Invalid grant target:`. -- Every grantee message ends with a period, like the other association messages. The `_grant` fixtures that pin these messages are updated to match. - -`revokeType()` now matches a stored grant's actions as a set, so the order they were named in, or an action named twice, no longer stops a revoke from matching. diff --git a/.changeset/core-subpath-folders.md b/.changeset/core-subpath-folders.md deleted file mode 100644 index 8bdc3a9f..00000000 --- a/.changeset/core-subpath-folders.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/core': patch ---- - -Organize the `./wire`, `./did` and `./adapter` subpath modules into folders of their own. The subpath exports are unchanged. diff --git a/.changeset/enum-field-kind.md b/.changeset/enum-field-kind.md deleted file mode 100644 index b6e9b483..00000000 --- a/.changeset/enum-field-kind.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@haverstack/core': minor -'@haverstack/conformance-fixtures': minor -'@haverstack/adapter-conformance': minor ---- - -`enum` is a field kind: `{ kind: 'enum', values: [...] }` replaces `{ kind: 'string', enum: [...] }`. `defineType()` refuses the `enum` key on any field. `isCompatible()` now checks enums: a required enum accepts only an enum candidate whose values it lists all of, and a required `string` or `text` accepts an enum. An enum becoming a plain `string` is additive; a `string` becoming an enum needs a version bump. A typed read types an enum field as its listed values or any other string (`StoredContentOf`, `UnlistedValue`) and no longer throws on an unlisted value, since an enum can widen in place; typed writes still take only the listed values (`ContentOf`, `PatchOf`). `migration()` types both sides as `StoredContentOf`, so a step carries an unlisted value through. A typed `subscribe()` delivers a record that `migrateAll()` moves off the handle's version without its `record`, instead of throwing in the dispatcher. Conformance fixtures pin a 422 for a value outside the list and a 409 for removing values. The adapter conformance suite checks that an enum field sorts by value. diff --git a/.changeset/export-association-partition.md b/.changeset/export-association-partition.md deleted file mode 100644 index c4cec5c1..00000000 --- a/.changeset/export-association-partition.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/core': minor ---- - -Export `isAuthorityAssociation` from `@haverstack/core`, for apps that split a journal entry's association changes between `amendAssociations()` and `amendAccess()`, and `partitionAssociations` and `AUTHORITY_ASSOCIATION_KINDS` from `@haverstack/core/adapter`, for storage engines that keep both halves in one table. diff --git a/.changeset/fts5-not-in-phrase.md b/.changeset/fts5-not-in-phrase.md deleted file mode 100644 index a5c451b4..00000000 --- a/.changeset/fts5-not-in-phrase.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@haverstack/record-adapter-sqlite': patch -'@haverstack/record-adapter-do-sqlite': patch ---- - -`filter.search` no longer drops a `NOT` written inside a quoted phrase: `"cats (not dogs"` searches for the phrase as typed. diff --git a/.changeset/merge-subscribe-options.md b/.changeset/merge-subscribe-options.md deleted file mode 100644 index 496f9928..00000000 --- a/.changeset/merge-subscribe-options.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@haverstack/core': minor -'@haverstack/adapter-api': patch -'@haverstack/adapter-local': patch -'@haverstack/record-adapter-sqlite': patch ---- - -`StackRecordAdapter.subscribeChanges()` takes `SubscribeOptions`, the same options a subscriber passes to `subscribe()`. `SubscribeChangesOptions` is gone from `@haverstack/core/adapter`; it had the same fields, and `Stack` already forwarded every one of them, the subscriber's own `onError` included. A new `MutateOptions` type in `@haverstack/core/adapter` names the options every version-bumping adapter mutation takes. `GrantContent` and `InstallRequest` are now derived from `TypeGrant`. diff --git a/.changeset/mutate-fresh-read.md b/.changeset/mutate-fresh-read.md deleted file mode 100644 index 1871a2ea..00000000 --- a/.changeset/mutate-fresh-read.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@haverstack/record-adapter-sqlite': patch -'@haverstack/record-adapter-do-sqlite': patch ---- - -Concurrent writes to one record no longer lose updates: `mutateRecord`, `restoreVersion` and `commitMigration` read and check the record inside the transaction that writes it, so a content patch applies to the content as it stands rather than to an earlier read. diff --git a/.changeset/record-id-messages.md b/.changeset/record-id-messages.md deleted file mode 100644 index f5db2327..00000000 --- a/.changeset/record-id-messages.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@haverstack/core': minor -'@haverstack/conformance-fixtures': minor ---- - -A record `id` using the reserved `_` prefix is now refused as `Invalid ID "": uses the reserved "_" prefix.`, the same `Invalid "": .` shape every other record-ID refusal uses. The `error-bad-request-id-reserved-prefix` fixture pins the new wording. diff --git a/.changeset/reserved-keys-rationale.md b/.changeset/reserved-keys-rationale.md deleted file mode 100644 index 38bf915e..00000000 --- a/.changeset/reserved-keys-rationale.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/conformance-fixtures': patch ---- - -Correct the stated reason in the `error-reserved-content-key` fixture's description. The refusal and its response are unchanged. diff --git a/.changeset/split-adapter-api.md b/.changeset/split-adapter-api.md deleted file mode 100644 index 42855a81..00000000 --- a/.changeset/split-adapter-api.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/adapter-api': patch ---- - -Split the adapter into one module per layer. The package exports are unchanged. diff --git a/.changeset/split-conformance-fixtures.md b/.changeset/split-conformance-fixtures.md deleted file mode 100644 index e2626842..00000000 --- a/.changeset/split-conformance-fixtures.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/conformance-fixtures': patch ---- - -Split the fixtures into one module per endpoint group. The package exports are unchanged. diff --git a/.changeset/split-stack-modules.md b/.changeset/split-stack-modules.md deleted file mode 100644 index d80e41e7..00000000 --- a/.changeset/split-stack-modules.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/core': patch ---- - -Split `Stack` and `ScopedStack` into folders of smaller modules — the `StackClient` interface and its option types, the migration registry, system Type definitions, write invariants, app installs, type grants, attachment cleanup, scope authority and the scoped change feed each live in a file of their own — and fold logic the two classes repeated into shared helpers. The public API and behaviour are unchanged. diff --git a/.changeset/sqlite-shared-dedupe.md b/.changeset/sqlite-shared-dedupe.md deleted file mode 100644 index b6f7120f..00000000 --- a/.changeset/sqlite-shared-dedupe.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@haverstack/record-adapter-sqlite': patch -'@haverstack/record-adapter-do-sqlite': patch ---- - -Remove redundant code from the bundled SQLite record logic: unused barrel exports, local aliases of core's native sort fields, and repeated not-found/version-read/row-hydration code. diff --git a/.changeset/sqlite-shared-indexes.md b/.changeset/sqlite-shared-indexes.md deleted file mode 100644 index 7bfe3acd..00000000 --- a/.changeset/sqlite-shared-indexes.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@haverstack/record-adapter-sqlite': patch -'@haverstack/record-adapter-do-sqlite': patch ---- - -Internal restructure of the bundled SQLite record logic: the full-text and content indexes move into their own module. No behavior change. diff --git a/.changeset/typed-collection-filters.md b/.changeset/typed-collection-filters.md deleted file mode 100644 index a8fcc330..00000000 --- a/.changeset/typed-collection-filters.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@haverstack/core': minor ---- - -A collection's `filter.content`, `filter.contentPresent` and `sort.contentField` are typed from its content type: a typo'd field, a value outside an enum, an object value (which never matches) or a nested sort field no longer compiles. Adds `ContentPathOf` and `SortableFieldOf`. - -A collection query with a content filter or sort reaches only records stored at the handle's version, since a predicate in the handle's shape cannot be translated into another version's. Its first page sets `skipped.older` or `skipped.newer` when records at another version match the rest of the query. diff --git a/.changeset/typed-collections.md b/.changeset/typed-collections.md deleted file mode 100644 index a4ef7995..00000000 --- a/.changeset/typed-collections.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@haverstack/core': minor -'@haverstack/commons': patch ---- - -Typed access goes through collections. `client.collection(handle)` returns a `Collection` typed by the handle's content, with one signature per verb — `get`, `query`, `subscribe`, `create`, `mutate`, `patchContent`, `associate`, `dissociate`, `amendAssociations`, `grantAccess`, `revokeAccess`, `amendAccess`, `delete`, `undelete` and `restoreVersion` — every one returning a typed record without a re-read. A collection spans the handle's whole family and migrates each record in memory to the handle's version. A record stored at a newer version is a misfit: `query()` reports it in `misfits` and keeps the page and cursor, `get()` throws `MisfitError`, and `subscribe()` carries it as `misfit`. A content write to a record at an older version commits its migration as a write of its own first. `collection()` refuses a handle whose `migratesFrom` has no migration passed to `Stack.open()`. - -The handle-first overloads of `get`, `query`, `create`, `mutate`, `patchContent` and `subscribe` are removed, with `TypedRecord`, `TypedQuery`, `TypedChange`, `TypedChangeSet` and `TypedSubscribeOptions`. `PatchOf` is removed: a collection's patch type is `ContentPatch`, derived from its content type, and `StoredContent` is what its reads return. diff --git a/.changeset/typed-migrations-at-open.md b/.changeset/typed-migrations-at-open.md deleted file mode 100644 index d50d8b1c..00000000 --- a/.changeset/typed-migrations-at-open.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@haverstack/core': minor -'@haverstack/commons': minor ---- - -A type handle carries what `defineType()` takes: `typeHandle({ id, name, schema, migratesFrom })`, with `migratesFrom` given as a handle or a `TypeId`. `defineType(handle)` and a manifest's `types` take it as written. Migrations are typed values built with `migration(from, to, fn)`, where `fn` is checked as the first handle's content to the second's, and are passed to `Stack.open(adapter, { migrations })`. `migratesFrom` must name an earlier version of the same family, and `typeHandle()` and `defineType()` refuse anything else. `migration()` checks that pairing within a family and builds a step into another family without it, so an app's own type can migrate into a commons type. `Stack.open()` refuses a set of migrations it could not walk: a duplicate `from`, a malformed TypeId, a step backwards within a family, or a cycle. `registerMigration()` and `MigrationFn` are removed. `@haverstack/commons` drops `CommonsType`; its exports are plain type handles. diff --git a/.changeset/validation-error-headers.md b/.changeset/validation-error-headers.md deleted file mode 100644 index 0af2c0e5..00000000 --- a/.changeset/validation-error-headers.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@haverstack/core': minor -'@haverstack/wire-types': minor -'@haverstack/conformance-fixtures': minor ---- - -`StackValidationError`'s message header names what was validated: record content keeps "Content validation failed", a type schema reads "Schema validation failed", and argument checks read "Invalid arguments". `associate()`/`dissociate()` and `grantAccess()`/`revokeAccess()` report list errors under `associations`/`permissions`, the parameter the caller passed, rather than `changes`. `deserializeError()` keeps the header a server sent. diff --git a/.changeset/versions-sequence-fixture.md b/.changeset/versions-sequence-fixture.md deleted file mode 100644 index 7c55cf44..00000000 --- a/.changeset/versions-sequence-fixture.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/conformance-fixtures': minor ---- - -Replace `getVersionsAfterMutateFixtures` with `getVersionsSequenceFixtures`: one sequence that reads the version history before and after a restore, a migration and an association, so the order those reads depend on is part of the data. The history now includes the version 2 snapshot a record at version 3 holds. diff --git a/.changeset/wire-types-dedupe.md b/.changeset/wire-types-dedupe.md deleted file mode 100644 index ac8a1801..00000000 --- a/.changeset/wire-types-dedupe.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@haverstack/wire-types': minor -'@haverstack/conformance-fixtures': patch -'@haverstack/adapter-api': patch ---- - -`@haverstack/wire-types` no longer restates shapes `@haverstack/core` already defines, and its auth handshake types share one prefix: - -- `AuthChallengeRequest` and `AuthTokenRequest` are removed. Use `WireAuthChallengeRequest` and `WireAuthTokenRequest`, re-exported from `@haverstack/core/wire`, where the parsers that return them live. -- `AuthChallengeResponse` and `AuthTokenResponse` are renamed `WireAuthChallengeResponse` and `WireAuthTokenResponse` to match. Their shape is unchanged. -- `WireActor` and `WireChangeActor` are now aliases of core's `Actor` and `ChangeActor`. Their shape is unchanged. -- `WireAssociationEditsRequest` is removed; nothing referenced it. diff --git a/.changeset/write-expectation.md b/.changeset/write-expectation.md deleted file mode 100644 index d53445ac..00000000 --- a/.changeset/write-expectation.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@haverstack/core': minor ---- - -`Stack` and `ScopedStack` accept an internal write expectation on every write verb — the record's Type family, and on a content write its exact version — checked against the read each write already makes, so a typed write is refused before anything lands and costs no extra round trip. A typed `mutate()` or `patchContent()` now uses it: a record of another family is not found, and one stored at another version of the family is still refused with `StackBadRequestError`. `ScopedStack.amendAssociations()` and `amendAccess()` take their options third and `surface` fourth, as `Stack`'s do. diff --git a/packages/adapter-api/CHANGELOG.md b/packages/adapter-api/CHANGELOG.md index d6c7d261..ad764e1b 100644 --- a/packages/adapter-api/CHANGELOG.md +++ b/packages/adapter-api/CHANGELOG.md @@ -1,5 +1,33 @@ # @haverstack/adapter-api +## 0.41.0 + +### Minor Changes + +- [#443](https://github.com/haverstack/core/pull/443) [`ffefedd`](https://github.com/haverstack/core/commit/ffefeddcad5479890978aa77e4ecd410932ec5f9) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `APIAdapter` no longer defines `flush()` or `close()`. Both were no-ops, and both are optional on `StackAdapter`, so `Stack` skips them already; a caller invoking them directly on an `APIAdapter` can drop the call. + +- [#443](https://github.com/haverstack/core/pull/443) [`ffefedd`](https://github.com/haverstack/core/commit/ffefeddcad5479890978aa77e4ecd410932ec5f9) Thanks [@cuibonobo](https://github.com/cuibonobo)! - A discovery or auth handshake response that is empty or not JSON now throws `APIAdapterError` naming the endpoint, as every other success response does, rather than a `SyntaxError` or `TypeError`. + +- [#444](https://github.com/haverstack/core/pull/444) [`ddad23c`](https://github.com/haverstack/core/commit/ddad23c52f7d4d93e7a2910f65dfc9862167d5fc) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Only a refused credential is reported as an authentication failure. A handshake step answering a bare `5xx` now throws `APIAdapterError` rather than `APIAdapterHandshakeError`, and a renewal that fails on a dropped connection or a server error surfaces as that `APIAdapterConnectionError` or `APIAdapterError` rather than as `APIAdapterReauthError`. A change feed whose renewal fails that way keeps reconnecting instead of stopping. + +### Patch Changes + +- [#443](https://github.com/haverstack/core/pull/443) [`d82f64e`](https://github.com/haverstack/core/commit/d82f64e8ad729bc34946c48c0d3ec0dc5805bd8b) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Errors for a response missing its body now name the endpoint exactly as it was requested, encoded path and query string included. + +- [#436](https://github.com/haverstack/core/pull/436) [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `StackRecordAdapter.subscribeChanges()` takes `SubscribeOptions`, the same options a subscriber passes to `subscribe()`. `SubscribeChangesOptions` is gone from `@haverstack/core/adapter`; it had the same fields, and `Stack` already forwarded every one of them, the subscriber's own `onError` included. A new `MutateOptions` type in `@haverstack/core/adapter` names the options every version-bumping adapter mutation takes. `GrantContent` and `InstallRequest` are now derived from `TypeGrant`. + +- [#443](https://github.com/haverstack/core/pull/443) [`e18ddb7`](https://github.com/haverstack/core/commit/e18ddb7cf5f92423fdfb1a925c7f571c8f001196) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Split the adapter into one module per layer. The package exports are unchanged. + +- [#442](https://github.com/haverstack/core/pull/442) [`59f34ce`](https://github.com/haverstack/core/commit/59f34ce3cf777c39db3fa08bacb645f8001f9ae2) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `@haverstack/wire-types` no longer restates shapes `@haverstack/core` already defines, and its auth handshake types share one prefix: + - `AuthChallengeRequest` and `AuthTokenRequest` are removed. Use `WireAuthChallengeRequest` and `WireAuthTokenRequest`, re-exported from `@haverstack/core/wire`, where the parsers that return them live. + - `AuthChallengeResponse` and `AuthTokenResponse` are renamed `WireAuthChallengeResponse` and `WireAuthTokenResponse` to match. Their shape is unchanged. + - `WireActor` and `WireChangeActor` are now aliases of core's `Actor` and `ChangeActor`. Their shape is unchanged. + - `WireAssociationEditsRequest` is removed; nothing referenced it. + +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`59f34ce`](https://github.com/haverstack/core/commit/59f34ce3cf777c39db3fa08bacb645f8001f9ae2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + - @haverstack/wire-types@0.41.0 + ## 0.40.0 ### Minor Changes diff --git a/packages/adapter-api/package.json b/packages/adapter-api/package.json index ad506aa9..b1ee4fbb 100644 --- a/packages/adapter-api/package.json +++ b/packages/adapter-api/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/adapter-api", - "version": "0.40.0", + "version": "0.41.0", "description": "Remote server adapter for Haverstack", "type": "module", "exports": { diff --git a/packages/adapter-conformance/CHANGELOG.md b/packages/adapter-conformance/CHANGELOG.md index cecf80ea..d5e99f68 100644 --- a/packages/adapter-conformance/CHANGELOG.md +++ b/packages/adapter-conformance/CHANGELOG.md @@ -1,5 +1,16 @@ # @haverstack/adapter-conformance +## 0.11.0 + +### Minor Changes + +- [#433](https://github.com/haverstack/core/pull/433) [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `enum` is a field kind: `{ kind: 'enum', values: [...] }` replaces `{ kind: 'string', enum: [...] }`. `defineType()` refuses the `enum` key on any field. `isCompatible()` now checks enums: a required enum accepts only an enum candidate whose values it lists all of, and a required `string` or `text` accepts an enum. An enum becoming a plain `string` is additive; a `string` becoming an enum needs a version bump. A typed read types an enum field as its listed values or any other string (`StoredContentOf`, `UnlistedValue`) and no longer throws on an unlisted value, since an enum can widen in place; typed writes still take only the listed values (`ContentOf`, `PatchOf`). `migration()` types both sides as `StoredContentOf`, so a step carries an unlisted value through. A typed `subscribe()` delivers a record that `migrateAll()` moves off the handle's version without its `record`, instead of throwing in the dispatcher. Conformance fixtures pin a 422 for a value outside the list and a 409 for removing values. The adapter conformance suite checks that an enum field sorts by value. + +### Patch Changes + +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + ## 0.10.0 ### Minor Changes diff --git a/packages/adapter-conformance/package.json b/packages/adapter-conformance/package.json index 98fbb199..dee32c16 100644 --- a/packages/adapter-conformance/package.json +++ b/packages/adapter-conformance/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/adapter-conformance", - "version": "0.10.0", + "version": "0.11.0", "description": "Runnable conformance suite for StackRecordAdapter/StackBlobAdapter implementers — the invariants docs/spec/adapters.md documents, as tests you point at your own adapter", "type": "module", "exports": { diff --git a/packages/adapter-local/CHANGELOG.md b/packages/adapter-local/CHANGELOG.md index 31d4fbd5..065bf0cc 100644 --- a/packages/adapter-local/CHANGELOG.md +++ b/packages/adapter-local/CHANGELOG.md @@ -1,5 +1,19 @@ # @haverstack/adapter-local +## 0.41.0 + +### Minor Changes + +- Released for a breaking change in `@haverstack/blob-adapter-disk`, `@haverstack/core`, `@haverstack/record-adapter-sqlite`. + +### Patch Changes + +- [#436](https://github.com/haverstack/core/pull/436) [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `StackRecordAdapter.subscribeChanges()` takes `SubscribeOptions`, the same options a subscriber passes to `subscribe()`. `SubscribeChangesOptions` is gone from `@haverstack/core/adapter`; it had the same fields, and `Stack` already forwarded every one of them, the subscriber's own `onError` included. A new `MutateOptions` type in `@haverstack/core/adapter` names the options every version-bumping adapter mutation takes. `GrantContent` and `InstallRequest` are now derived from `TypeGrant`. +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`d8ef10d`](https://github.com/haverstack/core/commit/d8ef10d10ca670f5a26323c369b1966556091a09), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`dd7cba0`](https://github.com/haverstack/core/commit/dd7cba03facde763d23819a92fa0873861775c91), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`af5bc5c`](https://github.com/haverstack/core/commit/af5bc5cc3c49de7ad0ed19cdade4acd646c5af05), [`2d9da43`](https://github.com/haverstack/core/commit/2d9da432994d7cbf7c9cb09057d8b88a8636b655), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + - @haverstack/blob-adapter-disk@0.40.0 + - @haverstack/record-adapter-sqlite@0.34.0 + ## 0.40.0 ### Minor Changes diff --git a/packages/adapter-local/package.json b/packages/adapter-local/package.json index 0555ae0e..748ef8a5 100644 --- a/packages/adapter-local/package.json +++ b/packages/adapter-local/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/adapter-local", - "version": "0.40.0", + "version": "0.41.0", "description": "Local (SQLite + disk) stack adapter for Haverstack", "type": "module", "engines": { diff --git a/packages/blob-adapter-disk/CHANGELOG.md b/packages/blob-adapter-disk/CHANGELOG.md index a7900e2b..3d1a56ee 100644 --- a/packages/blob-adapter-disk/CHANGELOG.md +++ b/packages/blob-adapter-disk/CHANGELOG.md @@ -1,5 +1,16 @@ # @haverstack/blob-adapter-disk +## 0.40.0 + +### Minor Changes + +- Released for a breaking change in `@haverstack/core`. + +### Patch Changes + +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + ## 0.39.0 ### Minor Changes diff --git a/packages/blob-adapter-disk/package.json b/packages/blob-adapter-disk/package.json index 2a8c8b28..9bbf8a44 100644 --- a/packages/blob-adapter-disk/package.json +++ b/packages/blob-adapter-disk/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/blob-adapter-disk", - "version": "0.39.0", + "version": "0.40.0", "description": "Disk blob adapter for Haverstack", "type": "module", "exports": { diff --git a/packages/blob-adapter-s3/CHANGELOG.md b/packages/blob-adapter-s3/CHANGELOG.md index 21aca53c..57d47565 100644 --- a/packages/blob-adapter-s3/CHANGELOG.md +++ b/packages/blob-adapter-s3/CHANGELOG.md @@ -1,5 +1,16 @@ # @haverstack/blob-adapter-s3 +## 0.28.0 + +### Minor Changes + +- Released for a breaking change in `@haverstack/core`. + +### Patch Changes + +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + ## 0.27.0 ### Minor Changes diff --git a/packages/blob-adapter-s3/package.json b/packages/blob-adapter-s3/package.json index 07705849..f7f1671a 100644 --- a/packages/blob-adapter-s3/package.json +++ b/packages/blob-adapter-s3/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/blob-adapter-s3", - "version": "0.27.0", + "version": "0.28.0", "description": "S3 (and S3-compatible) blob adapter for Haverstack", "type": "module", "exports": { diff --git a/packages/commons/CHANGELOG.md b/packages/commons/CHANGELOG.md index efd1f353..6af8ada8 100644 --- a/packages/commons/CHANGELOG.md +++ b/packages/commons/CHANGELOG.md @@ -1,5 +1,20 @@ # @haverstack/commons +## 0.37.0 + +### Minor Changes + +- [#415](https://github.com/haverstack/core/pull/415) [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051) Thanks [@cuibonobo](https://github.com/cuibonobo)! - A type handle carries what `defineType()` takes: `typeHandle({ id, name, schema, migratesFrom })`, with `migratesFrom` given as a handle or a `TypeId`. `defineType(handle)` and a manifest's `types` take it as written. Migrations are typed values built with `migration(from, to, fn)`, where `fn` is checked as the first handle's content to the second's, and are passed to `Stack.open(adapter, { migrations })`. `migratesFrom` must name an earlier version of the same family, and `typeHandle()` and `defineType()` refuse anything else. `migration()` checks that pairing within a family and builds a step into another family without it, so an app's own type can migrate into a commons type. `Stack.open()` refuses a set of migrations it could not walk: a duplicate `from`, a malformed TypeId, a step backwards within a family, or a cycle. `registerMigration()` and `MigrationFn` are removed. `@haverstack/commons` drops `CommonsType`; its exports are plain type handles. + +### Patch Changes + +- [#446](https://github.com/haverstack/core/pull/446) [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Typed access goes through collections. `client.collection(handle)` returns a `Collection` typed by the handle's content, with one signature per verb — `get`, `query`, `subscribe`, `create`, `mutate`, `patchContent`, `associate`, `dissociate`, `amendAssociations`, `grantAccess`, `revokeAccess`, `amendAccess`, `delete`, `undelete` and `restoreVersion` — every one returning a typed record without a re-read. A collection spans the handle's whole family and migrates each record in memory to the handle's version. A record stored at a newer version is a misfit: `query()` reports it in `misfits` and keeps the page and cursor, `get()` throws `MisfitError`, and `subscribe()` carries it as `misfit`. A content write to a record at an older version commits its migration as a write of its own first. `collection()` refuses a handle whose `migratesFrom` has no migration passed to `Stack.open()`. + + The handle-first overloads of `get`, `query`, `create`, `mutate`, `patchContent` and `subscribe` are removed, with `TypedRecord`, `TypedQuery`, `TypedChange`, `TypedChangeSet` and `TypedSubscribeOptions`. `PatchOf` is removed: a collection's patch type is `ContentPatch`, derived from its content type, and `StoredContent` is what its reads return. + +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + ## 0.36.0 ### Minor Changes diff --git a/packages/commons/package.json b/packages/commons/package.json index 9a689f7c..a6ad2f1f 100644 --- a/packages/commons/package.json +++ b/packages/commons/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/commons", - "version": "0.36.0", + "version": "0.37.0", "description": "Canonical Schema Commons type definitions for Haverstack — register commons types exactly as written", "type": "module", "exports": { diff --git a/packages/conformance-fixtures/CHANGELOG.md b/packages/conformance-fixtures/CHANGELOG.md index 88b35886..37e381d3 100644 --- a/packages/conformance-fixtures/CHANGELOG.md +++ b/packages/conformance-fixtures/CHANGELOG.md @@ -1,5 +1,40 @@ # @haverstack/conformance-fixtures +## 0.36.0 + +### Minor Changes + +- [#439](https://github.com/haverstack/core/pull/439) [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Grantees are checked by one validator, whether they arrive as a permission element, in a `_grant` record, or as a `grantType()`/`listTypeGrants()`/`revokeType()` target: + - A permission element's grantee errors carry the failing field's path (`permissions[0].grantee.entityId` rather than `permissions[0].grantee`). + - A group grantee missing both `groupId` and `role` reports both problems, on every surface. + - A grant target's refusal is still a 400, now naming every problem after `Invalid grant target:`. + - Every grantee message ends with a period, like the other association messages. The `_grant` fixtures that pin these messages are updated to match. + + `revokeType()` now matches a stored grant's actions as a set, so the order they were named in, or an action named twice, no longer stops a revoke from matching. + +- [#433](https://github.com/haverstack/core/pull/433) [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `enum` is a field kind: `{ kind: 'enum', values: [...] }` replaces `{ kind: 'string', enum: [...] }`. `defineType()` refuses the `enum` key on any field. `isCompatible()` now checks enums: a required enum accepts only an enum candidate whose values it lists all of, and a required `string` or `text` accepts an enum. An enum becoming a plain `string` is additive; a `string` becoming an enum needs a version bump. A typed read types an enum field as its listed values or any other string (`StoredContentOf`, `UnlistedValue`) and no longer throws on an unlisted value, since an enum can widen in place; typed writes still take only the listed values (`ContentOf`, `PatchOf`). `migration()` types both sides as `StoredContentOf`, so a step carries an unlisted value through. A typed `subscribe()` delivers a record that `migrateAll()` moves off the handle's version without its `record`, instead of throwing in the dispatcher. Conformance fixtures pin a 422 for a value outside the list and a 409 for removing values. The adapter conformance suite checks that an enum field sorts by value. + +- [#439](https://github.com/haverstack/core/pull/439) [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122) Thanks [@cuibonobo](https://github.com/cuibonobo)! - A record `id` using the reserved `_` prefix is now refused as `Invalid ID "": uses the reserved "_" prefix.`, the same `Invalid "": .` shape every other record-ID refusal uses. The `error-bad-request-id-reserved-prefix` fixture pins the new wording. + +- [#413](https://github.com/haverstack/core/pull/413) [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `StackValidationError`'s message header names what was validated: record content keeps "Content validation failed", a type schema reads "Schema validation failed", and argument checks read "Invalid arguments". `associate()`/`dissociate()` and `grantAccess()`/`revokeAccess()` report list errors under `associations`/`permissions`, the parameter the caller passed, rather than `changes`. `deserializeError()` keeps the header a server sent. + +- [#441](https://github.com/haverstack/core/pull/441) [`6d6ab03`](https://github.com/haverstack/core/commit/6d6ab0304d3323a889c0ce740b632f79217627f6) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Replace `getVersionsAfterMutateFixtures` with `getVersionsSequenceFixtures`: one sequence that reads the version history before and after a restore, a migration and an association, so the order those reads depend on is part of the data. The history now includes the version 2 snapshot a record at version 3 holds. + +### Patch Changes + +- [#439](https://github.com/haverstack/core/pull/439) [`d0b7369`](https://github.com/haverstack/core/commit/d0b7369750c40c0d5686c31ba20f95b335b6d529) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Correct the stated reason in the `error-reserved-content-key` fixture's description. The refusal and its response are unchanged. + +- [#440](https://github.com/haverstack/core/pull/440) [`07f1fbd`](https://github.com/haverstack/core/commit/07f1fbd9d40907700083dd535416ec2133775c44) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Split the fixtures into one module per endpoint group. The package exports are unchanged. + +- [#442](https://github.com/haverstack/core/pull/442) [`59f34ce`](https://github.com/haverstack/core/commit/59f34ce3cf777c39db3fa08bacb645f8001f9ae2) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `@haverstack/wire-types` no longer restates shapes `@haverstack/core` already defines, and its auth handshake types share one prefix: + - `AuthChallengeRequest` and `AuthTokenRequest` are removed. Use `WireAuthChallengeRequest` and `WireAuthTokenRequest`, re-exported from `@haverstack/core/wire`, where the parsers that return them live. + - `AuthChallengeResponse` and `AuthTokenResponse` are renamed `WireAuthChallengeResponse` and `WireAuthTokenResponse` to match. Their shape is unchanged. + - `WireActor` and `WireChangeActor` are now aliases of core's `Actor` and `ChangeActor`. Their shape is unchanged. + - `WireAssociationEditsRequest` is removed; nothing referenced it. + +- Updated dependencies [[`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`59f34ce`](https://github.com/haverstack/core/commit/59f34ce3cf777c39db3fa08bacb645f8001f9ae2)]: + - @haverstack/wire-types@0.41.0 + ## 0.35.0 ### Minor Changes diff --git a/packages/conformance-fixtures/package.json b/packages/conformance-fixtures/package.json index a62cd0e9..5f2c5f6b 100644 --- a/packages/conformance-fixtures/package.json +++ b/packages/conformance-fixtures/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/conformance-fixtures", - "version": "0.35.0", + "version": "0.36.0", "description": "Request/response fixtures for the Stack API wire protocol, shared between adapter-api and server implementations", "type": "module", "exports": { diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 1df21d6f..ad0228b6 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,45 @@ # @haverstack/core +## 0.42.0 + +### Minor Changes + +- [#439](https://github.com/haverstack/core/pull/439) [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Grantees are checked by one validator, whether they arrive as a permission element, in a `_grant` record, or as a `grantType()`/`listTypeGrants()`/`revokeType()` target: + - A permission element's grantee errors carry the failing field's path (`permissions[0].grantee.entityId` rather than `permissions[0].grantee`). + - A group grantee missing both `groupId` and `role` reports both problems, on every surface. + - A grant target's refusal is still a 400, now naming every problem after `Invalid grant target:`. + - Every grantee message ends with a period, like the other association messages. The `_grant` fixtures that pin these messages are updated to match. + + `revokeType()` now matches a stored grant's actions as a set, so the order they were named in, or an action named twice, no longer stops a revoke from matching. + +- [#433](https://github.com/haverstack/core/pull/433) [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `enum` is a field kind: `{ kind: 'enum', values: [...] }` replaces `{ kind: 'string', enum: [...] }`. `defineType()` refuses the `enum` key on any field. `isCompatible()` now checks enums: a required enum accepts only an enum candidate whose values it lists all of, and a required `string` or `text` accepts an enum. An enum becoming a plain `string` is additive; a `string` becoming an enum needs a version bump. A typed read types an enum field as its listed values or any other string (`StoredContentOf`, `UnlistedValue`) and no longer throws on an unlisted value, since an enum can widen in place; typed writes still take only the listed values (`ContentOf`, `PatchOf`). `migration()` types both sides as `StoredContentOf`, so a step carries an unlisted value through. A typed `subscribe()` delivers a record that `migrateAll()` moves off the handle's version without its `record`, instead of throwing in the dispatcher. Conformance fixtures pin a 422 for a value outside the list and a 409 for removing values. The adapter conformance suite checks that an enum field sorts by value. + +- [#445](https://github.com/haverstack/core/pull/445) [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Export `isAuthorityAssociation` from `@haverstack/core`, for apps that split a journal entry's association changes between `amendAssociations()` and `amendAccess()`, and `partitionAssociations` and `AUTHORITY_ASSOCIATION_KINDS` from `@haverstack/core/adapter`, for storage engines that keep both halves in one table. + +- [#436](https://github.com/haverstack/core/pull/436) [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `StackRecordAdapter.subscribeChanges()` takes `SubscribeOptions`, the same options a subscriber passes to `subscribe()`. `SubscribeChangesOptions` is gone from `@haverstack/core/adapter`; it had the same fields, and `Stack` already forwarded every one of them, the subscriber's own `onError` included. A new `MutateOptions` type in `@haverstack/core/adapter` names the options every version-bumping adapter mutation takes. `GrantContent` and `InstallRequest` are now derived from `TypeGrant`. + +- [#439](https://github.com/haverstack/core/pull/439) [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122) Thanks [@cuibonobo](https://github.com/cuibonobo)! - A record `id` using the reserved `_` prefix is now refused as `Invalid ID "": uses the reserved "_" prefix.`, the same `Invalid "": .` shape every other record-ID refusal uses. The `error-bad-request-id-reserved-prefix` fixture pins the new wording. + +- [#447](https://github.com/haverstack/core/pull/447) [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089) Thanks [@cuibonobo](https://github.com/cuibonobo)! - A collection's `filter.content`, `filter.contentPresent` and `sort.contentField` are typed from its content type: a typo'd field, a value outside an enum, an object value (which never matches) or a nested sort field no longer compiles. Adds `ContentPathOf` and `SortableFieldOf`. + + A collection query with a content filter or sort reaches only records stored at the handle's version, since a predicate in the handle's shape cannot be translated into another version's. Its first page sets `skipped.older` or `skipped.newer` when records at another version match the rest of the query. + +- [#446](https://github.com/haverstack/core/pull/446) [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Typed access goes through collections. `client.collection(handle)` returns a `Collection` typed by the handle's content, with one signature per verb — `get`, `query`, `subscribe`, `create`, `mutate`, `patchContent`, `associate`, `dissociate`, `amendAssociations`, `grantAccess`, `revokeAccess`, `amendAccess`, `delete`, `undelete` and `restoreVersion` — every one returning a typed record without a re-read. A collection spans the handle's whole family and migrates each record in memory to the handle's version. A record stored at a newer version is a misfit: `query()` reports it in `misfits` and keeps the page and cursor, `get()` throws `MisfitError`, and `subscribe()` carries it as `misfit`. A content write to a record at an older version commits its migration as a write of its own first. `collection()` refuses a handle whose `migratesFrom` has no migration passed to `Stack.open()`. + + The handle-first overloads of `get`, `query`, `create`, `mutate`, `patchContent` and `subscribe` are removed, with `TypedRecord`, `TypedQuery`, `TypedChange`, `TypedChangeSet` and `TypedSubscribeOptions`. `PatchOf` is removed: a collection's patch type is `ContentPatch`, derived from its content type, and `StoredContent` is what its reads return. + +- [#415](https://github.com/haverstack/core/pull/415) [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051) Thanks [@cuibonobo](https://github.com/cuibonobo)! - A type handle carries what `defineType()` takes: `typeHandle({ id, name, schema, migratesFrom })`, with `migratesFrom` given as a handle or a `TypeId`. `defineType(handle)` and a manifest's `types` take it as written. Migrations are typed values built with `migration(from, to, fn)`, where `fn` is checked as the first handle's content to the second's, and are passed to `Stack.open(adapter, { migrations })`. `migratesFrom` must name an earlier version of the same family, and `typeHandle()` and `defineType()` refuse anything else. `migration()` checks that pairing within a family and builds a step into another family without it, so an app's own type can migrate into a commons type. `Stack.open()` refuses a set of migrations it could not walk: a duplicate `from`, a malformed TypeId, a step backwards within a family, or a cycle. `registerMigration()` and `MigrationFn` are removed. `@haverstack/commons` drops `CommonsType`; its exports are plain type handles. + +- [#413](https://github.com/haverstack/core/pull/413) [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `StackValidationError`'s message header names what was validated: record content keeps "Content validation failed", a type schema reads "Schema validation failed", and argument checks read "Invalid arguments". `associate()`/`dissociate()` and `grantAccess()`/`revokeAccess()` report list errors under `associations`/`permissions`, the parameter the caller passed, rather than `changes`. `deserializeError()` keeps the header a server sent. + +- [#431](https://github.com/haverstack/core/pull/431) [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `Stack` and `ScopedStack` accept an internal write expectation on every write verb — the record's Type family, and on a content write its exact version — checked against the read each write already makes, so a typed write is refused before anything lands and costs no extra round trip. A typed `mutate()` or `patchContent()` now uses it: a record of another family is not found, and one stored at another version of the family is still refused with `StackBadRequestError`. `ScopedStack.amendAssociations()` and `amendAccess()` take their options third and `surface` fourth, as `Stack`'s do. + +### Patch Changes + +- [#437](https://github.com/haverstack/core/pull/437) [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Organize the `./wire`, `./did` and `./adapter` subpath modules into folders of their own. The subpath exports are unchanged. + +- [#438](https://github.com/haverstack/core/pull/438) [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Split `Stack` and `ScopedStack` into folders of smaller modules — the `StackClient` interface and its option types, the migration registry, system Type definitions, write invariants, app installs, type grants, attachment cleanup, scope authority and the scoped change feed each live in a file of their own — and fold logic the two classes repeated into shared helpers. The public API and behaviour are unchanged. + ## 0.41.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index f23fb794..6d9b1bab 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/core", - "version": "0.41.0", + "version": "0.42.0", "description": "Core library for Haverstack — portable personal data stack", "type": "module", "exports": { diff --git a/packages/record-adapter-do-sqlite/CHANGELOG.md b/packages/record-adapter-do-sqlite/CHANGELOG.md index bfff6e07..ecd92186 100644 --- a/packages/record-adapter-do-sqlite/CHANGELOG.md +++ b/packages/record-adapter-do-sqlite/CHANGELOG.md @@ -1,5 +1,23 @@ # @haverstack/record-adapter-do-sqlite +## 0.27.0 + +### Minor Changes + +- Released for a breaking change in `@haverstack/core`. + +### Patch Changes + +- [#445](https://github.com/haverstack/core/pull/445) [`d8ef10d`](https://github.com/haverstack/core/commit/d8ef10d10ca670f5a26323c369b1966556091a09) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `filter.search` no longer drops a `NOT` written inside a quoted phrase: `"cats (not dogs"` searches for the phrase as typed. + +- [#445](https://github.com/haverstack/core/pull/445) [`dd7cba0`](https://github.com/haverstack/core/commit/dd7cba03facde763d23819a92fa0873861775c91) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Concurrent writes to one record no longer lose updates: `mutateRecord`, `restoreVersion` and `commitMigration` read and check the record inside the transaction that writes it, so a content patch applies to the content as it stands rather than to an earlier read. + +- [#445](https://github.com/haverstack/core/pull/445) [`af5bc5c`](https://github.com/haverstack/core/commit/af5bc5cc3c49de7ad0ed19cdade4acd646c5af05) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Remove redundant code from the bundled SQLite record logic: unused barrel exports, local aliases of core's native sort fields, and repeated not-found/version-read/row-hydration code. + +- [#445](https://github.com/haverstack/core/pull/445) [`2d9da43`](https://github.com/haverstack/core/commit/2d9da432994d7cbf7c9cb09057d8b88a8636b655) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Internal restructure of the bundled SQLite record logic: the full-text and content indexes move into their own module. No behavior change. +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + ## 0.26.0 ### Minor Changes diff --git a/packages/record-adapter-do-sqlite/package.json b/packages/record-adapter-do-sqlite/package.json index ebb4e8ec..90b398f6 100644 --- a/packages/record-adapter-do-sqlite/package.json +++ b/packages/record-adapter-do-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/record-adapter-do-sqlite", - "version": "0.26.0", + "version": "0.27.0", "description": "Cloudflare Durable Objects (SQLite storage) StackRecordAdapter for Haverstack — Workers, FTS5, single-writer by construction", "type": "module", "exports": { diff --git a/packages/record-adapter-sqlite/CHANGELOG.md b/packages/record-adapter-sqlite/CHANGELOG.md index 1ef8c822..1f0495e3 100644 --- a/packages/record-adapter-sqlite/CHANGELOG.md +++ b/packages/record-adapter-sqlite/CHANGELOG.md @@ -1,5 +1,25 @@ # @haverstack/record-adapter-sqlite +## 0.34.0 + +### Minor Changes + +- Released for a breaking change in `@haverstack/core`. + +### Patch Changes + +- [#445](https://github.com/haverstack/core/pull/445) [`d8ef10d`](https://github.com/haverstack/core/commit/d8ef10d10ca670f5a26323c369b1966556091a09) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `filter.search` no longer drops a `NOT` written inside a quoted phrase: `"cats (not dogs"` searches for the phrase as typed. + +- [#436](https://github.com/haverstack/core/pull/436) [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `StackRecordAdapter.subscribeChanges()` takes `SubscribeOptions`, the same options a subscriber passes to `subscribe()`. `SubscribeChangesOptions` is gone from `@haverstack/core/adapter`; it had the same fields, and `Stack` already forwarded every one of them, the subscriber's own `onError` included. A new `MutateOptions` type in `@haverstack/core/adapter` names the options every version-bumping adapter mutation takes. `GrantContent` and `InstallRequest` are now derived from `TypeGrant`. + +- [#445](https://github.com/haverstack/core/pull/445) [`dd7cba0`](https://github.com/haverstack/core/commit/dd7cba03facde763d23819a92fa0873861775c91) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Concurrent writes to one record no longer lose updates: `mutateRecord`, `restoreVersion` and `commitMigration` read and check the record inside the transaction that writes it, so a content patch applies to the content as it stands rather than to an earlier read. + +- [#445](https://github.com/haverstack/core/pull/445) [`af5bc5c`](https://github.com/haverstack/core/commit/af5bc5cc3c49de7ad0ed19cdade4acd646c5af05) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Remove redundant code from the bundled SQLite record logic: unused barrel exports, local aliases of core's native sort fields, and repeated not-found/version-read/row-hydration code. + +- [#445](https://github.com/haverstack/core/pull/445) [`2d9da43`](https://github.com/haverstack/core/commit/2d9da432994d7cbf7c9cb09057d8b88a8636b655) Thanks [@cuibonobo](https://github.com/cuibonobo)! - Internal restructure of the bundled SQLite record logic: the full-text and content indexes move into their own module. No behavior change. +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + ## 0.33.0 ### Minor Changes diff --git a/packages/record-adapter-sqlite/package.json b/packages/record-adapter-sqlite/package.json index 6ec0fb3b..ac12351e 100644 --- a/packages/record-adapter-sqlite/package.json +++ b/packages/record-adapter-sqlite/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/record-adapter-sqlite", - "version": "0.33.0", + "version": "0.34.0", "description": "Native SQLite (node:sqlite) record adapter for Haverstack — Node's built-in engine, no native compilation", "type": "module", "engines": { diff --git a/packages/wire-types/CHANGELOG.md b/packages/wire-types/CHANGELOG.md index 2177bb8c..308c2eb2 100644 --- a/packages/wire-types/CHANGELOG.md +++ b/packages/wire-types/CHANGELOG.md @@ -1,5 +1,22 @@ # @haverstack/wire-types +## 0.41.0 + +### Minor Changes + +- [#413](https://github.com/haverstack/core/pull/413) [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `StackValidationError`'s message header names what was validated: record content keeps "Content validation failed", a type schema reads "Schema validation failed", and argument checks read "Invalid arguments". `associate()`/`dissociate()` and `grantAccess()`/`revokeAccess()` report list errors under `associations`/`permissions`, the parameter the caller passed, rather than `changes`. `deserializeError()` keeps the header a server sent. + +- [#442](https://github.com/haverstack/core/pull/442) [`59f34ce`](https://github.com/haverstack/core/commit/59f34ce3cf777c39db3fa08bacb645f8001f9ae2) Thanks [@cuibonobo](https://github.com/cuibonobo)! - `@haverstack/wire-types` no longer restates shapes `@haverstack/core` already defines, and its auth handshake types share one prefix: + - `AuthChallengeRequest` and `AuthTokenRequest` are removed. Use `WireAuthChallengeRequest` and `WireAuthTokenRequest`, re-exported from `@haverstack/core/wire`, where the parsers that return them live. + - `AuthChallengeResponse` and `AuthTokenResponse` are renamed `WireAuthChallengeResponse` and `WireAuthTokenResponse` to match. Their shape is unchanged. + - `WireActor` and `WireChangeActor` are now aliases of core's `Actor` and `ChangeActor`. Their shape is unchanged. + - `WireAssociationEditsRequest` is removed; nothing referenced it. + +### Patch Changes + +- Updated dependencies [[`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`98401c0`](https://github.com/haverstack/core/commit/98401c0a1a8b86fd2bfec74072ca3c3504320b66), [`fdca4ca`](https://github.com/haverstack/core/commit/fdca4ca25760b19a79bc660404ebf95cf9c9048b), [`c427f43`](https://github.com/haverstack/core/commit/c427f435620c5766121723a54516f5a68df63561), [`90d800a`](https://github.com/haverstack/core/commit/90d800a8e86c079855a17627582f015186ffe081), [`7d30040`](https://github.com/haverstack/core/commit/7d30040c4b61b8e5881604d0c042fec9c7e45122), [`da5148b`](https://github.com/haverstack/core/commit/da5148bdb3e25e770e947df0c4c2af5b2a6f0f44), [`44fc3f6`](https://github.com/haverstack/core/commit/44fc3f645839c3a5a5eef3463826dcc0098bf089), [`d0b7950`](https://github.com/haverstack/core/commit/d0b795047ec9f8920a717a075f091cfa2462dc66), [`f616aaa`](https://github.com/haverstack/core/commit/f616aaa741c97fe1de1cfb262081e1f378082051), [`9b4adef`](https://github.com/haverstack/core/commit/9b4adef9bbb205ef27c161724dd2fe863254ffd2), [`89e0a07`](https://github.com/haverstack/core/commit/89e0a07b03ade71449cd20b7ad0333761c39a41f)]: + - @haverstack/core@0.42.0 + ## 0.40.0 ### Minor Changes diff --git a/packages/wire-types/package.json b/packages/wire-types/package.json index 398a56aa..15432193 100644 --- a/packages/wire-types/package.json +++ b/packages/wire-types/package.json @@ -1,6 +1,6 @@ { "name": "@haverstack/wire-types", - "version": "0.40.0", + "version": "0.41.0", "description": "HTTP wire types and serialization for Haverstack", "type": "module", "exports": {