Skip to content

v2.37.0#2128

Merged
prafull-opensignlabs merged 1 commit intostagingfrom
updates-22659538479
Mar 4, 2026
Merged

v2.37.0#2128
prafull-opensignlabs merged 1 commit intostagingfrom
updates-22659538479

Conversation

@nxglabs
Copy link
Collaborator

@nxglabs nxglabs commented Mar 4, 2026

No description provided.

@vercel
Copy link

vercel bot commented Mar 4, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
open-sign Ready Ready Preview, Comment Mar 4, 2026 7:32am

Copilot AI review requested due to automatic review settings March 4, 2026 07:31
@prafull-opensignlabs prafull-opensignlabs changed the title Merge pull request v2.37.0 Mar 4, 2026
@prafull-opensignlabs prafull-opensignlabs merged commit a56b87a into staging Mar 4, 2026
7 checks passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates both the OpenSign server and web app with new widget metadata support (hint), improved S3 presigning via AWS SDK v3, bulk-send UX improvements, and a new in-app email template builder.

Changes:

  • Add hint support across widget option generation + UI configuration.
  • Replace legacy aws-sdk usage with AWS SDK v3 presigning / S3 configuration updates.
  • Introduce a new Email Builder feature (UI, editor state, block system) and related UI/UX refinements (bulk send, date formats, typos, favicon, image compression).

Reviewed changes

Copilot reviewed 155 out of 158 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
apps/OpenSignServer/utils/WidgetUtils.js Add hint to widget options
apps/OpenSignServer/package.json Bump version + deps
apps/OpenSignServer/index.js Update S3 adapter endpoint config
apps/OpenSignServer/cloud/parsefunction/triggerEvent.js AuditTrail “viewed” updates + IP capture
apps/OpenSignServer/cloud/parsefunction/sendMailv3.js Append spam-report footer + update mail count
apps/OpenSignServer/cloud/parsefunction/reportsJson.js Include Company/Phone in report include
apps/OpenSignServer/cloud/parsefunction/pdf/PDF.js Email template variable + footer changes
apps/OpenSignServer/cloud/parsefunction/getSignedUrl.js Migrate presigning to AWS SDK v3
apps/OpenSignServer/cloud/parsefunction/declinedocument.js Remove spam/complaint footer text
apps/OpenSignServer/cloud/parsefunction/UserAfterFInd.js Refactor URL presigning logic
apps/OpenSignServer/cloud/parsefunction/TenantAfterFind.js Presign Logo/Favicon URLs
apps/OpenSignServer/cloud/parsefunction/TemplateAfterFind.js Refactor URL resolution
apps/OpenSignServer/cloud/parsefunction/SignatureAfterFind.js Refactor URL resolution
apps/OpenSignServer/cloud/parsefunction/GetLogoByDomain.js Return favicon alongside logo
apps/OpenSignServer/cloud/parsefunction/ForwardDoc.js Remove spam/complaint footer text
apps/OpenSignServer/cloud/parsefunction/DocumentAfterFind.js Refactor URL resolution
apps/OpenSignServer/cloud/customRoute/deleteAccount/deleteUser.js Add delete-user logging
apps/OpenSignServer/Utils.js Simplify updateMailCount, add date format
apps/OpenSign/src/utils/widgetUtils.js Add helpers (compat checks, regex, mail modal head)
apps/OpenSign/src/utils/prefillUtils.js De-duplicate required prefill validation
apps/OpenSign/src/utils/fileUtils.js Add image compression helper
apps/OpenSign/src/reports/contact/Contactbook.jsx Alert on save + typo fixes
apps/OpenSign/src/redux/reducers/widgetSlice.js Add invalidRow state + formatting
apps/OpenSign/src/redux/reducers/infoReducer.js Store favicon in localStorage
apps/OpenSign/src/primitives/Tour.jsx Replace body-scroll-lock with touch scroll lock
apps/OpenSign/src/primitives/ModalUi.jsx Add optional help tooltip in modal title
apps/OpenSign/src/primitives/DotLottieReact.jsx Fix i18n key typo
apps/OpenSign/src/pages/UserProfile.jsx Compress profile image before upload
apps/OpenSign/src/pages/UserList.jsx Fix i18n key typo
apps/OpenSign/src/pages/TemplatePlaceholder.jsx Bulk mail modal title helper + template fields + sizing tweaks
apps/OpenSign/src/pages/SignyourselfPdf.jsx PDF sizing tweaks + widget sizing logic updates
apps/OpenSign/src/pages/PdfRequestFiles.jsx PDF sizing tweaks
apps/OpenSign/src/pages/Form.jsx Reminder validation improvements
apps/OpenSign/src/pages/EmailBuilder.tsx Add EmailBuilder route page
apps/OpenSign/src/pages/AddAdmin.jsx Fix i18n key typo
apps/OpenSign/src/json/ReportJson.js Add “extend expiry” action
apps/OpenSign/src/json/BulkSendSteps.jsx Add bulk-send step tooltips config
apps/OpenSign/src/components/shared/fields/SuggestionInput.jsx Improve debounce + props sync behavior
apps/OpenSign/src/components/shared/fields/FolderModal.jsx Fix i18n key typo
apps/OpenSign/src/components/shared/fields/CellsInput.jsx Input filtering behavior change + formatting
apps/OpenSign/src/components/preferences/tabs/Widgets.jsx Layout tweak around date picker
apps/OpenSign/src/components/preferences/DateFormatSelector.jsx Add DD-MMM-YYYY format
apps/OpenSign/src/components/pdf/WidgetNameModal.jsx Centralize regex mapping helper
apps/OpenSign/src/components/pdf/WidgetComponent.jsx Formatting + block color handling
apps/OpenSign/src/components/pdf/RecipientList.jsx Optional chaining for setBlockColor
apps/OpenSign/src/components/pdf/PrefillWidgetsModal.jsx Safer sync for duplicate widget names
apps/OpenSign/src/components/pdf/PlaceholderType.jsx Date display refactor + trimming fixes
apps/OpenSign/src/components/pdf/Placeholder.jsx Add hint editing for date widget modal
apps/OpenSign/src/components/pdf/EmailComponent.jsx Fix i18n key typo
apps/OpenSign/src/components/pdf/EmailBody.jsx Replace Quill with EmailBodyEditor integration
apps/OpenSign/src/components/pdf/EditorToolbar.jsx Remove HTML edit plugin wiring
apps/OpenSign/src/components/pdf/EditTemplate.jsx Add reminder invalid handler
apps/OpenSign/src/components/pdf/CustomizeMail.jsx Reset handling + mail status mapping + ref sharing
apps/OpenSign/src/components/emailbuilder/getConfiguration/sample/empty-email-message.ts Add empty email template sample
apps/OpenSign/src/components/emailbuilder/getConfiguration/index.tsx Add configuration loader logic
apps/OpenSign/src/components/emailbuilder/documents/editor/core.tsx Add block registry + schema
apps/OpenSign/src/components/emailbuilder/documents/editor/EditorContext.tsx Add editor state store (zustand)
apps/OpenSign/src/components/emailbuilder/documents/editor/EditorBlock.tsx Block loader by id
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/zod.ts Shared zod helper validators
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/fontFamily.ts Define font families
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/cloneDocumentBlock.ts Clone blocks utility
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/block-wrappers/ReaderBlockWrapper.tsx Reader wrapper styling
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/block-wrappers/EditorBlockWrapper.tsx Editor wrapper selection UI
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/TStyle.ts Shared style type
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/EditorChildrenIds/index.tsx Editable children list UI
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/index.tsx Add-block menu scaffolding
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/buttons.tsx Block palette definitions
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/PlaceholderButton.tsx Placeholder add button
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/DividerButton.tsx Inline add button
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlocksMenu.tsx Block menu UI
apps/OpenSign/src/components/emailbuilder/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlockButton.tsx Block menu button UI
apps/OpenSign/src/components/emailbuilder/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx EmailLayout schema
apps/OpenSign/src/components/emailbuilder/documents/blocks/EmailLayout/EmailLayoutEditor.tsx EmailLayout editor
apps/OpenSign/src/components/emailbuilder/documents/blocks/Container/ContainerPropsSchema.tsx Container schema
apps/OpenSign/src/components/emailbuilder/documents/blocks/Container/ContainerEditor.tsx Container editor
apps/OpenSign/src/components/emailbuilder/documents/blocks/ColumnsContainer/ColumnsContainerPropsSchema.ts Columns schema
apps/OpenSign/src/components/emailbuilder/documents/blocks/ColumnsContainer/ColumnsContainerEditor.tsx Columns editor
apps/OpenSign/src/components/emailbuilder/EmailBuilder.tsx EmailBuilder wrapper component
apps/OpenSign/src/components/emailbuilder/App/index.tsx Email builder app shell
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/index.tsx Main editor/preview/html panels
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/helper/renderEmailHtml.ts Render + canvas width override
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/helper/highlighters.tsx Prettier + hljs formatting
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/helper/HighlightedCodePanel.tsx Highlighted code viewer
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/ShareButton.tsx Copy generated HTML
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/MainTabsGroup.tsx Tab switcher
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/JsonPanel.tsx JSON view panel
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/HtmlPanel.tsx HTML view panel
apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/DownloadJson/index.tsx Download template HTML
apps/OpenSign/src/components/emailbuilder/App/SamplesDrawer/index.tsx Sample templates drawer
apps/OpenSign/src/components/emailbuilder/App/SamplesDrawer/ToggleSamplesPanelButton.tsx Toggle samples drawer
apps/OpenSign/src/components/emailbuilder/App/SamplesDrawer/SidebarButton.tsx Sample navigation button
apps/OpenSign/src/components/emailbuilder/App/InspectorDrawer/index.tsx Inspector drawer
apps/OpenSign/src/components/emailbuilder/App/InspectorDrawer/ToggleInspectorPanelButton.tsx Toggle inspector drawer
apps/OpenSign/src/components/emailbuilder/App/InspectorDrawer/StylesPanel.tsx Global styles editing
apps/OpenSign/src/components/emailbuilder/App/InspectorDrawer/ConfigurationPanel/index.tsx Per-block configuration panels
apps/OpenSign/src/components/bulksend/components/WizardHeader.jsx Bulk send wizard header UI
apps/OpenSign/src/components/bulksend/components/Table.jsx Bulk send recipients/widgets table
apps/OpenSign/src/components/bulksend/components/ResponseTab.jsx Bulk send summary tab
apps/OpenSign/src/components/bulksend/components/PrefillWidgets.jsx Prefill step widgets UI
apps/OpenSign/src/components/EmailBodyEditor.jsx HTML email editor + sanitizer/preview
apps/OpenSign/src/components/DatePicker.jsx DatePicker UX enhancements
apps/OpenSign/src/components/AddUser.jsx Fix i18n key typo
apps/OpenSign/src/App.jsx Add /emailbuilder route
apps/OpenSign/public/version.txt Add version file
Comments suppressed due to low confidence (4)

apps/OpenSign/src/components/emailbuilder/App/TemplatePanel/DownloadJson/index.tsx:23

  • URL.createObjectURL(blob) is created and retained in state, but never revoked. As the document changes (or the component mounts/unmounts), this can leak object URLs. Revoke the old URL in an effect cleanup or generate the URL only on click and revoke immediately after download.
    apps/OpenSign/src/components/pdf/Placeholder.jsx:1204
  • The hint input uses value={formdata?.hint}, but hint is initialized from props?.pos?.options?.hint without a default. If that value is undefined, React will treat the input as uncontrolled and then controlled once the user types, producing warnings. Initialize hint to an empty string and keep value as a string. Also, the placeholder text is hard-coded (not localized) despite the rest of the UI using t(...).
    apps/OpenSignServer/utils/WidgetUtils.js:33
  • getWidgetOptions returns only { hint } for type === 'signature', unlike stamp/initials which include required and name. If signature widgets rely on these fields (e.g., required enforcement or label/name display), this will break downstream behavior. Consider returning the same core fields (required, name) for signatures as well (plus hint).
    apps/OpenSignServer/cloud/parsefunction/triggerEvent.js:61
  • This change updates an existing Viewed audit-trail entry for a contact and overwrites ViewedOn each time the event fires. Previously the logic avoided writing a second viewed record once ViewedOn existed, preserving the first-view timestamp. If the intended behavior is “first viewed”, keep the original ViewedOn when already set (or append a new event instead of overwriting).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

const docRes = await docQuery.get(docId, { useMasterKey: true });
const _docRes = docRes && docRes?.toJSON();
const isEnableOTP = docRes?.get('IsEnableOTP') || false;
const ipAddress = request.headers['x-real-ip'] || '';
Copy link

Copilot AI Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

request.headers is treated as optional earlier (request.headers?.sessiontoken), but ipAddress reads request.headers['x-real-ip'] without optional chaining. If headers is missing, this will throw at runtime. Use request.headers?.['x-real-ip'] (and/or fall back to x-forwarded-for).

Copilot uses AI. Check for mistakes.
Comment on lines +16 to +20
return getCompletionEmail(
);
default:
return "requestemail";
}
Copy link

Copilot AI Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getConfiguration returns the string literal "requestemail" in the #sample/ default case. That makes the function’s return type inconsistent (string vs configuration object) and will break callers expecting a TEditorConfiguration. Return a valid configuration instead (e.g., getRequestEmail() or EMPTY_EMAIL_MESSAGE).

Copilot uses AI. Check for mistakes.
Comment on lines +19 to +22
const editorStateStore = create<TValue>(() => ({
document: getConfiguration(window.location.hash),
selectedBlockId: null,
selectedSidebarTab: "styles",
Copy link

Copilot AI Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EditorContext initializes Zustand state using window.location.hash at module load time. This will throw in non-browser environments (tests, SSR, static pre-render) where window is undefined. Guard with typeof window !== 'undefined' and provide a safe default hash/value.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants