From 0381d9b6c0e4a638e511ef9c95d91d9002bae354 Mon Sep 17 00:00:00 2001 From: Anmol1696 Date: Mon, 11 May 2026 14:03:32 +0800 Subject: [PATCH] chore: deprecate constructive/functions in favor of constructive-functions repo The simple-email and send-email-link function workloads now live in the dedicated constructive-functions repository under handler.ts + fn-runtime, and the hub already launches functions from that submodule. The copies under this repo's functions/ directory are no longer referenced at runtime, so drop them along with the unreachable cnc jobs up CLI command. - Remove functions/ (both packages) and docker/functions/simple-email.Dockerfile. - Drop 'functions/*' from pnpm-workspace.yaml. - Delete packages/cli/src/commands/jobs.ts, its registration in commands.ts, the help text entries, and the @constructive-io/knative-job-service dep from packages/cli. - Empty the jobs/knative-job-service function registry and drop the now-broken workspace deps on simple-email-fn / send-email-link-fn so the workspace still installs. jobs/ itself is kept for a follow-up PR pending the hub job-server cutover. - Update CLAUDE.md / AGENTS.md to point readers at constructive-functions. --- AGENTS.md | 2 +- CLAUDE.md | 7 +- docker/functions/send-email.Dockerfile | 50 - functions/send-email/CHANGELOG.md | 194 --- functions/send-email/README.md | 106 -- functions/send-email/package.json | 42 - functions/send-email/src/index.ts | 102 -- functions/send-email/tsconfig.esm.json | 8 - functions/send-email/tsconfig.json | 10 - functions/send-verification-link/CHANGELOG.md | 215 --- functions/send-verification-link/Dockerfile | 16 - functions/send-verification-link/README.md | 190 --- functions/send-verification-link/package.json | 46 - functions/send-verification-link/src/index.ts | 413 ----- .../send-verification-link/tsconfig.esm.json | 9 - .../send-verification-link/tsconfig.json | 9 - jobs/knative-job-service/package.json | 2 - jobs/knative-job-service/src/index.ts | 14 +- jobs/knative-job-service/src/types.ts | 2 +- packages/cli/package.json | 1 - packages/cli/src/commands.ts | 2 - packages/cli/src/commands/jobs.ts | 205 --- packages/cli/src/utils/display.ts | 4 - pnpm-lock.yaml | 1339 +---------------- pnpm-workspace.yaml | 1 - 25 files changed, 24 insertions(+), 2965 deletions(-) delete mode 100644 docker/functions/send-email.Dockerfile delete mode 100644 functions/send-email/CHANGELOG.md delete mode 100644 functions/send-email/README.md delete mode 100644 functions/send-email/package.json delete mode 100644 functions/send-email/src/index.ts delete mode 100644 functions/send-email/tsconfig.esm.json delete mode 100644 functions/send-email/tsconfig.json delete mode 100644 functions/send-verification-link/CHANGELOG.md delete mode 100644 functions/send-verification-link/Dockerfile delete mode 100644 functions/send-verification-link/README.md delete mode 100644 functions/send-verification-link/package.json delete mode 100644 functions/send-verification-link/src/index.ts delete mode 100644 functions/send-verification-link/tsconfig.esm.json delete mode 100644 functions/send-verification-link/tsconfig.json delete mode 100644 packages/cli/src/commands/jobs.ts diff --git a/AGENTS.md b/AGENTS.md index 81283511fa..62474ae2a6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -26,7 +26,7 @@ This guide helps AI agents quickly navigate the Constructive monorepo. Construct - **`streaming/*`** – S3 helpers and stream hashing utilities - **`extensions/*`** – PGPM extension modules (Postgres extensions packaged as PGPM modules) - **`graphile/*`** – Graphile/PostGraphile plugins (kept under their own namespace) -- **`jobs/*`**, **`functions/*`** – supporting systems and examples +- **`jobs/*`** – job scheduler/worker (deprecated; function workloads have moved to the `constructive-functions` repo) ## Entry Points diff --git a/CLAUDE.md b/CLAUDE.md index 18b198dd82..bdc495aaab 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,14 +70,13 @@ React Query Hooks or Prisma-like ORM Client | `postgres/` | PostgreSQL utilities - introspection, testing (pgsql-test), seeding, AST, query context | | `packages/` | Shared utilities - CLI (`cnc`), ORM base, query builder, server utils, client | | `uploads/` | File streaming - S3/MinIO, ETags, content-type detection, UUID hashing | -| `jobs/` | Knative job scheduling - worker, scheduler, service, functions | -| `functions/` | Knative cloud functions (e.g., send-verification-link, send-email) | +| `jobs/` | Knative job scheduling - worker, scheduler, service (deprecated: function workloads have moved to the `constructive-functions` repo; this directory will be removed in a follow-up) | ### Key Packages & CLIs **`pgpm` CLI** (`pgpm/cli`) - PostgreSQL Package Manager. Commands: `init`, `add`, `deploy`, `revert`, `verify`, `plan`, `install`, `export`, `docker`, `dump`, `tag`. Manages SQL migrations in Sqitch-compatible format with dependency resolution. -**`cnc` CLI** (`packages/cli`, binary: `cnc` or `constructive`) - Full dev toolkit. Commands: `server` (start PostGraphile), `explorer` (GraphiQL UI), `codegen` (generate SDK), `get-graphql-schema`, `jobs`, `context`, `auth`, `execute`. +**`cnc` CLI** (`packages/cli`, binary: `cnc` or `constructive`) - Full dev toolkit. Commands: `server` (start PostGraphile), `explorer` (GraphiQL UI), `codegen` (generate SDK), `get-graphql-schema`, `context`, `auth`, `execute`. **`graphql/codegen`** - Generates type-safe clients from GraphQL schema or endpoint: - `--react-query` mode: TanStack Query v5 hooks with query key factories @@ -115,6 +114,8 @@ test('example', async () => { Background jobs use Knative: jobs are added to `app_jobs.jobs` table → `knative-job-worker` polls and picks up → POSTs to Knative function URL → function executes (e.g., send email) → returns status. +**Note:** Function implementations (`send-email`, `send-verification-link`, etc.) now live in the dedicated [`constructive-functions`](https://github.com/constructive-io/constructive-functions) repository under `functions//handler.ts`. The `functions/` directory previously hosted here has been removed; the `jobs/` directory is on the same deprecation path and will follow once the hub-side job-server cutover lands. + ### Database Configuration Tests require PostgreSQL. Standard PG env vars: diff --git a/docker/functions/send-email.Dockerfile b/docker/functions/send-email.Dockerfile deleted file mode 100644 index 0d1002e9e6..0000000000 --- a/docker/functions/send-email.Dockerfile +++ /dev/null @@ -1,50 +0,0 @@ -ARG BASE=node -ARG BASE_VERSION=20-bookworm - -FROM ${BASE}:${BASE_VERSION} AS build - -WORKDIR /app - -# System deps and pnpm for building the monorepo -RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends \ - ca-certificates curl git python3 make g++; \ - update-ca-certificates || true; \ - npm install -g pnpm@10.10.0; \ - rm -rf /var/lib/apt/lists/* - -# Build context MUST be the repo root when building this image -COPY . . - -# Install dependencies once for the whole workspace -RUN set -eux; \ - pnpm install --frozen-lockfile - -# Build the send-email function and its dependencies -ARG FUNCTION_DIR=functions/send-email -RUN set -eux; \ - pnpm --filter "./${FUNCTION_DIR}"... build - -################################################################################ -FROM ${BASE}:${BASE_VERSION} - -WORKDIR /app - -RUN set -eux; \ - apt-get update; \ - apt-get install -y --no-install-recommends ca-certificates; \ - update-ca-certificates || true; \ - rm -rf /var/lib/apt/lists/* - -# Copy the built repo from builder (keeps pnpm workspace wiring intact) -COPY --from=build /app /app - -# send-email function workspace directory -WORKDIR /app/functions/send-email - -ENV NODE_ENV=production - -# Entry point for the send-email function -CMD ["node", "dist/index.js"] - diff --git a/functions/send-email/CHANGELOG.md b/functions/send-email/CHANGELOG.md deleted file mode 100644 index 6d5a7237d2..0000000000 --- a/functions/send-email/CHANGELOG.md +++ /dev/null @@ -1,194 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [1.11.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.10.0...@constructive-io/simple-email-fn@1.11.0) (2026-05-11) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.10.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.9.0...@constructive-io/simple-email-fn@1.10.0) (2026-05-08) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.9.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.8.0...@constructive-io/simple-email-fn@1.9.0) (2026-05-08) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.8.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.7.0...@constructive-io/simple-email-fn@1.8.0) (2026-05-06) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.7.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.6.4...@constructive-io/simple-email-fn@1.7.0) (2026-04-18) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.6.4](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.6.3...@constructive-io/simple-email-fn@1.6.4) (2026-04-04) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.6.3](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.6.2...@constructive-io/simple-email-fn@1.6.3) (2026-03-31) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.6.2](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.6.1...@constructive-io/simple-email-fn@1.6.2) (2026-03-27) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.6.1](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.6.0...@constructive-io/simple-email-fn@1.6.1) (2026-03-26) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.6.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.5.3...@constructive-io/simple-email-fn@1.6.0) (2026-03-26) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.5.3](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.5.2...@constructive-io/simple-email-fn@1.5.3) (2026-03-15) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.5.2](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.5.1...@constructive-io/simple-email-fn@1.5.2) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.5.1](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.4.0...@constructive-io/simple-email-fn@1.5.1) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.5.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.4.0...@constructive-io/simple-email-fn@1.5.0) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.4.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.3.1...@constructive-io/simple-email-fn@1.4.0) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.3.1](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.3.0...@constructive-io/simple-email-fn@1.3.1) (2026-03-04) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.3.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.2.0...@constructive-io/simple-email-fn@1.3.0) (2026-02-24) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.2.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.1.1...@constructive-io/simple-email-fn@1.2.0) (2026-02-19) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.1.1](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.1.0...@constructive-io/simple-email-fn@1.1.1) (2026-02-15) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.1.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.0.2...@constructive-io/simple-email-fn@1.1.0) (2026-02-09) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.0.2](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.0.1...@constructive-io/simple-email-fn@1.0.2) (2026-01-27) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [1.0.1](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@1.0.0...@constructive-io/simple-email-fn@1.0.1) (2026-01-25) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [1.0.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.4.2...@constructive-io/simple-email-fn@1.0.0) (2026-01-24) - -### Features - -- modernize postmaster package with TypeScript Mailgun wrapper ([ac93185](https://github.com/constructive-io/constructive/commit/ac93185aadcfa7d2643d0d1736a6fb1a0b826802)) - -## [0.4.2](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.4.1...@constructive-io/simple-email-fn@0.4.2) (2026-01-22) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.4.1](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.4.0...@constructive-io/simple-email-fn@0.4.1) (2026-01-21) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [0.4.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.3.1...@constructive-io/simple-email-fn@0.4.0) (2026-01-20) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.3.1](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.3.0...@constructive-io/simple-email-fn@0.3.1) (2026-01-19) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -# [0.3.0](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.22...@constructive-io/simple-email-fn@0.3.0) (2026-01-18) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.22](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.21...@constructive-io/simple-email-fn@0.2.22) (2026-01-18) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.21](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.20...@constructive-io/simple-email-fn@0.2.21) (2026-01-09) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.20](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.19...@constructive-io/simple-email-fn@0.2.20) (2026-01-07) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.19](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.18...@constructive-io/simple-email-fn@0.2.19) (2026-01-02) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.18](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.17...@constructive-io/simple-email-fn@0.2.18) (2025-12-31) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.17](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.16...@constructive-io/simple-email-fn@0.2.17) (2025-12-31) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.16](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.15...@constructive-io/simple-email-fn@0.2.16) (2025-12-27) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.15](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.14...@constructive-io/simple-email-fn@0.2.15) (2025-12-26) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.14](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.13...@constructive-io/simple-email-fn@0.2.14) (2025-12-26) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.13](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.12...@constructive-io/simple-email-fn@0.2.13) (2025-12-26) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.12](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.11...@constructive-io/simple-email-fn@0.2.12) (2025-12-25) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.11](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.10...@constructive-io/simple-email-fn@0.2.11) (2025-12-24) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.10](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.9...@constructive-io/simple-email-fn@0.2.10) (2025-12-23) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.9](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.8...@constructive-io/simple-email-fn@0.2.9) (2025-12-22) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.8](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.7...@constructive-io/simple-email-fn@0.2.8) (2025-12-22) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.7](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.6...@constructive-io/simple-email-fn@0.2.7) (2025-12-21) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## 0.2.6 (2025-12-19) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.5](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.4...@constructive-io/simple-email-fn@0.2.5) (2025-12-18) - -**Note:** Version bump only for package @constructive-io/simple-email-fn - -## [0.2.4](https://github.com/constructive-io/constructive/compare/@constructive-io/simple-email-fn@0.2.3...@constructive-io/simple-email-fn@0.2.4) (2025-12-17) - -**Note:** Version bump only for package @constructive-io/simple-email-fn diff --git a/functions/send-email/README.md b/functions/send-email/README.md deleted file mode 100644 index 9b0852bb0a..0000000000 --- a/functions/send-email/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# @constructive-io/send-email-fn - -

- -

- -

- - - - - -

- -Simple Knative-compatible email function used with the Constructive jobs system. - -This function is intentionally minimal: it reads an email payload from the job -body and **logs it only** in dry‑run mode. When not in dry‑run, it sends via -the configured email provider. This is useful while wiring up jobs and Knative -without needing a real mail provider configured. - -## Expected job payload - -Jobs should use `task_identifier = 'email:send_email'` (or whatever route you -configure at your Knative gateway) and a JSON payload like: - -```json -{ - "to": "user@example.com", - "subject": "Welcome!", - "html": "

Welcome to our app

" -} -``` - -Supported fields: - -- `to` (string, required) -- `subject` (string, required) -- `html` (string, optional) -- `text` (string, optional) -- `from` (string, optional) -- `replyTo` (string, optional) - -At least one of `html` or `text` must be provided. If required fields are -missing, the function throws and the error is propagated via the -`@constructive-io/knative-job-fn` wrapper as a job error. - -## HTTP contract (with knative-job-worker) - -The function is wrapped by `@constructive-io/knative-job-fn`, so it expects: - -- HTTP method: `POST` -- Body: JSON job payload (see above) -- Headers (set by `@constructive-io/knative-job-worker`): - - `X-Worker-Id` - - `X-Job-Id` - - `X-Database-Id` - - `X-Callback-Url` - -The handler: - -1. Reads the email data directly from the request body. -2. Logs the email metadata (to/subject/from, and whether html/text are present) - and the full payload. -3. Responds with HTTP 200 and: - -```json -{ "complete": true } -``` - -Errors bubble into the error middleware installed by -`@constructive-io/knative-job-fn`, so they are translated into an `X-Job-Error` -callback for the worker. - -## Environment variables - -Email provider configuration is only required when not running in dry‑run mode. - -Optional: - -- `SEND_EMAIL_DRY_RUN` (`true`/`false`): log only, skip send. -- `EMAIL_SEND_USE_SMTP` (`true`/`false`): use SMTP (`simple-smtp-server`). - -Mailgun (`@launchql/postmaster`) env vars when `EMAIL_SEND_USE_SMTP` is false: - -- `MAILGUN_API_KEY` -- `MAILGUN_DOMAIN` -- `MAILGUN_FROM` - -SMTP env vars when `EMAIL_SEND_USE_SMTP` is true: - -- `SMTP_HOST` -- `SMTP_PORT` -- `SMTP_USER` -- `SMTP_PASS` -- `SMTP_FROM` - -## Building locally - -From the repo root: - -```bash -pnpm --filter="@constructive-io/send-email-fn" build -``` - -This compiles TypeScript into `dist/`. diff --git a/functions/send-email/package.json b/functions/send-email/package.json deleted file mode 100644 index f440e1d51e..0000000000 --- a/functions/send-email/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@constructive-io/send-email-fn", - "version": "1.11.0", - "description": "Simple Knative email function that sends emails directly from job payload", - "author": "Constructive ", - "homepage": "https://github.com/constructive-io/constructive", - "license": "MIT", - "main": "index.js", - "module": "esm/index.js", - "types": "index.d.ts", - "publishConfig": { - "access": "public", - "directory": "dist" - }, - "repository": { - "type": "git", - "url": "https://github.com/constructive-io/constructive" - }, - "bugs": { - "url": "https://github.com/constructive-io/constructive/issues" - }, - "directories": { - "lib": "src", - "test": "__tests__" - }, - "scripts": { - "clean": "makage clean", - "prepack": "npm run build", - "build": "makage build", - "build:dev": "makage build --dev" - }, - "devDependencies": { - "makage": "^0.3.0" - }, - "dependencies": { - "@constructive-io/knative-job-fn": "workspace:^", - "@constructive-io/postmaster": "workspace:^", - "@pgpmjs/env": "workspace:^", - "@pgpmjs/logger": "workspace:^", - "simple-smtp-server": "workspace:^" - } -} diff --git a/functions/send-email/src/index.ts b/functions/send-email/src/index.ts deleted file mode 100644 index 197afd2b6e..0000000000 --- a/functions/send-email/src/index.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { createJobApp } from '@constructive-io/knative-job-fn'; -import { send as sendSmtp } from 'simple-smtp-server'; -import { send as sendPostmaster } from '@constructive-io/postmaster'; -import { parseEnvBoolean } from '@pgpmjs/env'; -import { createLogger } from '@pgpmjs/logger'; - -type SimpleEmailPayload = { - to: string; - subject: string; - html?: string; - text?: string; - from?: string; - replyTo?: string; -}; - -const isNonEmptyString = (value: unknown): value is string => - typeof value === 'string' && value.trim().length > 0; - -const getRequiredField = ( - payload: SimpleEmailPayload, - field: keyof SimpleEmailPayload -) => { - const value = payload[field]; - if (!isNonEmptyString(value)) { - throw new Error(`Missing required field '${String(field)}'`); - } - return value; -}; - -const isDryRun = parseEnvBoolean(process.env.SEND_EMAIL_DRY_RUN ?? process.env.SIMPLE_EMAIL_DRY_RUN) ?? false; -const useSmtp = parseEnvBoolean(process.env.EMAIL_SEND_USE_SMTP) ?? false; -const logger = createLogger('send-email'); -const app = createJobApp(); - -app.post('/', async (req: any, res: any, next: any) => { - try { - const payload = (req.body || {}) as SimpleEmailPayload; - - const to = getRequiredField(payload, 'to'); - const subject = getRequiredField(payload, 'subject'); - - const html = isNonEmptyString(payload.html) ? payload.html : undefined; - const text = isNonEmptyString(payload.text) ? payload.text : undefined; - - if (!html && !text) { - throw new Error("Either 'html' or 'text' must be provided"); - } - - const fromEnv = useSmtp ? process.env.SMTP_FROM : process.env.MAILGUN_FROM; - const from = isNonEmptyString(payload.from) - ? payload.from - : isNonEmptyString(fromEnv) - ? fromEnv - : undefined; - - const replyTo = isNonEmptyString(payload.replyTo) - ? payload.replyTo - : undefined; - - const logContext = { - to, - subject, - from, - replyTo, - hasHtml: Boolean(html), - hasText: Boolean(text) - }; - - if (isDryRun) { - logger.info('DRY RUN email (no send)', logContext); - } else { - // Send via the Postmaster package (Mailgun or configured provider) - const sendEmail = useSmtp ? sendSmtp : sendPostmaster; - await sendEmail({ - to, - subject, - ...(html && { html }), - ...(text && { text }), - ...(from && { from }), - ...(replyTo && { replyTo }) - }); - - logger.info('Sent email', logContext); - } - - res.status(200).json({ complete: true }); - } catch (err) { - next(err); - } -}); - -export default app; - -// When executed directly (e.g. `node dist/index.js` in Knative), -// start an HTTP server on the provided PORT (default 8080). -if (require.main === module) { - const port = Number(process.env.PORT ?? 8080); - // @constructive-io/knative-job-fn exposes a .listen method that delegates to the underlying Express app - (app as any).listen(port, () => { - logger.info(`listening on port ${port}`); - }); -} diff --git a/functions/send-email/tsconfig.esm.json b/functions/send-email/tsconfig.esm.json deleted file mode 100644 index 809510a46b..0000000000 --- a/functions/send-email/tsconfig.esm.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "esnext", - "moduleResolution": "bundler" - } -} - diff --git a/functions/send-email/tsconfig.json b/functions/send-email/tsconfig.json deleted file mode 100644 index a433208431..0000000000 --- a/functions/send-email/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src/" - }, - "include": ["src/**/*.ts", "../../types/**/*.d.ts"], - "exclude": ["dist", "node_modules", "**/*.spec.*", "**/*.test.*"] -} - diff --git a/functions/send-verification-link/CHANGELOG.md b/functions/send-verification-link/CHANGELOG.md deleted file mode 100644 index e81f9669d5..0000000000 --- a/functions/send-verification-link/CHANGELOG.md +++ /dev/null @@ -1,215 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [2.11.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.10.0...@constructive-io/send-email-link-fn@2.11.0) (2026-05-11) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.10.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.9.0...@constructive-io/send-email-link-fn@2.10.0) (2026-05-08) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.9.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.8.0...@constructive-io/send-email-link-fn@2.9.0) (2026-05-08) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.8.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.7.0...@constructive-io/send-email-link-fn@2.8.0) (2026-05-06) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.7.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.6.4...@constructive-io/send-email-link-fn@2.7.0) (2026-04-18) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.6.4](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.6.3...@constructive-io/send-email-link-fn@2.6.4) (2026-04-04) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.6.3](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.6.2...@constructive-io/send-email-link-fn@2.6.3) (2026-03-31) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.6.2](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.6.1...@constructive-io/send-email-link-fn@2.6.2) (2026-03-27) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.6.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.6.0...@constructive-io/send-email-link-fn@2.6.1) (2026-03-26) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.6.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.5.2...@constructive-io/send-email-link-fn@2.6.0) (2026-03-26) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.5.2](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.5.1...@constructive-io/send-email-link-fn@2.5.2) (2026-03-25) - -### Bug Fixes - -- **send-email-link:** use X-Meta-Schema for platform data queries ([b29614c](https://github.com/constructive-io/constructive/commit/b29614ca540ceb43469d2e1d6b95edae4c5e87c8)) - -## [2.5.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.5.0...@constructive-io/send-email-link-fn@2.5.1) (2026-03-15) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.5.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.4.2...@constructive-io/send-email-link-fn@2.5.0) (2026-03-14) - -### Bug Fixes - -- migrate remaining condition queries to filter, register filterBy behavior for pgCodecRelation, update schema snapshot with relation filter types ([5207254](https://github.com/constructive-io/constructive/commit/5207254ad96ec30100e93f6268137eaede1e4387)) -- update send-email-link GraphQL queries filter→where argument ([971b7ed](https://github.com/constructive-io/constructive/commit/971b7edda82341db26ecf57de90bde44f115c172)) - -## [2.4.2](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.4.1...@constructive-io/send-email-link-fn@2.4.2) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.4.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.3.0...@constructive-io/send-email-link-fn@2.4.1) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.4.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.3.0...@constructive-io/send-email-link-fn@2.4.0) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.3.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.2.2...@constructive-io/send-email-link-fn@2.3.0) (2026-03-12) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.2.2](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.2.1...@constructive-io/send-email-link-fn@2.2.2) (2026-03-04) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.2.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.2.0...@constructive-io/send-email-link-fn@2.2.1) (2026-03-01) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.2.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.1.0...@constructive-io/send-email-link-fn@2.2.0) (2026-02-24) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.1.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.0.1...@constructive-io/send-email-link-fn@2.1.0) (2026-02-19) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [2.0.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@2.0.0...@constructive-io/send-email-link-fn@2.0.1) (2026-02-15) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [2.0.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@1.1.0...@constructive-io/send-email-link-fn@2.0.0) (2026-02-13) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [1.1.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@1.0.2...@constructive-io/send-email-link-fn@1.1.0) (2026-02-09) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [1.0.2](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@1.0.1...@constructive-io/send-email-link-fn@1.0.2) (2026-01-27) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [1.0.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@1.0.0...@constructive-io/send-email-link-fn@1.0.1) (2026-01-25) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [1.0.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.4.2...@constructive-io/send-email-link-fn@1.0.0) (2026-01-24) - -### Features - -- modernize postmaster package with TypeScript Mailgun wrapper ([ac93185](https://github.com/constructive-io/constructive/commit/ac93185aadcfa7d2643d0d1736a6fb1a0b826802)) - -## [0.4.2](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.4.1...@constructive-io/send-email-link-fn@0.4.2) (2026-01-22) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.4.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.4.0...@constructive-io/send-email-link-fn@0.4.1) (2026-01-21) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [0.4.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.3.1...@constructive-io/send-email-link-fn@0.4.0) (2026-01-20) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.3.1](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.3.0...@constructive-io/send-email-link-fn@0.3.1) (2026-01-19) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -# [0.3.0](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.21...@constructive-io/send-email-link-fn@0.3.0) (2026-01-18) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.21](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.20...@constructive-io/send-email-link-fn@0.2.21) (2026-01-18) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.20](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.19...@constructive-io/send-email-link-fn@0.2.20) (2026-01-09) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.19](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.18...@constructive-io/send-email-link-fn@0.2.19) (2026-01-07) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.18](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.17...@constructive-io/send-email-link-fn@0.2.18) (2026-01-02) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.17](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.16...@constructive-io/send-email-link-fn@0.2.17) (2025-12-31) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.16](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.15...@constructive-io/send-email-link-fn@0.2.16) (2025-12-31) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.15](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.14...@constructive-io/send-email-link-fn@0.2.15) (2025-12-27) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.14](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.13...@constructive-io/send-email-link-fn@0.2.14) (2025-12-26) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.13](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.12...@constructive-io/send-email-link-fn@0.2.13) (2025-12-26) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.12](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.11...@constructive-io/send-email-link-fn@0.2.12) (2025-12-26) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.11](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.10...@constructive-io/send-email-link-fn@0.2.11) (2025-12-25) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.10](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.9...@constructive-io/send-email-link-fn@0.2.10) (2025-12-24) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.9](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.8...@constructive-io/send-email-link-fn@0.2.9) (2025-12-23) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.8](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.7...@constructive-io/send-email-link-fn@0.2.8) (2025-12-22) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.7](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.6...@constructive-io/send-email-link-fn@0.2.7) (2025-12-22) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.6](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.5...@constructive-io/send-email-link-fn@0.2.6) (2025-12-21) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## 0.2.5 (2025-12-19) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.4](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.3...@constructive-io/send-email-link-fn@0.2.4) (2025-12-18) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn - -## [0.2.3](https://github.com/constructive-io/constructive/compare/@constructive-io/send-email-link-fn@0.2.2...@constructive-io/send-email-link-fn@0.2.3) (2025-12-17) - -**Note:** Version bump only for package @constructive-io/send-email-link-fn diff --git a/functions/send-verification-link/Dockerfile b/functions/send-verification-link/Dockerfile deleted file mode 100644 index af09766cf3..0000000000 --- a/functions/send-verification-link/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM node:18-alpine - -WORKDIR /usr/src/app - -# Install pnpm and production dependencies -COPY package.json pnpm-lock.yaml ./ -RUN npm install -g pnpm@9 && pnpm install --prod - -# Copy compiled code (build should be run before building image) -COPY dist ./dist - -ENV NODE_ENV=production -ENV PORT=8080 - -CMD ["node", "dist/index.js"] - diff --git a/functions/send-verification-link/README.md b/functions/send-verification-link/README.md deleted file mode 100644 index bb42c8ac96..0000000000 --- a/functions/send-verification-link/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# @constructive-io/send-verification-link-fn - -

- -

- -

- - - - - -

- -Knative-compatible email link function used with the Constructive jobs system. It is designed to be invoked by `@constructive-io/knative-job-worker` as an HTTP function named `send-verification-link`. - -The function: -- Reads metadata about the tenant/site from a GraphQL API -- Generates a styled HTML email using `@launchql/mjml` -- Sends the email via `@launchql/postmaster` -- Supports invite, password reset, and email verification flows - -## Expected job payload - -Jobs should use `task_identifier = 'email:send_verification_link'` and a JSON payload like: - -```json -{ - "email_type": "invite_email", - "email": "user@example.com", - "invite_token": "abc123", - "sender_id": "00000000-0000-0000-0000-000000000001" -} -``` - -Supported `email_type` values and parameters: - -- `invite_email` - - `email` (string, required) - - `invite_token` (string, required) - - `sender_id` (UUID string, required) -- `forgot_password` - - `email` (string, required) - - `user_id` (UUID string, required) - - `reset_token` (string, required) -- `email_verification` - - `email` (string, required) - - `email_id` (UUID string, required) - - `verification_token` (string, required) - -If required fields are missing the function returns a small JSON object like: - -```json -{ "missing": "email_type" } -``` - -## HTTP contract (with knative-job-worker) - -The function is wrapped by `@constructive-io/knative-job-fn`, so it expects: - -- HTTP method: `POST` -- Body: JSON job payload (see above) -- Headers (set by `@constructive-io/knative-job-worker`): - - `X-Worker-Id` - - `X-Job-Id` - - `X-Database-Id` - - `X-Callback-Url` - -The handler will: - -1. Resolve the tenant/site by `databaseId` via GraphQL -2. Generate an email link and HTML via `@launchql/mjml` -3. Send the email with `@launchql/postmaster` -4. Respond with HTTP 200 and JSON: - -```json -{ "complete": true } -``` - -Errors are propagated through the Express error middleware installed by `@constructive-io/knative-job-fn`, so they can be translated into `X-Job-Error` callbacks by your gateway/callback server. - -## Environment variables - -Required: - -- `GRAPHQL_URL` - GraphQL endpoint for the tenant database (for `GetUser` and/or per-tenant data). - -Recommended / optional: - -- `META_GRAPHQL_URL` - GraphQL endpoint for meta/database-level schema. Defaults to `GRAPHQL_URL` when not set. -- `GRAPHQL_AUTH_TOKEN` - Bearer token to send as `Authorization` header for GraphQL requests. -- `DEFAULT_DATABASE_ID` - Used if `X-Database-Id` is not provided by the worker. In normal jobs usage, `X-Database-Id` should always be present. -- `LOCAL_APP_PORT` - Optional port suffix for localhost-style hosts (e.g. `3000`). When the resolved hostname is `localhost` / `*.localhost` and `SEND_VERIFICATION_LINK_DRY_RUN=true`, links are generated as `http://localhost:LOCAL_APP_PORT/...`. Ignored for non-local hostnames and in production. - -Email delivery (default: `@launchql/postmaster`): - -- Set `EMAIL_SEND_USE_SMTP=true` to switch to `simple-smtp-server` (SMTP). Otherwise it uses `@launchql/postmaster`. - -- Mailgun or another provider; consult `@launchql/postmaster` docs. A common pattern is: - - `MAILGUN_API_KEY` - - `MAILGUN_DOMAIN` - - `MAILGUN_FROM` - -- SMTP variables when `EMAIL_SEND_USE_SMTP=true`: - - `SMTP_HOST` - - `SMTP_PORT` - - `SMTP_USER` - - `SMTP_PASS` - - `SMTP_FROM` - -## Building locally - -From the repo root: - -```bash -pnpm --filter="@constructive-io/send-verification-link-fn" build -``` - -This compiles TypeScript into `dist/`. - -## Dockerfile - -The function is intended to be containerized and run as a Knative Service. A minimal Dockerfile: - -```dockerfile -FROM node:18-alpine - -WORKDIR /usr/src/app - -# Install production dependencies -COPY package.json pnpm-lock.yaml ./ -RUN npm install -g pnpm@9 && pnpm install --prod - -# Copy compiled code -COPY dist ./dist - -ENV NODE_ENV=production -ENV PORT=8080 - -CMD ["node", "dist/index.js"] -``` - -Build and push: - -```bash -pnpm --filter="@constructive-io/send-verification-link-fn" build -docker build -t your-registry/send-verification-link-fn:latest functions/send-verification-link -docker push your-registry/send-verification-link-fn:latest -``` - -## Example Knative Service - -```yaml -apiVersion: serving.knative.dev/v1 -kind: Service -metadata: - name: send-verification-link - namespace: default -spec: - template: - spec: - containers: - - image: your-registry/send-verification-link-fn:latest - env: - - name: GRAPHQL_URL - value: "https://api.your-domain.com/graphql" - - name: META_GRAPHQL_URL - value: "https://meta-api.your-domain.com/graphql" - - name: GRAPHQL_AUTH_TOKEN - valueFrom: - secretKeyRef: - name: graphql-auth - key: token - # MAILGUN / Postmaster config here... - - name: MAILGUN_API_KEY - valueFrom: - secretKeyRef: - name: mailgun - key: api-key -``` - -Once deployed, point `@constructive-io/knative-job-worker` at this service by configuring: - -- `KNATIVE_SERVICE_URL` to route `/send-verification-link` to this function -- `JOBS_SUPPORTED=send-verification-link` (or `JOBS_SUPPORT_ANY=true`) diff --git a/functions/send-verification-link/package.json b/functions/send-verification-link/package.json deleted file mode 100644 index 89c662ca52..0000000000 --- a/functions/send-verification-link/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@constructive-io/send-verification-link-fn", - "version": "2.11.0", - "description": "Knative function to send verification links (invite, password reset, email verification) using Constructive jobs", - "author": "Constructive ", - "homepage": "https://github.com/constructive-io/constructive", - "license": "MIT", - "main": "index.js", - "module": "esm/index.js", - "types": "index.d.ts", - "publishConfig": { - "access": "public", - "directory": "dist" - }, - "repository": { - "type": "git", - "url": "https://github.com/constructive-io/constructive" - }, - "bugs": { - "url": "https://github.com/constructive-io/constructive/issues" - }, - "directories": { - "lib": "src", - "test": "__tests__" - }, - "scripts": { - "clean": "makage clean", - "prepack": "npm run build", - "build": "makage build", - "build:dev": "makage build --dev" - }, - "devDependencies": { - "makage": "^0.3.0" - }, - "dependencies": { - "@constructive-io/knative-job-fn": "workspace:^", - "@constructive-io/postmaster": "workspace:^", - "@launchql/mjml": "0.1.1", - "@launchql/styled-email": "0.1.0", - "@pgpmjs/env": "workspace:^", - "@pgpmjs/logger": "workspace:^", - "graphql-request": "^7.1.2", - "graphql-tag": "^2.12.6", - "simple-smtp-server": "workspace:^" - } -} diff --git a/functions/send-verification-link/src/index.ts b/functions/send-verification-link/src/index.ts deleted file mode 100644 index b7046b472a..0000000000 --- a/functions/send-verification-link/src/index.ts +++ /dev/null @@ -1,413 +0,0 @@ -import { createJobApp } from '@constructive-io/knative-job-fn'; -import { GraphQLClient } from 'graphql-request'; -import gql from 'graphql-tag'; -import { generate } from '@launchql/mjml'; -import { send as sendPostmaster } from '@constructive-io/postmaster'; -import { send as sendSmtp } from 'simple-smtp-server'; -import { parseEnvBoolean } from '@pgpmjs/env'; -import { createLogger } from '@pgpmjs/logger'; - -const isDryRun = parseEnvBoolean(process.env.SEND_VERIFICATION_LINK_DRY_RUN ?? process.env.SEND_EMAIL_LINK_DRY_RUN) ?? false; -const useSmtp = parseEnvBoolean(process.env.EMAIL_SEND_USE_SMTP) ?? false; -const logger = createLogger('send-verification-link'); -const app = createJobApp(); - -const GetUser = gql` - query GetUser($userId: UUID!) { - users(where: { id: { equalTo: $userId } }, first: 1) { - nodes { - username - displayName - profilePicture - } - } - } -`; - -const GetDatabaseInfo = gql` - query GetDatabaseInfo($databaseId: UUID!) { - databases(where: { id: { equalTo: $databaseId } }, first: 1) { - nodes { - sites { - nodes { - domains { - nodes { - subdomain - domain - } - } - logo - title - siteThemes { - nodes { - theme - } - } - siteModules(where: { name: { equalTo: "legal_terms_module" } }) { - nodes { - data - } - } - } - } - } - } - } -`; - -type SendEmailParams = { - email_type: 'invite_email' | 'forgot_password' | 'email_verification'; - email: string; - invite_type?: number | string; - invite_token?: string; - sender_id?: string; - user_id?: string; - reset_token?: string; - email_id?: string; - verification_token?: string; -}; - -type GraphQLContext = { - client: GraphQLClient; - meta: GraphQLClient; - databaseId: string; -}; - -const getRequiredEnv = (name: string): string => { - const value = process.env[name]; - if (!value) { - throw new Error(`Missing required environment variable ${name}`); - } - return value; -}; - -type GraphQLClientOptions = { - hostHeaderEnvVar?: string; - databaseId?: string; - useMetaSchema?: boolean; - apiName?: string; - schemata?: string; -}; - -// TODO: Consider moving this to @constructive-io/knative-job-fn as a shared -// utility so all job functions can create GraphQL clients with consistent -// header-based routing without duplicating this logic. -const createGraphQLClient = ( - url: string, - options: GraphQLClientOptions = {} -): GraphQLClient => { - const headers: Record = {}; - - if (process.env.GRAPHQL_AUTH_TOKEN) { - headers.Authorization = `Bearer ${process.env.GRAPHQL_AUTH_TOKEN}`; - } - - const envName = options.hostHeaderEnvVar || 'GRAPHQL_HOST_HEADER'; - const hostHeader = process.env[envName]; - if (hostHeader) { - headers.host = hostHeader; - } - - // Header-based routing for internal cluster services (API_IS_PUBLIC=false) - if (options.databaseId) { - headers['X-Database-Id'] = options.databaseId; - } - if (options.useMetaSchema) { - headers['X-Meta-Schema'] = 'true'; - } - if (options.apiName) { - headers['X-Api-Name'] = options.apiName; - } - if (options.schemata) { - headers['X-Schemata'] = options.schemata; - } - - return new GraphQLClient(url, { headers }); -}; - -export const sendEmailLink = async ( - params: SendEmailParams, - context: GraphQLContext -) => { - const { client, meta, databaseId } = context; - - const validateForType = (): { missing?: string } | null => { - switch (params.email_type) { - case 'invite_email': - if (!params.invite_token || !params.sender_id) { - return { missing: 'invite_token_or_sender_id' }; - } - return null; - case 'forgot_password': - if (!params.user_id || !params.reset_token) { - return { missing: 'user_id_or_reset_token' }; - } - return null; - case 'email_verification': - if (!params.email_id || !params.verification_token) { - return { missing: 'email_id_or_verification_token' }; - } - return null; - default: - return { missing: 'email_type' }; - } - }; - - if (!params.email_type) { - return { missing: 'email_type' }; - } - if (!params.email) { - return { missing: 'email' }; - } - - const typeValidation = validateForType(); - if (typeValidation) { - return typeValidation; - } - - const databaseInfo = await meta.request(GetDatabaseInfo, { - databaseId - }); - - const database = databaseInfo?.databases?.nodes?.[0]; - const site = database?.sites?.nodes?.[0]; - if (!site) { - throw new Error('Site not found for database'); - } - - const legalTermsModule = site.siteModules?.nodes?.[0]; - const domainNode = site.domains?.nodes?.[0]; - const theme = site.siteThemes?.nodes?.[0]?.theme; - - if (!legalTermsModule || !domainNode || !theme) { - throw new Error('Missing site configuration for email'); - } - - const subdomain = domainNode.subdomain; - const domain = domainNode.domain; - const supportEmail = legalTermsModule.data.emails.support; - const logo = site.logo?.url; - const company = legalTermsModule.data.company; - const website = company.website; - const nick = company.nick; - const name = company.name; - const primary = theme.primary; - - // Check if this is a localhost-style domain before building hostname - // TODO: Security consideration - this only affects localhost domains which - // should not exist in production. The isLocalHost check ensures special - // behavior (http, custom port) only applies in dev environments. - const isLocalDomain = - domain === 'localhost' || - domain.startsWith('localhost') || - domain === '0.0.0.0'; - - // For localhost, skip subdomain to generate cleaner URLs (http://localhost:3000) - const hostname = subdomain && !isLocalDomain - ? [subdomain, domain].join('.') - : domain; - - // Treat localhost-style hosts specially so we can generate - // http://localhost[:port]/... links for local dev without - // breaking production URLs. - const isLocalHost = - hostname.startsWith('localhost') || - hostname.startsWith('0.0.0.0') || - hostname.endsWith('.localhost'); - - // When localhost + LOCAL_APP_PORT: use http://localhost:PORT (local dev) - // Otherwise: https (production) - const useLocalUrl = isLocalHost && process.env.LOCAL_APP_PORT; - const localPort = useLocalUrl ? `:${process.env.LOCAL_APP_PORT}` : ''; - const protocol = useLocalUrl ? 'http' : 'https'; - const url = new URL(`${protocol}://${hostname}${localPort}`); - - let subject: string; - let subMessage: string; - let linkText: string; - - let inviterName: string | undefined; - - switch (params.email_type) { - case 'invite_email': { - if (!params.invite_token || !params.sender_id) { - return { missing: 'invite_token_or_sender_id' }; - } - url.pathname = 'register'; - url.searchParams.append('invite_token', params.invite_token); - url.searchParams.append('email', params.email); - - const scope = Number(params.invite_type) === 2 ? 'org' : 'app'; - url.searchParams.append('type', scope); - - const inviter = await client.request(GetUser, { - userId: params.sender_id - }); - inviterName = inviter?.users?.nodes?.[0]?.displayName; - - if (inviterName) { - subject = `${inviterName} invited you to ${nick}!`; - subMessage = `You've been invited to ${nick}`; - } else { - subject = `Welcome to ${nick}!`; - subMessage = `You've been invited to ${nick}`; - } - linkText = 'Join Us'; - break; - } - case 'forgot_password': { - if (!params.user_id || !params.reset_token) { - return { missing: 'user_id_or_reset_token' }; - } - url.pathname = 'reset-password'; - url.searchParams.append('role_id', params.user_id); - url.searchParams.append('reset_token', params.reset_token); - subject = `${nick} Password Reset Request`; - subMessage = 'Click below to reset your password'; - linkText = 'Reset Password'; - break; - } - case 'email_verification': { - if (!params.email_id || !params.verification_token) { - return { missing: 'email_id_or_verification_token' }; - } - url.pathname = 'verify-email'; - url.searchParams.append('email_id', params.email_id); - url.searchParams.append('verification_token', params.verification_token); - subject = `${nick} Email Verification`; - subMessage = 'Please confirm your email address'; - linkText = 'Confirm Email'; - break; - } - default: - return false; - } - - const link = url.href; - - const html = generate({ - title: subject, - link, - linkText, - message: subject, - subMessage, - bodyBgColor: 'white', - headerBgColor: 'white', - messageBgColor: 'white', - messageTextColor: '#414141', - messageButtonBgColor: primary, - messageButtonTextColor: 'white', - companyName: name, - supportEmail, - website, - logo, - headerImageProps: { - alt: 'logo', - align: 'center', - border: 'none', - width: '162px', - paddingLeft: '0px', - paddingRight: '0px', - paddingBottom: '0px', - paddingTop: '0' - } - }); - - if (isDryRun) { - logger.info('DRY RUN email (skipping send)', { - email_type: params.email_type, - email: params.email, - subject, - link - }); - } else { - const sendEmail = useSmtp ? sendSmtp : sendPostmaster; - await sendEmail({ - to: params.email, - subject, - html - }); - } - - return { - complete: true, - ...(isDryRun ? { dryRun: true } : null) - }; -}; - -// HTTP/Knative entrypoint (used by @constructive-io/knative-job-fn wrapper) -app.post('/', async (req: any, res: any, next: any) => { - try { - const params = (req.body || {}) as SendEmailParams; - - const databaseId = - req.get('X-Database-Id') || req.get('x-database-id') || process.env.DEFAULT_DATABASE_ID; - if (!databaseId) { - return res.status(400).json({ error: 'Missing X-Database-Id header or DEFAULT_DATABASE_ID' }); - } - - const graphqlUrl = getRequiredEnv('GRAPHQL_URL'); - const metaGraphqlUrl = process.env.META_GRAPHQL_URL || graphqlUrl; - - // Get API name or schemata from env (for tenant queries like GetUser) - const apiName = process.env.GRAPHQL_API_NAME; - const schemata = process.env.GRAPHQL_SCHEMATA; - - // For GetUser query - needs tenant API access via X-Api-Name or X-Schemata - const client = createGraphQLClient(graphqlUrl, { - hostHeaderEnvVar: 'GRAPHQL_HOST_HEADER', - databaseId, - ...(apiName && { apiName }), - ...(schemata && { schemata }), - }); - - // For GetDatabaseInfo query - uses X-Meta-Schema to access platform data - // (databases, sites, domains, siteThemes, siteModules are platform-level data) - const meta = createGraphQLClient(metaGraphqlUrl, { - hostHeaderEnvVar: 'META_GRAPHQL_HOST_HEADER', - useMetaSchema: true, - }); - - const result = await sendEmailLink(params, { - client, - meta, - databaseId - }); - - // Validation failures return { missing: '...' } - treat as client error - if (result && typeof result === 'object' && 'missing' in result) { - return res.status(400).json({ error: `Missing required field: ${result.missing}` }); - } - - res.status(200).json(result); - } catch (err) { - next(err); - } -}); - -export default app; - -// When executed directly (e.g. via `node dist/index.js`), start an HTTP server. -if (require.main === module) { - const port = Number(process.env.PORT ?? 8080); - - // Log startup configuration (non-sensitive values only - no API keys or tokens) - logger.info('[send-verification-link] Starting with config:', { - port, - graphqlUrl: process.env.GRAPHQL_URL || 'not set', - metaGraphqlUrl: process.env.META_GRAPHQL_URL || process.env.GRAPHQL_URL || 'not set', - apiName: process.env.GRAPHQL_API_NAME || 'not set', - defaultDatabaseId: process.env.DEFAULT_DATABASE_ID || 'not set', - dryRun: isDryRun, - useSmtp, - mailgunDomain: process.env.MAILGUN_DOMAIN || 'not set', - mailgunFrom: process.env.MAILGUN_FROM || 'not set', - localAppPort: process.env.LOCAL_APP_PORT || 'not set', - hasAuthToken: !!process.env.GRAPHQL_AUTH_TOKEN - }); - - // @constructive-io/knative-job-fn exposes a .listen method that delegates to the Express app - (app as any).listen(port, () => { - logger.info(`listening on port ${port}`); - }); -} diff --git a/functions/send-verification-link/tsconfig.esm.json b/functions/send-verification-link/tsconfig.esm.json deleted file mode 100644 index 800d7506d3..0000000000 --- a/functions/send-verification-link/tsconfig.esm.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "dist/esm", - "module": "es2022", - "rootDir": "src/", - "declaration": false - } -} diff --git a/functions/send-verification-link/tsconfig.json b/functions/send-verification-link/tsconfig.json deleted file mode 100644 index ff3d2981b6..0000000000 --- a/functions/send-verification-link/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "dist", - "rootDir": "src/" - }, - "include": ["src/**/*.ts", "../../types/**/*.d.ts"], - "exclude": ["dist", "node_modules", "**/*.spec.*", "**/*.test.*"] -} diff --git a/jobs/knative-job-service/package.json b/jobs/knative-job-service/package.json index c2f61d00b5..ee9ebb897d 100644 --- a/jobs/knative-job-service/package.json +++ b/jobs/knative-job-service/package.json @@ -62,8 +62,6 @@ "@constructive-io/knative-job-fn": "workspace:^", "@constructive-io/knative-job-server": "workspace:^", "@constructive-io/knative-job-worker": "workspace:^", - "@constructive-io/send-verification-link-fn": "workspace:^", - "@constructive-io/send-email-fn": "workspace:^", "@pgpmjs/env": "workspace:^", "@pgpmjs/logger": "workspace:^", "async-retry": "1.3.3", diff --git a/jobs/knative-job-service/src/index.ts b/jobs/knative-job-service/src/index.ts index 106053501b..48b9be45fb 100644 --- a/jobs/knative-job-service/src/index.ts +++ b/jobs/knative-job-service/src/index.ts @@ -31,16 +31,10 @@ type FunctionRegistryEntry = { defaultPort: number; }; -const functionRegistry: Record = { - 'send-email': { - moduleName: '@constructive-io/send-email-fn', - defaultPort: 8081 - }, - 'send-verification-link': { - moduleName: '@constructive-io/send-verification-link-fn', - defaultPort: 8082 - } -}; +// Function packages have moved to the constructive-functions repository. +// This registry is intentionally empty; the legacy in-process launcher is +// retained only until the hub finishes migrating job-server startup. +const functionRegistry: Record = {}; const log = new Logger('knative-job-service'); const requireFn = createRequire(__filename); diff --git a/jobs/knative-job-service/src/types.ts b/jobs/knative-job-service/src/types.ts index e73e50dee4..273fd55e17 100644 --- a/jobs/knative-job-service/src/types.ts +++ b/jobs/knative-job-service/src/types.ts @@ -1,4 +1,4 @@ -export type FunctionName = 'send-email' | 'send-verification-link'; +export type FunctionName = string; export type FunctionServiceConfig = { name: FunctionName; diff --git a/packages/cli/package.json b/packages/cli/package.json index db1fc32ce2..fd61440a42 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -50,7 +50,6 @@ "@constructive-io/graphql-explorer": "workspace:^", "@constructive-io/graphql-server": "workspace:^", "@constructive-io/graphql-types": "workspace:^", - "@constructive-io/knative-job-service": "workspace:^", "@inquirerer/utils": "^3.3.5", "@pgpmjs/core": "workspace:^", "@pgpmjs/logger": "workspace:^", diff --git a/packages/cli/src/commands.ts b/packages/cli/src/commands.ts index 12444bab09..c4cffea298 100644 --- a/packages/cli/src/commands.ts +++ b/packages/cli/src/commands.ts @@ -6,7 +6,6 @@ import codegen from './commands/codegen'; import context from './commands/context'; import execute from './commands/execute'; import explorer from './commands/explorer'; -import jobs from './commands/jobs'; import server from './commands/server'; import { usageText } from './utils'; @@ -15,7 +14,6 @@ const createCommandMap = (): Record => { server, explorer, codegen, - jobs, context, auth, execute, diff --git a/packages/cli/src/commands/jobs.ts b/packages/cli/src/commands/jobs.ts deleted file mode 100644 index c2c7558cfb..0000000000 --- a/packages/cli/src/commands/jobs.ts +++ /dev/null @@ -1,205 +0,0 @@ -import { existsSync } from 'fs'; -import { resolve } from 'path'; -import { - KnativeJobsSvc, - KnativeJobsSvcOptions, - FunctionName, - FunctionServiceConfig -} from '@constructive-io/knative-job-service'; -import { CLIOptions, Inquirerer, Question, cliExitWithError, extractFirst } from 'inquirerer'; - -const jobsUsageText = ` -Constructive Jobs: - - cnc jobs [OPTIONS] - - Start or manage Constructive jobs services. - -Subcommands: - up Start jobs runtime (jobs + functions) - -Options: - --help, -h Show this help message - --cwd Working directory (default: current directory) - --with-jobs-server Enable jobs server (default: disabled; flag-only) - --functions Comma-separated functions, optionally with ports (e.g. "fn=8080") - -Examples: - cnc jobs up - cnc jobs up --cwd /path/to/constructive - cnc jobs up --with-jobs-server --functions send-email,send-verification-link=8082 -`; - -const questions: Question[] = [ - { - name: 'withJobsServer', - alias: 'with-jobs-server', - message: 'Enable jobs server?', - type: 'confirm', - required: false, - default: false, - useDefault: true - } -]; - -const ensureCwd = (cwd: string): string => { - const resolved = resolve(cwd); - if (!existsSync(resolved)) { - throw new Error(`Working directory does not exist: ${resolved}`); - } - process.chdir(resolved); - return resolved; -}; - -type ParsedFunctionsArg = { - mode: 'all' | 'list'; - names: string[]; - ports: Record; -}; - -const parseFunctionsArg = (value: unknown): ParsedFunctionsArg | undefined => { - if (value === undefined) return undefined; - - const values = Array.isArray(value) ? value : [value]; - - const tokens: string[] = []; - for (const value of values) { - if (value === true) { - tokens.push('all'); - continue; - } - if (value === false || value === undefined || value === null) continue; - const raw = String(value); - raw - .split(',') - .map((part) => part.trim()) - .filter(Boolean) - .forEach((part) => tokens.push(part)); - } - - if (!tokens.length) { - return { mode: 'list', names: [], ports: {} }; - } - - const hasAll = tokens.some((token) => { - const normalized = token.trim().toLowerCase(); - return normalized === 'all' || normalized === '*'; - }); - - if (hasAll) { - if (tokens.length > 1) { - throw new Error('Use "all" without other function names.'); - } - return { mode: 'all', names: [], ports: {} }; - } - - const names: string[] = []; - const ports: Record = {}; - - for (const token of tokens) { - const trimmed = token.trim(); - if (!trimmed) continue; - - const separatorIndex = trimmed.search(/[:=]/); - if (separatorIndex === -1) { - names.push(trimmed); - continue; - } - - const name = trimmed.slice(0, separatorIndex).trim(); - const portText = trimmed.slice(separatorIndex + 1).trim(); - - if (!name) { - throw new Error(`Missing function name in "${token}".`); - } - if (!portText) { - throw new Error(`Missing port for function "${name}".`); - } - - const port = Number(portText); - if (!Number.isFinite(port) || port <= 0) { - throw new Error(`Invalid port "${portText}" for function "${name}".`); - } - - names.push(name); - ports[name] = port; - } - - const uniqueNames: string[] = []; - const seen = new Set(); - for (const name of names) { - if (seen.has(name)) continue; - seen.add(name); - uniqueNames.push(name); - } - - return { mode: 'list', names: uniqueNames, ports }; -}; - -const buildKnativeJobsSvcOptions = ( - args: Partial> -): KnativeJobsSvcOptions => { - const parsedFunctions = parseFunctionsArg(args.functions); - - let functions: KnativeJobsSvcOptions['functions']; - if (parsedFunctions) { - if (parsedFunctions.mode === 'all') { - functions = { enabled: true }; - } else if (parsedFunctions.names.length) { - const services: FunctionServiceConfig[] = parsedFunctions.names.map( - (name) => ({ - name: name as FunctionName, - port: parsedFunctions.ports[name] - }) - ); - functions = { enabled: true, services }; - } else { - functions = undefined; - } - } - - return { - jobs: { enabled: args.withJobsServer === true }, - functions - }; -}; - -export default async ( - argv: Partial>, - prompter: Inquirerer, - _options: CLIOptions -) => { - if (argv.help || argv.h) { - console.log(jobsUsageText); - process.exit(0); - } - - const { first: subcommand, newArgv } = extractFirst(argv); - const args = newArgv as Partial>; - - if (!subcommand) { - console.log(jobsUsageText); - await cliExitWithError('No subcommand provided. Use "up".'); - return; - } - - switch (subcommand) { - case 'up': { - try { - ensureCwd((args.cwd as string) || process.cwd()); - const promptAnswers = await prompter.prompt(args, questions); - const server = new KnativeJobsSvc(buildKnativeJobsSvcOptions(promptAnswers)); - await server.start(); - } catch (error) { - await cliExitWithError( - `Failed to start jobs runtime: ${(error as Error).message}` - ); - } - break; - } - - default: - console.log(jobsUsageText); - await cliExitWithError(`Unknown subcommand: ${subcommand}. Use "up".`); - } -}; diff --git a/packages/cli/src/utils/display.ts b/packages/cli/src/utils/display.ts index 83e5f05ee1..9add60e7fd 100644 --- a/packages/cli/src/utils/display.ts +++ b/packages/cli/src/utils/display.ts @@ -11,9 +11,6 @@ export const usageText = ` Code Generation: codegen Generate TypeScript types and SDK from GraphQL schema - Jobs: - jobs up Start combined server (jobs runtime) - Execution Engine: context Manage contexts (create, list, use, current, delete) auth Manage authentication (set-token, status, logout) @@ -34,7 +31,6 @@ export const usageText = ` cnc explorer Launch GraphiQL explorer cnc codegen --schema schema.graphql Generate types from schema cnc codegen --schema-enabled --output ./schemas Export schema SDL - cnc jobs up Start combined server (jobs runtime) # Execution Engine cnc context create my-api --endpoint https://api.example.com/graphql diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4ad518394..5e09a677f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,64 +110,6 @@ importers: specifier: ^5.1.6 version: 5.9.3 - functions/send-email: - dependencies: - '@constructive-io/knative-job-fn': - specifier: workspace:^ - version: link:../../jobs/knative-job-fn/dist - '@constructive-io/postmaster': - specifier: workspace:^ - version: link:../../packages/postmaster/dist - '@pgpmjs/env': - specifier: workspace:^ - version: link:../../pgpm/env/dist - '@pgpmjs/logger': - specifier: workspace:^ - version: link:../../pgpm/logger/dist - simple-smtp-server: - specifier: workspace:^ - version: link:../../packages/smtppostmaster/dist - devDependencies: - makage: - specifier: ^0.3.0 - version: 0.3.0 - publishDirectory: dist - - functions/send-verification-link: - dependencies: - '@constructive-io/knative-job-fn': - specifier: workspace:^ - version: link:../../jobs/knative-job-fn/dist - '@constructive-io/postmaster': - specifier: workspace:^ - version: link:../../packages/postmaster/dist - '@launchql/mjml': - specifier: 0.1.1 - version: 0.1.1(@babel/core@7.29.0)(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4) - '@launchql/styled-email': - specifier: 0.1.0 - version: 0.1.0(@babel/core@7.29.0)(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4) - '@pgpmjs/env': - specifier: workspace:^ - version: link:../../pgpm/env/dist - '@pgpmjs/logger': - specifier: workspace:^ - version: link:../../pgpm/logger/dist - graphql-request: - specifier: ^7.1.2 - version: 7.4.0(graphql@16.13.0) - graphql-tag: - specifier: ^2.12.6 - version: 2.12.6(graphql@16.13.0) - simple-smtp-server: - specifier: workspace:^ - version: link:../../packages/smtppostmaster/dist - devDependencies: - makage: - specifier: ^0.3.0 - version: 0.3.0 - publishDirectory: dist - graphile/graphile-bucket-provisioner-plugin: dependencies: '@constructive-io/bucket-provisioner': @@ -1796,12 +1738,6 @@ importers: '@constructive-io/knative-job-worker': specifier: workspace:^ version: link:../knative-job-worker/dist - '@constructive-io/send-email-fn': - specifier: workspace:^ - version: link:../../functions/send-email/dist - '@constructive-io/send-verification-link-fn': - specifier: workspace:^ - version: link:../../functions/send-verification-link/dist '@pgpmjs/env': specifier: workspace:^ version: link:../../pgpm/env/dist @@ -1945,9 +1881,6 @@ importers: '@constructive-io/graphql-types': specifier: workspace:^ version: link:../../graphql/types/dist - '@constructive-io/knative-job-service': - specifier: workspace:^ - version: link:../../jobs/knative-job-service/dist '@inquirerer/utils': specifier: ^3.3.5 version: 3.3.5 @@ -3344,10 +3277,6 @@ packages: resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} engines: {node: '>=6.9.0'} @@ -3588,12 +3517,6 @@ packages: '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - '@emotion/stylis@0.8.5': - resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} - - '@emotion/unitless@0.7.5': - resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} - '@esbuild/aix-ppc64@0.25.12': resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} @@ -4208,22 +4131,10 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@launchql/mjml@0.1.1': - resolution: {integrity: sha512-6+OEmECuu5atRZ43ovsMfFs+T4NWNaKbzNG0uA8HYaBSn3kWR7GH3QnmL3lCIeymLtvgua8aZChYvg6SxrQdnw==} - peerDependencies: - react: '>=16' - react-dom: '>=16' - '@launchql/protobufjs@7.2.6': resolution: {integrity: sha512-vwi1nG2/heVFsIMHQU1KxTjUp5c757CTtRAZn/jutApCkFlle1iv8tzM/DHlSZJKDldxaYqnNYTg0pTyp8Bbtg==} engines: {node: '>=12.0.0'} - '@launchql/styled-email@0.1.0': - resolution: {integrity: sha512-ISjzsY+3EOH/qAKHPq3evw9QmmEyA8Vw+0pUf+Zf8l4/rAHJJKrSa/uPiaUf2Abi8yAZKyx2uyaZq4ExNNkD+w==} - peerDependencies: - react: '>=16' - react-dom: '>=16' - '@lerna/create@8.2.4': resolution: {integrity: sha512-A8AlzetnS2WIuhijdAzKUyFpR5YbLLfV3luQ4lzBgIBgRfuoBDZeF+RSZPhra+7A6/zTUlrbhKZIOi/MNhqgvQ==} engines: {node: '>=18.0.0'} @@ -4433,9 +4344,6 @@ packages: '@octokit/types@13.10.0': resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} - '@one-ini/wasm@0.1.1': - resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} - '@oxfmt/binding-android-arm-eabi@0.42.0': resolution: {integrity: sha512-dsqPTYsozeokRjlrt/b4E7Pj0z3eS3Eg74TWQuuKbjY4VttBmA88rB7d50Xrd+TZ986qdXCNeZRPEzZHAe+jow==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5409,45 +5317,6 @@ packages: resolution: {integrity: sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==} engines: {node: '>=18.0.0'} - '@styled-system/background@5.1.2': - resolution: {integrity: sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==} - - '@styled-system/border@5.1.5': - resolution: {integrity: sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==} - - '@styled-system/color@5.1.2': - resolution: {integrity: sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==} - - '@styled-system/core@5.1.2': - resolution: {integrity: sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==} - - '@styled-system/css@5.1.5': - resolution: {integrity: sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==} - - '@styled-system/flexbox@5.1.2': - resolution: {integrity: sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==} - - '@styled-system/grid@5.1.2': - resolution: {integrity: sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==} - - '@styled-system/layout@5.1.2': - resolution: {integrity: sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==} - - '@styled-system/position@5.1.2': - resolution: {integrity: sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==} - - '@styled-system/shadow@5.1.2': - resolution: {integrity: sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==} - - '@styled-system/space@5.1.2': - resolution: {integrity: sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==} - - '@styled-system/typography@5.1.2': - resolution: {integrity: sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==} - - '@styled-system/variant@5.1.5': - resolution: {integrity: sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==} - '@swc/helpers@0.5.19': resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==} @@ -5749,7 +5618,6 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} @@ -6017,11 +5885,6 @@ packages: resolution: {integrity: sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - babel-plugin-styled-components@2.1.4: - resolution: {integrity: sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g==} - peerDependencies: - styled-components: '>= 2' - babel-preset-current-node-syntax@1.2.0: resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: @@ -6033,9 +5896,6 @@ packages: peerDependencies: '@babel/core': ^7.11.0 || ^8.0.0-beta.1 - babel-runtime@6.25.0: - resolution: {integrity: sha512-zeCYxDePWYAT/DfmQWIHsMSFW2vv45UIwIAMjGvQVsTd47RwsiRH0uK1yzyWZ7LDBKdhnGDPM6NYEO5CZyhPrg==} - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -6075,9 +5935,6 @@ packages: resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==} engines: {node: '>=18'} - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} @@ -6161,9 +6018,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camel-case@3.0.0: - resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} - camelcase-keys@6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} engines: {node: '>=8'} @@ -6176,9 +6030,6 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - camelize@1.0.1: - resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} - caniuse-lite@1.0.30001765: resolution: {integrity: sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==} @@ -6205,17 +6056,6 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.0.0-rc.3: - resolution: {integrity: sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==} - engines: {node: '>= 0.6'} - - cheerio@1.1.2: - resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} - engines: {node: '>=20.18.1'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -6242,10 +6082,6 @@ packages: clean-ansi@0.2.1: resolution: {integrity: sha512-V9IOKBKHv0Sqay4efImuCVWwO8kVmaKU66cvbDBa99F21j2G3ye3mrKkPSfZ7RTR7yP4CNDjtESkNY5dFq+8Sg==} - clean-css@4.2.4: - resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} - engines: {node: '>= 4.0'} - clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -6266,9 +6102,6 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -6322,20 +6155,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - commander@2.17.1: - resolution: {integrity: sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==} - - commander@2.19.0: - resolution: {integrity: sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -6352,9 +6171,6 @@ packages: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} engines: {'0': node >= 6.0} - config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -6418,10 +6234,6 @@ packages: core-js-pure@3.47.0: resolution: {integrity: sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==} - 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. - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -6452,26 +6264,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-color-keywords@1.0.0: - resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} - engines: {node: '>=4'} - - css-select@1.2.0: - resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==} - - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-to-react-native@3.2.0: - resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} - - css-what@2.1.3: - resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -6602,51 +6394,6 @@ packages: dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} - dom-serializer@0.1.1: - resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==} - - dom-serializer@0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@2.4.2: - resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==} - - domhandler@3.3.0: - resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==} - engines: {node: '>= 4'} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@1.5.1: - resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==} - - domutils@1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} @@ -6761,11 +6508,6 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - editorconfig@1.0.4: - resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} - engines: {node: '>=14'} - hasBin: true - ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -6791,9 +6533,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding-sniffer@0.2.1: - resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -6804,20 +6543,10 @@ packages: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} - entities@1.1.2: - resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -6867,10 +6596,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-goat@3.0.0: - resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==} - engines: {node: '>=10'} - escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -7447,13 +7172,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -7468,20 +7186,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - html-minifier@3.5.21: - resolution: {integrity: sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==} - engines: {node: '>=4'} - hasBin: true - - htmlparser2@10.0.0: - resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} - - htmlparser2@3.10.1: - resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==} - - htmlparser2@4.1.0: - resolution: {integrity: sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==} - http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -7912,15 +7616,6 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - js-beautify@1.15.4: - resolution: {integrity: sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==} - engines: {node: '>=14'} - hasBin: true - - js-cookie@3.0.5: - resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} - engines: {node: '>=14'} - js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -7994,11 +7689,6 @@ packages: resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} - juice@7.0.0: - resolution: {integrity: sha512-AjKQX31KKN+uJs+zaf+GW8mBO/f/0NqSh2moTMyvwBY+4/lXIYTU8D8I2h6BAV3Xnz6GGsbalUyFqbYMe+Vh+Q==} - engines: {node: '>=10.0.0'} - hasBin: true - just-diff-apply@5.5.0: resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} @@ -8121,13 +7811,6 @@ packages: long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lower-case@1.1.4: - resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -8206,9 +7889,6 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - mensch@0.3.4: - resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==} - meow@8.1.2: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} @@ -8298,10 +7978,6 @@ packages: resolution: {integrity: sha512-V+1uQNdzybxa14e/p00HZnQNNcTjnRJjDxg2V8wtkjFctq4M7hXFws4oekyTP0Jebeq7QYtpFyOeBAjc88zvYg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.1: - resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -8361,109 +8037,6 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mjml-accordion@4.7.1: - resolution: {integrity: sha512-oYwC/CLOUWJ6pRt2saDHj/HytGOHO5B5lKNqUAhKPye5HFNZykKEV5ChmZ2NfGsGU+9BhQ7H5DaCafp4fDmPAg==} - - mjml-body@4.7.1: - resolution: {integrity: sha512-JCrkit+kjCfQyKuVyWSOonM2LGs/o3+63R9l2SleFeXf3+0CaKWaZr/Exzvaeo28c+1o3yRqXbJIpD22SEtJfQ==} - - mjml-button@4.7.1: - resolution: {integrity: sha512-N3WkTMPOvKw2y6sakt1YfYDbOB8apumm1OApPG6J18CHcrX03BwhHPrdfu1JwlRNGwx4kCDdb6zNCGPwuZxkCg==} - - mjml-carousel@4.7.1: - resolution: {integrity: sha512-eH3rRyX23ES0BKOn+UUV39+yGNmZVApBVVV0A5znDaNWskCg6/g6ZhEHi4nkWpj+aP2lJKI0HX1nrMfJg0Mxhg==} - - mjml-cli@4.7.1: - resolution: {integrity: sha512-xzCtJVKYVhGorvTmnbcMUfZlmJdBnu1UBD9A1H8UUBGMNE/Hs9QpHs9PLCMp8JR/uhSu15IgVjhFN0oSVndMRQ==} - hasBin: true - - mjml-column@4.7.1: - resolution: {integrity: sha512-CGw81TnGiuPR1GblLOez8xeoeAz1SEFjMpqapazjgXUuF5xUxg3qH55Wt4frpXe3VypeZWVYeumr6CwoNaPbKg==} - - mjml-core@4.7.1: - resolution: {integrity: sha512-AMACoq/h440m7SM86As8knW0bNQgjNIzsP/cMF6X9RO07GfszgbaWUq/XCaRNi+q8bWvBJSCXbngDJySVc5ALw==} - - mjml-divider@4.7.1: - resolution: {integrity: sha512-7+uCUJdqEr6w8AzpF8lhRheelYEgOwiK0KJGlAQN3LF+h2S1rTPEzEB67qL2x5cU+80kPlxtxoQWImDBy0vXqg==} - - mjml-group@4.7.1: - resolution: {integrity: sha512-mAYdhocCzetdhPSws/9/sQ4hcz4kQPX2dNitQmbxNVwoMFYXjp/WcLEfGc5u13Ue7dPfcV6c9lB/Uu5o3NmRvw==} - - mjml-head-attributes@4.7.1: - resolution: {integrity: sha512-nB/bQ3I98Dvy/IkI4nqxTCnLonULkIKc8KrieRTrtPkUV3wskBzngpCgnjKvFPbHWiGlwjHDzcFJc7G0uWeqog==} - - mjml-head-breakpoint@4.7.1: - resolution: {integrity: sha512-0KB5SweIWDvwHkn4VCUsEhCQgfY/0wkNUnSXNoftaRujv0NQFQfOOH4eINy0NZYfDfrE4WYe08z+olHprp+T2A==} - - mjml-head-font@4.7.1: - resolution: {integrity: sha512-9YGzBcQ2htZ6j266fiLLfzcxqDEDLTvfKtypTjaeRb1w3N8S5wL+/zJA5ZjRL6r39Ij5ZPQSlSDC32KPiwhGkA==} - - mjml-head-html-attributes@4.7.1: - resolution: {integrity: sha512-2TK2nGpq4rGaghbVx2UNm5TXeZ5BTGYEvtSPoYPNu02KRCj6tb+uedAgFXwJpX+ogRfIfPK50ih+9ZMoHwf2IQ==} - - mjml-head-preview@4.7.1: - resolution: {integrity: sha512-UHlvvgldiPDODq/5zKMsmXgRb/ZyKygKDUVQSM5bm3HvpKXeyYxJZazcIGmlGICEqv1ced1WGINhCg72dSfN+Q==} - - mjml-head-style@4.7.1: - resolution: {integrity: sha512-8Gij99puN1SoOx5tGBjgkh4iCpI+zbwGBiB2Y8VwJrwXQxdJ1Qa902dQP5djoFFG39Bthii/48cS/d1bHigGPQ==} - - mjml-head-title@4.7.1: - resolution: {integrity: sha512-vK3r+DApTXw2EoK/fh8dQOsO438Z7Ksy6iBIb7h04x33d4Z41r6+jtgxGXoKFXnjgr8MyLX5HZyyie5obW+hZg==} - - mjml-head@4.7.1: - resolution: {integrity: sha512-jUcJ674CT1oT8NTQWTjQQBFZu4yklK0oppfGFJ1cq76ze3isMiyhSnGnOHw6FkjLnZtb3gXXaGKX7UZM+UMk/w==} - - mjml-hero@4.7.1: - resolution: {integrity: sha512-x+29V8zJAs8EV/eTtGbR921pCpitMQOAkyvNANW/3JLDTL2Oio1OYvGPVC3z1wOT9LKuRTxVzNHVt/bBw02CSQ==} - - mjml-image@4.7.1: - resolution: {integrity: sha512-l3uRR2jaM0Bpz4ctdWuxQUFgg+ol6Nt+ODOrnHsGMwpmFOh4hTPTky6KaF0LCXxYmGbI0FoGBna+hVNnkBsQCA==} - - mjml-migrate@4.7.1: - resolution: {integrity: sha512-RgrJ9fHg6iRHC2H4pjRDWilBQ1eTH2jRu1ayDplbnepGoql83vLZaYaWc5Q+J+NsaNI16x+bgNB3fQdBiK+mng==} - hasBin: true - - mjml-navbar@4.7.1: - resolution: {integrity: sha512-awdu8zT7xhS+9aCVunqtocUs8KA2xb+UhJ8UGbxVBpYbTNj3rCL9aWUXqWVwMk1la+3ypCkFuDuTl6dIoWPWlA==} - - mjml-parser-xml@4.7.1: - resolution: {integrity: sha512-UWfuRpN45k3GUEv2yl8n5Uf98Tg6FyCsyRnqZGo83mgZzlJRDYTdKII9RjZM646/S8+Q8e9qxi3AsL00j6sZsQ==} - - mjml-raw@4.7.1: - resolution: {integrity: sha512-mCQFEXINTkC8i7ydP1Km99e0FaZTeu79AoYnTBAILd4QO+RuD3n/PimBGrcGrOUex0JIKa2jyVQOcSCBuG4WpA==} - - mjml-react@1.0.59: - resolution: {integrity: sha512-W1ULnMlxJHE0kNpInu+u3CHr6+QcvhoLJ2ov93Pzt2A1wXAv4CJ9T/P5h/BhZn8vvCXgGizcwHv8sfANfQONVw==} - peerDependencies: - mjml: ^4.1.2 - react: ^16.4.0 - react-dom: ^16.4.0 - - mjml-section@4.7.1: - resolution: {integrity: sha512-PlhCMsl/bpFwwgQGUopi9OgOGWgRPpEJVKE8hk4He8GXzbfIuDj4DZ9QJSkwIoZ0fZtcgz11Wwb19i9BZcozVw==} - - mjml-social@4.7.1: - resolution: {integrity: sha512-tN/6V3m59izO9rqWpUokHxhwkk2GHkltzIlhI936hAJHh8hFyEO6+ZwQBZm738G00qgfICmQvX5FNq4upkCYjw==} - - mjml-spacer@4.7.1: - resolution: {integrity: sha512-gQu1+nA9YGnoolfNPvzfVe/RJ8WqS8ho0hthlhiLOC2RnEnmqH7HHSzCFXm4OeN0VgvDQsM7mfYQGl82O58Y+g==} - - mjml-table@4.7.1: - resolution: {integrity: sha512-rPkOtufMiVreb7I7vXk6rDm9i1DXncODnM5JJNhA9Z1dAQwXiz6V5904gAi2cEYfe0M2m0XQ8P5ZCtvqxGkfGA==} - - mjml-text@4.7.1: - resolution: {integrity: sha512-hrjxbY59v6hu/Pn0NO+6TMlrdAlRa3M7GVALx/YWYV3hi59zjYfot8Au7Xq64XdcbcI4eiBVbP/AVr8w03HsOw==} - - mjml-validator@4.7.1: - resolution: {integrity: sha512-Qxubbz5WE182iLSTd/XRuezMr6UE7/u73grDCw0bTIcQsaTAIkWQn2tBI3jj0chWOw+sxwK2C6zPm9B0Cv7BGA==} - - mjml-wrapper@4.7.1: - resolution: {integrity: sha512-6i+ZATUyqIO5YBnx+RFKZ3+6mg3iOCS/EdXGYZSonZ/EHqlt+RJa3fG2BB4dacXqAjghfl6Lk+bLoR47P3xYIQ==} - - mjml@4.7.1: - resolution: {integrity: sha512-nwMrmhTI+Aeh9Gav9LHX/i8k8yDi/QpX5h535BlT5oP4NaAUmyxP/UeYUn9yxtPcIzDlM5ullFnRv/71jyHpkQ==} - hasBin: true - mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -8546,9 +8119,6 @@ packages: nested-obj@0.2.2: resolution: {integrity: sha512-M1etu+T6Ai9Bo06L3K3nWD0ytZWltggBGsrxJlOGvMNGlCA4fokUVlbPKoWzsiiRX+PXq6Cb1xFEn4chiyC7MQ==} - no-case@2.3.2: - resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} - node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -8653,12 +8223,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nth-check@1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} @@ -8793,9 +8357,6 @@ packages: engines: {node: ^16.14.0 || >=18.0.0} hasBin: true - param-case@2.1.1: - resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} - parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -8821,18 +8382,6 @@ packages: parse-url@8.1.0: resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - - parse5@3.0.3: - resolution: {integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -8989,9 +8538,6 @@ packages: 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.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -9098,9 +8644,6 @@ packages: resolution: {integrity: sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - protocols@2.0.2: resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} @@ -9158,9 +8701,6 @@ packages: peerDependencies: react: ^19.2.4 - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -9271,13 +8811,6 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} - regenerator-runtime@0.10.5: - resolution: {integrity: sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==} - - relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - remove-accents@0.5.0: resolution: {integrity: sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==} @@ -9292,9 +8825,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -9468,9 +8998,6 @@ packages: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} - shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -9518,9 +9045,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slick@1.12.2: - resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==} - smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -9673,17 +9197,6 @@ packages: strnum@2.2.0: resolution: {integrity: sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==} - styled-components@5.3.11: - resolution: {integrity: sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==} - engines: {node: '>=10'} - peerDependencies: - react: '>= 16.8.0' - react-dom: '>= 16.8.0' - react-is: '>= 16.8.0' - - styled-system@5.1.5: - resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==} - superagent@10.3.0: resolution: {integrity: sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==} engines: {node: '>=14.18.0'} @@ -9912,11 +9425,6 @@ packages: engines: {node: '>=0.8.0'} hasBin: true - uglify-js@3.4.10: - resolution: {integrity: sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==} - engines: {node: '>=0.8.0'} - hasBin: true - undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} @@ -9969,9 +9477,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - upper-case@1.1.3: - resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} - uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -10008,7 +9513,6 @@ packages: uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} - deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-compile-cache-lib@3.0.1: @@ -10018,10 +9522,6 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} - valid-data-url@3.0.1: - resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} - engines: {node: '>=10'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -10082,34 +9582,15 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - warning@3.0.0: - resolution: {integrity: sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==} - wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-resource-inliner@5.0.0: - resolution: {integrity: sha512-AIihwH+ZmdHfkJm7BjSXiEClVt4zUFqX4YlFAzjL13wLtDuUneSaFvDBTbdYRecs35SiU7iNKbMnN+++wVfb6A==} - engines: {node: '>=10.0.0'} - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -10176,9 +9657,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -10197,10 +9675,6 @@ packages: yanse@0.2.1: resolution: {integrity: sha512-SMi3ZO1IqsvPLLXuy8LBCP1orqcjOT8VygiuyAlplaGeH2g+n4ZSSyWlA/BZjuUuN58TyOcz89mVkflSqIPxxQ==} - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -10209,10 +9683,6 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -10781,7 +10251,7 @@ snapshots: '@babel/helpers': 7.28.6 '@babel/parser': 7.29.3 '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0(supports-color@5.5.0) + '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 @@ -10800,10 +10270,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.29.0 - '@babel/helper-compilation-targets@7.28.6': dependencies: '@babel/compat-data': 7.28.6 @@ -10814,9 +10280,9 @@ snapshots: '@babel/helper-globals@7.28.0': {} - '@babel/helper-module-imports@7.28.6(supports-color@5.5.0)': + '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/traverse': 7.29.0(supports-color@5.5.0) + '@babel/traverse': 7.28.6 '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -10824,7 +10290,7 @@ snapshots: '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)': dependencies: '@babel/core': 7.28.6 - '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.28.6 transitivePeerDependencies: @@ -10833,7 +10299,7 @@ snapshots: '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) + '@babel/helper-module-imports': 7.28.6 '@babel/helper-validator-identifier': 7.28.5 '@babel/traverse': 7.28.6 transitivePeerDependencies: @@ -10991,7 +10457,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/traverse@7.29.0(supports-color@5.5.0)': + '@babel/traverse@7.29.0': dependencies: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 @@ -11084,10 +10550,6 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/stylis@0.8.5': {} - - '@emotion/unitless@0.7.5': {} - '@esbuild/aix-ppc64@0.25.12': optional: true @@ -11840,20 +11302,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@launchql/mjml@0.1.1(@babel/core@7.29.0)(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.4 - mjml: 4.7.1(encoding@0.1.13) - mjml-react: 1.0.59(mjml@4.7.1(encoding@0.1.13))(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) - styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4) - styled-system: 5.1.5 - transitivePeerDependencies: - - '@babel/core' - - encoding - - react-is - '@launchql/protobufjs@7.2.6': dependencies: '@protobufjs/aspromise': 1.1.2 @@ -11869,19 +11317,6 @@ snapshots: '@types/node': 22.19.15 long: 5.3.2 - '@launchql/styled-email@0.1.0(@babel/core@7.29.0)(encoding@0.1.13)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4)': - dependencies: - '@babel/runtime': 7.28.4 - juice: 7.0.0(encoding@0.1.13) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4) - styled-system: 5.1.5 - transitivePeerDependencies: - - '@babel/core' - - encoding - - react-is - '@lerna/create@8.2.4(@types/node@22.19.11)(encoding@0.1.13)(typescript@5.9.3)': dependencies: '@npmcli/arborist': 7.5.4 @@ -12230,8 +11665,6 @@ snapshots: dependencies: '@octokit/openapi-types': 24.2.0 - '@one-ini/wasm@0.1.1': {} - '@oxfmt/binding-android-arm-eabi@0.42.0': optional: true @@ -13239,69 +12672,18 @@ snapshots: dependencies: tslib: 2.8.1 - '@styled-system/background@5.1.2': + '@swc/helpers@0.5.19': dependencies: - '@styled-system/core': 5.1.2 + tslib: 2.8.1 - '@styled-system/border@5.1.5': - dependencies: - '@styled-system/core': 5.1.2 + '@tanstack/query-core@5.90.20': {} - '@styled-system/color@5.1.2': + '@tanstack/react-query@5.90.21(react@19.2.4)': dependencies: - '@styled-system/core': 5.1.2 + '@tanstack/query-core': 5.90.20 + react: 19.2.4 - '@styled-system/core@5.1.2': - dependencies: - object-assign: 4.1.1 - - '@styled-system/css@5.1.5': {} - - '@styled-system/flexbox@5.1.2': - dependencies: - '@styled-system/core': 5.1.2 - - '@styled-system/grid@5.1.2': - dependencies: - '@styled-system/core': 5.1.2 - - '@styled-system/layout@5.1.2': - dependencies: - '@styled-system/core': 5.1.2 - - '@styled-system/position@5.1.2': - dependencies: - '@styled-system/core': 5.1.2 - - '@styled-system/shadow@5.1.2': - dependencies: - '@styled-system/core': 5.1.2 - - '@styled-system/space@5.1.2': - dependencies: - '@styled-system/core': 5.1.2 - - '@styled-system/typography@5.1.2': - dependencies: - '@styled-system/core': 5.1.2 - - '@styled-system/variant@5.1.5': - dependencies: - '@styled-system/core': 5.1.2 - '@styled-system/css': 5.1.5 - - '@swc/helpers@0.5.19': - dependencies: - tslib: 2.8.1 - - '@tanstack/query-core@5.90.20': {} - - '@tanstack/react-query@5.90.21(react@19.2.4)': - dependencies: - '@tanstack/query-core': 5.90.20 - react: 19.2.4 - - '@tanstack/react-virtual@3.13.22(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': + '@tanstack/react-virtual@3.13.22(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@tanstack/virtual-core': 3.13.22 react: 19.2.4 @@ -13915,18 +13297,6 @@ snapshots: dependencies: '@types/babel__core': 7.20.5 - babel-plugin-styled-components@2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4))(supports-color@5.5.0): - dependencies: - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - lodash: 4.17.23 - picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4) - transitivePeerDependencies: - - '@babel/core' - - supports-color - babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 @@ -13952,11 +13322,6 @@ snapshots: babel-plugin-jest-hoist: 30.3.0 babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) - babel-runtime@6.25.0: - dependencies: - core-js: 2.6.12 - regenerator-runtime: 0.10.5 - balanced-match@1.0.2: {} balanced-match@4.0.4: {} @@ -14000,8 +13365,6 @@ snapshots: transitivePeerDependencies: - supports-color - boolbase@1.0.0: {} - bowser@2.14.1: {} brace-expansion@1.1.12: @@ -14109,11 +13472,6 @@ snapshots: callsites@3.1.0: {} - camel-case@3.0.0: - dependencies: - no-case: 2.3.2 - upper-case: 1.1.3 - camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 @@ -14124,8 +13482,6 @@ snapshots: camelcase@6.3.0: {} - camelize@1.0.1: {} - caniuse-lite@1.0.30001765: {} case@1.6.3: {} @@ -14149,38 +13505,6 @@ snapshots: chardet@2.1.1: {} - cheerio-select@2.1.0: - dependencies: - boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - - cheerio@1.0.0-rc.3: - dependencies: - css-select: 1.2.0 - dom-serializer: 0.1.1 - entities: 1.1.2 - htmlparser2: 3.10.1 - lodash: 4.17.23 - parse5: 3.0.3 - - cheerio@1.1.2: - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.1 - htmlparser2: 10.0.0 - parse5: 7.3.0 - parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 7.24.6 - whatwg-mimetype: 4.0.0 - chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -14205,10 +13529,6 @@ snapshots: clean-ansi@0.2.1: {} - clean-css@4.2.4: - dependencies: - source-map: 0.6.1 - clean-stack@2.2.0: {} cli-cursor@3.1.0: @@ -14221,12 +13541,6 @@ snapshots: cli-width@3.0.0: {} - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -14274,14 +13588,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@10.0.1: {} - - commander@2.17.1: {} - - commander@2.19.0: {} - - commander@5.1.0: {} - common-ancestor-path@1.0.1: {} compare-func@2.0.0: @@ -14300,11 +13606,6 @@ snapshots: readable-stream: 3.6.2 typedarray: 0.0.6 - config-chain@1.1.13: - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - console-control-strings@1.1.0: {} content-disposition@1.0.1: {} @@ -14383,8 +13684,6 @@ snapshots: core-js-pure@3.47.0: {} - core-js@2.6.12: {} - core-util-is@1.0.3: {} cors@2.8.6: @@ -14419,33 +13718,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-color-keywords@1.0.0: {} - - css-select@1.2.0: - dependencies: - boolbase: 1.0.0 - css-what: 2.1.3 - domutils: 1.5.1 - nth-check: 1.0.2 - - css-select@5.2.2: - dependencies: - boolbase: 1.0.0 - css-what: 6.2.2 - domhandler: 5.0.3 - domutils: 3.2.2 - nth-check: 2.1.1 - - css-to-react-native@3.2.0: - dependencies: - camelize: 1.0.1 - css-color-keywords: 1.0.0 - postcss-value-parser: 4.2.0 - - css-what@2.1.3: {} - - css-what@6.2.2: {} - css.escape@1.5.1: {} css@3.0.0: @@ -14528,70 +13800,6 @@ snapshots: dom-accessibility-api@0.5.16: {} - dom-serializer@0.1.1: - dependencies: - domelementtype: 1.3.1 - entities: 1.1.2 - - dom-serializer@0.2.2: - dependencies: - domelementtype: 2.3.0 - entities: 2.2.0 - - dom-serializer@1.4.1: - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - - dom-serializer@2.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - - domelementtype@1.3.1: {} - - domelementtype@2.3.0: {} - - domhandler@2.4.2: - dependencies: - domelementtype: 1.3.1 - - domhandler@3.3.0: - dependencies: - domelementtype: 2.3.0 - - domhandler@4.3.1: - dependencies: - domelementtype: 2.3.0 - - domhandler@5.0.3: - dependencies: - domelementtype: 2.3.0 - - domutils@1.5.1: - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - - domutils@1.7.0: - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - - domutils@2.8.0: - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - - domutils@3.2.2: - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dot-prop@5.3.0: dependencies: is-obj: 2.0.0 @@ -14619,13 +13827,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - editorconfig@1.0.4: - dependencies: - '@one-ini/wasm': 0.1.1 - commander: 10.0.1 - minimatch: 9.0.1 - semver: 7.7.4 - ee-first@1.1.1: {} ejs@3.1.10: @@ -14642,11 +13843,6 @@ snapshots: encodeurl@2.0.0: {} - encoding-sniffer@0.2.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 - encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -14660,14 +13856,8 @@ snapshots: dependencies: ansi-colors: 4.1.3 - entities@1.1.2: {} - - entities@2.2.0: {} - entities@4.5.0: {} - entities@6.0.1: {} - env-paths@2.2.1: {} envalid@8.1.1: @@ -14757,8 +13947,6 @@ snapshots: escalade@3.2.0: {} - escape-goat@3.0.0: {} - escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -15508,12 +14696,6 @@ snapshots: dependencies: function-bind: 1.1.2 - he@1.2.0: {} - - hoist-non-react-statics@3.3.2: - dependencies: - react-is: 16.13.1 - hosted-git-info@2.8.9: {} hosted-git-info@4.1.0: @@ -15526,39 +14708,6 @@ snapshots: html-escaper@2.0.2: {} - html-minifier@3.5.21: - dependencies: - camel-case: 3.0.0 - clean-css: 4.2.4 - commander: 2.17.1 - he: 1.2.0 - param-case: 2.1.1 - relateurl: 0.2.7 - uglify-js: 3.4.10 - - htmlparser2@10.0.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 6.0.1 - - htmlparser2@3.10.1: - dependencies: - domelementtype: 1.3.1 - domhandler: 2.4.2 - domutils: 1.7.0 - entities: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.2 - - htmlparser2@4.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 3.3.0 - domutils: 2.8.0 - entities: 2.2.0 - http-cache-semantics@4.2.0: {} http-errors@1.8.1: @@ -15604,6 +14753,7 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 + optional: true iconv-lite@0.7.1: dependencies: @@ -16230,16 +15380,6 @@ snapshots: jiti@2.6.1: {} - js-beautify@1.15.4: - dependencies: - config-chain: 1.1.13 - editorconfig: 1.0.4 - glob: 10.5.0 - js-cookie: 3.0.5 - nopt: 7.2.1 - - js-cookie@3.0.5: {} - js-sha3@0.8.0: {} js-tokens@4.0.0: {} @@ -16304,16 +15444,6 @@ snapshots: ms: 2.1.3 semver: 7.7.4 - juice@7.0.0(encoding@0.1.13): - dependencies: - cheerio: 1.1.2 - commander: 5.1.0 - mensch: 0.3.4 - slick: 1.12.2 - web-resource-inliner: 5.0.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - just-diff-apply@5.5.0: {} just-diff@6.0.2: {} @@ -16527,12 +15657,6 @@ snapshots: long@5.3.2: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lower-case@1.1.4: {} - lru-cache@10.4.3: {} lru-cache@11.2.7: {} @@ -16620,8 +15744,6 @@ snapshots: media-typer@1.1.0: {} - mensch@0.3.4: {} - meow@8.1.2: dependencies: '@types/minimist': 1.2.5 @@ -16709,10 +15831,6 @@ snapshots: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.1: - dependencies: - brace-expansion: 2.1.0 - minimatch@9.0.3: dependencies: brace-expansion: 2.0.2 @@ -16770,299 +15888,6 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - mjml-accordion@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-body@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-button@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-carousel@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-cli@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - chokidar: 3.6.0 - glob: 7.2.3 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - mjml-migrate: 4.7.1(encoding@0.1.13) - mjml-parser-xml: 4.7.1 - mjml-validator: 4.7.1 - yargs: 15.4.1 - transitivePeerDependencies: - - encoding - - mjml-column@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-core@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - cheerio: 1.0.0-rc.3 - html-minifier: 3.5.21 - js-beautify: 1.15.4 - juice: 7.0.0(encoding@0.1.13) - lodash: 4.17.23 - mjml-migrate: 4.7.1(encoding@0.1.13) - mjml-parser-xml: 4.7.1 - mjml-validator: 4.7.1 - transitivePeerDependencies: - - encoding - - mjml-divider@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-group@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head-attributes@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head-breakpoint@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head-font@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head-html-attributes@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head-preview@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head-style@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head-title@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-head@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-hero@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-image@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-migrate@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - js-beautify: 1.15.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - mjml-parser-xml: 4.7.1 - yargs: 15.4.1 - transitivePeerDependencies: - - encoding - - mjml-navbar@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-parser-xml@4.7.1: - dependencies: - '@babel/runtime': 7.28.4 - htmlparser2: 3.10.1 - lodash: 4.17.23 - - mjml-raw@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-react@1.0.59(mjml@4.7.1(encoding@0.1.13))(react-dom@19.2.4(react@19.2.4))(react@19.2.4): - dependencies: - babel-runtime: 6.25.0 - mjml: 4.7.1(encoding@0.1.13) - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - - mjml-section@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-social@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-spacer@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-table@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-text@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml-validator@4.7.1: - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - warning: 3.0.0 - - mjml-wrapper@4.7.1(encoding@0.1.13): - dependencies: - '@babel/runtime': 7.28.4 - lodash: 4.17.23 - mjml-core: 4.7.1(encoding@0.1.13) - mjml-section: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - mjml@4.7.1(encoding@0.1.13): - dependencies: - mjml-accordion: 4.7.1(encoding@0.1.13) - mjml-body: 4.7.1(encoding@0.1.13) - mjml-button: 4.7.1(encoding@0.1.13) - mjml-carousel: 4.7.1(encoding@0.1.13) - mjml-cli: 4.7.1(encoding@0.1.13) - mjml-column: 4.7.1(encoding@0.1.13) - mjml-core: 4.7.1(encoding@0.1.13) - mjml-divider: 4.7.1(encoding@0.1.13) - mjml-group: 4.7.1(encoding@0.1.13) - mjml-head: 4.7.1(encoding@0.1.13) - mjml-head-attributes: 4.7.1(encoding@0.1.13) - mjml-head-breakpoint: 4.7.1(encoding@0.1.13) - mjml-head-font: 4.7.1(encoding@0.1.13) - mjml-head-html-attributes: 4.7.1(encoding@0.1.13) - mjml-head-preview: 4.7.1(encoding@0.1.13) - mjml-head-style: 4.7.1(encoding@0.1.13) - mjml-head-title: 4.7.1(encoding@0.1.13) - mjml-hero: 4.7.1(encoding@0.1.13) - mjml-image: 4.7.1(encoding@0.1.13) - mjml-migrate: 4.7.1(encoding@0.1.13) - mjml-navbar: 4.7.1(encoding@0.1.13) - mjml-raw: 4.7.1(encoding@0.1.13) - mjml-section: 4.7.1(encoding@0.1.13) - mjml-social: 4.7.1(encoding@0.1.13) - mjml-spacer: 4.7.1(encoding@0.1.13) - mjml-table: 4.7.1(encoding@0.1.13) - mjml-text: 4.7.1(encoding@0.1.13) - mjml-validator: 4.7.1 - mjml-wrapper: 4.7.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - mkdirp@1.0.4: {} mock-req@0.2.0: {} @@ -17128,10 +15953,6 @@ snapshots: nested-obj@0.2.2: {} - no-case@2.3.2: - dependencies: - lower-case: 1.1.4 - node-fetch@2.6.7(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 @@ -17264,14 +16085,6 @@ snapshots: dependencies: path-key: 3.1.1 - nth-check@1.0.2: - dependencies: - boolbase: 1.0.0 - - nth-check@2.1.1: - dependencies: - boolbase: 1.0.0 - nullthrows@1.1.1: {} nx@20.8.3: @@ -17484,10 +16297,6 @@ snapshots: - bluebird - supports-color - param-case@2.1.1: - dependencies: - no-case: 2.3.2 - parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -17520,23 +16329,6 @@ snapshots: dependencies: parse-path: 7.1.0 - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 - - parse5-parser-stream@7.1.2: - dependencies: - parse5: 7.3.0 - - parse5@3.0.3: - dependencies: - '@types/node': 22.19.15 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - parseurl@1.3.3: {} path-exists@3.0.0: {} @@ -17689,8 +16481,6 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-value-parser@4.2.0: {} - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -17842,8 +16632,6 @@ snapshots: dependencies: read: 3.0.1 - proto-list@1.2.4: {} - protocols@2.0.2: {} proxy-addr@2.0.7: @@ -17891,8 +16679,6 @@ snapshots: react: 19.2.4 scheduler: 0.27.0 - react-is@16.13.1: {} - react-is@17.0.2: {} react-is@18.3.1: {} @@ -18012,10 +16798,6 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - regenerator-runtime@0.10.5: {} - - relateurl@0.2.7: {} - remove-accents@0.5.0: {} request-ip@3.3.0: {} @@ -18024,8 +16806,6 @@ snapshots: require-from-string@2.0.2: {} - require-main-filename@2.0.0: {} - requires-port@1.0.0: {} resolve-cwd@3.0.0: @@ -18306,8 +17086,6 @@ snapshots: dependencies: kind-of: 6.0.3 - shallowequal@1.1.0: {} - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -18368,8 +17146,6 @@ snapshots: slash@3.0.0: {} - slick@1.12.2: {} - smart-buffer@4.2.0: {} smtp-server@3.18.1: @@ -18517,40 +17293,6 @@ snapshots: strnum@2.2.0: {} - styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4): - dependencies: - '@babel/helper-module-imports': 7.28.6(supports-color@5.5.0) - '@babel/traverse': 7.29.0(supports-color@5.5.0) - '@emotion/is-prop-valid': 1.4.0 - '@emotion/stylis': 0.8.5 - '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.29.0)(styled-components@5.3.11(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react-is@19.2.4)(react@19.2.4))(supports-color@5.5.0) - css-to-react-native: 3.2.0 - hoist-non-react-statics: 3.3.2 - react: 19.2.4 - react-dom: 19.2.4(react@19.2.4) - react-is: 19.2.4 - shallowequal: 1.1.0 - supports-color: 5.5.0 - transitivePeerDependencies: - - '@babel/core' - - styled-system@5.1.5: - dependencies: - '@styled-system/background': 5.1.2 - '@styled-system/border': 5.1.5 - '@styled-system/color': 5.1.2 - '@styled-system/core': 5.1.2 - '@styled-system/flexbox': 5.1.2 - '@styled-system/grid': 5.1.2 - '@styled-system/layout': 5.1.2 - '@styled-system/position': 5.1.2 - '@styled-system/shadow': 5.1.2 - '@styled-system/space': 5.1.2 - '@styled-system/typography': 5.1.2 - '@styled-system/variant': 5.1.5 - object-assign: 4.1.1 - superagent@10.3.0: dependencies: component-emitter: 1.3.1 @@ -18785,11 +17527,6 @@ snapshots: uglify-js@3.19.3: optional: true - uglify-js@3.4.10: - dependencies: - commander: 2.19.0 - source-map: 0.6.1 - undefsafe@2.0.5: {} undici-types@6.21.0: {} @@ -18851,8 +17588,6 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 - upper-case@1.1.3: {} - uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -18890,8 +17625,6 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - valid-data-url@3.0.1: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -18924,40 +17657,17 @@ snapshots: dependencies: makeerror: 1.0.12 - warning@3.0.0: - dependencies: - loose-envify: 1.4.0 - wcwidth@1.0.1: dependencies: defaults: 1.0.4 - web-resource-inliner@5.0.0(encoding@0.1.13): - dependencies: - ansi-colors: 4.1.3 - escape-goat: 3.0.0 - htmlparser2: 4.1.0 - mime: 2.6.0 - node-fetch: 2.7.0(encoding@0.1.13) - valid-data-url: 3.0.1 - transitivePeerDependencies: - - encoding - webidl-conversions@3.0.1: {} - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - which-module@2.0.1: {} - which@2.0.2: dependencies: isexe: 2.0.0 @@ -19024,8 +17734,6 @@ snapshots: xtend@4.0.2: {} - y18n@4.0.3: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -19036,29 +17744,10 @@ snapshots: yanse@0.2.1: {} - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index fcc12b9093..63dc93eae5 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -8,4 +8,3 @@ packages: - 'postgres/*' - 'graphile/*' - 'jobs/*' - - 'functions/*'