Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lockfileVersion : '9.0'
settings :
autoInstallPeers : true
excludeLinksFromLockfile : false
importers :
. :
dependencies :
'@dnd-kit/core' :
specifier : ^6.3.1
version : 6.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@dnd-kit/sortable' :
specifier : ^10.0.0
version : 10.0 .0 (@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)
'@dnd-kit/utilities' :
specifier : ^3.2.2
version : 3.2 .2 (react@19.2.4)
'@hookform/resolvers' :
specifier : ^3.9.0
version : 3.10 .0 (react-hook-form@7.71.2(react@19.2.4))
'@pdfme/common' :
specifier : ^5.5.8
version : 5.5 .8 (antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))
'@pdfme/generator' :
specifier : ^5.5.8
version : 5.5 .8 (@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)))(@pdfme/schemas@5.5.8(@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))))
'@pdfme/schemas' :
specifier : ^5.5.8
version : 5.5 .8 (@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)))
'@radix-ui/react-accordion' :
specifier : ^1.2.12
version : 1.2 .12 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-alert-dialog' :
specifier : ^1.1.15
version : 1.1 .15 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-avatar' :
specifier : ^1.1.11
version : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-checkbox' :
specifier : ^1.3.3
version : 1.3 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-dialog' :
specifier : ^1.1.15
version : 1.1 .15 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-dropdown-menu' :
specifier : ^2.1.16
version : 2.1 .16 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-icons' :
specifier : ^1.3.0
version : 1.3 .2 (react@19.2.4)
'@radix-ui/react-label' :
specifier : ^2.1.8
version : 2.1 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-navigation-menu' :
specifier : ^1.2.14
version : 1.2 .14 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-popover' :
specifier : ^1.1.15
version : 1.1 .15 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-progress' :
specifier : ^1.1.8
version : 1.1 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-radio-group' :
specifier : ^1.3.8
version : 1.3 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-scroll-area' :
specifier : ^1.2.10
version : 1.2 .10 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-select' :
specifier : ^2.2.6
version : 2.2 .6 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-separator' :
specifier : ^1.1.8
version : 1.1 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slider' :
specifier : ^1.3.6
version : 1.3 .6 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' :
specifier : ^1.2.4
version : 1.2 .4 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-switch' :
specifier : ^1.2.6
version : 1.2 .6 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-tabs' :
specifier : ^1.1.13
version : 1.1 .13 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-tooltip' :
specifier : ^1.2.8
version : 1.2 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@socket.io/redis-adapter' :
specifier : ^8.3.0
version : 8.3 .0 (socket.io-adapter@2.5.6)
'@tanstack/react-query' :
specifier : ^5.62.0
version : 5.90 .21 (react@19.2.4)
'@tanstack/react-query-devtools' :
specifier : ^5.62.0
version : 5.91 .3 (@tanstack/react-query@5.90.21(react@19.2.4))(react@19.2.4)
'@tanstack/react-table' :
specifier : ^8.21.3
version : 8.21 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
archiver :
specifier : ^7.0.1
version : 7.0 .1
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
better-auth :
specifier : ^1.2.0
2026-04-08 15:31:33 -04:00
version : 1.5 .5 (drizzle-kit@0.30.6)(drizzle-orm@0.38.4(@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4))(mongodb@7.1.0(socks@2.8.7))(next@15.1.0(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0(@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)))
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
bullmq :
specifier : ^5.25.0
version : 5.71 .0
class-variance-authority :
specifier : ^0.7.0
version : 0.7 .1
clsx :
specifier : ^2.1.1
version : 2.1 .1
cmdk :
specifier : ^1.1.1
version : 1.1 .1 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
date-fns :
specifier : ^4.1.0
version : 4.1 .0
drizzle-orm :
specifier : ^0.38.0
version : 0.38 .4 (@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4)
imapflow :
specifier : ^1.2.13
version : 1.2 .13
ioredis :
specifier : ^5.4.0
version : 5.10 .0
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
iso-3166-2 :
specifier : ^1.0.0
version : 1.0 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
jose :
specifier : ^6.2.1
version : 6.2 .1
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
libphonenumber-js :
specifier : ^1.12.42
version : 1.12 .42
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lucide-react :
specifier : ^0.460.0
version : 0.460 .0 (react@19.2.4)
mailparser :
specifier : ^3.9.4
version : 3.9 .4
minio :
specifier : ^8.0.0
version : 8.0 .7
next :
specifier : 15.1 .0
version : 15.1 .0 (@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
next-themes :
specifier : ^0.4.0
version : 0.4 .6 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
nodemailer :
specifier : ^6.9.0
version : 6.10 .1
openai :
specifier : ^6.27.0
version : 6.27 .0 (ws@8.18.3)(zod@3.25.76)
feat(eoi): in-app pathway fills the same source PDF as Documenso
When the in-app pathway is used for EOI templates, we now load the same
source PDF that the Documenso template uploads and fill its AcroForm
fields with values from EoiContext via pdf-lib. Field names mirror the
Documenso template's formValues keys exactly (Name, Email, Address,
Yacht Name, Length, Width, Draft, Berth Number + Lease_10 / Purchase
checkboxes), so both pathways produce equivalent legal documents — only
the renderer differs.
The form is left interactive (not flattened) so a recipient can still
adjust values before signing. Non-EOI templates (welcome letters,
acknowledgments, etc.) keep using the existing HTML→pdfme path.
Adds:
- pdf-lib direct dep
- src/lib/pdf/fill-eoi-form.ts — load + fill helpers, EOI_TEMPLATE_PDF_PATH
env override
- assets/ + README documenting the expected source PDF
- next.config outputFileTracingIncludes so the asset is bundled in the
standalone build
Tests: 8 new (4 fill-form unit + 2 source-PDF route + 2 fallback);
645/645 green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 13:38:02 +02:00
pdf-lib :
specifier : ^1.17.1
version : 1.17 .1
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
pino :
specifier : ^9.5.0
version : 9.14 .0
pino-pretty :
specifier : ^13.0.0
version : 13.1 .3
postgres :
specifier : ^3.4.0
version : 3.4 .8
react :
specifier : ^19.0.0
version : 19.2 .4
react-day-picker :
specifier : ^9.14.0
version : 9.14 .0 (react@19.2.4)
react-dom :
specifier : ^19.0.0
version : 19.2 .4 (react@19.2.4)
react-hook-form :
specifier : ^7.54.0
version : 7.71 .2 (react@19.2.4)
recharts :
specifier : ^3.8.0
version : 3.8 .0 (@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1)
socket.io :
specifier : ^4.8.0
version : 4.8 .3
socket.io-client :
specifier : ^4.8.0
version : 4.8 .3
sonner :
specifier : ^1.7.0
version : 1.7 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
tailwind-merge :
specifier : ^2.6.0
version : 2.6 .1
tailwindcss-animate :
specifier : ^1.0.7
version : 1.0 .7 (tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2))
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
tesseract.js :
specifier : ^7.0.0
version : 7.0 .0
2026-04-29 14:05:10 +02:00
vaul :
specifier : ^1.1.2
version : 1.1 .2 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
zod :
specifier : ^3.24.0
version : 3.25 .76
zustand :
specifier : ^5.0.0
version : 5.0 .11 (@types/react@19.2.14)(immer@11.1.4)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4))
devDependencies :
'@eslint/eslintrc' :
specifier : ^3.3.5
version : 3.3 .5
'@playwright/test' :
specifier : ^1.58.2
version : 1.58 .2
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@types/archiver' :
specifier : ^7.0.0
version : 7.0 .0
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
'@types/iso-3166-2' :
specifier : ^1.0.4
version : 1.0 .4
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@types/mailparser' :
specifier : ^3.4.6
version : 3.4 .6
'@types/node' :
specifier : ^22.0.0
version : 22.19 .15
'@types/nodemailer' :
specifier : ^6.4.0
version : 6.4 .23
'@types/react' :
specifier : ^19.0.0
version : 19.2 .14
'@types/react-dom' :
specifier : ^19.0.0
version : 19.2 .3 (@types/react@19.2.14)
'@vitest/coverage-v8' :
specifier : ^4.1.0
2026-04-08 15:31:33 -04:00
version : 4.1 .0 (vitest@4.1.0(@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)))
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
autoprefixer :
specifier : ^10.4.27
version : 10.4 .27 (postcss@8.5.8)
dotenv :
specifier : ^17.3.1
version : 17.3 .1
drizzle-kit :
specifier : ^0.30.0
version : 0.30 .6
2026-04-08 15:31:33 -04:00
esbuild :
specifier : ^0.25.0
version : 0.25 .12
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
eslint :
specifier : ^9.0.0
version : 9.39 .4 (jiti@1.21.7)
eslint-config-next :
specifier : 15.1 .0
version : 15.1 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
eslint-config-prettier :
specifier : ^9.1.0
version : 9.1 .2 (eslint@9.39.4(jiti@1.21.7))
husky :
specifier : ^9.1.0
version : 9.1 .7
lint-staged :
specifier : ^15.2.0
version : 15.5 .2
postcss :
specifier : ^8.4.0
version : 8.5 .8
prettier :
specifier : ^3.4.0
version : 3.8 .1
tailwindcss :
specifier : ^3.4.0
version : 3.4 .19 (tsx@4.21.0)(yaml@2.8.2)
tsx :
specifier : ^4.19.0
version : 4.21 .0
typescript :
specifier : ^5.7.0
version : 5.9 .3
vitest :
specifier : ^4.1.0
2026-04-08 15:31:33 -04:00
version : 4.1 .0 (@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
packages :
'@alloc/quick-lru@5.2.0' :
resolution : {integrity : sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines : {node : '>=10' }
'@ant-design/colors@6.0.0' :
resolution : {integrity : sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==}
'@ant-design/colors@7.2.1' :
resolution : {integrity : sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==}
'@ant-design/cssinjs-utils@1.1.3' :
resolution : {integrity : sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@ant-design/cssinjs@1.24.0' :
resolution : {integrity : sha512-K4cYrJBsgvL+IoozUXYjbT6LHHNt+19a9zkvpBPxLjFHas1UpPM2A5MlhROb0BT8N8WoavM5VsP9MeSeNK/3mg==}
peerDependencies :
react : '>=16.0.0'
react-dom : '>=16.0.0'
'@ant-design/fast-color@2.0.6' :
resolution : {integrity : sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==}
engines : {node : '>=8.x' }
'@ant-design/icons-svg@4.4.2' :
resolution : {integrity : sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==}
'@ant-design/icons@4.8.3' :
resolution : {integrity : sha512-HGlIQZzrEbAhpJR6+IGdzfbPym94Owr6JZkJ2QCCnOkPVIWMO2xgIVcOKnl8YcpijIo39V7l2qQL5fmtw56cMw==}
engines : {node : '>=8' }
peerDependencies :
react : '>=16.0.0'
react-dom : '>=16.0.0'
'@ant-design/icons@5.6.1' :
resolution : {integrity : sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==}
engines : {node : '>=8' }
peerDependencies :
react : '>=16.0.0'
react-dom : '>=16.0.0'
'@ant-design/react-slick@1.1.2' :
resolution : {integrity : sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==}
peerDependencies :
react : '>=16.9.0'
'@babel/helper-string-parser@7.27.1' :
resolution : {integrity : sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines : {node : '>=6.9.0' }
'@babel/helper-validator-identifier@7.28.5' :
resolution : {integrity : sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines : {node : '>=6.9.0' }
'@babel/parser@7.29.0' :
resolution : {integrity : sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
engines : {node : '>=6.0.0' }
hasBin : true
'@babel/runtime@7.28.6' :
resolution : {integrity : sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
engines : {node : '>=6.9.0' }
'@babel/types@7.29.0' :
resolution : {integrity : sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
engines : {node : '>=6.9.0' }
'@bcoe/v8-coverage@1.0.2' :
resolution : {integrity : sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines : {node : '>=18' }
'@better-auth/core@1.5.5' :
resolution : {integrity : sha512-1oR/2jAp821Dcf67kQYHUoyNcdc1TcShfw4QMK0YTVntuRES5mUOyvEJql5T6eIuLfaqaN4LOF78l0FtF66HXA==}
peerDependencies :
'@better-auth/utils' : 0.3 .1
'@better-fetch/fetch' : 1.1 .21
'@cloudflare/workers-types' : '>=4'
better-call : 1.3 .2
jose : ^6.1.0
kysely : ^0.28.5
nanostores : ^1.0.1
peerDependenciesMeta :
'@cloudflare/workers-types' :
optional : true
'@better-auth/drizzle-adapter@1.5.5' :
resolution : {integrity : sha512-HAi9xAP40oDt48QZeYBFTcmg3vt1Jik90GwoRIfangd7VGbxesIIDBJSnvwMbZ52GBIc6+V4FRw9lasNiNrPfw==}
peerDependencies :
'@better-auth/core' : 1.5 .5
'@better-auth/utils' : ^0.3.0
drizzle-orm : '>=0.41.0'
peerDependenciesMeta :
drizzle-orm :
optional : true
'@better-auth/kysely-adapter@1.5.5' :
resolution : {integrity : sha512-LmHffIVnqbfsxcxckMOoE8MwibWrbVFch+kwPKJ5OFDFv6lin75ufN7ZZ7twH0IMPLT/FcgzaRjP8jRrXRef9g==}
peerDependencies :
'@better-auth/core' : 1.5 .5
'@better-auth/utils' : ^0.3.0
kysely : ^0.27.0 || ^0.28.0
'@better-auth/memory-adapter@1.5.5' :
resolution : {integrity : sha512-4X0j1/2L+nsgmObjmy9xEGUFWUv38Qjthp558fwS3DAp6ueWWyCaxaD6VJZ7m5qPNMrsBStO5WGP8CmJTEWm7g==}
peerDependencies :
'@better-auth/core' : 1.5 .5
'@better-auth/utils' : ^0.3.0
'@better-auth/mongo-adapter@1.5.5' :
resolution : {integrity : sha512-P1J9ljL5X5k740I8Rx1esPWNgWYPdJR5hf2CY7BwDSrQFPUHuzeCg0YhtEEP55niNateTXhBqGAcy0fVOeamZg==}
peerDependencies :
'@better-auth/core' : 1.5 .5
'@better-auth/utils' : ^0.3.0
mongodb : ^6.0.0 || ^7.0.0
'@better-auth/prisma-adapter@1.5.5' :
resolution : {integrity : sha512-CliDd78CXHzzwQIXhCdwGr5Ml53i6JdCHWV7PYwTIJz9EAm6qb2RVBdpP3nqEfNjINGM22A6gfleCgCdZkTIZg==}
peerDependencies :
'@better-auth/core' : 1.5 .5
'@better-auth/utils' : ^0.3.0
'@prisma/client' : ^5.0.0 || ^6.0.0 || ^7.0.0
prisma : ^5.0.0 || ^6.0.0 || ^7.0.0
peerDependenciesMeta :
'@prisma/client' :
optional : true
prisma :
optional : true
'@better-auth/telemetry@1.5.5' :
resolution : {integrity : sha512-1+lklxArn4IMHuU503RcPdXrSG2tlXt4jnGG3omolmspQ7tktg/Y9XO/yAkYDurtvMn1xJ8X1Ov01Ji/r5s9BQ==}
peerDependencies :
'@better-auth/core' : 1.5 .5
'@better-auth/utils@0.3.1' :
resolution : {integrity : sha512-+CGp4UmZSUrHHnpHhLPYu6cV+wSUSvVbZbNykxhUDocpVNTo9uFFxw/NqJlh1iC4wQ9HKKWGCKuZ5wUgS0v6Kg==}
'@better-fetch/fetch@1.1.21' :
resolution : {integrity : sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==}
'@ctrl/tinycolor@3.6.1' :
resolution : {integrity : sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
engines : {node : '>=10' }
'@date-fns/tz@1.4.1' :
resolution : {integrity : sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==}
'@dnd-kit/accessibility@3.1.1' :
resolution : {integrity : sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==}
peerDependencies :
react : '>=16.8.0'
'@dnd-kit/core@6.3.1' :
resolution : {integrity : sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==}
peerDependencies :
react : '>=16.8.0'
react-dom : '>=16.8.0'
'@dnd-kit/sortable@10.0.0' :
resolution : {integrity : sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==}
peerDependencies :
'@dnd-kit/core' : ^6.3.0
react : '>=16.8.0'
'@dnd-kit/utilities@3.2.2' :
resolution : {integrity : sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==}
peerDependencies :
react : '>=16.8.0'
'@drizzle-team/brocli@0.10.2' :
resolution : {integrity : sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
'@emnapi/core@1.9.0' :
resolution : {integrity : sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==}
'@emnapi/runtime@1.9.0' :
resolution : {integrity : sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==}
'@emnapi/wasi-threads@1.2.0' :
resolution : {integrity : sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==}
'@emotion/hash@0.8.0' :
resolution : {integrity : sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==}
'@emotion/unitless@0.7.5' :
resolution : {integrity : sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==}
'@esbuild-kit/core-utils@3.3.2' :
resolution : {integrity : sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
deprecated: 'Merged into tsx : https://tsx.is'
'@esbuild-kit/esm-loader@2.6.5' :
resolution : {integrity : sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
deprecated: 'Merged into tsx : https://tsx.is'
'@esbuild/aix-ppc64@0.19.12' :
resolution : {integrity : sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
engines : {node : '>=12' }
cpu : [ ppc64]
os : [ aix]
2026-04-08 15:31:33 -04:00
'@esbuild/aix-ppc64@0.25.12' :
resolution : {integrity : sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines : {node : '>=18' }
cpu : [ ppc64]
os : [ aix]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/aix-ppc64@0.27.4' :
resolution : {integrity : sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==}
engines : {node : '>=18' }
cpu : [ ppc64]
os : [ aix]
'@esbuild/android-arm64@0.18.20' :
resolution : {integrity : sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ android]
'@esbuild/android-arm64@0.19.12' :
resolution : {integrity : sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ android]
2026-04-08 15:31:33 -04:00
'@esbuild/android-arm64@0.25.12' :
resolution : {integrity : sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ android]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/android-arm64@0.27.4' :
resolution : {integrity : sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ android]
'@esbuild/android-arm@0.18.20' :
resolution : {integrity : sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines : {node : '>=12' }
cpu : [ arm]
os : [ android]
'@esbuild/android-arm@0.19.12' :
resolution : {integrity : sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
engines : {node : '>=12' }
cpu : [ arm]
os : [ android]
2026-04-08 15:31:33 -04:00
'@esbuild/android-arm@0.25.12' :
resolution : {integrity : sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
engines : {node : '>=18' }
cpu : [ arm]
os : [ android]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/android-arm@0.27.4' :
resolution : {integrity : sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==}
engines : {node : '>=18' }
cpu : [ arm]
os : [ android]
'@esbuild/android-x64@0.18.20' :
resolution : {integrity : sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ android]
'@esbuild/android-x64@0.19.12' :
resolution : {integrity : sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ android]
2026-04-08 15:31:33 -04:00
'@esbuild/android-x64@0.25.12' :
resolution : {integrity : sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ android]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/android-x64@0.27.4' :
resolution : {integrity : sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ android]
'@esbuild/darwin-arm64@0.18.20' :
resolution : {integrity : sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ darwin]
'@esbuild/darwin-arm64@0.19.12' :
resolution : {integrity : sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ darwin]
2026-04-08 15:31:33 -04:00
'@esbuild/darwin-arm64@0.25.12' :
resolution : {integrity : sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ darwin]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/darwin-arm64@0.27.4' :
resolution : {integrity : sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ darwin]
'@esbuild/darwin-x64@0.18.20' :
resolution : {integrity : sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ darwin]
'@esbuild/darwin-x64@0.19.12' :
resolution : {integrity : sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ darwin]
2026-04-08 15:31:33 -04:00
'@esbuild/darwin-x64@0.25.12' :
resolution : {integrity : sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ darwin]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/darwin-x64@0.27.4' :
resolution : {integrity : sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ darwin]
'@esbuild/freebsd-arm64@0.18.20' :
resolution : {integrity : sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ freebsd]
'@esbuild/freebsd-arm64@0.19.12' :
resolution : {integrity : sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ freebsd]
2026-04-08 15:31:33 -04:00
'@esbuild/freebsd-arm64@0.25.12' :
resolution : {integrity : sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ freebsd]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/freebsd-arm64@0.27.4' :
resolution : {integrity : sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ freebsd]
'@esbuild/freebsd-x64@0.18.20' :
resolution : {integrity : sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ freebsd]
'@esbuild/freebsd-x64@0.19.12' :
resolution : {integrity : sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ freebsd]
2026-04-08 15:31:33 -04:00
'@esbuild/freebsd-x64@0.25.12' :
resolution : {integrity : sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ freebsd]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/freebsd-x64@0.27.4' :
resolution : {integrity : sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ freebsd]
'@esbuild/linux-arm64@0.18.20' :
resolution : {integrity : sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ linux]
'@esbuild/linux-arm64@0.19.12' :
resolution : {integrity : sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-arm64@0.25.12' :
resolution : {integrity : sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-arm64@0.27.4' :
resolution : {integrity : sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ linux]
'@esbuild/linux-arm@0.18.20' :
resolution : {integrity : sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines : {node : '>=12' }
cpu : [ arm]
os : [ linux]
'@esbuild/linux-arm@0.19.12' :
resolution : {integrity : sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
engines : {node : '>=12' }
cpu : [ arm]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-arm@0.25.12' :
resolution : {integrity : sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
engines : {node : '>=18' }
cpu : [ arm]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-arm@0.27.4' :
resolution : {integrity : sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==}
engines : {node : '>=18' }
cpu : [ arm]
os : [ linux]
'@esbuild/linux-ia32@0.18.20' :
resolution : {integrity : sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines : {node : '>=12' }
cpu : [ ia32]
os : [ linux]
'@esbuild/linux-ia32@0.19.12' :
resolution : {integrity : sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
engines : {node : '>=12' }
cpu : [ ia32]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-ia32@0.25.12' :
resolution : {integrity : sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
engines : {node : '>=18' }
cpu : [ ia32]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-ia32@0.27.4' :
resolution : {integrity : sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==}
engines : {node : '>=18' }
cpu : [ ia32]
os : [ linux]
'@esbuild/linux-loong64@0.18.20' :
resolution : {integrity : sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines : {node : '>=12' }
cpu : [ loong64]
os : [ linux]
'@esbuild/linux-loong64@0.19.12' :
resolution : {integrity : sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
engines : {node : '>=12' }
cpu : [ loong64]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-loong64@0.25.12' :
resolution : {integrity : sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
engines : {node : '>=18' }
cpu : [ loong64]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-loong64@0.27.4' :
resolution : {integrity : sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==}
engines : {node : '>=18' }
cpu : [ loong64]
os : [ linux]
'@esbuild/linux-mips64el@0.18.20' :
resolution : {integrity : sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines : {node : '>=12' }
cpu : [ mips64el]
os : [ linux]
'@esbuild/linux-mips64el@0.19.12' :
resolution : {integrity : sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
engines : {node : '>=12' }
cpu : [ mips64el]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-mips64el@0.25.12' :
resolution : {integrity : sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
engines : {node : '>=18' }
cpu : [ mips64el]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-mips64el@0.27.4' :
resolution : {integrity : sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==}
engines : {node : '>=18' }
cpu : [ mips64el]
os : [ linux]
'@esbuild/linux-ppc64@0.18.20' :
resolution : {integrity : sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines : {node : '>=12' }
cpu : [ ppc64]
os : [ linux]
'@esbuild/linux-ppc64@0.19.12' :
resolution : {integrity : sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
engines : {node : '>=12' }
cpu : [ ppc64]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-ppc64@0.25.12' :
resolution : {integrity : sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
engines : {node : '>=18' }
cpu : [ ppc64]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-ppc64@0.27.4' :
resolution : {integrity : sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==}
engines : {node : '>=18' }
cpu : [ ppc64]
os : [ linux]
'@esbuild/linux-riscv64@0.18.20' :
resolution : {integrity : sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines : {node : '>=12' }
cpu : [ riscv64]
os : [ linux]
'@esbuild/linux-riscv64@0.19.12' :
resolution : {integrity : sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
engines : {node : '>=12' }
cpu : [ riscv64]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-riscv64@0.25.12' :
resolution : {integrity : sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
engines : {node : '>=18' }
cpu : [ riscv64]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-riscv64@0.27.4' :
resolution : {integrity : sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==}
engines : {node : '>=18' }
cpu : [ riscv64]
os : [ linux]
'@esbuild/linux-s390x@0.18.20' :
resolution : {integrity : sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines : {node : '>=12' }
cpu : [ s390x]
os : [ linux]
'@esbuild/linux-s390x@0.19.12' :
resolution : {integrity : sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
engines : {node : '>=12' }
cpu : [ s390x]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-s390x@0.25.12' :
resolution : {integrity : sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
engines : {node : '>=18' }
cpu : [ s390x]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-s390x@0.27.4' :
resolution : {integrity : sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==}
engines : {node : '>=18' }
cpu : [ s390x]
os : [ linux]
'@esbuild/linux-x64@0.18.20' :
resolution : {integrity : sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ linux]
'@esbuild/linux-x64@0.19.12' :
resolution : {integrity : sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/linux-x64@0.25.12' :
resolution : {integrity : sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ linux]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-x64@0.27.4' :
resolution : {integrity : sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
'@esbuild/netbsd-arm64@0.25.12' :
resolution : {integrity : sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ netbsd]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/netbsd-arm64@0.27.4' :
resolution : {integrity : sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ netbsd]
'@esbuild/netbsd-x64@0.18.20' :
resolution : {integrity : sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ netbsd]
'@esbuild/netbsd-x64@0.19.12' :
resolution : {integrity : sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ netbsd]
2026-04-08 15:31:33 -04:00
'@esbuild/netbsd-x64@0.25.12' :
resolution : {integrity : sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ netbsd]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/netbsd-x64@0.27.4' :
resolution : {integrity : sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ netbsd]
2026-04-08 15:31:33 -04:00
'@esbuild/openbsd-arm64@0.25.12' :
resolution : {integrity : sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ openbsd]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/openbsd-arm64@0.27.4' :
resolution : {integrity : sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ openbsd]
'@esbuild/openbsd-x64@0.18.20' :
resolution : {integrity : sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ openbsd]
'@esbuild/openbsd-x64@0.19.12' :
resolution : {integrity : sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ openbsd]
2026-04-08 15:31:33 -04:00
'@esbuild/openbsd-x64@0.25.12' :
resolution : {integrity : sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ openbsd]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/openbsd-x64@0.27.4' :
resolution : {integrity : sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ openbsd]
2026-04-08 15:31:33 -04:00
'@esbuild/openharmony-arm64@0.25.12' :
resolution : {integrity : sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ openharmony]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/openharmony-arm64@0.27.4' :
resolution : {integrity : sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ openharmony]
'@esbuild/sunos-x64@0.18.20' :
resolution : {integrity : sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ sunos]
'@esbuild/sunos-x64@0.19.12' :
resolution : {integrity : sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ sunos]
2026-04-08 15:31:33 -04:00
'@esbuild/sunos-x64@0.25.12' :
resolution : {integrity : sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ sunos]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/sunos-x64@0.27.4' :
resolution : {integrity : sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ sunos]
'@esbuild/win32-arm64@0.18.20' :
resolution : {integrity : sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ win32]
'@esbuild/win32-arm64@0.19.12' :
resolution : {integrity : sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
engines : {node : '>=12' }
cpu : [ arm64]
os : [ win32]
2026-04-08 15:31:33 -04:00
'@esbuild/win32-arm64@0.25.12' :
resolution : {integrity : sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ win32]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/win32-arm64@0.27.4' :
resolution : {integrity : sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==}
engines : {node : '>=18' }
cpu : [ arm64]
os : [ win32]
'@esbuild/win32-ia32@0.18.20' :
resolution : {integrity : sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines : {node : '>=12' }
cpu : [ ia32]
os : [ win32]
'@esbuild/win32-ia32@0.19.12' :
resolution : {integrity : sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
engines : {node : '>=12' }
cpu : [ ia32]
os : [ win32]
2026-04-08 15:31:33 -04:00
'@esbuild/win32-ia32@0.25.12' :
resolution : {integrity : sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
engines : {node : '>=18' }
cpu : [ ia32]
os : [ win32]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/win32-ia32@0.27.4' :
resolution : {integrity : sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==}
engines : {node : '>=18' }
cpu : [ ia32]
os : [ win32]
'@esbuild/win32-x64@0.18.20' :
resolution : {integrity : sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ win32]
'@esbuild/win32-x64@0.19.12' :
resolution : {integrity : sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
engines : {node : '>=12' }
cpu : [ x64]
os : [ win32]
2026-04-08 15:31:33 -04:00
'@esbuild/win32-x64@0.25.12' :
resolution : {integrity : sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ win32]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/win32-x64@0.27.4' :
resolution : {integrity : sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==}
engines : {node : '>=18' }
cpu : [ x64]
os : [ win32]
'@eslint-community/eslint-utils@4.9.1' :
resolution : {integrity : sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
engines : {node : ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies :
eslint : ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.12.2' :
resolution : {integrity : sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines : {node : ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.21.2' :
resolution : {integrity : sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/config-helpers@0.4.2' :
resolution : {integrity : sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.17.0' :
resolution : {integrity : sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.5' :
resolution : {integrity : sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.39.4' :
resolution : {integrity : sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7' :
resolution : {integrity : sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.4.1' :
resolution : {integrity : sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@floating-ui/core@1.7.5' :
resolution : {integrity : sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==}
'@floating-ui/dom@1.7.6' :
resolution : {integrity : sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==}
'@floating-ui/react-dom@2.1.8' :
resolution : {integrity : sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==}
peerDependencies :
react : '>=16.8.0'
react-dom : '>=16.8.0'
'@floating-ui/utils@0.2.11' :
resolution : {integrity : sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
'@hookform/resolvers@3.10.0' :
resolution : {integrity : sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==}
peerDependencies :
react-hook-form : ^7.0.0
'@humanfs/core@0.19.1' :
resolution : {integrity : sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines : {node : '>=18.18.0' }
'@humanfs/node@0.16.7' :
resolution : {integrity : sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
engines : {node : '>=18.18.0' }
'@humanwhocodes/module-importer@1.0.1' :
resolution : {integrity : sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
engines : {node : '>=12.22' }
'@humanwhocodes/retry@0.4.3' :
resolution : {integrity : sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines : {node : '>=18.18' }
'@img/sharp-darwin-arm64@0.33.5' :
resolution : {integrity : sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ arm64]
os : [ darwin]
'@img/sharp-darwin-x64@0.33.5' :
resolution : {integrity : sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ x64]
os : [ darwin]
'@img/sharp-libvips-darwin-arm64@1.0.4' :
resolution : {integrity : sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
cpu : [ arm64]
os : [ darwin]
'@img/sharp-libvips-darwin-x64@1.0.4' :
resolution : {integrity : sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
cpu : [ x64]
os : [ darwin]
'@img/sharp-libvips-linux-arm64@1.0.4' :
resolution : {integrity : sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-libvips-linux-arm@1.0.5' :
resolution : {integrity : sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
cpu : [ arm]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-libvips-linux-s390x@1.0.4' :
resolution : {integrity : sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
cpu : [ s390x]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-libvips-linux-x64@1.0.4' :
resolution : {integrity : sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-libvips-linuxmusl-arm64@1.0.4' :
resolution : {integrity : sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-libvips-linuxmusl-x64@1.0.4' :
resolution : {integrity : sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-linux-arm64@0.33.5' :
resolution : {integrity : sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-linux-arm@0.33.5' :
resolution : {integrity : sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ arm]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-linux-s390x@0.33.5' :
resolution : {integrity : sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ s390x]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-linux-x64@0.33.5' :
resolution : {integrity : sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-linuxmusl-arm64@0.33.5' :
resolution : {integrity : sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-linuxmusl-x64@0.33.5' :
resolution : {integrity : sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@img/sharp-wasm32@0.33.5' :
resolution : {integrity : sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ wasm32]
'@img/sharp-win32-ia32@0.33.5' :
resolution : {integrity : sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ ia32]
os : [ win32]
'@img/sharp-win32-x64@0.33.5' :
resolution : {integrity : sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu : [ x64]
os : [ win32]
'@ioredis/commands@1.5.0' :
resolution : {integrity : sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==}
'@ioredis/commands@1.5.1' :
resolution : {integrity : sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@isaacs/cliui@8.0.2' :
resolution : {integrity : sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines : {node : '>=12' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@jridgewell/gen-mapping@0.3.13' :
resolution : {integrity : sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/resolve-uri@3.1.2' :
resolution : {integrity : sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines : {node : '>=6.0.0' }
'@jridgewell/sourcemap-codec@1.5.5' :
resolution : {integrity : sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.31' :
resolution : {integrity : sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
'@mongodb-js/saslprep@1.4.6' :
resolution : {integrity : sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==}
'@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3' :
resolution : {integrity : sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==}
cpu : [ arm64]
os : [ darwin]
'@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3' :
resolution : {integrity : sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==}
cpu : [ x64]
os : [ darwin]
'@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3' :
resolution : {integrity : sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==}
cpu : [ arm64]
os : [ linux]
'@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3' :
resolution : {integrity : sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==}
cpu : [ arm]
os : [ linux]
'@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3' :
resolution : {integrity : sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==}
cpu : [ x64]
os : [ linux]
'@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3' :
resolution : {integrity : sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==}
cpu : [ x64]
os : [ win32]
'@napi-rs/wasm-runtime@0.2.12' :
resolution : {integrity : sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
'@napi-rs/wasm-runtime@1.1.1' :
resolution : {integrity : sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==}
'@next/env@15.1.0' :
resolution : {integrity : sha512-UcCO481cROsqJuszPPXJnb7GGuLq617ve4xuAyyNG4VSSocJNtMU5Fsx+Lp6mlN8c7W58aZLc5y6D/2xNmaK+w==}
'@next/eslint-plugin-next@15.1.0' :
resolution : {integrity : sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==}
'@next/swc-darwin-arm64@15.1.0' :
resolution : {integrity : sha512-ZU8d7xxpX14uIaFC3nsr4L++5ZS/AkWDm1PzPO6gD9xWhFkOj2hzSbSIxoncsnlJXB1CbLOfGVN4Zk9tg83PUw==}
engines : {node : '>= 10' }
cpu : [ arm64]
os : [ darwin]
'@next/swc-darwin-x64@15.1.0' :
resolution : {integrity : sha512-DQ3RiUoW2XC9FcSM4ffpfndq1EsLV0fj0/UY33i7eklW5akPUCo6OX2qkcLXZ3jyPdo4sf2flwAED3AAq3Om2Q==}
engines : {node : '>= 10' }
cpu : [ x64]
os : [ darwin]
'@next/swc-linux-arm64-gnu@15.1.0' :
resolution : {integrity : sha512-M+vhTovRS2F//LMx9KtxbkWk627l5Q7AqXWWWrfIzNIaUFiz2/NkOFkxCFyNyGACi5YbA8aekzCLtbDyfF/v5Q==}
engines : {node : '>= 10' }
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@next/swc-linux-arm64-musl@15.1.0' :
resolution : {integrity : sha512-Qn6vOuwaTCx3pNwygpSGtdIu0TfS1KiaYLYXLH5zq1scoTXdwYfdZtwvJTpB1WrLgiQE2Ne2kt8MZok3HlFqmg==}
engines : {node : '>= 10' }
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@next/swc-linux-x64-gnu@15.1.0' :
resolution : {integrity : sha512-yeNh9ofMqzOZ5yTOk+2rwncBzucc6a1lyqtg8xZv0rH5znyjxHOWsoUtSq4cUTeeBIiXXX51QOOe+VoCjdXJRw==}
engines : {node : '>= 10' }
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@next/swc-linux-x64-musl@15.1.0' :
resolution : {integrity : sha512-t9IfNkHQs/uKgPoyEtU912MG6a1j7Had37cSUyLTKx9MnUpjj+ZDKw9OyqTI9OwIIv0wmkr1pkZy+3T5pxhJPg==}
engines : {node : '>= 10' }
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@next/swc-win32-arm64-msvc@15.1.0' :
resolution : {integrity : sha512-WEAoHyG14t5sTavZa1c6BnOIEukll9iqFRTavqRVPfYmfegOAd5MaZfXgOGG6kGo1RduyGdTHD4+YZQSdsNZXg==}
engines : {node : '>= 10' }
cpu : [ arm64]
os : [ win32]
'@next/swc-win32-x64-msvc@15.1.0' :
resolution : {integrity : sha512-J1YdKuJv9xcixzXR24Dv+4SaDKc2jj31IVUEMdO5xJivMTXuE6MAdIi4qPjSymHuFG8O5wbfWKnhJUcHHpj5CA==}
engines : {node : '>= 10' }
cpu : [ x64]
os : [ win32]
'@noble/ciphers@2.1.1' :
resolution : {integrity : sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==}
engines : {node : '>= 20.19.0' }
'@noble/hashes@2.0.1' :
resolution : {integrity : sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==}
engines : {node : '>= 20.19.0' }
'@nodelib/fs.scandir@2.1.5' :
resolution : {integrity : sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines : {node : '>= 8' }
'@nodelib/fs.stat@2.0.5' :
resolution : {integrity : sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines : {node : '>= 8' }
'@nodelib/fs.walk@1.2.8' :
resolution : {integrity : sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines : {node : '>= 8' }
'@nolyfill/is-core-module@1.0.39' :
resolution : {integrity : sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
engines : {node : '>=12.4.0' }
'@oxc-project/runtime@0.115.0' :
resolution : {integrity : sha512-Rg8Wlt5dCbXhQnsXPrkOjL1DTSvXLgb2R/KYfnf1/K+R0k6UMLEmbQXPM+kwrWqSmWA2t0B1EtHy2/3zikQpvQ==}
engines : {node : ^20.19.0 || >=22.12.0}
'@oxc-project/types@0.115.0' :
resolution : {integrity : sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==}
'@pdf-lib/standard-fonts@1.0.0' :
resolution : {integrity : sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==}
'@pdf-lib/upng@1.0.1' :
resolution : {integrity : sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==}
'@pdfme/common@5.5.8' :
resolution : {integrity : sha512-cRdTbMHRNB32MI8rtcJm6AM9IKXPhbUlTRC5vS/xJQK9eV0QIT+ZPPilJkThKL8Oi4TICGznVz67gI/DJjwWfw==}
peerDependencies :
antd : ^5.11.2
form-render : ^2.2.20
'@pdfme/generator@5.5.8' :
resolution : {integrity : sha512-vFHfZ9LBzPrXSWW8Xu+3NbI4s40PSDDit3aOB6IQAH4yfY8AoWhhyxn4614SN3okEtU14nV0CLFXz8okFSpKOQ==}
peerDependencies :
'@pdfme/common' : latest
'@pdfme/schemas' : latest
'@pdfme/pdf-lib@5.5.8' :
resolution : {integrity : sha512-bU3vzOBO1yQNtPHL/7Y8odzogNbrzsrSq3dQ5Sge2ZHjewK8KN670Em+g4Orh/lwb3KUPU9jP9p59apqRJG3Jw==}
'@pdfme/schemas@5.5.8' :
resolution : {integrity : sha512-XQ8fY9CIJtNx+jLK4HmaJOxiOCmFnKm/SM/FRUFjsb3PKpLG9TIiy9HKAyxvC6qe0YOKfU4so3IyxcBILkatOQ==}
peerDependencies :
'@pdfme/common' : latest
'@petamoriken/float16@3.9.3' :
resolution : {integrity : sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==}
'@pinojs/redact@0.4.0' :
resolution : {integrity : sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@pkgjs/parseargs@0.11.0' :
resolution : {integrity : sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines : {node : '>=14' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@playwright/test@1.58.2' :
resolution : {integrity : sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==}
engines : {node : '>=18' }
hasBin : true
'@radix-ui/number@1.1.1' :
resolution : {integrity : sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
'@radix-ui/primitive@1.1.3' :
resolution : {integrity : sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==}
'@radix-ui/react-accordion@1.2.12' :
resolution : {integrity : sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-alert-dialog@1.1.15' :
resolution : {integrity : sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-arrow@1.1.7' :
resolution : {integrity : sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-avatar@1.1.11' :
resolution : {integrity : sha512-0Qk603AHGV28BOBO34p7IgD5m+V5Sg/YovfayABkoDDBM5d3NCx0Mp4gGrjzLGes1jV5eNOE1r3itqOR33VC6Q==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-checkbox@1.3.3' :
resolution : {integrity : sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-collapsible@1.1.12' :
resolution : {integrity : sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-collection@1.1.7' :
resolution : {integrity : sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-compose-refs@1.1.2' :
resolution : {integrity : sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-context@1.1.2' :
resolution : {integrity : sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-context@1.1.3' :
resolution : {integrity : sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-dialog@1.1.15' :
resolution : {integrity : sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-direction@1.1.1' :
resolution : {integrity : sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-dismissable-layer@1.1.11' :
resolution : {integrity : sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-dropdown-menu@2.1.16' :
resolution : {integrity : sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-focus-guards@1.1.3' :
resolution : {integrity : sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-focus-scope@1.1.7' :
resolution : {integrity : sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-icons@1.3.2' :
resolution : {integrity : sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==}
peerDependencies :
react : ^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc
'@radix-ui/react-id@1.1.1' :
resolution : {integrity : sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-label@2.1.8' :
resolution : {integrity : sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-menu@2.1.16' :
resolution : {integrity : sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-navigation-menu@1.2.14' :
resolution : {integrity : sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-popover@1.1.15' :
resolution : {integrity : sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-popper@1.2.8' :
resolution : {integrity : sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-portal@1.1.9' :
resolution : {integrity : sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-presence@1.1.5' :
resolution : {integrity : sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-primitive@2.1.3' :
resolution : {integrity : sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-primitive@2.1.4' :
resolution : {integrity : sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-progress@1.1.8' :
resolution : {integrity : sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-radio-group@1.3.8' :
resolution : {integrity : sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-roving-focus@1.1.11' :
resolution : {integrity : sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-scroll-area@1.2.10' :
resolution : {integrity : sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-select@2.2.6' :
resolution : {integrity : sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-separator@1.1.8' :
resolution : {integrity : sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-slider@1.3.6' :
resolution : {integrity : sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-slot@1.2.3' :
resolution : {integrity : sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-slot@1.2.4' :
resolution : {integrity : sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-switch@1.2.6' :
resolution : {integrity : sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-tabs@1.1.13' :
resolution : {integrity : sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-tooltip@1.2.8' :
resolution : {integrity : sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/react-use-callback-ref@1.1.1' :
resolution : {integrity : sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-controllable-state@1.2.2' :
resolution : {integrity : sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-effect-event@0.0.2' :
resolution : {integrity : sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-escape-keydown@1.1.1' :
resolution : {integrity : sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-is-hydrated@0.1.0' :
resolution : {integrity : sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-layout-effect@1.1.1' :
resolution : {integrity : sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-previous@1.1.1' :
resolution : {integrity : sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-rect@1.1.1' :
resolution : {integrity : sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-use-size@1.1.1' :
resolution : {integrity : sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
peerDependencies :
'@types/react' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@radix-ui/react-visually-hidden@1.2.3' :
resolution : {integrity : sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
peerDependencies :
'@types/react' : '*'
'@types/react-dom' : '*'
react : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
'@types/react-dom' :
optional : true
'@radix-ui/rect@1.1.1' :
resolution : {integrity : sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
'@rc-component/async-validator@5.1.0' :
resolution : {integrity : sha512-n4HcR5siNUXRX23nDizbZBQPO0ZM/5oTtmKZ6/eqL0L2bo747cklFdZGRN2f+c9qWGICwDzrhW0H7tE9PptdcA==}
engines : {node : '>=14.x' }
'@rc-component/color-picker@2.0.1' :
resolution : {integrity : sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@rc-component/context@1.4.0' :
resolution : {integrity : sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@rc-component/mini-decimal@1.1.0' :
resolution : {integrity : sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==}
engines : {node : '>=8.x' }
'@rc-component/mutate-observer@1.1.0' :
resolution : {integrity : sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@rc-component/portal@1.1.2' :
resolution : {integrity : sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@rc-component/qrcode@1.1.1' :
resolution : {integrity : sha512-LfLGNymzKdUPjXUbRP+xOhIWY4jQ+YMj5MmWAcgcAq1Ij8XP7tRmAXqyuv96XvLUBE/5cA8hLFl9eO1JQMujrA==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@rc-component/tour@1.15.1' :
resolution : {integrity : sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@rc-component/trigger@2.3.1' :
resolution : {integrity : sha512-ORENF39PeXTzM+gQEshuk460Z8N4+6DkjpxlpE7Q3gYy1iBpLrx0FOJz3h62ryrJZ/3zCAUIkT1Pb/8hHWpb3A==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
'@reduxjs/toolkit@2.11.2' :
resolution : {integrity : sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==}
peerDependencies :
react : ^16.9.0 || ^17.0.0 || ^18 || ^19
react-redux : ^7.2.1 || ^8.1.3 || ^9.0.0
peerDependenciesMeta :
react :
optional : true
react-redux :
optional : true
'@rolldown/binding-android-arm64@1.0.0-rc.9' :
resolution : {integrity : sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ arm64]
os : [ android]
'@rolldown/binding-darwin-arm64@1.0.0-rc.9' :
resolution : {integrity : sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ arm64]
os : [ darwin]
'@rolldown/binding-darwin-x64@1.0.0-rc.9' :
resolution : {integrity : sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ x64]
os : [ darwin]
'@rolldown/binding-freebsd-x64@1.0.0-rc.9' :
resolution : {integrity : sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ x64]
os : [ freebsd]
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9' :
resolution : {integrity : sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ arm]
os : [ linux]
'@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9' :
resolution : {integrity : sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@rolldown/binding-linux-arm64-musl@1.0.0-rc.9' :
resolution : {integrity : sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9' :
resolution : {integrity : sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ ppc64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9' :
resolution : {integrity : sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ s390x]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@rolldown/binding-linux-x64-gnu@1.0.0-rc.9' :
resolution : {integrity : sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@rolldown/binding-linux-x64-musl@1.0.0-rc.9' :
resolution : {integrity : sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@rolldown/binding-openharmony-arm64@1.0.0-rc.9' :
resolution : {integrity : sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ arm64]
os : [ openharmony]
'@rolldown/binding-wasm32-wasi@1.0.0-rc.9' :
resolution : {integrity : sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==}
engines : {node : '>=14.0.0' }
cpu : [ wasm32]
'@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9' :
resolution : {integrity : sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ arm64]
os : [ win32]
'@rolldown/binding-win32-x64-msvc@1.0.0-rc.9' :
resolution : {integrity : sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==}
engines : {node : ^20.19.0 || >=22.12.0}
cpu : [ x64]
os : [ win32]
'@rolldown/pluginutils@1.0.0-rc.9' :
resolution : {integrity : sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==}
'@rtsao/scc@1.1.0' :
resolution : {integrity : sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
'@rushstack/eslint-patch@1.16.1' :
resolution : {integrity : sha512-TvZbIpeKqGQQ7X0zSCvPH9riMSFQFSggnfBjFZ1mEoILW+UuXCKwOoPcgjMwiUtRqFZ8jWhPJc4um14vC6I4ag==}
'@selderee/plugin-htmlparser2@0.11.0' :
resolution : {integrity : sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
'@socket.io/component-emitter@3.1.2' :
resolution : {integrity : sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==}
'@socket.io/redis-adapter@8.3.0' :
resolution : {integrity : sha512-ly0cra+48hDmChxmIpnESKrc94LjRL80TEmZVscuQ/WWkRP81nNj8W8cCGMqbI4L6NCuAaPRSzZF1a9GlAxxnA==}
engines : {node : '>=10.0.0' }
peerDependencies :
socket.io-adapter : ^2.5.4
'@standard-schema/spec@1.1.0' :
resolution : {integrity : sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
'@standard-schema/utils@0.3.0' :
resolution : {integrity : sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
'@swc/counter@0.1.3' :
resolution : {integrity : sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
'@swc/helpers@0.5.15' :
resolution : {integrity : sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tabby_ai/hijri-converter@1.0.5' :
resolution : {integrity : sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==}
engines : {node : '>=16.0.0' }
'@tanstack/query-core@5.90.20' :
resolution : {integrity : sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==}
'@tanstack/query-devtools@5.93.0' :
resolution : {integrity : sha512-+kpsx1NQnOFTZsw6HAFCW3HkKg0+2cepGtAWXjiiSOJJ1CtQpt72EE2nyZb+AjAbLRPoeRmPJ8MtQd8r8gsPdg==}
'@tanstack/react-query-devtools@5.91.3' :
resolution : {integrity : sha512-nlahjMtd/J1h7IzOOfqeyDh5LNfG0eULwlltPEonYy0QL+nqrBB+nyzJfULV+moL7sZyxc2sHdNJki+vLA9BSA==}
peerDependencies :
'@tanstack/react-query' : ^5.90.20
react : ^18 || ^19
'@tanstack/react-query@5.90.21' :
resolution : {integrity : sha512-0Lu6y5t+tvlTJMTO7oh5NSpJfpg/5D41LlThfepTixPYkJ0sE2Jj0m0f6yYqujBwIXlId87e234+MxG3D3g7kg==}
peerDependencies :
react : ^18 || ^19
'@tanstack/react-table@8.21.3' :
resolution : {integrity : sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==}
engines : {node : '>=12' }
peerDependencies :
react : '>=16.8'
react-dom : '>=16.8'
'@tanstack/table-core@8.21.3' :
resolution : {integrity : sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==}
engines : {node : '>=12' }
'@tybys/wasm-util@0.10.1' :
resolution : {integrity : sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@types/archiver@7.0.0' :
resolution : {integrity : sha512-/3vwGwx9n+mCQdYZ2IKGGHEFL30I96UgBlk8EtRDDFQ9uxM1l4O5Ci6r00EMAkiDaTqD9DQ6nVrWRICnBPtzzg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@types/chai@5.2.3' :
resolution : {integrity : sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
'@types/cors@2.8.19' :
resolution : {integrity : sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==}
'@types/d3-array@3.2.2' :
resolution : {integrity : sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
'@types/d3-color@3.1.3' :
resolution : {integrity : sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
'@types/d3-ease@3.0.2' :
resolution : {integrity : sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
'@types/d3-interpolate@3.0.4' :
resolution : {integrity : sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
'@types/d3-path@3.1.1' :
resolution : {integrity : sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==}
'@types/d3-scale@4.0.9' :
resolution : {integrity : sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==}
'@types/d3-shape@3.1.8' :
resolution : {integrity : sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==}
'@types/d3-time@3.0.4' :
resolution : {integrity : sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
'@types/d3-timer@3.0.2' :
resolution : {integrity : sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
'@types/deep-eql@4.0.2' :
resolution : {integrity : sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
'@types/estree@1.0.8' :
resolution : {integrity : sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
'@types/iso-3166-2@1.0.4' :
resolution : {integrity : sha512-tXaeT4FDobC8rAy6LoFvbGA4vhOQQNIdSRC5DAoYfT3D9ohnKHkDFxHzSln6WqTKVeKLrnMiMQubM8m3fqNp/w==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@types/js-cookie@3.0.6' :
resolution : {integrity : sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==}
'@types/json-schema@7.0.15' :
resolution : {integrity : sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/json5@0.0.29' :
resolution : {integrity : sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
'@types/mailparser@3.4.6' :
resolution : {integrity : sha512-wVV3cnIKzxTffaPH8iRnddX1zahbYB1ZEoAxyhoBo3TBCBuK6nZ8M8JYO/RhsCuuBVOw/DEN/t/ENbruwlxn6Q==}
'@types/node@22.19.15' :
resolution : {integrity : sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==}
'@types/nodemailer@6.4.23' :
resolution : {integrity : sha512-aFV3/NsYFLSx9mbb5gtirBSXJnAlrusoKNuPbxsASWc7vrKLmIrTQRpdcxNcSFL3VW2A2XpeLEavwb2qMi6nlQ==}
'@types/react-dom@19.2.3' :
resolution : {integrity : sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
peerDependencies :
'@types/react' : ^19.2.0
'@types/react@19.2.14' :
resolution : {integrity : sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@types/readdir-glob@1.1.5' :
resolution : {integrity : sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@types/use-sync-external-store@0.0.6' :
resolution : {integrity : sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==}
'@types/webidl-conversions@7.0.3' :
resolution : {integrity : sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==}
'@types/whatwg-url@13.0.0' :
resolution : {integrity : sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==}
'@types/ws@8.18.1' :
resolution : {integrity : sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==}
'@typescript-eslint/eslint-plugin@8.57.0' :
resolution : {integrity : sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies :
'@typescript-eslint/parser' : ^8.57.0
eslint : ^8.57.0 || ^9.0.0 || ^10.0.0
typescript : '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.57.0' :
resolution : {integrity : sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies :
eslint : ^8.57.0 || ^9.0.0 || ^10.0.0
typescript : '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.57.0' :
resolution : {integrity : sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies :
typescript : '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.57.0' :
resolution : {integrity : sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.57.0' :
resolution : {integrity : sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies :
typescript : '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.57.0' :
resolution : {integrity : sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies :
eslint : ^8.57.0 || ^9.0.0 || ^10.0.0
typescript : '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.57.0' :
resolution : {integrity : sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.57.0' :
resolution : {integrity : sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies :
typescript : '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.57.0' :
resolution : {integrity : sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies :
eslint : ^8.57.0 || ^9.0.0 || ^10.0.0
typescript : '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.57.0' :
resolution : {integrity : sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unrs/resolver-binding-android-arm-eabi@1.11.1' :
resolution : {integrity : sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
cpu : [ arm]
os : [ android]
'@unrs/resolver-binding-android-arm64@1.11.1' :
resolution : {integrity : sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
cpu : [ arm64]
os : [ android]
'@unrs/resolver-binding-darwin-arm64@1.11.1' :
resolution : {integrity : sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
cpu : [ arm64]
os : [ darwin]
'@unrs/resolver-binding-darwin-x64@1.11.1' :
resolution : {integrity : sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
cpu : [ x64]
os : [ darwin]
'@unrs/resolver-binding-freebsd-x64@1.11.1' :
resolution : {integrity : sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
cpu : [ x64]
os : [ freebsd]
'@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1' :
resolution : {integrity : sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
cpu : [ arm]
os : [ linux]
'@unrs/resolver-binding-linux-arm-musleabihf@1.11.1' :
resolution : {integrity : sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
cpu : [ arm]
os : [ linux]
'@unrs/resolver-binding-linux-arm64-gnu@1.11.1' :
resolution : {integrity : sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-linux-arm64-musl@1.11.1' :
resolution : {integrity : sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-linux-ppc64-gnu@1.11.1' :
resolution : {integrity : sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
cpu : [ ppc64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-linux-riscv64-gnu@1.11.1' :
resolution : {integrity : sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
cpu : [ riscv64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-linux-riscv64-musl@1.11.1' :
resolution : {integrity : sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
cpu : [ riscv64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-linux-s390x-gnu@1.11.1' :
resolution : {integrity : sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
cpu : [ s390x]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-linux-x64-gnu@1.11.1' :
resolution : {integrity : sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-linux-x64-musl@1.11.1' :
resolution : {integrity : sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@unrs/resolver-binding-wasm32-wasi@1.11.1' :
resolution : {integrity : sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
engines : {node : '>=14.0.0' }
cpu : [ wasm32]
'@unrs/resolver-binding-win32-arm64-msvc@1.11.1' :
resolution : {integrity : sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
cpu : [ arm64]
os : [ win32]
'@unrs/resolver-binding-win32-ia32-msvc@1.11.1' :
resolution : {integrity : sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
cpu : [ ia32]
os : [ win32]
'@unrs/resolver-binding-win32-x64-msvc@1.11.1' :
resolution : {integrity : sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
cpu : [ x64]
os : [ win32]
'@vitest/coverage-v8@4.1.0' :
resolution : {integrity : sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==}
peerDependencies :
'@vitest/browser' : 4.1 .0
vitest : 4.1 .0
peerDependenciesMeta :
'@vitest/browser' :
optional : true
'@vitest/expect@4.1.0' :
resolution : {integrity : sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==}
'@vitest/mocker@4.1.0' :
resolution : {integrity : sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==}
peerDependencies :
msw : ^2.4.9
vite : ^6.0.0 || ^7.0.0 || ^8.0.0-0
peerDependenciesMeta :
msw :
optional : true
vite :
optional : true
'@vitest/pretty-format@4.1.0' :
resolution : {integrity : sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==}
'@vitest/runner@4.1.0' :
resolution : {integrity : sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==}
'@vitest/snapshot@4.1.0' :
resolution : {integrity : sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==}
'@vitest/spy@4.1.0' :
resolution : {integrity : sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==}
'@vitest/utils@4.1.0' :
resolution : {integrity : sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==}
'@zone-eu/mailsplit@5.4.8' :
resolution : {integrity : sha512-eEyACj4JZ7sjzRvy26QhLgKEMWwQbsw1+QZnlLX+/gihcNH07lVPOcnwf5U6UAL7gkc//J3jVd76o/WS+taUiA==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
abort-controller@3.0.0 :
resolution : {integrity : sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines : {node : '>=6.5' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
accepts@1.3.8 :
resolution : {integrity : sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines : {node : '>= 0.6' }
acorn-jsx@5.3.2 :
resolution : {integrity : sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies :
acorn : ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.16.0 :
resolution : {integrity : sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
engines : {node : '>=0.4.0' }
hasBin : true
add-dom-event-listener@1.1.0 :
resolution : {integrity : sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==}
ahooks@3.9.6 :
resolution : {integrity : sha512-Mr7f05swd5SmKlR9SZo5U6M0LsL4ErweLzpdgXjA1JPmnZ78Vr6wzx0jUtvoxrcqGKYnX0Yjc02iEASVxHFPjQ==}
peerDependencies :
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
air-datepicker@3.6.0 :
resolution : {integrity : sha512-+txUkqa949rXBJDmkQAIb/GehZECJYF4rm9XJxVYtEX22C9WvBpE/XwCUQZBopKIkpg4ycAySJ9lH3JOg9qQTw==}
ajv@6.14.0 :
resolution : {integrity : sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
ansi-escapes@7.3.0 :
resolution : {integrity : sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==}
engines : {node : '>=18' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
ansi-regex@5.0.1 :
resolution : {integrity : sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines : {node : '>=8' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
ansi-regex@6.2.2 :
resolution : {integrity : sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
engines : {node : '>=12' }
ansi-styles@4.3.0 :
resolution : {integrity : sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines : {node : '>=8' }
ansi-styles@6.2.3 :
resolution : {integrity : sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines : {node : '>=12' }
antd@5.29.3 :
resolution : {integrity : sha512-3DdbGCa9tWAJGcCJ6rzR8EJFsv2CtyEbkVabZE14pfgUHfCicWCj0/QzQVLDYg8CPfQk9BH7fHCoTXHTy7MP/A==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
any-promise@1.3.0 :
resolution : {integrity : sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
anymatch@3.1.3 :
resolution : {integrity : sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines : {node : '>= 8' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
archiver-utils@5.0.2 :
resolution : {integrity : sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
engines : {node : '>= 14' }
archiver@7.0.1 :
resolution : {integrity : sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
engines : {node : '>= 14' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
arg@5.0.2 :
resolution : {integrity : sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
argparse@2.0.1 :
resolution : {integrity : sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
aria-hidden@1.2.6 :
resolution : {integrity : sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
engines : {node : '>=10' }
aria-query@5.3.2 :
resolution : {integrity : sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
engines : {node : '>= 0.4' }
array-buffer-byte-length@1.0.2 :
resolution : {integrity : sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
engines : {node : '>= 0.4' }
array-includes@3.1.9 :
resolution : {integrity : sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
engines : {node : '>= 0.4' }
array.prototype.findlast@1.2.5 :
resolution : {integrity : sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==}
engines : {node : '>= 0.4' }
array.prototype.findlastindex@1.2.6 :
resolution : {integrity : sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==}
engines : {node : '>= 0.4' }
array.prototype.flat@1.3.3 :
resolution : {integrity : sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
engines : {node : '>= 0.4' }
array.prototype.flatmap@1.3.3 :
resolution : {integrity : sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
engines : {node : '>= 0.4' }
array.prototype.tosorted@1.1.4 :
resolution : {integrity : sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==}
engines : {node : '>= 0.4' }
arraybuffer.prototype.slice@1.0.4 :
resolution : {integrity : sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines : {node : '>= 0.4' }
assertion-error@2.0.1 :
resolution : {integrity : sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines : {node : '>=12' }
ast-types-flow@0.0.8 :
resolution : {integrity : sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
ast-v8-to-istanbul@1.0.0 :
resolution : {integrity : sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==}
async-function@1.0.0 :
resolution : {integrity : sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines : {node : '>= 0.4' }
async-validator@3.5.2 :
resolution : {integrity : sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==}
async@3.2.6 :
resolution : {integrity : sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
atomic-sleep@1.0.0 :
resolution : {integrity : sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines : {node : '>=8.0.0' }
autoprefixer@10.4.27 :
resolution : {integrity : sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==}
engines : {node : ^10 || ^12 || >=14}
hasBin : true
peerDependencies :
postcss : ^8.1.0
available-typed-arrays@1.0.7 :
resolution : {integrity : sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines : {node : '>= 0.4' }
axe-core@4.11.1 :
resolution : {integrity : sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==}
engines : {node : '>=4' }
axobject-query@4.1.0 :
resolution : {integrity : sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
b4a@1.8.0 :
resolution : {integrity : sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
peerDependencies :
react-native-b4a : '*'
peerDependenciesMeta :
react-native-b4a :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
babel-runtime@6.26.0 :
resolution : {integrity : sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==}
balanced-match@1.0.2 :
resolution : {integrity : sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
balanced-match@4.0.4 :
resolution : {integrity : sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
engines : {node : 18 || 20 || >=22}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
bare-events@2.8.2 :
resolution : {integrity : sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
peerDependencies :
bare-abort-controller : '*'
peerDependenciesMeta :
bare-abort-controller :
optional : true
bare-fs@4.7.1 :
resolution : {integrity : sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==}
engines : {bare : '>=1.16.0' }
peerDependencies :
bare-buffer : '*'
peerDependenciesMeta :
bare-buffer :
optional : true
bare-os@3.9.0 :
resolution : {integrity : sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q==}
engines : {bare : '>=1.14.0' }
bare-path@3.0.0 :
resolution : {integrity : sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
bare-stream@2.13.1 :
resolution : {integrity : sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==}
peerDependencies :
bare-abort-controller : '*'
bare-buffer : '*'
bare-events : '*'
peerDependenciesMeta :
bare-abort-controller :
optional : true
bare-buffer :
optional : true
bare-events :
optional : true
bare-url@2.4.2 :
resolution : {integrity : sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
base64-js@1.5.1 :
resolution : {integrity : sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
base64id@2.0.0 :
resolution : {integrity : sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
engines : {node : ^4.5.0 || >= 5.9}
baseline-browser-mapping@2.10.8 :
resolution : {integrity : sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==}
engines : {node : '>=6.0.0' }
hasBin : true
better-auth@1.5.5 :
resolution : {integrity : sha512-GpVPaV1eqr3mOovKfghJXXk6QvlcVeFbS3z+n+FPDid5rK/2PchnDtiaVCzWyXA9jH2KkirOfl+JhAUvnja0Eg==}
peerDependencies :
'@lynx-js/react' : '*'
'@prisma/client' : ^5.0.0 || ^6.0.0 || ^7.0.0
'@sveltejs/kit' : ^2.0.0
'@tanstack/react-start' : ^1.0.0
'@tanstack/solid-start' : ^1.0.0
better-sqlite3 : ^12.0.0
drizzle-kit : '>=0.31.4'
drizzle-orm : '>=0.41.0'
mongodb : ^6.0.0 || ^7.0.0
mysql2 : ^3.0.0
next : ^14.0.0 || ^15.0.0 || ^16.0.0
pg : ^8.0.0
prisma : ^5.0.0 || ^6.0.0 || ^7.0.0
react : ^18.0.0 || ^19.0.0
react-dom : ^18.0.0 || ^19.0.0
solid-js : ^1.0.0
svelte : ^4.0.0 || ^5.0.0
vitest : ^2.0.0 || ^3.0.0 || ^4.0.0
vue : ^3.0.0
peerDependenciesMeta :
'@lynx-js/react' :
optional : true
'@prisma/client' :
optional : true
'@sveltejs/kit' :
optional : true
'@tanstack/react-start' :
optional : true
'@tanstack/solid-start' :
optional : true
better-sqlite3 :
optional : true
drizzle-kit :
optional : true
drizzle-orm :
optional : true
mongodb :
optional : true
mysql2 :
optional : true
next :
optional : true
pg :
optional : true
prisma :
optional : true
react :
optional : true
react-dom :
optional : true
solid-js :
optional : true
svelte :
optional : true
vitest :
optional : true
vue :
optional : true
better-call@1.3.2 :
resolution : {integrity : sha512-4cZIfrerDsNTn3cm+MhLbUePN0gdwkhSXEuG7r/zuQ8c/H7iU0/jSK5TD3FW7U0MgKHce/8jGpPYNO4Ve+4NBw==}
peerDependencies :
zod : ^4.0.0
peerDependenciesMeta :
zod :
optional : true
binary-extensions@2.3.0 :
resolution : {integrity : sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines : {node : '>=8' }
block-stream2@2.1.0 :
resolution : {integrity : sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==}
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
bmp-js@0.1.0 :
resolution : {integrity : sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
brace-expansion@1.1.12 :
resolution : {integrity : sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
brace-expansion@2.1.0 :
resolution : {integrity : sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
brace-expansion@5.0.4 :
resolution : {integrity : sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==}
engines : {node : 18 || 20 || >=22}
braces@3.0.3 :
resolution : {integrity : sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines : {node : '>=8' }
brotli@1.3.3 :
resolution : {integrity : sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==}
browser-or-node@2.1.1 :
resolution : {integrity : sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==}
browserslist@4.28.1 :
resolution : {integrity : sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines : {node : ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin : true
bson@7.2.0 :
resolution : {integrity : sha512-YCEo7KjMlbNlyHhz7zAZNDpIpQbd+wOEHJYezv0nMYTn4x31eIUM2yomNNubclAt63dObUzKHWsBLJ9QcZNSnQ==}
engines : {node : '>=20.19.0' }
buffer-crc32@1.0.0 :
resolution : {integrity : sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
engines : {node : '>=8.0.0' }
buffer-from@1.1.2 :
resolution : {integrity : sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
buffer@6.0.3 :
resolution : {integrity : sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
bullmq@5.71.0 :
resolution : {integrity : sha512-aeNWh4drsafSKnAJeiNH/nZP/5O8ZdtdMbnOPZmpjXj7NZUP5YC901U3bIH41iZValm7d1i3c34ojv7q31m30w==}
busboy@1.6.0 :
resolution : {integrity : sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines : {node : '>=10.16.0' }
bwip-js@4.8.0 :
resolution : {integrity : sha512-gUDkDHSTv8/DJhomSIbO0fX/Dx0MO/sgllLxJyJfu4WixCQe9nfGJzmHm64ZCbxo+gUYQEsQcRmqcwcwPRwUkg==}
hasBin : true
call-bind-apply-helpers@1.0.2 :
resolution : {integrity : sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines : {node : '>= 0.4' }
call-bind@1.0.8 :
resolution : {integrity : sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
engines : {node : '>= 0.4' }
call-bound@1.0.4 :
resolution : {integrity : sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
engines : {node : '>= 0.4' }
callsites@3.1.0 :
resolution : {integrity : sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines : {node : '>=6' }
camelcase-css@2.0.1 :
resolution : {integrity : sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines : {node : '>= 6' }
caniuse-lite@1.0.30001778 :
resolution : {integrity : sha512-PN7uxFL+ExFJO61aVmP1aIEG4i9whQd4eoSCebav62UwDyp5OHh06zN4jqKSMePVgxHifCw1QJxdRkA1Pisekg==}
chai@6.2.2 :
resolution : {integrity : sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
engines : {node : '>=18' }
chalk@4.1.2 :
resolution : {integrity : sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines : {node : '>=10' }
chalk@5.6.2 :
resolution : {integrity : sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines : {node : ^12.17.0 || ^14.13 || >=16.0.0}
chokidar@3.6.0 :
resolution : {integrity : sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines : {node : '>= 8.10.0' }
class-variance-authority@0.7.1 :
resolution : {integrity : sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
classnames@2.5.1 :
resolution : {integrity : sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==}
cli-cursor@5.0.0 :
resolution : {integrity : sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines : {node : '>=18' }
cli-truncate@4.0.0 :
resolution : {integrity : sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
engines : {node : '>=18' }
client-only@0.0.1 :
resolution : {integrity : sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
clone@2.1.2 :
resolution : {integrity : sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
engines : {node : '>=0.8' }
clsx@2.1.1 :
resolution : {integrity : sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines : {node : '>=6' }
cluster-key-slot@1.1.2 :
resolution : {integrity : sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
engines : {node : '>=0.10.0' }
cmdk@1.1.1 :
resolution : {integrity : sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==}
peerDependencies :
react : ^18 || ^19 || ^19.0.0-rc
react-dom : ^18 || ^19 || ^19.0.0-rc
color-convert@1.9.3 :
resolution : {integrity : sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
color-convert@2.0.1 :
resolution : {integrity : sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines : {node : '>=7.0.0' }
color-name@1.1.3 :
resolution : {integrity : sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
color-name@1.1.4 :
resolution : {integrity : sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
color-string@1.9.1 :
resolution : {integrity : sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
color@3.2.1 :
resolution : {integrity : sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==}
color@4.2.3 :
resolution : {integrity : sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
engines : {node : '>=12.5.0' }
colorette@2.0.20 :
resolution : {integrity : sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
commander@13.1.0 :
resolution : {integrity : sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
engines : {node : '>=18' }
commander@4.1.1 :
resolution : {integrity : sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines : {node : '>= 6' }
component-classes@1.2.6 :
resolution : {integrity : sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==}
component-indexof@0.0.3 :
resolution : {integrity : sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
compress-commons@6.0.2 :
resolution : {integrity : sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
engines : {node : '>= 14' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
compute-scroll-into-view@3.1.1 :
resolution : {integrity : sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==}
concat-map@0.0.1 :
resolution : {integrity : sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
convert-source-map@2.0.0 :
resolution : {integrity : sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
cookie@0.7.2 :
resolution : {integrity : sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines : {node : '>= 0.6' }
copy-to-clipboard@3.3.3 :
resolution : {integrity : sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
core-js@2.6.12 :
resolution : {integrity : sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
deprecated : core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
core-util-is@1.0.3 :
resolution : {integrity : sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
cors@2.8.6 :
resolution : {integrity : sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==}
engines : {node : '>= 0.10' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
crc-32@1.2.2 :
resolution : {integrity : sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
engines : {node : '>=0.8' }
hasBin : true
crc32-stream@6.0.0 :
resolution : {integrity : sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
engines : {node : '>= 14' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
create-react-class@15.7.0 :
resolution : {integrity : sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==}
cron-parser@4.9.0 :
resolution : {integrity : sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==}
engines : {node : '>=12.0.0' }
cross-spawn@7.0.6 :
resolution : {integrity : sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines : {node : '>= 8' }
css-animation@1.6.1 :
resolution : {integrity : sha512-/48+/BaEaHRY6kNQ2OIPzKf9A6g8WjZYjhiNDNuIVbsm5tXCGIAsHDjB4Xu1C4vXJtUWZo26O68OQkDpNBaPog==}
cssesc@3.0.0 :
resolution : {integrity : sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines : {node : '>=4' }
hasBin : true
csstype@3.2.3 :
resolution : {integrity : sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
d3-array@3.2.4 :
resolution : {integrity : sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
engines : {node : '>=12' }
d3-color@3.1.0 :
resolution : {integrity : sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
engines : {node : '>=12' }
d3-ease@3.0.1 :
resolution : {integrity : sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
engines : {node : '>=12' }
d3-format@3.1.2 :
resolution : {integrity : sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==}
engines : {node : '>=12' }
d3-interpolate@3.0.1 :
resolution : {integrity : sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
engines : {node : '>=12' }
d3-path@3.1.0 :
resolution : {integrity : sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
engines : {node : '>=12' }
d3-scale@4.0.2 :
resolution : {integrity : sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
engines : {node : '>=12' }
d3-shape@3.2.0 :
resolution : {integrity : sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
engines : {node : '>=12' }
d3-time-format@4.1.0 :
resolution : {integrity : sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
engines : {node : '>=12' }
d3-time@3.1.0 :
resolution : {integrity : sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
engines : {node : '>=12' }
d3-timer@3.0.1 :
resolution : {integrity : sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
engines : {node : '>=12' }
damerau-levenshtein@1.0.8 :
resolution : {integrity : sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
data-view-buffer@1.0.2 :
resolution : {integrity : sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
engines : {node : '>= 0.4' }
data-view-byte-length@1.0.2 :
resolution : {integrity : sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
engines : {node : '>= 0.4' }
data-view-byte-offset@1.0.1 :
resolution : {integrity : sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
engines : {node : '>= 0.4' }
date-fns-jalali@4.1.0-0 :
resolution : {integrity : sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==}
date-fns@4.1.0 :
resolution : {integrity : sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==}
dateformat@4.6.3 :
resolution : {integrity : sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
dayjs@1.11.20 :
resolution : {integrity : sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==}
debug@3.2.7 :
resolution : {integrity : sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies :
supports-color : '*'
peerDependenciesMeta :
supports-color :
optional : true
debug@4.3.7 :
resolution : {integrity : sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
engines : {node : '>=6.0' }
peerDependencies :
supports-color : '*'
peerDependenciesMeta :
supports-color :
optional : true
debug@4.4.3 :
resolution : {integrity : sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines : {node : '>=6.0' }
peerDependencies :
supports-color : '*'
peerDependenciesMeta :
supports-color :
optional : true
decimal.js-light@2.5.1 :
resolution : {integrity : sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==}
decode-uri-component@0.2.2 :
resolution : {integrity : sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
engines : {node : '>=0.10' }
deep-is@0.1.4 :
resolution : {integrity : sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
deepmerge@4.3.1 :
resolution : {integrity : sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines : {node : '>=0.10.0' }
define-data-property@1.1.4 :
resolution : {integrity : sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines : {node : '>= 0.4' }
define-properties@1.2.1 :
resolution : {integrity : sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines : {node : '>= 0.4' }
defu@6.1.4 :
resolution : {integrity : sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
denque@2.1.0 :
resolution : {integrity : sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
engines : {node : '>=0.10' }
detect-libc@2.1.2 :
resolution : {integrity : sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines : {node : '>=8' }
detect-node-es@1.1.0 :
resolution : {integrity : sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
dfa@1.2.0 :
resolution : {integrity : sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==}
didyoumean@1.2.2 :
resolution : {integrity : sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dlv@1.1.3 :
resolution : {integrity : sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
doctrine@2.1.0 :
resolution : {integrity : sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines : {node : '>=0.10.0' }
dom-align@1.12.4 :
resolution : {integrity : sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==}
dom-serializer@2.0.0 :
resolution : {integrity : sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
domelementtype@2.3.0 :
resolution : {integrity : sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
domhandler@5.0.3 :
resolution : {integrity : sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines : {node : '>= 4' }
domutils@3.2.2 :
resolution : {integrity : sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
dotenv@17.3.1 :
resolution : {integrity : sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==}
engines : {node : '>=12' }
drizzle-kit@0.30.6 :
resolution : {integrity : sha512-U4wWit0fyZuGuP7iNmRleQyK2V8wCuv57vf5l3MnG4z4fzNTjY/U13M8owyQ5RavqvqxBifWORaR3wIUzlN64g==}
hasBin : true
drizzle-orm@0.38.4 :
resolution : {integrity : sha512-s7/5BpLKO+WJRHspvpqTydxFob8i1vo2rEx4pY6TGY7QSMuUfWUuzaY0DIpXCkgHOo37BaFC+SJQb99dDUXT3Q==}
peerDependencies :
'@aws-sdk/client-rds-data' : '>=3'
'@cloudflare/workers-types' : '>=4'
'@electric-sql/pglite' : '>=0.2.0'
'@libsql/client' : '>=0.10.0'
'@libsql/client-wasm' : '>=0.10.0'
'@neondatabase/serverless' : '>=0.10.0'
'@op-engineering/op-sqlite' : '>=2'
'@opentelemetry/api' : ^1.4.1
'@planetscale/database' : '>=1'
'@prisma/client' : '*'
'@tidbcloud/serverless' : '*'
'@types/better-sqlite3' : '*'
'@types/pg' : '*'
'@types/react' : '>=18'
'@types/sql.js' : '*'
'@vercel/postgres' : '>=0.8.0'
'@xata.io/client' : '*'
better-sqlite3 : '>=7'
bun-types : '*'
expo-sqlite : '>=14.0.0'
knex : '*'
kysely : '*'
mysql2 : '>=2'
pg : '>=8'
postgres : '>=3'
prisma : '*'
react : '>=18'
sql.js : '>=1'
sqlite3 : '>=5'
peerDependenciesMeta :
'@aws-sdk/client-rds-data' :
optional : true
'@cloudflare/workers-types' :
optional : true
'@electric-sql/pglite' :
optional : true
'@libsql/client' :
optional : true
'@libsql/client-wasm' :
optional : true
'@neondatabase/serverless' :
optional : true
'@op-engineering/op-sqlite' :
optional : true
'@opentelemetry/api' :
optional : true
'@planetscale/database' :
optional : true
'@prisma/client' :
optional : true
'@tidbcloud/serverless' :
optional : true
'@types/better-sqlite3' :
optional : true
'@types/pg' :
optional : true
'@types/react' :
optional : true
'@types/sql.js' :
optional : true
'@vercel/postgres' :
optional : true
'@xata.io/client' :
optional : true
better-sqlite3 :
optional : true
bun-types :
optional : true
expo-sqlite :
optional : true
knex :
optional : true
kysely :
optional : true
mysql2 :
optional : true
pg :
optional : true
postgres :
optional : true
prisma :
optional : true
react :
optional : true
sql.js :
optional : true
sqlite3 :
optional : true
dunder-proto@1.0.1 :
resolution : {integrity : sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
eastasianwidth@0.2.0 :
resolution : {integrity : sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
electron-to-chromium@1.5.313 :
resolution : {integrity : sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==}
emoji-regex@10.6.0 :
resolution : {integrity : sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
emoji-regex@8.0.0 :
resolution : {integrity : sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
emoji-regex@9.2.2 :
resolution : {integrity : sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
encoding-japanese@2.2.0 :
resolution : {integrity : sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==}
engines : {node : '>=8.10.0' }
end-of-stream@1.4.5 :
resolution : {integrity : sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
engine.io-client@6.6.4 :
resolution : {integrity : sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==}
engine.io-parser@5.2.3 :
resolution : {integrity : sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==}
engines : {node : '>=10.0.0' }
engine.io@6.6.6 :
resolution : {integrity : sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA==}
engines : {node : '>=10.2.0' }
entities@4.5.0 :
resolution : {integrity : sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines : {node : '>=0.12' }
env-paths@3.0.0 :
resolution : {integrity : sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==}
engines : {node : ^12.20.0 || ^14.13.1 || >=16.0.0}
environment@1.1.0 :
resolution : {integrity : sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
engines : {node : '>=18' }
es-abstract@1.24.1 :
resolution : {integrity : sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==}
engines : {node : '>= 0.4' }
es-define-property@1.0.1 :
resolution : {integrity : sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines : {node : '>= 0.4' }
es-errors@1.3.0 :
resolution : {integrity : sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines : {node : '>= 0.4' }
es-iterator-helpers@1.3.1 :
resolution : {integrity : sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ==}
engines : {node : '>= 0.4' }
es-module-lexer@2.0.0 :
resolution : {integrity : sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
es-object-atoms@1.1.1 :
resolution : {integrity : sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines : {node : '>= 0.4' }
es-set-tostringtag@2.1.0 :
resolution : {integrity : sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines : {node : '>= 0.4' }
es-shim-unscopables@1.1.0 :
resolution : {integrity : sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
engines : {node : '>= 0.4' }
es-to-primitive@1.3.0 :
resolution : {integrity : sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines : {node : '>= 0.4' }
es-toolkit@1.45.1 :
resolution : {integrity : sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw==}
esbuild-register@3.6.0 :
resolution : {integrity : sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==}
peerDependencies :
esbuild : '>=0.12 <1'
esbuild@0.18.20 :
resolution : {integrity : sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
engines : {node : '>=12' }
hasBin : true
esbuild@0.19.12 :
resolution : {integrity : sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
engines : {node : '>=12' }
hasBin : true
2026-04-08 15:31:33 -04:00
esbuild@0.25.12 :
resolution : {integrity : sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
engines : {node : '>=18' }
hasBin : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
esbuild@0.27.4 :
resolution : {integrity : sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==}
engines : {node : '>=18' }
hasBin : true
escalade@3.2.0 :
resolution : {integrity : sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines : {node : '>=6' }
escape-string-regexp@4.0.0 :
resolution : {integrity : sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines : {node : '>=10' }
eslint-config-next@15.1.0 :
resolution : {integrity : sha512-gADO+nKVseGso3DtOrYX9H7TxB/MuX7AUYhMlvQMqLYvUWu4HrOQuU7cC1HW74tHIqkAvXdwgAz3TCbczzSEXw==}
peerDependencies :
eslint : ^7.23.0 || ^8.0.0 || ^9.0.0
typescript : '>=3.3.1'
peerDependenciesMeta :
typescript :
optional : true
eslint-config-prettier@9.1.2 :
resolution : {integrity : sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==}
hasBin : true
peerDependencies :
eslint : '>=7.0.0'
eslint-import-resolver-node@0.3.9 :
resolution : {integrity : sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
eslint-import-resolver-typescript@3.10.1 :
resolution : {integrity : sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==}
engines : {node : ^14.18.0 || >=16.0.0}
peerDependencies :
eslint : '*'
eslint-plugin-import : '*'
eslint-plugin-import-x : '*'
peerDependenciesMeta :
eslint-plugin-import :
optional : true
eslint-plugin-import-x :
optional : true
eslint-module-utils@2.12.1 :
resolution : {integrity : sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==}
engines : {node : '>=4' }
peerDependencies :
'@typescript-eslint/parser' : '*'
eslint : '*'
eslint-import-resolver-node : '*'
eslint-import-resolver-typescript : '*'
eslint-import-resolver-webpack : '*'
peerDependenciesMeta :
'@typescript-eslint/parser' :
optional : true
eslint :
optional : true
eslint-import-resolver-node :
optional : true
eslint-import-resolver-typescript :
optional : true
eslint-import-resolver-webpack :
optional : true
eslint-plugin-import@2.32.0 :
resolution : {integrity : sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==}
engines : {node : '>=4' }
peerDependencies :
'@typescript-eslint/parser' : '*'
eslint : ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
peerDependenciesMeta :
'@typescript-eslint/parser' :
optional : true
eslint-plugin-jsx-a11y@6.10.2 :
resolution : {integrity : sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
engines : {node : '>=4.0' }
peerDependencies :
eslint : ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
eslint-plugin-react-hooks@5.2.0 :
resolution : {integrity : sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==}
engines : {node : '>=10' }
peerDependencies :
eslint : ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
eslint-plugin-react@7.37.5 :
resolution : {integrity : sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
engines : {node : '>=4' }
peerDependencies :
eslint : ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
eslint-scope@8.4.0 :
resolution : {integrity : sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3 :
resolution : {integrity : sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines : {node : ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.2.1 :
resolution : {integrity : sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@5.0.1 :
resolution : {integrity : sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
engines : {node : ^20.19.0 || ^22.13.0 || >=24}
eslint@9.39.4 :
resolution : {integrity : sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin : true
peerDependencies :
jiti : '*'
peerDependenciesMeta :
jiti :
optional : true
espree@10.4.0 :
resolution : {integrity : sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines : {node : ^18.18.0 || ^20.9.0 || >=21.1.0}
esquery@1.7.0 :
resolution : {integrity : sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
engines : {node : '>=0.10' }
esrecurse@4.3.0 :
resolution : {integrity : sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines : {node : '>=4.0' }
estraverse@5.3.0 :
resolution : {integrity : sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines : {node : '>=4.0' }
estree-walker@3.0.3 :
resolution : {integrity : sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
esutils@2.0.3 :
resolution : {integrity : sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines : {node : '>=0.10.0' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
event-target-shim@5.0.1 :
resolution : {integrity : sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
engines : {node : '>=6' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
eventemitter3@5.0.4 :
resolution : {integrity : sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
events-universal@1.0.1 :
resolution : {integrity : sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
events@3.3.0 :
resolution : {integrity : sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines : {node : '>=0.8.x' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
execa@8.0.1 :
resolution : {integrity : sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines : {node : '>=16.17' }
expect-type@1.3.0 :
resolution : {integrity : sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines : {node : '>=12.0.0' }
fast-copy@4.0.2 :
resolution : {integrity : sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==}
fast-deep-equal@3.1.3 :
resolution : {integrity : sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
fast-fifo@1.3.2 :
resolution : {integrity : sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
fast-glob@3.3.1 :
resolution : {integrity : sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
engines : {node : '>=8.6.0' }
fast-glob@3.3.3 :
resolution : {integrity : sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines : {node : '>=8.6.0' }
fast-json-stable-stringify@2.1.0 :
resolution : {integrity : sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-levenshtein@2.0.6 :
resolution : {integrity : sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
fast-safe-stringify@2.1.1 :
resolution : {integrity : sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
fast-xml-builder@1.1.3 :
resolution : {integrity : sha512-1o60KoFw2+LWKQu3IdcfcFlGTW4dpqEWmjhYec6H82AYZU2TVBXep6tMl8Z1Y+wM+ZrzCwe3BZ9Vyd9N2rIvmg==}
fast-xml-parser@5.5.4 :
resolution : {integrity : sha512-Af+qOX93cedUddGag8E54wEuVojVgPE/LS9rpRoJNcnRxImttjCoGnBzpphOym8Vu+xSbXNTtBzx7FOodYFyzQ==}
hasBin : true
fastq@1.20.1 :
resolution : {integrity : sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
fdir@6.5.0 :
resolution : {integrity : sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines : {node : '>=12.0.0' }
peerDependencies :
picomatch : ^3 || ^4
peerDependenciesMeta :
picomatch :
optional : true
file-entry-cache@8.0.0 :
resolution : {integrity : sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines : {node : '>=16.0.0' }
fill-range@7.1.1 :
resolution : {integrity : sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines : {node : '>=8' }
filter-obj@1.1.0 :
resolution : {integrity : sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==}
engines : {node : '>=0.10.0' }
find-up@5.0.0 :
resolution : {integrity : sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines : {node : '>=10' }
flat-cache@4.0.1 :
resolution : {integrity : sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines : {node : '>=16' }
flatted@3.4.1 :
resolution : {integrity : sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==}
fontkit@2.0.4 :
resolution : {integrity : sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==}
for-each@0.3.5 :
resolution : {integrity : sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
foreground-child@3.3.1 :
resolution : {integrity : sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
engines : {node : '>=14' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
form-render@2.5.6 :
resolution : {integrity : sha512-WykpGnVzccZ5MImHiQ/24otmOSKBu/pDwx33gPD2FYbWzIY0fo/0VH2hWQjNQV4T/4RtuIi+KPNHtDRx2ZHgrg==}
peerDependencies :
antd : 4. x || 5.x
react : '>=16.9.0'
react-dom : '>=16.9.0'
fraction.js@5.3.4 :
resolution : {integrity : sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
fsevents@2.3.2 :
resolution : {integrity : sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines : {node : ^8.16.0 || ^10.6.0 || >=11.0.0}
os : [ darwin]
fsevents@2.3.3 :
resolution : {integrity : sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines : {node : ^8.16.0 || ^10.6.0 || >=11.0.0}
os : [ darwin]
function-bind@1.1.2 :
resolution : {integrity : sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
function.prototype.name@1.1.8 :
resolution : {integrity : sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
engines : {node : '>= 0.4' }
functions-have-names@1.2.3 :
resolution : {integrity : sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
gel@2.2.0 :
resolution : {integrity : sha512-q0ma7z2swmoamHQusey8ayo8+ilVdzDt4WTxSPzq/yRqvucWRfymRVMvNgmSC0XK7eNjjEZEcplxpgaNojKdmQ==}
engines : {node : '>= 18.0.0' }
hasBin : true
generator-function@2.0.1 :
resolution : {integrity : sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
engines : {node : '>= 0.4' }
get-east-asian-width@1.5.0 :
resolution : {integrity : sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==}
engines : {node : '>=18' }
get-intrinsic@1.3.0 :
resolution : {integrity : sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines : {node : '>= 0.4' }
get-nonce@1.0.1 :
resolution : {integrity : sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines : {node : '>=6' }
get-proto@1.0.1 :
resolution : {integrity : sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines : {node : '>= 0.4' }
get-stream@8.0.1 :
resolution : {integrity : sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines : {node : '>=16' }
get-symbol-description@1.1.0 :
resolution : {integrity : sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines : {node : '>= 0.4' }
get-tsconfig@4.13.6 :
resolution : {integrity : sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==}
glob-parent@5.1.2 :
resolution : {integrity : sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines : {node : '>= 6' }
glob-parent@6.0.2 :
resolution : {integrity : sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines : {node : '>=10.13.0' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
glob@10.5.0 :
resolution : {integrity : sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
deprecated : Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
hasBin : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
globals@14.0.0 :
resolution : {integrity : sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines : {node : '>=18' }
globalthis@1.0.4 :
resolution : {integrity : sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines : {node : '>= 0.4' }
gopd@1.2.0 :
resolution : {integrity : sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
graceful-fs@4.2.11 :
resolution : {integrity : sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
has-bigints@1.1.0 :
resolution : {integrity : sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
engines : {node : '>= 0.4' }
has-flag@4.0.0 :
resolution : {integrity : sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines : {node : '>=8' }
has-property-descriptors@1.0.2 :
resolution : {integrity : sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
has-proto@1.2.0 :
resolution : {integrity : sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
engines : {node : '>= 0.4' }
has-symbols@1.1.0 :
resolution : {integrity : sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
engines : {node : '>= 0.4' }
has-tostringtag@1.0.2 :
resolution : {integrity : sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
engines : {node : '>= 0.4' }
hasown@2.0.2 :
resolution : {integrity : sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines : {node : '>= 0.4' }
he@1.2.0 :
resolution : {integrity : sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
hasBin : true
help-me@5.0.0 :
resolution : {integrity : sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
html-entities@2.6.0 :
resolution : {integrity : sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
html-escaper@2.0.2 :
resolution : {integrity : sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
html-to-text@9.0.5 :
resolution : {integrity : sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==}
engines : {node : '>=14' }
htmlparser2@8.0.2 :
resolution : {integrity : sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
human-signals@5.0.0 :
resolution : {integrity : sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines : {node : '>=16.17.0' }
husky@9.1.7 :
resolution : {integrity : sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==}
engines : {node : '>=18' }
hasBin : true
iconv-lite@0.6.3 :
resolution : {integrity : sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines : {node : '>=0.10.0' }
iconv-lite@0.7.2 :
resolution : {integrity : sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
engines : {node : '>=0.10.0' }
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
idb-keyval@6.2.2 :
resolution : {integrity : sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
ieee754@1.2.1 :
resolution : {integrity : sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
ignore@5.3.2 :
resolution : {integrity : sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines : {node : '>= 4' }
ignore@7.0.5 :
resolution : {integrity : sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
engines : {node : '>= 4' }
imapflow@1.2.13 :
resolution : {integrity : sha512-yQJnYdpnt2LMSjeJ4iSGvbVURmKrlmJxkbPgGfjT4v9ImTo49jIAkfKbtEQnsBT1euQyHHVCOL/y5zz0BDLUKA==}
immer@10.2.0 :
resolution : {integrity : sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==}
immer@11.1.4 :
resolution : {integrity : sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==}
import-fresh@3.3.1 :
resolution : {integrity : sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines : {node : '>=6' }
imurmurhash@0.1.4 :
resolution : {integrity : sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines : {node : '>=0.8.19' }
inherits@2.0.4 :
resolution : {integrity : sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
internal-slot@1.1.0 :
resolution : {integrity : sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines : {node : '>= 0.4' }
internmap@2.0.3 :
resolution : {integrity : sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
engines : {node : '>=12' }
intersection-observer@0.12.2 :
resolution : {integrity : sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
deprecated : The Intersection Observer polyfill is no longer needed and can safely be removed. Intersection Observer has been Baseline since 2019.
ioredis@5.10.0 :
resolution : {integrity : sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==}
engines : {node : '>=12.22.0' }
ioredis@5.9.3 :
resolution : {integrity : sha512-VI5tMCdeoxZWU5vjHWsiE/Su76JGhBvWF1MJnV9ZtGltHk9BmD48oDq8Tj8haZ85aceXZMxLNDQZRVo5QKNgXA==}
engines : {node : '>=12.22.0' }
ip-address@10.1.0 :
resolution : {integrity : sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
engines : {node : '>= 12' }
ipaddr.js@2.3.0 :
resolution : {integrity : sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==}
engines : {node : '>= 10' }
is-array-buffer@3.0.5 :
resolution : {integrity : sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
engines : {node : '>= 0.4' }
is-arrayish@0.3.4 :
resolution : {integrity : sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
is-async-function@2.1.1 :
resolution : {integrity : sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
engines : {node : '>= 0.4' }
is-bigint@1.1.0 :
resolution : {integrity : sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
engines : {node : '>= 0.4' }
is-binary-path@2.1.0 :
resolution : {integrity : sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines : {node : '>=8' }
is-boolean-object@1.2.2 :
resolution : {integrity : sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines : {node : '>= 0.4' }
is-bun-module@2.0.0 :
resolution : {integrity : sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==}
is-callable@1.2.7 :
resolution : {integrity : sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines : {node : '>= 0.4' }
is-core-module@2.16.1 :
resolution : {integrity : sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines : {node : '>= 0.4' }
is-data-view@1.0.2 :
resolution : {integrity : sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
engines : {node : '>= 0.4' }
is-date-object@1.1.0 :
resolution : {integrity : sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
engines : {node : '>= 0.4' }
is-extglob@2.1.1 :
resolution : {integrity : sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines : {node : '>=0.10.0' }
is-finalizationregistry@1.1.1 :
resolution : {integrity : sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
is-fullwidth-code-point@3.0.0 :
resolution : {integrity : sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines : {node : '>=8' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
is-fullwidth-code-point@4.0.0 :
resolution : {integrity : sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
engines : {node : '>=12' }
is-fullwidth-code-point@5.1.0 :
resolution : {integrity : sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines : {node : '>=18' }
is-generator-function@1.1.2 :
resolution : {integrity : sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines : {node : '>= 0.4' }
is-glob@4.0.3 :
resolution : {integrity : sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines : {node : '>=0.10.0' }
is-map@2.0.3 :
resolution : {integrity : sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines : {node : '>= 0.4' }
is-negative-zero@2.0.3 :
resolution : {integrity : sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
engines : {node : '>= 0.4' }
is-number-object@1.1.1 :
resolution : {integrity : sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines : {node : '>= 0.4' }
is-number@7.0.0 :
resolution : {integrity : sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines : {node : '>=0.12.0' }
is-regex@1.2.1 :
resolution : {integrity : sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines : {node : '>= 0.4' }
is-set@2.0.3 :
resolution : {integrity : sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
engines : {node : '>= 0.4' }
is-shared-array-buffer@1.0.4 :
resolution : {integrity : sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
is-stream@2.0.1 :
resolution : {integrity : sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines : {node : '>=8' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
is-stream@3.0.0 :
resolution : {integrity : sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines : {node : ^12.20.0 || ^14.13.1 || >=16.0.0}
is-string@1.1.1 :
resolution : {integrity : sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
engines : {node : '>= 0.4' }
is-symbol@1.1.1 :
resolution : {integrity : sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
engines : {node : '>= 0.4' }
is-typed-array@1.1.15 :
resolution : {integrity : sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines : {node : '>= 0.4' }
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
is-url@1.2.4 :
resolution : {integrity : sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
is-weakmap@2.0.2 :
resolution : {integrity : sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines : {node : '>= 0.4' }
is-weakref@1.1.1 :
resolution : {integrity : sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
engines : {node : '>= 0.4' }
is-weakset@2.0.4 :
resolution : {integrity : sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
isarray@1.0.0 :
resolution : {integrity : sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
isarray@2.0.5 :
resolution : {integrity : sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
isexe@2.0.0 :
resolution : {integrity : sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
isexe@3.1.5 :
resolution : {integrity : sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==}
engines : {node : '>=18' }
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
iso-3166-2@1.0.0 :
resolution : {integrity : sha512-xLAazfKZzwlsg/Zz/GQGQk3jJez5/2ORrjD3TjSuqz/arMht/xTK49c0GOE3afO/gEd9tHtBVVlfBla01unUng==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
istanbul-lib-coverage@3.2.2 :
resolution : {integrity : sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines : {node : '>=8' }
istanbul-lib-report@3.0.1 :
resolution : {integrity : sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines : {node : '>=10' }
istanbul-reports@3.2.0 :
resolution : {integrity : sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines : {node : '>=8' }
iterator.prototype@1.1.5 :
resolution : {integrity : sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
jackspeak@3.4.3 :
resolution : {integrity : sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
jiti@1.21.7 :
resolution : {integrity : sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin : true
jose@6.2.1 :
resolution : {integrity : sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==}
joycon@3.1.1 :
resolution : {integrity : sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines : {node : '>=10' }
js-cookie@3.0.5 :
resolution : {integrity : sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines : {node : '>=14' }
js-tokens@10.0.0 :
resolution : {integrity : sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
js-tokens@4.0.0 :
resolution : {integrity : sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
js-yaml@4.1.1 :
resolution : {integrity : sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin : true
json-buffer@3.0.1 :
resolution : {integrity : sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
json-schema-traverse@0.4.1 :
resolution : {integrity : sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
json-stable-stringify-without-jsonify@1.0.1 :
resolution : {integrity : sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
json2mq@0.2.0 :
resolution : {integrity : sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==}
json5@1.0.2 :
resolution : {integrity : sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin : true
jsx-ast-utils@3.3.5 :
resolution : {integrity : sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines : {node : '>=4.0' }
keyv@4.5.4 :
resolution : {integrity : sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
kysely@0.28.11 :
resolution : {integrity : sha512-zpGIFg0HuoC893rIjYX1BETkVWdDnzTzF5e0kWXJFg5lE0k1/LfNWBejrcnOFu8Q2Rfq/hTDTU7XLUM8QOrpzg==}
engines : {node : '>=20.0.0' }
language-subtag-registry@0.3.23 :
resolution : {integrity : sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
language-tags@1.0.9 :
resolution : {integrity : sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines : {node : '>=0.10' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
lazystream@1.0.1 :
resolution : {integrity : sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
engines : {node : '>= 0.6.3' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
leac@0.6.0 :
resolution : {integrity : sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==}
levn@0.4.1 :
resolution : {integrity : sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines : {node : '>= 0.8.0' }
libbase64@1.3.0 :
resolution : {integrity : sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==}
libmime@5.3.7 :
resolution : {integrity : sha512-FlDb3Wtha8P01kTL3P9M+ZDNDWPKPmKHWaU/cG/lg5pfuAwdflVpZE+wm9m7pKmC5ww6s+zTxBKS1p6yl3KpSw==}
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
libphonenumber-js@1.12.42 :
resolution : {integrity : sha512-oKQFPTibqQwZZkChCDVMFVJXMZdyJNqDWZWYNn8BgyAaK/6yFJEowxCY0RVFirRyWP63hMRuKlkSEd9qlvbWXg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
libqp@2.1.1 :
resolution : {integrity : sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow==}
lightningcss-android-arm64@1.32.0 :
resolution : {integrity : sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
engines : {node : '>= 12.0.0' }
cpu : [ arm64]
os : [ android]
lightningcss-darwin-arm64@1.32.0 :
resolution : {integrity : sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
engines : {node : '>= 12.0.0' }
cpu : [ arm64]
os : [ darwin]
lightningcss-darwin-x64@1.32.0 :
resolution : {integrity : sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
engines : {node : '>= 12.0.0' }
cpu : [ x64]
os : [ darwin]
lightningcss-freebsd-x64@1.32.0 :
resolution : {integrity : sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
engines : {node : '>= 12.0.0' }
cpu : [ x64]
os : [ freebsd]
lightningcss-linux-arm-gnueabihf@1.32.0 :
resolution : {integrity : sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
engines : {node : '>= 12.0.0' }
cpu : [ arm]
os : [ linux]
lightningcss-linux-arm64-gnu@1.32.0 :
resolution : {integrity : sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
engines : {node : '>= 12.0.0' }
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lightningcss-linux-arm64-musl@1.32.0 :
resolution : {integrity : sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines : {node : '>= 12.0.0' }
cpu : [ arm64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lightningcss-linux-x64-gnu@1.32.0 :
resolution : {integrity : sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines : {node : '>= 12.0.0' }
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ glibc]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lightningcss-linux-x64-musl@1.32.0 :
resolution : {integrity : sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines : {node : '>= 12.0.0' }
cpu : [ x64]
os : [ linux]
2026-04-08 15:31:33 -04:00
libc : [ musl]
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lightningcss-win32-arm64-msvc@1.32.0 :
resolution : {integrity : sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
engines : {node : '>= 12.0.0' }
cpu : [ arm64]
os : [ win32]
lightningcss-win32-x64-msvc@1.32.0 :
resolution : {integrity : sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
engines : {node : '>= 12.0.0' }
cpu : [ x64]
os : [ win32]
lightningcss@1.32.0 :
resolution : {integrity : sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
engines : {node : '>= 12.0.0' }
lilconfig@3.1.3 :
resolution : {integrity : sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines : {node : '>=14' }
lines-and-columns@1.2.4 :
resolution : {integrity : sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
linkify-it@5.0.0 :
resolution : {integrity : sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
lint-staged@15.5.2 :
resolution : {integrity : sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==}
engines : {node : '>=18.12.0' }
hasBin : true
listr2@8.3.3 :
resolution : {integrity : sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==}
engines : {node : '>=18.0.0' }
locate-path@6.0.0 :
resolution : {integrity : sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines : {node : '>=10' }
lodash-es@4.17.23 :
resolution : {integrity : sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==}
lodash.defaults@4.2.0 :
resolution : {integrity : sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
lodash.isarguments@3.1.0 :
resolution : {integrity : sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
lodash.merge@4.6.2 :
resolution : {integrity : sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
lodash@4.17.23 :
resolution : {integrity : sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
log-update@6.1.0 :
resolution : {integrity : sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
engines : {node : '>=18' }
loose-envify@1.4.0 :
resolution : {integrity : sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin : true
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
lru-cache@10.4.3 :
resolution : {integrity : sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lucide-react@0.460.0 :
resolution : {integrity : sha512-BVtq/DykVeIvRTJvRAgCsOwaGL8Un3Bxh8MbDxMhEWlZay3T4IpEKDEpwt5KZ0KJMHzgm6jrltxlT5eXOWXDHg==}
peerDependencies :
react : ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc
lucide@0.552.0 :
resolution : {integrity : sha512-f9PSKLsd4TtGRnRnbqZ2IMKQ2tfCA/dwHaZHysmB3LAF8uRi2GB35iy6S/kjcdvglDrueUdpu50ZDBoB21WT2g==}
luxon@3.7.2 :
resolution : {integrity : sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==}
engines : {node : '>=12' }
magic-string@0.30.21 :
resolution : {integrity : sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
magicast@0.5.2 :
resolution : {integrity : sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==}
mailparser@3.9.4 :
resolution : {integrity : sha512-ZmCnrMnRod+Cq6h7afn9DMFlT1B5gf484Ji+55NhUR4+w4q9z9d7lHHvL8pXP6kp/ehr8pGLQZBmjHpjvItuTQ==}
make-dir@4.0.0 :
resolution : {integrity : sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines : {node : '>=10' }
math-intrinsics@1.1.0 :
resolution : {integrity : sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines : {node : '>= 0.4' }
memory-pager@1.5.0 :
resolution : {integrity : sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==}
merge-stream@2.0.0 :
resolution : {integrity : sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
merge2@1.4.1 :
resolution : {integrity : sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines : {node : '>= 8' }
micromatch@4.0.8 :
resolution : {integrity : sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
engines : {node : '>=8.6' }
mime-db@1.52.0 :
resolution : {integrity : sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines : {node : '>= 0.6' }
mime-types@2.1.35 :
resolution : {integrity : sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines : {node : '>= 0.6' }
mimic-fn@4.0.0 :
resolution : {integrity : sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines : {node : '>=12' }
mimic-function@5.0.1 :
resolution : {integrity : sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
engines : {node : '>=18' }
minimatch@10.2.4 :
resolution : {integrity : sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==}
engines : {node : 18 || 20 || >=22}
minimatch@3.1.5 :
resolution : {integrity : sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
minimatch@5.1.9 :
resolution : {integrity : sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
engines : {node : '>=10' }
minimatch@9.0.9 :
resolution : {integrity : sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
engines : {node : '>=16 || 14 >=14.17' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
minimist@1.2.8 :
resolution : {integrity : sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
minio@8.0.7 :
resolution : {integrity : sha512-E737MgufW8CeQAsTAtnEMrxZ9scMSf29kkhZoXzDTKj/Jszzo2SfeZUH9wbDQH2Rsq6TCtl/yQL0+XdVKZansQ==}
engines : {node : ^16 || ^18 || >=20}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
minipass@7.1.3 :
resolution : {integrity : sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
engines : {node : '>=16 || 14 >=14.17' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
mongodb-connection-string-url@7.0.1 :
resolution : {integrity : sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==}
engines : {node : '>=20.19.0' }
mongodb@7.1.0 :
resolution : {integrity : sha512-kMfnKunbolQYwCIyrkxNJFB4Ypy91pYqua5NargS/f8ODNSJxT03ZU3n1JqL4mCzbSih8tvmMEMLpKTT7x5gCg==}
engines : {node : '>=20.19.0' }
peerDependencies :
'@aws-sdk/credential-providers' : ^3.806.0
'@mongodb-js/zstd' : ^7.0.0
gcp-metadata : ^7.0.1
kerberos : ^7.0.0
mongodb-client-encryption : '>=7.0.0 <7.1.0'
snappy : ^7.3.2
socks : ^2.8.6
peerDependenciesMeta :
'@aws-sdk/credential-providers' :
optional : true
'@mongodb-js/zstd' :
optional : true
gcp-metadata :
optional : true
kerberos :
optional : true
mongodb-client-encryption :
optional : true
snappy :
optional : true
socks :
optional : true
ms@2.1.3 :
resolution : {integrity : sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
msgpackr-extract@3.0.3 :
resolution : {integrity : sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==}
hasBin : true
msgpackr@1.11.5 :
resolution : {integrity : sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==}
mz@2.7.0 :
resolution : {integrity : sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
nanoid@3.3.11 :
resolution : {integrity : sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines : {node : ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin : true
nanostores@1.1.1 :
resolution : {integrity : sha512-EYJqS25r2iBeTtGQCHidXl1VfZ1jXM7Q04zXJOrMlxVVmD0ptxJaNux92n1mJ7c5lN3zTq12MhH/8x59nP+qmg==}
engines : {node : ^20.0.0 || >=22.0.0}
napi-postinstall@0.3.4 :
resolution : {integrity : sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
engines : {node : ^12.20.0 || ^14.18.0 || >=16.0.0}
hasBin : true
natural-compare@1.4.0 :
resolution : {integrity : sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
negotiator@0.6.3 :
resolution : {integrity : sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines : {node : '>= 0.6' }
next-themes@0.4.6 :
resolution : {integrity : sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==}
peerDependencies :
react : ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
react-dom : ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
next@15.1.0 :
resolution : {integrity : sha512-QKhzt6Y8rgLNlj30izdMbxAwjHMFANnLwDwZ+WQh5sMhyt4lEBqDK9QpvWHtIM4rINKPoJ8aiRZKg5ULSybVHw==}
engines : {node : ^18.18.0 || ^19.8.0 || >= 20.0.0}
deprecated : This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/CVE-2025-66478 for more details.
hasBin : true
peerDependencies :
'@opentelemetry/api' : ^1.1.0
'@playwright/test' : ^1.41.2
babel-plugin-react-compiler : '*'
react : ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
react-dom : ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
sass : ^1.3.0
peerDependenciesMeta :
'@opentelemetry/api' :
optional : true
'@playwright/test' :
optional : true
babel-plugin-react-compiler :
optional : true
sass :
optional : true
node-abort-controller@3.1.1 :
resolution : {integrity : sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
node-exports-info@1.6.0 :
resolution : {integrity : sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==}
engines : {node : '>= 0.4' }
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
node-fetch@2.7.0 :
resolution : {integrity : sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
engines : {node : 4. x || >=6.0.0}
peerDependencies :
encoding : ^0.1.0
peerDependenciesMeta :
encoding :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
node-gyp-build-optional-packages@5.2.2 :
resolution : {integrity : sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==}
hasBin : true
node-html-better-parser@1.5.8 :
resolution : {integrity : sha512-t/wAKvaTSKco43X+yf9+76RiMt18MtMmzd4wc7rKj+fWav6DV4ajDEKdWlLzSE8USDF5zr/06uGj0Wr/dGAFtw==}
node-releases@2.0.36 :
resolution : {integrity : sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==}
nodemailer@6.10.1 :
resolution : {integrity : sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==}
engines : {node : '>=6.0.0' }
nodemailer@8.0.2 :
resolution : {integrity : sha512-zbj002pZAIkWQFxyAaqoxvn+zoIwRnS40hgjqTXudKOOJkiFFgBeNqjgD3/YCR12sZnrghWYBY+yP1ZucdDRpw==}
engines : {node : '>=6.0.0' }
normalize-path@3.0.0 :
resolution : {integrity : sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines : {node : '>=0.10.0' }
notepack.io@3.0.1 :
resolution : {integrity : sha512-TKC/8zH5pXIAMVQio2TvVDTtPRX+DJPHDqjRbxogtFiByHyzKmy96RA0JtCQJ+WouyyL4A10xomQzgbUT+1jCg==}
npm-run-path@5.3.0 :
resolution : {integrity : sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines : {node : ^12.20.0 || ^14.13.1 || >=16.0.0}
object-assign@4.1.1 :
resolution : {integrity : sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines : {node : '>=0.10.0' }
object-hash@3.0.0 :
resolution : {integrity : sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines : {node : '>= 6' }
object-inspect@1.13.4 :
resolution : {integrity : sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines : {node : '>= 0.4' }
object-keys@1.1.1 :
resolution : {integrity : sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines : {node : '>= 0.4' }
object.assign@4.1.7 :
resolution : {integrity : sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
engines : {node : '>= 0.4' }
object.entries@1.1.9 :
resolution : {integrity : sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==}
engines : {node : '>= 0.4' }
object.fromentries@2.0.8 :
resolution : {integrity : sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
engines : {node : '>= 0.4' }
object.groupby@1.0.3 :
resolution : {integrity : sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
engines : {node : '>= 0.4' }
object.values@1.2.1 :
resolution : {integrity : sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines : {node : '>= 0.4' }
obug@2.1.1 :
resolution : {integrity : sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
on-exit-leak-free@2.1.2 :
resolution : {integrity : sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines : {node : '>=14.0.0' }
once@1.4.0 :
resolution : {integrity : sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
onetime@6.0.0 :
resolution : {integrity : sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines : {node : '>=12' }
onetime@7.0.0 :
resolution : {integrity : sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
engines : {node : '>=18' }
openai@6.27.0 :
resolution : {integrity : sha512-osTKySlrdYrLYTt0zjhY8yp0JUBmWDCN+Q+QxsV4xMQnnoVFpylgKGgxwN8sSdTNw0G4y+WUXs4eCMWpyDNWZQ==}
hasBin : true
peerDependencies :
ws : ^8.18.0
zod : ^3.25 || ^4.0
peerDependenciesMeta :
ws :
optional : true
zod :
optional : true
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
opencollective-postinstall@2.0.3 :
resolution : {integrity : sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==}
hasBin : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
optionator@0.9.4 :
resolution : {integrity : sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines : {node : '>= 0.8.0' }
own-keys@1.0.1 :
resolution : {integrity : sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
engines : {node : '>= 0.4' }
p-limit@3.1.0 :
resolution : {integrity : sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines : {node : '>=10' }
p-locate@5.0.0 :
resolution : {integrity : sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines : {node : '>=10' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
package-json-from-dist@1.0.1 :
resolution : {integrity : sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
pako@0.2.9 :
resolution : {integrity : sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
pako@1.0.11 :
resolution : {integrity : sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
pako@2.1.0 :
resolution : {integrity : sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==}
parent-module@1.0.1 :
resolution : {integrity : sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines : {node : '>=6' }
parseley@0.12.1 :
resolution : {integrity : sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==}
path-exists@4.0.0 :
resolution : {integrity : sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines : {node : '>=8' }
path-expression-matcher@1.1.3 :
resolution : {integrity : sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ==}
engines : {node : '>=14.0.0' }
path-key@3.1.1 :
resolution : {integrity : sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines : {node : '>=8' }
path-key@4.0.0 :
resolution : {integrity : sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
engines : {node : '>=12' }
path-parse@1.0.7 :
resolution : {integrity : sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
path-scurry@1.11.1 :
resolution : {integrity : sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
engines : {node : '>=16 || 14 >=14.18' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
pathe@2.0.3 :
resolution : {integrity : sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
feat(eoi): in-app pathway fills the same source PDF as Documenso
When the in-app pathway is used for EOI templates, we now load the same
source PDF that the Documenso template uploads and fill its AcroForm
fields with values from EoiContext via pdf-lib. Field names mirror the
Documenso template's formValues keys exactly (Name, Email, Address,
Yacht Name, Length, Width, Draft, Berth Number + Lease_10 / Purchase
checkboxes), so both pathways produce equivalent legal documents — only
the renderer differs.
The form is left interactive (not flattened) so a recipient can still
adjust values before signing. Non-EOI templates (welcome letters,
acknowledgments, etc.) keep using the existing HTML→pdfme path.
Adds:
- pdf-lib direct dep
- src/lib/pdf/fill-eoi-form.ts — load + fill helpers, EOI_TEMPLATE_PDF_PATH
env override
- assets/ + README documenting the expected source PDF
- next.config outputFileTracingIncludes so the asset is bundled in the
standalone build
Tests: 8 new (4 fill-form unit + 2 source-PDF route + 2 fallback);
645/645 green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 13:38:02 +02:00
pdf-lib@1.17.1 :
resolution : {integrity : sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
peberminta@0.9.0 :
resolution : {integrity : sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==}
performance-now@2.1.0 :
resolution : {integrity : sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
picocolors@1.1.1 :
resolution : {integrity : sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@2.3.1 :
resolution : {integrity : sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines : {node : '>=8.6' }
picomatch@4.0.3 :
resolution : {integrity : sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines : {node : '>=12' }
pidtree@0.6.0 :
resolution : {integrity : sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
engines : {node : '>=0.10' }
hasBin : true
pify@2.3.0 :
resolution : {integrity : sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines : {node : '>=0.10.0' }
pino-abstract-transport@2.0.0 :
resolution : {integrity : sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
pino-abstract-transport@3.0.0 :
resolution : {integrity : sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
pino-pretty@13.1.3 :
resolution : {integrity : sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==}
hasBin : true
pino-std-serializers@7.1.0 :
resolution : {integrity : sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
pino@10.3.1 :
resolution : {integrity : sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
hasBin : true
pino@9.14.0 :
resolution : {integrity : sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==}
hasBin : true
pirates@4.0.7 :
resolution : {integrity : sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
engines : {node : '>= 6' }
playwright-core@1.58.2 :
resolution : {integrity : sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==}
engines : {node : '>=18' }
hasBin : true
playwright@1.58.2 :
resolution : {integrity : sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==}
engines : {node : '>=18' }
hasBin : true
possible-typed-array-names@1.1.0 :
resolution : {integrity : sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines : {node : '>= 0.4' }
postcss-import@15.1.0 :
resolution : {integrity : sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines : {node : '>=14.0.0' }
peerDependencies :
postcss : ^8.0.0
postcss-js@4.1.0 :
resolution : {integrity : sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==}
engines : {node : ^12 || ^14 || >= 16}
peerDependencies :
postcss : ^8.4.21
postcss-load-config@6.0.1 :
resolution : {integrity : sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
engines : {node : '>= 18' }
peerDependencies :
jiti : '>=1.21.0'
postcss : '>=8.0.9'
tsx : ^4.8.1
yaml : ^2.4.2
peerDependenciesMeta :
jiti :
optional : true
postcss :
optional : true
tsx :
optional : true
yaml :
optional : true
postcss-nested@6.2.0 :
resolution : {integrity : sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
engines : {node : '>=12.0' }
peerDependencies :
postcss : ^8.2.14
postcss-selector-parser@6.1.2 :
resolution : {integrity : sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
engines : {node : '>=4' }
postcss-value-parser@4.2.0 :
resolution : {integrity : sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.4.31 :
resolution : {integrity : sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines : {node : ^10 || ^12 || >=14}
postcss@8.5.8 :
resolution : {integrity : sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
engines : {node : ^10 || ^12 || >=14}
postgres@3.4.8 :
resolution : {integrity : sha512-d+JFcLM17njZaOLkv6SCev7uoLaBtfK86vMUXhW1Z4glPWh4jozno9APvW/XKFJ3CCxVoC7OL38BqRydtu5nGg==}
engines : {node : '>=12' }
prelude-ls@1.2.1 :
resolution : {integrity : sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines : {node : '>= 0.8.0' }
prettier@3.8.1 :
resolution : {integrity : sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==}
engines : {node : '>=14' }
hasBin : true
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
process-nextick-args@2.0.1 :
resolution : {integrity : sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
process-warning@5.0.0 :
resolution : {integrity : sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
process@0.11.10 :
resolution : {integrity : sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines : {node : '>= 0.6.0' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
prop-types@15.8.1 :
resolution : {integrity : sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
pump@3.0.4 :
resolution : {integrity : sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==}
punycode.js@2.3.1 :
resolution : {integrity : sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines : {node : '>=6' }
punycode@2.3.1 :
resolution : {integrity : sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines : {node : '>=6' }
query-string@7.1.3 :
resolution : {integrity : sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==}
engines : {node : '>=6' }
queue-microtask@1.2.3 :
resolution : {integrity : sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
quick-format-unescaped@4.0.4 :
resolution : {integrity : sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
raf@3.4.1 :
resolution : {integrity : sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==}
rc-align@2.4.5 :
resolution : {integrity : sha512-nv9wYUYdfyfK+qskThf4BQUSIadeI/dCsfaMZfNEoxm9HwOIioQ+LyqmMK6jWHAZQgOzMLaqawhuBXlF63vgjw==}
rc-animate@2.11.1 :
resolution : {integrity : sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-cascader@3.34.0 :
resolution : {integrity : sha512-KpXypcvju9ptjW9FaN2NFcA2QH9E9LHKq169Y0eWtH4e/wHQ5Wh5qZakAgvb8EKZ736WZ3B0zLLOBsrsja5Dag==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-checkbox@3.5.0 :
resolution : {integrity : sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-collapse@3.9.0 :
resolution : {integrity : sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-color-picker@1.2.6 :
resolution : {integrity : sha512-AaC9Pg7qCHSy5M4eVbqDIaNb2FC4SEw82GOHB2C4R/+vF2FVa/r5XA+Igg5+zLPmAvBLhz9tL4MAfkRA8yWNJw==}
peerDependencies :
react : 16. x
react-dom : 16. x
rc-dialog@9.6.0 :
resolution : {integrity : sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-drawer@7.3.0 :
resolution : {integrity : sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-dropdown@4.2.1 :
resolution : {integrity : sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==}
peerDependencies :
react : '>=16.11.0'
react-dom : '>=16.11.0'
rc-field-form@2.7.1 :
resolution : {integrity : sha512-vKeSifSJ6HoLaAB+B8aq/Qgm8a3dyxROzCtKNCsBQgiverpc4kWDQihoUwzUj+zNWJOykwSY4dNX3QrGwtVb9A==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-image@7.12.0 :
resolution : {integrity : sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-input-number@9.5.0 :
resolution : {integrity : sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-input@1.8.0 :
resolution : {integrity : sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==}
peerDependencies :
react : '>=16.0.0'
react-dom : '>=16.0.0'
rc-mentions@2.20.0 :
resolution : {integrity : sha512-w8HCMZEh3f0nR8ZEd466ATqmXFCMGMN5UFCzEUL0bM/nGw/wOS2GgRzKBcm19K++jDyuWCOJOdgcKGXU3fXfbQ==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-menu@9.16.1 :
resolution : {integrity : sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-motion@2.9.5 :
resolution : {integrity : sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-notification@5.6.4 :
resolution : {integrity : sha512-KcS4O6B4qzM3KH7lkwOB7ooLPZ4b6J+VMmQgT51VZCeEcmghdeR4IrMcFq0LG+RPdnbe/ArT086tGM8Snimgiw==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-overflow@1.5.0 :
resolution : {integrity : sha512-Lm/v9h0LymeUYJf0x39OveU52InkdRXqnn2aYXfWmo8WdOonIKB2kfau+GF0fWq6jPgtdO9yMqveGcK6aIhJmg==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-pagination@5.1.0 :
resolution : {integrity : sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-picker@4.11.3 :
resolution : {integrity : sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==}
engines : {node : '>=8.x' }
peerDependencies :
date-fns : '>= 2.x'
dayjs : '>= 1.x'
luxon : '>= 3.x'
moment : '>= 2.x'
react : '>=16.9.0'
react-dom : '>=16.9.0'
peerDependenciesMeta :
date-fns :
optional : true
dayjs :
optional : true
luxon :
optional : true
moment :
optional : true
rc-progress@4.0.0 :
resolution : {integrity : sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-rate@2.13.1 :
resolution : {integrity : sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-resize-observer@1.4.3 :
resolution : {integrity : sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-segmented@2.7.1 :
resolution : {integrity : sha512-izj1Nw/Dw2Vb7EVr+D/E9lUTkBe+kKC+SAFSU9zqr7WV2W5Ktaa9Gc7cB2jTqgk8GROJayltaec+DBlYKc6d+g==}
peerDependencies :
react : '>=16.0.0'
react-dom : '>=16.0.0'
rc-select@14.16.8 :
resolution : {integrity : sha512-NOV5BZa1wZrsdkKaiK7LHRuo5ZjZYMDxPP6/1+09+FB4KoNi8jcG1ZqLE3AVCxEsYMBe65OBx71wFoHRTP3LRg==}
engines : {node : '>=8.x' }
peerDependencies :
react : '*'
react-dom : '*'
rc-slider@11.1.9 :
resolution : {integrity : sha512-h8IknhzSh3FEM9u8ivkskh+Ef4Yo4JRIY2nj7MrH6GQmrwV6mcpJf5/4KgH5JaVI1H3E52yCdpOlVyGZIeph5A==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-steps@6.0.1 :
resolution : {integrity : sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-switch@4.1.0 :
resolution : {integrity : sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-table@7.54.0 :
resolution : {integrity : sha512-/wDTkki6wBTjwylwAGjpLKYklKo9YgjZwAU77+7ME5mBoS32Q4nAwoqhA2lSge6fobLW3Tap6uc5xfwaL2p0Sw==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-tabs@15.7.0 :
resolution : {integrity : sha512-ZepiE+6fmozYdWf/9gVp7k56PKHB1YYoDsKeQA1CBlJ/POIhjkcYiv0AGP0w2Jhzftd3AVvZP/K+V+Lpi2ankA==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-textarea@1.10.2 :
resolution : {integrity : sha512-HfaeXiaSlpiSp0I/pvWpecFEHpVysZ9tpDLNkxQbMvMz6gsr7aVZ7FpWP9kt4t7DB+jJXesYS0us1uPZnlRnwQ==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-tooltip@6.4.0 :
resolution : {integrity : sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-tree-select@5.27.0 :
resolution : {integrity : sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==}
peerDependencies :
react : '*'
react-dom : '*'
rc-tree@5.13.1 :
resolution : {integrity : sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==}
engines : {node : '>=10.x' }
peerDependencies :
react : '*'
react-dom : '*'
rc-trigger@1.11.5 :
resolution : {integrity : sha512-MBuUPw1nFzA4K7jQOwb7uvFaZFjXGd00EofUYiZ+l/fgKVq8wnLC0lkv36kwqM7vfKyftRo2sh7cWVpdPuNnnw==}
rc-upload@4.11.0 :
resolution : {integrity : sha512-ZUyT//2JAehfHzjWowqROcwYJKnZkIUGWaTE/VogVrepSl7AFNbQf4+zGfX4zl9Vrj/Jm8scLO0R6UlPDKK4wA==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-util@4.21.1 :
resolution : {integrity : sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg==}
rc-util@5.44.4 :
resolution : {integrity : sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==}
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
rc-virtual-list@3.19.2 :
resolution : {integrity : sha512-Ys6NcjwGkuwkeaWBDqfI3xWuZ7rDiQXlH1o2zLfFzATfEgXcqpk8CkgMfbJD81McqjcJVez25a3kPxCR807evA==}
engines : {node : '>=8.x' }
peerDependencies :
react : '>=16.9.0'
react-dom : '>=16.9.0'
react-day-picker@9.14.0 :
resolution : {integrity : sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==}
engines : {node : '>=18' }
peerDependencies :
react : '>=16.8.0'
react-dom@19.2.4 :
resolution : {integrity : sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==}
peerDependencies :
react : ^19.2.4
react-fast-compare@3.2.2 :
resolution : {integrity : sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
react-hook-form@7.71.2 :
resolution : {integrity : sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==}
engines : {node : '>=18.0.0' }
peerDependencies :
react : ^16.8.0 || ^17 || ^18 || ^19
react-is@16.13.1 :
resolution : {integrity : sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
react-is@18.3.1 :
resolution : {integrity : sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
react-lifecycles-compat@3.0.4 :
resolution : {integrity : sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==}
react-redux@9.2.0 :
resolution : {integrity : sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==}
peerDependencies :
'@types/react' : ^18.2.25 || ^19
react : ^18.0 || ^19
redux : ^5.0.0
peerDependenciesMeta :
'@types/react' :
optional : true
redux :
optional : true
react-remove-scroll-bar@2.3.8 :
resolution : {integrity : sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
engines : {node : '>=10' }
peerDependencies :
'@types/react' : '*'
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
peerDependenciesMeta :
'@types/react' :
optional : true
react-remove-scroll@2.7.2 :
resolution : {integrity : sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==}
engines : {node : '>=10' }
peerDependencies :
'@types/react' : '*'
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
react-style-singleton@2.2.3 :
resolution : {integrity : sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
engines : {node : '>=10' }
peerDependencies :
'@types/react' : '*'
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
react@19.2.4 :
resolution : {integrity : sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==}
engines : {node : '>=0.10.0' }
read-cache@1.0.0 :
resolution : {integrity : sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
readable-stream@2.3.8 :
resolution : {integrity : sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
readable-stream@3.6.2 :
resolution : {integrity : sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
engines : {node : '>= 6' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
readable-stream@4.7.0 :
resolution : {integrity : sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
engines : {node : ^12.22.0 || ^14.17.0 || >=16.0.0}
readdir-glob@1.1.3 :
resolution : {integrity : sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
readdirp@3.6.0 :
resolution : {integrity : sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines : {node : '>=8.10.0' }
real-require@0.2.0 :
resolution : {integrity : sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines : {node : '>= 12.13.0' }
recharts@3.8.0 :
resolution : {integrity : sha512-Z/m38DX3L73ExO4Tpc9/iZWHmHnlzWG4njQbxsF5aSjwqmHNDDIm0rdEBArkwsBvR8U6EirlEHiQNYWCVh9sGQ==}
engines : {node : '>=18' }
peerDependencies :
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom : ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-is : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
redis-errors@1.2.0 :
resolution : {integrity : sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
engines : {node : '>=4' }
redis-parser@3.0.0 :
resolution : {integrity : sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
engines : {node : '>=4' }
redux-thunk@3.1.0 :
resolution : {integrity : sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==}
peerDependencies :
redux : ^5.0.0
redux@5.0.1 :
resolution : {integrity : sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==}
reflect.getprototypeof@1.0.10 :
resolution : {integrity : sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines : {node : '>= 0.4' }
regenerator-runtime@0.11.1 :
resolution : {integrity : sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==}
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
regenerator-runtime@0.13.11 :
resolution : {integrity : sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
regexp.prototype.flags@1.5.4 :
resolution : {integrity : sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines : {node : '>= 0.4' }
reselect@5.1.1 :
resolution : {integrity : sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
resize-observer-polyfill@1.5.1 :
resolution : {integrity : sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
resolve-from@4.0.0 :
resolution : {integrity : sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines : {node : '>=4' }
resolve-pkg-maps@1.0.0 :
resolution : {integrity : sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
resolve@1.22.11 :
resolution : {integrity : sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
engines : {node : '>= 0.4' }
hasBin : true
resolve@2.0.0-next.6 :
resolution : {integrity : sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==}
engines : {node : '>= 0.4' }
hasBin : true
restore-cursor@5.1.0 :
resolution : {integrity : sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines : {node : '>=18' }
restructure@3.0.2 :
resolution : {integrity : sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==}
reusify@1.1.0 :
resolution : {integrity : sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines : {iojs: '>=1.0.0', node : '>=0.10.0' }
rfdc@1.4.1 :
resolution : {integrity : sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
rolldown@1.0.0-rc.9 :
resolution : {integrity : sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==}
engines : {node : ^20.19.0 || >=22.12.0}
hasBin : true
rou3@0.7.12 :
resolution : {integrity : sha512-iFE4hLDuloSWcD7mjdCDhx2bKcIsYbtOTpfH5MHHLSKMOUyjqQXTeZVa289uuwEGEKFoE/BAPbhaU4B774nceg==}
run-parallel@1.2.0 :
resolution : {integrity : sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
safe-array-concat@1.1.3 :
resolution : {integrity : sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
engines : {node : '>=0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
safe-buffer@5.1.2 :
resolution : {integrity : sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
safe-buffer@5.2.1 :
resolution : {integrity : sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
safe-push-apply@1.0.0 :
resolution : {integrity : sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
engines : {node : '>= 0.4' }
safe-regex-test@1.1.0 :
resolution : {integrity : sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines : {node : '>= 0.4' }
safe-stable-stringify@2.5.0 :
resolution : {integrity : sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines : {node : '>=10' }
safer-buffer@2.1.2 :
resolution : {integrity : sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
sax@1.5.0 :
resolution : {integrity : sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==}
engines : {node : '>=11.0.0' }
scheduler@0.27.0 :
resolution : {integrity : sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
screenfull@5.2.0 :
resolution : {integrity : sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==}
engines : {node : '>=0.10.0' }
scroll-into-view-if-needed@3.1.0 :
resolution : {integrity : sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
secure-json-parse@4.1.0 :
resolution : {integrity : sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
selderee@0.11.0 :
resolution : {integrity : sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==}
semver@6.3.1 :
resolution : {integrity : sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin : true
semver@7.7.4 :
resolution : {integrity : sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
engines : {node : '>=10' }
hasBin : true
set-cookie-parser@3.0.1 :
resolution : {integrity : sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==}
set-function-length@1.2.2 :
resolution : {integrity : sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines : {node : '>= 0.4' }
set-function-name@2.0.2 :
resolution : {integrity : sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
engines : {node : '>= 0.4' }
set-proto@1.0.0 :
resolution : {integrity : sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
engines : {node : '>= 0.4' }
shallowequal@1.1.0 :
resolution : {integrity : sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==}
sharp@0.33.5 :
resolution : {integrity : sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines : {node : ^18.17.0 || ^20.3.0 || >=21.0.0}
shebang-command@2.0.0 :
resolution : {integrity : sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines : {node : '>=8' }
shebang-regex@3.0.0 :
resolution : {integrity : sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines : {node : '>=8' }
shell-quote@1.8.3 :
resolution : {integrity : sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
engines : {node : '>= 0.4' }
side-channel-list@1.0.0 :
resolution : {integrity : sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
engines : {node : '>= 0.4' }
side-channel-map@1.0.1 :
resolution : {integrity : sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
engines : {node : '>= 0.4' }
side-channel-weakmap@1.0.2 :
resolution : {integrity : sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
engines : {node : '>= 0.4' }
side-channel@1.1.0 :
resolution : {integrity : sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines : {node : '>= 0.4' }
siginfo@2.0.0 :
resolution : {integrity : sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
signal-exit@4.1.0 :
resolution : {integrity : sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines : {node : '>=14' }
simple-swizzle@0.2.4 :
resolution : {integrity : sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
slice-ansi@5.0.0 :
resolution : {integrity : sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
engines : {node : '>=12' }
slice-ansi@7.1.2 :
resolution : {integrity : sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==}
engines : {node : '>=18' }
smart-buffer@4.2.0 :
resolution : {integrity : sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines : {node: '>= 6.0.0', npm : '>= 3.0.0' }
socket.io-adapter@2.5.6 :
resolution : {integrity : sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ==}
socket.io-client@4.8.3 :
resolution : {integrity : sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==}
engines : {node : '>=10.0.0' }
socket.io-parser@4.2.5 :
resolution : {integrity : sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==}
engines : {node : '>=10.0.0' }
socket.io@4.8.3 :
resolution : {integrity : sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==}
engines : {node : '>=10.2.0' }
socks@2.8.7 :
resolution : {integrity : sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
engines : {node: '>= 10.0.0', npm : '>= 3.0.0' }
sonic-boom@4.2.1 :
resolution : {integrity : sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
sonner@1.7.4 :
resolution : {integrity : sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw==}
peerDependencies :
react : ^18.0.0 || ^19.0.0 || ^19.0.0-rc
react-dom : ^18.0.0 || ^19.0.0 || ^19.0.0-rc
source-map-js@1.2.1 :
resolution : {integrity : sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines : {node : '>=0.10.0' }
source-map-support@0.5.21 :
resolution : {integrity : sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
source-map@0.6.1 :
resolution : {integrity : sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines : {node : '>=0.10.0' }
sparse-bitfield@3.0.3 :
resolution : {integrity : sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==}
split-on-first@1.1.0 :
resolution : {integrity : sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
engines : {node : '>=6' }
split2@4.2.0 :
resolution : {integrity : sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines : {node : '>= 10.x' }
stable-hash@0.0.5 :
resolution : {integrity : sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
stackback@0.0.2 :
resolution : {integrity : sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
standard-as-callback@2.1.0 :
resolution : {integrity : sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
std-env@4.0.0 :
resolution : {integrity : sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
stop-iteration-iterator@1.1.0 :
resolution : {integrity : sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines : {node : '>= 0.4' }
stream-chain@2.2.5 :
resolution : {integrity : sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==}
stream-json@1.9.1 :
resolution : {integrity : sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==}
streamsearch@1.1.0 :
resolution : {integrity : sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines : {node : '>=10.0.0' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
streamx@2.25.0 :
resolution : {integrity : sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
strict-uri-encode@2.0.0 :
resolution : {integrity : sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
engines : {node : '>=4' }
string-argv@0.3.2 :
resolution : {integrity : sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines : {node : '>=0.6.19' }
string-convert@0.2.1 :
resolution : {integrity : sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
string-width@4.2.3 :
resolution : {integrity : sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines : {node : '>=8' }
string-width@5.1.2 :
resolution : {integrity : sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
engines : {node : '>=12' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
string-width@7.2.0 :
resolution : {integrity : sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines : {node : '>=18' }
string.prototype.includes@2.0.1 :
resolution : {integrity : sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
engines : {node : '>= 0.4' }
string.prototype.matchall@4.0.12 :
resolution : {integrity : sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==}
engines : {node : '>= 0.4' }
string.prototype.repeat@1.0.0 :
resolution : {integrity : sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==}
string.prototype.trim@1.2.10 :
resolution : {integrity : sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
engines : {node : '>= 0.4' }
string.prototype.trimend@1.0.9 :
resolution : {integrity : sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
engines : {node : '>= 0.4' }
string.prototype.trimstart@1.0.8 :
resolution : {integrity : sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
engines : {node : '>= 0.4' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
string_decoder@1.1.1 :
resolution : {integrity : sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
string_decoder@1.3.0 :
resolution : {integrity : sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
strip-ansi@6.0.1 :
resolution : {integrity : sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines : {node : '>=8' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
strip-ansi@7.2.0 :
resolution : {integrity : sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
engines : {node : '>=12' }
strip-bom@3.0.0 :
resolution : {integrity : sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines : {node : '>=4' }
strip-final-newline@3.0.0 :
resolution : {integrity : sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines : {node : '>=12' }
strip-json-comments@3.1.1 :
resolution : {integrity : sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines : {node : '>=8' }
strip-json-comments@5.0.3 :
resolution : {integrity : sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==}
engines : {node : '>=14.16' }
strnum@2.2.0 :
resolution : {integrity : sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==}
styled-jsx@5.1.6 :
resolution : {integrity : sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==}
engines : {node : '>= 12.0.0' }
peerDependencies :
'@babel/core' : '*'
babel-plugin-macros : '*'
react : '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0'
peerDependenciesMeta :
'@babel/core' :
optional : true
babel-plugin-macros :
optional : true
stylis@4.3.6 :
resolution : {integrity : sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==}
sucrase@3.35.1 :
resolution : {integrity : sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
engines : {node : '>=16 || 14 >=14.17' }
hasBin : true
supports-color@7.2.0 :
resolution : {integrity : sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines : {node : '>=8' }
supports-preserve-symlinks-flag@1.0.0 :
resolution : {integrity : sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines : {node : '>= 0.4' }
tailwind-merge@2.6.1 :
resolution : {integrity : sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==}
tailwindcss-animate@1.0.7 :
resolution : {integrity : sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==}
peerDependencies :
tailwindcss : '>=3.0.0 || insiders'
tailwindcss@3.4.19 :
resolution : {integrity : sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==}
engines : {node : '>=14.0.0' }
hasBin : true
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
tar-stream@3.1.8 :
resolution : {integrity : sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==}
teex@1.0.1 :
resolution : {integrity : sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
tesseract.js-core@7.0.0 :
resolution : {integrity : sha512-WnNH518NzmbSq9zgTPeoF8c+xmilS8rFIl1YKbk/ptuuc7p6cLNELNuPAzcmsYw450ca6bLa8j3t0VAtq435Vw==}
tesseract.js@7.0.0 :
resolution : {integrity : sha512-exPBkd+z+wM1BuMkx/Bjv43OeLBxhL5kKWsz/9JY+DXcXdiBjiAch0V49QR3oAJqCaL5qURE0vx9Eo+G5YE7mA==}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
text-decoder@1.2.7 :
resolution : {integrity : sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
thenify-all@1.6.0 :
resolution : {integrity : sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines : {node : '>=0.8' }
thenify@3.3.1 :
resolution : {integrity : sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
thread-stream@3.1.0 :
resolution : {integrity : sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==}
thread-stream@4.0.0 :
resolution : {integrity : sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==}
engines : {node : '>=20' }
throttle-debounce@5.0.2 :
resolution : {integrity : sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==}
engines : {node : '>=12.22' }
through2@4.0.2 :
resolution : {integrity : sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==}
tiny-inflate@1.0.3 :
resolution : {integrity : sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
tiny-invariant@1.3.3 :
resolution : {integrity : sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
tinybench@2.9.0 :
resolution : {integrity : sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
tinycolor2@1.6.0 :
resolution : {integrity : sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==}
tinyexec@1.0.4 :
resolution : {integrity : sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
engines : {node : '>=18' }
tinyglobby@0.2.15 :
resolution : {integrity : sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
engines : {node : '>=12.0.0' }
tinyrainbow@3.1.0 :
resolution : {integrity : sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
engines : {node : '>=14.0.0' }
tlds@1.261.0 :
resolution : {integrity : sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==}
hasBin : true
to-regex-range@5.0.1 :
resolution : {integrity : sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines : {node : '>=8.0' }
toggle-selection@1.0.6 :
resolution : {integrity : sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
tr46@0.0.3 :
resolution : {integrity : sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
tr46@5.1.1 :
resolution : {integrity : sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
engines : {node : '>=18' }
ts-api-utils@2.4.0 :
resolution : {integrity : sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==}
engines : {node : '>=18.12' }
peerDependencies :
typescript : '>=4.8.4'
ts-interface-checker@0.1.13 :
resolution : {integrity : sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
tsconfig-paths@3.15.0 :
resolution : {integrity : sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
feat(eoi): in-app pathway fills the same source PDF as Documenso
When the in-app pathway is used for EOI templates, we now load the same
source PDF that the Documenso template uploads and fill its AcroForm
fields with values from EoiContext via pdf-lib. Field names mirror the
Documenso template's formValues keys exactly (Name, Email, Address,
Yacht Name, Length, Width, Draft, Berth Number + Lease_10 / Purchase
checkboxes), so both pathways produce equivalent legal documents — only
the renderer differs.
The form is left interactive (not flattened) so a recipient can still
adjust values before signing. Non-EOI templates (welcome letters,
acknowledgments, etc.) keep using the existing HTML→pdfme path.
Adds:
- pdf-lib direct dep
- src/lib/pdf/fill-eoi-form.ts — load + fill helpers, EOI_TEMPLATE_PDF_PATH
env override
- assets/ + README documenting the expected source PDF
- next.config outputFileTracingIncludes so the asset is bundled in the
standalone build
Tests: 8 new (4 fill-form unit + 2 source-PDF route + 2 fallback);
645/645 green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 13:38:02 +02:00
tslib@1.14.1 :
resolution : {integrity : sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
tslib@2.8.1 :
resolution : {integrity : sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tsx@4.21.0 :
resolution : {integrity : sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
engines : {node : '>=18.0.0' }
hasBin : true
type-check@0.4.0 :
resolution : {integrity : sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines : {node : '>= 0.8.0' }
typed-array-buffer@1.0.3 :
resolution : {integrity : sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines : {node : '>= 0.4' }
typed-array-byte-length@1.0.3 :
resolution : {integrity : sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
engines : {node : '>= 0.4' }
typed-array-byte-offset@1.0.4 :
resolution : {integrity : sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
engines : {node : '>= 0.4' }
typed-array-length@1.0.7 :
resolution : {integrity : sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines : {node : '>= 0.4' }
typescript@5.9.3 :
resolution : {integrity : sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines : {node : '>=14.17' }
hasBin : true
uc.micro@2.1.0 :
resolution : {integrity : sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
uid2@1.0.0 :
resolution : {integrity : sha512-+I6aJUv63YAcY9n4mQreLUt0d4lvwkkopDNmpomkAUz0fAkEMV9pRWxN0EjhW1YfRhcuyHg2v3mwddCDW1+LFQ==}
engines : {node : '>= 4.0.0' }
unbox-primitive@1.1.0 :
resolution : {integrity : sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines : {node : '>= 0.4' }
undici-types@6.21.0 :
resolution : {integrity : sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
unicode-properties@1.4.1 :
resolution : {integrity : sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==}
unicode-trie@2.0.0 :
resolution : {integrity : sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==}
unrs-resolver@1.11.1 :
resolution : {integrity : sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
update-browserslist-db@1.2.3 :
resolution : {integrity : sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin : true
peerDependencies :
browserslist : '>= 4.21.0'
uri-js@4.4.1 :
resolution : {integrity : sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
use-callback-ref@1.3.3 :
resolution : {integrity : sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
engines : {node : '>=10' }
peerDependencies :
'@types/react' : '*'
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
use-sidecar@1.1.3 :
resolution : {integrity : sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
engines : {node : '>=10' }
peerDependencies :
'@types/react' : '*'
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
peerDependenciesMeta :
'@types/react' :
optional : true
use-sync-external-store@1.6.0 :
resolution : {integrity : sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
peerDependencies :
react : ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
util-deprecate@1.0.2 :
resolution : {integrity : sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
uuid@11.1.0 :
resolution : {integrity : sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin : true
vary@1.1.2 :
resolution : {integrity : sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines : {node : '>= 0.8' }
2026-04-29 14:05:10 +02:00
vaul@1.1.2 :
resolution : {integrity : sha512-ZFkClGpWyI2WUQjdLJ/BaGuV6AVQiJ3uELGk3OYtP+B6yCO7Cmn9vPFXVJkRaGkOJu3m8bQMgtyzNHixULceQA==}
peerDependencies :
react : ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
react-dom : ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
victory-vendor@37.3.6 :
resolution : {integrity : sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ==}
virtualizedtableforantd4@1.3.2 :
resolution : {integrity : sha512-XRNhSINFKIywhDwzul9D7jam9l3RmampiVVPlJSpAbbjnON50or7h+Evy5TsgQtEzMxtG7Caofs73mwKCb2I6Q==}
peerDependencies :
antd : ^4.0.0 || ^5.0.0
react : ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom : ^16.8.0 || ^17.0.0 || ^18.0.0
vite@8.0.0 :
resolution : {integrity : sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==}
engines : {node : ^20.19.0 || >=22.12.0}
hasBin : true
peerDependencies :
'@types/node' : ^20.19.0 || >=22.12.0
'@vitejs/devtools' : ^0.0.0-alpha.31
esbuild : ^0.27.0
jiti : '>=1.21.0'
less : ^4.0.0
sass : ^1.70.0
sass-embedded : ^1.70.0
stylus : '>=0.54.8'
sugarss : ^5.0.0
terser : ^5.16.0
tsx : ^4.8.1
yaml : ^2.4.2
peerDependenciesMeta :
'@types/node' :
optional : true
'@vitejs/devtools' :
optional : true
esbuild :
optional : true
jiti :
optional : true
less :
optional : true
sass :
optional : true
sass-embedded :
optional : true
stylus :
optional : true
sugarss :
optional : true
terser :
optional : true
tsx :
optional : true
yaml :
optional : true
vitest@4.1.0 :
resolution : {integrity : sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==}
engines : {node : ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin : true
peerDependencies :
'@edge-runtime/vm' : '*'
'@opentelemetry/api' : ^1.9.0
'@types/node' : ^20.0.0 || ^22.0.0 || >=24.0.0
'@vitest/browser-playwright' : 4.1 .0
'@vitest/browser-preview' : 4.1 .0
'@vitest/browser-webdriverio' : 4.1 .0
'@vitest/ui' : 4.1 .0
happy-dom : '*'
jsdom : '*'
vite : ^6.0.0 || ^7.0.0 || ^8.0.0-0
peerDependenciesMeta :
'@edge-runtime/vm' :
optional : true
'@opentelemetry/api' :
optional : true
'@types/node' :
optional : true
'@vitest/browser-playwright' :
optional : true
'@vitest/browser-preview' :
optional : true
'@vitest/browser-webdriverio' :
optional : true
'@vitest/ui' :
optional : true
happy-dom :
optional : true
jsdom :
optional : true
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
wasm-feature-detect@1.8.0 :
resolution : {integrity : sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==}
webidl-conversions@3.0.1 :
resolution : {integrity : sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
webidl-conversions@7.0.0 :
resolution : {integrity : sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines : {node : '>=12' }
whatwg-url@14.2.0 :
resolution : {integrity : sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
engines : {node : '>=18' }
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
whatwg-url@5.0.0 :
resolution : {integrity : sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
which-boxed-primitive@1.1.1 :
resolution : {integrity : sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines : {node : '>= 0.4' }
which-builtin-type@1.2.1 :
resolution : {integrity : sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
engines : {node : '>= 0.4' }
which-collection@1.0.2 :
resolution : {integrity : sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
engines : {node : '>= 0.4' }
which-typed-array@1.1.20 :
resolution : {integrity : sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==}
engines : {node : '>= 0.4' }
which@2.0.2 :
resolution : {integrity : sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
engines : {node : '>= 8' }
hasBin : true
which@4.0.0 :
resolution : {integrity : sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
engines : {node : ^16.13.0 || >=18.0.0}
hasBin : true
why-is-node-running@2.3.0 :
resolution : {integrity : sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines : {node : '>=8' }
hasBin : true
word-wrap@1.2.5 :
resolution : {integrity : sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines : {node : '>=0.10.0' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
wrap-ansi@7.0.0 :
resolution : {integrity : sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
engines : {node : '>=10' }
wrap-ansi@8.1.0 :
resolution : {integrity : sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
engines : {node : '>=12' }
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
wrap-ansi@9.0.2 :
resolution : {integrity : sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines : {node : '>=18' }
wrappy@1.0.2 :
resolution : {integrity : sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
ws@8.18.3 :
resolution : {integrity : sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines : {node : '>=10.0.0' }
peerDependencies :
bufferutil : ^4.0.1
utf-8-validate : '>=5.0.2'
peerDependenciesMeta :
bufferutil :
optional : true
utf-8-validate :
optional : true
xml2js@0.6.2 :
resolution : {integrity : sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==}
engines : {node : '>=4.0.0' }
xmlbuilder@11.0.1 :
resolution : {integrity : sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
engines : {node : '>=4.0' }
xmlhttprequest-ssl@2.1.2 :
resolution : {integrity : sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
engines : {node : '>=0.4.0' }
yaml@2.8.2 :
resolution : {integrity : sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
engines : {node : '>= 14.6' }
hasBin : true
yocto-queue@0.1.0 :
resolution : {integrity : sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines : {node : '>=10' }
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
zip-stream@6.0.1 :
resolution : {integrity : sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
engines : {node : '>= 14' }
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
zlibjs@0.3.1 :
resolution : {integrity : sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w==}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
zod@3.25.76 :
resolution : {integrity : sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
zod@4.3.6 :
resolution : {integrity : sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==}
zustand@4.5.7 :
resolution : {integrity : sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==}
engines : {node : '>=12.7.0' }
peerDependencies :
'@types/react' : '>=16.8'
immer : '>=9.0.6'
react : '>=16.8'
peerDependenciesMeta :
'@types/react' :
optional : true
immer :
optional : true
react :
optional : true
zustand@5.0.11 :
resolution : {integrity : sha512-fdZY+dk7zn/vbWNCYmzZULHRrss0jx5pPFiOuMZ/5HJN6Yv3u+1Wswy/4MpZEkEGhtNH+pwxZB8OKgUBPzYAGg==}
engines : {node : '>=12.20.0' }
peerDependencies :
'@types/react' : '>=18.0.0'
immer : '>=9.0.6'
react : '>=18.0.0'
use-sync-external-store : '>=1.2.0'
peerDependenciesMeta :
'@types/react' :
optional : true
immer :
optional : true
react :
optional : true
use-sync-external-store :
optional : true
snapshots :
'@alloc/quick-lru@5.2.0' : {}
'@ant-design/colors@6.0.0' :
dependencies :
'@ctrl/tinycolor' : 3.6 .1
'@ant-design/colors@7.2.1' :
dependencies :
'@ant-design/fast-color' : 2.0 .6
'@ant-design/cssinjs-utils@1.1.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@ant-design/cssinjs' : 1.24 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@babel/runtime' : 7.28 .6
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@ant-design/cssinjs@1.24.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
'@emotion/hash' : 0.8 .0
'@emotion/unitless' : 0.7 .5
classnames : 2.5 .1
csstype : 3.2 .3
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
stylis : 4.3 .6
'@ant-design/fast-color@2.0.6' :
dependencies :
'@babel/runtime' : 7.28 .6
'@ant-design/icons-svg@4.4.2' : {}
'@ant-design/icons@4.8.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@ant-design/colors' : 6.0 .0
'@ant-design/icons-svg' : 4.4 .2
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
lodash : 4.17 .23
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@ant-design/icons@5.6.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@ant-design/colors' : 7.2 .1
'@ant-design/icons-svg' : 4.4 .2
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@ant-design/react-slick@1.1.2(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
json2mq : 0.2 .0
react : 19.2 .4
resize-observer-polyfill : 1.5 .1
throttle-debounce : 5.0 .2
'@babel/helper-string-parser@7.27.1' : {}
'@babel/helper-validator-identifier@7.28.5' : {}
'@babel/parser@7.29.0' :
dependencies :
'@babel/types' : 7.29 .0
'@babel/runtime@7.28.6' : {}
'@babel/types@7.29.0' :
dependencies :
'@babel/helper-string-parser' : 7.27 .1
'@babel/helper-validator-identifier' : 7.28 .5
'@bcoe/v8-coverage@1.0.2' : {}
'@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)' :
dependencies :
'@better-auth/utils' : 0.3 .1
'@better-fetch/fetch' : 1.1 .21
'@standard-schema/spec' : 1.1 .0
better-call : 1.3 .2 (zod@4.3.6)
jose : 6.2 .1
kysely : 0.28 .11
nanostores : 1.1 .1
zod : 4.3 .6
'@better-auth/drizzle-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.38.4(@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4))' :
dependencies :
'@better-auth/core' : 1.5 .5 (@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)
'@better-auth/utils' : 0.3 .1
optionalDependencies :
drizzle-orm : 0.38 .4 (@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4)
'@better-auth/kysely-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11)' :
dependencies :
'@better-auth/core' : 1.5 .5 (@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)
'@better-auth/utils' : 0.3 .1
kysely : 0.28 .11
'@better-auth/memory-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)' :
dependencies :
'@better-auth/core' : 1.5 .5 (@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)
'@better-auth/utils' : 0.3 .1
'@better-auth/mongo-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7))' :
dependencies :
'@better-auth/core' : 1.5 .5 (@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)
'@better-auth/utils' : 0.3 .1
mongodb : 7.1 .0 (socks@2.8.7)
'@better-auth/prisma-adapter@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)' :
dependencies :
'@better-auth/core' : 1.5 .5 (@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)
'@better-auth/utils' : 0.3 .1
'@better-auth/telemetry@1.5.5(@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))' :
dependencies :
'@better-auth/core' : 1.5 .5 (@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)
'@better-auth/utils' : 0.3 .1
'@better-fetch/fetch' : 1.1 .21
'@better-auth/utils@0.3.1' : {}
'@better-fetch/fetch@1.1.21' : {}
'@ctrl/tinycolor@3.6.1' : {}
'@date-fns/tz@1.4.1' : {}
'@dnd-kit/accessibility@3.1.1(react@19.2.4)' :
dependencies :
react : 19.2 .4
tslib : 2.8 .1
'@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@dnd-kit/accessibility' : 3.1 .1 (react@19.2.4)
'@dnd-kit/utilities' : 3.2 .2 (react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
tslib : 2.8 .1
'@dnd-kit/sortable@10.0.0(@dnd-kit/core@6.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)' :
dependencies :
'@dnd-kit/core' : 6.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@dnd-kit/utilities' : 3.2 .2 (react@19.2.4)
react : 19.2 .4
tslib : 2.8 .1
'@dnd-kit/utilities@3.2.2(react@19.2.4)' :
dependencies :
react : 19.2 .4
tslib : 2.8 .1
'@drizzle-team/brocli@0.10.2' : {}
'@emnapi/core@1.9.0' :
dependencies :
'@emnapi/wasi-threads' : 1.2 .0
tslib : 2.8 .1
optional : true
'@emnapi/runtime@1.9.0' :
dependencies :
tslib : 2.8 .1
optional : true
'@emnapi/wasi-threads@1.2.0' :
dependencies :
tslib : 2.8 .1
optional : true
'@emotion/hash@0.8.0' : {}
'@emotion/unitless@0.7.5' : {}
'@esbuild-kit/core-utils@3.3.2' :
dependencies :
esbuild : 0.18 .20
source-map-support : 0.5 .21
'@esbuild-kit/esm-loader@2.6.5' :
dependencies :
'@esbuild-kit/core-utils' : 3.3 .2
get-tsconfig : 4.13 .6
'@esbuild/aix-ppc64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/aix-ppc64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/aix-ppc64@0.27.4' :
optional : true
'@esbuild/android-arm64@0.18.20' :
optional : true
'@esbuild/android-arm64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/android-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/android-arm64@0.27.4' :
optional : true
'@esbuild/android-arm@0.18.20' :
optional : true
'@esbuild/android-arm@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/android-arm@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/android-arm@0.27.4' :
optional : true
'@esbuild/android-x64@0.18.20' :
optional : true
'@esbuild/android-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/android-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/android-x64@0.27.4' :
optional : true
'@esbuild/darwin-arm64@0.18.20' :
optional : true
'@esbuild/darwin-arm64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/darwin-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/darwin-arm64@0.27.4' :
optional : true
'@esbuild/darwin-x64@0.18.20' :
optional : true
'@esbuild/darwin-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/darwin-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/darwin-x64@0.27.4' :
optional : true
'@esbuild/freebsd-arm64@0.18.20' :
optional : true
'@esbuild/freebsd-arm64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/freebsd-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/freebsd-arm64@0.27.4' :
optional : true
'@esbuild/freebsd-x64@0.18.20' :
optional : true
'@esbuild/freebsd-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/freebsd-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/freebsd-x64@0.27.4' :
optional : true
'@esbuild/linux-arm64@0.18.20' :
optional : true
'@esbuild/linux-arm64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-arm64@0.27.4' :
optional : true
'@esbuild/linux-arm@0.18.20' :
optional : true
'@esbuild/linux-arm@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-arm@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-arm@0.27.4' :
optional : true
'@esbuild/linux-ia32@0.18.20' :
optional : true
'@esbuild/linux-ia32@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-ia32@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-ia32@0.27.4' :
optional : true
'@esbuild/linux-loong64@0.18.20' :
optional : true
'@esbuild/linux-loong64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-loong64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-loong64@0.27.4' :
optional : true
'@esbuild/linux-mips64el@0.18.20' :
optional : true
'@esbuild/linux-mips64el@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-mips64el@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-mips64el@0.27.4' :
optional : true
'@esbuild/linux-ppc64@0.18.20' :
optional : true
'@esbuild/linux-ppc64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-ppc64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-ppc64@0.27.4' :
optional : true
'@esbuild/linux-riscv64@0.18.20' :
optional : true
'@esbuild/linux-riscv64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-riscv64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-riscv64@0.27.4' :
optional : true
'@esbuild/linux-s390x@0.18.20' :
optional : true
'@esbuild/linux-s390x@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-s390x@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-s390x@0.27.4' :
optional : true
'@esbuild/linux-x64@0.18.20' :
optional : true
'@esbuild/linux-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/linux-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/linux-x64@0.27.4' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/netbsd-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/netbsd-arm64@0.27.4' :
optional : true
'@esbuild/netbsd-x64@0.18.20' :
optional : true
'@esbuild/netbsd-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/netbsd-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/netbsd-x64@0.27.4' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/openbsd-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/openbsd-arm64@0.27.4' :
optional : true
'@esbuild/openbsd-x64@0.18.20' :
optional : true
'@esbuild/openbsd-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/openbsd-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/openbsd-x64@0.27.4' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/openharmony-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/openharmony-arm64@0.27.4' :
optional : true
'@esbuild/sunos-x64@0.18.20' :
optional : true
'@esbuild/sunos-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/sunos-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/sunos-x64@0.27.4' :
optional : true
'@esbuild/win32-arm64@0.18.20' :
optional : true
'@esbuild/win32-arm64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/win32-arm64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/win32-arm64@0.27.4' :
optional : true
'@esbuild/win32-ia32@0.18.20' :
optional : true
'@esbuild/win32-ia32@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/win32-ia32@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/win32-ia32@0.27.4' :
optional : true
'@esbuild/win32-x64@0.18.20' :
optional : true
'@esbuild/win32-x64@0.19.12' :
optional : true
2026-04-08 15:31:33 -04:00
'@esbuild/win32-x64@0.25.12' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@esbuild/win32-x64@0.27.4' :
optional : true
'@eslint-community/eslint-utils@4.9.1(eslint@9.39.4(jiti@1.21.7))' :
dependencies :
eslint : 9.39 .4 (jiti@1.21.7)
eslint-visitor-keys : 3.4 .3
'@eslint-community/regexpp@4.12.2' : {}
'@eslint/config-array@0.21.2' :
dependencies :
'@eslint/object-schema' : 2.1 .7
debug : 4.4 .3
minimatch : 3.1 .5
transitivePeerDependencies :
- supports-color
'@eslint/config-helpers@0.4.2' :
dependencies :
'@eslint/core' : 0.17 .0
'@eslint/core@0.17.0' :
dependencies :
'@types/json-schema' : 7.0 .15
'@eslint/eslintrc@3.3.5' :
dependencies :
ajv : 6.14 .0
debug : 4.4 .3
espree : 10.4 .0
globals : 14.0 .0
ignore : 5.3 .2
import-fresh : 3.3 .1
js-yaml : 4.1 .1
minimatch : 3.1 .5
strip-json-comments : 3.1 .1
transitivePeerDependencies :
- supports-color
'@eslint/js@9.39.4' : {}
'@eslint/object-schema@2.1.7' : {}
'@eslint/plugin-kit@0.4.1' :
dependencies :
'@eslint/core' : 0.17 .0
levn : 0.4 .1
'@floating-ui/core@1.7.5' :
dependencies :
'@floating-ui/utils' : 0.2 .11
'@floating-ui/dom@1.7.6' :
dependencies :
'@floating-ui/core' : 1.7 .5
'@floating-ui/utils' : 0.2 .11
'@floating-ui/react-dom@2.1.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@floating-ui/dom' : 1.7 .6
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@floating-ui/utils@0.2.11' : {}
'@hookform/resolvers@3.10.0(react-hook-form@7.71.2(react@19.2.4))' :
dependencies :
react-hook-form : 7.71 .2 (react@19.2.4)
'@humanfs/core@0.19.1' : {}
'@humanfs/node@0.16.7' :
dependencies :
'@humanfs/core' : 0.19 .1
'@humanwhocodes/retry' : 0.4 .3
'@humanwhocodes/module-importer@1.0.1' : {}
'@humanwhocodes/retry@0.4.3' : {}
'@img/sharp-darwin-arm64@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-darwin-arm64' : 1.0 .4
optional : true
'@img/sharp-darwin-x64@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-darwin-x64' : 1.0 .4
optional : true
'@img/sharp-libvips-darwin-arm64@1.0.4' :
optional : true
'@img/sharp-libvips-darwin-x64@1.0.4' :
optional : true
'@img/sharp-libvips-linux-arm64@1.0.4' :
optional : true
'@img/sharp-libvips-linux-arm@1.0.5' :
optional : true
'@img/sharp-libvips-linux-s390x@1.0.4' :
optional : true
'@img/sharp-libvips-linux-x64@1.0.4' :
optional : true
'@img/sharp-libvips-linuxmusl-arm64@1.0.4' :
optional : true
'@img/sharp-libvips-linuxmusl-x64@1.0.4' :
optional : true
'@img/sharp-linux-arm64@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-linux-arm64' : 1.0 .4
optional : true
'@img/sharp-linux-arm@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-linux-arm' : 1.0 .5
optional : true
'@img/sharp-linux-s390x@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-linux-s390x' : 1.0 .4
optional : true
'@img/sharp-linux-x64@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-linux-x64' : 1.0 .4
optional : true
'@img/sharp-linuxmusl-arm64@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-linuxmusl-arm64' : 1.0 .4
optional : true
'@img/sharp-linuxmusl-x64@0.33.5' :
optionalDependencies :
'@img/sharp-libvips-linuxmusl-x64' : 1.0 .4
optional : true
'@img/sharp-wasm32@0.33.5' :
dependencies :
'@emnapi/runtime' : 1.9 .0
optional : true
'@img/sharp-win32-ia32@0.33.5' :
optional : true
'@img/sharp-win32-x64@0.33.5' :
optional : true
'@ioredis/commands@1.5.0' : {}
'@ioredis/commands@1.5.1' : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@isaacs/cliui@8.0.2' :
dependencies :
string-width : 5.1 .2
string-width-cjs : string-width@4.2.3
strip-ansi : 7.2 .0
strip-ansi-cjs : strip-ansi@6.0.1
wrap-ansi : 8.1 .0
wrap-ansi-cjs : wrap-ansi@7.0.0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@jridgewell/gen-mapping@0.3.13' :
dependencies :
'@jridgewell/sourcemap-codec' : 1.5 .5
'@jridgewell/trace-mapping' : 0.3 .31
'@jridgewell/resolve-uri@3.1.2' : {}
'@jridgewell/sourcemap-codec@1.5.5' : {}
'@jridgewell/trace-mapping@0.3.31' :
dependencies :
'@jridgewell/resolve-uri' : 3.1 .2
'@jridgewell/sourcemap-codec' : 1.5 .5
'@mongodb-js/saslprep@1.4.6' :
dependencies :
sparse-bitfield : 3.0 .3
'@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3' :
optional : true
'@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3' :
optional : true
'@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3' :
optional : true
'@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3' :
optional : true
'@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3' :
optional : true
'@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3' :
optional : true
'@napi-rs/wasm-runtime@0.2.12' :
dependencies :
'@emnapi/core' : 1.9 .0
'@emnapi/runtime' : 1.9 .0
'@tybys/wasm-util' : 0.10 .1
optional : true
'@napi-rs/wasm-runtime@1.1.1' :
dependencies :
'@emnapi/core' : 1.9 .0
'@emnapi/runtime' : 1.9 .0
'@tybys/wasm-util' : 0.10 .1
optional : true
'@next/env@15.1.0' : {}
'@next/eslint-plugin-next@15.1.0' :
dependencies :
fast-glob : 3.3 .1
'@next/swc-darwin-arm64@15.1.0' :
optional : true
'@next/swc-darwin-x64@15.1.0' :
optional : true
'@next/swc-linux-arm64-gnu@15.1.0' :
optional : true
'@next/swc-linux-arm64-musl@15.1.0' :
optional : true
'@next/swc-linux-x64-gnu@15.1.0' :
optional : true
'@next/swc-linux-x64-musl@15.1.0' :
optional : true
'@next/swc-win32-arm64-msvc@15.1.0' :
optional : true
'@next/swc-win32-x64-msvc@15.1.0' :
optional : true
'@noble/ciphers@2.1.1' : {}
'@noble/hashes@2.0.1' : {}
'@nodelib/fs.scandir@2.1.5' :
dependencies :
'@nodelib/fs.stat' : 2.0 .5
run-parallel : 1.2 .0
'@nodelib/fs.stat@2.0.5' : {}
'@nodelib/fs.walk@1.2.8' :
dependencies :
'@nodelib/fs.scandir' : 2.1 .5
fastq : 1.20 .1
'@nolyfill/is-core-module@1.0.39' : {}
'@oxc-project/runtime@0.115.0' : {}
'@oxc-project/types@0.115.0' : {}
'@pdf-lib/standard-fonts@1.0.0' :
dependencies :
pako : 1.0 .11
'@pdf-lib/upng@1.0.1' :
dependencies :
pako : 1.0 .11
'@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))' :
dependencies :
'@pdfme/pdf-lib' : 5.5 .8
acorn : 8.16 .0
antd : 5.29 .3 (date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
buffer : 6.0 .3
form-render : 2.5 .6 (@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
zod : 4.3 .6
'@pdfme/generator@5.5.8(@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)))(@pdfme/schemas@5.5.8(@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))))' :
dependencies :
'@pdfme/common' : 5.5 .8 (antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))
'@pdfme/pdf-lib' : 5.5 .8
'@pdfme/schemas' : 5.5 .8 (@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)))
fontkit : 2.0 .4
'@pdfme/pdf-lib@5.5.8' :
dependencies :
'@pdf-lib/standard-fonts' : 1.0 .0
'@pdf-lib/upng' : 1.0 .1
color : 4.2 .3
node-html-better-parser : 1.5 .8
pako : 2.1 .0
'@pdfme/schemas@5.5.8(@pdfme/common@5.5.8(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)))' :
dependencies :
'@pdfme/common' : 5.5 .8 (antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))
'@pdfme/pdf-lib' : 5.5 .8
air-datepicker : 3.6 .0
bwip-js : 4.8 .0
date-fns : 4.1 .0
fontkit : 2.0 .4
lucide : 0.552 .0
'@petamoriken/float16@3.9.3' : {}
'@pinojs/redact@0.4.0' : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@pkgjs/parseargs@0.11.0' :
optional : true
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@playwright/test@1.58.2' :
dependencies :
playwright : 1.58 .2
'@radix-ui/number@1.1.1' : {}
'@radix-ui/primitive@1.1.3' : {}
'@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-collapsible' : 1.1 .12 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-collection' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dialog' : 1.1 .15 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-avatar@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-context' : 1.1 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .4 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-is-hydrated' : 0.1 .0 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-previous' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-size' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-context@1.1.3(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dismissable-layer' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-focus-guards' : 1.1 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-focus-scope' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-portal' : 1.1 .9 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
aria-hidden : 1.2 .6
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-remove-scroll : 2.7 .2 (@types/react@19.2.14)(react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-direction@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-escape-keydown' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-menu' : 2.1 .16 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-icons@1.3.2(react@19.2.4)' :
dependencies :
react : 19.2 .4
'@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-label@2.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-primitive' : 2.1 .4 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-collection' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dismissable-layer' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-focus-guards' : 1.1 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-focus-scope' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-popper' : 1.2 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-portal' : 1.1 .9 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-roving-focus' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
aria-hidden : 1.2 .6
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-remove-scroll : 2.7 .2 (@types/react@19.2.14)(react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-collection' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dismissable-layer' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-previous' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-visually-hidden' : 1.2 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dismissable-layer' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-focus-guards' : 1.1 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-focus-scope' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-popper' : 1.2 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-portal' : 1.1 .9 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
aria-hidden : 1.2 .6
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-remove-scroll : 2.7 .2 (@types/react@19.2.14)(react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@floating-ui/react-dom' : 2.1 .8 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-arrow' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-rect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-size' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/rect' : 1.1 .1
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-slot' : 1.2 .4 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-progress@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-context' : 1.1 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .4 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-roving-focus' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-previous' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-size' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-collection' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/number' : 1.1 .1
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-select@2.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/number' : 1.1 .1
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-collection' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dismissable-layer' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-focus-guards' : 1.1 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-focus-scope' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-popper' : 1.2 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-portal' : 1.1 .9 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-previous' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-visually-hidden' : 1.2 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
aria-hidden : 1.2 .6
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-remove-scroll : 2.7 .2 (@types/react@19.2.14)(react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-separator@1.1.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-primitive' : 2.1 .4 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/number' : 1.1 .1
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-collection' : 1.1 .7 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-previous' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-size' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-slot@1.2.4(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-previous' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-size' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-direction' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-roving-focus' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/primitive' : 1.1 .3
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-context' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dismissable-layer' : 1.1 .11 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-popper' : 1.2 .8 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-portal' : 1.1 .9 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-presence' : 1.1 .5 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-slot' : 1.2 .3 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-controllable-state' : 1.2 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-visually-hidden' : 1.2 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/react-use-effect-event' : 0.0 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/react-use-callback-ref' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
use-sync-external-store : 1.6 .0 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-previous@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/rect' : 1.1 .1
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.4)' :
dependencies :
'@radix-ui/react-use-layout-effect' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
react : 19.2 .4
optionalDependencies :
'@types/react' : 19.2 .14
'@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@radix-ui/react-primitive' : 2.1 .3 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
'@types/react-dom' : 19.2 .3 (@types/react@19.2.14)
'@radix-ui/rect@1.1.1' : {}
'@rc-component/async-validator@5.1.0' :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/color-picker@2.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@ant-design/fast-color' : 2.0 .6
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@rc-component/context@1.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@rc-component/mini-decimal@1.1.0' :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/mutate-observer@1.1.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@rc-component/portal@1.1.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@rc-component/qrcode@1.1.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@rc-component/tour@1.15.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/portal' : 1.1 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@rc-component/trigger@2.3.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/portal' : 1.1 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@reduxjs/toolkit@2.11.2(react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4)' :
dependencies :
'@standard-schema/spec' : 1.1 .0
'@standard-schema/utils' : 0.3 .0
immer : 11.1 .4
redux : 5.0 .1
redux-thunk : 3.1 .0 (redux@5.0.1)
reselect : 5.1 .1
optionalDependencies :
react : 19.2 .4
react-redux : 9.2 .0 (@types/react@19.2.14)(react@19.2.4)(redux@5.0.1)
'@rolldown/binding-android-arm64@1.0.0-rc.9' :
optional : true
'@rolldown/binding-darwin-arm64@1.0.0-rc.9' :
optional : true
'@rolldown/binding-darwin-x64@1.0.0-rc.9' :
optional : true
'@rolldown/binding-freebsd-x64@1.0.0-rc.9' :
optional : true
'@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9' :
optional : true
'@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9' :
optional : true
'@rolldown/binding-linux-arm64-musl@1.0.0-rc.9' :
optional : true
'@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9' :
optional : true
'@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9' :
optional : true
'@rolldown/binding-linux-x64-gnu@1.0.0-rc.9' :
optional : true
'@rolldown/binding-linux-x64-musl@1.0.0-rc.9' :
optional : true
'@rolldown/binding-openharmony-arm64@1.0.0-rc.9' :
optional : true
'@rolldown/binding-wasm32-wasi@1.0.0-rc.9' :
dependencies :
'@napi-rs/wasm-runtime' : 1.1 .1
optional : true
'@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9' :
optional : true
'@rolldown/binding-win32-x64-msvc@1.0.0-rc.9' :
optional : true
'@rolldown/pluginutils@1.0.0-rc.9' : {}
'@rtsao/scc@1.1.0' : {}
'@rushstack/eslint-patch@1.16.1' : {}
'@selderee/plugin-htmlparser2@0.11.0' :
dependencies :
domhandler : 5.0 .3
selderee : 0.11 .0
'@socket.io/component-emitter@3.1.2' : {}
'@socket.io/redis-adapter@8.3.0(socket.io-adapter@2.5.6)' :
dependencies :
debug : 4.3 .7
notepack.io : 3.0 .1
socket.io-adapter : 2.5 .6
uid2 : 1.0 .0
transitivePeerDependencies :
- supports-color
'@standard-schema/spec@1.1.0' : {}
'@standard-schema/utils@0.3.0' : {}
'@swc/counter@0.1.3' : {}
'@swc/helpers@0.5.15' :
dependencies :
tslib : 2.8 .1
'@tabby_ai/hijri-converter@1.0.5' : {}
'@tanstack/query-core@5.90.20' : {}
'@tanstack/query-devtools@5.93.0' : {}
'@tanstack/react-query-devtools@5.91.3(@tanstack/react-query@5.90.21(react@19.2.4))(react@19.2.4)' :
dependencies :
'@tanstack/query-devtools' : 5.93 .0
'@tanstack/react-query' : 5.90 .21 (react@19.2.4)
react : 19.2 .4
'@tanstack/react-query@5.90.21(react@19.2.4)' :
dependencies :
'@tanstack/query-core' : 5.90 .20
react : 19.2 .4
'@tanstack/react-table@8.21.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4)' :
dependencies :
'@tanstack/table-core' : 8.21 .3
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
'@tanstack/table-core@8.21.3' : {}
'@tybys/wasm-util@0.10.1' :
dependencies :
tslib : 2.8 .1
optional : true
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@types/archiver@7.0.0' :
dependencies :
'@types/readdir-glob' : 1.1 .5
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@types/chai@5.2.3' :
dependencies :
'@types/deep-eql' : 4.0 .2
assertion-error : 2.0 .1
'@types/cors@2.8.19' :
dependencies :
'@types/node' : 22.19 .15
'@types/d3-array@3.2.2' : {}
'@types/d3-color@3.1.3' : {}
'@types/d3-ease@3.0.2' : {}
'@types/d3-interpolate@3.0.4' :
dependencies :
'@types/d3-color' : 3.1 .3
'@types/d3-path@3.1.1' : {}
'@types/d3-scale@4.0.9' :
dependencies :
'@types/d3-time' : 3.0 .4
'@types/d3-shape@3.1.8' :
dependencies :
'@types/d3-path' : 3.1 .1
'@types/d3-time@3.0.4' : {}
'@types/d3-timer@3.0.2' : {}
'@types/deep-eql@4.0.2' : {}
'@types/estree@1.0.8' : {}
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
'@types/iso-3166-2@1.0.4' : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@types/js-cookie@3.0.6' : {}
'@types/json-schema@7.0.15' : {}
'@types/json5@0.0.29' : {}
'@types/mailparser@3.4.6' :
dependencies :
'@types/node' : 22.19 .15
iconv-lite : 0.6 .3
'@types/node@22.19.15' :
dependencies :
undici-types : 6.21 .0
'@types/nodemailer@6.4.23' :
dependencies :
'@types/node' : 22.19 .15
'@types/react-dom@19.2.3(@types/react@19.2.14)' :
dependencies :
'@types/react' : 19.2 .14
'@types/react@19.2.14' :
dependencies :
csstype : 3.2 .3
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
'@types/readdir-glob@1.1.5' :
dependencies :
'@types/node' : 22.19 .15
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@types/use-sync-external-store@0.0.6' : {}
'@types/webidl-conversions@7.0.3' : {}
'@types/whatwg-url@13.0.0' :
dependencies :
'@types/webidl-conversions' : 7.0 .3
'@types/ws@8.18.1' :
dependencies :
'@types/node' : 22.19 .15
'@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)' :
dependencies :
'@eslint-community/regexpp' : 4.12 .2
'@typescript-eslint/parser' : 8.57 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/scope-manager' : 8.57 .0
'@typescript-eslint/type-utils' : 8.57 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/utils' : 8.57 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/visitor-keys' : 8.57 .0
eslint : 9.39 .4 (jiti@1.21.7)
ignore : 7.0 .5
natural-compare : 1.4 .0
ts-api-utils : 2.4 .0 (typescript@5.9.3)
typescript : 5.9 .3
transitivePeerDependencies :
- supports-color
'@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)' :
dependencies :
'@typescript-eslint/scope-manager' : 8.57 .0
'@typescript-eslint/types' : 8.57 .0
'@typescript-eslint/typescript-estree' : 8.57 .0 (typescript@5.9.3)
'@typescript-eslint/visitor-keys' : 8.57 .0
debug : 4.4 .3
eslint : 9.39 .4 (jiti@1.21.7)
typescript : 5.9 .3
transitivePeerDependencies :
- supports-color
'@typescript-eslint/project-service@8.57.0(typescript@5.9.3)' :
dependencies :
'@typescript-eslint/tsconfig-utils' : 8.57 .0 (typescript@5.9.3)
'@typescript-eslint/types' : 8.57 .0
debug : 4.4 .3
typescript : 5.9 .3
transitivePeerDependencies :
- supports-color
'@typescript-eslint/scope-manager@8.57.0' :
dependencies :
'@typescript-eslint/types' : 8.57 .0
'@typescript-eslint/visitor-keys' : 8.57 .0
'@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.9.3)' :
dependencies :
typescript : 5.9 .3
'@typescript-eslint/type-utils@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)' :
dependencies :
'@typescript-eslint/types' : 8.57 .0
'@typescript-eslint/typescript-estree' : 8.57 .0 (typescript@5.9.3)
'@typescript-eslint/utils' : 8.57 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
debug : 4.4 .3
eslint : 9.39 .4 (jiti@1.21.7)
ts-api-utils : 2.4 .0 (typescript@5.9.3)
typescript : 5.9 .3
transitivePeerDependencies :
- supports-color
'@typescript-eslint/types@8.57.0' : {}
'@typescript-eslint/typescript-estree@8.57.0(typescript@5.9.3)' :
dependencies :
'@typescript-eslint/project-service' : 8.57 .0 (typescript@5.9.3)
'@typescript-eslint/tsconfig-utils' : 8.57 .0 (typescript@5.9.3)
'@typescript-eslint/types' : 8.57 .0
'@typescript-eslint/visitor-keys' : 8.57 .0
debug : 4.4 .3
minimatch : 10.2 .4
semver : 7.7 .4
tinyglobby : 0.2 .15
ts-api-utils : 2.4 .0 (typescript@5.9.3)
typescript : 5.9 .3
transitivePeerDependencies :
- supports-color
'@typescript-eslint/utils@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)' :
dependencies :
'@eslint-community/eslint-utils' : 4.9 .1 (eslint@9.39.4(jiti@1.21.7))
'@typescript-eslint/scope-manager' : 8.57 .0
'@typescript-eslint/types' : 8.57 .0
'@typescript-eslint/typescript-estree' : 8.57 .0 (typescript@5.9.3)
eslint : 9.39 .4 (jiti@1.21.7)
typescript : 5.9 .3
transitivePeerDependencies :
- supports-color
'@typescript-eslint/visitor-keys@8.57.0' :
dependencies :
'@typescript-eslint/types' : 8.57 .0
eslint-visitor-keys : 5.0 .1
'@unrs/resolver-binding-android-arm-eabi@1.11.1' :
optional : true
'@unrs/resolver-binding-android-arm64@1.11.1' :
optional : true
'@unrs/resolver-binding-darwin-arm64@1.11.1' :
optional : true
'@unrs/resolver-binding-darwin-x64@1.11.1' :
optional : true
'@unrs/resolver-binding-freebsd-x64@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-arm-musleabihf@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-arm64-gnu@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-arm64-musl@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-ppc64-gnu@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-riscv64-gnu@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-riscv64-musl@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-s390x-gnu@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-x64-gnu@1.11.1' :
optional : true
'@unrs/resolver-binding-linux-x64-musl@1.11.1' :
optional : true
'@unrs/resolver-binding-wasm32-wasi@1.11.1' :
dependencies :
'@napi-rs/wasm-runtime' : 0.2 .12
optional : true
'@unrs/resolver-binding-win32-arm64-msvc@1.11.1' :
optional : true
'@unrs/resolver-binding-win32-ia32-msvc@1.11.1' :
optional : true
'@unrs/resolver-binding-win32-x64-msvc@1.11.1' :
optional : true
2026-04-08 15:31:33 -04:00
'@vitest/coverage-v8@4.1.0(vitest@4.1.0(@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)))' :
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
dependencies :
'@bcoe/v8-coverage' : 1.0 .2
'@vitest/utils' : 4.1 .0
ast-v8-to-istanbul : 1.0 .0
istanbul-lib-coverage : 3.2 .2
istanbul-lib-report : 3.0 .1
istanbul-reports : 3.2 .0
magicast : 0.5 .2
obug : 2.1 .1
std-env : 4.0 .0
tinyrainbow : 3.1 .0
2026-04-08 15:31:33 -04:00
vitest : 4.1 .0 (@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@vitest/expect@4.1.0' :
dependencies :
'@standard-schema/spec' : 1.1 .0
'@types/chai' : 5.2 .3
'@vitest/spy' : 4.1 .0
'@vitest/utils' : 4.1 .0
chai : 6.2 .2
tinyrainbow : 3.1 .0
2026-04-08 15:31:33 -04:00
'@vitest/mocker@4.1.0(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))' :
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
dependencies :
'@vitest/spy' : 4.1 .0
estree-walker : 3.0 .3
magic-string : 0.30 .21
optionalDependencies :
2026-04-08 15:31:33 -04:00
vite : 8.0 .0 (@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@vitest/pretty-format@4.1.0' :
dependencies :
tinyrainbow : 3.1 .0
'@vitest/runner@4.1.0' :
dependencies :
'@vitest/utils' : 4.1 .0
pathe : 2.0 .3
'@vitest/snapshot@4.1.0' :
dependencies :
'@vitest/pretty-format' : 4.1 .0
'@vitest/utils' : 4.1 .0
magic-string : 0.30 .21
pathe : 2.0 .3
'@vitest/spy@4.1.0' : {}
'@vitest/utils@4.1.0' :
dependencies :
'@vitest/pretty-format' : 4.1 .0
convert-source-map : 2.0 .0
tinyrainbow : 3.1 .0
'@zone-eu/mailsplit@5.4.8' :
dependencies :
libbase64 : 1.3 .0
libmime : 5.3 .7
libqp : 2.1 .1
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
abort-controller@3.0.0 :
dependencies :
event-target-shim : 5.0 .1
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
accepts@1.3.8 :
dependencies :
mime-types : 2.1 .35
negotiator : 0.6 .3
acorn-jsx@5.3.2(acorn@8.16.0) :
dependencies :
acorn : 8.16 .0
acorn@8.16.0 : {}
add-dom-event-listener@1.1.0 :
dependencies :
object-assign : 4.1 .1
ahooks@3.9.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@types/js-cookie' : 3.0 .6
dayjs : 1.11 .20
intersection-observer : 0.12 .2
js-cookie : 3.0 .5
lodash : 4.17 .23
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-fast-compare : 3.2 .2
resize-observer-polyfill : 1.5 .1
screenfull : 5.2 .0
tslib : 2.8 .1
air-datepicker@3.6.0 : {}
ajv@6.14.0 :
dependencies :
fast-deep-equal : 3.1 .3
fast-json-stable-stringify : 2.1 .0
json-schema-traverse : 0.4 .1
uri-js : 4.4 .1
ansi-escapes@7.3.0 :
dependencies :
environment : 1.1 .0
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
ansi-regex@5.0.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
ansi-regex@6.2.2 : {}
ansi-styles@4.3.0 :
dependencies :
color-convert : 2.0 .1
ansi-styles@6.2.3 : {}
antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@ant-design/colors' : 7.2 .1
'@ant-design/cssinjs' : 1.24 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@ant-design/cssinjs-utils' : 1.1 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@ant-design/fast-color' : 2.0 .6
'@ant-design/icons' : 5.6 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@ant-design/react-slick' : 1.1 .2 (react@19.2.4)
'@babel/runtime' : 7.28 .6
'@rc-component/color-picker' : 2.0 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@rc-component/mutate-observer' : 1.1 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@rc-component/qrcode' : 1.1 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@rc-component/tour' : 1.15 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
copy-to-clipboard : 3.3 .3
dayjs : 1.11 .20
rc-cascader : 3.34 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-checkbox : 3.5 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-collapse : 3.9 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-dialog : 9.6 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-drawer : 7.3 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-dropdown : 4.2 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-field-form : 2.7 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-image : 7.12 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-input : 1.8 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-input-number : 9.5 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-mentions : 2.20 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-menu : 9.16 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-notification : 5.6 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-pagination : 5.1 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-picker : 4.11 .3 (date-fns@4.1.0)(dayjs@1.11.20)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-progress : 4.0 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-rate : 2.13 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-segmented : 2.7 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-select : 14.16 .8 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-slider : 11.1 .9 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-steps : 6.0 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-switch : 4.1 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-table : 7.54 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-tabs : 15.7 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-textarea : 1.10 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-tooltip : 6.4 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-tree : 5.13 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-tree-select : 5.27 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-upload : 4.11 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
scroll-into-view-if-needed : 3.1 .0
throttle-debounce : 5.0 .2
transitivePeerDependencies :
- date-fns
- luxon
- moment
any-promise@1.3.0 : {}
anymatch@3.1.3 :
dependencies :
normalize-path : 3.0 .0
picomatch : 2.3 .1
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
archiver-utils@5.0.2 :
dependencies :
glob : 10.5 .0
graceful-fs : 4.2 .11
is-stream : 2.0 .1
lazystream : 1.0 .1
lodash : 4.17 .23
normalize-path : 3.0 .0
readable-stream : 4.7 .0
archiver@7.0.1 :
dependencies :
archiver-utils : 5.0 .2
async : 3.2 .6
buffer-crc32 : 1.0 .0
readable-stream : 4.7 .0
readdir-glob : 1.1 .3
tar-stream : 3.1 .8
zip-stream : 6.0 .1
transitivePeerDependencies :
- bare-abort-controller
- bare-buffer
- react-native-b4a
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
arg@5.0.2 : {}
argparse@2.0.1 : {}
aria-hidden@1.2.6 :
dependencies :
tslib : 2.8 .1
aria-query@5.3.2 : {}
array-buffer-byte-length@1.0.2 :
dependencies :
call-bound : 1.0 .4
is-array-buffer : 3.0 .5
array-includes@3.1.9 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-object-atoms : 1.1 .1
get-intrinsic : 1.3 .0
is-string : 1.1 .1
math-intrinsics : 1.1 .0
array.prototype.findlast@1.2.5 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-errors : 1.3 .0
es-object-atoms : 1.1 .1
es-shim-unscopables : 1.1 .0
array.prototype.findlastindex@1.2.6 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-errors : 1.3 .0
es-object-atoms : 1.1 .1
es-shim-unscopables : 1.1 .0
array.prototype.flat@1.3.3 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-shim-unscopables : 1.1 .0
array.prototype.flatmap@1.3.3 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-shim-unscopables : 1.1 .0
array.prototype.tosorted@1.1.4 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-errors : 1.3 .0
es-shim-unscopables : 1.1 .0
arraybuffer.prototype.slice@1.0.4 :
dependencies :
array-buffer-byte-length : 1.0 .2
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-errors : 1.3 .0
get-intrinsic : 1.3 .0
is-array-buffer : 3.0 .5
assertion-error@2.0.1 : {}
ast-types-flow@0.0.8 : {}
ast-v8-to-istanbul@1.0.0 :
dependencies :
'@jridgewell/trace-mapping' : 0.3 .31
estree-walker : 3.0 .3
js-tokens : 10.0 .0
async-function@1.0.0 : {}
async-validator@3.5.2 : {}
async@3.2.6 : {}
atomic-sleep@1.0.0 : {}
autoprefixer@10.4.27(postcss@8.5.8) :
dependencies :
browserslist : 4.28 .1
caniuse-lite : 1.0 .30001778
fraction.js : 5.3 .4
picocolors : 1.1 .1
postcss : 8.5 .8
postcss-value-parser : 4.2 .0
available-typed-arrays@1.0.7 :
dependencies :
possible-typed-array-names : 1.1 .0
axe-core@4.11.1 : {}
axobject-query@4.1.0 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
b4a@1.8.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
babel-runtime@6.26.0 :
dependencies :
core-js : 2.6 .12
regenerator-runtime : 0.11 .1
balanced-match@1.0.2 : {}
balanced-match@4.0.4 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
bare-events@2.8.2 : {}
bare-fs@4.7.1 :
dependencies :
bare-events : 2.8 .2
bare-path : 3.0 .0
bare-stream : 2.13 .1 (bare-events@2.8.2)
bare-url : 2.4 .2
fast-fifo : 1.3 .2
transitivePeerDependencies :
- bare-abort-controller
- react-native-b4a
bare-os@3.9.0 : {}
bare-path@3.0.0 :
dependencies :
bare-os : 3.9 .0
bare-stream@2.13.1(bare-events@2.8.2) :
dependencies :
streamx : 2.25 .0
teex : 1.0 .1
optionalDependencies :
bare-events : 2.8 .2
transitivePeerDependencies :
- react-native-b4a
bare-url@2.4.2 :
dependencies :
bare-path : 3.0 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
base64-js@1.5.1 : {}
base64id@2.0.0 : {}
baseline-browser-mapping@2.10.8 : {}
2026-04-08 15:31:33 -04:00
better-auth@1.5.5(drizzle-kit@0.30.6)(drizzle-orm@0.38.4(@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4))(mongodb@7.1.0(socks@2.8.7))(next@15.1.0(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0(@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))) :
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
dependencies :
'@better-auth/core' : 1.5 .5 (@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)
'@better-auth/drizzle-adapter' : 1.5 .5 (@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.38.4(@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4))
'@better-auth/kysely-adapter' : 1.5 .5 (@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11)
'@better-auth/memory-adapter' : 1.5 .5 (@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)
'@better-auth/mongo-adapter' : 1.5 .5 (@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0(socks@2.8.7))
'@better-auth/prisma-adapter' : 1.5 .5 (@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)
'@better-auth/telemetry' : 1.5 .5 (@better-auth/core@1.5.5(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(better-call@1.3.2(zod@3.25.76))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1))
'@better-auth/utils' : 0.3 .1
'@better-fetch/fetch' : 1.1 .21
'@noble/ciphers' : 2.1 .1
'@noble/hashes' : 2.0 .1
better-call : 1.3 .2 (zod@4.3.6)
defu : 6.1 .4
jose : 6.2 .1
kysely : 0.28 .11
nanostores : 1.1 .1
zod : 4.3 .6
optionalDependencies :
drizzle-kit : 0.30 .6
drizzle-orm : 0.38 .4 (@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4)
mongodb : 7.1 .0 (socks@2.8.7)
next : 15.1 .0 (@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
2026-04-08 15:31:33 -04:00
vitest : 4.1 .0 (@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
transitivePeerDependencies :
- '@cloudflare/workers-types'
better-call@1.3.2(zod@4.3.6) :
dependencies :
'@better-auth/utils' : 0.3 .1
'@better-fetch/fetch' : 1.1 .21
rou3 : 0.7 .12
set-cookie-parser : 3.0 .1
optionalDependencies :
zod : 4.3 .6
binary-extensions@2.3.0 : {}
block-stream2@2.1.0 :
dependencies :
readable-stream : 3.6 .2
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
bmp-js@0.1.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
brace-expansion@1.1.12 :
dependencies :
balanced-match : 1.0 .2
concat-map : 0.0 .1
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
brace-expansion@2.1.0 :
dependencies :
balanced-match : 1.0 .2
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
brace-expansion@5.0.4 :
dependencies :
balanced-match : 4.0 .4
braces@3.0.3 :
dependencies :
fill-range : 7.1 .1
brotli@1.3.3 :
dependencies :
base64-js : 1.5 .1
browser-or-node@2.1.1 : {}
browserslist@4.28.1 :
dependencies :
baseline-browser-mapping : 2.10 .8
caniuse-lite : 1.0 .30001778
electron-to-chromium : 1.5 .313
node-releases : 2.0 .36
update-browserslist-db : 1.2 .3 (browserslist@4.28.1)
bson@7.2.0 : {}
buffer-crc32@1.0.0 : {}
buffer-from@1.1.2 : {}
buffer@6.0.3 :
dependencies :
base64-js : 1.5 .1
ieee754 : 1.2 .1
bullmq@5.71.0 :
dependencies :
cron-parser : 4.9 .0
ioredis : 5.9 .3
msgpackr : 1.11 .5
node-abort-controller : 3.1 .1
semver : 7.7 .4
tslib : 2.8 .1
uuid : 11.1 .0
transitivePeerDependencies :
- supports-color
busboy@1.6.0 :
dependencies :
streamsearch : 1.1 .0
bwip-js@4.8.0 : {}
call-bind-apply-helpers@1.0.2 :
dependencies :
es-errors : 1.3 .0
function-bind : 1.1 .2
call-bind@1.0.8 :
dependencies :
call-bind-apply-helpers : 1.0 .2
es-define-property : 1.0 .1
get-intrinsic : 1.3 .0
set-function-length : 1.2 .2
call-bound@1.0.4 :
dependencies :
call-bind-apply-helpers : 1.0 .2
get-intrinsic : 1.3 .0
callsites@3.1.0 : {}
camelcase-css@2.0.1 : {}
caniuse-lite@1.0.30001778 : {}
chai@6.2.2 : {}
chalk@4.1.2 :
dependencies :
ansi-styles : 4.3 .0
supports-color : 7.2 .0
chalk@5.6.2 : {}
chokidar@3.6.0 :
dependencies :
anymatch : 3.1 .3
braces : 3.0 .3
glob-parent : 5.1 .2
is-binary-path : 2.1 .0
is-glob : 4.0 .3
normalize-path : 3.0 .0
readdirp : 3.6 .0
optionalDependencies :
fsevents : 2.3 .3
class-variance-authority@0.7.1 :
dependencies :
clsx : 2.1 .1
classnames@2.5.1 : {}
cli-cursor@5.0.0 :
dependencies :
restore-cursor : 5.1 .0
cli-truncate@4.0.0 :
dependencies :
slice-ansi : 5.0 .0
string-width : 7.2 .0
client-only@0.0.1 : {}
clone@2.1.2 : {}
clsx@2.1.1 : {}
cluster-key-slot@1.1.2 : {}
cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@radix-ui/react-compose-refs' : 1.1 .2 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-dialog' : 1.1 .15 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@radix-ui/react-id' : 1.1 .1 (@types/react@19.2.14)(react@19.2.4)
'@radix-ui/react-primitive' : 2.1 .4 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
transitivePeerDependencies :
- '@types/react'
- '@types/react-dom'
color-convert@1.9.3 :
dependencies :
color-name : 1.1 .3
color-convert@2.0.1 :
dependencies :
color-name : 1.1 .4
color-name@1.1.3 : {}
color-name@1.1.4 : {}
color-string@1.9.1 :
dependencies :
color-name : 1.1 .4
simple-swizzle : 0.2 .4
color@3.2.1 :
dependencies :
color-convert : 1.9 .3
color-string : 1.9 .1
color@4.2.3 :
dependencies :
color-convert : 2.0 .1
color-string : 1.9 .1
colorette@2.0.20 : {}
commander@13.1.0 : {}
commander@4.1.1 : {}
component-classes@1.2.6 :
dependencies :
component-indexof : 0.0 .3
component-indexof@0.0.3 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
compress-commons@6.0.2 :
dependencies :
crc-32 : 1.2 .2
crc32-stream : 6.0 .0
is-stream : 2.0 .1
normalize-path : 3.0 .0
readable-stream : 4.7 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
compute-scroll-into-view@3.1.1 : {}
concat-map@0.0.1 : {}
convert-source-map@2.0.0 : {}
cookie@0.7.2 : {}
copy-to-clipboard@3.3.3 :
dependencies :
toggle-selection : 1.0 .6
core-js@2.6.12 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
core-util-is@1.0.3 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
cors@2.8.6 :
dependencies :
object-assign : 4.1 .1
vary : 1.1 .2
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
crc-32@1.2.2 : {}
crc32-stream@6.0.0 :
dependencies :
crc-32 : 1.2 .2
readable-stream : 4.7 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
create-react-class@15.7.0 :
dependencies :
loose-envify : 1.4 .0
object-assign : 4.1 .1
cron-parser@4.9.0 :
dependencies :
luxon : 3.7 .2
cross-spawn@7.0.6 :
dependencies :
path-key : 3.1 .1
shebang-command : 2.0 .0
which : 2.0 .2
css-animation@1.6.1 :
dependencies :
babel-runtime : 6.26 .0
component-classes : 1.2 .6
cssesc@3.0.0 : {}
csstype@3.2.3 : {}
d3-array@3.2.4 :
dependencies :
internmap : 2.0 .3
d3-color@3.1.0 : {}
d3-ease@3.0.1 : {}
d3-format@3.1.2 : {}
d3-interpolate@3.0.1 :
dependencies :
d3-color : 3.1 .0
d3-path@3.1.0 : {}
d3-scale@4.0.2 :
dependencies :
d3-array : 3.2 .4
d3-format : 3.1 .2
d3-interpolate : 3.0 .1
d3-time : 3.1 .0
d3-time-format : 4.1 .0
d3-shape@3.2.0 :
dependencies :
d3-path : 3.1 .0
d3-time-format@4.1.0 :
dependencies :
d3-time : 3.1 .0
d3-time@3.1.0 :
dependencies :
d3-array : 3.2 .4
d3-timer@3.0.1 : {}
damerau-levenshtein@1.0.8 : {}
data-view-buffer@1.0.2 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
is-data-view : 1.0 .2
data-view-byte-length@1.0.2 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
is-data-view : 1.0 .2
data-view-byte-offset@1.0.1 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
is-data-view : 1.0 .2
date-fns-jalali@4.1.0-0 : {}
date-fns@4.1.0 : {}
dateformat@4.6.3 : {}
dayjs@1.11.20 : {}
debug@3.2.7 :
dependencies :
ms : 2.1 .3
debug@4.3.7 :
dependencies :
ms : 2.1 .3
debug@4.4.3 :
dependencies :
ms : 2.1 .3
decimal.js-light@2.5.1 : {}
decode-uri-component@0.2.2 : {}
deep-is@0.1.4 : {}
deepmerge@4.3.1 : {}
define-data-property@1.1.4 :
dependencies :
es-define-property : 1.0 .1
es-errors : 1.3 .0
gopd : 1.2 .0
define-properties@1.2.1 :
dependencies :
define-data-property : 1.1 .4
has-property-descriptors : 1.0 .2
object-keys : 1.1 .1
defu@6.1.4 : {}
denque@2.1.0 : {}
detect-libc@2.1.2 : {}
detect-node-es@1.1.0 : {}
dfa@1.2.0 : {}
didyoumean@1.2.2 : {}
dlv@1.1.3 : {}
doctrine@2.1.0 :
dependencies :
esutils : 2.0 .3
dom-align@1.12.4 : {}
dom-serializer@2.0.0 :
dependencies :
domelementtype : 2.3 .0
domhandler : 5.0 .3
entities : 4.5 .0
domelementtype@2.3.0 : {}
domhandler@5.0.3 :
dependencies :
domelementtype : 2.3 .0
domutils@3.2.2 :
dependencies :
dom-serializer : 2.0 .0
domelementtype : 2.3 .0
domhandler : 5.0 .3
dotenv@17.3.1 : {}
drizzle-kit@0.30.6 :
dependencies :
'@drizzle-team/brocli' : 0.10 .2
'@esbuild-kit/esm-loader' : 2.6 .5
esbuild : 0.19 .12
esbuild-register : 3.6 .0 (esbuild@0.19.12)
gel : 2.2 .0
transitivePeerDependencies :
- supports-color
drizzle-orm@0.38.4(@types/react@19.2.14)(kysely@0.28.11)(postgres@3.4.8)(react@19.2.4) :
optionalDependencies :
'@types/react' : 19.2 .14
kysely : 0.28 .11
postgres : 3.4 .8
react : 19.2 .4
dunder-proto@1.0.1 :
dependencies :
call-bind-apply-helpers : 1.0 .2
es-errors : 1.3 .0
gopd : 1.2 .0
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
eastasianwidth@0.2.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
electron-to-chromium@1.5.313 : {}
emoji-regex@10.6.0 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
emoji-regex@8.0.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
emoji-regex@9.2.2 : {}
encoding-japanese@2.2.0 : {}
end-of-stream@1.4.5 :
dependencies :
once : 1.4 .0
engine.io-client@6.6.4 :
dependencies :
'@socket.io/component-emitter' : 3.1 .2
debug : 4.4 .3
engine.io-parser : 5.2 .3
ws : 8.18 .3
xmlhttprequest-ssl : 2.1 .2
transitivePeerDependencies :
- bufferutil
- supports-color
- utf-8-validate
engine.io-parser@5.2.3 : {}
engine.io@6.6.6 :
dependencies :
'@types/cors' : 2.8 .19
'@types/node' : 22.19 .15
'@types/ws' : 8.18 .1
accepts : 1.3 .8
base64id : 2.0 .0
cookie : 0.7 .2
cors : 2.8 .6
debug : 4.4 .3
engine.io-parser : 5.2 .3
ws : 8.18 .3
transitivePeerDependencies :
- bufferutil
- supports-color
- utf-8-validate
entities@4.5.0 : {}
env-paths@3.0.0 : {}
environment@1.1.0 : {}
es-abstract@1.24.1 :
dependencies :
array-buffer-byte-length : 1.0 .2
arraybuffer.prototype.slice : 1.0 .4
available-typed-arrays : 1.0 .7
call-bind : 1.0 .8
call-bound : 1.0 .4
data-view-buffer : 1.0 .2
data-view-byte-length : 1.0 .2
data-view-byte-offset : 1.0 .1
es-define-property : 1.0 .1
es-errors : 1.3 .0
es-object-atoms : 1.1 .1
es-set-tostringtag : 2.1 .0
es-to-primitive : 1.3 .0
function.prototype.name : 1.1 .8
get-intrinsic : 1.3 .0
get-proto : 1.0 .1
get-symbol-description : 1.1 .0
globalthis : 1.0 .4
gopd : 1.2 .0
has-property-descriptors : 1.0 .2
has-proto : 1.2 .0
has-symbols : 1.1 .0
hasown : 2.0 .2
internal-slot : 1.1 .0
is-array-buffer : 3.0 .5
is-callable : 1.2 .7
is-data-view : 1.0 .2
is-negative-zero : 2.0 .3
is-regex : 1.2 .1
is-set : 2.0 .3
is-shared-array-buffer : 1.0 .4
is-string : 1.1 .1
is-typed-array : 1.1 .15
is-weakref : 1.1 .1
math-intrinsics : 1.1 .0
object-inspect : 1.13 .4
object-keys : 1.1 .1
object.assign : 4.1 .7
own-keys : 1.0 .1
regexp.prototype.flags : 1.5 .4
safe-array-concat : 1.1 .3
safe-push-apply : 1.0 .0
safe-regex-test : 1.1 .0
set-proto : 1.0 .0
stop-iteration-iterator : 1.1 .0
string.prototype.trim : 1.2 .10
string.prototype.trimend : 1.0 .9
string.prototype.trimstart : 1.0 .8
typed-array-buffer : 1.0 .3
typed-array-byte-length : 1.0 .3
typed-array-byte-offset : 1.0 .4
typed-array-length : 1.0 .7
unbox-primitive : 1.1 .0
which-typed-array : 1.1 .20
es-define-property@1.0.1 : {}
es-errors@1.3.0 : {}
es-iterator-helpers@1.3.1 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-errors : 1.3 .0
es-set-tostringtag : 2.1 .0
function-bind : 1.1 .2
get-intrinsic : 1.3 .0
globalthis : 1.0 .4
gopd : 1.2 .0
has-property-descriptors : 1.0 .2
has-proto : 1.2 .0
has-symbols : 1.1 .0
internal-slot : 1.1 .0
iterator.prototype : 1.1 .5
math-intrinsics : 1.1 .0
safe-array-concat : 1.1 .3
es-module-lexer@2.0.0 : {}
es-object-atoms@1.1.1 :
dependencies :
es-errors : 1.3 .0
es-set-tostringtag@2.1.0 :
dependencies :
es-errors : 1.3 .0
get-intrinsic : 1.3 .0
has-tostringtag : 1.0 .2
hasown : 2.0 .2
es-shim-unscopables@1.1.0 :
dependencies :
hasown : 2.0 .2
es-to-primitive@1.3.0 :
dependencies :
is-callable : 1.2 .7
is-date-object : 1.1 .0
is-symbol : 1.1 .1
es-toolkit@1.45.1 : {}
esbuild-register@3.6.0(esbuild@0.19.12) :
dependencies :
debug : 4.4 .3
esbuild : 0.19 .12
transitivePeerDependencies :
- supports-color
esbuild@0.18.20 :
optionalDependencies :
'@esbuild/android-arm' : 0.18 .20
'@esbuild/android-arm64' : 0.18 .20
'@esbuild/android-x64' : 0.18 .20
'@esbuild/darwin-arm64' : 0.18 .20
'@esbuild/darwin-x64' : 0.18 .20
'@esbuild/freebsd-arm64' : 0.18 .20
'@esbuild/freebsd-x64' : 0.18 .20
'@esbuild/linux-arm' : 0.18 .20
'@esbuild/linux-arm64' : 0.18 .20
'@esbuild/linux-ia32' : 0.18 .20
'@esbuild/linux-loong64' : 0.18 .20
'@esbuild/linux-mips64el' : 0.18 .20
'@esbuild/linux-ppc64' : 0.18 .20
'@esbuild/linux-riscv64' : 0.18 .20
'@esbuild/linux-s390x' : 0.18 .20
'@esbuild/linux-x64' : 0.18 .20
'@esbuild/netbsd-x64' : 0.18 .20
'@esbuild/openbsd-x64' : 0.18 .20
'@esbuild/sunos-x64' : 0.18 .20
'@esbuild/win32-arm64' : 0.18 .20
'@esbuild/win32-ia32' : 0.18 .20
'@esbuild/win32-x64' : 0.18 .20
esbuild@0.19.12 :
optionalDependencies :
'@esbuild/aix-ppc64' : 0.19 .12
'@esbuild/android-arm' : 0.19 .12
'@esbuild/android-arm64' : 0.19 .12
'@esbuild/android-x64' : 0.19 .12
'@esbuild/darwin-arm64' : 0.19 .12
'@esbuild/darwin-x64' : 0.19 .12
'@esbuild/freebsd-arm64' : 0.19 .12
'@esbuild/freebsd-x64' : 0.19 .12
'@esbuild/linux-arm' : 0.19 .12
'@esbuild/linux-arm64' : 0.19 .12
'@esbuild/linux-ia32' : 0.19 .12
'@esbuild/linux-loong64' : 0.19 .12
'@esbuild/linux-mips64el' : 0.19 .12
'@esbuild/linux-ppc64' : 0.19 .12
'@esbuild/linux-riscv64' : 0.19 .12
'@esbuild/linux-s390x' : 0.19 .12
'@esbuild/linux-x64' : 0.19 .12
'@esbuild/netbsd-x64' : 0.19 .12
'@esbuild/openbsd-x64' : 0.19 .12
'@esbuild/sunos-x64' : 0.19 .12
'@esbuild/win32-arm64' : 0.19 .12
'@esbuild/win32-ia32' : 0.19 .12
'@esbuild/win32-x64' : 0.19 .12
2026-04-08 15:31:33 -04:00
esbuild@0.25.12 :
optionalDependencies :
'@esbuild/aix-ppc64' : 0.25 .12
'@esbuild/android-arm' : 0.25 .12
'@esbuild/android-arm64' : 0.25 .12
'@esbuild/android-x64' : 0.25 .12
'@esbuild/darwin-arm64' : 0.25 .12
'@esbuild/darwin-x64' : 0.25 .12
'@esbuild/freebsd-arm64' : 0.25 .12
'@esbuild/freebsd-x64' : 0.25 .12
'@esbuild/linux-arm' : 0.25 .12
'@esbuild/linux-arm64' : 0.25 .12
'@esbuild/linux-ia32' : 0.25 .12
'@esbuild/linux-loong64' : 0.25 .12
'@esbuild/linux-mips64el' : 0.25 .12
'@esbuild/linux-ppc64' : 0.25 .12
'@esbuild/linux-riscv64' : 0.25 .12
'@esbuild/linux-s390x' : 0.25 .12
'@esbuild/linux-x64' : 0.25 .12
'@esbuild/netbsd-arm64' : 0.25 .12
'@esbuild/netbsd-x64' : 0.25 .12
'@esbuild/openbsd-arm64' : 0.25 .12
'@esbuild/openbsd-x64' : 0.25 .12
'@esbuild/openharmony-arm64' : 0.25 .12
'@esbuild/sunos-x64' : 0.25 .12
'@esbuild/win32-arm64' : 0.25 .12
'@esbuild/win32-ia32' : 0.25 .12
'@esbuild/win32-x64' : 0.25 .12
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
esbuild@0.27.4 :
optionalDependencies :
'@esbuild/aix-ppc64' : 0.27 .4
'@esbuild/android-arm' : 0.27 .4
'@esbuild/android-arm64' : 0.27 .4
'@esbuild/android-x64' : 0.27 .4
'@esbuild/darwin-arm64' : 0.27 .4
'@esbuild/darwin-x64' : 0.27 .4
'@esbuild/freebsd-arm64' : 0.27 .4
'@esbuild/freebsd-x64' : 0.27 .4
'@esbuild/linux-arm' : 0.27 .4
'@esbuild/linux-arm64' : 0.27 .4
'@esbuild/linux-ia32' : 0.27 .4
'@esbuild/linux-loong64' : 0.27 .4
'@esbuild/linux-mips64el' : 0.27 .4
'@esbuild/linux-ppc64' : 0.27 .4
'@esbuild/linux-riscv64' : 0.27 .4
'@esbuild/linux-s390x' : 0.27 .4
'@esbuild/linux-x64' : 0.27 .4
'@esbuild/netbsd-arm64' : 0.27 .4
'@esbuild/netbsd-x64' : 0.27 .4
'@esbuild/openbsd-arm64' : 0.27 .4
'@esbuild/openbsd-x64' : 0.27 .4
'@esbuild/openharmony-arm64' : 0.27 .4
'@esbuild/sunos-x64' : 0.27 .4
'@esbuild/win32-arm64' : 0.27 .4
'@esbuild/win32-ia32' : 0.27 .4
'@esbuild/win32-x64' : 0.27 .4
escalade@3.2.0 : {}
escape-string-regexp@4.0.0 : {}
eslint-config-next@15.1.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3) :
dependencies :
'@next/eslint-plugin-next' : 15.1 .0
'@rushstack/eslint-patch' : 1.16 .1
'@typescript-eslint/eslint-plugin' : 8.57 .0 (@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
'@typescript-eslint/parser' : 8.57 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
eslint : 9.39 .4 (jiti@1.21.7)
eslint-import-resolver-node : 0.3 .9
eslint-import-resolver-typescript : 3.10 .1 (eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-import : 2.32 .0 (@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7))
eslint-plugin-jsx-a11y : 6.10 .2 (eslint@9.39.4(jiti@1.21.7))
eslint-plugin-react : 7.37 .5 (eslint@9.39.4(jiti@1.21.7))
eslint-plugin-react-hooks : 5.2 .0 (eslint@9.39.4(jiti@1.21.7))
optionalDependencies :
typescript : 5.9 .3
transitivePeerDependencies :
- eslint-import-resolver-webpack
- eslint-plugin-import-x
- supports-color
eslint-config-prettier@9.1.2(eslint@9.39.4(jiti@1.21.7)) :
dependencies :
eslint : 9.39 .4 (jiti@1.21.7)
eslint-import-resolver-node@0.3.9 :
dependencies :
debug : 3.2 .7
is-core-module : 2.16 .1
resolve : 1.22 .11
transitivePeerDependencies :
- supports-color
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7)) :
dependencies :
'@nolyfill/is-core-module' : 1.0 .39
debug : 4.4 .3
eslint : 9.39 .4 (jiti@1.21.7)
get-tsconfig : 4.13 .6
is-bun-module : 2.0 .0
stable-hash : 0.0 .5
tinyglobby : 0.2 .15
unrs-resolver : 1.11 .1
optionalDependencies :
eslint-plugin-import : 2.32 .0 (@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7))
transitivePeerDependencies :
- supports-color
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) :
dependencies :
debug : 3.2 .7
optionalDependencies :
'@typescript-eslint/parser' : 8.57 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
eslint : 9.39 .4 (jiti@1.21.7)
eslint-import-resolver-node : 0.3 .9
eslint-import-resolver-typescript : 3.10 .1 (eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@1.21.7))
transitivePeerDependencies :
- supports-color
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7)) :
dependencies :
'@rtsao/scc' : 1.1 .0
array-includes : 3.1 .9
array.prototype.findlastindex : 1.2 .6
array.prototype.flat : 1.3 .3
array.prototype.flatmap : 1.3 .3
debug : 3.2 .7
doctrine : 2.1 .0
eslint : 9.39 .4 (jiti@1.21.7)
eslint-import-resolver-node : 0.3 .9
eslint-module-utils : 2.12 .1 (@typescript-eslint/parser@8.57.0(eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.4(jiti@1.21.7))
hasown : 2.0 .2
is-core-module : 2.16 .1
is-glob : 4.0 .3
minimatch : 3.1 .5
object.fromentries : 2.0 .8
object.groupby : 1.0 .3
object.values : 1.2 .1
semver : 6.3 .1
string.prototype.trimend : 1.0 .9
tsconfig-paths : 3.15 .0
optionalDependencies :
'@typescript-eslint/parser' : 8.57 .0 (eslint@9.39.4(jiti@1.21.7))(typescript@5.9.3)
transitivePeerDependencies :
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4(jiti@1.21.7)) :
dependencies :
aria-query : 5.3 .2
array-includes : 3.1 .9
array.prototype.flatmap : 1.3 .3
ast-types-flow : 0.0 .8
axe-core : 4.11 .1
axobject-query : 4.1 .0
damerau-levenshtein : 1.0 .8
emoji-regex : 9.2 .2
eslint : 9.39 .4 (jiti@1.21.7)
hasown : 2.0 .2
jsx-ast-utils : 3.3 .5
language-tags : 1.0 .9
minimatch : 3.1 .5
object.fromentries : 2.0 .8
safe-regex-test : 1.1 .0
string.prototype.includes : 2.0 .1
eslint-plugin-react-hooks@5.2.0(eslint@9.39.4(jiti@1.21.7)) :
dependencies :
eslint : 9.39 .4 (jiti@1.21.7)
eslint-plugin-react@7.37.5(eslint@9.39.4(jiti@1.21.7)) :
dependencies :
array-includes : 3.1 .9
array.prototype.findlast : 1.2 .5
array.prototype.flatmap : 1.3 .3
array.prototype.tosorted : 1.1 .4
doctrine : 2.1 .0
es-iterator-helpers : 1.3 .1
eslint : 9.39 .4 (jiti@1.21.7)
estraverse : 5.3 .0
hasown : 2.0 .2
jsx-ast-utils : 3.3 .5
minimatch : 3.1 .5
object.entries : 1.1 .9
object.fromentries : 2.0 .8
object.values : 1.2 .1
prop-types : 15.8 .1
resolve : 2.0 .0 -next.6
semver : 6.3 .1
string.prototype.matchall : 4.0 .12
string.prototype.repeat : 1.0 .0
eslint-scope@8.4.0 :
dependencies :
esrecurse : 4.3 .0
estraverse : 5.3 .0
eslint-visitor-keys@3.4.3 : {}
eslint-visitor-keys@4.2.1 : {}
eslint-visitor-keys@5.0.1 : {}
eslint@9.39.4(jiti@1.21.7) :
dependencies :
'@eslint-community/eslint-utils' : 4.9 .1 (eslint@9.39.4(jiti@1.21.7))
'@eslint-community/regexpp' : 4.12 .2
'@eslint/config-array' : 0.21 .2
'@eslint/config-helpers' : 0.4 .2
'@eslint/core' : 0.17 .0
'@eslint/eslintrc' : 3.3 .5
'@eslint/js' : 9.39 .4
'@eslint/plugin-kit' : 0.4 .1
'@humanfs/node' : 0.16 .7
'@humanwhocodes/module-importer' : 1.0 .1
'@humanwhocodes/retry' : 0.4 .3
'@types/estree' : 1.0 .8
ajv : 6.14 .0
chalk : 4.1 .2
cross-spawn : 7.0 .6
debug : 4.4 .3
escape-string-regexp : 4.0 .0
eslint-scope : 8.4 .0
eslint-visitor-keys : 4.2 .1
espree : 10.4 .0
esquery : 1.7 .0
esutils : 2.0 .3
fast-deep-equal : 3.1 .3
file-entry-cache : 8.0 .0
find-up : 5.0 .0
glob-parent : 6.0 .2
ignore : 5.3 .2
imurmurhash : 0.1 .4
is-glob : 4.0 .3
json-stable-stringify-without-jsonify : 1.0 .1
lodash.merge : 4.6 .2
minimatch : 3.1 .5
natural-compare : 1.4 .0
optionator : 0.9 .4
optionalDependencies :
jiti : 1.21 .7
transitivePeerDependencies :
- supports-color
espree@10.4.0 :
dependencies :
acorn : 8.16 .0
acorn-jsx : 5.3 .2 (acorn@8.16.0)
eslint-visitor-keys : 4.2 .1
esquery@1.7.0 :
dependencies :
estraverse : 5.3 .0
esrecurse@4.3.0 :
dependencies :
estraverse : 5.3 .0
estraverse@5.3.0 : {}
estree-walker@3.0.3 :
dependencies :
'@types/estree' : 1.0 .8
esutils@2.0.3 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
event-target-shim@5.0.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
eventemitter3@5.0.4 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
events-universal@1.0.1 :
dependencies :
bare-events : 2.8 .2
transitivePeerDependencies :
- bare-abort-controller
events@3.3.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
execa@8.0.1 :
dependencies :
cross-spawn : 7.0 .6
get-stream : 8.0 .1
human-signals : 5.0 .0
is-stream : 3.0 .0
merge-stream : 2.0 .0
npm-run-path : 5.3 .0
onetime : 6.0 .0
signal-exit : 4.1 .0
strip-final-newline : 3.0 .0
expect-type@1.3.0 : {}
fast-copy@4.0.2 : {}
fast-deep-equal@3.1.3 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
fast-fifo@1.3.2 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
fast-glob@3.3.1 :
dependencies :
'@nodelib/fs.stat' : 2.0 .5
'@nodelib/fs.walk' : 1.2 .8
glob-parent : 5.1 .2
merge2 : 1.4 .1
micromatch : 4.0 .8
fast-glob@3.3.3 :
dependencies :
'@nodelib/fs.stat' : 2.0 .5
'@nodelib/fs.walk' : 1.2 .8
glob-parent : 5.1 .2
merge2 : 1.4 .1
micromatch : 4.0 .8
fast-json-stable-stringify@2.1.0 : {}
fast-levenshtein@2.0.6 : {}
fast-safe-stringify@2.1.1 : {}
fast-xml-builder@1.1.3 :
dependencies :
path-expression-matcher : 1.1 .3
fast-xml-parser@5.5.4 :
dependencies :
fast-xml-builder : 1.1 .3
path-expression-matcher : 1.1 .3
strnum : 2.2 .0
fastq@1.20.1 :
dependencies :
reusify : 1.1 .0
fdir@6.5.0(picomatch@4.0.3) :
optionalDependencies :
picomatch : 4.0 .3
file-entry-cache@8.0.0 :
dependencies :
flat-cache : 4.0 .1
fill-range@7.1.1 :
dependencies :
to-regex-range : 5.0 .1
filter-obj@1.1.0 : {}
find-up@5.0.0 :
dependencies :
locate-path : 6.0 .0
path-exists : 4.0 .0
flat-cache@4.0.1 :
dependencies :
flatted : 3.4 .1
keyv : 4.5 .4
flatted@3.4.1 : {}
fontkit@2.0.4 :
dependencies :
'@swc/helpers' : 0.5 .15
brotli : 1.3 .3
clone : 2.1 .2
dfa : 1.2 .0
fast-deep-equal : 3.1 .3
restructure : 3.0 .2
tiny-inflate : 1.0 .3
unicode-properties : 1.4 .1
unicode-trie : 2.0 .0
for-each@0.3.5 :
dependencies :
is-callable : 1.2 .7
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
foreground-child@3.3.1 :
dependencies :
cross-spawn : 7.0 .6
signal-exit : 4.1 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
form-render@2.5.6(@types/react@19.2.14)(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(immer@11.1.4)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@ant-design/icons' : 4.8 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
ahooks : 3.9 .6 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
antd : 5.29 .3 (date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
async-validator : 3.5 .2
classnames : 2.5 .1
color : 3.2 .1
dayjs : 1.11 .20
lodash-es : 4.17 .23
rc-color-picker : 1.2 .6 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
virtualizedtableforantd4 : 1.3 .2 (antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
zustand : 4.5 .7 (@types/react@19.2.14)(immer@11.1.4)(react@19.2.4)
transitivePeerDependencies :
- '@types/react'
- immer
fraction.js@5.3.4 : {}
fsevents@2.3.2 :
optional : true
fsevents@2.3.3 :
optional : true
function-bind@1.1.2 : {}
function.prototype.name@1.1.8 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
functions-have-names : 1.2 .3
hasown : 2.0 .2
is-callable : 1.2 .7
functions-have-names@1.2.3 : {}
gel@2.2.0 :
dependencies :
'@petamoriken/float16' : 3.9 .3
debug : 4.4 .3
env-paths : 3.0 .0
semver : 7.7 .4
shell-quote : 1.8 .3
which : 4.0 .0
transitivePeerDependencies :
- supports-color
generator-function@2.0.1 : {}
get-east-asian-width@1.5.0 : {}
get-intrinsic@1.3.0 :
dependencies :
call-bind-apply-helpers : 1.0 .2
es-define-property : 1.0 .1
es-errors : 1.3 .0
es-object-atoms : 1.1 .1
function-bind : 1.1 .2
get-proto : 1.0 .1
gopd : 1.2 .0
has-symbols : 1.1 .0
hasown : 2.0 .2
math-intrinsics : 1.1 .0
get-nonce@1.0.1 : {}
get-proto@1.0.1 :
dependencies :
dunder-proto : 1.0 .1
es-object-atoms : 1.1 .1
get-stream@8.0.1 : {}
get-symbol-description@1.1.0 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
get-intrinsic : 1.3 .0
get-tsconfig@4.13.6 :
dependencies :
resolve-pkg-maps : 1.0 .0
glob-parent@5.1.2 :
dependencies :
is-glob : 4.0 .3
glob-parent@6.0.2 :
dependencies :
is-glob : 4.0 .3
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
glob@10.5.0 :
dependencies :
foreground-child : 3.3 .1
jackspeak : 3.4 .3
minimatch : 9.0 .9
minipass : 7.1 .3
package-json-from-dist : 1.0 .1
path-scurry : 1.11 .1
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
globals@14.0.0 : {}
globalthis@1.0.4 :
dependencies :
define-properties : 1.2 .1
gopd : 1.2 .0
gopd@1.2.0 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
graceful-fs@4.2.11 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
has-bigints@1.1.0 : {}
has-flag@4.0.0 : {}
has-property-descriptors@1.0.2 :
dependencies :
es-define-property : 1.0 .1
has-proto@1.2.0 :
dependencies :
dunder-proto : 1.0 .1
has-symbols@1.1.0 : {}
has-tostringtag@1.0.2 :
dependencies :
has-symbols : 1.1 .0
hasown@2.0.2 :
dependencies :
function-bind : 1.1 .2
he@1.2.0 : {}
help-me@5.0.0 : {}
html-entities@2.6.0 : {}
html-escaper@2.0.2 : {}
html-to-text@9.0.5 :
dependencies :
'@selderee/plugin-htmlparser2' : 0.11 .0
deepmerge : 4.3 .1
dom-serializer : 2.0 .0
htmlparser2 : 8.0 .2
selderee : 0.11 .0
htmlparser2@8.0.2 :
dependencies :
domelementtype : 2.3 .0
domhandler : 5.0 .3
domutils : 3.2 .2
entities : 4.5 .0
human-signals@5.0.0 : {}
husky@9.1.7 : {}
iconv-lite@0.6.3 :
dependencies :
safer-buffer : 2.1 .2
iconv-lite@0.7.2 :
dependencies :
safer-buffer : 2.1 .2
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
idb-keyval@6.2.2 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
ieee754@1.2.1 : {}
ignore@5.3.2 : {}
ignore@7.0.5 : {}
imapflow@1.2.13 :
dependencies :
'@zone-eu/mailsplit' : 5.4 .8
encoding-japanese : 2.2 .0
iconv-lite : 0.7 .2
libbase64 : 1.3 .0
libmime : 5.3 .7
libqp : 2.1 .1
nodemailer : 8.0 .2
pino : 10.3 .1
socks : 2.8 .7
immer@10.2.0 : {}
immer@11.1.4 : {}
import-fresh@3.3.1 :
dependencies :
parent-module : 1.0 .1
resolve-from : 4.0 .0
imurmurhash@0.1.4 : {}
inherits@2.0.4 : {}
internal-slot@1.1.0 :
dependencies :
es-errors : 1.3 .0
hasown : 2.0 .2
side-channel : 1.1 .0
internmap@2.0.3 : {}
intersection-observer@0.12.2 : {}
ioredis@5.10.0 :
dependencies :
'@ioredis/commands' : 1.5 .1
cluster-key-slot : 1.1 .2
debug : 4.4 .3
denque : 2.1 .0
lodash.defaults : 4.2 .0
lodash.isarguments : 3.1 .0
redis-errors : 1.2 .0
redis-parser : 3.0 .0
standard-as-callback : 2.1 .0
transitivePeerDependencies :
- supports-color
ioredis@5.9.3 :
dependencies :
'@ioredis/commands' : 1.5 .0
cluster-key-slot : 1.1 .2
debug : 4.4 .3
denque : 2.1 .0
lodash.defaults : 4.2 .0
lodash.isarguments : 3.1 .0
redis-errors : 1.2 .0
redis-parser : 3.0 .0
standard-as-callback : 2.1 .0
transitivePeerDependencies :
- supports-color
ip-address@10.1.0 : {}
ipaddr.js@2.3.0 : {}
is-array-buffer@3.0.5 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
get-intrinsic : 1.3 .0
is-arrayish@0.3.4 : {}
is-async-function@2.1.1 :
dependencies :
async-function : 1.0 .0
call-bound : 1.0 .4
get-proto : 1.0 .1
has-tostringtag : 1.0 .2
safe-regex-test : 1.1 .0
is-bigint@1.1.0 :
dependencies :
has-bigints : 1.1 .0
is-binary-path@2.1.0 :
dependencies :
binary-extensions : 2.3 .0
is-boolean-object@1.2.2 :
dependencies :
call-bound : 1.0 .4
has-tostringtag : 1.0 .2
is-bun-module@2.0.0 :
dependencies :
semver : 7.7 .4
is-callable@1.2.7 : {}
is-core-module@2.16.1 :
dependencies :
hasown : 2.0 .2
is-data-view@1.0.2 :
dependencies :
call-bound : 1.0 .4
get-intrinsic : 1.3 .0
is-typed-array : 1.1 .15
is-date-object@1.1.0 :
dependencies :
call-bound : 1.0 .4
has-tostringtag : 1.0 .2
is-extglob@2.1.1 : {}
is-finalizationregistry@1.1.1 :
dependencies :
call-bound : 1.0 .4
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
is-fullwidth-code-point@3.0.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
is-fullwidth-code-point@4.0.0 : {}
is-fullwidth-code-point@5.1.0 :
dependencies :
get-east-asian-width : 1.5 .0
is-generator-function@1.1.2 :
dependencies :
call-bound : 1.0 .4
generator-function : 2.0 .1
get-proto : 1.0 .1
has-tostringtag : 1.0 .2
safe-regex-test : 1.1 .0
is-glob@4.0.3 :
dependencies :
is-extglob : 2.1 .1
is-map@2.0.3 : {}
is-negative-zero@2.0.3 : {}
is-number-object@1.1.1 :
dependencies :
call-bound : 1.0 .4
has-tostringtag : 1.0 .2
is-number@7.0.0 : {}
is-regex@1.2.1 :
dependencies :
call-bound : 1.0 .4
gopd : 1.2 .0
has-tostringtag : 1.0 .2
hasown : 2.0 .2
is-set@2.0.3 : {}
is-shared-array-buffer@1.0.4 :
dependencies :
call-bound : 1.0 .4
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
is-stream@2.0.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
is-stream@3.0.0 : {}
is-string@1.1.1 :
dependencies :
call-bound : 1.0 .4
has-tostringtag : 1.0 .2
is-symbol@1.1.1 :
dependencies :
call-bound : 1.0 .4
has-symbols : 1.1 .0
safe-regex-test : 1.1 .0
is-typed-array@1.1.15 :
dependencies :
which-typed-array : 1.1 .20
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
is-url@1.2.4 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
is-weakmap@2.0.2 : {}
is-weakref@1.1.1 :
dependencies :
call-bound : 1.0 .4
is-weakset@2.0.4 :
dependencies :
call-bound : 1.0 .4
get-intrinsic : 1.3 .0
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
isarray@1.0.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
isarray@2.0.5 : {}
isexe@2.0.0 : {}
isexe@3.1.5 : {}
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
iso-3166-2@1.0.0 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
istanbul-lib-coverage@3.2.2 : {}
istanbul-lib-report@3.0.1 :
dependencies :
istanbul-lib-coverage : 3.2 .2
make-dir : 4.0 .0
supports-color : 7.2 .0
istanbul-reports@3.2.0 :
dependencies :
html-escaper : 2.0 .2
istanbul-lib-report : 3.0 .1
iterator.prototype@1.1.5 :
dependencies :
define-data-property : 1.1 .4
es-object-atoms : 1.1 .1
get-intrinsic : 1.3 .0
get-proto : 1.0 .1
has-symbols : 1.1 .0
set-function-name : 2.0 .2
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
jackspeak@3.4.3 :
dependencies :
'@isaacs/cliui' : 8.0 .2
optionalDependencies :
'@pkgjs/parseargs' : 0.11 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
jiti@1.21.7 : {}
jose@6.2.1 : {}
joycon@3.1.1 : {}
js-cookie@3.0.5 : {}
js-tokens@10.0.0 : {}
js-tokens@4.0.0 : {}
js-yaml@4.1.1 :
dependencies :
argparse : 2.0 .1
json-buffer@3.0.1 : {}
json-schema-traverse@0.4.1 : {}
json-stable-stringify-without-jsonify@1.0.1 : {}
json2mq@0.2.0 :
dependencies :
string-convert : 0.2 .1
json5@1.0.2 :
dependencies :
minimist : 1.2 .8
jsx-ast-utils@3.3.5 :
dependencies :
array-includes : 3.1 .9
array.prototype.flat : 1.3 .3
object.assign : 4.1 .7
object.values : 1.2 .1
keyv@4.5.4 :
dependencies :
json-buffer : 3.0 .1
kysely@0.28.11 : {}
language-subtag-registry@0.3.23 : {}
language-tags@1.0.9 :
dependencies :
language-subtag-registry : 0.3 .23
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
lazystream@1.0.1 :
dependencies :
readable-stream : 2.3 .8
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
leac@0.6.0 : {}
levn@0.4.1 :
dependencies :
prelude-ls : 1.2 .1
type-check : 0.4 .0
libbase64@1.3.0 : {}
libmime@5.3.7 :
dependencies :
encoding-japanese : 2.2 .0
iconv-lite : 0.6 .3
libbase64 : 1.3 .0
libqp : 2.1 .1
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Cross-cutting i18n polish for forms across the marina + residential + company
domains. Introduces a single source of truth for country/phone/timezone/
subdivision data and replaces every nationality-as-free-text and timezone-
as-string Input with a dedicated combobox.
PR1 Countries — ALL_COUNTRY_CODES (~250 ISO-3166-1 alpha-2), Intl.DisplayNames
for localized labels, detectDefaultCountry() with navigator-region
fallback to US, CountryCombobox with regional-indicator flag glyphs +
compact mode for inline use.
PR2 Phone — libphonenumber-js wrapper (parsePhone / formatAsYouType /
callingCodeFor), PhoneInput with flag dropdown + national-format
AsYouType + paste-detect that flips the country dropdown for pasted
international strings.
PR3 Timezones — country->IANA map (250 entries, multi-zone for AU/BR/CA/CD/
ID/KZ/MN/MX/RU/US), formatTimezoneLabel ("Europe/London (UTC+1)"),
TimezoneCombobox with Suggested/All grouping driven by countryHint.
PR4 Subdivisions — wraps the iso-3166-2 npm package (~5000 ISO 3166-2
codes for every country), per-country cache, SubdivisionCombobox with
"Pick a country first" / "No regions available" empty states.
PR5 Schema deltas (migration 0015) — clients.nationality_iso, clientContacts
{value_e164, value_country}, clientAddresses {country_iso, subdivision_iso},
residentialClients {phone_e164, phone_country, nationality_iso, timezone,
place_of_residence_country_iso, subdivision_iso}, companies {incorporation_
country_iso, incorporation_subdivision_iso}, companyAddresses {country_iso,
subdivision_iso}. Plus shared zod validators (validators/i18n.ts) used
by every entity validator + route handler.
PR6 ClientForm + ClientDetail — CountryCombobox replaces nationality Input,
TimezoneCombobox replaces timezone Input (driven by nationalityIso hint),
PhoneInput conditionally rendered for phone/whatsapp contacts. Inline
editors (InlineCountryField / InlineTimezoneField / InlinePhoneField)
for the detail-page overview rows + ContactsEditor.
PR7 Residential client form + detail — phone -> PhoneInput, nationality/
timezone/place-of-residence-country/subdivision rows in both create
sheet and inline-editable detail view. Subdivision wipes when country
flips since codes are country-scoped.
PR8 Company form + detail — incorporation country -> CountryCombobox,
incorporation region -> SubdivisionCombobox in both modes.
PR9 Public inquiry endpoint — accepts pre-normalized phoneE164/phoneCountry
and i18n fields from newer website builds, server-side parsePhone()
fallback for legacy raw-international submissions. Old Nuxt builds
keep working unchanged.
Tests: 4 unit suites for the primitives (25 tests), 1 integration spec for
the public phone-normalization path (3 tests), 1 smoke spec asserting the
combobox triggers render in all three create sheets.
Test totals: vitest 713 -> 741 (+28).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 18:13:08 +02:00
libphonenumber-js@1.12.42 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
libqp@2.1.1 : {}
lightningcss-android-arm64@1.32.0 :
optional : true
lightningcss-darwin-arm64@1.32.0 :
optional : true
lightningcss-darwin-x64@1.32.0 :
optional : true
lightningcss-freebsd-x64@1.32.0 :
optional : true
lightningcss-linux-arm-gnueabihf@1.32.0 :
optional : true
lightningcss-linux-arm64-gnu@1.32.0 :
optional : true
lightningcss-linux-arm64-musl@1.32.0 :
optional : true
lightningcss-linux-x64-gnu@1.32.0 :
optional : true
lightningcss-linux-x64-musl@1.32.0 :
optional : true
lightningcss-win32-arm64-msvc@1.32.0 :
optional : true
lightningcss-win32-x64-msvc@1.32.0 :
optional : true
lightningcss@1.32.0 :
dependencies :
detect-libc : 2.1 .2
optionalDependencies :
lightningcss-android-arm64 : 1.32 .0
lightningcss-darwin-arm64 : 1.32 .0
lightningcss-darwin-x64 : 1.32 .0
lightningcss-freebsd-x64 : 1.32 .0
lightningcss-linux-arm-gnueabihf : 1.32 .0
lightningcss-linux-arm64-gnu : 1.32 .0
lightningcss-linux-arm64-musl : 1.32 .0
lightningcss-linux-x64-gnu : 1.32 .0
lightningcss-linux-x64-musl : 1.32 .0
lightningcss-win32-arm64-msvc : 1.32 .0
lightningcss-win32-x64-msvc : 1.32 .0
lilconfig@3.1.3 : {}
lines-and-columns@1.2.4 : {}
linkify-it@5.0.0 :
dependencies :
uc.micro : 2.1 .0
lint-staged@15.5.2 :
dependencies :
chalk : 5.6 .2
commander : 13.1 .0
debug : 4.4 .3
execa : 8.0 .1
lilconfig : 3.1 .3
listr2 : 8.3 .3
micromatch : 4.0 .8
pidtree : 0.6 .0
string-argv : 0.3 .2
yaml : 2.8 .2
transitivePeerDependencies :
- supports-color
listr2@8.3.3 :
dependencies :
cli-truncate : 4.0 .0
colorette : 2.0 .20
eventemitter3 : 5.0 .4
log-update : 6.1 .0
rfdc : 1.4 .1
wrap-ansi : 9.0 .2
locate-path@6.0.0 :
dependencies :
p-locate : 5.0 .0
lodash-es@4.17.23 : {}
lodash.defaults@4.2.0 : {}
lodash.isarguments@3.1.0 : {}
lodash.merge@4.6.2 : {}
lodash@4.17.23 : {}
log-update@6.1.0 :
dependencies :
ansi-escapes : 7.3 .0
cli-cursor : 5.0 .0
slice-ansi : 7.1 .2
strip-ansi : 7.2 .0
wrap-ansi : 9.0 .2
loose-envify@1.4.0 :
dependencies :
js-tokens : 4.0 .0
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
lru-cache@10.4.3 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
lucide-react@0.460.0(react@19.2.4) :
dependencies :
react : 19.2 .4
lucide@0.552.0 : {}
luxon@3.7.2 : {}
magic-string@0.30.21 :
dependencies :
'@jridgewell/sourcemap-codec' : 1.5 .5
magicast@0.5.2 :
dependencies :
'@babel/parser' : 7.29 .0
'@babel/types' : 7.29 .0
source-map-js : 1.2 .1
mailparser@3.9.4 :
dependencies :
'@zone-eu/mailsplit' : 5.4 .8
encoding-japanese : 2.2 .0
he : 1.2 .0
html-to-text : 9.0 .5
iconv-lite : 0.7 .2
libmime : 5.3 .7
linkify-it : 5.0 .0
nodemailer : 8.0 .2
punycode.js : 2.3 .1
tlds : 1.261 .0
make-dir@4.0.0 :
dependencies :
semver : 7.7 .4
math-intrinsics@1.1.0 : {}
memory-pager@1.5.0 : {}
merge-stream@2.0.0 : {}
merge2@1.4.1 : {}
micromatch@4.0.8 :
dependencies :
braces : 3.0 .3
picomatch : 2.3 .1
mime-db@1.52.0 : {}
mime-types@2.1.35 :
dependencies :
mime-db : 1.52 .0
mimic-fn@4.0.0 : {}
mimic-function@5.0.1 : {}
minimatch@10.2.4 :
dependencies :
brace-expansion : 5.0 .4
minimatch@3.1.5 :
dependencies :
brace-expansion : 1.1 .12
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
minimatch@5.1.9 :
dependencies :
brace-expansion : 2.1 .0
minimatch@9.0.9 :
dependencies :
brace-expansion : 2.1 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
minimist@1.2.8 : {}
minio@8.0.7 :
dependencies :
async : 3.2 .6
block-stream2 : 2.1 .0
browser-or-node : 2.1 .1
buffer-crc32 : 1.0 .0
eventemitter3 : 5.0 .4
fast-xml-parser : 5.5 .4
ipaddr.js : 2.3 .0
lodash : 4.17 .23
mime-types : 2.1 .35
query-string : 7.1 .3
stream-json : 1.9 .1
through2 : 4.0 .2
xml2js : 0.6 .2
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
minipass@7.1.3 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
mongodb-connection-string-url@7.0.1 :
dependencies :
'@types/whatwg-url' : 13.0 .0
whatwg-url : 14.2 .0
mongodb@7.1.0(socks@2.8.7) :
dependencies :
'@mongodb-js/saslprep' : 1.4 .6
bson : 7.2 .0
mongodb-connection-string-url : 7.0 .1
optionalDependencies :
socks : 2.8 .7
ms@2.1.3 : {}
msgpackr-extract@3.0.3 :
dependencies :
node-gyp-build-optional-packages : 5.2 .2
optionalDependencies :
'@msgpackr-extract/msgpackr-extract-darwin-arm64' : 3.0 .3
'@msgpackr-extract/msgpackr-extract-darwin-x64' : 3.0 .3
'@msgpackr-extract/msgpackr-extract-linux-arm' : 3.0 .3
'@msgpackr-extract/msgpackr-extract-linux-arm64' : 3.0 .3
'@msgpackr-extract/msgpackr-extract-linux-x64' : 3.0 .3
'@msgpackr-extract/msgpackr-extract-win32-x64' : 3.0 .3
optional : true
msgpackr@1.11.5 :
optionalDependencies :
msgpackr-extract : 3.0 .3
mz@2.7.0 :
dependencies :
any-promise : 1.3 .0
object-assign : 4.1 .1
thenify-all : 1.6 .0
nanoid@3.3.11 : {}
nanostores@1.1.1 : {}
napi-postinstall@0.3.4 : {}
natural-compare@1.4.0 : {}
negotiator@0.6.3 : {}
next-themes@0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
next@15.1.0(@playwright/test@1.58.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@next/env' : 15.1 .0
'@swc/counter' : 0.1 .3
'@swc/helpers' : 0.5 .15
busboy : 1.6 .0
caniuse-lite : 1.0 .30001778
postcss : 8.4 .31
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
styled-jsx : 5.1 .6 (react@19.2.4)
optionalDependencies :
'@next/swc-darwin-arm64' : 15.1 .0
'@next/swc-darwin-x64' : 15.1 .0
'@next/swc-linux-arm64-gnu' : 15.1 .0
'@next/swc-linux-arm64-musl' : 15.1 .0
'@next/swc-linux-x64-gnu' : 15.1 .0
'@next/swc-linux-x64-musl' : 15.1 .0
'@next/swc-win32-arm64-msvc' : 15.1 .0
'@next/swc-win32-x64-msvc' : 15.1 .0
'@playwright/test' : 1.58 .2
sharp : 0.33 .5
transitivePeerDependencies :
- '@babel/core'
- babel-plugin-macros
node-abort-controller@3.1.1 : {}
node-exports-info@1.6.0 :
dependencies :
array.prototype.flatmap : 1.3 .3
es-errors : 1.3 .0
object.entries : 1.1 .9
semver : 6.3 .1
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
node-fetch@2.7.0 :
dependencies :
whatwg-url : 5.0 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
node-gyp-build-optional-packages@5.2.2 :
dependencies :
detect-libc : 2.1 .2
optional : true
node-html-better-parser@1.5.8 :
dependencies :
html-entities : 2.6 .0
node-releases@2.0.36 : {}
nodemailer@6.10.1 : {}
nodemailer@8.0.2 : {}
normalize-path@3.0.0 : {}
notepack.io@3.0.1 : {}
npm-run-path@5.3.0 :
dependencies :
path-key : 4.0 .0
object-assign@4.1.1 : {}
object-hash@3.0.0 : {}
object-inspect@1.13.4 : {}
object-keys@1.1.1 : {}
object.assign@4.1.7 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-object-atoms : 1.1 .1
has-symbols : 1.1 .0
object-keys : 1.1 .1
object.entries@1.1.9 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-object-atoms : 1.1 .1
object.fromentries@2.0.8 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-object-atoms : 1.1 .1
object.groupby@1.0.3 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
object.values@1.2.1 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-object-atoms : 1.1 .1
obug@2.1.1 : {}
on-exit-leak-free@2.1.2 : {}
once@1.4.0 :
dependencies :
wrappy : 1.0 .2
onetime@6.0.0 :
dependencies :
mimic-fn : 4.0 .0
onetime@7.0.0 :
dependencies :
mimic-function : 5.0 .1
openai@6.27.0(ws@8.18.3)(zod@3.25.76) :
optionalDependencies :
ws : 8.18 .3
zod : 3.25 .76
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
opencollective-postinstall@2.0.3 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
optionator@0.9.4 :
dependencies :
deep-is : 0.1 .4
fast-levenshtein : 2.0 .6
levn : 0.4 .1
prelude-ls : 1.2 .1
type-check : 0.4 .0
word-wrap : 1.2 .5
own-keys@1.0.1 :
dependencies :
get-intrinsic : 1.3 .0
object-keys : 1.1 .1
safe-push-apply : 1.0 .0
p-limit@3.1.0 :
dependencies :
yocto-queue : 0.1 .0
p-locate@5.0.0 :
dependencies :
p-limit : 3.1 .0
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
package-json-from-dist@1.0.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
pako@0.2.9 : {}
pako@1.0.11 : {}
pako@2.1.0 : {}
parent-module@1.0.1 :
dependencies :
callsites : 3.1 .0
parseley@0.12.1 :
dependencies :
leac : 0.6 .0
peberminta : 0.9 .0
path-exists@4.0.0 : {}
path-expression-matcher@1.1.3 : {}
path-key@3.1.1 : {}
path-key@4.0.0 : {}
path-parse@1.0.7 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
path-scurry@1.11.1 :
dependencies :
lru-cache : 10.4 .3
minipass : 7.1 .3
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
pathe@2.0.3 : {}
feat(eoi): in-app pathway fills the same source PDF as Documenso
When the in-app pathway is used for EOI templates, we now load the same
source PDF that the Documenso template uploads and fill its AcroForm
fields with values from EoiContext via pdf-lib. Field names mirror the
Documenso template's formValues keys exactly (Name, Email, Address,
Yacht Name, Length, Width, Draft, Berth Number + Lease_10 / Purchase
checkboxes), so both pathways produce equivalent legal documents — only
the renderer differs.
The form is left interactive (not flattened) so a recipient can still
adjust values before signing. Non-EOI templates (welcome letters,
acknowledgments, etc.) keep using the existing HTML→pdfme path.
Adds:
- pdf-lib direct dep
- src/lib/pdf/fill-eoi-form.ts — load + fill helpers, EOI_TEMPLATE_PDF_PATH
env override
- assets/ + README documenting the expected source PDF
- next.config outputFileTracingIncludes so the asset is bundled in the
standalone build
Tests: 8 new (4 fill-form unit + 2 source-PDF route + 2 fallback);
645/645 green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 13:38:02 +02:00
pdf-lib@1.17.1 :
dependencies :
'@pdf-lib/standard-fonts' : 1.0 .0
'@pdf-lib/upng' : 1.0 .1
pako : 1.0 .11
tslib : 1.14 .1
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
peberminta@0.9.0 : {}
performance-now@2.1.0 : {}
picocolors@1.1.1 : {}
picomatch@2.3.1 : {}
picomatch@4.0.3 : {}
pidtree@0.6.0 : {}
pify@2.3.0 : {}
pino-abstract-transport@2.0.0 :
dependencies :
split2 : 4.2 .0
pino-abstract-transport@3.0.0 :
dependencies :
split2 : 4.2 .0
pino-pretty@13.1.3 :
dependencies :
colorette : 2.0 .20
dateformat : 4.6 .3
fast-copy : 4.0 .2
fast-safe-stringify : 2.1 .1
help-me : 5.0 .0
joycon : 3.1 .1
minimist : 1.2 .8
on-exit-leak-free : 2.1 .2
pino-abstract-transport : 3.0 .0
pump : 3.0 .4
secure-json-parse : 4.1 .0
sonic-boom : 4.2 .1
strip-json-comments : 5.0 .3
pino-std-serializers@7.1.0 : {}
pino@10.3.1 :
dependencies :
'@pinojs/redact' : 0.4 .0
atomic-sleep : 1.0 .0
on-exit-leak-free : 2.1 .2
pino-abstract-transport : 3.0 .0
pino-std-serializers : 7.1 .0
process-warning : 5.0 .0
quick-format-unescaped : 4.0 .4
real-require : 0.2 .0
safe-stable-stringify : 2.5 .0
sonic-boom : 4.2 .1
thread-stream : 4.0 .0
pino@9.14.0 :
dependencies :
'@pinojs/redact' : 0.4 .0
atomic-sleep : 1.0 .0
on-exit-leak-free : 2.1 .2
pino-abstract-transport : 2.0 .0
pino-std-serializers : 7.1 .0
process-warning : 5.0 .0
quick-format-unescaped : 4.0 .4
real-require : 0.2 .0
safe-stable-stringify : 2.5 .0
sonic-boom : 4.2 .1
thread-stream : 3.1 .0
pirates@4.0.7 : {}
playwright-core@1.58.2 : {}
playwright@1.58.2 :
dependencies :
playwright-core : 1.58 .2
optionalDependencies :
fsevents : 2.3 .2
possible-typed-array-names@1.1.0 : {}
postcss-import@15.1.0(postcss@8.5.8) :
dependencies :
postcss : 8.5 .8
postcss-value-parser : 4.2 .0
read-cache : 1.0 .0
resolve : 1.22 .11
postcss-js@4.1.0(postcss@8.5.8) :
dependencies :
camelcase-css : 2.0 .1
postcss : 8.5 .8
postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2) :
dependencies :
lilconfig : 3.1 .3
optionalDependencies :
jiti : 1.21 .7
postcss : 8.5 .8
tsx : 4.21 .0
yaml : 2.8 .2
postcss-nested@6.2.0(postcss@8.5.8) :
dependencies :
postcss : 8.5 .8
postcss-selector-parser : 6.1 .2
postcss-selector-parser@6.1.2 :
dependencies :
cssesc : 3.0 .0
util-deprecate : 1.0 .2
postcss-value-parser@4.2.0 : {}
postcss@8.4.31 :
dependencies :
nanoid : 3.3 .11
picocolors : 1.1 .1
source-map-js : 1.2 .1
postcss@8.5.8 :
dependencies :
nanoid : 3.3 .11
picocolors : 1.1 .1
source-map-js : 1.2 .1
postgres@3.4.8 : {}
prelude-ls@1.2.1 : {}
prettier@3.8.1 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
process-nextick-args@2.0.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
process-warning@5.0.0 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
process@0.11.10 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
prop-types@15.8.1 :
dependencies :
loose-envify : 1.4 .0
object-assign : 4.1 .1
react-is : 16.13 .1
pump@3.0.4 :
dependencies :
end-of-stream : 1.4 .5
once : 1.4 .0
punycode.js@2.3.1 : {}
punycode@2.3.1 : {}
query-string@7.1.3 :
dependencies :
decode-uri-component : 0.2 .2
filter-obj : 1.1 .0
split-on-first : 1.1 .0
strict-uri-encode : 2.0 .0
queue-microtask@1.2.3 : {}
quick-format-unescaped@4.0.4 : {}
raf@3.4.1 :
dependencies :
performance-now : 2.1 .0
rc-align@2.4.5 :
dependencies :
babel-runtime : 6.26 .0
dom-align : 1.12 .4
prop-types : 15.8 .1
rc-util : 4.21 .1
rc-animate@2.11.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
babel-runtime : 6.26 .0
classnames : 2.5 .1
css-animation : 1.6 .1
prop-types : 15.8 .1
raf : 3.4 .1
rc-util : 4.21 .1
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-lifecycles-compat : 3.0 .4
rc-cascader@3.34.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-select : 14.16 .8 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-tree : 5.13 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-checkbox@3.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-collapse@3.9.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-color-picker@1.2.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
classnames : 2.5 .1
prop-types : 15.8 .1
rc-trigger : 1.11 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 4.21 .1
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
tinycolor2 : 1.6 .0
rc-dialog@9.6.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/portal' : 1.1 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-drawer@7.3.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/portal' : 1.1 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-dropdown@4.2.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-field-form@2.7.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/async-validator' : 5.1 .0
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-image@7.12.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/portal' : 1.1 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-dialog : 9.6 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-input-number@9.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/mini-decimal' : 1.1 .0
classnames : 2.5 .1
rc-input : 1.8 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-input@1.8.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-mentions@2.20.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-input : 1.8 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-menu : 9.16 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-textarea : 1.10 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-menu@9.16.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-overflow : 1.5 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-motion@2.9.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-notification@5.6.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-overflow@1.5.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-pagination@5.1.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-picker@4.11.3(date-fns@4.1.0)(dayjs@1.11.20)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-overflow : 1.5 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
optionalDependencies :
date-fns : 4.1 .0
dayjs : 1.11 .20
luxon : 3.7 .2
rc-progress@4.0.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-rate@2.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-resize-observer@1.4.3(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
resize-observer-polyfill : 1.5 .1
rc-segmented@2.7.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-select@14.16.8(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-overflow : 1.5 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-virtual-list : 3.19 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-slider@11.1.9(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-steps@6.0.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-switch@4.1.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-table@7.54.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/context' : 1.4 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-virtual-list : 3.19 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-tabs@15.7.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-dropdown : 4.2 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-menu : 9.16 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-textarea@1.10.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-input : 1.8 .0 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-tooltip@6.4.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
'@rc-component/trigger' : 2.3 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-tree-select@5.27.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-select : 14.16 .8 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-tree : 5.13 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-tree@5.13.1(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-motion : 2.9 .5 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-virtual-list : 3.19 .2 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-trigger@1.11.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
babel-runtime : 6.26 .0
create-react-class : 15.7 .0
prop-types : 15.8 .1
rc-align : 2.4 .5
rc-animate : 2.11 .1 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 4.21 .1
transitivePeerDependencies :
- react
- react-dom
rc-upload@4.11.0(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
rc-util@4.21.1 :
dependencies :
add-dom-event-listener : 1.1 .0
prop-types : 15.8 .1
react-is : 16.13 .1
react-lifecycles-compat : 3.0 .4
shallowequal : 1.1 .0
rc-util@5.44.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-is : 18.3 .1
rc-virtual-list@3.19.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@babel/runtime' : 7.28 .6
classnames : 2.5 .1
rc-resize-observer : 1.4 .3 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
rc-util : 5.44 .4 (react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-day-picker@9.14.0(react@19.2.4) :
dependencies :
'@date-fns/tz' : 1.4 .1
'@tabby_ai/hijri-converter' : 1.0 .5
date-fns : 4.1 .0
date-fns-jalali : 4.1 .0 -0
react : 19.2 .4
react-dom@19.2.4(react@19.2.4) :
dependencies :
react : 19.2 .4
scheduler : 0.27 .0
react-fast-compare@3.2.2 : {}
react-hook-form@7.71.2(react@19.2.4) :
dependencies :
react : 19.2 .4
react-is@16.13.1 : {}
react-is@18.3.1 : {}
react-lifecycles-compat@3.0.4 : {}
react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1) :
dependencies :
'@types/use-sync-external-store' : 0.0 .6
react : 19.2 .4
use-sync-external-store : 1.6 .0 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
redux : 5.0 .1
react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.4) :
dependencies :
react : 19.2 .4
react-style-singleton : 2.2 .3 (@types/react@19.2.14)(react@19.2.4)
tslib : 2.8 .1
optionalDependencies :
'@types/react' : 19.2 .14
react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.4) :
dependencies :
react : 19.2 .4
react-remove-scroll-bar : 2.3 .8 (@types/react@19.2.14)(react@19.2.4)
react-style-singleton : 2.2 .3 (@types/react@19.2.14)(react@19.2.4)
tslib : 2.8 .1
use-callback-ref : 1.3 .3 (@types/react@19.2.14)(react@19.2.4)
use-sidecar : 1.1 .3 (@types/react@19.2.14)(react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.4) :
dependencies :
get-nonce : 1.0 .1
react : 19.2 .4
tslib : 2.8 .1
optionalDependencies :
'@types/react' : 19.2 .14
react@19.2.4 : {}
read-cache@1.0.0 :
dependencies :
pify : 2.3 .0
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
readable-stream@2.3.8 :
dependencies :
core-util-is : 1.0 .3
inherits : 2.0 .4
isarray : 1.0 .0
process-nextick-args : 2.0 .1
safe-buffer : 5.1 .2
string_decoder : 1.1 .1
util-deprecate : 1.0 .2
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
readable-stream@3.6.2 :
dependencies :
inherits : 2.0 .4
string_decoder : 1.3 .0
util-deprecate : 1.0 .2
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
readable-stream@4.7.0 :
dependencies :
abort-controller : 3.0 .0
buffer : 6.0 .3
events : 3.3 .0
process : 0.11 .10
string_decoder : 1.3 .0
readdir-glob@1.1.3 :
dependencies :
minimatch : 5.1 .9
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
readdirp@3.6.0 :
dependencies :
picomatch : 2.3 .1
real-require@0.2.0 : {}
recharts@3.8.0(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react-is@18.3.1)(react@19.2.4)(redux@5.0.1) :
dependencies :
'@reduxjs/toolkit' : 2.11 .2 (react-redux@9.2.0(@types/react@19.2.14)(react@19.2.4)(redux@5.0.1))(react@19.2.4)
clsx : 2.1 .1
decimal.js-light : 2.5 .1
es-toolkit : 1.45 .1
eventemitter3 : 5.0 .4
immer : 10.2 .0
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
react-is : 18.3 .1
react-redux : 9.2 .0 (@types/react@19.2.14)(react@19.2.4)(redux@5.0.1)
reselect : 5.1 .1
tiny-invariant : 1.3 .3
use-sync-external-store : 1.6 .0 (react@19.2.4)
victory-vendor : 37.3 .6
transitivePeerDependencies :
- '@types/react'
- redux
redis-errors@1.2.0 : {}
redis-parser@3.0.0 :
dependencies :
redis-errors : 1.2 .0
redux-thunk@3.1.0(redux@5.0.1) :
dependencies :
redux : 5.0 .1
redux@5.0.1 : {}
reflect.getprototypeof@1.0.10 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-errors : 1.3 .0
es-object-atoms : 1.1 .1
get-intrinsic : 1.3 .0
get-proto : 1.0 .1
which-builtin-type : 1.2 .1
regenerator-runtime@0.11.1 : {}
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
regenerator-runtime@0.13.11 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
regexp.prototype.flags@1.5.4 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-errors : 1.3 .0
get-proto : 1.0 .1
gopd : 1.2 .0
set-function-name : 2.0 .2
reselect@5.1.1 : {}
resize-observer-polyfill@1.5.1 : {}
resolve-from@4.0.0 : {}
resolve-pkg-maps@1.0.0 : {}
resolve@1.22.11 :
dependencies :
is-core-module : 2.16 .1
path-parse : 1.0 .7
supports-preserve-symlinks-flag : 1.0 .0
resolve@2.0.0-next.6 :
dependencies :
es-errors : 1.3 .0
is-core-module : 2.16 .1
node-exports-info : 1.6 .0
object-keys : 1.1 .1
path-parse : 1.0 .7
supports-preserve-symlinks-flag : 1.0 .0
restore-cursor@5.1.0 :
dependencies :
onetime : 7.0 .0
signal-exit : 4.1 .0
restructure@3.0.2 : {}
reusify@1.1.0 : {}
rfdc@1.4.1 : {}
rolldown@1.0.0-rc.9 :
dependencies :
'@oxc-project/types' : 0.115 .0
'@rolldown/pluginutils' : 1.0 .0 -rc.9
optionalDependencies :
'@rolldown/binding-android-arm64' : 1.0 .0 -rc.9
'@rolldown/binding-darwin-arm64' : 1.0 .0 -rc.9
'@rolldown/binding-darwin-x64' : 1.0 .0 -rc.9
'@rolldown/binding-freebsd-x64' : 1.0 .0 -rc.9
'@rolldown/binding-linux-arm-gnueabihf' : 1.0 .0 -rc.9
'@rolldown/binding-linux-arm64-gnu' : 1.0 .0 -rc.9
'@rolldown/binding-linux-arm64-musl' : 1.0 .0 -rc.9
'@rolldown/binding-linux-ppc64-gnu' : 1.0 .0 -rc.9
'@rolldown/binding-linux-s390x-gnu' : 1.0 .0 -rc.9
'@rolldown/binding-linux-x64-gnu' : 1.0 .0 -rc.9
'@rolldown/binding-linux-x64-musl' : 1.0 .0 -rc.9
'@rolldown/binding-openharmony-arm64' : 1.0 .0 -rc.9
'@rolldown/binding-wasm32-wasi' : 1.0 .0 -rc.9
'@rolldown/binding-win32-arm64-msvc' : 1.0 .0 -rc.9
'@rolldown/binding-win32-x64-msvc' : 1.0 .0 -rc.9
rou3@0.7.12 : {}
run-parallel@1.2.0 :
dependencies :
queue-microtask : 1.2 .3
safe-array-concat@1.1.3 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
get-intrinsic : 1.3 .0
has-symbols : 1.1 .0
isarray : 2.0 .5
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
safe-buffer@5.1.2 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
safe-buffer@5.2.1 : {}
safe-push-apply@1.0.0 :
dependencies :
es-errors : 1.3 .0
isarray : 2.0 .5
safe-regex-test@1.1.0 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
is-regex : 1.2 .1
safe-stable-stringify@2.5.0 : {}
safer-buffer@2.1.2 : {}
sax@1.5.0 : {}
scheduler@0.27.0 : {}
screenfull@5.2.0 : {}
scroll-into-view-if-needed@3.1.0 :
dependencies :
compute-scroll-into-view : 3.1 .1
secure-json-parse@4.1.0 : {}
selderee@0.11.0 :
dependencies :
parseley : 0.12 .1
semver@6.3.1 : {}
semver@7.7.4 : {}
set-cookie-parser@3.0.1 : {}
set-function-length@1.2.2 :
dependencies :
define-data-property : 1.1 .4
es-errors : 1.3 .0
function-bind : 1.1 .2
get-intrinsic : 1.3 .0
gopd : 1.2 .0
has-property-descriptors : 1.0 .2
set-function-name@2.0.2 :
dependencies :
define-data-property : 1.1 .4
es-errors : 1.3 .0
functions-have-names : 1.2 .3
has-property-descriptors : 1.0 .2
set-proto@1.0.0 :
dependencies :
dunder-proto : 1.0 .1
es-errors : 1.3 .0
es-object-atoms : 1.1 .1
shallowequal@1.1.0 : {}
sharp@0.33.5 :
dependencies :
color : 4.2 .3
detect-libc : 2.1 .2
semver : 7.7 .4
optionalDependencies :
'@img/sharp-darwin-arm64' : 0.33 .5
'@img/sharp-darwin-x64' : 0.33 .5
'@img/sharp-libvips-darwin-arm64' : 1.0 .4
'@img/sharp-libvips-darwin-x64' : 1.0 .4
'@img/sharp-libvips-linux-arm' : 1.0 .5
'@img/sharp-libvips-linux-arm64' : 1.0 .4
'@img/sharp-libvips-linux-s390x' : 1.0 .4
'@img/sharp-libvips-linux-x64' : 1.0 .4
'@img/sharp-libvips-linuxmusl-arm64' : 1.0 .4
'@img/sharp-libvips-linuxmusl-x64' : 1.0 .4
'@img/sharp-linux-arm' : 0.33 .5
'@img/sharp-linux-arm64' : 0.33 .5
'@img/sharp-linux-s390x' : 0.33 .5
'@img/sharp-linux-x64' : 0.33 .5
'@img/sharp-linuxmusl-arm64' : 0.33 .5
'@img/sharp-linuxmusl-x64' : 0.33 .5
'@img/sharp-wasm32' : 0.33 .5
'@img/sharp-win32-ia32' : 0.33 .5
'@img/sharp-win32-x64' : 0.33 .5
optional : true
shebang-command@2.0.0 :
dependencies :
shebang-regex : 3.0 .0
shebang-regex@3.0.0 : {}
shell-quote@1.8.3 : {}
side-channel-list@1.0.0 :
dependencies :
es-errors : 1.3 .0
object-inspect : 1.13 .4
side-channel-map@1.0.1 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
get-intrinsic : 1.3 .0
object-inspect : 1.13 .4
side-channel-weakmap@1.0.2 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
get-intrinsic : 1.3 .0
object-inspect : 1.13 .4
side-channel-map : 1.0 .1
side-channel@1.1.0 :
dependencies :
es-errors : 1.3 .0
object-inspect : 1.13 .4
side-channel-list : 1.0 .0
side-channel-map : 1.0 .1
side-channel-weakmap : 1.0 .2
siginfo@2.0.0 : {}
signal-exit@4.1.0 : {}
simple-swizzle@0.2.4 :
dependencies :
is-arrayish : 0.3 .4
slice-ansi@5.0.0 :
dependencies :
ansi-styles : 6.2 .3
is-fullwidth-code-point : 4.0 .0
slice-ansi@7.1.2 :
dependencies :
ansi-styles : 6.2 .3
is-fullwidth-code-point : 5.1 .0
smart-buffer@4.2.0 : {}
socket.io-adapter@2.5.6 :
dependencies :
debug : 4.4 .3
ws : 8.18 .3
transitivePeerDependencies :
- bufferutil
- supports-color
- utf-8-validate
socket.io-client@4.8.3 :
dependencies :
'@socket.io/component-emitter' : 3.1 .2
debug : 4.4 .3
engine.io-client : 6.6 .4
socket.io-parser : 4.2 .5
transitivePeerDependencies :
- bufferutil
- supports-color
- utf-8-validate
socket.io-parser@4.2.5 :
dependencies :
'@socket.io/component-emitter' : 3.1 .2
debug : 4.4 .3
transitivePeerDependencies :
- supports-color
socket.io@4.8.3 :
dependencies :
accepts : 1.3 .8
base64id : 2.0 .0
cors : 2.8 .6
debug : 4.4 .3
engine.io : 6.6 .6
socket.io-adapter : 2.5 .6
socket.io-parser : 4.2 .5
transitivePeerDependencies :
- bufferutil
- supports-color
- utf-8-validate
socks@2.8.7 :
dependencies :
ip-address : 10.1 .0
smart-buffer : 4.2 .0
sonic-boom@4.2.1 :
dependencies :
atomic-sleep : 1.0 .0
sonner@1.7.4(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
source-map-js@1.2.1 : {}
source-map-support@0.5.21 :
dependencies :
buffer-from : 1.1 .2
source-map : 0.6 .1
source-map@0.6.1 : {}
sparse-bitfield@3.0.3 :
dependencies :
memory-pager : 1.5 .0
split-on-first@1.1.0 : {}
split2@4.2.0 : {}
stable-hash@0.0.5 : {}
stackback@0.0.2 : {}
standard-as-callback@2.1.0 : {}
std-env@4.0.0 : {}
stop-iteration-iterator@1.1.0 :
dependencies :
es-errors : 1.3 .0
internal-slot : 1.1 .0
stream-chain@2.2.5 : {}
stream-json@1.9.1 :
dependencies :
stream-chain : 2.2 .5
streamsearch@1.1.0 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
streamx@2.25.0 :
dependencies :
events-universal : 1.0 .1
fast-fifo : 1.3 .2
text-decoder : 1.2 .7
transitivePeerDependencies :
- bare-abort-controller
- react-native-b4a
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
strict-uri-encode@2.0.0 : {}
string-argv@0.3.2 : {}
string-convert@0.2.1 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
string-width@4.2.3 :
dependencies :
emoji-regex : 8.0 .0
is-fullwidth-code-point : 3.0 .0
strip-ansi : 6.0 .1
string-width@5.1.2 :
dependencies :
eastasianwidth : 0.2 .0
emoji-regex : 9.2 .2
strip-ansi : 7.2 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
string-width@7.2.0 :
dependencies :
emoji-regex : 10.6 .0
get-east-asian-width : 1.5 .0
strip-ansi : 7.2 .0
string.prototype.includes@2.0.1 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-abstract : 1.24 .1
string.prototype.matchall@4.0.12 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-errors : 1.3 .0
es-object-atoms : 1.1 .1
get-intrinsic : 1.3 .0
gopd : 1.2 .0
has-symbols : 1.1 .0
internal-slot : 1.1 .0
regexp.prototype.flags : 1.5 .4
set-function-name : 2.0 .2
side-channel : 1.1 .0
string.prototype.repeat@1.0.0 :
dependencies :
define-properties : 1.2 .1
es-abstract : 1.24 .1
string.prototype.trim@1.2.10 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-data-property : 1.1 .4
define-properties : 1.2 .1
es-abstract : 1.24 .1
es-object-atoms : 1.1 .1
has-property-descriptors : 1.0 .2
string.prototype.trimend@1.0.9 :
dependencies :
call-bind : 1.0 .8
call-bound : 1.0 .4
define-properties : 1.2 .1
es-object-atoms : 1.1 .1
string.prototype.trimstart@1.0.8 :
dependencies :
call-bind : 1.0 .8
define-properties : 1.2 .1
es-object-atoms : 1.1 .1
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
string_decoder@1.1.1 :
dependencies :
safe-buffer : 5.1 .2
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
string_decoder@1.3.0 :
dependencies :
safe-buffer : 5.2 .1
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
strip-ansi@6.0.1 :
dependencies :
ansi-regex : 5.0 .1
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
strip-ansi@7.2.0 :
dependencies :
ansi-regex : 6.2 .2
strip-bom@3.0.0 : {}
strip-final-newline@3.0.0 : {}
strip-json-comments@3.1.1 : {}
strip-json-comments@5.0.3 : {}
strnum@2.2.0 : {}
styled-jsx@5.1.6(react@19.2.4) :
dependencies :
client-only : 0.0 .1
react : 19.2 .4
stylis@4.3.6 : {}
sucrase@3.35.1 :
dependencies :
'@jridgewell/gen-mapping' : 0.3 .13
commander : 4.1 .1
lines-and-columns : 1.2 .4
mz : 2.7 .0
pirates : 4.0 .7
tinyglobby : 0.2 .15
ts-interface-checker : 0.1 .13
supports-color@7.2.0 :
dependencies :
has-flag : 4.0 .0
supports-preserve-symlinks-flag@1.0.0 : {}
tailwind-merge@2.6.1 : {}
tailwindcss-animate@1.0.7(tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2)) :
dependencies :
tailwindcss : 3.4 .19 (tsx@4.21.0)(yaml@2.8.2)
tailwindcss@3.4.19(tsx@4.21.0)(yaml@2.8.2) :
dependencies :
'@alloc/quick-lru' : 5.2 .0
arg : 5.0 .2
chokidar : 3.6 .0
didyoumean : 1.2 .2
dlv : 1.1 .3
fast-glob : 3.3 .3
glob-parent : 6.0 .2
is-glob : 4.0 .3
jiti : 1.21 .7
lilconfig : 3.1 .3
micromatch : 4.0 .8
normalize-path : 3.0 .0
object-hash : 3.0 .0
picocolors : 1.1 .1
postcss : 8.5 .8
postcss-import : 15.1 .0 (postcss@8.5.8)
postcss-js : 4.1 .0 (postcss@8.5.8)
postcss-load-config : 6.0 .1 (jiti@1.21.7)(postcss@8.5.8)(tsx@4.21.0)(yaml@2.8.2)
postcss-nested : 6.2 .0 (postcss@8.5.8)
postcss-selector-parser : 6.1 .2
resolve : 1.22 .11
sucrase : 3.35 .1
transitivePeerDependencies :
- tsx
- yaml
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
tar-stream@3.1.8 :
dependencies :
b4a : 1.8 .0
bare-fs : 4.7 .1
fast-fifo : 1.3 .2
streamx : 2.25 .0
transitivePeerDependencies :
- bare-abort-controller
- bare-buffer
- react-native-b4a
teex@1.0.1 :
dependencies :
streamx : 2.25 .0
transitivePeerDependencies :
- bare-abort-controller
- react-native-b4a
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
tesseract.js-core@7.0.0 : {}
tesseract.js@7.0.0 :
dependencies :
bmp-js : 0.1 .0
idb-keyval : 6.2 .2
is-url : 1.2 .4
node-fetch : 2.7 .0
opencollective-postinstall : 2.0 .3
regenerator-runtime : 0.13 .11
tesseract.js-core : 7.0 .0
wasm-feature-detect : 1.8 .0
zlibjs : 0.3 .1
transitivePeerDependencies :
- encoding
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
text-decoder@1.2.7 :
dependencies :
b4a : 1.8 .0
transitivePeerDependencies :
- react-native-b4a
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
thenify-all@1.6.0 :
dependencies :
thenify : 3.3 .1
thenify@3.3.1 :
dependencies :
any-promise : 1.3 .0
thread-stream@3.1.0 :
dependencies :
real-require : 0.2 .0
thread-stream@4.0.0 :
dependencies :
real-require : 0.2 .0
throttle-debounce@5.0.2 : {}
through2@4.0.2 :
dependencies :
readable-stream : 3.6 .2
tiny-inflate@1.0.3 : {}
tiny-invariant@1.3.3 : {}
tinybench@2.9.0 : {}
tinycolor2@1.6.0 : {}
tinyexec@1.0.4 : {}
tinyglobby@0.2.15 :
dependencies :
fdir : 6.5 .0 (picomatch@4.0.3)
picomatch : 4.0 .3
tinyrainbow@3.1.0 : {}
tlds@1.261.0 : {}
to-regex-range@5.0.1 :
dependencies :
is-number : 7.0 .0
toggle-selection@1.0.6 : {}
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
tr46@0.0.3 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
tr46@5.1.1 :
dependencies :
punycode : 2.3 .1
ts-api-utils@2.4.0(typescript@5.9.3) :
dependencies :
typescript : 5.9 .3
ts-interface-checker@0.1.13 : {}
tsconfig-paths@3.15.0 :
dependencies :
'@types/json5' : 0.0 .29
json5 : 1.0 .2
minimist : 1.2 .8
strip-bom : 3.0 .0
feat(eoi): in-app pathway fills the same source PDF as Documenso
When the in-app pathway is used for EOI templates, we now load the same
source PDF that the Documenso template uploads and fill its AcroForm
fields with values from EoiContext via pdf-lib. Field names mirror the
Documenso template's formValues keys exactly (Name, Email, Address,
Yacht Name, Length, Width, Draft, Berth Number + Lease_10 / Purchase
checkboxes), so both pathways produce equivalent legal documents — only
the renderer differs.
The form is left interactive (not flattened) so a recipient can still
adjust values before signing. Non-EOI templates (welcome letters,
acknowledgments, etc.) keep using the existing HTML→pdfme path.
Adds:
- pdf-lib direct dep
- src/lib/pdf/fill-eoi-form.ts — load + fill helpers, EOI_TEMPLATE_PDF_PATH
env override
- assets/ + README documenting the expected source PDF
- next.config outputFileTracingIncludes so the asset is bundled in the
standalone build
Tests: 8 new (4 fill-form unit + 2 source-PDF route + 2 fallback);
645/645 green.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 13:38:02 +02:00
tslib@1.14.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
tslib@2.8.1 : {}
tsx@4.21.0 :
dependencies :
esbuild : 0.27 .4
get-tsconfig : 4.13 .6
optionalDependencies :
fsevents : 2.3 .3
type-check@0.4.0 :
dependencies :
prelude-ls : 1.2 .1
typed-array-buffer@1.0.3 :
dependencies :
call-bound : 1.0 .4
es-errors : 1.3 .0
is-typed-array : 1.1 .15
typed-array-byte-length@1.0.3 :
dependencies :
call-bind : 1.0 .8
for-each : 0.3 .5
gopd : 1.2 .0
has-proto : 1.2 .0
is-typed-array : 1.1 .15
typed-array-byte-offset@1.0.4 :
dependencies :
available-typed-arrays : 1.0 .7
call-bind : 1.0 .8
for-each : 0.3 .5
gopd : 1.2 .0
has-proto : 1.2 .0
is-typed-array : 1.1 .15
reflect.getprototypeof : 1.0 .10
typed-array-length@1.0.7 :
dependencies :
call-bind : 1.0 .8
for-each : 0.3 .5
gopd : 1.2 .0
is-typed-array : 1.1 .15
possible-typed-array-names : 1.1 .0
reflect.getprototypeof : 1.0 .10
typescript@5.9.3 : {}
uc.micro@2.1.0 : {}
uid2@1.0.0 : {}
unbox-primitive@1.1.0 :
dependencies :
call-bound : 1.0 .4
has-bigints : 1.1 .0
has-symbols : 1.1 .0
which-boxed-primitive : 1.1 .1
undici-types@6.21.0 : {}
unicode-properties@1.4.1 :
dependencies :
base64-js : 1.5 .1
unicode-trie : 2.0 .0
unicode-trie@2.0.0 :
dependencies :
pako : 0.2 .9
tiny-inflate : 1.0 .3
unrs-resolver@1.11.1 :
dependencies :
napi-postinstall : 0.3 .4
optionalDependencies :
'@unrs/resolver-binding-android-arm-eabi' : 1.11 .1
'@unrs/resolver-binding-android-arm64' : 1.11 .1
'@unrs/resolver-binding-darwin-arm64' : 1.11 .1
'@unrs/resolver-binding-darwin-x64' : 1.11 .1
'@unrs/resolver-binding-freebsd-x64' : 1.11 .1
'@unrs/resolver-binding-linux-arm-gnueabihf' : 1.11 .1
'@unrs/resolver-binding-linux-arm-musleabihf' : 1.11 .1
'@unrs/resolver-binding-linux-arm64-gnu' : 1.11 .1
'@unrs/resolver-binding-linux-arm64-musl' : 1.11 .1
'@unrs/resolver-binding-linux-ppc64-gnu' : 1.11 .1
'@unrs/resolver-binding-linux-riscv64-gnu' : 1.11 .1
'@unrs/resolver-binding-linux-riscv64-musl' : 1.11 .1
'@unrs/resolver-binding-linux-s390x-gnu' : 1.11 .1
'@unrs/resolver-binding-linux-x64-gnu' : 1.11 .1
'@unrs/resolver-binding-linux-x64-musl' : 1.11 .1
'@unrs/resolver-binding-wasm32-wasi' : 1.11 .1
'@unrs/resolver-binding-win32-arm64-msvc' : 1.11 .1
'@unrs/resolver-binding-win32-ia32-msvc' : 1.11 .1
'@unrs/resolver-binding-win32-x64-msvc' : 1.11 .1
update-browserslist-db@1.2.3(browserslist@4.28.1) :
dependencies :
browserslist : 4.28 .1
escalade : 3.2 .0
picocolors : 1.1 .1
uri-js@4.4.1 :
dependencies :
punycode : 2.3 .1
use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.4) :
dependencies :
react : 19.2 .4
tslib : 2.8 .1
optionalDependencies :
'@types/react' : 19.2 .14
use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.4) :
dependencies :
detect-node-es : 1.1 .0
react : 19.2 .4
tslib : 2.8 .1
optionalDependencies :
'@types/react' : 19.2 .14
use-sync-external-store@1.6.0(react@19.2.4) :
dependencies :
react : 19.2 .4
util-deprecate@1.0.2 : {}
uuid@11.1.0 : {}
vary@1.1.2 : {}
2026-04-29 14:05:10 +02:00
vaul@1.1.2(@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
'@radix-ui/react-dialog' : 1.1 .15 (@types/react-dom@19.2.3(@types/react@19.2.14))(@types/react@19.2.14)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
transitivePeerDependencies :
- '@types/react'
- '@types/react-dom'
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
victory-vendor@37.3.6 :
dependencies :
'@types/d3-array' : 3.2 .2
'@types/d3-ease' : 3.0 .2
'@types/d3-interpolate' : 3.0 .4
'@types/d3-scale' : 4.0 .9
'@types/d3-shape' : 3.1 .8
'@types/d3-time' : 3.0 .4
'@types/d3-timer' : 3.0 .2
d3-array : 3.2 .4
d3-ease : 3.0 .1
d3-interpolate : 3.0 .1
d3-scale : 4.0 .2
d3-shape : 3.2 .0
d3-time : 3.1 .0
d3-timer : 3.0 .1
virtualizedtableforantd4@1.3.2(antd@5.29.3(date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4) :
dependencies :
antd : 5.29 .3 (date-fns@4.1.0)(luxon@3.7.2)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
react : 19.2 .4
react-dom : 19.2 .4 (react@19.2.4)
2026-04-08 15:31:33 -04:00
vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2) :
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
dependencies :
'@oxc-project/runtime' : 0.115 .0
lightningcss : 1.32 .0
picomatch : 4.0 .3
postcss : 8.5 .8
rolldown : 1.0 .0 -rc.9
tinyglobby : 0.2 .15
optionalDependencies :
'@types/node' : 22.19 .15
2026-04-08 15:31:33 -04:00
esbuild : 0.25 .12
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
fsevents : 2.3 .3
jiti : 1.21 .7
tsx : 4.21 .0
yaml : 2.8 .2
2026-04-08 15:31:33 -04:00
vitest@4.1.0(@types/node@22.19.15)(vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)) :
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
dependencies :
'@vitest/expect' : 4.1 .0
2026-04-08 15:31:33 -04:00
'@vitest/mocker' : 4.1 .0 (vite@8.0.0(@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2))
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
'@vitest/pretty-format' : 4.1 .0
'@vitest/runner' : 4.1 .0
'@vitest/snapshot' : 4.1 .0
'@vitest/spy' : 4.1 .0
'@vitest/utils' : 4.1 .0
es-module-lexer : 2.0 .0
expect-type : 1.3 .0
magic-string : 0.30 .21
obug : 2.1 .1
pathe : 2.0 .3
picomatch : 4.0 .3
std-env : 4.0 .0
tinybench : 2.9 .0
tinyexec : 1.0 .4
tinyglobby : 0.2 .15
tinyrainbow : 3.1 .0
2026-04-08 15:31:33 -04:00
vite : 8.0 .0 (@types/node@22.19.15)(esbuild@0.25.12)(jiti@1.21.7)(tsx@4.21.0)(yaml@2.8.2)
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
why-is-node-running : 2.3 .0
optionalDependencies :
'@types/node' : 22.19 .15
transitivePeerDependencies :
- msw
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
wasm-feature-detect@1.8.0 : {}
webidl-conversions@3.0.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
webidl-conversions@7.0.0 : {}
whatwg-url@14.2.0 :
dependencies :
tr46 : 5.1 .1
webidl-conversions : 7.0 .0
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
whatwg-url@5.0.0 :
dependencies :
tr46 : 0.0 .3
webidl-conversions : 3.0 .1
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
which-boxed-primitive@1.1.1 :
dependencies :
is-bigint : 1.1 .0
is-boolean-object : 1.2 .2
is-number-object : 1.1 .1
is-string : 1.1 .1
is-symbol : 1.1 .1
which-builtin-type@1.2.1 :
dependencies :
call-bound : 1.0 .4
function.prototype.name : 1.1 .8
has-tostringtag : 1.0 .2
is-async-function : 2.1 .1
is-date-object : 1.1 .0
is-finalizationregistry : 1.1 .1
is-generator-function : 1.1 .2
is-regex : 1.2 .1
is-weakref : 1.1 .1
isarray : 2.0 .5
which-boxed-primitive : 1.1 .1
which-collection : 1.0 .2
which-typed-array : 1.1 .20
which-collection@1.0.2 :
dependencies :
is-map : 2.0 .3
is-set : 2.0 .3
is-weakmap : 2.0 .2
is-weakset : 2.0 .4
which-typed-array@1.1.20 :
dependencies :
available-typed-arrays : 1.0 .7
call-bind : 1.0 .8
call-bound : 1.0 .4
for-each : 0.3 .5
get-proto : 1.0 .1
gopd : 1.2 .0
has-tostringtag : 1.0 .2
which@2.0.2 :
dependencies :
isexe : 2.0 .0
which@4.0.0 :
dependencies :
isexe : 3.1 .5
why-is-node-running@2.3.0 :
dependencies :
siginfo : 2.0 .0
stackback : 0.0 .2
word-wrap@1.2.5 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
wrap-ansi@7.0.0 :
dependencies :
ansi-styles : 4.3 .0
string-width : 4.2 .3
strip-ansi : 6.0 .1
wrap-ansi@8.1.0 :
dependencies :
ansi-styles : 6.2 .3
string-width : 5.1 .2
strip-ansi : 7.2 .0
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
wrap-ansi@9.0.2 :
dependencies :
ansi-styles : 6.2 .3
string-width : 7.2 .0
strip-ansi : 7.2 .0
wrappy@1.0.2 : {}
ws@8.18.3 : {}
xml2js@0.6.2 :
dependencies :
sax : 1.5 .0
xmlbuilder : 11.0 .1
xmlbuilder@11.0.1 : {}
xmlhttprequest-ssl@2.1.2 : {}
yaml@2.8.2 : {}
yocto-queue@0.1.0 : {}
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Adds a full GDPR Article 15 (right of access) workflow. Staff trigger
an export from the client detail; a BullMQ worker assembles every row
keyed to that client (profile, contacts, addresses, notes, tags,
yachts, company memberships, interests, reservations, invoices,
documents, last 500 audit events) into JSON + a self-contained HTML
report, ZIPs them, uploads to MinIO, and optionally emails the client
a 7-day signed download link.
- New table gdpr_exports tracks lifecycle (pending → building → ready
→ sent / failed) with a 30-day cleanup target
- Bundle builder (gdpr-bundle-builder.ts) — pure read-side, tenant-
scoped, with HTML escaping to block injection from rogue field values
- Worker hook in export queue dispatches on job name 'gdpr-export'
- New audit actions: 'request_gdpr_export', 'send_gdpr_export'
- API: POST/GET /api/v1/clients/:id/gdpr-export (admin-gated, exports
rate-limit, Article-15 audit on POST); GET /:exportId returns a
fresh signed URL
- UI: <GdprExportButton> dialog on client detail header — admin-only,
shows recent exports, supports email-to-client + override recipient,
polls every 5s while open
- Validation: refuses email-to-client when no primary email + no
override (rather than silently dropping the send)
Tests: 778/778 vitest (was 771) — +7 covering builder happy path,
HTML escaping, tenant isolation, empty client, request-flow validation,
and audit / queue interaction.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 20:06:31 +02:00
zip-stream@6.0.1 :
dependencies :
archiver-utils : 5.0 .2
compress-commons : 6.0 .2
readable-stream : 4.7 .0
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
The mobile receipt scanner now runs Tesseract.js in-browser by default —
on-device, free, and image bytes never leave the device. AI providers
(OpenAI / Claude) become a per-port opt-in for higher accuracy on
hard-to-read receipts.
- Lazy-load Tesseract WASM in src/lib/ocr/tesseract-client.ts (5 MB
bundle dynamic-imports on first scan, not in main chunk)
- Heuristic parser src/lib/ocr/parse-receipt-text.ts extracts vendor,
date, amount, currency, and line items from raw OCR text
- New port-scoped aiEnabled flag on OcrConfig (defaults false). Resolved
flag never inherits from the global row — each port admin opts in
independently
- Scan endpoint short-circuits to manual-mode when aiEnabled=false so
the AI provider is never invoked unless the admin has flipped the
switch
- Scan UI runs Tesseract first, then asks the server whether AI is
enabled — uses the AI result only when its confidence beats Tesseract;
network failures degrade gracefully to the local parse
- Admin OCR-settings form gains the per-port aiEnabled checkbox
Tests: 756/756 vitest (was 747) — +7 parser unit tests, +2 aiEnabled
config tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 19:46:29 +02:00
zlibjs@0.3.1 : {}
Initial commit: Port Nimara CRM (Layers 0-4)
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:52:51 +01:00
zod@3.25.76 : {}
zod@4.3.6 : {}
zustand@4.5.7(@types/react@19.2.14)(immer@11.1.4)(react@19.2.4) :
dependencies :
use-sync-external-store : 1.6 .0 (react@19.2.4)
optionalDependencies :
'@types/react' : 19.2 .14
immer : 11.1 .4
react : 19.2 .4
zustand@5.0.11(@types/react@19.2.14)(immer@11.1.4)(react@19.2.4)(use-sync-external-store@1.6.0(react@19.2.4)) :
optionalDependencies :
'@types/react' : 19.2 .14
immer : 11.1 .4
react : 19.2 .4
use-sync-external-store : 1.6 .0 (react@19.2.4)