Compare commits

..

4 Commits

163 changed files with 73472 additions and 19042 deletions

View File

@ -138,14 +138,6 @@ NEXT_PUBLIC_POSTHOG_KEY=""
NEXT_PUBLIC_FEATURE_BILLING_ENABLED=
# OPTIONAL: Leave blank to allow users to signup through /signup page.
NEXT_PUBLIC_DISABLE_SIGNUP=
# OPTIONAL: Set to true to use internal webapp url in browserless requests.
NEXT_PUBLIC_USE_INTERNAL_URL_BROWSERLESS=false
# [[TELEMETRY]]
# OPTIONAL: Set to "true" to disable anonymous telemetry for self-hosted instances.
# Telemetry helps us understand how Documenso is being used and improve the product.
# We only collect: app version, installation ID, and node ID. No personal data is collected.
DOCUMENSO_DISABLE_TELEMETRY=
# [[E2E Tests]]
E2E_TEST_AUTHENTICATE_USERNAME="Test User"
@ -157,4 +149,4 @@ E2E_TEST_AUTHENTICATE_USER_PASSWORD="test_Password123"
NEXT_PRIVATE_LOGGER_FILE_PATH=
# [[PLAIN SUPPORT]]
NEXT_PRIVATE_PLAIN_API_KEY=
NEXT_PRIVATE_PLAIN_API_KEY=

View File

@ -36,8 +36,6 @@ jobs:
- name: Build the docker image
env:
BUILD_PLATFORM: ${{ matrix.os == 'warp-ubuntu-latest-arm64-4x' && 'arm64' || 'amd64' }}
NEXT_PRIVATE_TELEMETRY_KEY: ${{ secrets.NEXT_PRIVATE_TELEMETRY_KEY }}
NEXT_PRIVATE_TELEMETRY_HOST: ${{ secrets.NEXT_PRIVATE_TELEMETRY_HOST }}
run: |
APP_VERSION="$(git name-rev --tags --name-only $(git rev-parse HEAD) | head -n 1 | sed 's/\^0//')"
GIT_SHA="$(git rev-parse HEAD)"
@ -45,8 +43,6 @@ jobs:
docker build \
-f ./docker/Dockerfile \
--progress=plain \
--build-arg NEXT_PRIVATE_TELEMETRY_KEY="${NEXT_PRIVATE_TELEMETRY_KEY:-}" \
--build-arg NEXT_PRIVATE_TELEMETRY_HOST="${NEXT_PRIVATE_TELEMETRY_HOST:-}" \
-t "documenso/documenso-$BUILD_PLATFORM:latest" \
-t "documenso/documenso-$BUILD_PLATFORM:$GIT_SHA" \
-t "documenso/documenso-$BUILD_PLATFORM:$APP_VERSION" \

View File

@ -1,8 +1,7 @@
import type { NextConfig } from 'next';
import nextra from 'nextra';
const nextConfig: NextConfig = {
/** @type {import('next').NextConfig} */
const nextConfig = {
transpilePackages: [
'@documenso/assets',
'@documenso/lib',

View File

@ -4,7 +4,7 @@
"private": true,
"scripts": {
"dev": "next dev -p 3002",
"build": "next build",
"build": "next build && next-sitemap",
"start": "next start -p 3002",
"lint:fix": "next lint --fix",
"clean": "rimraf .next && rimraf node_modules"
@ -15,18 +15,18 @@
"@documenso/tailwind-config": "*",
"@documenso/trpc": "*",
"@documenso/ui": "*",
"next": "^15",
"next-plausible": "^3.12.5",
"nextra": "^3",
"nextra-theme-docs": "^3",
"next": "14.2.28",
"next-plausible": "^3.12.0",
"nextra": "^2.13.4",
"nextra-theme-docs": "^2.13.4",
"react": "^18",
"react-dom": "^18"
},
"devDependencies": {
"@types/node": "^20",
"@types/react": "18.3.27",
"@types/react": "^18",
"@types/react-dom": "^18",
"pagefind": "^1.2.0",
"next-sitemap": "^4.2.3",
"typescript": "5.6.2"
}
}
}

View File

@ -0,0 +1,10 @@
import { PlausibleProvider } from '../providers/plausible.tsx';
import '../styles.css';
export default function App({ Component, pageProps }) {
return (
<PlausibleProvider>
<Component {...pageProps} />
</PlausibleProvider>
);
}

View File

@ -1,18 +0,0 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import React from 'react';
import { PlausibleProvider } from '../providers/plausible';
import '../styles.css';
export type AppProps = {
Component: React.ComponentType<any>;
pageProps: any;
};
export default function App({ Component, pageProps }: AppProps) {
return (
<PlausibleProvider>
<Component {...pageProps} />
</PlausibleProvider>
);
}

View File

@ -1,34 +0,0 @@
export default {
index: {
type: 'page',
title: 'Home',
display: 'hidden',
theme: {
timestamp: false,
},
},
users: {
type: 'page',
title: 'Users',
},
developers: {
type: 'page',
title: 'Developers',
},
updates: {
title: "What's New",
type: 'menu',
items: {
changelog: {
title: 'Changelog',
href: 'https://documenso.com/changelog',
newWindow: true,
},
blog: {
title: 'Blog',
href: 'https://documenso.com/blog',
newWindow: true,
},
},
},
};

View File

@ -0,0 +1,34 @@
{
"index": {
"type": "page",
"title": "Home",
"display": "hidden",
"theme": {
"timestamp": false
}
},
"users": {
"type": "page",
"title": "Users"
},
"developers": {
"type": "page",
"title": "Developers"
},
"updates": {
"title": "What's New",
"type": "menu",
"items": {
"changelog": {
"title": "Changelog",
"href": "https://documenso.com/changelog",
"newWindow": true
},
"blog": {
"title": "Blog",
"href": "https://documenso.com/blog",
"newWindow": true
}
}
}
}

View File

@ -1,18 +0,0 @@
export default {
index: 'Introduction',
'-- Development & Deployment': {
type: 'separator',
title: 'Development & Deployment',
},
'local-development': 'Local Development',
'developer-mode': 'Developer Mode',
'self-hosting': 'Self Hosting',
contributing: 'Contributing',
'-- API & Integration Guides': {
type: 'separator',
title: 'API & Integration Guides',
},
'public-api': 'Public API',
embedding: 'Embedding',
webhooks: 'Webhooks',
};

View File

@ -0,0 +1,18 @@
{
"index": "Introduction",
"-- Development & Deployment": {
"type": "separator",
"title": "Development & Deployment"
},
"local-development": "Local Development",
"developer-mode": "Developer Mode",
"self-hosting": "Self Hosting",
"contributing": "Contributing",
"-- API & Integration Guides": {
"type": "separator",
"title": "API & Integration Guides"
},
"public-api": "Public API",
"embedding": "Embedding",
"webhooks": "Webhooks"
}

View File

@ -1,4 +0,0 @@
export default {
index: 'Getting Started',
'contributing-translations': 'Contributing Translations',
};

View File

@ -0,0 +1,4 @@
{
"index": "Getting Started",
"contributing-translations": "Contributing Translations"
}

View File

@ -1,11 +0,0 @@
export default {
index: 'Get Started',
react: 'React Integration',
vue: 'Vue Integration',
svelte: 'Svelte Integration',
solid: 'Solid Integration',
preact: 'Preact Integration',
angular: 'Angular Integration',
'css-variables': 'CSS Variables',
authoring: 'Authoring',
};

View File

@ -0,0 +1,11 @@
{
"index": "Get Started",
"react": "React Integration",
"vue": "Vue Integration",
"svelte": "Svelte Integration",
"solid": "Solid Integration",
"preact": "Preact Integration",
"angular": "Angular Integration",
"css-variables": "CSS Variables",
"authoring": "Authoring"
}

View File

@ -3,16 +3,16 @@ title: Developer Documentation
description: Learn how to run Documenso locally, use our API, integrate webhooks, contribute to the project, and self-host Documenso.
---
import { Cards } from 'nextra/components';
import { Card, Cards } from 'nextra/components';
# Developer Documentation
The developer documentation is a comprehensive guide to help you:
<Cards>
<Cards.Card title="Set up dev environment" href="/developers/local-development" />
<Cards.Card title="Use the API" href="/developers/public-api" />
<Cards.Card title="Integrate webhooks" href="/developers/webhooks" />
<Cards.Card title="Contribute to the project" href="/developers/contributing" />
<Cards.Card title="Self-host Documenso" href="/developers/self-hosting" />
<Card title="Set up dev environment" href="/developers/local-development" />
<Card title="Use the API" href="/developers/public-api" />
<Card title="Integrate webhooks" href="/developers/webhooks" />
<Card title="Contribute to the project" href="/developers/contributing" />
<Card title="Self-host Documenso" href="/developers/self-hosting" />
</Cards>

View File

@ -1,8 +0,0 @@
export default {
index: 'Get Started',
quickstart: 'Developer Quickstart',
manual: 'Manual Setup',
gitpod: 'Gitpod',
'signing-certificate': 'Signing Certificate',
translations: 'Translations',
};

View File

@ -0,0 +1,8 @@
{
"index": "Get Started",
"quickstart": "Developer Quickstart",
"manual": "Manual Setup",
"gitpod": "Gitpod",
"signing-certificate": "Signing Certificate",
"translations": "Translations"
}

View File

@ -1,6 +0,0 @@
export default {
index: 'Get Started',
authentication: 'Authentication',
'rate-limits': 'Rate Limits',
versioning: 'Versioning',
};

View File

@ -0,0 +1,6 @@
{
"index": "Get Started",
"authentication": "Authentication",
"rate-limits": "Rate Limits",
"versioning": "Versioning"
}

View File

@ -1,7 +0,0 @@
export default {
index: 'Getting Started',
'signing-certificate': 'Signing Certificate',
'how-to': 'How To',
'setting-up-oauth-providers': 'Setting up OAuth Providers',
telemetry: 'Telemetry',
};

View File

@ -0,0 +1,6 @@
{
"index": "Getting Started",
"signing-certificate": "Signing Certificate",
"how-to": "How To",
"setting-up-oauth-providers": "Setting up OAuth Providers"
}

View File

@ -275,15 +275,7 @@ The environment variables listed above are a subset of those available for confi
| `NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY` | The secondary encryption key for symmetric encryption and decryption (at least 32 characters). |
| `NEXT_PRIVATE_GOOGLE_CLIENT_ID` | The Google client ID for Google authentication (optional). |
| `NEXT_PRIVATE_GOOGLE_CLIENT_SECRET` | The Google client secret for Google authentication (optional). |
| `NEXT_PRIVATE_MICROSOFT_CLIENT_ID` | The Microsoft client ID for Microsoft authentication (optional). |
| `NEXT_PRIVATE_MICROSOFT_CLIENT_SECRET` | The Microsoft client secret for Microsoft authentication (optional). |
| `NEXT_PRIVATE_OIDC_CLIENT_ID` | The OIDC client ID for OIDC authentication (optional). |
| `NEXT_PRIVATE_OIDC_CLIENT_SECRET` | The OIDC client secret for OIDC authentication (optional). |
| `NEXT_PRIVATE_OIDC_WELL_KNOWN` | The well-known URL for the OIDC provider (optional). |
| `NEXT_PRIVATE_OIDC_PROVIDER_LABEL` | The label to display for the OIDC provider button (optional). |
| `NEXT_PRIVATE_OIDC_SKIP_VERIFY` | Whether to skip email verification for OIDC accounts (optional, default `false`). |
| `NEXT_PUBLIC_WEBAPP_URL` | The URL for the web application. |
| `NEXT_PUBLIC_SUPPORT_EMAIL` | The support email address displayed to users (default `support@documenso.com`). |
| `NEXT_PRIVATE_DATABASE_URL` | The URL for the primary database connection (with connection pooling). |
| `NEXT_PRIVATE_DIRECT_DATABASE_URL` | The URL for the direct database connection (without connection pooling). |
| `NEXT_PRIVATE_SIGNING_TRANSPORT` | The signing transport to use. Available options: local (default) |
@ -305,7 +297,6 @@ The environment variables listed above are a subset of those available for confi
| `NEXT_PRIVATE_SMTP_APIKEY_USER` | The API key user for the SMTP server for the `smtp-api` transport. |
| `NEXT_PRIVATE_SMTP_APIKEY` | The API key for the SMTP server for the `smtp-api` transport. |
| `NEXT_PRIVATE_SMTP_SECURE` | Whether to force the use of TLS for the SMTP server for SMTP transports. |
| `NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS` | Whether to ignore TLS errors for the SMTP server (useful for self-signed certificates). |
| `NEXT_PRIVATE_SMTP_FROM_ADDRESS` | The email address for the "from" address. |
| `NEXT_PRIVATE_SMTP_FROM_NAME` | The sender name for the "from" address. |
| `NEXT_PRIVATE_RESEND_API_KEY` | The API key for Resend.com for the `resend` transport. |
@ -317,37 +308,6 @@ The environment variables listed above are a subset of those available for confi
| `NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT` | The maximum document upload limit displayed to the user (in MB). |
| `NEXT_PUBLIC_POSTHOG_KEY` | The optional PostHog key for analytics and feature flags. |
| `NEXT_PUBLIC_DISABLE_SIGNUP` | Whether to disable user signups through the /signup page. |
| `NEXT_PRIVATE_BROWSERLESS_URL` | The URL for a Browserless.io instance to generate PDFs (optional). |
| `DOCUMENSO_DISABLE_TELEMETRY` | Set to `true` to disable anonymous telemetry (see [Telemetry](#telemetry) section below). |
## Telemetry
Documenso collects anonymous telemetry data to help us understand how the software is being used and improve the product. This telemetry is **enabled by default** for self-hosted instances.
### What We Collect
We collect minimal, privacy-preserving data:
- **App Version**: The version of Documenso you are running
- **Installation ID**: A unique identifier for your installation (stored in your database)
- **Node ID**: A unique identifier for each server/container instance (stored in the OS temp directory)
We do **not** collect any personal data, document contents, user information, or usage patterns.
### Events
- **Server Startup**: Captured once when the server starts
- **Server Heartbeat**: Captured every hour while the server is running
### Disabling Telemetry
To disable telemetry, set the following environment variable:
```bash
DOCUMENSO_DISABLE_TELEMETRY=true
```
This will completely disable all telemetry data collection.
## Run as a Service

View File

@ -1,85 +0,0 @@
# Telemetry
Documenso collects anonymous telemetry data from self-hosted instances to help us understand how the software is being used and make improvements to the product. This telemetry is enabled by default, but you can easily disable it if you prefer.
## What We Collect
We collect minimal, privacy-preserving information that helps us understand the health and adoption of self-hosted installations:
- **App Version**: The version of Documenso you are running. This helps us understand which versions are in use and prioritize support for older versions.
- **Installation ID**: A unique identifier for your installation. This is stored in your database and helps us count distinct installations without knowing who you are.
- **Node ID**: A unique identifier for each server or container instance. This is stored in your operating system's temporary directory and helps us understand deployment patterns (for example, how many instances are running in a cluster).
### What We Don't Collect
We do **not** collect any of the following:
- Personal information about you or your users
- Document contents or file names
- User email addresses or names
- Usage patterns or feature usage statistics
- Server logs or error messages
- Any data that could identify your organization or users
## Why We Collect Telemetry
The telemetry data we collect serves several important purposes:
1. **Product Improvement**: Understanding which versions are in use helps us prioritize bug fixes and security updates for the versions that matter most.
2. **Support Planning**: Knowing how many installations exist and their deployment patterns helps us plan support resources and documentation.
3. **Feature Development**: Understanding deployment patterns (like cluster sizes) helps us make better architectural decisions for future features.
4. **Community Health**: Tracking adoption helps us understand the growth of the self-hosted community and allocate resources accordingly.
All of this is done anonymously and in aggregate. We cannot identify you, your organization, or your users from the telemetry data we collect.
## Events We Track
We track two simple events:
- **Server Startup**: Captured once when your server starts. This tells us when installations are first set up or restarted.
- **Server Heartbeat**: Captured every hour while your server is running. This helps us understand how many active installations exist and their uptime patterns.
## How to Disable Telemetry
If you prefer not to send telemetry data, you can disable it by setting an environment variable.
### Using Environment Variables
Add the following to your environment configuration:
```bash
DOCUMENSO_DISABLE_TELEMETRY=true
```
### Docker
If you're using Docker, you can set this in your `docker-compose.yml`:
```yaml
services:
app:
environment:
- DOCUMENSO_DISABLE_TELEMETRY=true
```
Or pass it when running a container:
```bash
docker run -e DOCUMENSO_DISABLE_TELEMETRY=true ...
```
### After Disabling
Once you set `DOCUMENSO_DISABLE_TELEMETRY=true` and restart your server, no telemetry data will be sent. The telemetry client will not initialize, and no network requests will be made to our telemetry servers.
Note: If you previously had telemetry enabled, the installation ID stored in your database will remain, but it will no longer be used or sent anywhere.
## Questions or Concerns
If you have questions about our telemetry practices or concerns about privacy, please reach out to us. We're committed to transparency and respect your choice to disable telemetry if you prefer.

View File

@ -1,23 +0,0 @@
export default {
index: 'Introduction',
support: 'Support',
'-- How To Use': {
type: 'separator',
title: 'How To Use',
},
'get-started': 'Get Started',
profile: 'Public Profile',
organisations: 'Organisations',
documents: 'Documents',
templates: 'Templates',
branding: 'Branding',
'email-domains': 'Email Domains',
'direct-links': 'Direct Signing Links',
'-- Legal Overview': {
type: 'separator',
title: 'Legal Overview',
},
'fair-use': 'Fair Use Policy',
licenses: 'Licenses',
compliance: 'Compliance',
};

View File

@ -0,0 +1,23 @@
{
"index": "Introduction",
"support": "Support",
"-- How To Use": {
"type": "separator",
"title": "How To Use"
},
"get-started": "Get Started",
"profile": "Public Profile",
"organisations": "Organisations",
"documents": "Documents",
"templates": "Templates",
"branding": "Branding",
"email-domains": "Email Domains",
"direct-links": "Direct Signing Links",
"-- Legal Overview": {
"type": "separator",
"title": "Legal Overview"
},
"fair-use": "Fair Use Policy",
"licenses": "Licenses",
"compliance": "Compliance"
}

View File

@ -1,4 +0,0 @@
export default {
'signature-levels': 'Signature Levels',
'standards-and-regulations': 'Standards and Regulations',
};

View File

@ -0,0 +1,4 @@
{
"signature-levels": "Signature Levels",
"standards-and-regulations": "Standards and Regulations"
}

View File

@ -1,7 +0,0 @@
export default {
'sending-documents': 'Sending Documents',
'document-preferences': 'Document Preferences',
'document-visibility': 'Document Visibility',
fields: 'Document Fields',
'email-preferences': 'Email Preferences',
};

View File

@ -0,0 +1,7 @@
{
"sending-documents": "Sending Documents",
"document-preferences": "Document Preferences",
"document-visibility": "Document Visibility",
"fields": "Document Fields",
"email-preferences": "Email Preferences"
}

View File

@ -178,7 +178,7 @@ The dropdown/select field collects a single choice from a list of options.
Place the dropdown/select field on the document where you want the signer to select a choice. The dropdown/select field comes with additional settings that can be configured.
{/* ![The dropdown/select field in the Documenso document editor](/document-signing/dropdown-field-document-editor-view.webp) */}
![The dropdown/select field in the Documenso document editor](/document-signing/dropdown-field-document-editor-view.webp)
The dropdown/select field settings include:

View File

@ -1,5 +0,0 @@
export default {
index: 'Overview',
'community-edition': 'Community Edition',
'enterprise-edition': 'Enterprise Edition',
};

View File

@ -0,0 +1,5 @@
{
"index": "Overview",
"community-edition": "Community Edition",
"enterprise-edition": "Enterprise Edition"
}

View File

@ -1,8 +0,0 @@
export default {
index: 'Introduction',
members: 'Members',
groups: 'Groups',
teams: 'Teams',
sso: 'SSO',
billing: 'Billing',
};

View File

@ -0,0 +1,8 @@
{
"index": "Introduction",
"members": "Members",
"groups": "Groups",
"teams": "Teams",
"sso": "SSO",
"billing": "Billing"
}

View File

@ -1,4 +0,0 @@
export default {
index: 'Configuration',
'microsoft-entra-id': 'Microsoft Entra ID',
};

View File

@ -0,0 +1,4 @@
{
"index": "Configuration",
"microsoft-entra-id": "Microsoft Entra ID"
}

View File

@ -1,6 +0,0 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
html {
scroll-behavior: smooth;
}

View File

@ -8,9 +8,7 @@ module.exports = {
...baseConfig.content,
`${path.join(require.resolve('@documenso/ui'), '..')}/**/*.{ts,tsx}`,
'./pages/**/*.{js,ts,jsx,tsx,mdx}',
'./content/**/*.{js,ts,jsx,tsx,mdx}',
'./components/**/*.{js,ts,jsx,tsx,mdx}',
'./app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
fontFamily: {

View File

@ -4,7 +4,7 @@ import { useConfig } from 'nextra-theme-docs';
const themeConfig: DocsThemeConfig = {
logo: <span>Documenso</span>,
head: function useHead() {
const config = useConfig();
const config = useConfig<{ title?: string; description?: string }>();
const title = `${config.frontMatter.title} | Documenso Docs` || 'Documenso Docs';
const description = config.frontMatter.description || 'The official Documenso documentation';
@ -12,7 +12,6 @@ const themeConfig: DocsThemeConfig = {
return (
<>
<meta httpEquiv="Content-Language" content="en" />
<title>{title}</title>
<meta name="title" content={title} />
<meta name="og:title" content={title} />
<meta name="description" content={description} />
@ -47,7 +46,7 @@ const themeConfig: DocsThemeConfig = {
},
docsRepositoryBase: 'https://github.com/documenso/documenso/tree/main/apps/documentation',
footer: {
content: (
text: (
<span>
{new Date().getFullYear()} ©{' '}
<a href="https://documen.so" target="_blank">
@ -57,9 +56,12 @@ const themeConfig: DocsThemeConfig = {
</span>
),
},
color: {
hue: 100,
saturation: 48.47,
primaryHue: 100,
primarySaturation: 48.47,
useNextSeoProps() {
return {
titleTemplate: '%s | Documenso Docs',
};
},
};

View File

@ -1,17 +1,13 @@
{
"compilerOptions": {
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
@ -22,21 +18,10 @@
}
],
"paths": {
"@/*": [
"./*"
]
"@/*": ["./*"]
},
"forceConsistentCasingInFileNames": true,
"target": "ES2017"
"forceConsistentCasingInFileNames": true
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
"tailwind.config.js"
],
"exclude": [
"node_modules"
]
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts", "tailwind.config.js"],
"exclude": ["node_modules"]
}

View File

@ -0,0 +1,4 @@
/** @type {import('next').NextConfig} */
const nextConfig = {};
module.exports = nextConfig;

View File

@ -1,5 +0,0 @@
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {};
export default nextConfig;

View File

@ -11,12 +11,12 @@
},
"dependencies": {
"@documenso/prisma": "*",
"luxon": "^3.7.2",
"next": "^15"
"luxon": "^3.5.0",
"next": "14.2.28"
},
"devDependencies": {
"@types/node": "^20",
"@types/react": "18.3.27",
"@types/react": "18.3.5",
"typescript": "5.6.2"
}
}

View File

@ -13,7 +13,7 @@ import {
DialogHeader,
DialogTitle,
} from '@documenso/ui/primitives/dialog';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { useCurrentTeam } from '~/providers/team';
@ -96,7 +96,7 @@ export const DocumentDuplicateDialog = ({
</div>
) : (
<div className="p-2 [&>div]:h-[50vh] [&>div]:overflow-y-scroll">
<PDFViewerLazy
<PDFViewer
key={envelopeItems[0].id}
envelopeItem={envelopeItems[0]}
token={undefined}

View File

@ -38,7 +38,7 @@ import { useCurrentTeam } from '~/providers/team';
import { WebhookMultiSelectCombobox } from '../general/webhook-multiselect-combobox';
const ZCreateWebhookFormSchema = ZCreateWebhookRequestSchema;
const ZCreateWebhookFormSchema = ZCreateWebhookRequestSchema.omit({ teamId: true });
type TCreateWebhookFormSchema = z.infer<typeof ZCreateWebhookFormSchema>;
@ -78,6 +78,7 @@ export const WebhookCreateDialog = ({ trigger, ...props }: WebhookCreateDialogPr
eventTriggers,
secret,
webhookUrl,
teamId: team.id,
});
setOpen(false);

View File

@ -67,7 +67,7 @@ export const WebhookDeleteDialog = ({ webhook, children }: WebhookDeleteDialogPr
const onSubmit = async () => {
try {
await deleteWebhook({ id: webhook.id });
await deleteWebhook({ id: webhook.id, teamId: team.id });
toast({
title: _(msg`Webhook deleted`),
@ -146,18 +146,26 @@ export const WebhookDeleteDialog = ({ webhook, children }: WebhookDeleteDialogPr
/>
<DialogFooter>
<Button type="button" variant="secondary" onClick={() => setOpen(false)}>
<Trans>Cancel</Trans>
</Button>
<div className="flex w-full flex-nowrap gap-4">
<Button
type="button"
variant="secondary"
className="flex-1"
onClick={() => setOpen(false)}
>
<Trans>Cancel</Trans>
</Button>
<Button
type="submit"
variant="destructive"
disabled={!form.formState.isValid}
loading={form.formState.isSubmitting}
>
<Trans>Delete</Trans>
</Button>
<Button
type="submit"
variant="destructive"
className="flex-1"
disabled={!form.formState.isValid}
loading={form.formState.isSubmitting}
>
<Trans>I'm sure! Delete it</Trans>
</Button>
</div>
</DialogFooter>
</fieldset>
</form>

View File

@ -1,225 +0,0 @@
import { useState } from 'react';
import { zodResolver } from '@hookform/resolvers/zod';
import { useLingui } from '@lingui/react/macro';
import { Trans } from '@lingui/react/macro';
import type { Webhook } from '@prisma/client';
import type * as DialogPrimitive from '@radix-ui/react-dialog';
import { useForm } from 'react-hook-form';
import type { z } from 'zod';
import { trpc } from '@documenso/trpc/react';
import { ZEditWebhookRequestSchema } from '@documenso/trpc/server/webhook-router/schema';
import { Button } from '@documenso/ui/primitives/button';
import {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@documenso/ui/primitives/dialog';
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@documenso/ui/primitives/form/form';
import { Input } from '@documenso/ui/primitives/input';
import { PasswordInput } from '@documenso/ui/primitives/password-input';
import { Switch } from '@documenso/ui/primitives/switch';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { WebhookMultiSelectCombobox } from '../general/webhook-multiselect-combobox';
const ZEditWebhookFormSchema = ZEditWebhookRequestSchema.omit({ id: true });
type TEditWebhookFormSchema = z.infer<typeof ZEditWebhookFormSchema>;
export type WebhookEditDialogProps = {
trigger?: React.ReactNode;
webhook: Webhook;
} & Omit<DialogPrimitive.DialogProps, 'children'>;
export const WebhookEditDialog = ({ trigger, webhook, ...props }: WebhookEditDialogProps) => {
const { t } = useLingui();
const { toast } = useToast();
const [open, setOpen] = useState(false);
const { mutateAsync: updateWebhook } = trpc.webhook.editWebhook.useMutation();
const form = useForm<TEditWebhookFormSchema>({
resolver: zodResolver(ZEditWebhookFormSchema),
values: {
webhookUrl: webhook?.webhookUrl ?? '',
eventTriggers: webhook?.eventTriggers ?? [],
secret: webhook?.secret ?? '',
enabled: webhook?.enabled ?? true,
},
});
const onSubmit = async (data: TEditWebhookFormSchema) => {
try {
await updateWebhook({
id: webhook.id,
...data,
});
toast({
title: t`Webhook updated`,
description: t`The webhook has been updated successfully.`,
duration: 5000,
});
} catch (err) {
toast({
title: t`Failed to update webhook`,
description: t`We encountered an error while updating the webhook. Please try again later.`,
variant: 'destructive',
});
}
};
return (
<Dialog
open={open}
onOpenChange={(value) => !form.formState.isSubmitting && setOpen(value)}
{...props}
>
<DialogTrigger onClick={(e) => e.stopPropagation()} asChild>
{trigger}
</DialogTrigger>
<DialogContent className="max-w-lg" position="center">
<DialogHeader>
<DialogTitle>
<Trans>Edit webhook</Trans>
</DialogTitle>
<DialogDescription>{webhook.id}</DialogDescription>
</DialogHeader>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)}>
<fieldset
className="flex h-full flex-col gap-y-6"
disabled={form.formState.isSubmitting}
>
<div className="flex flex-col-reverse gap-4 md:flex-row">
<FormField
control={form.control}
name="webhookUrl"
render={({ field }) => (
<FormItem className="flex-1">
<FormLabel required>Webhook URL</FormLabel>
<FormControl>
<Input className="bg-background" {...field} />
</FormControl>
<FormDescription>
<Trans>The URL for Documenso to send webhook events to.</Trans>
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name="enabled"
render={({ field }) => (
<FormItem>
<FormLabel>
<Trans>Enabled</Trans>
</FormLabel>
<div>
<FormControl>
<Switch
className="bg-background"
checked={field.value}
onCheckedChange={field.onChange}
/>
</FormControl>
</div>
<FormMessage />
</FormItem>
)}
/>
</div>
<FormField
control={form.control}
name="eventTriggers"
render={({ field: { onChange, value } }) => (
<FormItem className="flex flex-col gap-2">
<FormLabel required>
<Trans>Triggers</Trans>
</FormLabel>
<FormControl>
<WebhookMultiSelectCombobox
listValues={value}
onChange={(values: string[]) => {
onChange(values);
}}
/>
</FormControl>
<FormDescription>
<Trans>The events that will trigger a webhook to be sent to your URL.</Trans>
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name="secret"
render={({ field }) => (
<FormItem>
<FormLabel>Secret</FormLabel>
<FormControl>
<PasswordInput
className="bg-background"
{...field}
value={field.value ?? ''}
/>
</FormControl>
<FormDescription>
<Trans>
A secret that will be sent to your URL so you can verify that the request
has been sent by Documenso.
</Trans>
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<DialogFooter>
<DialogClose asChild>
<Button variant="secondary">
<Trans>Close</Trans>
</Button>
</DialogClose>
<Button type="submit" loading={form.formState.isSubmitting}>
<Trans>Update</Trans>
</Button>
</DialogFooter>
</fieldset>
</form>
</Form>
</DialogContent>
</Dialog>
);
};

View File

@ -36,6 +36,8 @@ import {
} from '@documenso/ui/primitives/select';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { useCurrentTeam } from '~/providers/team';
export type WebhookTestDialogProps = {
webhook: Pick<Webhook, 'id' | 'webhookUrl' | 'eventTriggers'>;
children: React.ReactNode;
@ -51,6 +53,8 @@ export const WebhookTestDialog = ({ webhook, children }: WebhookTestDialogProps)
const { t } = useLingui();
const { toast } = useToast();
const team = useCurrentTeam();
const [open, setOpen] = useState(false);
const { mutateAsync: testWebhook } = trpc.webhook.testWebhook.useMutation();
@ -67,6 +71,7 @@ export const WebhookTestDialog = ({ webhook, children }: WebhookTestDialogProps)
await testWebhook({
id: webhook.id,
event,
teamId: team.id,
});
toast({
@ -145,11 +150,11 @@ export const WebhookTestDialog = ({ webhook, children }: WebhookTestDialogProps)
<DialogFooter>
<Button type="button" variant="secondary" onClick={() => setOpen(false)}>
<Trans>Close</Trans>
<Trans>Cancel</Trans>
</Button>
<Button type="submit" loading={form.formState.isSubmitting}>
<Trans>Send</Trans>
<Trans>Send Test Webhook</Trans>
</Button>
</DialogFooter>
</fieldset>

View File

@ -23,7 +23,7 @@ import { FRIENDLY_FIELD_TYPE } from '@documenso/ui/primitives/document-flow/type
import { ElementVisible } from '@documenso/ui/primitives/element-visible';
import { FieldSelector } from '@documenso/ui/primitives/field-selector';
import { Form } from '@documenso/ui/primitives/form/form';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import PDFViewer from '@documenso/ui/primitives/pdf-viewer';
import { RecipientSelector } from '@documenso/ui/primitives/recipient-selector';
import { Sheet, SheetContent, SheetTrigger } from '@documenso/ui/primitives/sheet';
import { useToast } from '@documenso/ui/primitives/use-toast';
@ -463,12 +463,12 @@ export const ConfigureFieldsView = ({
{/* Desktop sidebar */}
{!isMobile && (
<div className="order-2 col-span-12 md:order-1 md:col-span-4">
<div className="sticky top-4 max-h-[calc(100vh-2rem)] rounded-lg border border-border bg-widget p-4 pb-6">
<div className="bg-widget border-border sticky top-4 max-h-[calc(100vh-2rem)] rounded-lg border p-4 pb-6">
<h2 className="mb-1 text-lg font-medium">
<Trans>Configure Fields</Trans>
</h2>
<p className="mb-6 text-sm text-muted-foreground">
<p className="text-muted-foreground mb-6 text-sm">
<Trans>Configure the fields you want to place on the document.</Trans>
</p>
@ -522,7 +522,7 @@ export const ConfigureFieldsView = ({
{selectedField && (
<div
className={cn(
'dark:text-muted-background pointer-events-none fixed z-50 flex cursor-pointer flex-col items-center justify-center bg-white text-muted-foreground transition duration-200 [container-type:size]',
'text-muted-foreground dark:text-muted-background pointer-events-none fixed z-50 flex cursor-pointer flex-col items-center justify-center bg-white transition duration-200 [container-type:size]',
selectedRecipientStyles.base,
{
'-rotate-6 scale-90 opacity-50 dark:bg-black/20': !isFieldWithinBounds,
@ -545,7 +545,7 @@ export const ConfigureFieldsView = ({
<Form {...form}>
<div>
<PDFViewerLazy
<PDFViewer
presignToken={presignToken}
overrideData={normalizedDocumentData}
envelopeItem={normalizedEnvelopeItem}
@ -597,14 +597,14 @@ export const ConfigureFieldsView = ({
{isMobile && (
<Sheet open={isDrawerOpen} onOpenChange={setIsDrawerOpen}>
<SheetTrigger asChild>
<div className="fixed bottom-6 left-6 right-6 z-50 flex items-center justify-between gap-2 rounded-lg border border-border bg-widget p-4">
<div className="bg-widget border-border fixed bottom-6 left-6 right-6 z-50 flex items-center justify-between gap-2 rounded-lg border p-4">
<span className="text-lg font-medium">
<Trans>Configure Fields</Trans>
</span>
<button
type="button"
className="inline-flex h-10 w-10 items-center justify-center rounded-lg border border-border text-muted-foreground"
className="border-border text-muted-foreground inline-flex h-10 w-10 items-center justify-center rounded-lg border"
>
<ChevronsUpDown className="h-6 w-6" />
</button>
@ -614,13 +614,13 @@ export const ConfigureFieldsView = ({
<SheetContent
position="bottom"
size="xl"
className="h-fit max-h-[80vh] overflow-y-auto rounded-t-xl bg-widget p-4"
className="bg-widget h-fit max-h-[80vh] overflow-y-auto rounded-t-xl p-4"
>
<h2 className="mb-1 text-lg font-medium">
<Trans>Configure Fields</Trans>
</h2>
<p className="mb-6 text-sm text-muted-foreground">
<p className="text-muted-foreground mb-6 text-sm">
<Trans>Configure the fields you want to place on the document.</Trans>
</p>

View File

@ -28,7 +28,7 @@ import { Button } from '@documenso/ui/primitives/button';
import { ElementVisible } from '@documenso/ui/primitives/element-visible';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { SignaturePadDialog } from '@documenso/ui/primitives/signature-pad/signature-pad-dialog';
import { useToast } from '@documenso/ui/primitives/use-toast';
@ -334,7 +334,7 @@ export const EmbedDirectTemplateClientPage = ({
<div className="relative flex w-full flex-col gap-x-6 gap-y-12 md:flex-row">
{/* Viewer */}
<div className="flex-1">
<PDFViewerLazy
<PDFViewer
envelopeItem={envelopeItems[0]}
token={recipient.token}
version="signed"
@ -348,11 +348,11 @@ export const EmbedDirectTemplateClientPage = ({
className="group/document-widget fixed bottom-8 left-0 z-50 h-fit max-h-[calc(100dvh-2rem)] w-full flex-shrink-0 px-6 md:sticky md:bottom-[unset] md:top-4 md:z-auto md:w-[350px] md:px-0"
data-expanded={isExpanded || undefined}
>
<div className="flex h-fit w-full flex-col rounded-xl border border-border bg-widget px-4 py-4 md:min-h-[min(calc(100dvh-2rem),48rem)] md:py-6">
<div className="border-border bg-widget flex h-fit w-full flex-col rounded-xl border px-4 py-4 md:min-h-[min(calc(100dvh-2rem),48rem)] md:py-6">
{/* Header */}
<div>
<div className="flex items-center justify-between gap-x-2">
<h3 className="text-xl font-semibold text-foreground md:text-2xl">
<h3 className="text-foreground text-xl font-semibold md:text-2xl">
<Trans>Sign document</Trans>
</h3>
@ -362,7 +362,7 @@ export const EmbedDirectTemplateClientPage = ({
className="h-8 w-8 p-0 md:hidden"
onClick={() => setIsExpanded(false)}
>
<LucideChevronDown className="h-5 w-5 text-muted-foreground" />
<LucideChevronDown className="text-muted-foreground h-5 w-5" />
</Button>
) : pendingFields.length > 0 ? (
<Button
@ -370,7 +370,7 @@ export const EmbedDirectTemplateClientPage = ({
className="h-8 w-8 p-0 md:hidden"
onClick={() => setIsExpanded(true)}
>
<LucideChevronUp className="h-5 w-5 text-muted-foreground" />
<LucideChevronUp className="text-muted-foreground h-5 w-5" />
</Button>
) : (
<Button
@ -388,11 +388,11 @@ export const EmbedDirectTemplateClientPage = ({
</div>
<div className="hidden group-data-[expanded]/document-widget:block md:block">
<p className="mt-2 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-2 text-sm">
<Trans>Sign the document to complete the process.</Trans>
</p>
<hr className="mb-8 mt-4 border-border" />
<hr className="border-border mb-8 mt-4" />
</div>
{/* Form */}
@ -406,7 +406,7 @@ export const EmbedDirectTemplateClientPage = ({
<Input
type="text"
id="full-name"
className="mt-2 bg-background"
className="bg-background mt-2"
disabled={isNameLocked}
value={fullName}
onChange={(e) => !isNameLocked && setFullName(e.target.value)}
@ -421,7 +421,7 @@ export const EmbedDirectTemplateClientPage = ({
<Input
type="email"
id="email"
className="mt-2 bg-background"
className="bg-background mt-2"
disabled={isEmailLocked}
value={email}
onChange={(e) => !isEmailLocked && setEmail(e.target.value.trim())}
@ -490,7 +490,7 @@ export const EmbedDirectTemplateClientPage = ({
</div>
{!hidePoweredBy && (
<div className="fixed bottom-0 left-0 z-40 rounded-tr bg-primary px-2 py-1 text-xs font-medium text-primary-foreground opacity-60 hover:opacity-100">
<div className="bg-primary text-primary-foreground fixed bottom-0 left-0 z-40 rounded-tr px-2 py-1 text-xs font-medium opacity-60 hover:opacity-100">
<span>Powered by</span>
<BrandingLogo className="ml-2 inline-block h-[14px]" />
</div>

View File

@ -22,7 +22,7 @@ import { Button } from '@documenso/ui/primitives/button';
import { ElementVisible } from '@documenso/ui/primitives/element-visible';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { RadioGroup, RadioGroupItem } from '@documenso/ui/primitives/radio-group';
import { SignaturePadDialog } from '@documenso/ui/primitives/signature-pad/signature-pad-dialog';
import { useToast } from '@documenso/ui/primitives/use-toast';
@ -286,7 +286,7 @@ export const EmbedSignDocumentV1ClientPage = ({
<div className="embed--DocumentContainer relative flex w-full flex-col gap-x-6 gap-y-12 md:flex-row">
{/* Viewer */}
<div className="embed--DocumentViewer flex-1">
<PDFViewerLazy
<PDFViewer
envelopeItem={envelopeItems[0]}
token={token}
version="signed"
@ -300,11 +300,11 @@ export const EmbedSignDocumentV1ClientPage = ({
className="embed--DocumentWidgetContainer group/document-widget fixed bottom-8 left-0 z-50 h-fit max-h-[calc(100dvh-2rem)] w-full flex-shrink-0 px-6 md:sticky md:bottom-[unset] md:top-4 md:z-auto md:w-[350px] md:px-0"
data-expanded={isExpanded || undefined}
>
<div className="embed--DocumentWidget flex w-full flex-col rounded-xl border border-border bg-widget px-4 py-4 md:py-6">
<div className="embed--DocumentWidget border-border bg-widget flex w-full flex-col rounded-xl border px-4 py-4 md:py-6">
{/* Header */}
<div className="embed--DocumentWidgetHeader">
<div className="flex items-center justify-between gap-x-2">
<h3 className="text-xl font-semibold text-foreground md:text-2xl">
<h3 className="text-foreground text-xl font-semibold md:text-2xl">
{isAssistantMode ? (
<Trans>Assist with signing</Trans>
) : (
@ -315,18 +315,18 @@ export const EmbedSignDocumentV1ClientPage = ({
{isExpanded ? (
<Button
variant="outline"
className="h-8 w-8 bg-background p-0 md:hidden dark:bg-foreground"
className="bg-background dark:bg-foreground h-8 w-8 p-0 md:hidden"
onClick={() => setIsExpanded(false)}
>
<LucideChevronDown className="h-5 w-5 text-muted-foreground dark:text-background" />
<LucideChevronDown className="text-muted-foreground dark:text-background h-5 w-5" />
</Button>
) : pendingFields.length > 0 ? (
<Button
variant="outline"
className="h-8 w-8 bg-background p-0 md:hidden dark:bg-foreground"
className="bg-background dark:bg-foreground h-8 w-8 p-0 md:hidden"
onClick={() => setIsExpanded(true)}
>
<LucideChevronUp className="h-5 w-5 text-muted-foreground dark:text-background" />
<LucideChevronUp className="text-muted-foreground dark:text-background h-5 w-5" />
</Button>
) : (
<Button
@ -346,7 +346,7 @@ export const EmbedSignDocumentV1ClientPage = ({
</div>
<div className="embed--DocumentWidgetContent hidden group-data-[expanded]/document-widget:block md:block">
<p className="mt-2 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-2 text-sm">
{isAssistantMode ? (
<Trans>Help complete the document for other signers.</Trans>
) : (
@ -354,7 +354,7 @@ export const EmbedSignDocumentV1ClientPage = ({
)}
</p>
<hr className="mb-8 mt-4 border-border" />
<hr className="border-border mb-8 mt-4" />
</div>
{/* Form */}
@ -366,7 +366,7 @@ export const EmbedSignDocumentV1ClientPage = ({
<Trans>Signing for</Trans>
</Label>
<fieldset className="mt-2 rounded-2xl border border-border bg-white p-3 dark:bg-background">
<fieldset className="dark:bg-background border-border mt-2 rounded-2xl border bg-white p-3">
<RadioGroup
className="gap-0 space-y-3 shadow-none"
value={selectedSignerId?.toString()}
@ -377,7 +377,7 @@ export const EmbedSignDocumentV1ClientPage = ({
.map((r) => (
<div
key={`${assistantSignersId}-${r.id}`}
className="relative flex flex-col gap-4 rounded-lg border border-border bg-widget p-4"
className="bg-widget border-border relative flex flex-col gap-4 rounded-lg border p-4"
>
<div className="flex items-center justify-between">
<div className="flex items-center gap-3">
@ -395,15 +395,15 @@ export const EmbedSignDocumentV1ClientPage = ({
{r.name}
{r.id === recipient.id && (
<span className="ml-2 text-muted-foreground">
<span className="text-muted-foreground ml-2">
{_(msg`(You)`)}
</span>
)}
</Label>
<p className="text-xs text-muted-foreground">{r.email}</p>
<p className="text-muted-foreground text-xs">{r.email}</p>
</div>
</div>
<div className="text-xs leading-[inherit] text-muted-foreground">
<div className="text-muted-foreground text-xs leading-[inherit]">
{r.fields.length} {r.fields.length === 1 ? 'field' : 'fields'}
</div>
</div>
@ -424,7 +424,7 @@ export const EmbedSignDocumentV1ClientPage = ({
<Input
type="text"
id="full-name"
className="mt-2 bg-background"
className="bg-background mt-2"
disabled={isNameLocked}
value={fullName}
onChange={(e) => !isNameLocked && setFullName(e.target.value)}
@ -439,7 +439,7 @@ export const EmbedSignDocumentV1ClientPage = ({
<Input
type="email"
id="email"
className="mt-2 bg-background"
className="bg-background mt-2"
value={email}
disabled
/>
@ -507,7 +507,7 @@ export const EmbedSignDocumentV1ClientPage = ({
</div>
{!hidePoweredBy && (
<div className="fixed bottom-0 left-0 z-40 rounded-tr bg-primary px-2 py-1 text-xs font-medium text-primary-foreground opacity-60 hover:opacity-100">
<div className="bg-primary text-primary-foreground fixed bottom-0 left-0 z-40 rounded-tr px-2 py-1 text-xs font-medium opacity-60 hover:opacity-100">
<span>Powered by</span>
<BrandingLogo className="ml-2 inline-block h-[14px]" />
</div>

View File

@ -21,7 +21,7 @@ import { Button } from '@documenso/ui/primitives/button';
import { ElementVisible } from '@documenso/ui/primitives/element-visible';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import PDFViewer from '@documenso/ui/primitives/pdf-viewer';
import { SignaturePadDialog } from '@documenso/ui/primitives/signature-pad/signature-pad-dialog';
import { useToast } from '@documenso/ui/primitives/use-toast';
@ -177,14 +177,14 @@ export const MultiSignDocumentSigningView = ({
};
return (
<div className="min-h-screen overflow-hidden bg-background">
<div className="bg-background min-h-screen overflow-hidden">
<div id="document-field-portal-root" className="relative h-full w-full overflow-y-auto p-8">
{match({ isLoading, document })
.with({ isLoading: true }, () => (
<div className="flex min-h-[400px] w-full items-center justify-center">
<div className="flex flex-col items-center gap-4">
<Loader className="h-8 w-8 animate-spin text-primary" />
<p className="text-sm text-muted-foreground">
<Loader className="text-primary h-8 w-8 animate-spin" />
<p className="text-muted-foreground text-sm">
<Trans>Loading document...</Trans>
</p>
</div>
@ -192,7 +192,7 @@ export const MultiSignDocumentSigningView = ({
))
.with({ isLoading: false, document: undefined }, () => (
<div className="flex min-h-[400px] w-full items-center justify-center">
<p className="text-sm text-muted-foreground">
<p className="text-muted-foreground text-sm">
<Trans>Failed to load document</Trans>
</p>
</div>
@ -225,7 +225,7 @@ export const MultiSignDocumentSigningView = ({
'md:mx-auto md:max-w-2xl': document.status === DocumentStatus.COMPLETED,
})}
>
<PDFViewerLazy
<PDFViewer
envelopeItem={document.envelopeItems[0]}
token={token}
version="signed"
@ -243,23 +243,23 @@ export const MultiSignDocumentSigningView = ({
className="embed--DocumentWidgetContainer group/document-widget fixed bottom-8 left-0 z-50 h-fit max-h-[calc(100dvh-2rem)] w-full flex-shrink-0 px-6 md:sticky md:bottom-[unset] md:top-0 md:z-auto md:w-[350px] md:px-0"
data-expanded={isExpanded || undefined}
>
<div className="embed--DocumentWidget flex w-full flex-col rounded-xl border border-border bg-widget px-4 py-4 md:py-6">
<div className="embed--DocumentWidget border-border bg-widget flex w-full flex-col rounded-xl border px-4 py-4 md:py-6">
{/* Header */}
<div className="embed--DocumentWidgetHeader">
<div className="flex items-center justify-between gap-x-2">
<h3 className="text-xl font-semibold text-foreground md:text-2xl">
<h3 className="text-foreground text-xl font-semibold md:text-2xl">
<Trans>Sign document</Trans>
</h3>
<Button variant="outline" className="h-8 w-8 p-0 md:hidden">
{isExpanded ? (
<LucideChevronDown
className="h-5 w-5 text-muted-foreground"
className="text-muted-foreground h-5 w-5"
onClick={() => setIsExpanded(false)}
/>
) : (
<LucideChevronUp
className="h-5 w-5 text-muted-foreground"
className="text-muted-foreground h-5 w-5"
onClick={() => setIsExpanded(true)}
/>
)}
@ -268,11 +268,11 @@ export const MultiSignDocumentSigningView = ({
</div>
<div className="embed--DocumentWidgetContent hidden group-data-[expanded]/document-widget:block md:block">
<p className="mt-2 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-2 text-sm">
<Trans>Sign the document to complete the process.</Trans>
</p>
<hr className="mb-8 mt-4 border-border" />
<hr className="border-border mb-8 mt-4" />
</div>
{/* Form */}
@ -288,7 +288,7 @@ export const MultiSignDocumentSigningView = ({
<Input
type="text"
id="full-name"
className="mt-2 bg-background"
className="bg-background mt-2"
disabled={isNameLocked}
value={fullName}
onChange={(e) => !isNameLocked && setFullName(e.target.value)}
@ -303,7 +303,7 @@ export const MultiSignDocumentSigningView = ({
<Input
type="email"
id="email"
className="mt-2 bg-background"
className="bg-background mt-2"
value={email}
disabled
/>

View File

@ -42,7 +42,7 @@ import { useToast } from '@documenso/ui/primitives/use-toast';
import { ZCreateOrganisationFormSchema } from '../dialogs/organisation-create-dialog';
const MotionCard = motion.create(Card);
const MotionCard = motion(Card);
export type BillingPlansProps = {
plans: InternalClaimPlans;
@ -101,7 +101,7 @@ export const BillingPlans = ({ plans }: BillingPlansProps) => {
<CardContent className="flex h-full flex-col p-6">
<CardTitle>{price.product.name}</CardTitle>
<div className="mt-2 text-lg font-medium text-muted-foreground">
<div className="text-muted-foreground mt-2 text-lg font-medium">
{price.friendlyPrice + ' '}
<span className="text-xs">
{interval === 'monthlyPrice' ? (
@ -112,12 +112,12 @@ export const BillingPlans = ({ plans }: BillingPlansProps) => {
</span>
</div>
<div className="mt-1.5 text-sm text-muted-foreground">
<div className="text-muted-foreground mt-1.5 text-sm">
{price.product.description}
</div>
{price.product.features && price.product.features.length > 0 && (
<div className="mt-4 text-muted-foreground">
<div className="text-muted-foreground mt-4">
<div className="text-sm font-medium">Includes:</div>
<ul className="mt-1 divide-y text-sm">
@ -261,7 +261,7 @@ const BillingDialog = ({
<Building2Icon className="h-4 w-4" />
<Trans>Update current organisation</Trans>
</Label>
<p className="text-sm text-muted-foreground">
<p className="text-muted-foreground text-sm">
<Trans>
Upgrade <strong>{organisation.name}</strong> to {planName}
</Trans>
@ -276,7 +276,7 @@ const BillingDialog = ({
<PlusIcon className="h-4 w-4" />
<Trans>Create separate organisation</Trans>
</Label>
<p className="text-sm text-muted-foreground">
<p className="text-muted-foreground text-sm">
<Trans>
Create a new organisation with {planName} plan. Keep your current organisation
on it's current plan

View File

@ -13,7 +13,7 @@ import { trpc } from '@documenso/trpc/react';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { DocumentFlowFormContainer } from '@documenso/ui/primitives/document-flow/document-flow-root';
import type { DocumentFlowStep } from '@documenso/ui/primitives/document-flow/types';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { Stepper } from '@documenso/ui/primitives/stepper';
import { useToast } from '@documenso/ui/primitives/use-toast';
@ -151,7 +151,7 @@ export const DirectTemplatePageView = ({
gradient
>
<CardContent className="p-2">
<PDFViewerLazy
<PDFViewer
key={template.id}
envelopeItem={template.envelopeItems[0]}
token={directTemplateRecipient.token}

View File

@ -30,7 +30,7 @@ import { DocumentReadOnlyFields } from '@documenso/ui/components/document/docume
import { Button } from '@documenso/ui/primitives/button';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { ElementVisible } from '@documenso/ui/primitives/element-visible';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { DocumentSigningAttachmentsPopover } from '~/components/general/document-signing/document-signing-attachments-popover';
import { DocumentSigningAutoSign } from '~/components/general/document-signing/document-signing-auto-sign';
@ -187,7 +187,7 @@ export const DocumentSigningPageViewV1 = ({
<div className="mt-1.5 flex flex-wrap items-center justify-between gap-y-2 sm:mt-2.5 sm:gap-y-0">
<div className="max-w-[50ch]">
<span className="truncate text-muted-foreground" title={senderName}>
<span className="text-muted-foreground truncate" title={senderName}>
{senderName} {senderEmail}
</span>{' '}
<span className="text-muted-foreground">
@ -245,7 +245,7 @@ export const DocumentSigningPageViewV1 = ({
<div className="flex-1">
<Card className="rounded-xl before:rounded-xl" gradient>
<CardContent className="p-2">
<PDFViewerLazy
<PDFViewer
key={document.envelopeItems[0].id}
envelopeItem={document.envelopeItems[0]}
token={recipient.token}
@ -260,9 +260,9 @@ export const DocumentSigningPageViewV1 = ({
className="group/document-widget fixed bottom-6 left-0 z-50 h-fit max-h-[calc(100dvh-2rem)] w-full flex-shrink-0 px-4 md:sticky md:bottom-[unset] md:top-4 md:z-auto md:w-[350px] md:px-0"
data-expanded={isExpanded || undefined}
>
<div className="flex w-full flex-col rounded-xl border border-border bg-widget px-4 py-4 md:py-6">
<div className="border-border bg-widget flex w-full flex-col rounded-xl border px-4 py-4 md:py-6">
<div className="flex items-center justify-between gap-x-2">
<h3 className="text-xl font-semibold text-foreground md:text-2xl">
<h3 className="text-foreground text-xl font-semibold md:text-2xl">
{match(recipient.role)
.with(RecipientRole.VIEWER, () => <Trans>View Document</Trans>)
.with(RecipientRole.SIGNER, () => <Trans>Sign Document</Trans>)
@ -305,25 +305,25 @@ export const DocumentSigningPageViewV1 = ({
.with({ isExpanded: true }, () => (
<Button
variant="outline"
className="h-8 w-8 bg-background p-0 md:hidden dark:bg-foreground"
className="bg-background dark:bg-foreground h-8 w-8 p-0 md:hidden"
onClick={() => setIsExpanded(false)}
>
<LucideChevronDown className="h-5 w-5 text-muted-foreground dark:text-background" />
<LucideChevronDown className="text-muted-foreground dark:text-background h-5 w-5" />
</Button>
))
.otherwise(() => (
<Button
variant="outline"
className="h-8 w-8 bg-background p-0 md:hidden dark:bg-foreground"
className="bg-background dark:bg-foreground h-8 w-8 p-0 md:hidden"
onClick={() => setIsExpanded(true)}
>
<LucideChevronUp className="h-5 w-5 text-muted-foreground dark:text-background" />
<LucideChevronUp className="text-muted-foreground dark:text-background h-5 w-5" />
</Button>
))}
</div>
<div className="hidden group-data-[expanded]/document-widget:block md:block">
<p className="mt-2 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-2 text-sm">
{match(recipient.role)
.with(RecipientRole.VIEWER, () => (
<Trans>Please mark as viewed to complete.</Trans>
@ -340,7 +340,7 @@ export const DocumentSigningPageViewV1 = ({
.otherwise(() => null)}
</p>
<hr className="mb-8 mt-4 border-border" />
<hr className="border-border mb-8 mt-4" />
</div>
<div className="-mx-2 hidden px-2 group-data-[expanded]/document-widget:block md:block">

View File

@ -34,7 +34,7 @@ import { DocumentSigningRejectDialog } from './document-signing-reject-dialog';
import { useRequiredEnvelopeSigningContext } from './envelope-signing-provider';
const EnvelopeSignerPageRenderer = lazy(
async () => import('~/components/general/envelope-signing/envelope-signer-page-renderer'),
async () => import('../envelope-signing/envelope-signer-page-renderer'),
);
export const DocumentSigningPageViewV2 = () => {
@ -71,7 +71,7 @@ export const DocumentSigningPageViewV2 = () => {
}, [recipientFieldsRemaining, selectedAssistantRecipientFields, currentEnvelopeItem]);
return (
<div className="min-h-screen w-screen bg-gray-50 dark:bg-background">
<div className="dark:bg-background min-h-screen w-screen bg-gray-50">
<SignFieldEmailDialog.Root />
<SignFieldTextDialog.Root />
<SignFieldNumberDialog.Root />
@ -86,9 +86,9 @@ export const DocumentSigningPageViewV2 = () => {
{/* Main Content Area */}
<div className="flex h-[calc(100vh-4rem)] w-screen">
{/* Left Section - Step Navigation */}
<div className="embed--DocumentWidgetContainer hidden w-80 flex-shrink-0 flex-col overflow-y-auto border-r border-border bg-background py-4 lg:flex">
<div className="embed--DocumentWidgetContainer bg-background border-border hidden w-80 flex-shrink-0 flex-col overflow-y-auto border-r py-4 lg:flex">
<div className="px-4">
<h3 className="flex items-end justify-between text-sm font-semibold text-foreground">
<h3 className="text-foreground flex items-end justify-between text-sm font-semibold">
{match(recipient.role)
.with(RecipientRole.VIEWER, () => <Trans>View Document</Trans>)
.with(RecipientRole.SIGNER, () => <Trans>Sign Document</Trans>)
@ -96,7 +96,7 @@ export const DocumentSigningPageViewV2 = () => {
.with(RecipientRole.ASSISTANT, () => <Trans>Assist Document</Trans>)
.otherwise(() => null)}
<span className="ml-2 rounded border bg-muted/50 px-2 py-0.5 text-xs text-muted-foreground">
<span className="text-muted-foreground bg-muted/50 ml-2 rounded border px-2 py-0.5 text-xs">
<Plural
value={recipientFieldsRemaining.length}
one="1 Field Remaining"
@ -105,11 +105,11 @@ export const DocumentSigningPageViewV2 = () => {
</span>
</h3>
<div className="relative my-4 h-[4px] rounded-md bg-muted">
<div className="bg-muted relative my-4 h-[4px] rounded-md">
<motion.div
layout="size"
layoutId="document-flow-container-step"
className="absolute inset-y-0 left-0 bg-documenso"
className="bg-documenso absolute inset-y-0 left-0"
style={{
width: `${100 - (100 / requiredRecipientFields.length) * (recipientFieldsRemaining.length ?? 0)}%`,
}}
@ -126,7 +126,7 @@ export const DocumentSigningPageViewV2 = () => {
{/* Quick Actions. */}
{!isDirectTemplate && (
<div className="embed--Actions space-y-3 px-4">
<h4 className="text-sm font-semibold text-foreground">
<h4 className="text-foreground text-sm font-semibold">
<Trans>Actions</Trans>
</h4>
@ -173,7 +173,7 @@ export const DocumentSigningPageViewV2 = () => {
<Button
variant="ghost"
size="sm"
className="w-full justify-start hover:text-destructive"
className="hover:text-destructive w-full justify-start"
>
<BanIcon className="mr-2 h-4 w-4" />
<Trans>Reject Document</Trans>
@ -235,7 +235,7 @@ export const DocumentSigningPageViewV2 = () => {
/>
) : (
<div className="flex flex-col items-center justify-center py-32">
<p className="text-sm text-foreground">
<p className="text-foreground text-sm">
<Trans>No documents found</Trans>
</p>
</div>
@ -250,7 +250,7 @@ export const DocumentSigningPageViewV2 = () => {
<a
href="https://documenso.com"
target="_blank"
className="fixed bottom-0 right-0 z-40 hidden cursor-pointer rounded-tl bg-primary px-2 py-1 text-xs font-medium text-primary-foreground opacity-60 hover:opacity-100 lg:block"
className="bg-primary text-primary-foreground fixed bottom-0 right-0 z-40 hidden cursor-pointer rounded-tl px-2 py-1 text-xs font-medium opacity-60 hover:opacity-100 lg:block"
>
<span>Powered by</span>
<BrandingLogo className="ml-2 inline-block h-[14px]" />

View File

@ -1,4 +1,4 @@
import { lazy, useEffect, useState } from 'react';
import { useEffect, useState } from 'react';
import { Trans } from '@lingui/react/macro';
import { type DocumentData, DocumentStatus, type EnvelopeItem, EnvelopeType } from '@prisma/client';
@ -21,15 +21,12 @@ import {
DialogHeader,
DialogTitle,
} from '@documenso/ui/primitives/dialog';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { EnvelopeDownloadDialog } from '~/components/dialogs/envelope-download-dialog';
import { EnvelopeRendererFileSelector } from '../envelope-editor/envelope-file-selector';
const EnvelopeGenericPageRenderer = lazy(
async () => import('~/components/general/envelope-editor/envelope-generic-page-renderer'),
);
import EnvelopeGenericPageRenderer from '../envelope-editor/envelope-generic-page-renderer';
export type DocumentCertificateQRViewProps = {
documentId: number;
@ -123,7 +120,7 @@ export const DocumentCertificateQRView = ({
<div className="flex w-full flex-col justify-between gap-4 md:flex-row md:items-end">
<div className="space-y-1">
<h1 className="text-xl font-medium">{title}</h1>
<div className="flex flex-col gap-0.5 text-sm text-muted-foreground">
<div className="text-muted-foreground flex flex-col gap-0.5 text-sm">
<p>
<Trans>{recipientCount} recipients</Trans>
</p>
@ -149,7 +146,7 @@ export const DocumentCertificateQRView = ({
</div>
<div className="mt-12 w-full">
<PDFViewerLazy
<PDFViewer
key={envelopeItems[0].id}
envelopeItem={envelopeItems[0]}
token={token}
@ -182,7 +179,7 @@ const DocumentCertificateQrV2 = ({
<div className="flex w-full flex-col justify-between gap-4 md:flex-row md:items-end">
<div className="space-y-1">
<h1 className="text-xl font-medium">{title}</h1>
<div className="flex flex-col gap-0.5 text-sm text-muted-foreground">
<div className="text-muted-foreground flex flex-col gap-0.5 text-sm">
<p>
<Trans>{recipientCount} recipients</Trans>
</p>

View File

@ -27,7 +27,7 @@ import { AddSubjectFormPartial } from '@documenso/ui/primitives/document-flow/ad
import type { TAddSubjectFormSchema } from '@documenso/ui/primitives/document-flow/add-subject.types';
import { DocumentFlowFormContainer } from '@documenso/ui/primitives/document-flow/document-flow-root';
import type { DocumentFlowStep } from '@documenso/ui/primitives/document-flow/types';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { Stepper } from '@documenso/ui/primitives/stepper';
import { useToast } from '@documenso/ui/primitives/use-toast';
@ -440,7 +440,7 @@ export const DocumentEditForm = ({
gradient
>
<CardContent className="p-2">
<PDFViewerLazy
<PDFViewer
key={document.envelopeItems[0].id}
envelopeItem={document.envelopeItems[0]}
token={undefined}

View File

@ -47,7 +47,7 @@ import { EnvelopeRendererFileSelector } from './envelope-file-selector';
import { EnvelopeRecipientSelector } from './envelope-recipient-selector';
const EnvelopeEditorFieldsPageRenderer = lazy(
async () => import('~/components/general/envelope-editor/envelope-editor-fields-page-renderer'),
async () => import('./envelope-editor-fields-page-renderer'),
);
const FieldSettingsTypeTranslations: Record<FieldType, MessageDescriptor> = {
@ -119,7 +119,7 @@ export const EnvelopeEditorFieldsPage = () => {
{envelope.recipients.length === 0 && (
<Alert
variant="neutral"
className="mb-4 flex max-w-[800px] flex-row items-center justify-between space-y-0 rounded-sm border border-border bg-background"
className="border-border bg-background mb-4 flex max-w-[800px] flex-row items-center justify-between space-y-0 rounded-sm border"
>
<div className="flex flex-col gap-1">
<AlertTitle>
@ -145,11 +145,11 @@ export const EnvelopeEditorFieldsPage = () => {
/>
) : (
<div className="flex flex-col items-center justify-center py-32">
<FileTextIcon className="h-10 w-10 text-muted-foreground" />
<p className="mt-1 text-sm text-foreground">
<FileTextIcon className="text-muted-foreground h-10 w-10" />
<p className="text-foreground mt-1 text-sm">
<Trans>No documents found</Trans>
</p>
<p className="mt-1 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-1 text-sm">
<Trans>Please upload a document to continue</Trans>
</p>
</div>
@ -159,10 +159,10 @@ export const EnvelopeEditorFieldsPage = () => {
{/* Right Section - Form Fields Panel */}
{currentEnvelopeItem && envelope.recipients.length > 0 && (
<div className="sticky top-0 h-full w-80 flex-shrink-0 overflow-y-auto border-l border-border bg-background py-4">
<div className="bg-background border-border sticky top-0 h-full w-80 flex-shrink-0 overflow-y-auto border-l py-4">
{/* Recipient selector section. */}
<section className="px-4">
<h3 className="mb-2 text-sm font-semibold text-foreground">
<h3 className="text-foreground mb-2 text-sm font-semibold">
<Trans>Selected Recipient</Trans>
</h3>
@ -194,7 +194,7 @@ export const EnvelopeEditorFieldsPage = () => {
{/* Add fields section. */}
<section className="px-4">
<h3 className="mb-2 text-sm font-semibold text-foreground">
<h3 className="text-foreground mb-2 text-sm font-semibold">
<Trans>Add Fields</Trans>
</h3>
@ -213,25 +213,25 @@ export const EnvelopeEditorFieldsPage = () => {
{searchParams.get('devmode') && (
<>
<div className="px-4">
<h3 className="mb-3 text-sm font-semibold text-foreground">
<h3 className="text-foreground mb-3 text-sm font-semibold">
<Trans>Developer Mode</Trans>
</h3>
<div className="space-y-2 rounded-md border border-border bg-muted/50 p-3 text-sm text-foreground">
<div className="bg-muted/50 border-border text-foreground space-y-2 rounded-md border p-3 text-sm">
<p>
<span className="min-w-12 text-muted-foreground">Pos X:&nbsp;</span>
<span className="text-muted-foreground min-w-12">Pos X:&nbsp;</span>
{selectedField.positionX.toFixed(2)}
</p>
<p>
<span className="min-w-12 text-muted-foreground">Pos Y:&nbsp;</span>
<span className="text-muted-foreground min-w-12">Pos Y:&nbsp;</span>
{selectedField.positionY.toFixed(2)}
</p>
<p>
<span className="min-w-12 text-muted-foreground">Width:&nbsp;</span>
<span className="text-muted-foreground min-w-12">Width:&nbsp;</span>
{selectedField.width.toFixed(2)}
</p>
<p>
<span className="min-w-12 text-muted-foreground">Height:&nbsp;</span>
<span className="text-muted-foreground min-w-12">Height:&nbsp;</span>
{selectedField.height.toFixed(2)}
</p>
</div>
@ -241,7 +241,7 @@ export const EnvelopeEditorFieldsPage = () => {
</>
)}
<div className="px-4 [&_label]:text-xs [&_label]:text-foreground/70">
<div className="[&_label]:text-foreground/70 px-4 [&_label]:text-xs">
<h3 className="text-sm font-semibold">
{t(FieldSettingsTypeTranslations[selectedField.type])}
</h3>

View File

@ -23,9 +23,7 @@ import { Separator } from '@documenso/ui/primitives/separator';
import { EnvelopeRendererFileSelector } from './envelope-file-selector';
const EnvelopeGenericPageRenderer = lazy(
async () => import('~/components/general/envelope-editor/envelope-generic-page-renderer'),
);
const EnvelopeGenericPageRenderer = lazy(async () => import('./envelope-generic-page-renderer'));
// Todo: Envelopes - Dynamically import faker
export const EnvelopeEditorPreviewPage = () => {
@ -234,11 +232,11 @@ export const EnvelopeEditorPreviewPage = () => {
/>
) : (
<div className="flex flex-col items-center justify-center py-32">
<FileTextIcon className="h-10 w-10 text-muted-foreground" />
<p className="mt-1 text-sm text-foreground">
<FileTextIcon className="text-muted-foreground h-10 w-10" />
<p className="text-foreground mt-1 text-sm">
<Trans>No documents found</Trans>
</p>
<p className="mt-1 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-1 text-sm">
<Trans>Please upload a document to continue</Trans>
</p>
</div>

View File

@ -171,7 +171,7 @@ export default function EnvelopeSignerPageRenderer() {
const handleFieldGroupClick = (e: KonvaEventObject<Event>) => {
const currentTarget = e.currentTarget as Konva.Group;
const target = e.target as Konva.Shape;
const target = e.target;
const { width: fieldWidth, height: fieldHeight } = fieldGroup.getClientRect();

View File

@ -18,7 +18,7 @@ import { cn } from '@documenso/ui/lib/utils';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { DocumentFlowFormContainer } from '@documenso/ui/primitives/document-flow/document-flow-root';
import type { DocumentFlowStep } from '@documenso/ui/primitives/document-flow/types';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { Stepper } from '@documenso/ui/primitives/stepper';
import { AddTemplateFieldsFormPartial } from '@documenso/ui/primitives/template-flow/add-template-fields';
import type { TAddTemplateFieldsFormSchema } from '@documenso/ui/primitives/template-flow/add-template-fields.types';
@ -312,7 +312,7 @@ export const TemplateEditForm = ({
gradient
>
<CardContent className="p-2">
<PDFViewerLazy
<PDFViewer
key={template.envelopeItems[0].id}
envelopeItem={template.envelopeItems[0]}
token={undefined}

View File

@ -1,198 +0,0 @@
import { useMemo, useState } from 'react';
import { Trans, useLingui } from '@lingui/react/macro';
import { WebhookCallStatus } from '@prisma/client';
import { RotateCwIcon } from 'lucide-react';
import { createCallable } from 'react-call';
import { toFriendlyWebhookEventName } from '@documenso/lib/universal/webhook/to-friendly-webhook-event-name';
import { trpc } from '@documenso/trpc/react';
import type { TFindWebhookCallsResponse } from '@documenso/trpc/server/webhook-router/find-webhook-calls.types';
import { CopyTextButton } from '@documenso/ui/components/common/copy-text-button';
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
import { Sheet, SheetContent, SheetTitle } from '@documenso/ui/primitives/sheet';
import { useToast } from '@documenso/ui/primitives/use-toast';
export type WebhookLogsSheetProps = {
webhookCall: TFindWebhookCallsResponse['data'][number];
};
export const WebhookLogsSheet = createCallable<WebhookLogsSheetProps, string | null>(
({ call, webhookCall: initialWebhookCall }) => {
const { t } = useLingui();
const { toast } = useToast();
const [webhookCall, setWebhookCall] = useState(initialWebhookCall);
const [activeTab, setActiveTab] = useState<'request' | 'response'>('request');
const { mutateAsync: resendWebhookCall, isPending: isResending } =
trpc.webhook.calls.resend.useMutation({
onSuccess: (result) => {
toast({ title: t`Webhook successfully sent` });
setWebhookCall(result);
},
onError: () => {
toast({ title: t`Something went wrong` });
},
});
const generalWebhookDetails = useMemo(() => {
return [
{
header: t`Status`,
value: webhookCall.status === WebhookCallStatus.SUCCESS ? t`Success` : t`Failed`,
},
{
header: t`Event`,
value: toFriendlyWebhookEventName(webhookCall.event),
},
{
header: t`Sent`,
value: new Date(webhookCall.createdAt).toLocaleString(),
},
{
header: t`Response Code`,
value: webhookCall.responseCode,
},
{
header: t`Destination`,
value: webhookCall.url,
},
];
}, [webhookCall]);
return (
<Sheet open={true} onOpenChange={(value) => (!value ? call.end(null) : null)}>
<SheetContent position="right" size="lg" className="max-w-2xl overflow-y-auto">
<SheetTitle>
<h2 className="text-lg font-semibold">
<Trans>Webhook Details</Trans>
</h2>
<p className="text-muted-foreground font-mono text-xs">{webhookCall.id}</p>
</SheetTitle>
{/* Content */}
<div className="flex-1 overflow-y-auto">
<div className="mt-6">
<div className="flex items-end justify-between">
<h4 className="text-muted-foreground mb-3 text-xs font-semibold uppercase tracking-wider">
<Trans>Details</Trans>
</h4>
<Button
onClick={() =>
resendWebhookCall({
webhookId: webhookCall.webhookId,
webhookCallId: webhookCall.id,
})
}
tabIndex={-1}
loading={isResending}
size="sm"
className="mb-2"
>
{!isResending && <RotateCwIcon className="mr-2 h-3.5 w-3.5" />}
<Trans>Resend</Trans>
</Button>
</div>
<div className="border-border overflow-hidden rounded-lg border">
<table className="w-full text-left text-sm">
<tbody className="divide-border bg-muted/30 divide-y">
{generalWebhookDetails.map(({ header, value }, index) => (
<tr key={index}>
<td className="text-muted-foreground border-border w-1/3 border-r px-4 py-2 font-mono text-xs">
{header}
</td>
<td className="text-foreground break-all px-4 py-2 font-mono text-xs">
{value}
</td>
</tr>
))}
</tbody>
</table>
</div>
</div>
{/* Payload Tabs */}
<div className="py-6">
<div className="border-border mb-4 flex items-center gap-4 border-b">
<button
onClick={() => setActiveTab('request')}
className={cn(
'relative pb-2 text-sm font-medium transition-colors',
activeTab === 'request'
? 'text-foreground after:bg-primary after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5'
: 'text-muted-foreground hover:text-foreground',
)}
>
<Trans>Request</Trans>
</button>
<button
onClick={() => setActiveTab('response')}
className={cn(
'relative pb-2 text-sm font-medium transition-colors',
activeTab === 'response'
? 'text-foreground after:bg-primary after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5'
: 'text-muted-foreground hover:text-foreground',
)}
>
<Trans>Response</Trans>
</button>
</div>
<div className="group relative">
<div className="absolute right-2 top-2 opacity-0 transition-opacity group-hover:opacity-100">
<CopyTextButton
value={JSON.stringify(
activeTab === 'request' ? webhookCall.requestBody : webhookCall.responseBody,
null,
2,
)}
onCopySuccess={() => toast({ title: t`Copied to clipboard` })}
/>
</div>
<pre className="bg-muted/50 border-border text-foreground overflow-x-auto rounded-lg border p-4 font-mono text-xs leading-relaxed">
{JSON.stringify(
activeTab === 'request' ? webhookCall.requestBody : webhookCall.responseBody,
null,
2,
)}
</pre>
</div>
{activeTab === 'response' && (
<div className="mt-6">
<h4 className="text-muted-foreground mb-3 text-xs font-semibold uppercase tracking-wider">
<Trans>Response Headers</Trans>
</h4>
<div className="border-border overflow-hidden rounded-lg border">
<table className="w-full text-left text-sm">
<tbody className="divide-border bg-muted/30 divide-y">
{Object.entries(webhookCall.responseHeaders as Record<string, string>).map(
([key, value]) => (
<tr key={key}>
<td className="text-muted-foreground border-border w-1/3 border-r px-4 py-2 font-mono text-xs">
{key}
</td>
<td className="text-foreground break-all px-4 py-2 font-mono text-xs">
{value as string}
</td>
</tr>
),
)}
</tbody>
</table>
</div>
</div>
)}
</div>
</div>
</SheetContent>
</Sheet>
);
},
);

View File

@ -1,3 +1,6 @@
import { useEffect } from 'react';
import Plausible from 'plausible-tracker';
import {
Links,
Meta,
@ -14,7 +17,7 @@ import { PreventFlashOnWrongTheme, ThemeProvider, useTheme } from 'remix-themes'
import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session';
import { SessionProvider } from '@documenso/lib/client-only/providers/session';
import { APP_I18N_OPTIONS, type SupportedLanguageCodes } from '@documenso/lib/constants/i18n';
import { createPublicEnv } from '@documenso/lib/utils/env';
import { createPublicEnv, env } from '@documenso/lib/utils/env';
import { extractLocaleData } from '@documenso/lib/utils/i18n';
import { TrpcProvider } from '@documenso/trpc/react';
import { getOrganisationSession } from '@documenso/trpc/server/organisation-router/get-organisation-session';
@ -28,6 +31,11 @@ import { langCookie } from './storage/lang-cookie.server';
import { themeSessionResolver } from './storage/theme-session.server';
import { appMetaTags } from './utils/meta';
const { trackPageview } = Plausible({
domain: 'documenso.com',
trackLocalhost: false,
});
export const links: Route.LinksFunction = () => [{ rel: 'stylesheet', href: stylesheet }];
export function meta() {
@ -84,6 +92,12 @@ export function Layout({ children }: { children: React.ReactNode }) {
const location = useLocation();
useEffect(() => {
if (env('NODE_ENV') === 'production') {
trackPageview();
}
}, [location.pathname]);
return (
<ThemeProvider specifiedTheme={theme} themeAction="/api/theme">
<LayoutContent>{children}</LayoutContent>

View File

@ -1,10 +1,6 @@
import { Trans } from '@lingui/react/macro';
import { Link } from 'react-router';
import { getOrganisationDetailedInsights } from '@documenso/lib/server-only/admin/get-organisation-detailed-insights';
import type { DateRange } from '@documenso/lib/types/search-params';
import { getAdminOrganisation } from '@documenso/trpc/server/admin-router/get-admin-organisation';
import { Button } from '@documenso/ui/primitives/button';
import { OrganisationInsightsTable } from '~/components/tables/organisation-insights-table';
@ -42,17 +38,12 @@ export async function loader({ params, request }: Route.LoaderArgs) {
}
export default function OrganisationInsights({ loaderData }: Route.ComponentProps) {
const { insights, page, perPage, dateRange, view, organisationName, organisationId } = loaderData;
const { insights, page, perPage, dateRange, view, organisationName } = loaderData;
return (
<div>
<div className="flex items-center justify-between">
<h2 className="text-4xl font-semibold">{organisationName}</h2>
<Button variant="outline" asChild>
<Link to={`/admin/organisations/${organisationId}`}>
<Trans>Manage organisation</Trans>
</Link>
</Button>
</div>
<div className="mt-8">
<OrganisationInsightsTable

View File

@ -162,13 +162,7 @@ export default function OrganisationGroupSettingsPage({ params }: Route.Componen
<SettingsHeader
title={t`Manage organisation`}
subtitle={t`Manage the ${organisation.name} organisation`}
>
<Button variant="outline" asChild>
<Link to={`/admin/organisation-insights/${organisationId}`}>
<Trans>View insights</Trans>
</Link>
</Button>
</SettingsHeader>
/>
<GenericOrganisationAdminForm organisation={organisation} />

View File

@ -1,4 +1,4 @@
import WebhookPage, { meta } from '../../t.$teamUrl+/settings.webhooks.$id._index';
import WebhookPage, { meta } from '../../t.$teamUrl+/settings.webhooks.$id';
export { meta };

View File

@ -1,5 +1,3 @@
import { lazy } from 'react';
import { msg } from '@lingui/core/macro';
import { Plural, Trans, useLingui } from '@lingui/react/macro';
import { DocumentStatus } from '@prisma/client';
@ -21,7 +19,7 @@ import { cn } from '@documenso/ui/lib/utils';
import { Badge } from '@documenso/ui/primitives/badge';
import { Button } from '@documenso/ui/primitives/button';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { Spinner } from '@documenso/ui/primitives/spinner';
import { DocumentPageViewButton } from '~/components/general/document/document-page-view-button';
@ -35,16 +33,13 @@ import {
FRIENDLY_STATUS_MAP,
} from '~/components/general/document/document-status';
import { EnvelopeRendererFileSelector } from '~/components/general/envelope-editor/envelope-file-selector';
import EnvelopeGenericPageRenderer from '~/components/general/envelope-editor/envelope-generic-page-renderer';
import { GenericErrorLayout } from '~/components/general/generic-error-layout';
import { StackAvatarsWithTooltip } from '~/components/general/stack-avatars-with-tooltip';
import { useCurrentTeam } from '~/providers/team';
import type { Route } from './+types/documents.$id._index';
const EnvelopeGenericPageRenderer = lazy(
async () => import('~/components/general/envelope-editor/envelope-generic-page-renderer'),
);
export default function DocumentPage({ params }: Route.ComponentProps) {
const { t } = useLingui();
const { user } = useSession();
@ -61,7 +56,7 @@ export default function DocumentPage({ params }: Route.ComponentProps) {
if (isLoadingEnvelope) {
return (
<div className="flex w-screen flex-col items-center justify-center gap-2 py-64 text-foreground">
<div className="text-foreground flex w-screen flex-col items-center justify-center gap-2 py-64">
<Spinner />
<Trans>Loading</Trans>
</div>
@ -122,7 +117,7 @@ export default function DocumentPage({ params }: Route.ComponentProps) {
/>
{envelope.recipients.length > 0 && (
<div className="flex items-center text-muted-foreground">
<div className="text-muted-foreground flex items-center">
<Users2 className="mr-2 h-5 w-5" />
<StackAvatarsWithTooltip
@ -193,7 +188,7 @@ export default function DocumentPage({ params }: Route.ComponentProps) {
/>
)}
<PDFViewerLazy
<PDFViewer
envelopeItem={envelope.envelopeItems[0]}
token={undefined}
key={envelope.envelopeItems[0].id}
@ -207,16 +202,16 @@ export default function DocumentPage({ params }: Route.ComponentProps) {
className={cn('col-span-12 lg:col-span-6 xl:col-span-5', isMultiEnvelopeItem && 'mt-20')}
>
<div className="space-y-6">
<section className="flex flex-col rounded-xl border border-border bg-widget pb-4 pt-6">
<section className="border-border bg-widget flex flex-col rounded-xl border pb-4 pt-6">
<div className="flex flex-row items-center justify-between px-4">
<h3 className="text-2xl font-semibold text-foreground">
<h3 className="text-foreground text-2xl font-semibold">
{t(FRIENDLY_STATUS_MAP[envelope.status].labelExtended)}
</h3>
<DocumentPageViewDropdown envelope={envelope} />
</div>
<p className="mt-2 px-4 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-2 px-4 text-sm">
{match(envelope.status)
.with(DocumentStatus.COMPLETED, () => (
<Trans>This document has been signed by all recipients</Trans>

View File

@ -1,392 +0,0 @@
import { useMemo, useState } from 'react';
import { useEffect } from 'react';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react/macro';
import { Trans } from '@lingui/react/macro';
import { WebhookCallStatus, WebhookTriggerEvents } from '@prisma/client';
import {
CheckCircle2Icon,
ChevronRightIcon,
PencilIcon,
TerminalIcon,
XCircleIcon,
} from 'lucide-react';
import { useNavigate } from 'react-router';
import { useLocation, useSearchParams } from 'react-router';
import { Link } from 'react-router';
import { z } from 'zod';
import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value';
import { useIsMounted } from '@documenso/lib/client-only/hooks/use-is-mounted';
import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params';
import { ZUrlSearchParamsSchema } from '@documenso/lib/types/search-params';
import { toFriendlyWebhookEventName } from '@documenso/lib/universal/webhook/to-friendly-webhook-event-name';
import { trpc } from '@documenso/trpc/react';
import { Badge } from '@documenso/ui/primitives/badge';
import { Button } from '@documenso/ui/primitives/button';
import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table';
import { DataTable } from '@documenso/ui/primitives/data-table';
import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination';
import { Input } from '@documenso/ui/primitives/input';
import { MultiSelectCombobox } from '@documenso/ui/primitives/multi-select-combobox';
import { Skeleton } from '@documenso/ui/primitives/skeleton';
import { SpinnerBox } from '@documenso/ui/primitives/spinner';
import { TableCell } from '@documenso/ui/primitives/table';
import { Tabs, TabsList, TabsTrigger } from '@documenso/ui/primitives/tabs';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { WebhookEditDialog } from '~/components/dialogs/webhook-edit-dialog';
import { WebhookTestDialog } from '~/components/dialogs/webhook-test-dialog';
import { GenericErrorLayout } from '~/components/general/generic-error-layout';
import { SettingsHeader } from '~/components/general/settings-header';
import { WebhookLogsSheet } from '~/components/general/webhook-logs-sheet';
import { useCurrentTeam } from '~/providers/team';
import { appMetaTags } from '~/utils/meta';
import type { Route } from './+types/settings.webhooks.$id._index';
const WebhookSearchParamsSchema = ZUrlSearchParamsSchema.extend({
status: z.nativeEnum(WebhookCallStatus).optional(),
events: z.preprocess(
(value) => (typeof value === 'string' && value.length > 0 ? value.split(',') : []),
z.array(z.nativeEnum(WebhookTriggerEvents)).optional(),
),
});
export function meta() {
return appMetaTags('Webhooks');
}
export default function WebhookPage({ params }: Route.ComponentProps) {
const { t, i18n } = useLingui();
const { toast } = useToast();
const { pathname } = useLocation();
const [searchParams, setSearchParams] = useSearchParams();
const updateSearchParams = useUpdateSearchParams();
const team = useCurrentTeam();
const [searchQuery, setSearchQuery] = useState(() => searchParams?.get('query') ?? '');
const debouncedSearchQuery = useDebouncedValue(searchQuery, 500);
const parsedSearchParams = WebhookSearchParamsSchema.parse(
Object.fromEntries(searchParams ?? []),
);
const { data: webhook, isLoading } = trpc.webhook.getWebhookById.useQuery(
{
id: params.id,
},
{ enabled: !!params.id, retry: false },
);
const {
data,
isLoading: isLogsLoading,
isLoadingError: isLogsLoadingError,
} = trpc.webhook.calls.find.useQuery({
webhookId: params.id,
page: parsedSearchParams.page,
perPage: parsedSearchParams.perPage,
status: parsedSearchParams.status,
events: parsedSearchParams.events,
query: parsedSearchParams.query,
});
/**
* Handle debouncing the search query.
*/
useEffect(() => {
const params = new URLSearchParams(searchParams?.toString());
params.set('query', debouncedSearchQuery);
if (debouncedSearchQuery === '') {
params.delete('query');
}
// If nothing to change then do nothing.
if (params.toString() === searchParams?.toString()) {
return;
}
setSearchParams(params);
}, [debouncedSearchQuery, pathname, searchParams]);
const onPaginationChange = (page: number, perPage: number) => {
updateSearchParams({
page,
perPage,
});
};
const results = data ?? {
data: [],
perPage: 10,
currentPage: 1,
totalPages: 1,
};
const columns = useMemo(() => {
return [
{
header: t`Status`,
accessorKey: 'status',
cell: ({ row }) => (
<Badge variant={row.original.status === 'SUCCESS' ? 'default' : 'destructive'}>
{row.original.status === 'SUCCESS' ? (
<CheckCircle2Icon className="mr-2 h-4 w-4" />
) : (
<XCircleIcon className="mr-2 h-4 w-4" />
)}
{row.original.responseCode}
</Badge>
),
},
{
header: t`Event`,
accessorKey: 'event',
cell: ({ row }) => (
<div>
<p className="text-foreground text-sm font-semibold">
{toFriendlyWebhookEventName(row.original.event)}
</p>
<p className="text-muted-foreground text-xs">{row.original.id}</p>
</div>
),
},
{
header: t`Sent`,
accessorKey: 'createdAt',
cell: ({ row }) => (
<div className="flex items-center justify-between gap-2">
<p>
{i18n.date(row.original.createdAt, {
timeStyle: 'short',
dateStyle: 'short',
})}
</p>
<div className="data-state-selected:block opacity-0 transition-opacity group-hover:opacity-100">
<ChevronRightIcon className="h-4 w-4" />
</div>
</div>
),
},
] satisfies DataTableColumnDef<(typeof results)['data'][number]>[];
}, []);
const getTabHref = (value: string) => {
const params = new URLSearchParams(searchParams);
params.set('status', value);
if (value === '') {
params.delete('status');
}
if (params.has('page')) {
params.delete('page');
}
let path = pathname;
if (params.toString()) {
path += `?${params.toString()}`;
}
return path;
};
if (isLoading) {
return <SpinnerBox className="py-32" />;
}
// Todo: Update UI, currently out of place.
if (!webhook) {
return (
<GenericErrorLayout
errorCode={404}
errorCodeMap={{
404: {
heading: msg`Webhook not found`,
subHeading: msg`404 Webhook not found`,
message: msg`The webhook you are looking for may have been removed, renamed or may have never existed.`,
},
}}
primaryButton={
<Button asChild>
<Link to={`/t/${team.url}/settings/webhooks`}>
<Trans>Go back</Trans>
</Link>
</Button>
}
secondaryButton={null}
/>
);
}
return (
<div>
<SettingsHeader
title={
<div className="flex items-center gap-2">
<p>
<Trans>Webhook</Trans>
</p>
<Badge variant={webhook.enabled ? 'default' : 'secondary'}>
{webhook.enabled ? <Trans>Enabled</Trans> : <Trans>Disabled</Trans>}
</Badge>
</div>
}
subtitle={webhook.webhookUrl}
>
<div className="flex gap-2">
<WebhookTestDialog webhook={webhook}>
<Button variant="outline">
<TerminalIcon className="mr-2 h-4 w-4" />
<Trans>Test</Trans>
</Button>
</WebhookTestDialog>
<WebhookEditDialog
webhook={webhook}
trigger={
<Button>
<PencilIcon className="mr-2 h-4 w-4" />
<Trans>Edit</Trans>
</Button>
}
/>
</div>
</SettingsHeader>
<div className="mt-4">
<div className="mb-4 flex flex-row items-center justify-between gap-x-4">
<Input
defaultValue={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
placeholder={t`Search by ID`}
/>
<WebhookEventCombobox />
<Tabs value={parsedSearchParams.status || ''} className="flex-shrink-0">
<TabsList>
<TabsTrigger className="hover:text-foreground min-w-[60px]" value="" asChild>
<Link to={getTabHref('')}>
<Trans>All</Trans>
</Link>
</TabsTrigger>
<TabsTrigger className="hover:text-foreground min-w-[60px]" value="SUCCESS" asChild>
<Link to={getTabHref(WebhookCallStatus.SUCCESS)}>
<Trans>Success</Trans>
</Link>
</TabsTrigger>
<TabsTrigger className="hover:text-foreground min-w-[60px]" value="FAILED" asChild>
<Link to={getTabHref(WebhookCallStatus.FAILED)}>
<Trans>Failed</Trans>
</Link>
</TabsTrigger>
</TabsList>
</Tabs>
</div>
<DataTable
columns={columns}
data={results.data}
perPage={results.perPage}
currentPage={results.currentPage}
totalPages={results.totalPages}
onPaginationChange={onPaginationChange}
onRowClick={(row) =>
WebhookLogsSheet.call({
webhookCall: row,
})
}
rowClassName="cursor-pointer group"
error={{
enable: isLogsLoadingError,
}}
skeleton={{
enable: isLogsLoading,
rows: 3,
component: (
<>
<TableCell>
<Skeleton className="h-4 w-12 rounded-full" />
</TableCell>
<TableCell>
<Skeleton className="h-4 w-12 rounded-full" />
</TableCell>
<TableCell>
<Skeleton className="h-4 w-12 rounded-full" />
</TableCell>
</>
),
}}
>
{(table) =>
results.totalPages > 1 && (
<DataTablePagination additionalInformation="VisibleCount" table={table} />
)
}
</DataTable>
</div>
<WebhookLogsSheet.Root />
</div>
);
}
const WebhookEventCombobox = () => {
const { pathname } = useLocation();
const [searchParams] = useSearchParams();
const navigate = useNavigate();
const isMounted = useIsMounted();
const events = (searchParams?.get('events') ?? '').split(',').filter((value) => value !== '');
const comboBoxOptions = Object.values(WebhookTriggerEvents).map((event) => ({
label: toFriendlyWebhookEventName(event),
value: event,
}));
const onChange = (newEvents: string[]) => {
if (!pathname) {
return;
}
const params = new URLSearchParams(searchParams?.toString());
params.set('events', newEvents.join(','));
if (newEvents.length === 0) {
params.delete('events');
}
void navigate(`${pathname}?${params.toString()}`, { preventScrollReset: true });
};
return (
<MultiSelectCombobox
emptySelectionPlaceholder={
<p className="text-muted-foreground font-normal">
<Trans>
<span className="text-muted-foreground/70">Events:</span> All
</Trans>
</p>
}
enableClearAllButton={true}
inputPlaceholder={msg`Search`}
loading={!isMounted}
options={comboBoxOptions}
selectedValues={events}
onChange={onChange}
/>
);
};

View File

@ -0,0 +1,263 @@
import { zodResolver } from '@hookform/resolvers/zod';
import { msg } from '@lingui/core/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import { useForm } from 'react-hook-form';
import { useRevalidator } from 'react-router';
import { Link } from 'react-router';
import type { z } from 'zod';
import { trpc } from '@documenso/trpc/react';
import { ZEditWebhookRequestSchema } from '@documenso/trpc/server/webhook-router/schema';
import { Alert, AlertDescription, AlertTitle } from '@documenso/ui/primitives/alert';
import { Button } from '@documenso/ui/primitives/button';
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from '@documenso/ui/primitives/form/form';
import { Input } from '@documenso/ui/primitives/input';
import { PasswordInput } from '@documenso/ui/primitives/password-input';
import { SpinnerBox } from '@documenso/ui/primitives/spinner';
import { Switch } from '@documenso/ui/primitives/switch';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { WebhookTestDialog } from '~/components/dialogs/webhook-test-dialog';
import { GenericErrorLayout } from '~/components/general/generic-error-layout';
import { SettingsHeader } from '~/components/general/settings-header';
import { WebhookMultiSelectCombobox } from '~/components/general/webhook-multiselect-combobox';
import { useCurrentTeam } from '~/providers/team';
import { appMetaTags } from '~/utils/meta';
import type { Route } from './+types/settings.webhooks.$id';
const ZEditWebhookFormSchema = ZEditWebhookRequestSchema.omit({ id: true, teamId: true });
type TEditWebhookFormSchema = z.infer<typeof ZEditWebhookFormSchema>;
export function meta() {
return appMetaTags('Webhooks');
}
export default function WebhookPage({ params }: Route.ComponentProps) {
const { _ } = useLingui();
const { toast } = useToast();
const { revalidate } = useRevalidator();
const team = useCurrentTeam();
const { data: webhook, isLoading } = trpc.webhook.getWebhookById.useQuery(
{
id: params.id,
teamId: team.id,
},
{ enabled: !!params.id && !!team.id },
);
const { mutateAsync: updateWebhook } = trpc.webhook.editWebhook.useMutation();
const form = useForm<TEditWebhookFormSchema>({
resolver: zodResolver(ZEditWebhookFormSchema),
values: {
webhookUrl: webhook?.webhookUrl ?? '',
eventTriggers: webhook?.eventTriggers ?? [],
secret: webhook?.secret ?? '',
enabled: webhook?.enabled ?? true,
},
});
const onSubmit = async (data: TEditWebhookFormSchema) => {
try {
await updateWebhook({
id: params.id,
teamId: team.id,
...data,
});
toast({
title: _(msg`Webhook updated`),
description: _(msg`The webhook has been updated successfully.`),
duration: 5000,
});
await revalidate();
} catch (err) {
toast({
title: _(msg`Failed to update webhook`),
description: _(
msg`We encountered an error while updating the webhook. Please try again later.`,
),
variant: 'destructive',
});
}
};
if (isLoading) {
return <SpinnerBox className="py-32" />;
}
// Todo: Update UI, currently out of place.
if (!webhook) {
return (
<GenericErrorLayout
errorCode={404}
errorCodeMap={{
404: {
heading: msg`Webhook not found`,
subHeading: msg`404 Webhook not found`,
message: msg`The webhook you are looking for may have been removed, renamed or may have never existed.`,
},
}}
primaryButton={
<Button asChild>
<Link to={`/t/${team.url}/settings/webhooks`}>
<Trans>Go back</Trans>
</Link>
</Button>
}
secondaryButton={null}
/>
);
}
return (
<div className="max-w-2xl">
<SettingsHeader
title={_(msg`Edit webhook`)}
subtitle={_(msg`On this page, you can edit the webhook and its settings.`)}
/>
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)}>
<fieldset className="flex h-full flex-col gap-y-6" disabled={form.formState.isSubmitting}>
<div className="flex flex-col-reverse gap-4 md:flex-row">
<FormField
control={form.control}
name="webhookUrl"
render={({ field }) => (
<FormItem className="flex-1">
<FormLabel required>Webhook URL</FormLabel>
<FormControl>
<Input className="bg-background" {...field} />
</FormControl>
<FormDescription>
<Trans>The URL for Documenso to send webhook events to.</Trans>
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name="enabled"
render={({ field }) => (
<FormItem>
<FormLabel>
<Trans>Enabled</Trans>
</FormLabel>
<div>
<FormControl>
<Switch
className="bg-background"
checked={field.value}
onCheckedChange={field.onChange}
/>
</FormControl>
</div>
<FormMessage />
</FormItem>
)}
/>
</div>
<FormField
control={form.control}
name="eventTriggers"
render={({ field: { onChange, value } }) => (
<FormItem className="flex flex-col gap-2">
<FormLabel required>
<Trans>Triggers</Trans>
</FormLabel>
<FormControl>
<WebhookMultiSelectCombobox
listValues={value}
onChange={(values: string[]) => {
onChange(values);
}}
/>
</FormControl>
<FormDescription>
<Trans>The events that will trigger a webhook to be sent to your URL.</Trans>
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name="secret"
render={({ field }) => (
<FormItem>
<FormLabel>Secret</FormLabel>
<FormControl>
<PasswordInput className="bg-background" {...field} value={field.value ?? ''} />
</FormControl>
<FormDescription>
<Trans>
A secret that will be sent to your URL so you can verify that the request has
been sent by Documenso.
</Trans>
</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<div className="flex justify-end gap-4">
<Button type="submit" loading={form.formState.isSubmitting}>
<Trans>Update webhook</Trans>
</Button>
</div>
</fieldset>
</form>
</Form>
<Alert
className="mt-6 flex flex-col items-center justify-between gap-4 p-6 md:flex-row"
variant="neutral"
>
<div>
<AlertTitle>
<Trans>Test Webhook</Trans>
</AlertTitle>
<AlertDescription className="mr-2">
<Trans>
Send a test webhook with sample data to verify your integration is working correctly.
</Trans>
</AlertDescription>
</div>
<div className="flex-shrink-0">
<WebhookTestDialog webhook={webhook}>
<Button variant="outline" disabled={!webhook.enabled}>
<Trans>Test Webhook</Trans>
</Button>
</WebhookTestDialog>
</div>
</Alert>
</div>
);
}

View File

@ -1,18 +1,7 @@
import { useMemo } from 'react';
import { msg } from '@lingui/core/macro';
import { Plural, useLingui } from '@lingui/react/macro';
import { useLingui } from '@lingui/react';
import { Trans } from '@lingui/react/macro';
import type { Webhook } from '@prisma/client';
import {
CheckCircle2Icon,
EditIcon,
Loader,
MoreHorizontalIcon,
ScrollTextIcon,
Trash2Icon,
XCircleIcon,
} from 'lucide-react';
import { Loader } from 'lucide-react';
import { DateTime } from 'luxon';
import { Link } from 'react-router';
@ -21,21 +10,9 @@ import { trpc } from '@documenso/trpc/react';
import { cn } from '@documenso/ui/lib/utils';
import { Badge } from '@documenso/ui/primitives/badge';
import { Button } from '@documenso/ui/primitives/button';
import { DataTable, type DataTableColumnDef } from '@documenso/ui/primitives/data-table';
import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination';
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuTrigger,
} from '@documenso/ui/primitives/dropdown-menu';
import { Skeleton } from '@documenso/ui/primitives/skeleton';
import { TableCell } from '@documenso/ui/primitives/table';
import { WebhookCreateDialog } from '~/components/dialogs/webhook-create-dialog';
import { WebhookDeleteDialog } from '~/components/dialogs/webhook-delete-dialog';
import { WebhookEditDialog } from '~/components/dialogs/webhook-edit-dialog';
import { SettingsHeader } from '~/components/general/settings-header';
import { useCurrentTeam } from '~/providers/team';
import { appMetaTags } from '~/utils/meta';
@ -45,72 +22,19 @@ export function meta() {
}
export default function WebhookPage() {
const { t, i18n } = useLingui();
const { _, i18n } = useLingui();
const team = useCurrentTeam();
const { data, isLoading, isError } = trpc.webhook.getTeamWebhooks.useQuery();
const results = {
data: data ?? [],
perPage: 0,
currentPage: 0,
totalPages: 0,
};
const columns = useMemo(() => {
return [
{
header: t`Webhook`,
cell: ({ row }) => (
<Link to={`/t/${team.url}/settings/webhooks/${row.original.id}`}>
<p className="text-muted-foreground text-xs">{row.original.id}</p>
<p
className="text-foreground max-w-sm truncate text-xs font-semibold"
title={row.original.webhookUrl}
>
{row.original.webhookUrl}
</p>
</Link>
),
},
{
header: t`Status`,
cell: ({ row }) => (
<Badge variant={row.original.enabled ? 'default' : 'neutral'} size="small">
{row.original.enabled ? <Trans>Enabled</Trans> : <Trans>Disabled</Trans>}
</Badge>
),
},
{
header: t`Listening to`,
cell: ({ row }) => (
<p
className="text-foreground"
title={row.original.eventTriggers
.map((event) => toFriendlyWebhookEventName(event))
.join(', ')}
>
<Plural value={row.original.eventTriggers.length} one="# Event" other="# Events" />
</p>
),
},
{
header: t`Created`,
cell: ({ row }) => i18n.date(row.original.createdAt),
},
{
header: t`Actions`,
cell: ({ row }) => <WebhookTableActionDropdown webhook={row.original} />,
},
] satisfies DataTableColumnDef<(typeof results)['data'][number]>[];
}, []);
const { data: webhooks, isLoading } = trpc.webhook.getTeamWebhooks.useQuery({
teamId: team.id,
});
return (
<div>
<SettingsHeader
title={t`Webhooks`}
subtitle={t`On this page, you can create new Webhooks and manage the existing ones.`}
title={_(msg`Webhooks`)}
subtitle={_(msg`On this page, you can create new Webhooks and manage the existing ones.`)}
>
<WebhookCreateDialog />
</SettingsHeader>
@ -119,95 +43,74 @@ export default function WebhookPage() {
<Loader className="h-8 w-8 animate-spin text-gray-500" />
</div>
)}
{webhooks && webhooks.length === 0 && (
// TODO: Perhaps add some illustrations here to make the page more engaging
<div className="mb-4">
<p className="text-muted-foreground mt-2 text-sm italic">
<Trans>
You have no webhooks yet. Your webhooks will be shown here once you create them.
</Trans>
</p>
</div>
)}
{webhooks && webhooks.length > 0 && (
<div className="mt-4 flex max-w-2xl flex-col gap-y-4">
{webhooks?.map((webhook) => (
<div
key={webhook.id}
className={cn(
'border-border rounded-lg border p-4',
!webhook.enabled && 'bg-muted/40',
)}
>
<div className="flex flex-col gap-x-4 sm:flex-row sm:items-center sm:justify-between">
<div>
<div className="truncate font-mono text-xs">{webhook.id}</div>
<DataTable
columns={columns}
data={results.data}
perPage={results.perPage}
currentPage={results.currentPage}
totalPages={results.totalPages}
error={{
enable: isError,
}}
emptyState={
<div className="text-muted-foreground/60 flex h-60 flex-col items-center justify-center gap-y-4">
<p>
<Trans>
You have no webhooks yet. Your webhooks will be shown here once you create them.
</Trans>
</p>
</div>
}
skeleton={{
enable: isLoading,
rows: 3,
component: (
<>
<TableCell>
<Skeleton className="h-4 w-24 rounded-full" />
</TableCell>
<TableCell>
<Skeleton className="h-4 w-8 rounded-full" />
</TableCell>
<TableCell>
<Skeleton className="h-4 w-12 rounded-full" />
</TableCell>
<TableCell>
<Skeleton className="h-4 w-12 rounded-full" />
</TableCell>
<TableCell>
<Skeleton className="h-4 w-6 rounded-full" />
</TableCell>
</>
),
}}
/>
<div className="mt-1.5 flex items-center gap-2">
<h5
className="max-w-[30rem] truncate text-sm sm:max-w-[18rem]"
title={webhook.webhookUrl}
>
{webhook.webhookUrl}
</h5>
<Badge variant={webhook.enabled ? 'neutral' : 'warning'} size="small">
{webhook.enabled ? <Trans>Enabled</Trans> : <Trans>Disabled</Trans>}
</Badge>
</div>
<p className="text-muted-foreground mt-2 text-xs">
<Trans>
Listening to{' '}
{webhook.eventTriggers
.map((trigger) => toFriendlyWebhookEventName(trigger))
.join(', ')}
</Trans>
</p>
<p className="text-muted-foreground mt-2 text-xs">
<Trans>Created on {i18n.date(webhook.createdAt, DateTime.DATETIME_FULL)}</Trans>
</p>
</div>
<div className="mt-4 flex flex-shrink-0 gap-4 sm:mt-0">
<Button asChild variant="outline">
<Link to={`/t/${team.url}/settings/webhooks/${webhook.id}`}>
<Trans>Edit</Trans>
</Link>
</Button>
<WebhookDeleteDialog webhook={webhook}>
<Button variant="destructive">
<Trans>Delete</Trans>
</Button>
</WebhookDeleteDialog>
</div>
</div>
</div>
))}
</div>
)}
</div>
);
}
const WebhookTableActionDropdown = ({ webhook }: { webhook: Webhook }) => {
const team = useCurrentTeam();
return (
<DropdownMenu>
<DropdownMenuTrigger data-testid="webhook-table-action-btn">
<MoreHorizontalIcon className="text-muted-foreground h-5 w-5" />
</DropdownMenuTrigger>
<DropdownMenuContent align="end" forceMount>
<DropdownMenuLabel>
<Trans>Action</Trans>
</DropdownMenuLabel>
<DropdownMenuItem asChild>
<Link to={`/t/${team.url}/settings/webhooks/${webhook.id}`}>
<ScrollTextIcon className="mr-2 h-4 w-4" />
<Trans>Logs</Trans>
</Link>
</DropdownMenuItem>
<WebhookEditDialog
webhook={webhook}
trigger={
<DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>
<div>
<EditIcon className="mr-2 h-4 w-4" />
<Trans>Edit</Trans>
</div>
</DropdownMenuItem>
}
/>
<WebhookDeleteDialog webhook={webhook}>
<DropdownMenuItem asChild onSelect={(e) => e.preventDefault()}>
<div>
<Trash2Icon className="mr-2 h-4 w-4" />
<Trans>Delete</Trans>
</div>
</DropdownMenuItem>
</WebhookDeleteDialog>
</DropdownMenuContent>
</DropdownMenu>
);
};

View File

@ -1,5 +1,3 @@
import { lazy } from 'react';
import { msg } from '@lingui/core/macro';
import { Trans, useLingui } from '@lingui/react/macro';
import { DocumentSigningOrder, SigningStatus } from '@prisma/client';
@ -16,13 +14,14 @@ import PDFViewerKonvaLazy from '@documenso/ui/components/pdf-viewer/pdf-viewer-k
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { PDFViewerLazy } from '@documenso/ui/primitives/pdf-viewer/lazy';
import { PDFViewer } from '@documenso/ui/primitives/pdf-viewer';
import { Spinner } from '@documenso/ui/primitives/spinner';
import { TemplateBulkSendDialog } from '~/components/dialogs/template-bulk-send-dialog';
import { TemplateDirectLinkDialog } from '~/components/dialogs/template-direct-link-dialog';
import { TemplateUseDialog } from '~/components/dialogs/template-use-dialog';
import { EnvelopeRendererFileSelector } from '~/components/general/envelope-editor/envelope-file-selector';
import EnvelopeGenericPageRenderer from '~/components/general/envelope-editor/envelope-generic-page-renderer';
import { GenericErrorLayout } from '~/components/general/generic-error-layout';
import { TemplateDirectLinkBadge } from '~/components/general/template/template-direct-link-badge';
import { TemplatePageViewDocumentsTable } from '~/components/general/template/template-page-view-documents-table';
@ -35,10 +34,6 @@ import { useCurrentTeam } from '~/providers/team';
import type { Route } from './+types/templates.$id._index';
const EnvelopeGenericPageRenderer = lazy(
async () => import('~/components/general/envelope-editor/envelope-generic-page-renderer'),
);
export default function TemplatePage({ params }: Route.ComponentProps) {
const { t } = useLingui();
const { user } = useSession();
@ -56,7 +51,7 @@ export default function TemplatePage({ params }: Route.ComponentProps) {
if (isLoadingEnvelope) {
return (
<div className="flex w-screen flex-col items-center justify-center gap-2 py-64 text-foreground">
<div className="text-foreground flex w-screen flex-col items-center justify-center gap-2 py-64">
<Spinner />
<Trans>Loading</Trans>
</div>
@ -210,7 +205,7 @@ export default function TemplatePage({ params }: Route.ComponentProps) {
documentMeta={mockedDocumentMeta}
/>
<PDFViewerLazy
<PDFViewer
envelopeItem={envelope.envelopeItems[0]}
token={undefined}
version="signed"
@ -224,9 +219,9 @@ export default function TemplatePage({ params }: Route.ComponentProps) {
className={cn('col-span-12 lg:col-span-6 xl:col-span-5', isMultiEnvelopeItem && 'mt-20')}
>
<div className="space-y-6">
<section className="flex flex-col rounded-xl border border-border bg-widget pb-4 pt-6">
<section className="border-border bg-widget flex flex-col rounded-xl border pb-4 pt-6">
<div className="flex flex-row items-center justify-between px-4">
<h3 className="text-2xl font-semibold text-foreground">
<h3 className="text-foreground text-2xl font-semibold">
<Trans>Template</Trans>
</h3>
@ -244,7 +239,7 @@ export default function TemplatePage({ params }: Route.ComponentProps) {
</div>
</div>
<p className="mt-2 px-4 text-sm text-muted-foreground">
<p className="text-muted-foreground mt-2 px-4 text-sm">
<Trans>Manage and view template</Trans>
</p>

View File

@ -179,7 +179,7 @@ export default function CompletedSigningPage({ loaderData }: Route.ComponentProp
{match({ status: signingStatus, deletedAt: document.deletedAt })
.with({ status: 'COMPLETED' }, () => (
<div className="mt-4 flex items-center text-center text-documenso-700">
<div className="text-documenso-700 mt-4 flex items-center text-center">
<CheckCircle2 className="mr-2 h-5 w-5" />
<span className="text-sm">
<Trans>Everyone has signed</Trans>
@ -213,29 +213,29 @@ export default function CompletedSigningPage({ loaderData }: Route.ComponentProp
{match({ status: signingStatus, deletedAt: document.deletedAt })
.with({ status: 'COMPLETED' }, () => (
<p className="mt-2.5 max-w-[60ch] text-center text-sm font-medium text-muted-foreground/60 md:text-base">
<p className="text-muted-foreground/60 mt-2.5 max-w-[60ch] text-center text-sm font-medium md:text-base">
<Trans>
Everyone has signed! You will receive an email copy of the signed document.
Everyone has signed! You will receive an Email copy of the signed document.
</Trans>
</p>
))
.with({ status: 'PROCESSING' }, () => (
<p className="mt-2.5 max-w-[60ch] text-center text-sm font-medium text-muted-foreground/60 md:text-base">
<p className="text-muted-foreground/60 mt-2.5 max-w-[60ch] text-center text-sm font-medium md:text-base">
<Trans>
All recipients have signed. The document is being processed and you will receive
an email copy shortly.
an Email copy shortly.
</Trans>
</p>
))
.with({ deletedAt: null }, () => (
<p className="mt-2.5 max-w-[60ch] text-center text-sm font-medium text-muted-foreground/60 md:text-base">
<p className="text-muted-foreground/60 mt-2.5 max-w-[60ch] text-center text-sm font-medium md:text-base">
<Trans>
You will receive an email copy of the signed document once everyone has signed.
You will receive an Email copy of the signed document once everyone has signed.
</Trans>
</p>
))
.otherwise(() => (
<p className="mt-2.5 max-w-[60ch] text-center text-sm font-medium text-muted-foreground/60 md:text-base">
<p className="text-muted-foreground/60 mt-2.5 max-w-[60ch] text-center text-sm font-medium md:text-base">
<Trans>
This document has been cancelled by the owner and is no longer available for
others to sign.
@ -282,7 +282,7 @@ export default function CompletedSigningPage({ loaderData }: Route.ComponentProp
<Trans>Need to sign documents?</Trans>
</h2>
<p className="mt-4 max-w-[55ch] text-center leading-normal text-muted-foreground/60">
<p className="text-muted-foreground/60 mt-4 max-w-[55ch] text-center leading-normal">
<Trans>
Create your account and start using state-of-the-art document signing.
</Trans>

View File

@ -3,7 +3,7 @@ import sharp from 'sharp';
import { getFileServerSide } from '@documenso/lib/universal/upload/get-file.server';
import { prisma } from '@documenso/prisma';
import type { Route } from './+types/branding.logo.organisation.$orgId';
import type { Route } from './+types/branding.logo.team.$teamId';
export async function loader({ params }: Route.LoaderArgs) {
const organisationId = params.orgId;
@ -69,7 +69,7 @@ export async function loader({ params }: Route.LoaderArgs) {
})
.toBuffer();
return new Response(Buffer.from(img), {
return new Response(img, {
headers: {
'Content-Type': 'image/png',
'Content-Length': img.length.toString(),

View File

@ -1,4 +1,3 @@
// Todo: [Webhooks] delete file after deployment.
import { handlerTriggerWebhooks } from '@documenso/lib/server-only/webhooks/trigger/handler';
import type { Route } from './+types/webhook.trigger';

View File

@ -14,7 +14,7 @@
"with:env": "dotenv -e ../../.env -e ../../.env.local --"
},
"dependencies": {
"@cantoo/pdf-lib": "^2.5.3",
"@cantoo/pdf-lib": "^2.5.2",
"@documenso/api": "*",
"@documenso/assets": "*",
"@documenso/auth": "*",
@ -26,87 +26,85 @@
"@documenso/ui": "*",
"@epic-web/remember": "^1.1.0",
"@faker-js/faker": "^10.1.0",
"@hono/node-server": "^1.19.6",
"@hono/trpc-server": "^0.4.0",
"@hono/standard-validator": "^0.2.0",
"@hookform/resolvers": "^3",
"@lingui/core": "^5.6.0",
"@lingui/detect-locale": "^5.6.0",
"@lingui/macro": "^5.6.0",
"@lingui/react": "^5.6.0",
"@hono/node-server": "^1.13.7",
"@hono/trpc-server": "^0.3.4",
"@hookform/resolvers": "^3.1.0",
"@lingui/core": "^5.2.0",
"@lingui/detect-locale": "^5.2.0",
"@lingui/macro": "^5.2.0",
"@lingui/react": "^5.2.0",
"@oslojs/crypto": "^1.0.1",
"@oslojs/encoding": "^1.1.0",
"@react-router/node": "^7.9.6",
"@react-router/serve": "^7.9.6",
"@react-router/node": "^7.6.0",
"@react-router/serve": "^7.6.0",
"@simplewebauthn/browser": "^9.0.1",
"@simplewebauthn/server": "^9.0.3",
"@tanstack/react-query": "5.90.10",
"autoprefixer": "^10.4.22",
"autoprefixer": "^10.4.13",
"colord": "^2.9.3",
"content-disposition": "^1.0.1",
"framer-motion": "^12.23.24",
"hono": "4.10.6",
"content-disposition": "^0.5.4",
"framer-motion": "^10.12.8",
"hono": "4.7.0",
"hono-rate-limiter": "^0.4.2",
"hono-react-router-adapter": "^0.6.5",
"input-otp": "^1.4.2",
"isbot": "^5.1.32",
"konva": "^10.0.9",
"lucide-react": "^0.554.0",
"luxon": "^3.7.2",
"nanoid": "^5.1.6",
"papaparse": "^5.5.3",
"posthog-js": "^1.297.2",
"posthog-node": "4.18.0",
"hono-react-router-adapter": "^0.6.2",
"input-otp": "^1.2.4",
"isbot": "^5.1.17",
"jsonwebtoken": "^9.0.2",
"konva": "^10.0.2",
"lucide-react": "^0.279.0",
"luxon": "^3.4.0",
"papaparse": "^5.4.1",
"plausible-tracker": "^0.3.9",
"posthog-js": "^1.245.0",
"posthog-node": "^4.17.0",
"react": "^18",
"react-call": "^1.8.1",
"react-call": "^1.7.0",
"react-dom": "^18",
"react-dropzone": "^14.3.8",
"react-hook-form": "^7.66.1",
"react-hotkeys-hook": "^4.6.2",
"react-icons": "^5.5.0",
"react-rnd": "^10.5.2",
"react-router": "^7.9.6",
"recharts": "^2.15.4",
"remeda": "^2.32.0",
"react-dropzone": "^14.2.3",
"react-hook-form": "^7.43.9",
"react-hotkeys-hook": "^4.4.1",
"react-icons": "^5.4.0",
"react-rnd": "^10.4.1",
"react-router": "^7.6.0",
"recharts": "^2.7.2",
"remeda": "^2.17.3",
"remix-themes": "^2.0.4",
"satori": "^0.18.3",
"sharp": "0.34.5",
"tailwindcss": "^3.4.18",
"ts-pattern": "^5.9.0",
"ua-parser-js": "^1.0.41",
"satori": "^0.12.1",
"sharp": "0.32.6",
"tailwindcss": "^3.4.15",
"ts-pattern": "^5.0.5",
"ua-parser-js": "^1.0.37",
"uqr": "^0.1.2"
},
"devDependencies": {
"@babel/core": "^7.28.5",
"@babel/preset-react": "^7.28.5",
"@babel/preset-typescript": "^7.28.5",
"@lingui/babel-plugin-lingui-macro": "^5.6.0",
"@lingui/vite-plugin": "^5.6.0",
"@react-router/dev": "^7.9.6",
"@react-router/remix-routes-option-adapter": "^7.9.6",
"@rollup/plugin-babel": "^6.1.0",
"@rollup/plugin-commonjs": "^28.0.9",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^16.0.3",
"@rollup/plugin-typescript": "^12.3.0",
"@babel/core": "^7.26.7",
"@babel/preset-react": "^7.26.3",
"@babel/preset-typescript": "^7.26.0",
"@lingui/babel-plugin-lingui-macro": "^5.2.0",
"@lingui/vite-plugin": "^5.3.1",
"@react-router/dev": "^7.6.0",
"@react-router/remix-routes-option-adapter": "^7.6.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^28.0.2",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-typescript": "^12.1.2",
"@simplewebauthn/types": "^9.0.1",
"@types/content-disposition": "^0.5.9",
"@types/formidable": "^3.4.6",
"@types/luxon": "^3.7.1",
"@types/formidable": "^2.0.6",
"@types/luxon": "^3.3.1",
"@types/node": "^20",
"@types/papaparse": "^5.5.0",
"@types/react": "18.3.27",
"@types/papaparse": "^5.3.15",
"@types/react": "^18",
"@types/react-dom": "^18",
"@types/ua-parser-js": "^0.7.39",
"cross-env": "^10.1.0",
"esbuild": "^0.27.0",
"remix-flat-routes": "^0.8.5",
"rollup": "^4.53.3",
"tsx": "^4.20.6",
"cross-env": "^7.0.3",
"esbuild": "^0.25.4",
"remix-flat-routes": "^0.8.4",
"rollup": "^4.34.5",
"tsx": "^4.19.2",
"typescript": "5.6.2",
"vite": "^7.2.4",
"vite": "^6.3.5",
"vite-plugin-babel-macros": "^1.0.6",
"vite-tsconfig-paths": "^5.1.4"
},
"version": "2.1.0"
"version": "2.0.14"
}

View File

@ -1,7 +1,6 @@
import linguiMacro from '@lingui/babel-plugin-lingui-macro';
import babel from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import json from '@rollup/plugin-json';
import resolve from '@rollup/plugin-node-resolve';
import typescript from '@rollup/plugin-typescript';
import path from 'node:path';
@ -40,7 +39,6 @@ const config = {
],
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
}),
json(),
commonjs(),
babel({
babelHelpers: 'bundled',

View File

@ -10,7 +10,6 @@ import { tsRestHonoApp } from '@documenso/api/hono';
import { auth } from '@documenso/auth/server';
import { API_V2_BETA_URL, API_V2_URL } from '@documenso/lib/constants/app';
import { jobsClient } from '@documenso/lib/jobs/client';
import { TelemetryClient } from '@documenso/lib/server-only/telemetry/telemetry-client';
import { getIpAddress } from '@documenso/lib/universal/get-ip-address';
import { logger } from '@documenso/lib/utils/logger';
import { openApiDocument } from '@documenso/trpc/server/open-api';
@ -113,8 +112,4 @@ app.use(`${API_V2_BETA_URL}/*`, async (c) =>
}),
);
// Start telemetry client for anonymous usage tracking.
// Can be disabled by setting DOCUMENSO_DISABLE_TELEMETRY=true
void TelemetryClient.start();
export default app;

View File

@ -49,7 +49,7 @@ export default defineConfig({
}),
],
ssr: {
noExternal: ['react-dropzone', 'plausible-tracker'],
noExternal: ['react-dropzone', 'plausible-tracker', 'pdfjs-dist'],
external: [
'@node-rs/bcrypt',
'@prisma/client',

769
build.log
View File

@ -1,769 +0,0 @@
> @documenso/remix@2.0.14 build
> ./.bin/build.sh
[Build]: Extracting and compiling translations
> @documenso/root@2.0.14 translate
> npm run translate:extract && npm run translate:compile
> @documenso/root@2.0.14 translate:extract
> lingui extract --clean
✔ Done in 2s
Catalog statistics for packages/lib/translations/{locale}/web:
┌─────────────┬─────────────┬─────────┐
│ Language │ Total count │ Missing │
├─────────────┼─────────────┼─────────┤
│ en (source) │ 2311 │ - │
│ de │ 2311 │ 23 │
│ es │ 2311 │ 23 │
│ fr │ 2311 │ 23 │
│ it │ 2311 │ 26 │
│ ja │ 2311 │ 23 │
│ ko │ 2311 │ 23 │
│ pl │ 2311 │ 23 │
│ pt-BR │ 2311 │ 69 │
│ zh │ 2311 │ 23 │
└─────────────┴─────────────┴─────────┘
(Use "npm run translate:extract" to update catalogs with new messages.)
(Use "npm run translate:compile" to compile catalogs for production. Alternatively, use bundler plugins: https://lingui.dev/ref/cli#compiling-catalogs-in-ci)
> @documenso/root@2.0.14 translate:compile
> lingui compile
Compiling message catalogs…
Done in 943ms
[Build]: Building app
> @documenso/remix@2.0.14 build:app
> npm run typecheck && cross-env NODE_ENV=production react-router build
> @documenso/remix@2.0.14 typecheck
> react-router typegen && tsc
app/components/forms/email-preferences-form.tsx(66,7): error TS2322: Type 'JsonValue' is not assignable to type '{ recipientSigningRequest?: boolean | undefined; recipientRemoved?: boolean | undefined; recipientSigned?: boolean | undefined; documentPending?: boolean | undefined; documentCompleted?: boolean | undefined; documentDeleted?: boolean | undefined; ownerDocumentCompleted?: boolean | undefined; } | null | undefined'.
Type 'string' has no properties in common with type '{ recipientSigningRequest?: boolean | undefined; recipientRemoved?: boolean | undefined; recipientSigned?: boolean | undefined; documentPending?: boolean | undefined; documentCompleted?: boolean | undefined; documentDeleted?: boolean | undefined; ownerDocumentCompleted?: boolean | undefined; }'.
app/components/forms/email-preferences-form.tsx(81,41): error TS2345: Argument of type '(data: { emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }) => Promise<...>' is not assignable to parameter of type 'SubmitHandler<TFieldValues>'.
Types of parameters 'data' and 'data' are incompatible.
Type 'TFieldValues' is not assignable to type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }'.
Type 'FieldValues' is missing the following properties from type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }': emailReplyTo, emailId, emailDocumentSettings
app/components/forms/email-preferences-form.tsx(88,15): error TS2322: Type 'Control<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValues>' is not assignable to type 'Control<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValu...' is not assignable to type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }> ...'.
Type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValu...' is not assignable to type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }>'.
Type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, TFieldVal...' is not assignable to type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, { ...; }>...'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, { ...; }>...'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }>'.
Type 'TFieldValues' is not assignable to type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }'.
Type 'FieldValues' is missing the following properties from type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }': emailReplyTo, emailId, emailDocumentSettings
app/components/forms/email-preferences-form.tsx(129,13): error TS2322: Type 'Control<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValues>' is not assignable to type 'Control<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValu...' is not assignable to type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }> ...'.
Type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValu...' is not assignable to type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }>'.
Type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, TFieldVal...' is not assignable to type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, { ...; }>...'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, { ...; }>...'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }>'.
Type 'TFieldValues' is not assignable to type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }'.
Type 'FieldValues' is missing the following properties from type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }': emailReplyTo, emailId, emailDocumentSettings
app/components/forms/email-preferences-form.tsx(179,13): error TS2322: Type 'Control<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValues>' is not assignable to type 'Control<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValu...' is not assignable to type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }> ...'.
Type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, TFieldValu...' is not assignable to type 'Resolver<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, any, { ...; }>'.
Type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, TFieldVal...' is not assignable to type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, { ...; }>...'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }, { ...; }>...'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }>'.
Type 'TFieldValues' is not assignable to type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }'.
Type 'FieldValues' is missing the following properties from type '{ emailReplyTo: string | null; emailId: string | null; emailDocumentSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null; }': emailReplyTo, emailId, emailDocumentSettings
app/components/forms/subscription-claim-form.tsx(43,7): error TS2322: Type 'JsonValue' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; } | undefined'.
Type 'null' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; } | undefined'.
app/components/forms/subscription-claim-form.tsx(49,41): error TS2345: Argument of type '(data: { name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }) => Promise<...>' is not assignable to parameter of type 'SubmitHandler<TFieldValues>'.
Types of parameters 'data' and 'data' are incompatible.
Type 'TFieldValues' is not assignable to type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Type 'FieldValues' is missing the following properties from type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }': name, teamCount, memberCount, envelopeItemCount, flags
app/components/forms/subscription-claim-form.tsx(52,13): error TS2322: Type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues> | undefined' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }> | undefined'.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
Type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, TFieldValues> | Promise<...>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }>'.
Type 'TFieldValues' is not assignable to type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Type 'FieldValues' is missing the following properties from type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }': name, teamCount, memberCount, envelopeItemCount, flags
app/components/forms/subscription-claim-form.tsx(68,13): error TS2322: Type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues> | undefined' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }> | undefined'.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
Type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, TFieldValues> | Promise<...>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }>'.
Type 'TFieldValues' is not assignable to type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Type 'FieldValues' is missing the following properties from type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }': name, teamCount, memberCount, envelopeItemCount, flags
app/components/forms/subscription-claim-form.tsx(92,13): error TS2322: Type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues> | undefined' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }> | undefined'.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
Type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, TFieldValues> | Promise<...>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }>'.
Type 'TFieldValues' is not assignable to type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Type 'FieldValues' is missing the following properties from type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }': name, teamCount, memberCount, envelopeItemCount, flags
app/components/forms/subscription-claim-form.tsx(116,13): error TS2322: Type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues> | undefined' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }> | undefined'.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
Type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, TFieldValues> | Promise<...>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }>'.
Type 'TFieldValues' is not assignable to type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Type 'FieldValues' is missing the following properties from type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }': name, teamCount, memberCount, envelopeItemCount, flags
app/components/forms/subscription-claim-form.tsx(148,19): error TS2322: Type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Control<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
The types of '_options.resolver' are incompatible between these types.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues> | undefined' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }> | undefined'.
Type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, TFieldValues>' is not assignable to type 'Resolver<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, any, { ...; }>'.
Type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, TFieldValues> | Promise<...>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverResult<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }, { ...; }> | Promise<...>'.
Type 'ResolverSuccess<TFieldValues>' is not assignable to type 'ResolverSuccess<{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }>'.
Type 'TFieldValues' is not assignable to type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Type 'FieldValues' is missing the following properties from type '{ name: string; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; ... 7 more ...; allowEnvelopes?: boolean | undefined; }; }': name, teamCount, memberCount, envelopeItemCount, flags
app/components/general/document-signing/document-signing-field-container.tsx(136,28): error TS2339: Property 'readOnly' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'readOnly' does not exist on type 'string'.
app/components/general/document-signing/document-signing-field-container.tsx(178,28): error TS2339: Property 'label' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'label' does not exist on type 'string'.
app/components/general/document-signing/document-signing-field-container.tsx(190,32): error TS2339: Property 'label' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'label' does not exist on type 'string'.
app/components/general/envelope-editor/envelope-generic-page-renderer.tsx(50,5): error TS2322: Type '{ inserted: boolean; customText: string; recipient: Pick<{ id: number; name: string; token: string; email: string; signingOrder: number | null; envelopeId: string; authOptions: JsonValue; ... 7 more ...; sendStatus: SendStatus; }, "id" | ... 2 more ... | "signingStatus">; ... 11 more ...; envelopeItemId: string; }[]' is not assignable to type 'GenericLocalField[]'.
Type '{ inserted: boolean; customText: string; recipient: Pick<{ id: number; name: string; token: string; email: string; signingOrder: number | null; envelopeId: string; authOptions: JsonValue | null; ... 7 more ...; sendStatus: $Enums.SendStatus; }, "id" | ... 2 more ... | "signingStatus">; ... 11 more ...; envelopeItemI...' is not assignable to type 'GenericLocalField'.
Type '{ inserted: boolean; customText: string; recipient: Pick<{ id: number; name: string; token: string; email: string; signingOrder: number | null; envelopeId: string; authOptions: JsonValue | null; ... 7 more ...; sendStatus: $Enums.SendStatus; }, "id" | ... 2 more ... | "signingStatus">; ... 11 more ...; envelopeItemI...' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 10 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
app/components/general/envelope-editor/envelope-generic-page-renderer.tsx(74,22): error TS2339: Property 'readOnly' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'readOnly' does not exist on type 'string'.
app/components/general/envelope-signing/envelope-signer-page-renderer.tsx(181,69): error TS2339: Property 'readOnly' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'readOnly' does not exist on type 'string'.
app/routes/_authenticated+/t.$teamUrl+/documents.$id.legacy_editor.tsx(137,9): error TS2322: Type '{ folder: null; envelopeId: string; internalVersion: number; documentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 31 more ...; documentMetaId: string; }' is not assignable to type '{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 14 more ...; documentId?: number | undefined; }; ... 20 more ...; templateId?: number | ... 1 more ... | undefined; }'.
The types of 'documentMeta.emailSettings' are incompatible between these types.
Type 'JsonValue' is not assignable to type '{ recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | null'.
Type 'string' is not assignable to type '{ recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; }'.
app/routes/_authenticated+/t.$teamUrl+/templates.$id.legacy_editor.tsx(109,9): error TS2322: Type '{ folder: null; envelopeId: string; type: $Enums.TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 29 more ...; documentMetaId: string; }' is not assignable to type '{ type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateMeta: { ...; }; }'.
Types of property 'fields' are incompatible.
Type '{ documentId: null; templateId: number; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: null; templateId: number; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
app/routes/_internal+/[__htmltopdf]+/certificate.tsx(98,20): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/_internal+/[__htmltopdf]+/certificate.tsx(98,44): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
app/routes/_recipient+/d.$token+/_index.tsx(211,15): error TS2322: Type '{ readonly folder: null; readonly id: number; readonly envelopeId: string; readonly type: $Enums.TemplateType; readonly visibility: $Enums.DocumentVisibility; readonly externalId: string | null; ... 15 more ...; readonly envelopeItems: { ...; }[]; }' is not assignable to type 'Omit<{ type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateMeta: { ...; }; }, "user">'.
Types of property 'fields' are incompatible.
Type '{ templateId: number; documentId: null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ templateId: number; documentId: null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
app/routes/_unauthenticated+/o.$orgUrl.signin.tsx(76,6): error TS18047: 'organisation.organisationClaim.flags' is possibly 'null'.
app/routes/_unauthenticated+/o.$orgUrl.signin.tsx(76,43): error TS2339: Property 'authenticationPortal' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'authenticationPortal' does not exist on type 'string'.
app/routes/embed+/_v0+/direct.$token.tsx(45,39): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/direct.$token.tsx(45,63): error TS2339: Property 'embedSigningWhiteLabel' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigningWhiteLabel' does not exist on type 'string'.
app/routes/embed+/_v0+/direct.$token.tsx(46,25): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/direct.$token.tsx(46,49): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
app/routes/embed+/_v0+/direct.$token.tsx(51,32): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/direct.$token.tsx(51,56): error TS2339: Property 'embedSigning' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigning' does not exist on type 'string'.
app/routes/embed+/_v0+/direct.$token.tsx(161,39): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/direct.$token.tsx(161,63): error TS2339: Property 'embedSigningWhiteLabel' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigningWhiteLabel' does not exist on type 'string'.
app/routes/embed+/_v0+/direct.$token.tsx(162,25): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/direct.$token.tsx(162,49): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
app/routes/embed+/_v0+/direct.$token.tsx(164,32): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/direct.$token.tsx(164,56): error TS2339: Property 'embedSigning' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigning' does not exist on type 'string'.
app/routes/embed+/_v0+/sign.$token.tsx(64,39): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/sign.$token.tsx(64,63): error TS2339: Property 'embedSigningWhiteLabel' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigningWhiteLabel' does not exist on type 'string'.
app/routes/embed+/_v0+/sign.$token.tsx(65,25): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/sign.$token.tsx(65,49): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
app/routes/embed+/_v0+/sign.$token.tsx(70,32): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/sign.$token.tsx(70,56): error TS2339: Property 'embedSigning' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigning' does not exist on type 'string'.
app/routes/embed+/_v0+/sign.$token.tsx(197,39): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/sign.$token.tsx(197,63): error TS2339: Property 'embedSigningWhiteLabel' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigningWhiteLabel' does not exist on type 'string'.
app/routes/embed+/_v0+/sign.$token.tsx(198,25): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/sign.$token.tsx(198,49): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
app/routes/embed+/_v0+/sign.$token.tsx(200,32): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/_v0+/sign.$token.tsx(200,56): error TS2339: Property 'embedSigning' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigning' does not exist on type 'string'.
app/routes/embed+/v1+/authoring+/_layout.tsx(35,37): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/v1+/authoring+/_layout.tsx(35,61): error TS2339: Property 'embedAuthoringWhiteLabel' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedAuthoringWhiteLabel' does not exist on type 'string'.
app/routes/embed+/v1+/authoring+/document.edit.$id.tsx(112,88): error TS2345: Argument of type '() => { title: string; documentData: undefined; meta: { subject: string | undefined; message: string | undefined; distributionMethod: $Enums.DocumentDistributionMethod; emailSettings: string | ... 4 more ... | JsonArray; ... 6 more ...; redirectUrl: string | undefined; }; signers: { ...; }[]; }' is not assignable to parameter of type '{ meta: { timezone: string; signingOrder: "PARALLEL" | "SEQUENTIAL"; distributionMethod: "EMAIL" | "NONE"; emailSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; ... 4 more ...; ownerDocumentCompleted: boolean; }; ... 7 more ...; externalId?: string | undefined; }; title: string; signers: { .....'.
Type '() => { title: string; documentData: undefined; meta: { subject: string | undefined; message: string | undefined; distributionMethod: $Enums.DocumentDistributionMethod; emailSettings: string | ... 4 more ... | JsonArray; ... 6 more ...; redirectUrl: string | undefined; }; signers: { ...; }[]; }' is not assignable to type '() => { meta: { timezone: string; signingOrder: "PARALLEL" | "SEQUENTIAL"; distributionMethod: "EMAIL" | "NONE"; emailSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; ... 4 more ...; ownerDocumentCompleted: boolean; }; ... 7 more ...; externalId?: string | undefined; }; title: string; signers...'.
Call signature return types '{ title: string; documentData: undefined; meta: { subject: string | undefined; message: string | undefined; distributionMethod: DocumentDistributionMethod; ... 7 more ...; redirectUrl: string | undefined; }; signers: { ...; }[]; }' and '{ meta: { timezone: string; signingOrder: "PARALLEL" | "SEQUENTIAL"; distributionMethod: "EMAIL" | "NONE"; emailSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; ... 4 more ...; ownerDocumentCompleted: boolean; }; ... 7 more ...; externalId?: string | undefined; }; title: string; signers: { .....' are incompatible.
The types of 'meta.emailSettings' are incompatible between these types.
Type 'string | number | boolean | { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | JsonObject | JsonArray' is not assignable to type '{ recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; }'.
Type 'string' is not assignable to type '{ recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; }'.
app/routes/embed+/v1+/authoring+/document.edit.$id.tsx(144,75): error TS2345: Argument of type '() => { fields: { nativeId: number; formId: string; type: $Enums.FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]; }' is not assignable to parameter of type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; ... 8 more ...; nativeId?: number | undefined; }[]; } | (() => { ...; } | null) | null'.
Type '() => { fields: { nativeId: number; formId: string; type: $Enums.FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]; }' is not assignable to type '() => { fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; ... 8 more ...; nativeId?: number | undefined; }[]; } | null'.
Call signature return types '{ fields: { nativeId: number; formId: string; type: FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]; }' and '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; ... 8 more ...; nativeId?: number | undefined; }[]; } | null' are incompatible.
The types of 'fields' are incompatible between these types.
Type '{ nativeId: number; formId: string; type: FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; pageHeight: number; ... 7 more ...; nativeId?: number | undefined; }[]'.
Type '{ nativeId: number; formId: string; type: $Enums.FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; pageHeight: number; ... 7 more ...; nativeId?: number | undefined; }'.
Types of property 'fieldMeta' are incompatible.
Type 'string | number | boolean | JsonObject | JsonArray | undefined' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | undefined'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | undefined'.
app/routes/embed+/v1+/authoring+/template.edit.$id.tsx(112,88): error TS2345: Argument of type '() => { title: string; documentData: undefined; meta: { subject: string | undefined; message: string | undefined; distributionMethod: $Enums.DocumentDistributionMethod; emailSettings: string | ... 4 more ... | JsonArray; ... 6 more ...; redirectUrl: string | undefined; }; signers: { ...; }[]; }' is not assignable to parameter of type '{ meta: { timezone: string; signingOrder: "PARALLEL" | "SEQUENTIAL"; distributionMethod: "EMAIL" | "NONE"; emailSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; ... 4 more ...; ownerDocumentCompleted: boolean; }; ... 7 more ...; externalId?: string | undefined; }; title: string; signers: { .....'.
Type '() => { title: string; documentData: undefined; meta: { subject: string | undefined; message: string | undefined; distributionMethod: $Enums.DocumentDistributionMethod; emailSettings: string | ... 4 more ... | JsonArray; ... 6 more ...; redirectUrl: string | undefined; }; signers: { ...; }[]; }' is not assignable to type '() => { meta: { timezone: string; signingOrder: "PARALLEL" | "SEQUENTIAL"; distributionMethod: "EMAIL" | "NONE"; emailSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; ... 4 more ...; ownerDocumentCompleted: boolean; }; ... 7 more ...; externalId?: string | undefined; }; title: string; signers...'.
Call signature return types '{ title: string; documentData: undefined; meta: { subject: string | undefined; message: string | undefined; distributionMethod: DocumentDistributionMethod; ... 7 more ...; redirectUrl: string | undefined; }; signers: { ...; }[]; }' and '{ meta: { timezone: string; signingOrder: "PARALLEL" | "SEQUENTIAL"; distributionMethod: "EMAIL" | "NONE"; emailSettings: { recipientSigningRequest: boolean; recipientRemoved: boolean; ... 4 more ...; ownerDocumentCompleted: boolean; }; ... 7 more ...; externalId?: string | undefined; }; title: string; signers: { .....' are incompatible.
The types of 'meta.emailSettings' are incompatible between these types.
Type 'string | number | boolean | { recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; } | JsonObject | JsonArray' is not assignable to type '{ recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; }'.
Type 'string' is not assignable to type '{ recipientSigningRequest: boolean; recipientRemoved: boolean; recipientSigned: boolean; documentPending: boolean; documentCompleted: boolean; documentDeleted: boolean; ownerDocumentCompleted: boolean; }'.
app/routes/embed+/v1+/authoring+/template.edit.$id.tsx(144,75): error TS2345: Argument of type '() => { fields: { nativeId: number; formId: string; type: $Enums.FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]; }' is not assignable to parameter of type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; ... 8 more ...; nativeId?: number | undefined; }[]; } | (() => { ...; } | null) | null'.
Type '() => { fields: { nativeId: number; formId: string; type: $Enums.FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]; }' is not assignable to type '() => { fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; ... 8 more ...; nativeId?: number | undefined; }[]; } | null'.
Call signature return types '{ fields: { nativeId: number; formId: string; type: FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]; }' and '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; ... 8 more ...; nativeId?: number | undefined; }[]; } | null' are incompatible.
The types of 'fields' are incompatible between these types.
Type '{ nativeId: number; formId: string; type: FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; pageHeight: number; ... 7 more ...; nativeId?: number | undefined; }[]'.
Type '{ nativeId: number; formId: string; type: $Enums.FieldType; signerEmail: string; inserted: boolean; recipientId: number; pageNumber: number; pageX: number; pageY: number; pageWidth: number; pageHeight: number; fieldMeta: string | ... 4 more ... | undefined; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; recipientId: number; pageWidth: number; pageHeight: number; ... 7 more ...; nativeId?: number | undefined; }'.
Types of property 'fieldMeta' are incompatible.
Type 'string | number | boolean | JsonObject | JsonArray | undefined' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | undefined'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | undefined'.
app/routes/embed+/v1+/multisign+/_index.tsx(56,31): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/v1+/multisign+/_index.tsx(56,55): error TS2339: Property 'embedSigningWhiteLabel' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedSigningWhiteLabel' does not exist on type 'string'.
app/routes/embed+/v1+/multisign+/_index.tsx(57,25): error TS18047: 'organisationClaim.flags' is possibly 'null'.
app/routes/embed+/v1+/multisign+/_index.tsx(57,49): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
../../packages/api/v1/implementation.ts(488,3): error TS2322: Type '(args: { body: { globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; title: string; type?: "PUBLIC" | "PRIVATE" | undefined; ... 6 more ...; attachments?: { ...; }[] | undefined; }; headers: { ...; }; }, { request }: B) => Promise<...>' is not assignable to type 'AppRouteImplementationOrOptions<{ method: "POST"; body: ZodObject<{ title: ZodString; folderId: ZodOptional<ZodString>; externalId: ZodOptional<ZodNullable<ZodString>>; ... 7 more ...; attachments: ZodOptional<...>; }, "strip", ZodTypeAny, { ...; }, { ...; }>; summary: "Create a new template and get a presigned URL"...'.
Type '(args: { body: { globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; title: string; type?: "PUBLIC" | "PRIVATE" | undefined; ... 6 more ...; attachments?: { ...; }[] | undefined; }; headers: { ...; }; }, { request }: B) => Promise<...>' is not assignable to type 'AppRouteImplementation<{ method: "POST"; body: ZodObject<{ title: ZodString; folderId: ZodOptional<ZodString>; externalId: ZodOptional<ZodNullable<ZodString>>; ... 7 more ...; attachments: ZodOptional<...>; }, "strip", ZodTypeAny, { ...; }, { ...; }>; summary: "Create a new template and get a presigned URL"; path: "...'.
Type 'Promise<{ status: 500; body: { message: string; uploadUrl?: undefined; template?: undefined; }; } | { status: 400; body: { message: string; uploadUrl?: undefined; template?: undefined; }; } | { status: 200; body: { ...; }; } | { ...; } | { ...; }>' is not assignable to type 'Promise<Prettify<AppRouteResponses<{ method: "POST"; body: ZodObject<{ title: ZodString; folderId: ZodOptional<ZodString>; externalId: ZodOptional<ZodNullable<ZodString>>; ... 7 more ...; attachments: ZodOptional<...>; }, "strip", ZodTypeAny, { ...; }, { ...; }>; summary: "Create a new template and get a presigned U...'.
Type '{ status: 500; body: { message: string; uploadUrl?: undefined; template?: undefined; }; } | { status: 400; body: { message: string; uploadUrl?: undefined; template?: undefined; }; } | { status: 200; body: { ...; }; } | { ...; } | { ...; }' is not assignable to type 'Prettify<AppRouteResponses<{ method: "POST"; body: ZodObject<{ title: ZodString; folderId: ZodOptional<ZodString>; externalId: ZodOptional<ZodNullable<ZodString>>; ... 7 more ...; attachments: ZodOptional<...>; }, "strip", ZodTypeAny, { ...; }, { ...; }>; summary: "Create a new template and get a presigned URL"; pat...'.
Type '{ status: 200; body: { uploadUrl: string; template: { envelopeId: string; type: $Enums.TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; message?: u...' is not assignable to type 'Prettify<AppRouteResponses<{ method: "POST"; body: ZodObject<{ title: ZodString; folderId: ZodOptional<ZodString>; externalId: ZodOptional<ZodNullable<ZodString>>; ... 7 more ...; attachments: ZodOptional<...>; }, "strip", ZodTypeAny, { ...; }, { ...; }>; summary: "Create a new template and get a presigned URL"; pat...'.
Type '{ status: 200; body: { uploadUrl: string; template: { envelopeId: string; type: $Enums.TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; message?: u...' is not assignable to type '{ status: 200; body: { template: { type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { ...; } | null; ... 15 more ...; templateDocumentDataId?: string | undefined; }; uploadUrl: string; }; }'.
The types of 'body.template.fields' are incompatible between these types.
Type '{ documentId: null; templateId: number; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: null; templateId: number; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/auth/server/lib/utils/organisation-portal.ts(50,6): error TS18047: 'organisation.organisationClaim.flags' is possibly 'null'.
../../packages/auth/server/lib/utils/organisation-portal.ts(50,43): error TS2339: Property 'authenticationPortal' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'authenticationPortal' does not exist on type 'string'.
../../packages/ee/server-only/limits/server.ts(83,7): error TS18047: 'organisation.organisationClaim.flags' is possibly 'null'.
../../packages/ee/server-only/limits/server.ts(83,44): error TS2339: Property 'unlimitedDocuments' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'unlimitedDocuments' does not exist on type 'string'.
../../packages/lib/server-only/email/get-email-context.ts(170,7): error TS18047: 'claims.flags' is possibly 'null'.
../../packages/lib/server-only/email/get-email-context.ts(170,20): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
../../packages/lib/server-only/email/get-email-context.ts(221,7): error TS18047: 'claims.flags' is possibly 'null'.
../../packages/lib/server-only/email/get-email-context.ts(221,20): error TS2339: Property 'hidePoweredBy' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'hidePoweredBy' does not exist on type 'string'.
../../packages/lib/server-only/email/get-email-context.ts(235,8): error TS18047: 'organisation.organisationClaim.flags' is possibly 'null'.
../../packages/lib/server-only/email/get-email-context.ts(235,45): error TS2339: Property 'emailDomains' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'emailDomains' does not exist on type 'string'.
../../packages/lib/server-only/envelope/create-envelope.ts(216,6): error TS18047: 'team.organisation.organisationClaim.flags' is possibly 'null'.
../../packages/lib/server-only/envelope/create-envelope.ts(216,48): error TS2339: Property 'cfr21' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'cfr21' does not exist on type 'string'.
../../packages/lib/server-only/envelope/get-envelope-for-direct-template-signing.ts(144,5): error TS2322: Type '{ documentMeta: { id: string; language: string; message: string | null; subject: string | null; timezone: string | null; dateFormat: string | null; redirectUrl: string | null; signingOrder: DocumentSigningOrder; ... 7 more ...; emailId: string | null; }; ... 4 more ...; directLink: { ...; } | null; } & { ...; }' is not assignable to type '{ type: "DOCUMENT" | "TEMPLATE"; id: string; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { language: string; timezone: string | null; dateFormat: string | null; ... 6 more ...; distributionMethod: "EMAIL" | "NONE"; }; ... 12 more ...; recipients: { ...; }[]; }'.
Types of property 'authOptions' are incompatible.
Type 'JsonValue' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; } | null'.
Type 'string' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; }'.
../../packages/lib/server-only/envelope/get-envelope-for-direct-template-signing.ts(148,7): error TS2322: Type '({ signature: { id: number; recipientId: number; fieldId: number; created: Date; signatureImageAsBase64: string | null; typedSignature: string | null; } | null; } & { type: FieldType; ... 12 more ...; inserted: boolean; })[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 11 more ...; ...'.
Type '{ signature: { id: number; recipientId: number; fieldId: number; created: Date; signatureImageAsBase64: string | null; typedSignature: string | null; } | null; } & { type: FieldType; ... 12 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 11 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/lib/server-only/envelope/get-envelope-for-recipient-signing.ts(284,5): error TS2322: Type '{ documentMeta: { id: string; language: string; message: string | null; subject: string | null; timezone: string | null; dateFormat: string | null; redirectUrl: string | null; signingOrder: DocumentSigningOrder; ... 7 more ...; emailId: string | null; }; team: { ...; }; user: { ...; }; envelopeItems: { ...; }[]; rec...' is not assignable to type '{ type: "DOCUMENT" | "TEMPLATE"; id: string; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { language: string; timezone: string | null; dateFormat: string | null; ... 6 more ...; distributionMethod: "EMAIL" | "NONE"; }; ... 12 more ...; recipients: { ...; }[]; }'.
Types of property 'authOptions' are incompatible.
Type 'JsonValue' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; } | null'.
Type 'string' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; }'.
../../packages/lib/server-only/envelope/get-envelope-for-recipient-signing.ts(285,5): error TS2322: Type '{ fields: ({ signature: { id: number; recipientId: number; fieldId: number; created: Date; signatureImageAsBase64: string | null; typedSignature: string | null; } | null; } & { type: FieldType; ... 12 more ...; inserted: boolean; })[]; } & { ...; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 13 more ...; signature?: { ...; } | ... 1 more ... | undefined; }[]; ... 10 more ...'.
Types of property 'fields' are incompatible.
Type '({ signature: { id: number; recipientId: number; fieldId: number; created: Date; signatureImageAsBase64: string | null; typedSignature: string | null; } | null; } & { type: FieldType; ... 12 more ...; inserted: boolean; })[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 11 more ...; ...'.
Type '{ signature: { id: number; recipientId: number; fieldId: number; created: Date; signatureImageAsBase64: string | null; typedSignature: string | null; } | null; } & { type: FieldType; ... 12 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 11 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/lib/server-only/envelope/update-envelope.ts(119,42): error TS18047: 'envelope.team.organisation.organisationClaim.flags' is possibly 'null'.
../../packages/lib/server-only/envelope/update-envelope.ts(119,93): error TS2339: Property 'cfr21' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'cfr21' does not exist on type 'string'.
../../packages/lib/server-only/field/sign-field-with-token.ts(212,24): error TS2339: Property 'readOnly' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'readOnly' does not exist on type 'string'.
../../packages/lib/server-only/field/sign-field-with-token.ts(217,42): error TS2589: Type instantiation is excessively deep and possibly infinite.
../../packages/lib/server-only/field/sign-field-with-token.ts(223,24): error TS2339: Property 'filter' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'filter' does not exist on type 'string'.
../../packages/lib/server-only/field/sign-field-with-token.ts(223,32): error TS7006: Parameter 'v' implicitly has an 'any' type.
../../packages/lib/server-only/field/sign-field-with-token.ts(223,54): error TS7006: Parameter 'v' implicitly has an 'any' type.
../../packages/lib/server-only/field/sign-field-with-token.ts(226,70): error TS2339: Property 'find' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'find' does not exist on type 'string'.
../../packages/lib/server-only/field/sign-field-with-token.ts(226,76): error TS7006: Parameter 'v' implicitly has an 'any' type.
../../packages/lib/server-only/field/update-envelope-fields.ts(102,77): error TS2339: Property 'type' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'type' does not exist on type 'string'.
../../packages/lib/server-only/organisation/create-organisation.ts(64,7): error TS2322: Type '{ id: string; typedSignatureEnabled: boolean; uploadSignatureEnabled: boolean; drawSignatureEnabled: boolean; emailReplyTo: string | null; emailId: string | null; documentVisibility: $Enums.DocumentVisibility; ... 10 more ...; brandingCompanyDetails: string; }' is not assignable to type '(Without<OrganisationGlobalSettingsCreateInput, OrganisationGlobalSettingsUncheckedCreateInput> & OrganisationGlobalSettingsUncheckedCreateInput) | (Without<...> & OrganisationGlobalSettingsCreateInput)'.
Type '{ id: string; typedSignatureEnabled: boolean; uploadSignatureEnabled: boolean; drawSignatureEnabled: boolean; emailReplyTo: string | null; emailId: string | null; documentVisibility: $Enums.DocumentVisibility; ... 10 more ...; brandingCompanyDetails: string; }' is not assignable to type 'Without<OrganisationGlobalSettingsCreateInput, OrganisationGlobalSettingsUncheckedCreateInput> & OrganisationGlobalSettingsUncheckedCreateInput'.
Type '{ id: string; typedSignatureEnabled: boolean; uploadSignatureEnabled: boolean; drawSignatureEnabled: boolean; emailReplyTo: string | null; emailId: string | null; documentVisibility: $Enums.DocumentVisibility; ... 10 more ...; brandingCompanyDetails: string; }' is not assignable to type 'OrganisationGlobalSettingsUncheckedCreateInput'.
Types of property 'emailDocumentSettings' are incompatible.
Type 'JsonValue' is not assignable to type 'JsonNull | InputJsonValue'.
Type 'null' is not assignable to type 'JsonNull | InputJsonValue'.
../../packages/lib/server-only/organisation/create-organisation.ts(206,7): error TS2698: Spread types may only be created from object types.
../../packages/lib/server-only/pdf/insert-field-in-pdf-v2.ts(41,7): error TS2322: Type '{ width: number; height: number; positionX: number; positionY: number; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 8 more ...; renderId: string; }' is not assignable to type 'FieldToRender'.
Type '{ width: number; height: number; positionX: number; positionY: number; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 8 more ...; renderId: string; }' is not assignable to type '{ renderId: string; width: number; height: number; positionX: number; positionY: number; fieldMeta?: { type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | u...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 10 more ... | undefined'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 10 more ... | undefined'.
../../packages/lib/server-only/recipient/create-envelope-recipients.ts(80,36): error TS18047: 'envelope.team.organisation.organisationClaim.flags' is possibly 'null'.
../../packages/lib/server-only/recipient/create-envelope-recipients.ts(80,87): error TS2339: Property 'cfr21' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'cfr21' does not exist on type 'string'.
../../packages/lib/server-only/recipient/set-document-recipients.ts(109,36): error TS18047: 'envelope.team.organisation.organisationClaim.flags' is possibly 'null'.
../../packages/lib/server-only/recipient/set-document-recipients.ts(109,87): error TS2339: Property 'cfr21' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'cfr21' does not exist on type 'string'.
../../packages/lib/server-only/recipient/set-template-recipients.ts(73,36): error TS18047: 'envelope.team.organisation.organisationClaim.flags' is possibly 'null'.
../../packages/lib/server-only/recipient/set-template-recipients.ts(73,87): error TS2339: Property 'cfr21' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'cfr21' does not exist on type 'string'.
../../packages/lib/server-only/recipient/update-envelope-recipients.ts(88,36): error TS18047: 'envelope.team.organisation.organisationClaim.flags' is possibly 'null'.
../../packages/lib/server-only/recipient/update-envelope-recipients.ts(88,87): error TS2339: Property 'cfr21' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'cfr21' does not exist on type 'string'.
../../packages/lib/server-only/team/create-team.ts(138,11): error TS2322: Type '{ id: string; typedSignatureEnabled: boolean | null; uploadSignatureEnabled: boolean | null; drawSignatureEnabled: boolean | null; emailReplyTo: string | null; emailId: string | null; ... 11 more ...; brandingCompanyDetails: string | null; }' is not assignable to type '(Without<TeamGlobalSettingsCreateInput, TeamGlobalSettingsUncheckedCreateInput> & TeamGlobalSettingsUncheckedCreateInput) | (Without<...> & TeamGlobalSettingsCreateInput)'.
Type '{ id: string; typedSignatureEnabled: boolean | null; uploadSignatureEnabled: boolean | null; drawSignatureEnabled: boolean | null; emailReplyTo: string | null; emailId: string | null; ... 11 more ...; brandingCompanyDetails: string | null; }' is not assignable to type 'Without<TeamGlobalSettingsCreateInput, TeamGlobalSettingsUncheckedCreateInput> & TeamGlobalSettingsUncheckedCreateInput'.
Type '{ id: string; typedSignatureEnabled: boolean | null; uploadSignatureEnabled: boolean | null; drawSignatureEnabled: boolean | null; emailReplyTo: string | null; emailId: string | null; ... 11 more ...; brandingCompanyDetails: string | null; }' is not assignable to type 'TeamGlobalSettingsUncheckedCreateInput'.
Types of property 'emailDocumentSettings' are incompatible.
Type 'JsonValue' is not assignable to type 'NullableJsonNullValueInput | InputJsonValue | undefined'.
Type 'null' is not assignable to type 'NullableJsonNullValueInput | InputJsonValue | undefined'.
../../packages/lib/server-only/template/create-document-from-direct-template.ts(661,59): error TS2339: Property 'actionAuth' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'actionAuth' does not exist on type 'string'.
../../packages/lib/server-only/template/create-document-from-template.ts(150,9): error TS2698: Spread types may only be created from object types.
../../packages/lib/server-only/template/create-document-from-template.ts(167,9): error TS2698: Spread types may only be created from object types.
../../packages/lib/server-only/template/create-document-from-template.ts(208,9): error TS2698: Spread types may only be created from object types.
../../packages/lib/server-only/template/create-document-from-template.ts(253,9): error TS2698: Spread types may only be created from object types.
../../packages/lib/server-only/template/create-document-from-template.ts(283,9): error TS2698: Spread types may only be created from object types.
../../packages/lib/utils/document.ts(85,5): error TS2322: Type 'JsonValue' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; } | null'.
Type 'string' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; }'.
../../packages/lib/utils/document.ts(86,5): error TS2322: Type 'JsonValue' is not assignable to type 'Record<string, string | number | boolean> | null'.
Type 'string' is not assignable to type 'Record<string, string | number | boolean>'.
../../packages/lib/utils/document.ts(125,5): error TS2322: Type 'JsonValue' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; } | null'.
Type 'string' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; }'.
../../packages/lib/utils/document.ts(126,5): error TS2322: Type 'JsonValue' is not assignable to type 'Record<string, string | number | boolean> | null'.
Type 'string' is not assignable to type 'Record<string, string | number | boolean>'.
../../packages/lib/utils/document.ts(146,5): error TS2322: Type '{ documentId: number | null; templateId: number | null; id: number; name: string; token: string; email: string; signingOrder: number | null; envelopeId: string; authOptions: JsonValue; ... 7 more ...; sendStatus: SendStatus; }[]' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; envelopeId: string; authOptions: { accessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; actionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD" | "EXPLICIT_NONE")[]; } | null; ... 9 more ...; templateId?: number | ... 1 more...'.
Type '{ documentId: number | null; templateId: number | null; id: number; name: string; token: string; email: string; signingOrder: number | null; envelopeId: string; authOptions: JsonValue | null; ... 7 more ...; sendStatus: $Enums.SendStatus; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; envelopeId: string; authOptions: { accessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; actionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD" | "EXPLICIT_NONE")[]; } | null; ... 9 more ...; templateId?: number | ... 1 more...'.
Types of property 'authOptions' are incompatible.
Type 'JsonValue' is not assignable to type '{ accessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; actionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD" | "EXPLICIT_NONE")[]; } | null'.
Type 'string' is not assignable to type '{ accessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; actionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD" | "EXPLICIT_NONE")[]; }'.
../../packages/lib/utils/templates.ts(61,5): error TS2322: Type 'JsonValue' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; } | null'.
Type 'string' is not assignable to type '{ globalAccessAuth: ("ACCOUNT" | "TWO_FACTOR_AUTH")[]; globalActionAuth: ("ACCOUNT" | "PASSKEY" | "TWO_FACTOR_AUTH" | "PASSWORD")[]; }'.
../../packages/trpc/server/admin-router/find-subscription-claims.ts(17,10): error TS2345: Argument of type '({ input }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: SessionUser; session: { id: string; createdAt: Date; updatedAt: Date; userId: number; ipAddress: string | null; userAgent: string | null; sessionToken: string; expiresAt: Date; }; ... 4 more ...; res: Response; }, { ...; }>) => Promise<...>' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: SessionUser; session: { id: string; createdAt: Date; updatedAt: Date; userId: number; ipAddress: string | null; userAgent: string | null; sessionToken: string; expiresAt: Date; }; ... 4 more ...; res: Response; }, { ...; }, { ...; }, unknown>'.
Type 'Promise<{ data: { id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: JsonValue; }[]; count: number; currentPage: number; perPage: number; totalPages: number; }>' is not assignable to type 'MaybePromise<{ data: { id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; ... 9 more ...; allowEnvelopes?: boolean | undefined; }; }[]; count: number; perPage: number; curr...'.
Type 'Promise<{ data: { id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: JsonValue; }[]; count: number; currentPage: number; perPage: number; totalPages: number; }>' is not assignable to type 'Promise<{ data: { id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; ... 9 more ...; allowEnvelopes?: boolean | undefined; }; }[]; count: number; perPage: number; currentPa...'.
Type '{ data: { id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: Prisma.JsonValue; }[]; count: number; currentPage: number; perPage: number; totalPages: number; }' is not assignable to type '{ data: { id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; ... 9 more ...; allowEnvelopes?: boolean | undefined; }; }[]; count: number; perPage: number; currentPage: numb...'.
Types of property 'data' are incompatible.
Type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: JsonValue; }[]' is not assignable to type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; ... 9 more ...; allowEnvelopes?: boolean | undefined; }; }[]'.
Type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: JsonValue; }' is not assignable to type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; ... 9 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Types of property 'flags' are incompatible.
Type 'JsonValue' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
Type 'null' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
../../packages/trpc/server/admin-router/find-subscription-claims.ts(70,5): error TS2322: Type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: JsonValue; }[]' is not assignable to type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; ... 9 more ...; allowEnvelopes?: boolean | undefined; }; }[]'.
Type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: JsonValue; }' is not assignable to type '{ id: string; name: string; createdAt: Date; updatedAt: Date; locked: boolean; teamCount: number; memberCount: number; envelopeItemCount: number; flags: { allowCustomBranding?: boolean | undefined; ... 9 more ...; allowEnvelopes?: boolean | undefined; }; }'.
Types of property 'flags' are incompatible.
Type 'JsonValue' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
Type 'null' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
../../packages/trpc/server/admin-router/get-admin-organisation.ts(13,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: SessionUser; session: { id: string; createdAt: Date; updatedAt: Date; userId: number; ipAddress: string | null; userAgent: string | null; sessionToken: string; expiresAt: Date; }; ... 4 more ...; res: Response; }, { ...; }>) => Promise<...>' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: SessionUser; session: { id: string; createdAt: Date; updatedAt: Date; userId: number; ipAddress: string | null; userAgent: string | null; sessionToken: string; expiresAt: Date; }; ... 4 more ...; res: Response; }, { ...; }, { ...; }, unknown>'.
Type 'Promise<{ subscription: { id: number; status: SubscriptionStatus; priceId: string; createdAt: Date; updatedAt: Date; customerId: string; organisationId: string; planId: string; periodEnd: Date | null; cancelAtPeriodEnd: boolean; } | null; organisationClaim: { ...; }; organisationGlobalSettings: { ...; }; members: ({...' is not assignable to type 'MaybePromise<{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 6 more ...; teams: { ...; }[]; }>'.
Type 'Promise<{ subscription: { id: number; status: SubscriptionStatus; priceId: string; createdAt: Date; updatedAt: Date; customerId: string; organisationId: string; planId: string; periodEnd: Date | null; cancelAtPeriodEnd: boolean; } | null; organisationClaim: { ...; }; organisationGlobalSettings: { ...; }; members: ({...' is not assignable to type 'Promise<{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 6 more ...; teams: { ...; }[]; }>'.
Type '{ subscription: { id: number; status: SubscriptionStatus; priceId: string; createdAt: Date; updatedAt: Date; customerId: string; organisationId: string; planId: string; periodEnd: Date | null; cancelAtPeriodEnd: boolean; } | null; organisationClaim: { ...; }; organisationGlobalSettings: { ...; }; members: ({ ...; } ...' is not assignable to type '{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 6 more ...; teams: { ...; }[]; }'.
The types of 'organisationClaim.flags' are incompatible between these types.
Type 'JsonValue' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
Type 'null' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
../../packages/trpc/server/admin-router/update-subscription-claim.ts(30,49): error TS2345: Argument of type 'JsonValue' is not assignable to parameter of type 'Partial<{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }>'.
Type 'null' is not assignable to type 'Partial<{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }>'.
../../packages/trpc/server/document-router/attachment/find-attachments.ts(24,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ data: { data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]; }>' is not assignable to type 'MaybePromise<{ data: { data: string; type: "link"; id: string; label: string; }[]; }>'.
Type 'Promise<{ data: { data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]; }>' is not assignable to type 'Promise<{ data: { data: string; type: "link"; id: string; label: string; }[]; }>'.
Type '{ data: { data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]; }' is not assignable to type '{ data: { data: string; type: "link"; id: string; label: string; }[]; }'.
Types of property 'data' are incompatible.
Type '{ data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]' is not assignable to type '{ data: string; type: "link"; id: string; label: string; }[]'.
Type '{ data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }' is not assignable to type '{ data: string; type: "link"; id: string; label: string; }'.
Types of property 'type' are incompatible.
Type 'string' is not assignable to type '"link"'.
../../packages/trpc/server/document-router/create-document-temporary.ts(28,13): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ document: { envelopeId: string; documentDataId: string; documentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; folder: { ...; } | null; uploadUrl: string; }>' is not assignable to type 'MaybePromise<{ document: { id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; ... 15 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined; }; uploadUr...'.
Type 'Promise<{ document: { envelopeId: string; documentDataId: string; documentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; folder: { ...; } | null; uploadUrl: string; }>' is not assignable to type 'Promise<{ document: { id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; ... 15 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined; }; uploadUrl: st...'.
Type '{ document: { envelopeId: string; documentDataId: string; documentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; folder: { ...; } | null; uploadUrl: string; }' is not assignable to type '{ document: { id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; ... 15 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined; }; uploadUrl: string; }'.
The types of 'document.fields' are incompatible between these types.
Type '{ documentId: number; templateId: null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number; templateId: null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/document-router/get-document.ts(14,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ envelopeId: string; internalVersion: number; documentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; id: number; ... 31 more ...; documentMetaId: string; }>' is not assignable to type 'MaybePromise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 14 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined;...'.
Type 'Promise<{ envelopeId: string; internalVersion: number; documentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; id: number; ... 31 more ...; documentMetaId: string; }>' is not assignable to type 'Promise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 14 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined; }>'.
Type '{ envelopeId: string; internalVersion: number; documentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 32 more ...; documentMetaId: string; }' is not assignable to type '{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 14 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined; }'.
Types of property 'fields' are incompatible.
Type '{ documentId: number; templateId: null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number; templateId: null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/document-router/update-document.ts(18,13): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ id: number; envelopeId: string; type: EnvelopeType; source: DocumentSource; status: DocumentStatus; createdAt: Date; updatedAt: Date; ... 18 more ...; documentMetaId: string; }>' is not assignable to type 'MaybePromise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; createdAt: Date; updatedAt: Date; userId: number; ... 13 more ...; documentDataId?: string | undefined; }>'.
Type 'Promise<{ id: number; envelopeId: string; type: EnvelopeType; source: DocumentSource; status: DocumentStatus; createdAt: Date; updatedAt: Date; ... 18 more ...; documentMetaId: string; }>' is not assignable to type 'Promise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; createdAt: Date; updatedAt: Date; userId: number; ... 13 more ...; documentDataId?: string | undefined; }>'.
Type '{ id: number; envelopeId: string; type: $Enums.EnvelopeType; source: $Enums.DocumentSource; status: $Enums.DocumentStatus; ... 20 more ...; documentMetaId: string; }' is not assignable to type '{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; createdAt: Date; updatedAt: Date; userId: number; ... 13 more ...; documentDataId?: string | undefined; }'.
Types of property 'formValues' are incompatible.
Type 'JsonValue' is not assignable to type 'Record<string, string | number | boolean> | null'.
Type 'string' is not assignable to type 'Record<string, string | number | boolean>'.
../../packages/trpc/server/embedding-router/create-embedding-presign-token.ts(47,14): error TS18047: 'organisationClaim.flags' is possibly 'null'.
../../packages/trpc/server/embedding-router/create-embedding-presign-token.ts(47,38): error TS2339: Property 'embedAuthoring' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'embedAuthoring' does not exist on type 'string'.
../../packages/trpc/server/embedding-router/get-multi-sign-document.ts(17,10): error TS2345: Argument of type '({ input, ctx: { metadata } }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: null; session: null; metadata: ApiRequestMetadata; teamId: number | undefined; logger: Logger<...>; req: Request; res: Response; } | { ...; }, { ...; }>) => Promise<...>' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: null; session: null; metadata: ApiRequestMetadata; teamId: number | undefined; logger: Logger<...>; req: Request; res: Response; } | { ...; }, { ...; }, { ...; }, unknown>'.
Type 'Promise<{ folder: null; fields: { recipient: { documentId: number; templateId: null; fields: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]; ... 14 more ...; sendStatus: SendStatus; }; ... 16 more ...; inserted: boolean; }[]; ... 3...' is not assignable to type 'MaybePromise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 10 more ...; emailSettings?: unknown; } | null; ... 19 more ...; documentDataId?: string | undefined; }>'.
Type 'Promise<{ folder: null; fields: { recipient: { documentId: number; templateId: null; fields: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]; ... 14 more ...; sendStatus: SendStatus; }; ... 16 more ...; inserted: boolean; }[]; ... 3...' is not assignable to type 'Promise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 10 more ...; emailSettings?: unknown; } | null; ... 19 more ...; documentDataId?: string | undefined; }>'.
Type '{ folder: null; fields: { recipient: { documentId: number; templateId: null; fields: { type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 14 more ...; sendStatus: $Enums.SendStatus; }; ... 16 more ...; inserted: boolean; }[]; ... 31 more ...; documentMetaId:...' is not assignable to type '{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 10 more ...; emailSettings?: unknown; } | null; ... 19 more ...; documentDataId?: string | undefined; }'.
Types of property 'fields' are incompatible.
Type '{ recipient: { documentId: number; templateId: null; fields: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 14 more ...; sendStatus: SendStatus; }; ... 16 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; signature: { id: number; recipientId: number; fieldId: number; created: Date; signatureImageAsBase64: string | null; typedSignature: string | null; } | null; ... 12 mor...'.
Type '{ recipient: { documentId: number; templateId: null; fields: { type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }[]; ... 14 more ...; sendStatus: $Enums.SendStatus; }; ... 16 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; signature: { id: number; recipientId: number; fieldId: number; created: Date; signatureImageAsBase64: string | null; typedSignature: string | null; } | null; ... 12 mor...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/enterprise-router/create-organisation-email-domain.ts(50,10): error TS18047: 'organisation.organisationClaim.flags' is possibly 'null'.
../../packages/trpc/server/enterprise-router/create-organisation-email-domain.ts(50,47): error TS2339: Property 'emailDomains' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'emailDomains' does not exist on type 'string'.
../../packages/trpc/server/enterprise-router/get-organisation-authentication-portal.ts(67,8): error TS18047: 'organisation.organisationClaim.flags' is possibly 'null'.
../../packages/trpc/server/enterprise-router/get-organisation-authentication-portal.ts(67,45): error TS2339: Property 'authenticationPortal' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'authenticationPortal' does not exist on type 'string'.
../../packages/trpc/server/enterprise-router/update-organisation-authentication-portal.ts(50,10): error TS18047: 'organisation.organisationClaim.flags' is possibly 'null'.
../../packages/trpc/server/enterprise-router/update-organisation-authentication-portal.ts(50,47): error TS2339: Property 'authenticationPortal' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'authenticationPortal' does not exist on type 'string'.
../../packages/trpc/server/envelope-router/attachment/find-attachments.ts(16,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ data: { data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]; }>' is not assignable to type 'MaybePromise<{ data: { data: string; type: "link"; id: string; label: string; }[]; }>'.
Type 'Promise<{ data: { data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]; }>' is not assignable to type 'Promise<{ data: { data: string; type: "link"; id: string; label: string; }[]; }>'.
Type '{ data: { data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]; }' is not assignable to type '{ data: { data: string; type: "link"; id: string; label: string; }[]; }'.
Types of property 'data' are incompatible.
Type '{ data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }[]' is not assignable to type '{ data: string; type: "link"; id: string; label: string; }[]'.
Type '{ data: string; type: string; id: string; label: string; createdAt: Date; updatedAt: Date; envelopeId: string; }' is not assignable to type '{ data: string; type: "link"; id: string; label: string; }'.
Types of property 'type' are incompatible.
Type 'string' is not assignable to type '"link"'.
../../packages/trpc/server/envelope-router/envelope-fields/create-envelope-fields.ts(14,13): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ data: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ data: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templat...'.
Type 'Promise<{ data: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ data: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?:...'.
Type '{ data: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ data: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Types of property 'data' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/envelope-router/envelope-fields/get-envelope-field.ts(14,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'MaybePromise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 10 more ...; inserted: boole...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'Promise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 10 more ...; inserted: boolean; }>'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 10 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.ts(14,13): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ data: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ data: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templat...'.
Type 'Promise<{ data: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ data: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?:...'.
Type '{ data: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ data: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Types of property 'data' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/envelope-router/envelope-recipients/get-envelope-recipient.ts(16,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }[]; } & { ...; }>' is not assignable to type 'MaybePromise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ...'.
Type 'Promise<{ fields: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }[]; } & { ...; }>' is not assignable to type 'Promise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 9...'.
Type '{ fields: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }[]; } & { ...; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 9 more .....'.
Types of property 'fields' are incompatible.
Type '{ type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/envelope-router/get-envelope.ts(14,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ user: { id: number; name: string; email: string; }; documentMeta: { id: string; language: string; message: string | null; subject: string | null; timezone: string | null; dateFormat: string | null; ... 9 more ...; emailId: string | null; }; ... 30 more ...; documentMetaId: string; }>' is not assignable to type 'MaybePromise<{ type: "DOCUMENT" | "TEMPLATE"; id: string; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; ... 14 more ...; emailSettings?: unknown; }; ... 23 more ...; authOptions?: unknown; }>'.
Type 'Promise<{ user: { id: number; name: string; email: string; }; documentMeta: { id: string; language: string; message: string | null; subject: string | null; timezone: string | null; dateFormat: string | null; ... 9 more ...; emailId: string | null; }; ... 30 more ...; documentMetaId: string; }>' is not assignable to type 'Promise<{ type: "DOCUMENT" | "TEMPLATE"; id: string; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; ... 14 more ...; emailSettings?: unknown; }; ... 23 more ...; authOptions?: unknown; }>'.
Type '{ user: { id: number; name: string; email: string; }; documentMeta: { id: string; language: string; message: string | null; subject: string | null; timezone: string | null; dateFormat: string | null; ... 9 more ...; emailId: string | null; }; ... 30 more ...; documentMetaId: string; }' is not assignable to type '{ type: "DOCUMENT" | "TEMPLATE"; id: string; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; ... 14 more ...; emailSettings?: unknown; }; ... 23 more ...; authOptions?: unknown; }'.
Types of property 'fields' are incompatible.
Type '{ type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 10 more ...; ...'.
Type '{ type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 10 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/envelope-router/sign-envelope-field.ts(22,13): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: null; session: null; metadata: ApiRequestMetadata; teamId: number | undefined; logger: Logger<...>; req: Request; res: Response; } | { ...; }, { ...; }>) => Promise<...>' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: null; session: null; metadata: ApiRequestMetadata; teamId: number | undefined; logger: Logger<...>; req: Request; res: Response; } | { ...; }, { ...; }, { ...; }, unknown>'.
Type 'Promise<{ signedField: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }; }>' is not assignable to type 'MaybePromise<{ signedField: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 11 more ...; ...'.
Type 'Promise<{ signedField: { type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; recipientId: number; ... 5 more ...; inserted: boolean; }; }>' is not assignable to type 'Promise<{ signedField: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 11 more ...; signa...'.
Type '{ signedField: { type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }; }' is not assignable to type '{ signedField: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 11 more ...; signature?: {...'.
The types of 'signedField.fieldMeta' are incompatible between these types.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/envelope-router/sign-envelope-field.ts(123,26): error TS2339: Property 'readOnly' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'readOnly' does not exist on type 'string'.
../../packages/trpc/server/envelope-router/update-envelope.ts(14,13): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ type: EnvelopeType; id: string; source: DocumentSource; status: DocumentStatus; createdAt: Date; updatedAt: Date; userId: number; ... 17 more ...; documentMetaId: string; }>' is not assignable to type 'MaybePromise<{ type: "DOCUMENT" | "TEMPLATE"; id: string; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; createdAt: Date; ... 15 more ...; authOptions?: unknown; }>'.
Type 'Promise<{ type: EnvelopeType; id: string; source: DocumentSource; status: DocumentStatus; createdAt: Date; updatedAt: Date; userId: number; ... 17 more ...; documentMetaId: string; }>' is not assignable to type 'Promise<{ type: "DOCUMENT" | "TEMPLATE"; id: string; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; createdAt: Date; ... 15 more ...; authOptions?: unknown; }>'.
Type '{ type: EnvelopeType; id: string; source: DocumentSource; status: DocumentStatus; createdAt: Date; updatedAt: Date; userId: number; ... 17 more ...; documentMetaId: string; }' is not assignable to type '{ type: "DOCUMENT" | "TEMPLATE"; id: string; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; createdAt: Date; ... 15 more ...; authOptions?: unknown; }'.
Types of property 'formValues' are incompatible.
Type 'JsonValue' is not assignable to type 'Record<string, string | number | boolean> | null'.
Type 'string' is not assignable to type 'Record<string, string | number | boolean>'.
../../packages/trpc/server/field-router/router.ts(61,12): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'MaybePromise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: nu...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'Promise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(94,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'MaybePromise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: nu...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'Promise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(140,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: numbe...'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(182,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'MaybePromise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: nu...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'Promise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(222,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: numbe...'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(285,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { formId: string | undefined; documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; ... 9 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templ...'.
Type 'Promise<{ fields: { formId: string | undefined; documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; ... 9 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId...'.
Type '{ fields: { formId: string | undefined; documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: numbe...'.
Types of property 'fields' are incompatible.
Type '{ formId: string | undefined; documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ formId: string | undefined; documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(333,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'MaybePromise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: nu...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'Promise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(380,12): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'MaybePromise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: nu...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'Promise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(413,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: numbe...'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(455,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'MaybePromise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: nu...'.
Type 'Promise<{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }>' is not assignable to type 'Promise<{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: number ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(495,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: numbe...'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/field-router/router.ts(557,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { formId: string | undefined; documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; ... 9 more ...; inserted: boolean; }[]; }>' is not assignable to type 'MaybePromise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templ...'.
Type 'Promise<{ fields: { formId: string | undefined; documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; ... 9 more ...; inserted: boolean; }[]; }>' is not assignable to type 'Promise<{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId...'.
Type '{ fields: { formId: string | undefined; documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; }' is not assignable to type '{ fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; ... 5 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; templateId?: numbe...'.
Types of property 'fields' are incompatible.
Type '{ formId: string | undefined; documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ formId: string | undefined; documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/organisation-router/get-organisation-session.ts(69,3): error TS2322: Type '{ teams: { currentTeamRole: TeamMemberRole; teamGroups: ({ organisationGroup: { type: OrganisationGroupType; id: string; name: string | null; organisationRole: OrganisationMemberRole; organisationId: string; }; } & { ...; })[]; ... 6 more ...; teamGlobalSettingsId: string; }[]; ... 15 more ...; organisationAuthentic...' is not assignable to type '{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 5 more ...; currentOrganisationRole: "ADMIN" | ... 1 more ... | "MEMBER"; }[]'.
Type '{ teams: { currentTeamRole: TeamMemberRole; teamGroups: ({ organisationGroup: { type: $Enums.OrganisationGroupType; id: string; name: string | null; organisationRole: $Enums.OrganisationMemberRole; organisationId: string; }; } & { ...; })[]; ... 6 more ...; teamGlobalSettingsId: string; }[]; ... 15 more ...; organis...' is not assignable to type '{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 5 more ...; currentOrganisationRole: "ADMIN" | ... 1 more ... | "MEMBER"; }'.
The types of 'organisationClaim.flags' are incompatible between these types.
Type 'JsonValue' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
Type 'null' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
../../packages/trpc/server/organisation-router/get-organisation.ts(14,10): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ teams: { id: number; name: string; url: string; createdAt: Date; avatarImageId: string | null; organisationId: string; teamGlobalSettingsId: string; }[]; subscription: { id: number; status: SubscriptionStatus; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 14 more ...; organisationAuthentication...' is not assignable to type 'MaybePromise<{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 6 more ...; teams: { ...; }[]; }>'.
Type 'Promise<{ teams: { id: number; name: string; url: string; createdAt: Date; avatarImageId: string | null; organisationId: string; teamGlobalSettingsId: string; }[]; subscription: { id: number; status: SubscriptionStatus; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 14 more ...; organisationAuthentication...' is not assignable to type 'Promise<{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 6 more ...; teams: { ...; }[]; }>'.
Type '{ teams: { id: number; name: string; url: string; createdAt: Date; avatarImageId: string | null; organisationId: string; teamGlobalSettingsId: string; }[]; subscription: { id: number; status: $Enums.SubscriptionStatus; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 14 more ...; organisationAuthenticationP...' is not assignable to type '{ type: "PERSONAL" | "ORGANISATION"; id: string; name: string; url: string; createdAt: Date; updatedAt: Date; subscription: { id: number; status: "ACTIVE" | "PAST_DUE" | "INACTIVE"; ... 7 more ...; cancelAtPeriodEnd: boolean; } | null; ... 6 more ...; teams: { ...; }[]; }'.
The types of 'organisationClaim.flags' are incompatible between these types.
Type 'JsonValue' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
Type 'null' is not assignable to type '{ allowCustomBranding?: boolean | undefined; hidePoweredBy?: boolean | undefined; unlimitedDocuments?: boolean | undefined; emailDomains?: boolean | undefined; embedAuthoring?: boolean | undefined; ... 5 more ...; allowEnvelopes?: boolean | undefined; }'.
../../packages/trpc/server/recipient-router/router.ts(65,12): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 17 more ...; sendStatus: SendStatus; }>' is not assignable to type 'MaybePromise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 17 more ...; sendStatus: SendStatus; }>' is not assignable to type 'Promise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 1...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 17 more ...; sendStatus: $Enums.SendStatus; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/recipient-router/router.ts(174,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }>' is not assignable to type 'MaybePromise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }>' is not assignable to type 'Promise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 1...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: $Enums.SendStatus; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/recipient-router/router.ts(213,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ recipients: { fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }[]; }>' is not assignable to type 'MaybePromise<{ recipients: { id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | ... 4 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ...'.
Type 'Promise<{ recipients: { fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }[]; }>' is not assignable to type 'Promise<{ recipients: { id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | ... 4 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ...; ...'.
Type '{ recipients: { fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: $Enums.SendStatus; }[]; }' is not assignable to type '{ recipients: { id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | ... 4 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ...; authOpti...'.
Types of property 'recipients' are incompatible.
Type '{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }[]' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: $Enums.SendStatus; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/recipient-router/router.ts(320,12): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 17 more ...; sendStatus: SendStatus; }>' is not assignable to type 'MaybePromise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 17 more ...; sendStatus: SendStatus; }>' is not assignable to type 'Promise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 1...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 17 more ...; sendStatus: $Enums.SendStatus; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/recipient-router/router.ts(429,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }>' is not assignable to type 'MaybePromise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ...'.
Type 'Promise<{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }>' is not assignable to type 'Promise<{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 1...'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: $Enums.SendStatus; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/recipient-router/router.ts(468,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ recipients: { fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }[]; }>' is not assignable to type 'MaybePromise<{ recipients: { id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | ... 4 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ...'.
Type 'Promise<{ recipients: { fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }[]; }>' is not assignable to type 'Promise<{ recipients: { id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | ... 4 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ...; ...'.
Type '{ recipients: { fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: $Enums.SendStatus; }[]; }' is not assignable to type '{ recipients: { id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | ... 4 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ...; authOpti...'.
Types of property 'recipients' are incompatible.
Type '{ fields: { documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: SendStatus; }[]' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Type '{ fields: { documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; ... 10 more ...; inserted: boolean; }[]; ... 16 more ...; sendStatus: $Enums.SendStatus; }' is not assignable to type '{ id: number; name: string; token: string; email: string; signingOrder: number | null; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 11 more ....'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/template-router/router.ts(74,12): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ data: { id: number; envelopeId: string; type: TemplateType; visibility: DocumentVisibility; externalId: string | null; title: string; userId: number; ... 12 more ...; directLink: { ...; } | null; }[]; count: number; currentPage: number; perPage: number; totalPages: number; }>' is not assignable to type 'MaybePromise<{ data: { type: "PUBLIC" | "PRIVATE"; id: number; team: { id: number; url: string; } | null; createdAt: Date; updatedAt: Date; userId: number; fields: { type: "EMAIL" | "SIGNATURE" | ... 8 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 13 more ...; tem...'.
Type 'Promise<{ data: { id: number; envelopeId: string; type: TemplateType; visibility: DocumentVisibility; externalId: string | null; title: string; userId: number; ... 12 more ...; directLink: { ...; } | null; }[]; count: number; currentPage: number; perPage: number; totalPages: number; }>' is not assignable to type 'Promise<{ data: { type: "PUBLIC" | "PRIVATE"; id: number; team: { id: number; url: string; } | null; createdAt: Date; updatedAt: Date; userId: number; fields: { type: "EMAIL" | "SIGNATURE" | ... 8 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 13 more ...; template...'.
Type '{ data: { id: number; envelopeId: string; type: $Enums.TemplateType; visibility: $Enums.DocumentVisibility; externalId: string | null; title: string; userId: number; teamId: number; ... 11 more ...; directLink: { ...; } | null; }[]; count: number; currentPage: number; perPage: number; totalPages: number; }' is not assignable to type '{ data: { type: "PUBLIC" | "PRIVATE"; id: number; team: { id: number; url: string; } | null; createdAt: Date; updatedAt: Date; userId: number; fields: { type: "EMAIL" | "SIGNATURE" | ... 8 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 13 more ...; templateDocument...'.
Types of property 'data' are incompatible.
Type '{ id: number; envelopeId: string; type: TemplateType; visibility: DocumentVisibility; externalId: string | null; title: string; userId: number; teamId: number; ... 11 more ...; directLink: { ...; } | null; }[]' is not assignable to type '{ type: "PUBLIC" | "PRIVATE"; id: number; team: { id: number; url: string; } | null; createdAt: Date; updatedAt: Date; userId: number; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | ... 7 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 13 more ...; templ...'.
Type '{ id: number; envelopeId: string; type: $Enums.TemplateType; visibility: $Enums.DocumentVisibility; externalId: string | null; title: string; userId: number; teamId: number; ... 11 more ...; directLink: { ...; } | null; }' is not assignable to type '{ type: "PUBLIC" | "PRIVATE"; id: number; team: { id: number; url: string; } | null; createdAt: Date; updatedAt: Date; userId: number; fields: { type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | ... 7 more ... | "DROPDOWN"; ... 14 more ...; templateId?: number | ... 1 more ... | undefined; }[]; ... 13 more ...; templ...'.
Types of property 'fields' are incompatible.
Type '{ documentId: number | null; templateId: number | null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; ... 7 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number | null; templateId: number | null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; ... 9 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/template-router/router.ts(137,12): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ envelopeId: string; type: TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }>' is not assignable to type 'MaybePromise<{ type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateDocumentDataId?: string | undefined;...'.
Type 'Promise<{ envelopeId: string; type: TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }>' is not assignable to type 'Promise<{ type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateDocumentDataId?: string | undefined; }>'.
Type '{ envelopeId: string; type: $Enums.TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }' is not assignable to type '{ type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateDocumentDataId?: string | undefined; }'.
Types of property 'fields' are incompatible.
Type '{ documentId: null; templateId: number; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: null; templateId: number; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/template-router/router.ts(253,15): error TS2345: Argument of type '({ input, ctx }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ template: { envelopeId: string; type: TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; uploadUrl: string; }>' is not assignable to type 'MaybePromise<{ template: { type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateDocumentDataId?: string ...'.
Type 'Promise<{ template: { envelopeId: string; type: TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; uploadUrl: string; }>' is not assignable to type 'Promise<{ template: { type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateDocumentDataId?: string | und...'.
Type '{ template: { envelopeId: string; type: $Enums.TemplateType; templateDocumentDataId: string; templateDocumentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 30 more ...; documentMetaId: string; }; uploadUrl: string; }' is not assignable to type '{ template: { type: "PUBLIC" | "PRIVATE"; id: number; createdAt: Date; updatedAt: Date; userId: number; user: { id: number; name: string | null; email: string; }; folder: { type: "DOCUMENT" | "TEMPLATE"; ... 8 more ...; parentId: string | null; } | null; ... 15 more ...; templateDocumentDataId?: string | undefined; ...'.
The types of 'template.fields' are incompatible between these types.
Type '{ documentId: null; templateId: number; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: null; templateId: number; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/trpc/server/template-router/router.ts(453,15): error TS2345: Argument of type '({ ctx, input }: ProcedureResolverOptions<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "ap...' is not assignable to parameter of type 'ProcedureResolver<TrpcContext, TrpcRouteMeta, { user: { id: number; name: string | null; email: string; disabled: boolean; }; session: null; metadata: { auditUser: { id: null; email: null; name: string; } | { ...; }; auth: "api"; requestMetadata: { ...; }; source: "app" | ... 1 more ... | "apiV2"; }; teamId: number;...'.
Type 'Promise<{ envelopeId: string; internalVersion: number; documentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; id: number; ... 31 more ...; documentMetaId: string; }>' is not assignable to type 'MaybePromise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 14 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined;...'.
Type 'Promise<{ envelopeId: string; internalVersion: number; documentData: { envelopeItemId: string; data: string; type: DocumentDataType; id: string; initialData: string; }; id: number; ... 31 more ...; documentMetaId: string; }>' is not assignable to type 'Promise<{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 14 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined; }>'.
Type '{ envelopeId: string; internalVersion: number; documentData: { envelopeItemId: string; data: string; type: $Enums.DocumentDataType; id: string; initialData: string; }; ... 32 more ...; documentMetaId: string; }' is not assignable to type '{ id: number; source: "DOCUMENT" | "TEMPLATE" | "TEMPLATE_DIRECT_LINK"; status: "DRAFT" | "PENDING" | "COMPLETED" | "REJECTED"; documentMeta: { id: string; language: string; message: string | null; ... 14 more ...; documentId?: number | undefined; }; ... 20 more ...; documentDataId?: string | undefined; }'.
Types of property 'fields' are incompatible.
Type '{ documentId: number; templateId: null; type: FieldType; id: number; fieldMeta: JsonValue; envelopeId: string; secondaryId: string; width: Decimal; height: Decimal; ... 6 more ...; inserted: boolean; }[]' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Type '{ documentId: number; templateId: null; type: $Enums.FieldType; id: number; fieldMeta: JsonValue | null; envelopeId: string; secondaryId: string; ... 8 more ...; inserted: boolean; }' is not assignable to type '{ type: "EMAIL" | "SIGNATURE" | "FREE_SIGNATURE" | "INITIALS" | "NAME" | "DATE" | "TEXT" | "NUMBER" | "RADIO" | "CHECKBOX" | "DROPDOWN"; id: number; fieldMeta: { type: "initials"; label?: string | undefined; ... 4 more ...; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null; ... 12 more ...; ...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 9 more ... | null'.
../../packages/ui/components/document/document-read-only-fields.tsx(181,29): error TS2322: Type 'DocumentField' is not assignable to type '{ inserted?: boolean | undefined; customText?: string | undefined; type: FieldType; fieldMeta?: { type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefi...'.
Types of property 'fieldMeta' are incompatible.
Type 'JsonValue' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 10 more ... | undefined'.
Type 'string' is not assignable to type '{ type: "initials"; label?: string | undefined; placeholder?: string | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; fontSize?: number | undefined; textAlign?: "left" | ... 2 more ... | undefined; } | ... 10 more ... | undefined'.
../../packages/ui/components/document/envelope-recipient-field-tooltip.tsx(162,33): error TS2339: Property 'readOnly' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'readOnly' does not exist on type 'string'.
../../packages/ui/components/document/envelope-recipient-field-tooltip.tsx(169,32): error TS2339: Property 'readOnly' does not exist on type 'string | number | boolean | JsonObject | JsonArray'.
Property 'readOnly' does not exist on type 'string'.
npm error Lifecycle script `typecheck` failed with error:
npm error code 2
npm error path /Users/lucas/dev/documenso/apps/remix
npm error workspace @documenso/remix@2.0.14
npm error location /Users/lucas/dev/documenso/apps/remix
npm error command failed
npm error command sh -c react-router typegen && tsc
npm error Lifecycle script `build:app` failed with error:
npm error code 2
npm error path /Users/lucas/dev/documenso/apps/remix
npm error workspace @documenso/remix@2.0.14
npm error location /Users/lucas/dev/documenso/apps/remix
npm error command failed
npm error command sh -c npm run typecheck && cross-env NODE_ENV=production react-router build
npm error Lifecycle script `build` failed with error:
npm error code 2
npm error path /Users/lucas/dev/documenso/apps/remix
npm error workspace @documenso/remix@2.0.14
npm error location /Users/lucas/dev/documenso/apps/remix
npm error command failed
npm error command sh -c ./.bin/build.sh

View File

@ -50,13 +50,6 @@ ENV NEXT_PRIVATE_ENCRYPTION_KEY="$NEXT_PRIVATE_ENCRYPTION_KEY"
ARG NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY="DEADBEEF"
ENV NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY="$NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY"
# Telemetry credentials (optional, baked into image at build time)
ARG NEXT_PRIVATE_TELEMETRY_KEY=""
ENV NEXT_PRIVATE_TELEMETRY_KEY="$NEXT_PRIVATE_TELEMETRY_KEY"
ARG NEXT_PRIVATE_TELEMETRY_HOST=""
ENV NEXT_PRIVATE_TELEMETRY_HOST="$NEXT_PRIVATE_TELEMETRY_HOST"
# Uncomment and use build args to enable remote caching
# ARG TURBO_TEAM
@ -90,13 +83,6 @@ FROM base AS runner
ENV HUSKY 0
ENV DOCKER_OUTPUT 1
# Telemetry credentials (baked into image at build time, can be disabled at runtime)
ARG NEXT_PRIVATE_TELEMETRY_KEY=""
ENV NEXT_PRIVATE_TELEMETRY_KEY="$NEXT_PRIVATE_TELEMETRY_KEY"
ARG NEXT_PRIVATE_TELEMETRY_HOST=""
ENV NEXT_PRIVATE_TELEMETRY_HOST="$NEXT_PRIVATE_TELEMETRY_HOST"
# Don't run production as root
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nodejs

View File

@ -19,8 +19,6 @@ echo "Git SHA: $GIT_SHA"
# Build with temporary base tag
docker build -f "$SCRIPT_DIR/Dockerfile" \
--progress=plain \
--build-arg NEXT_PRIVATE_TELEMETRY_KEY="${NEXT_PRIVATE_TELEMETRY_KEY:-}" \
--build-arg NEXT_PRIVATE_TELEMETRY_HOST="${NEXT_PRIVATE_TELEMETRY_HOST:-}" \
-t "documenso-base" \
"$MONOREPO_ROOT"

View File

@ -25,8 +25,6 @@ docker buildx build \
-f "$SCRIPT_DIR/Dockerfile" \
--platform=$PLATFORM \
--progress=plain \
--build-arg NEXT_PRIVATE_TELEMETRY_KEY="${NEXT_PRIVATE_TELEMETRY_KEY:-}" \
--build-arg NEXT_PRIVATE_TELEMETRY_HOST="${NEXT_PRIVATE_TELEMETRY_HOST:-}" \
-t "documenso/documenso:latest" \
-t "documenso/documenso:$GIT_SHA" \
-t "documenso/documenso:$APP_VERSION" \

View File

@ -26,8 +26,6 @@ docker buildx build \
-f "$SCRIPT_DIR/Dockerfile" \
--platform=$PLATFORM \
--progress=plain \
--build-arg NEXT_PRIVATE_TELEMETRY_KEY="${NEXT_PRIVATE_TELEMETRY_KEY:-}" \
--build-arg NEXT_PRIVATE_TELEMETRY_HOST="${NEXT_PRIVATE_TELEMETRY_HOST:-}" \
-t "documenso-base" \
"$MONOREPO_ROOT"

View File

@ -61,7 +61,6 @@ services:
- NEXT_PUBLIC_DISABLE_SIGNUP=${NEXT_PUBLIC_DISABLE_SIGNUP}
- NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH=${NEXT_PRIVATE_SIGNING_LOCAL_FILE_PATH:-/opt/documenso/cert.p12}
- NEXT_PRIVATE_SIGNING_PASSPHRASE=${NEXT_PRIVATE_SIGNING_PASSPHRASE}
- NEXT_PUBLIC_USE_INTERNAL_URL_BROWSERLESS=${NEXT_PUBLIC_USE_INTERNAL_URL_BROWSERLESS}
ports:
- ${PORT:-3000}:${PORT:-3000}
volumes:

30238
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,6 @@
{
"private": true,
"name": "@documenso/root",
"workspaces": [
"apps/*",
"packages/*"
],
"version": "2.1.0",
"version": "2.0.14",
"scripts": {
"build": "turbo run build",
"dev": "turbo run dev --filter=@documenso/remix",
@ -20,7 +15,7 @@
"commitlint": "commitlint --edit",
"clean": "turbo run clean && rimraf node_modules",
"d": "npm run dx && npm run translate:compile && npm run dev",
"dx": "npm ci && npm run dx:up && npm run prisma:migrate-dev && npm run prisma:seed",
"dx": "npm i && npm run dx:up && npm run prisma:migrate-dev && npm run prisma:seed",
"dx:up": "docker compose -f docker/development/compose.yml up -d",
"dx:down": "docker compose -f docker/development/compose.yml down",
"ci": "turbo run build --filter=@documenso/remix && turbo run test:e2e",
@ -46,57 +41,59 @@
"node": ">=22.0.0"
},
"devDependencies": {
"@commitlint/cli": "^20.1.0",
"@commitlint/config-conventional": "^20.0.0",
"@lingui/cli": "^5.6.0",
"@prisma/client": "^6.19.0",
"@trpc/client": "11.7.1",
"@trpc/react-query": "11.7.1",
"@trpc/server": "11.7.1",
"@commitlint/cli": "^17.7.1",
"@commitlint/config-conventional": "^17.7.0",
"@lingui/cli": "^5.2.0",
"@prisma/client": "^6.18.0",
"@trpc/client": "11.7.0",
"@trpc/react-query": "11.7.0",
"@trpc/server": "11.7.0",
"@ts-rest/core": "^3.52.1",
"@ts-rest/open-api": "^3.52.1",
"@ts-rest/serverless": "^3.52.1",
"dotenv": "^17.2.3",
"dotenv-cli": "^11.0.0",
"eslint": "^8.57.0",
"husky": "^9.1.7",
"lint-staged": "^16.2.7",
"nanoid": "^5.1.6",
"nodemailer": "^7.0.10",
"pdfjs-dist": "5.4.296",
"pino": "^9.14.0",
"pino-pretty": "^13.1.2",
"playwright": "1.56.1",
"prettier": "^3.6.2",
"prisma": "^6.19.0",
"dotenv": "^16.5.0",
"dotenv-cli": "^8.0.0",
"eslint": "^8.40.0",
"eslint-config-custom": "*",
"husky": "^9.0.11",
"lint-staged": "^15.2.2",
"nodemailer": "^6.10.1",
"playwright": "1.52.0",
"prettier": "^3.3.3",
"prisma": "^6.18.0",
"prisma-extension-kysely": "^3.0.0",
"prisma-json-types-generator": "^3.6.2",
"prisma-kysely": "^2.2.1",
"rimraf": "^6.1.2",
"prisma-kysely": "^1.8.0",
"rimraf": "^5.0.1",
"superjson": "^2.2.5",
"syncpack": "^14.0.0-alpha.27",
"trpc-to-openapi": "2.4.0",
"turbo": "^1.13.4",
"vite": "^7.2.4",
"turbo": "^1.9.3",
"vite": "^6.3.5",
"vite-plugin-static-copy": "^3.1.4",
"zod-openapi": "^4.2.4",
"zod-prisma-types": "3.3.5"
},
"name": "@documenso/root",
"workspaces": [
"apps/*",
"packages/*"
],
"dependencies": {
"@documenso/pdf-sign": "^0.1.0",
"@documenso/prisma": "*",
"@lingui/conf": "^5.6.0",
"@lingui/core": "^5.6.0",
"inngest-cli": "^1.13.7",
"luxon": "^3.7.2",
"posthog-node": "4.18.0",
"@documenso/prisma": "^0.0.0",
"@lingui/conf": "^5.2.0",
"@lingui/core": "^5.2.0",
"inngest-cli": "^0.29.1",
"luxon": "^3.5.0",
"mupdf": "^1.0.0",
"react": "^18",
"typescript": "5.6.2",
"zod": "^3.25.76"
},
"overrides": {
"pdfjs-dist": "5.4.296",
"typescript": "5.6.2",
"zod": "^3.25.76"
},
"trigger.dev": {
"endpointId": "documenso-app"
}
}

View File

@ -17,13 +17,14 @@
"dependencies": {
"@documenso/lib": "*",
"@documenso/prisma": "*",
"@ts-rest/core": "^3.52.1",
"@ts-rest/open-api": "^3.52.1",
"@ts-rest/serverless": "^3.52.1",
"@ts-rest/core": "^3.52.0",
"@ts-rest/open-api": "^3.52.0",
"@ts-rest/serverless": "^3.52.0",
"@types/swagger-ui-react": "^5.18.0",
"luxon": "^3.7.2",
"luxon": "^3.4.0",
"superjson": "^2.2.5",
"ts-pattern": "^5.9.0",
"swagger-ui-react": "^5.21.0",
"ts-pattern": "^5.0.5",
"zod": "^3.25.76"
}
}

View File

@ -232,19 +232,19 @@ test('[DOCUMENT_FLOW]: should be able to create a document with multiple recipie
await page.getByLabel('Email').nth(1).fill('user2@example.com');
await page.getByLabel('Name').nth(1).fill('User 2');
await page.getByRole('combobox').nth(1).click();
await page.locator('button[role="combobox"]').nth(1).click();
await page.getByLabel('Receives copy').click();
await page.getByRole('button', { name: 'Add Signer' }).click();
await page.getByLabel('Email').nth(2).fill('user3@example.com');
await page.getByLabel('Name').nth(2).fill('User 3');
await page.getByRole('combobox').nth(2).click();
await page.locator('button[role="combobox"]').nth(2).click();
await page.getByLabel('Needs to approve').click();
await page.getByRole('button', { name: 'Add Signer' }).click();
await page.getByLabel('Email').nth(3).fill('user4@example.com');
await page.getByLabel('Name').nth(3).fill('User 4');
await page.getByRole('combobox').nth(3).click();
await page.locator('button[role="combobox"]').nth(3).click();
await page.getByLabel('Needs to view').click();
await page.getByRole('button', { name: 'Continue' }).click();
@ -252,8 +252,8 @@ test('[DOCUMENT_FLOW]: should be able to create a document with multiple recipie
// Add fields
await expect(page.getByRole('heading', { name: 'Add Fields' })).toBeVisible();
await page.getByRole('combobox').first().click();
await page.getByRole('option', { name: 'User 1 (user1@example.com)' }).click();
await page.locator('button[role="combobox"]').nth(0).click();
await page.getByTitle('User 1 (user1@example.com)').click();
await page.getByRole('button', { name: 'Signature' }).click();
await page.locator('canvas').click({
@ -271,8 +271,8 @@ test('[DOCUMENT_FLOW]: should be able to create a document with multiple recipie
},
});
await page.getByRole('combobox').first().click();
await page.getByRole('option', { name: 'User 3 (user3@example.com)' }).click();
await page.locator('button[role="combobox"]').nth(0).click();
await page.getByTitle('User 3 (user3@example.com)').click();
await page.getByRole('button', { name: 'Signature' }).click();
await page.locator('canvas').click({
@ -574,7 +574,6 @@ test('[DOCUMENT_FLOW]: should be able to create and sign a document with 3 recip
if (i > 1) {
await page.getByText(`User ${i} (user${i}@example.com)`).click();
}
await page.getByRole('button', { name: 'Signature' }).click();
await page.locator('canvas').click({
position: {

View File

@ -85,18 +85,16 @@ test('[DOCUMENTS]: deleting a completed document should not remove it from recip
// Open document action menu.
await page
.locator('tr', { hasText: 'Document 1 - Completed' })
.getByTestId('document-table-action-btn')
.getByRole('cell', { name: 'Download' })
.getByRole('button')
.nth(1)
.click();
await page.waitForTimeout(200);
// delete document
await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByPlaceholder("Type 'delete' to confirm").fill('delete');
await page.getByRole('button', { name: 'Delete' }).click();
await page.waitForTimeout(2500);
await expect(page.getByRole('row', { name: /Document 1 - Completed/ })).not.toBeVisible();
await apiSignout({ page });
@ -128,20 +126,13 @@ test('[DOCUMENTS]: deleting a pending document should remove it from recipients'
});
// Open document action menu.
await page
.locator('tr', { hasText: 'Document 1 - Pending' })
.getByTestId('document-table-action-btn')
.click();
await page.waitForTimeout(200);
await page.locator('tr', { hasText: 'Document 1 - Pending' }).getByRole('button').nth(1).click();
// delete document
await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByPlaceholder("Type 'delete' to confirm").fill('delete');
await page.getByRole('button', { name: 'Delete' }).click();
await page.waitForTimeout(2500);
await expect(page.getByRole('row', { name: /Document 1 - Pending/ })).not.toBeVisible();
// signout
@ -174,15 +165,11 @@ test('[DOCUMENTS]: deleting draft documents should permanently remove it', async
.getByTestId('document-table-action-btn')
.click();
await page.waitForTimeout(200);
// delete document
await page.getByRole('menuitem', { name: 'Delete' }).click();
await expect(page.getByPlaceholder("Type 'delete' to confirm")).not.toBeVisible();
await page.getByRole('button', { name: 'Delete' }).click();
await page.waitForTimeout(2500);
await expect(page.getByRole('row', { name: /Document 1 - Draft/ })).not.toBeVisible();
// Check document counts.
@ -208,15 +195,11 @@ test('[DOCUMENTS]: deleting pending documents should permanently remove it', asy
.getByTestId('document-table-action-btn')
.click();
await page.waitForTimeout(200);
// Delete document.
await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByPlaceholder("Type 'delete' to confirm").fill('delete');
await page.getByRole('button', { name: 'Delete' }).click();
await page.waitForTimeout(2500);
await expect(page.getByRole('row', { name: /Document 1 - Pending/ })).not.toBeVisible();
// Check document counts.
@ -244,15 +227,11 @@ test('[DOCUMENTS]: deleting completed documents as an owner should hide it from
.getByTestId('document-table-action-btn')
.click();
await page.waitForTimeout(200);
// Delete document.
await page.getByRole('menuitem', { name: 'Delete' }).click();
await page.getByPlaceholder("Type 'delete' to confirm").fill('delete');
await page.getByRole('button', { name: 'Delete' }).click();
await page.waitForTimeout(2500);
// Check document counts.
await expect(page.getByRole('row', { name: /Document 1 - Completed/ })).not.toBeVisible();
await checkDocumentTabCount(page, 'Inbox', 0);
@ -324,8 +303,7 @@ test('[DOCUMENTS]: deleting documents as a recipient should only hide it for the
await page.getByRole('menuitem', { name: 'Hide' }).waitFor({ state: 'visible' });
await page.getByRole('menuitem', { name: 'Hide' }).click({ force: true });
await page.getByRole('button', { name: 'Hide' }).click({ force: true });
await page.waitForTimeout(2500);
await page.waitForTimeout(2000);
// Check document counts.
await expect(page.getByRole('row', { name: /Document 1 - Completed/ })).not.toBeVisible();

View File

@ -1,30 +1,46 @@
import { createCanvas } from '@napi-rs/canvas';
// sort-imports-ignore
// ---- PATCH pdfjs-dist's canvas require BEFORE importing it ----
import Module from 'module';
import { Canvas, Image } from 'skia-canvas';
// Intercept require('canvas') and return skia-canvas equivalents
const originalRequire = Module.prototype.require;
Module.prototype.require = function (path: string) {
if (path === 'canvas') {
return {
createCanvas: (width: number, height: number) => new Canvas(width, height),
Image, // needed by pdfjs-dist
};
}
// eslint-disable-next-line prefer-rest-params, @typescript-eslint/consistent-type-assertions
return originalRequire.apply(this, arguments as unknown as [string]);
};
import pixelMatch from 'pixelmatch';
import { PNG } from 'pngjs';
import type { TestInfo } from '@playwright/test';
import { expect, test } from '@playwright/test';
import { DocumentStatus, EnvelopeType } from '@prisma/client';
import fs from 'node:fs';
import path from 'node:path';
import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';
import pixelMatch from 'pixelmatch';
import { PNG } from 'pngjs';
import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.js';
import { getEnvelopeItemPdfUrl } from '@documenso/lib/utils/envelope-download';
import { prisma } from '@documenso/prisma';
import { seedAlignmentTestDocument } from '@documenso/prisma/seed/initial-seed';
import { seedUser } from '@documenso/prisma/seed/users';
import { NEXT_PUBLIC_WEBAPP_URL } from '../../../lib/constants/app';
import { isBase64Image } from '../../../lib/constants/signatures';
import { createApiToken } from '../../../lib/server-only/public-api/create-api-token';
import { RecipientRole } from '../../../prisma/generated/types';
import { apiSignin } from '../fixtures/authentication';
import type {
TCreateEnvelopePayload,
TCreateEnvelopeResponse,
} from '../../../trpc/server/envelope-router/create-envelope.types';
import type { TDistributeEnvelopeRequest } from '../../../trpc/server/envelope-router/distribute-envelope.types';
import { ALIGNMENT_TEST_FIELDS } from '../../constants/field-alignment-pdf';
import { NEXT_PUBLIC_WEBAPP_URL } from '../../../lib/constants/app';
import { createApiToken } from '../../../lib/server-only/public-api/create-api-token';
import { RecipientRole } from '../../../prisma/generated/types';
import { FIELD_META_TEST_FIELDS } from '../../constants/field-meta-pdf';
import { apiSignin } from '../fixtures/authentication';
import { ALIGNMENT_TEST_FIELDS } from '../../constants/field-alignment-pdf';
import type { TDistributeEnvelopeRequest } from '../../../trpc/server/envelope-router/distribute-envelope.types';
import { isBase64Image } from '../../../lib/constants/signatures';
const WEBAPP_BASE_URL = NEXT_PUBLIC_WEBAPP_URL();
const baseUrl = `${WEBAPP_BASE_URL}/api/v2`;
@ -390,20 +406,15 @@ async function renderPdfToImage(pdfBytes: Uint8Array) {
const viewport = page.getViewport({ scale });
const canvas = createCanvas(viewport.width, viewport.height);
const canvasContext = canvas.getContext('2d');
canvasContext.imageSmoothingEnabled = false;
const virtualCanvas = new Canvas(viewport.width, viewport.height);
const context = virtualCanvas.getContext('2d');
context.imageSmoothingEnabled = false;
await page.render({
// @ts-expect-error @napi-rs/canvas satisfies runtime requirements for pdfjs
canvas,
// @ts-expect-error @napi-rs/canvas satisfies runtime requirements for pdfjs
canvasContext,
viewport,
}).promise;
// @ts-expect-error skia-canvas context satisfies runtime requirements for pdfjs
await page.render({ canvasContext: context, viewport }).promise;
return {
image: await canvas.encode('png'),
image: await virtualCanvas.toBuffer('png'),
// Rounded down because the certificate page somehow gives dimensions with decimals
width: Math.floor(viewport.width),

View File

@ -57,9 +57,6 @@ test.describe('Signing Certificate Tests', () => {
}
await page.getByRole('button', { name: 'Complete' }).click();
await page.waitForTimeout(1000);
await page.getByRole('button', { name: 'Sign' }).click({ force: true });
await page.waitForURL(`/sign/${recipient.token}/complete`);

View File

@ -87,7 +87,9 @@ test('[TEAMS]: check signature modes can be disabled', async ({ page }) => {
await page.getByRole('button', { name: 'Update' }).first().click();
// Wait for the update to complete
await expect(page.getByText('Document preferences updated', { exact: true })).toBeVisible();
const toast = page.locator('li[role="status"][data-state="open"]').first();
await expect(toast).toBeVisible();
await expect(toast.getByText('Document preferences updated', { exact: true })).toBeVisible();
const document = await seedTeamDocumentWithMeta(team);
@ -152,7 +154,9 @@ test('[TEAMS]: check signature modes work for templates', async ({ page }) => {
await page.getByRole('button', { name: 'Update' }).first().click();
// Wait for finish
await expect(page.getByText('Document preferences updated', { exact: true })).toBeVisible();
const toast = page.locator('li[role="status"][data-state="open"]').first();
await expect(toast).toBeVisible();
await expect(toast.getByText('Document preferences updated', { exact: true })).toBeVisible();
const template = await seedTeamTemplateWithMeta(team);

View File

@ -97,10 +97,9 @@ test.describe('AutoSave Fields Step', () => {
const fields = retrievedFields.fields;
expect(fields.length).toBe(3);
expect(fields.map((field) => field.type).toSorted()).toEqual(
['SIGNATURE', 'TEXT', 'SIGNATURE'].toSorted(),
);
expect(fields[0].type).toBe('SIGNATURE');
expect(fields[1].type).toBe('TEXT');
expect(fields[2].type).toBe('SIGNATURE');
}).toPass();
});
@ -238,9 +237,10 @@ test.describe('AutoSave Fields Step', () => {
const fields = retrievedFields.fields;
expect(fields.length).toBe(4);
expect(fields.map((field) => field.type).toSorted()).toEqual(
['SIGNATURE', 'TEXT', 'SIGNATURE', 'SIGNATURE'].toSorted(),
);
expect(fields[0].type).toBe('SIGNATURE');
expect(fields[1].type).toBe('TEXT');
expect(fields[2].type).toBe('SIGNATURE');
expect(fields[3].type).toBe('SIGNATURE');
}).toPass();
});
@ -292,9 +292,8 @@ test.describe('AutoSave Fields Step', () => {
const fields = retrievedTemplate.fields;
expect(fields.length).toBe(2);
expect(fields.map((field) => field.type).toSorted()).toEqual(
['SIGNATURE', 'TEXT'].toSorted(),
);
expect(fields[0].type).toBe('SIGNATURE');
expect(fields[1].type).toBe('TEXT');
const textField = fields[1];
expect(textField.fieldMeta).toBeDefined();

View File

@ -1,377 +0,0 @@
import { expect, test } from '@playwright/test';
import { WebhookCallStatus, WebhookTriggerEvents } from '@prisma/client';
import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app';
import { prisma } from '@documenso/prisma';
import { seedBlankDocument } from '@documenso/prisma/seed/documents';
import { seedUser } from '@documenso/prisma/seed/users';
import { apiSignin, apiSignout } from '../fixtures/authentication';
import { expectTextToBeVisible } from '../fixtures/generic';
/**
* Helper function to seed a webhook directly in the database for testing.
*/
const seedWebhook = async ({
webhookUrl,
eventTriggers,
secret,
enabled,
userId,
teamId,
}: {
webhookUrl: string;
eventTriggers: WebhookTriggerEvents[];
secret?: string | null;
enabled?: boolean;
userId: number;
teamId: number;
}) => {
return await prisma.webhook.create({
data: {
webhookUrl,
eventTriggers,
secret: secret ?? null,
enabled: enabled ?? true,
userId,
teamId,
},
});
};
test('[WEBHOOKS]: create webhook', async ({ page }) => {
const { user, team } = await seedUser();
await apiSignin({
page,
email: user.email,
redirectPath: `/t/${team.url}/settings/webhooks`,
});
const webhookUrl = `https://example.com/webhook-${Date.now()}`;
// Click Create Webhook button
await page.getByRole('button', { name: 'Create Webhook' }).click();
// Fill in the form
await page.getByLabel('Webhook URL*').fill(webhookUrl);
// Select event trigger - click on the triggers field and select DOCUMENT_CREATED
await page.getByLabel('Triggers').click();
await page.waitForTimeout(200); // Wait for dropdown to open
await page.getByText('document.created').click();
// Click outside the triggers field to close the dropdown
await page.getByText('The URL for Documenso to send webhook events to.').click();
// Fill in the form
await page.getByLabel('Secret').fill('secret');
// Submit the form
await page.getByRole('button', { name: 'Create' }).click();
// Wait for success toast
await expectTextToBeVisible(page, 'Webhook created');
await expectTextToBeVisible(page, 'The webhook was successfully created.');
// Verify webhook appears in the list
await expect(page.getByText(webhookUrl)).toBeVisible();
// Directly check database
const dbWebhook = await prisma.webhook.findFirstOrThrow({
where: {
userId: user.id,
},
});
expect(dbWebhook?.eventTriggers).toEqual([WebhookTriggerEvents.DOCUMENT_CREATED]);
expect(dbWebhook?.secret).toBe('secret');
expect(dbWebhook?.enabled).toBe(true);
});
test('[WEBHOOKS]: view webhooks', async ({ page }) => {
const { user, team } = await seedUser();
const webhookUrl = `https://example.com/webhook-${Date.now()}`;
// Create a webhook via seeding
const webhook = await seedWebhook({
webhookUrl,
eventTriggers: [WebhookTriggerEvents.DOCUMENT_CREATED, WebhookTriggerEvents.DOCUMENT_SENT],
userId: user.id,
teamId: team.id,
enabled: true,
});
await apiSignin({
page,
email: user.email,
redirectPath: `/t/${team.url}/settings/webhooks`,
});
// Verify webhook is visible in the table
await expect(page.getByText(webhookUrl)).toBeVisible();
await expect(page.getByText('Enabled')).toBeVisible();
await expect(page.getByText('2 Events')).toBeVisible();
// Click on webhook to navigate to detail page
await page.getByText(webhookUrl).click();
// Verify detail page shows webhook information
await page.waitForURL(`/t/${team.url}/settings/webhooks/${webhook.id}`);
await expect(page.getByText(webhookUrl)).toBeVisible();
await expect(page.getByText('Enabled')).toBeVisible();
});
test('[WEBHOOKS]: delete webhook', async ({ page }) => {
const { user, team } = await seedUser();
const webhookUrl = `https://example.com/webhook-${Date.now()}`;
// Create a webhook via seeding
const webhook = await seedWebhook({
webhookUrl,
eventTriggers: [WebhookTriggerEvents.DOCUMENT_CREATED],
userId: user.id,
teamId: team.id,
});
await apiSignin({
page,
email: user.email,
redirectPath: `/t/${team.url}/settings/webhooks`,
});
// Verify webhook is visible
await expect(page.getByText(webhookUrl)).toBeVisible();
// Find the row with the webhook and click the action dropdown
const webhookRow = page.locator('tr', { hasText: webhookUrl });
await webhookRow.getByTestId('webhook-table-action-btn').click();
// Click Delete menu item
await page.getByRole('menuitem', { name: 'Delete' }).click();
// Fill in confirmation field
const deleteMessage = `delete ${webhookUrl}`;
// The label contains "Confirm by typing:" followed by the delete message
await page.getByLabel(/Confirm by typing/).fill(deleteMessage);
// Click delete button
await page.getByRole('button', { name: 'Delete' }).click();
// Wait for success toast
await expectTextToBeVisible(page, 'Webhook deleted');
await expectTextToBeVisible(page, 'The webhook has been successfully deleted.');
// Verify webhook is removed from the list
await expect(page.getByText(webhookUrl)).not.toBeVisible();
});
test('[WEBHOOKS]: update webhook', async ({ page }) => {
const { user, team } = await seedUser();
const originalWebhookUrl = `https://example.com/webhook-original-${Date.now()}`;
const updatedWebhookUrl = `https://example.com/webhook-updated-${Date.now()}`;
// Create a webhook via seeding with initial values
const webhook = await seedWebhook({
webhookUrl: originalWebhookUrl,
eventTriggers: [WebhookTriggerEvents.DOCUMENT_CREATED, WebhookTriggerEvents.DOCUMENT_SENT],
userId: user.id,
teamId: team.id,
enabled: true,
});
await apiSignin({
page,
email: user.email,
redirectPath: `/t/${team.url}/settings/webhooks`,
});
// Verify webhook is visible with original values
await expect(page.getByText(originalWebhookUrl)).toBeVisible();
await expect(page.getByText('Enabled')).toBeVisible();
await expect(page.getByText('2 Events')).toBeVisible();
// Find the row with the webhook and click the action dropdown
const webhookRow = page.locator('tr', { hasText: originalWebhookUrl });
await webhookRow.getByTestId('webhook-table-action-btn').click();
// Click Edit menu item
await page.getByRole('menuitem', { name: 'Edit' }).click();
// Wait for dialog to open
await page.waitForTimeout(200);
// Change the webhook URL
await page.getByLabel('Webhook URL').clear();
await page.getByLabel('Webhook URL').fill(updatedWebhookUrl);
// Disable the webhook (toggle the switch)
const enabledSwitch = page.getByLabel('Enabled');
const isChecked = await enabledSwitch.isChecked();
if (isChecked) {
await enabledSwitch.click();
}
// Change the event triggers - remove one existing event and add a new one
// The selected items are shown as badges with remove buttons
// Remove one of the existing events (DOCUMENT_SENT) by clicking its remove button
const removeButtons = page.locator('button[aria-label="Remove"]');
const removeButtonCount = await removeButtons.count();
// Remove the "DOCUMENT_SENT" event (this will remove one of the two)
if (removeButtonCount > 0) {
await removeButtons.nth(1).click();
await page.waitForTimeout(200);
}
// Add new event triggers
await page.getByLabel('Triggers').click();
await page.waitForTimeout(200);
// Select DOCUMENT_COMPLETED (this will be added to the remaining DOCUMENT_CREATED)
await page.getByText('document.completed').click();
await page.waitForTimeout(200);
// Click outside to close the dropdown
await page.getByText('The URL for Documenso to send webhook events to.').click();
// Submit the form
await page.getByRole('button', { name: 'Update' }).click();
// Wait for success toast
await expectTextToBeVisible(page, 'Webhook updated');
await expectTextToBeVisible(page, 'The webhook has been updated successfully.');
// Verify changes are reflected in the list
// The old URL should be gone and new URL should be visible
await expect(page.getByText(originalWebhookUrl)).not.toBeVisible();
await expect(page.getByText(updatedWebhookUrl)).toBeVisible();
// Verify webhook is disabled
await expect(page.getByText('Disabled')).toBeVisible();
// Verify event count is still 2 (one removed, one added - DOCUMENT_CREATED and DOCUMENT_COMPLETED)
await expect(page.getByText('2 Events')).toBeVisible();
// Check the database directly to verify
const dbWebhook = await prisma.webhook.findUnique({
where: {
id: webhook.id,
},
});
expect(dbWebhook?.eventTriggers).toEqual([
WebhookTriggerEvents.DOCUMENT_CREATED,
WebhookTriggerEvents.DOCUMENT_COMPLETED,
]);
expect(dbWebhook?.enabled).toBe(false);
expect(dbWebhook?.webhookUrl).toBe(updatedWebhookUrl);
expect(dbWebhook?.secret).toBe('');
});
test('[WEBHOOKS]: cannot see unrelated webhooks', async ({ page }) => {
// Create two separate users with teams
const user1Data = await seedUser();
const user2Data = await seedUser();
const webhookUrl1 = `https://example.com/webhook-team1-${Date.now()}`;
const webhookUrl2 = `https://example.com/webhook-team2-${Date.now()}`;
// Create webhooks for both teams with DOCUMENT_CREATED event
const webhook1 = await seedWebhook({
webhookUrl: webhookUrl1,
eventTriggers: [WebhookTriggerEvents.DOCUMENT_CREATED],
userId: user1Data.user.id,
teamId: user1Data.team.id,
enabled: true,
});
const webhook2 = await seedWebhook({
webhookUrl: webhookUrl2,
eventTriggers: [WebhookTriggerEvents.DOCUMENT_SENT],
userId: user2Data.user.id,
teamId: user2Data.team.id,
});
// Create a document on team1 to trigger the webhook
const document = await seedBlankDocument(user1Data.user, user1Data.team.id, {
createDocumentOptions: {
title: 'Test Document for Webhook',
},
});
// Create a webhook call for team1's webhook (simulating the webhook being triggered)
// Since webhooks are triggered via jobs which may not run in tests, we create the call directly
const webhookCall1 = await prisma.webhookCall.create({
data: {
webhookId: webhook1.id,
url: webhookUrl1,
event: WebhookTriggerEvents.DOCUMENT_CREATED,
status: WebhookCallStatus.SUCCESS,
responseCode: 200,
requestBody: {
event: WebhookTriggerEvents.DOCUMENT_CREATED,
payload: {
id: document.id,
title: document.title,
},
createdAt: new Date().toISOString(),
webhookEndpoint: webhookUrl1,
},
},
});
// Sign in as user1
await apiSignin({
page,
email: user1Data.user.email,
redirectPath: `/t/${user1Data.team.url}/settings/webhooks`,
});
// Verify user1 can see their webhook
await expect(page.getByText(webhookUrl1)).toBeVisible();
// Verify user1 cannot see user2's webhook
await expect(page.getByText(webhookUrl2)).not.toBeVisible();
// Navigate to team1's webhook logs page
await page.goto(
`${NEXT_PUBLIC_WEBAPP_URL()}/t/${user1Data.team.url}/settings/webhooks/${webhook1.id}`,
);
// Verify user1 can see their webhook logs
// The webhook call should be visible in the table
await expect(page.getByText(webhookCall1.id)).toBeVisible();
await expect(page.getByText('200')).toBeVisible(); // Response code
// Sign out and sign in as user2
await apiSignout({ page });
await apiSignin({
page,
email: user2Data.user.email,
redirectPath: `/t/${user2Data.team.url}/settings/webhooks`,
});
// Verify user2 can see their webhook
await expect(page.getByText(webhookUrl2)).toBeVisible();
// Verify user2 cannot see user1's webhook
await expect(page.getByText(webhookUrl1)).not.toBeVisible();
// Navigate to team2's webhook logs page
await page.goto(
`${NEXT_PUBLIC_WEBAPP_URL()}/t/${user2Data.team.url}/settings/webhooks/${webhook2.id}`,
);
// Verify user2 cannot see team1's webhook logs
// The webhook call from team1 should not be visible
await expect(page.getByText(webhookCall1.id)).not.toBeVisible();
// Attempt to access user1's webhook detail page directly via URL
await page.goto(
`${NEXT_PUBLIC_WEBAPP_URL()}/t/${user2Data.team.url}/settings/webhooks/${webhook1.id}`,
);
// Verify access is denied - should show error or redirect
// Based on the component, it shows a 404 error page
await expect(page.getByRole('heading', { name: 'Webhook not found' })).toBeVisible();
});

View File

@ -14,14 +14,13 @@
"devDependencies": {
"@documenso/lib": "*",
"@documenso/prisma": "*",
"@napi-rs/canvas": "^0.1.82",
"@playwright/test": "1.56.1",
"@playwright/test": "1.52.0",
"@types/node": "^20",
"@types/pngjs": "^6.0.5",
"pixelmatch": "^7.1.0",
"pngjs": "^7.0.0"
},
"dependencies": {
"start-server-and-test": "^2.1.3"
"start-server-and-test": "^2.0.12"
}
}
}

56611
packages/assets/pdf.worker.min.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -72,11 +72,7 @@ export class AuthClient {
public async getSession() {
const response = await this.client['session-json'].$get();
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
const result = await response.json();
@ -86,19 +82,13 @@ export class AuthClient {
public async getSessions() {
const response = await this.client['sessions'].$get();
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
const result = await response.json();
return superjson.deserialize<{ sessions: ActiveSession[] }>(result);
}
// !: Unused for now since it isn't providing the type narrowing
// !: we need.
private async handleError<T>(response: ClientResponse<T>): Promise<void> {
if (!response.ok) {
const error = await response.json();
@ -111,11 +101,7 @@ export class AuthClient {
getMany: async () => {
const response = await this.client['accounts'].$get();
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
const result = await response.json();
@ -126,11 +112,7 @@ export class AuthClient {
param: { accountId },
});
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
},
};
@ -149,75 +131,41 @@ export class AuthClient {
},
});
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
handleSignInRedirect(data.redirectPath);
},
updatePassword: async (data: TUpdatePasswordSchema) => {
const response = await this.client['email-password']['update-password'].$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
},
forgotPassword: async (data: TForgotPasswordSchema) => {
const response = await this.client['email-password']['forgot-password'].$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
},
resetPassword: async (data: TResetPasswordSchema) => {
const response = await this.client['email-password']['reset-password'].$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
},
signUp: async (data: TSignUpSchema) => {
const response = await this.client['email-password']['signup'].$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
},
resendVerifyEmail: async (data: TResendVerifyEmailSchema) => {
const response = await this.client['email-password']['resend-verify-email'].$post({
json: data,
});
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
},
verifyEmail: async (data: TVerifyEmailSchema) => {
const response = await this.client['email-password']['verify-email'].$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
return response.json();
},
@ -226,43 +174,23 @@ export class AuthClient {
public twoFactor = {
setup: async () => {
const response = await this.client['two-factor'].setup.$post();
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
return response.json();
},
enable: async (data: TEnableTwoFactorRequestSchema) => {
const response = await this.client['two-factor'].enable.$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
return response.json();
},
disable: async (data: TDisableTwoFactorRequestSchema) => {
const response = await this.client['two-factor'].disable.$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
},
viewRecoveryCodes: async (data: TViewTwoFactorRecoveryCodesRequestSchema) => {
const response = await this.client['two-factor']['view-recovery-codes'].$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
return response.json();
},
@ -271,12 +199,7 @@ export class AuthClient {
public passkey = {
signIn: async (data: TPasskeySignin) => {
const response = await this.client['passkey'].authorize.$post({ json: data });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
handleSignInRedirect(data.redirectPath);
},
@ -288,11 +211,7 @@ export class AuthClient {
json: { redirectPath },
});
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
const data = await response.json();
@ -309,11 +228,7 @@ export class AuthClient {
json: { redirectPath },
});
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
const data = await response.json();
@ -326,12 +241,7 @@ export class AuthClient {
public oidc = {
signIn: async ({ redirectPath }: { redirectPath?: string } = {}) => {
const response = await this.client['oauth'].authorize.oidc.$post({ json: { redirectPath } });
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
const data = await response.json();
@ -346,11 +256,7 @@ export class AuthClient {
param: { orgUrl },
});
if (!response.ok) {
const error = await response.json();
throw AppError.parseError(error);
}
await this.handleError(response);
const data = await response.json();

Some files were not shown because too many files have changed in this diff Show More