UNPKG

@accounter/server

Version:
758 lines (668 loc) 424 kB
# @accounter/server ## 0.1.0 ### Minor Changes - [#3743](https://github.com/Urigo/accounter-fullstack/pull/3743) [`7cc5c7d`](https://github.com/Urigo/accounter-fullstack/commit/7cc5c7d10015fafec12c3c3fe1e8c6d4d04b19c9) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Email ingestion v2 — document bytes transport & persistence (Workstream D). The gateway now inlines each treated document's bytes (base64, Option B) into the `ingestEmail` mutation, and the server ingest step persists them: under the grant tenant's RLS context it uploads each document to Cloudinary, creates a charge, and inserts the documents — attributed to the recognized issuing business (read back from the grant's `business_id`, never trusted from gateway input) as the document counterparty, with the legacy per-document hash dedup skip. Documents are stored as `UNPROCESSED` (classification/OCR happens later via the normal flow). Because the gateway control-plane caller has no auth session, persistence uses inline, tenant-pinned SQL rather than the auth-coupled `DocumentsProvider` / `ChargesProvider` / `getDocumentFromFile` (the same constraint behind the existing idempotency/dedup/quarantine writes). Metadata-only ingest calls (no inline bytes) remain a no-op for persistence. ### Patch Changes - [#3276](https://github.com/Urigo/accounter-fullstack/pull/3276) [`6edc9b2`](https://github.com/Urigo/accounter-fullstack/commit/6edc9b27187a9b891b58ae08abdbddff9dcb1fde) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.21.0` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.21.0) (from `3.18.1`, in `dependencies`) - Updated dependency [`graphql-yoga@5.21.0` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.21.0) (from `5.18.1`, in `dependencies`) - [#3277](https://github.com/Urigo/accounter-fullstack/pull/3277) [`a584921`](https://github.com/Urigo/accounter-fullstack/commit/a58492135ab1cac146b0a04885bc968b5c5579e8) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`dotenv@17.4.1` ↗︎](https://www.npmjs.com/package/dotenv/v/17.4.1) (from `17.3.1`, in `dependencies`) - [#3281](https://github.com/Urigo/accounter-fullstack/pull/3281) [`917f31e`](https://github.com/Urigo/accounter-fullstack/commit/917f31e956d267704f6d74fb7f3a22d366062135) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.66` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.66) (from `3.0.64`, in `dependencies`) - Updated dependency [`ai@6.0.146` ↗︎](https://www.npmjs.com/package/ai/v/6.0.146) (from `6.0.141`, in `dependencies`) - Updated dependency [`playwright@1.59.1` ↗︎](https://www.npmjs.com/package/playwright/v/1.59.1) (from `1.59.0`, in `dependencies`) - [`623ed2b`](https://github.com/Urigo/accounter-fullstack/commit/623ed2b39788764e206241a9c3a628dfec25889e) Thanks [@renovate[bot]](https://github.com/renovate%5Bbot%5D)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.68` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.68) (from `3.0.66`, in `dependencies`) - Updated dependency [`@graphql-tools/utils@11.0.1` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/11.0.1) (from `11.0.0`, in `dependencies`) - Updated dependency [`ai@6.0.154` ↗︎](https://www.npmjs.com/package/ai/v/6.0.154) (from `6.0.146`, in `dependencies`) - [`82f07c2`](https://github.com/Urigo/accounter-fullstack/commit/82f07c25cd88fbcef8d29ef3d32230cfce168caa) Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.21.0` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.21.0) (from `3.18.1`, in `dependencies`) - Updated dependency [`graphql-yoga@5.21.0` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.21.0) (from `5.18.1`, in `dependencies`) - [`49651b7`](https://github.com/Urigo/accounter-fullstack/commit/49651b79e6b2cd8b1c01d4c10d12f3be43859d99) Thanks [@renovate[bot]](https://github.com/renovate%5Bbot%5D)! - dependencies updates: - Updated dependency [`auth0@5.6.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.6.0) (from `5.5.0`, in `dependencies`) - [#3309](https://github.com/Urigo/accounter-fullstack/pull/3309) [`7b2c89c`](https://github.com/Urigo/accounter-fullstack/commit/7b2c89c6b655a4f8337d202aecefc688ec99af14) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.69` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.69) (from `3.0.68`, in `dependencies`) - Updated dependency [`ai@6.0.158` ↗︎](https://www.npmjs.com/package/ai/v/6.0.158) (from `6.0.154`, in `dependencies`) - Updated dependency [`dotenv@17.4.2` ↗︎](https://www.npmjs.com/package/dotenv/v/17.4.2) (from `17.4.1`, in `dependencies`) - [#3331](https://github.com/Urigo/accounter-fullstack/pull/3331) [`28718a0`](https://github.com/Urigo/accounter-fullstack/commit/28718a0a0985ebb2a12c6c6dce8301285d420858) Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.69` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.69) (from `3.0.68`, in `dependencies`) - Updated dependency [`ai@6.0.158` ↗︎](https://www.npmjs.com/package/ai/v/6.0.158) (from `6.0.154`, in `dependencies`) - Updated dependency [`dotenv@17.4.2` ↗︎](https://www.npmjs.com/package/dotenv/v/17.4.2) (from `17.4.1`, in `dependencies`) - [#3333](https://github.com/Urigo/accounter-fullstack/pull/3333) [`a5e6d19`](https://github.com/Urigo/accounter-fullstack/commit/a5e6d19bf96173dde9097985a8df0065b9c3e499) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.71` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.71) (from `3.0.69`, in `dependencies`) - Updated dependency [`ai@6.0.168` ↗︎](https://www.npmjs.com/package/ai/v/6.0.168) (from `6.0.158`, in `dependencies`) - [#3355](https://github.com/Urigo/accounter-fullstack/pull/3355) [`e4eaa04`](https://github.com/Urigo/accounter-fullstack/commit/e4eaa04de797962d545890b92a84bb9b76acf5bf) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`auth0@5.7.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.7.0) (from `5.6.0`, in `dependencies`) - [#3356](https://github.com/Urigo/accounter-fullstack/pull/3356) [`87afe7a`](https://github.com/Urigo/accounter-fullstack/commit/87afe7a48b76506079e792f492618d53bb6c36fa) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.215.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.215.0) (from `0.214.0`, in `dependencies`) - Updated dependency [`@opentelemetry/resources@2.7.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.7.0) (from `2.6.1`, in `dependencies`) - Updated dependency [`@opentelemetry/sdk-node@0.215.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.215.0) (from `0.214.0`, in `dependencies`) - [#3357](https://github.com/Urigo/accounter-fullstack/pull/3357) [`f1c33df`](https://github.com/Urigo/accounter-fullstack/commit/f1c33df3dee170eefa5f8b6c3c15f5ae0e1d1705) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.73.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.73.0) (from `0.72.0`, in `dependencies`) - [#3387](https://github.com/Urigo/accounter-fullstack/pull/3387) [`46f9fc5`](https://github.com/Urigo/accounter-fullstack/commit/46f9fc5592590a765770592efab440a0374e9bde) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`auth0@5.8.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.8.0) (from `5.7.0`, in `dependencies`) - [#3399](https://github.com/Urigo/accounter-fullstack/pull/3399) [`2310fd3`](https://github.com/Urigo/accounter-fullstack/commit/2310fd3f4737e939491b095457267389625b1d35) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@graphql-tools/utils@11.1.0` ↗︎](https://www.npmjs.com/package/@graphql-tools/utils/v/11.1.0) (from `11.0.1`, in `dependencies`) - [#3406](https://github.com/Urigo/accounter-fullstack/pull/3406) [`40cbee3`](https://github.com/Urigo/accounter-fullstack/commit/40cbee3b08a16be72e526d3f001d1f2dee3d5dd0) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`cloudinary@2.10.0` ↗︎](https://www.npmjs.com/package/cloudinary/v/2.10.0) (from `2.9.0`, in `dependencies`) - [#3421](https://github.com/Urigo/accounter-fullstack/pull/3421) [`85390ee`](https://github.com/Urigo/accounter-fullstack/commit/85390ee74f9f84247d572150236acdf95a378740) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`jose@6.2.3` ↗︎](https://www.npmjs.com/package/jose/v/6.2.3) (from `6.2.2`, in `dependencies`) - [#3434](https://github.com/Urigo/accounter-fullstack/pull/3434) [`42e1646`](https://github.com/Urigo/accounter-fullstack/commit/42e1646407fd0c620d4558244770daeb920dc36c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.72` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.72) (from `3.0.71`, in `dependencies`) - Updated dependency [`ai@6.0.169` ↗︎](https://www.npmjs.com/package/ai/v/6.0.169) (from `6.0.168`, in `dependencies`) - [#3437](https://github.com/Urigo/accounter-fullstack/pull/3437) [`7e7c2aa`](https://github.com/Urigo/accounter-fullstack/commit/7e7c2aa5d2154b06962a1efa984c3941fc621d66) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.74.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.74.0) (from `0.73.0`, in `dependencies`) - [#3438](https://github.com/Urigo/accounter-fullstack/pull/3438) [`632c726`](https://github.com/Urigo/accounter-fullstack/commit/632c7265ef63af3a41fab9d96d2b256ba733aa9d) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.216.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.216.0) (from `0.215.0`, in `dependencies`) - Updated dependency [`@opentelemetry/sdk-node@0.216.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.216.0) (from `0.215.0`, in `dependencies`) - [#3440](https://github.com/Urigo/accounter-fullstack/pull/3440) [`1ad8a10`](https://github.com/Urigo/accounter-fullstack/commit/1ad8a10f3dd92b38c04ccea15b90cc7f9dc43887) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`zod@4.4.2` ↗︎](https://www.npmjs.com/package/zod/v/4.4.2) (from `4.3.6`, in `dependencies`) - [#3441](https://github.com/Urigo/accounter-fullstack/pull/3441) [`2f426cb`](https://github.com/Urigo/accounter-fullstack/commit/2f426cb804fc51c05a06a1e4b6a38bb11a71981f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`auth0@5.9.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.9.0) (from `5.8.0`, in `dependencies`) - [#3454](https://github.com/Urigo/accounter-fullstack/pull/3454) [`0b654ef`](https://github.com/Urigo/accounter-fullstack/commit/0b654ef08495e1632ccc75942d6a1a3142924d9f) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.75` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.75) (from `3.0.72`, in `dependencies`) - Updated dependency [`@opentelemetry/resources@2.7.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.7.1) (from `2.7.0`, in `dependencies`) - Updated dependency [`ai@6.0.175` ↗︎](https://www.npmjs.com/package/ai/v/6.0.175) (from `6.0.169`, in `dependencies`) - Updated dependency [`auth0@5.9.1` ↗︎](https://www.npmjs.com/package/auth0/v/5.9.1) (from `5.9.0`, in `dependencies`) - Updated dependency [`zod@4.4.3` ↗︎](https://www.npmjs.com/package/zod/v/4.4.3) (from `4.4.2`, in `dependencies`) - [#3478](https://github.com/Urigo/accounter-fullstack/pull/3478) [`8425d70`](https://github.com/Urigo/accounter-fullstack/commit/8425d70751f1abbbd1195d45fc1ee86ee2f7a49a) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.75.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.75.0) (from `0.74.0`, in `dependencies`) - [#3479](https://github.com/Urigo/accounter-fullstack/pull/3479) [`1bf66e2`](https://github.com/Urigo/accounter-fullstack/commit/1bf66e264e8ea2d3c1b75cab8097dc583205cf67) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`graphql@16.14.0` ↗︎](https://www.npmjs.com/package/graphql/v/16.14.0) (from `16.13.2`, in `dependencies`) - [#3480](https://github.com/Urigo/accounter-fullstack/pull/3480) [`3c07e11`](https://github.com/Urigo/accounter-fullstack/commit/3c07e11ca246b78f66d23a9f588e38f4190d44ff) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.217.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.217.0) (from `0.216.0`, in `dependencies`) - Updated dependency [`@opentelemetry/sdk-node@0.217.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.217.0) (from `0.216.0`, in `dependencies`) - [#3503](https://github.com/Urigo/accounter-fullstack/pull/3503) [`dab1752`](https://github.com/Urigo/accounter-fullstack/commit/dab17529ee68305203d59d8a195763191baea3d5) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.76` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.76) (from `3.0.75`, in `dependencies`) - Updated dependency [`ai@6.0.177` ↗︎](https://www.npmjs.com/package/ai/v/6.0.177) (from `6.0.175`, in `dependencies`) - [#3506](https://github.com/Urigo/accounter-fullstack/pull/3506) [`b68dc3a`](https://github.com/Urigo/accounter-fullstack/commit/b68dc3ab5b3653de616077734ffa6ae9401d4307) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.76` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.76) (from `3.0.75`, in `dependencies`) - Updated dependency [`ai@6.0.177` ↗︎](https://www.npmjs.com/package/ai/v/6.0.177) (from `6.0.175`, in `dependencies`) - [#3523](https://github.com/Urigo/accounter-fullstack/pull/3523) [`0766292`](https://github.com/Urigo/accounter-fullstack/commit/076629232304ce0849cbe7ed482490f4fb7142d3) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`playwright@1.60.0` ↗︎](https://www.npmjs.com/package/playwright/v/1.60.0) (from `1.59.1`, in `dependencies`) - [#3529](https://github.com/Urigo/accounter-fullstack/pull/3529) [`c5fa247`](https://github.com/Urigo/accounter-fullstack/commit/c5fa2473b65541be39353e33f981fb6421bb2067) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.218.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.218.0) (from `0.217.0`, in `dependencies`) - Updated dependency [`@opentelemetry/sdk-node@0.218.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.218.0) (from `0.217.0`, in `dependencies`) - Updated dependency [`@opentelemetry/semantic-conventions@1.41.1` ↗︎](https://www.npmjs.com/package/@opentelemetry/semantic-conventions/v/1.41.1) (from `1.40.0`, in `dependencies`) - [#3533](https://github.com/Urigo/accounter-fullstack/pull/3533) [`26e9fe8`](https://github.com/Urigo/accounter-fullstack/commit/26e9fe8afc31b5b2c01e7248a8cf665e4c541ef8) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`auth0@5.10.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.10.0) (from `5.9.1`, in `dependencies`) - [#3534](https://github.com/Urigo/accounter-fullstack/pull/3534) [`54c0e4b`](https://github.com/Urigo/accounter-fullstack/commit/54c0e4b840e1efea5744647745a1b031cfa0f5de) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.77` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.77) (from `3.0.76`, in `dependencies`) - Updated dependency [`ai@6.0.180` ↗︎](https://www.npmjs.com/package/ai/v/6.0.180) (from `6.0.177`, in `dependencies`) - [#3535](https://github.com/Urigo/accounter-fullstack/pull/3535) [`e5bd5da`](https://github.com/Urigo/accounter-fullstack/commit/e5bd5da7521a7b114f383334433d61ea5b552d52) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.76.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.76.0) (from `0.75.0`, in `dependencies`) - [#3536](https://github.com/Urigo/accounter-fullstack/pull/3536) [`c4ea865`](https://github.com/Urigo/accounter-fullstack/commit/c4ea865b58cf1d25c32aca53f71b69cff0252504) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.78` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.78) (from `3.0.77`, in `dependencies`) - Updated dependency [`ai@6.0.184` ↗︎](https://www.npmjs.com/package/ai/v/6.0.184) (from `6.0.180`, in `dependencies`) - [#3548](https://github.com/Urigo/accounter-fullstack/pull/3548) [`c6555f5`](https://github.com/Urigo/accounter-fullstack/commit/c6555f5d6a731b05f26ae58a47c485a905e4ec55) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`date-fns@4.2.1` ↗︎](https://www.npmjs.com/package/date-fns/v/4.2.1) (from `4.1.0`, in `dependencies`) - [#3549](https://github.com/Urigo/accounter-fullstack/pull/3549) [`53a4629`](https://github.com/Urigo/accounter-fullstack/commit/53a4629c4cd2ce346f4a8740117994f3f0913981) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`pg@8.21.0` ↗︎](https://www.npmjs.com/package/pg/v/8.21.0) (from `8.20.0`, in `dependencies`) - [#3551](https://github.com/Urigo/accounter-fullstack/pull/3551) [`9d9ce57`](https://github.com/Urigo/accounter-fullstack/commit/9d9ce57f4058c0d66b8c1ea383030a57692fe607) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`date-fns@4.2.1` ↗︎](https://www.npmjs.com/package/date-fns/v/4.2.1) (from `4.1.0`, in `dependencies`) - Updated dependency [`pg@8.21.0` ↗︎](https://www.npmjs.com/package/pg/v/8.21.0) (from `8.20.0`, in `dependencies`) - [#3553](https://github.com/Urigo/accounter-fullstack/pull/3553) [`ae5aa31`](https://github.com/Urigo/accounter-fullstack/commit/ae5aa311e4beb3d5b9ded7a0c0fadaf00b796e2e) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.79` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.79) (from `3.0.78`, in `dependencies`) - Updated dependency [`ai@6.0.191` ↗︎](https://www.npmjs.com/package/ai/v/6.0.191) (from `6.0.184`, in `dependencies`) - [#3555](https://github.com/Urigo/accounter-fullstack/pull/3555) [`ab8788f`](https://github.com/Urigo/accounter-fullstack/commit/ab8788f53772712f092e2d0407db9e97ab7c8d93) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`googleapis@172.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/172.0.0) (from `171.4.0`, in `dependencies`) - [#3559](https://github.com/Urigo/accounter-fullstack/pull/3559) [`43b3575`](https://github.com/Urigo/accounter-fullstack/commit/43b3575f981c01e3caafc7170cb30358ed227c3b) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`date-fns@4.3.0` ↗︎](https://www.npmjs.com/package/date-fns/v/4.3.0) (from `4.2.1`, in `dependencies`) - [#3597](https://github.com/Urigo/accounter-fullstack/pull/3597) [`6f771a1`](https://github.com/Urigo/accounter-fullstack/commit/6f771a1b9cb28b7ad9e7d474c7e8c3d8d11b4c76) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`graphql-modules@3.1.2` ↗︎](https://www.npmjs.com/package/graphql-modules/v/3.1.2) (from `3.1.1`, in `dependencies`) - [#3599](https://github.com/Urigo/accounter-fullstack/pull/3599) [`4405b3a`](https://github.com/Urigo/accounter-fullstack/commit/4405b3abf883827c5580131abdeba32552d82196) Thanks [@gilgardosh](https://github.com/gilgardosh)! - dependencies updates: - Added dependency [`iconv-lite@0.7.2` ↗︎](https://www.npmjs.com/package/iconv-lite/v/0.7.2) (to `dependencies`) - [#3602](https://github.com/Urigo/accounter-fullstack/pull/3602) [`d7bf0d0`](https://github.com/Urigo/accounter-fullstack/commit/d7bf0d0ffcf090a9cddb0e72b8c341fc4481ba0a) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`auth0@5.11.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.11.0) (from `5.10.0`, in `dependencies`) - [#3603](https://github.com/Urigo/accounter-fullstack/pull/3603) [`cca7787`](https://github.com/Urigo/accounter-fullstack/commit/cca778797ff2252e52bf9dcf0777e2d385ac68d3) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`date-fns@4.4.0` ↗︎](https://www.npmjs.com/package/date-fns/v/4.4.0) (from `4.3.0`, in `dependencies`) - [#3607](https://github.com/Urigo/accounter-fullstack/pull/3607) [`6da07f4`](https://github.com/Urigo/accounter-fullstack/commit/6da07f4608d42de0883cd868595db4f36ec9dcff) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`googleapis@173.0.0` ↗︎](https://www.npmjs.com/package/googleapis/v/173.0.0) (from `172.0.0`, in `dependencies`) - [#3613](https://github.com/Urigo/accounter-fullstack/pull/3613) [`7397aad`](https://github.com/Urigo/accounter-fullstack/commit/7397aad6a9bf7d120218e6a8274a539eb1e76160) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.81` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.81) (from `3.0.79`, in `dependencies`) - Updated dependency [`ai@6.0.196` ↗︎](https://www.npmjs.com/package/ai/v/6.0.196) (from `6.0.191`, in `dependencies`) - Updated dependency [`graphql@16.14.1` ↗︎](https://www.npmjs.com/package/graphql/v/16.14.1) (from `16.14.0`, in `dependencies`) - [#3622](https://github.com/Urigo/accounter-fullstack/pull/3622) [`727b0c5`](https://github.com/Urigo/accounter-fullstack/commit/727b0c5ad0bdf367ded4679732e9e824eff29957) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.21.1` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.21.1) (from `3.21.0`, in `dependencies`) - Updated dependency [`graphql-yoga@5.21.1` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.21.1) (from `5.21.0`, in `dependencies`) - [#3631](https://github.com/Urigo/accounter-fullstack/pull/3631) [`41dca35`](https://github.com/Urigo/accounter-fullstack/commit/41dca350ddec11ae86fa82735ca3d1de0387f119) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@google-cloud/pubsub@5.3.1` ↗︎](https://www.npmjs.com/package/@google-cloud/pubsub/v/5.3.1) (from `5.3.0`, in `dependencies`) - Updated dependency [`ai@6.0.197` ↗︎](https://www.npmjs.com/package/ai/v/6.0.197) (from `6.0.196`, in `dependencies`) - [#3652](https://github.com/Urigo/accounter-fullstack/pull/3652) [`73620a0`](https://github.com/Urigo/accounter-fullstack/commit/73620a012315439962fb2e161143b08db1d6dba0) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@graphql-yoga/plugin-defer-stream@3.21.2` ↗︎](https://www.npmjs.com/package/@graphql-yoga/plugin-defer-stream/v/3.21.2) (from `3.21.1`, in `dependencies`) - Updated dependency [`graphql-yoga@5.21.2` ↗︎](https://www.npmjs.com/package/graphql-yoga/v/5.21.2) (from `5.21.1`, in `dependencies`) - [#3654](https://github.com/Urigo/accounter-fullstack/pull/3654) [`86b253d`](https://github.com/Urigo/accounter-fullstack/commit/86b253d5c2164b3c255cde626f8861fb5c5717b8) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`ai@6.0.198` ↗︎](https://www.npmjs.com/package/ai/v/6.0.198) (from `6.0.197`, in `dependencies`) - [#3662](https://github.com/Urigo/accounter-fullstack/pull/3662) [`ba2ac1a`](https://github.com/Urigo/accounter-fullstack/commit/ba2ac1a6aae3bb17d8d28e37ef496367c8959481) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.82` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.82) (from `3.0.81`, in `dependencies`) - Updated dependency [`ai@6.0.199` ↗︎](https://www.npmjs.com/package/ai/v/6.0.199) (from `6.0.198`, in `dependencies`) - Updated dependency [`graphql@16.14.2` ↗︎](https://www.npmjs.com/package/graphql/v/16.14.2) (from `16.14.1`, in `dependencies`) - [#3683](https://github.com/Urigo/accounter-fullstack/pull/3683) [`a19aa30`](https://github.com/Urigo/accounter-fullstack/commit/a19aa3051d2971210a0cc37af71d3db6e3904c0a) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.84` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.84) (from `3.0.82`, in `dependencies`) - Updated dependency [`@graphql-hive/yoga@0.48.1` ↗︎](https://www.npmjs.com/package/@graphql-hive/yoga/v/0.48.1) (from `0.48.0`, in `dependencies`) - Updated dependency [`ai@6.0.205` ↗︎](https://www.npmjs.com/package/ai/v/6.0.205) (from `6.0.199`, in `dependencies`) - [#3686](https://github.com/Urigo/accounter-fullstack/pull/3686) [`d3ee089`](https://github.com/Urigo/accounter-fullstack/commit/d3ee089369df5ec84e858caedcfc218f2425fc05) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`auth0@5.12.0` ↗︎](https://www.npmjs.com/package/auth0/v/5.12.0) (from `5.11.0`, in `dependencies`) - [#3698](https://github.com/Urigo/accounter-fullstack/pull/3698) [`2df2d72`](https://github.com/Urigo/accounter-fullstack/commit/2df2d7242ec7d671ad7b90735caf1b1ff670631c) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/exporter-trace-otlp-http@0.219.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/exporter-trace-otlp-http/v/0.219.0) (from `0.218.0`, in `dependencies`) - Updated dependency [`@opentelemetry/resources@2.8.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/resources/v/2.8.0) (from `2.7.1`, in `dependencies`) - Updated dependency [`@opentelemetry/sdk-node@0.219.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/sdk-node/v/0.219.0) (from `0.218.0`, in `dependencies`) - [#3699](https://github.com/Urigo/accounter-fullstack/pull/3699) [`fed5553`](https://github.com/Urigo/accounter-fullstack/commit/fed5553c11d9b2ba8cc2f2f54010589bf959a6dd) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@opentelemetry/auto-instrumentations-node@0.77.0` ↗︎](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node/v/0.77.0) (from `0.76.0`, in `dependencies`) - [#3703](https://github.com/Urigo/accounter-fullstack/pull/3703) [`fb74946`](https://github.com/Urigo/accounter-fullstack/commit/fb7494648b7e0a73d72e802c4dbff791e3583767) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`playwright@1.61.0` ↗︎](https://www.npmjs.com/package/playwright/v/1.61.0) (from `1.60.0`, in `dependencies`) - [#3705](https://github.com/Urigo/accounter-fullstack/pull/3705) [`ede5450`](https://github.com/Urigo/accounter-fullstack/commit/ede5450e183c15b058af595030aeed0e2e7565bd) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`ai@6.0.206` ↗︎](https://www.npmjs.com/package/ai/v/6.0.206) (from `6.0.205`, in `dependencies`) - [#3720](https://github.com/Urigo/accounter-fullstack/pull/3720) [`452d0ed`](https://github.com/Urigo/accounter-fullstack/commit/452d0ede302ac26f9aad5d76afc53e72d6d99977) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`@ai-sdk/anthropic@3.0.85` ↗︎](https://www.npmjs.com/package/@ai-sdk/anthropic/v/3.0.85) (from `3.0.84`, in `dependencies`) - Updated dependency [`ai@6.0.208` ↗︎](https://www.npmjs.com/package/ai/v/6.0.208) (from `6.0.206`, in `dependencies`) - [#3737](https://github.com/Urigo/accounter-fullstack/pull/3737) [`c1618a5`](https://github.com/Urigo/accounter-fullstack/commit/c1618a506e72e0dcffb01e6168d9eecd8c817bc7) Thanks [@renovate](https://github.com/apps/renovate)! - dependencies updates: - Updated dependency [`pg@8.22.0` ↗︎](https://www.npmjs.com/package/pg/v/8.22.0) (from `8.21.0`, in `dependencies`) - [#3599](https://github.com/Urigo/accounter-fullstack/pull/3599) [`4405b3a`](https://github.com/Urigo/accounter-fullstack/commit/4405b3abf883827c5580131abdeba32552d82196) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New SHAAM File Import Feature**: Introduced a new `importShaamFile` resolver and `ShaamImportProvider` to facilitate onboarding by importing SHAAM uniform-format files. - **Encoding Support**: Added `iconv-lite` to handle Windows-1255 encoding, ensuring correct processing of legacy SHAAM file formats. - **Database Enhancements**: Updated `BusinessesProvider`, `FinancialEntitiesProvider`, and `SortCodesProvider` to support transactional inserts with custom `PoolClient` instances. - [#3616](https://github.com/Urigo/accounter-fullstack/pull/3616) [`1c90011`](https://github.com/Urigo/accounter-fullstack/commit/1c900116aecf46c79dd45c471ba1082d37fc5a15) Thanks [@gilgardosh](https://github.com/gilgardosh)! - tracking and displaying maximum dates (event, debit, and document dates) alongside minimum dates across charges, ledger records, and transactions. It updates the GraphQL schema, helper functions, and the frontend DateCell component to display date ranges when they differ. - [#3608](https://github.com/Urigo/accounter-fullstack/pull/3608) [`0c07b61`](https://github.com/Urigo/accounter-fullstack/commit/0c07b61aa16ed7f69d578301f61e1183d12f5383) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Migrations and backend updates to support Otsar Hahayal bank accounts and credit cards within the user context - [#3532](https://github.com/Urigo/accounter-fullstack/pull/3532) [`2aaf98f`](https://github.com/Urigo/accounter-fullstack/commit/2aaf98f3ae68b26f367e179d99447c5ce04fd67f) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Add per-tenant provider credentials system with encrypted storage. Includes a new `provider_credentials` database table, AES-256-GCM encryption helpers, payload schemas for credential types, a `ProviderCredentialsProvider` with full CRUD operations, and a GraphQL module exposing queries and mutations for managing provider credentials per tenant. - [#3324](https://github.com/Urigo/accounter-fullstack/pull/3324) [`c83b2b8`](https://github.com/Urigo/accounter-fullstack/commit/c83b2b83326b8bedd10070ced91c2aa271ef4b0d) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Database Schema Update**: Added an `is_locked` column to the `dynamic_report_templates` table to support template locking functionality. - **New Annual Audit Step**: Implemented Step 09 in the annual audit flow, allowing users to select and lock a final dynamic report template for a specific fiscal year. - **Template Management**: Added new mutations and provider methods to lock and unlock dynamic report templates, with logic to prevent modification of locked templates. - **Audit Status Tracking**: Enhanced the `annual_audit_step_status` table to include an `evidence_json` field for storing step-specific metadata, such as the locked template name. - [#3691](https://github.com/Urigo/accounter-fullstack/pull/3691) [`cfe4575`](https://github.com/Urigo/accounter-fullstack/commit/cfe4575d249a35b8c9929b1976d1eb320d05658b) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Backend Schema & Logic**: Extended the GraphQL schema to support `listBusinessUsers`, `listInvitations`, `removeBusinessUser`, and `revokeInvitation`. Implemented corresponding providers and resolvers with strict tenant-based scoping and RBAC enforcement. - **Security & Reliability**: Added comprehensive audit logging for sensitive actions, implemented tenant-isolation guards in database queries, and ensured robust error handling for API interactions. - [#3743](https://github.com/Urigo/accounter-fullstack/pull/3743) [`7cc5c7d`](https://github.com/Urigo/accounter-fullstack/commit/7cc5c7d10015fafec12c3c3fe1e8c6d4d04b19c9) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Recognize the issuing business in the v2 email-ingestion control step: the `requestIngestControl` flow now resolves the provider business from gateway-supplied sender evidence under the tenant's RLS context, loads its email-listener config, and binds the recognized business into the ingest grant (new nullable `email_ingestion_grants.business_id` column) so downstream stages can attribute documents without trusting gateway input. Adds `IngestControlInput.senderEvidence` and `IngestControlDecision.businessEmailConfig` to the schema. - [#3596](https://github.com/Urigo/accounter-fullstack/pull/3596) [`afcb4fb`](https://github.com/Urigo/accounter-fullstack/commit/afcb4fb58c9ffd614b3d442b40ac0aa5463027df) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Charge Type Filtering**: Added a new multi-select filter that allows users to filter charges by their specific concrete type (e.g., SalaryCharge, ConversionCharge) instead of just income/expense. - **Business Trip Filtering**: Introduced a searchable multi-select filter to narrow down charges associated with specific business trips. - **Missing Counterparty Detection**: Added a toggle to identify charges with missing counterparty information, specifically targeting transactions without a business or documents missing creditor/debtor details. - [#3765](https://github.com/Urigo/accounter-fullstack/pull/3765) [`9329f5e`](https://github.com/Urigo/accounter-fullstack/commit/9329f5e8255c74cbec3d425c7000bbf479ee8ac3) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **OCR at ingest time**: `prepareDocuments` now calls `getOcrData` to classify documents via Anthropic, matching the legacy upload path. - **Remarks override**: Email ingestion documents now override the OCR-derived remarks with an email identifier (`email-ingestion: {messageId}`), consistent with the legacy resolver. - **Test coverage**: Updated tests to mock `AnthropicProvider.extractInvoiceDetails` and verify that documents are classified (INVOICE) rather than UNPROCESSED, and that the recognized business is attributed as the creditor. - [#3599](https://github.com/Urigo/accounter-fullstack/pull/3599) [`4405b3a`](https://github.com/Urigo/accounter-fullstack/commit/4405b3abf883827c5580131abdeba32552d82196) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Encoding Support**: Added `iconv-lite` to handle Windows-1255 encoding, ensuring correct processing of legacy SHAAM file formats. - [#3651](https://github.com/Urigo/accounter-fullstack/pull/3651) [`d4b5bb5`](https://github.com/Urigo/accounter-fullstack/commit/d4b5bb5a7c969c4112720b0e772dd988e46d8e98) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Multi-tenant Email Ingestion Architecture**: Implemented a new v2 email ingestion pipeline routing inbound mail through Cloudflare Email to a private Gateway, with authoritative tenant resolution and data persistence handled by the Server. - **Security and Authenticity**: Added cryptographic authenticity verification (HMAC-SHA256) for Cloudflare-to-Gateway requests, alongside nonce-based replay protection and IP allowlisting. - **Tenant Isolation and RLS**: Hardened server-side ingestion writes by pinning transactions to the grant-validated tenant's RLS context, ensuring that `tenant_isolation` policies are enforced as defense-in-depth. - **Greenfield Gateway Service**: Scaffolded a new, independent `packages/email-ingestion-gateway` service that avoids runtime coupling with the legacy `gmail-listener` package. - **Server Module Migration**: Renamed shared ingestion logic to the `email-ingestion` module and established a backward-compatible shim for the legacy listener. - [#3330](https://github.com/Urigo/accounter-fullstack/pull/3330) [`6557915`](https://github.com/Urigo/accounter-fullstack/commit/6557915a9be166ab3959525adfcfe75c90ccf1b7) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New Annual Audit Steps**: Implemented Step 10 (Export Trial Balance) and Step 11 (Depreciation Report) into the annual audit workflow. - **Shared Logic Abstraction**: Introduced a reusable hook `useSetAnnualAuditStepStatus` to centralize status update logic and added utility functions for depreciation report filters. - **Enhanced Reporting**: Added PDF printing capabilities to the depreciation report and updated routing to support dynamic filter parameters. - [#3591](https://github.com/Urigo/accounter-fullstack/pull/3591) [`c4fabc7`](https://github.com/Urigo/accounter-fullstack/commit/c4fabc77f760bb222fd560e05254a1b0dc1bd3a9) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Multi-Business Tenancy Foundation**: Implemented a foundational shift from a single-business model to a request-level business scope model, enabling multi-business reads while maintaining strict single-business write targeting. - **Auth Context & Scope Resolution**: Updated authentication providers to resolve all user memberships and introduced a `ScopeProvider` to handle read-scope precedence (args ⊆ header ⊆ memberships) and write-target validation. - **Database RLS Migration**: Added `app.current_business_scope` session variables and updated RLS policies to support multi-business reads via `ANY` predicates, while keeping write operations pinned to a single business. - **GraphQL Contract Hard-Cut**: Replaced the legacy `adminBusinessId` field in `userContext` with a robust `memberships` and `activeReadScope` structure, requiring a hard-cut migration of server-side consumers. - **Module Migrations & Guardrails**: Migrated high-traffic modules (charges, reports, ledger, salaries) to use the new scope helper and added a repository-wide lint guard to prevent future regressions to single-business admin context fallbacks. - [#3527](https://github.com/Urigo/accounter-fullstack/pull/3527) [`0543dc3`](https://github.com/Urigo/accounter-fullstack/commit/0543dc39d252524120bfb70890e21fc0c191d317) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Super-Admin Infrastructure**: Introduced a `super_admins` database table and associated RLS policies to manage platform-level administrative privileges, preventing unauthorized self-promotion. - **Client Onboarding**: Implemented the `bootstrapNewClient` GraphQL mutation, enabling the automated, transactional provisioning of new client tenants, including business entities, tax categories, and user contexts. - **Security & RLS Enhancements**: Refined Row-Level Security (RLS) policies to support the bootstrap flow, including a root-level insert policy and read-only access for super-admin verification. - **Code Refactoring**: Moved deterministic UUID generation to a shared utility module and introduced `EntityEnsureProvider` to standardize the creation of financial entities across the system. - [#3315](https://github.com/Urigo/accounter-fullstack/pull/3315) [`6147f4f`](https://github.com/Urigo/accounter-fullstack/commit/6147f4f271db1f76e54185c679a7ca65f0f59f06) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Database Schema**: Added a new table `annual_audit_step_status` to track the status of annual audit steps, including support for notes and evidence. - **GraphQL Module**: Introduced a new `annual_audit` GraphQL module to manage audit step statuses, including queries for fetching statuses and mutations for updating them. - [#3595](https://github.com/Urigo/accounter-fullstack/pull/3595) [`ff84f71`](https://github.com/Urigo/accounter-fullstack/commit/ff84f71ad6e3c5e5f002f4d906154a423c0df70b) Thanks [@gilgardosh](https://github.com/gilgardosh)! - \* **Backend Context Resolution**: Updated the AdminContextProvider to dynamically resolve the owner ID based on the active read scope, improving support for multi-business environments. - **User Context Enrichment**: Enhanced the user context resolver to fetch and display business names for memberships by integrating with the FinancialEntitiesProvider. - [#3462](https://github.com/Urigo/accounter-fullstack/pull/3462) [`37ab0a3`](https://github.com/Urigo/accounter-fullstack/commit/37ab0a37e8a8cbe600d19322470a360ea909659f) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New Scraper Ingestion Module**: Introduced a new server module to handle scraper data ingestion, including GraphQL resolvers, providers, and type definitions. - **Database Migrations**: Added new database migrations to implement unique constraints for various transaction tables to improve data deduplication. - **Validation Logic**: Implemented helper functions to validate and map incoming transaction data from various scrapers before database insertion. - [#3327](https://github.com/Urigo/accounter-fullstack/pull/3327) [`9f8c7d3`](https://github.com/Urigo/accounter-fullstack/commit/9f8c7d3e03c40e33ed700ddfcc4536efa07dc895) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Database Schema Refactoring**: Introduced a dedicated `bank_deposits` table to centralize deposit information, moving fields like `account_id` out of the `charges_bank_deposits` junction table. - **GraphQL API Updates**: Updated GraphQL queries and mutations to support the new `bank_deposits` structure, including new fields for deposit metadata and improved deposit creation flows. - **Enhanced Deposit Management**: Added new hooks and logic to better handle relevant deposits for charges, including conflict detection and improved assignment workflows. - [#3317](https://github.com/Urigo/accounter-fullstack/pull/3317) [`9a2e63f`](https://github.com/Urigo/accounter-fullstack/commit/9a2e63feb0769e4ddc776ec8584031c5fbfcabea) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Opening Balance Step Activation**: Implemented the logic and UI for the 'Opening Balance' step in the annual audit flow, including user type classification (New, Migrating, Continuing). - **Backend Integration**: Added a new GraphQL query to fetch the opening balance status and a mutation to save accountant approvals for this step. - **UI Components**: Introduced new UI components, including an 'ApprovalControl' for status updates and an 'Alert' component for displaying configuration or status information. - [#3600](https://github.com/Urigo/accounter-fullstack/pull/3600) [`498dbdd`](https://github.com/Urigo/accounter-fullstack/commit/498dbddfa7ed716da5d4f1e7fb1a980b92600c6d) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Write-Target Logic Update**: Updated the `TenantAwareDBClient` to prioritize a single business ID from the `X-Business-Scope` header as the write-target, falling back to the primary tenant business only when necessary. - **Enhanced Integration Testing**: Added a comprehensive integration test suite that validates RLS enforcement across various membership and scope combinations, ensuring data integrity during write operations. - **Test Coverage Improvements**: Expanded unit tests for `TenantAwareDBClient` to cover edge cases where the primary business ID is absent but a single scoped business is present. - [#3466](https://github.com/Urigo/accounter-fullstack/pull/3466) [`249ad87`](https://github.com/Urigo/accounter-fullstack/commit/249ad87809e104c6c0ffc02971f3cee5dac478b1) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Scraper Enhancements**: Updated currency rate and Poalim scrapers to accept specific date ranges, improving flexibility and data accuracy. - **Transaction Ingestion Logic**: Implemented advanced transaction diffing and change detection for Isracard, Amex, and currency rates to identify updates to existing records rather than just inserting new ones. - **Data Type Normalization**: Standardized card identifiers to strings across the ingestion pipeline and updated GraphQL schemas to reflect these changes. - [#3545](https://github.com/Urigo/accounter-fullstack/pull/3545) [`89cd003`](https://github.com/Urigo/accounter-fullstack/commit/89cd003eb5fc0a59184bb9c3518dd81423217c70) Thanks [@gilgardosh](https://github.com/gilgardosh)! - adds `updateDeposit(id, name?, openDate?, closeDate?)` GraphQL mutation — merges provided fields with existing record so omitted fields are preserved. The provider's `updateBankDeposit` method was already in place; only the schema and resolver were missing. - [`82f07c2`](https://github.com/Urigo/accounter-fullstack/commit/82f07c25cd88fbcef8d29ef3d32230cfce168caa) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **Developer Authentication Bypass**: Introduced a new development-only authentication mechanism that allows bypassing Auth0. This enables developers to impersonate seeded demo users by setting specific environment variables and passing an `X-Dev-Auth` header. - **Client-Side Integration**: Modified the client application to conditionally use the new dev authentication flow, affecting how authentication tokens are provided to URQL and how user context and protected routes are handled. New environment variables (`VITE_DEV_AUTH`, `VITE_DEV_AUTH_USER_ID`) were added for client-side configuration. - **Server-Side Authentication Plugin**: Updated the server's authentication plugin to detect and prioritize the `X-Dev-Auth` header when the `ALLOW_DEV_AUTH` environment variable is enabled. A new `handleDevBypassAuth` function was implemented to resolve user context based on the provided user ID from the dev auth header. - **Enhanced Demo Data Seeding**: The demo data seeding script (`seed-demo-data.ts`) was updated to automatically seed deterministic demo users (admin and accountant) and print their IDs. This facilitates easy setup for local development using the new dev authentication bypass. - **Documentation Update**: The `demo-staging-guide.md` documentation was updated with clear instructions on how to set up and use the local development authentication bypass, including environment variable configuration and role switching. - [#3598](https://github.com/Urigo/accounter-fullstack/pull/3598) [`df97c5a`](https://github.com/Urigo/accounter-fullstack/commit/df97c5a07c23befddb48404ffc592f68fc70b828) Thanks [@gilgardosh](https://github.com/gilgardosh)! - \* **Database Schema Update**: Updated the `sort_codes` table to use a composite primary key of `(key, owner_id)` to prevent multi-tenant ID collisions. - **API and Data Loader Refactoring**: Refactored `SortCodesProvider` and associated GraphQL resolvers to support multi-tenant lookups by `ownerId`, replacing single-key lookups with composite key loaders. - [#3629](https://github.com/Urigo/accounter-fullstack/pull/3629) [`4c184a9`](https://github.com/Urigo/accounter-fullstack/commit/4c184a98a938e1b3e6554a6c233b15863b27fd66) Thanks [@gilgardosh](https://github.com/gilgardosh)! - Bump Node.js runtime to v26.3.0; update @types/node to 25.9.2 and replace ts-node with tsx for Node 26 ESM loader compatibility. - [#3554](https://github.com/Urigo/accounter-fullstack/pull/3554) [`5d1b2a3`](https://github.com/Urigo/accounter-fullstack/commit/5d1b2a373dd76f12186fff325d57d80bfd286fec) Thanks [@gilgardosh](https://github.com/gilgardosh)! - - **New Scraper Implementation*