Files
esign/packages/lib/utils/envelope-download.ts
zooqueen fb4e3df0e3 rename: @hanzo/sign-* → @hanzo/esign-* (full eSign brand consistency)
The product is branded Hanzo eSign (esign.hanzo.ai, repo hanzoai/esign).
Rename all workspace packages @hanzo/sign-* → @hanzo/esign-* (1052 files)
and align docker/Dockerfile turbo --scope/--filter to the actual remix
package name @hanzo/esign (was a pre-existing mismatch with -remix that
broke the build). Protected deps (@hanzo/insights, @hanzo/logo) untouched.
2026-06-21 19:56:09 -07:00

90 lines
2.9 KiB
TypeScript

import type { EnvelopeItem } from '@prisma/client';
import type { DocumentDataVersion } from '@hanzo/esign-lib/types/document';
import { NEXT_PUBLIC_WEBAPP_URL } from '../constants/app';
export type EnvelopeItemPdfUrlOptions =
| {
type: 'download';
envelopeItem: Pick<EnvelopeItem, 'id' | 'envelopeId'>;
token: string | undefined;
version: 'original' | 'signed';
presignToken?: undefined;
}
| {
type: 'view';
envelopeItem: Pick<EnvelopeItem, 'id' | 'envelopeId'>;
token: string | undefined;
presignToken?: string | undefined;
};
export const getEnvelopeItemPdfUrl = (options: EnvelopeItemPdfUrlOptions) => {
const { envelopeItem, token, type, presignToken } = options;
const { id, envelopeId } = envelopeItem;
if (type === 'download') {
const version = options.version;
return token
? `${NEXT_PUBLIC_WEBAPP_URL()}/api/files/token/${token}/envelopeItem/${id}/download/${version}${presignToken ? `?presignToken=${presignToken}` : ''}`
: `${NEXT_PUBLIC_WEBAPP_URL()}/api/files/envelope/${envelopeId}/envelopeItem/${id}/download/${version}`;
}
return token
? `${NEXT_PUBLIC_WEBAPP_URL()}/api/files/token/${token}/envelopeItem/${id}${presignToken ? `?presignToken=${presignToken}` : ''}`
: `${NEXT_PUBLIC_WEBAPP_URL()}/api/files/envelope/${envelopeId}/envelopeItem/${id}${presignToken ? `?token=${presignToken}` : ''}`;
};
export type DocumentDataUrlOptions = {
envelopeId: string;
envelopeItemId: string;
documentDataId: string;
token: string | undefined;
presignToken?: string | undefined;
version: DocumentDataVersion;
};
/**
* The difference between this and `getEnvelopeItemPdfUrl` is that this will
* hard cache since we add the `documentDataId` to the URL.
*
* Since `documentDataId` should change when the document is changed/signed, this is a
* good way to cache an envelope item by.
*/
export const getDocumentDataUrl = (options: DocumentDataUrlOptions) => {
const { envelopeId, envelopeItemId, documentDataId, token, presignToken, version } = options;
const partialUrl = `envelope/${envelopeId}/envelopeItem/${envelopeItemId}/dataId/${documentDataId}/${version}/item.pdf`;
// Recipient token endpoint.
if (token) {
return `${NEXT_PUBLIC_WEBAPP_URL()}/api/files/token/${token}/${partialUrl}`;
}
// Endpoint authenticated by session or presigned token.
const baseUrl = `${NEXT_PUBLIC_WEBAPP_URL()}/api/files/${partialUrl}`;
if (presignToken) {
return `${baseUrl}?presignToken=${presignToken}`;
}
return baseUrl;
};
/**
* Gets a PDF url for the PDF viewer.
*
* Returns `null` if invalid.
*/
export const getDocumentDataUrlForPdfViewer = (options: DocumentDataUrlOptions): string | null => {
const { envelopeId, envelopeItemId, documentDataId } = options;
if (!envelopeId || !envelopeItemId || !documentDataId) {
return null;
}
return getDocumentDataUrl(options);
};