Skip to content

Commit 93dffbb

Browse files
committed
Update to version 4.4.0 on 2026-11-01
- New: list_email_actions, create_email_action, get_email_action, update_email_action and delete_email_action manage a template's email actions (`EmailAction`), which email each processed submission's files as attachments or a download link. `to`, `cc` and `bcc` take addresses, and tags for an address in the submission's fields (`{{ data.client_email }}`) or metadata (`{{ metadata.agent_email }}`). `send_when` sends only for the submissions that meet its conditions. `file_name` names the attached files, and `file_formats` chooses them: a Word template's Word document (`docx`), OpenDocument file (`odt`) or PDF (`pdf`), or every file the submission made (`all`). Attached files over `max_attachment_mb` together (7 MB unless you raise it, up to 25) go as a link instead. send_email_action_test_email sends one to you to check how it looks (`EmailActionTestEmail`). Without a paid plan (Starter or higher), email actions only email your team: test emails, and test submissions' emails. - New: list_account_email_actions, create_account_email_action, get_account_email_action, update_account_email_action and delete_account_email_action manage your account's email actions, which send for every template, or for the templates and folders they list (`template_ids`, `folder_ids`). send_account_email_action_test_email sends one to you for one of its templates. - New: list_email_actions also lists your account's email actions that send for the template, with the template's changes in `customization` (`EmailActionCustomization`). update_email_action_customization changes one for that template only, or turns it off there (`enabled`), and delete_email_action_customization removes the template's changes. - New: list_email_domains, create_email_domain, get_email_domain, verify_email_domain and delete_email_domain manage the domains your email actions send from (`EmailDomain`), with the DNS records to add to each one (`EmailDomainDnsRecord`). - A submission's `actions` include the emails its email actions sent (its template's and your account's), with each recipient and what happened to their email, and a new `email_action_id`. - New: a field's `string_condition_type` can be `not_equals`, `not_contains`, `not_starts_with`, `not_ends_with`, `not_regex`, `blank` or `not_blank`, and a `regex` condition uses RE2 syntax (no lookarounds or backreferences). - create_submission: DocSpring now emails the signers of a submission's `signature_requests` a link to sign, any reminders, and the signed PDF once everyone has signed. Set `send_email` to false, for the submission or for one signature request, when you send the links yourself or show the signing form in your app. A signature request that DocSpring emails needs an `email`, and its `auth_type` is optional (`email_link`). Before anyone is emailed, the request can be refused with a 402 (`insufficient_credits_to_send`), a 403 or a 429 (`daily_email_limit_reached`), and nothing is saved. - New create_submission properties for these emails: `signing_order` (`SigningOrder`) with each signature request's `signing_step`, `email_subject`, `email_message`, `cc`, `reply_to`, `notification_emails`, `notify_when_signed` and `reminders` (`SignatureRequestReminders`). - A signature request has `send_email`, `signing_step`, `sent_at` and `email_status` (`SignatureRequestEmailStatus`), and a submission has `signing_order`. - Templates have new settings for these emails: `signature_request_from_name`, `signature_request_from_address`, `signature_request_signing_url`, `signature_request_include_signing_token`, `signature_request_reply_to`, `signature_request_notification_emails` and `signature_request_email_attachments` (`SignatureRequestEmailAttachments`). - New webhook event types: `signature_request.sent` and `signature_request.email_bounced`. - New: page designs (`template_type` `page_designer`), PDFs designed in the Page Designer from a JSON layout, with no document to start from. create_template makes one from its `layout`, or with an empty page when `layout` is left out, and update_template replaces its layout. DocSpring adds a field for each value the layout reads. A template's `layout` is in the [Page Designer layout format](https://docspring.com/docs/page-designer/layout-format/) (its [JSON Schema](https://docspring.com/schemas/page-designer/layout.v1.json)), and is null for other templates. - New: every method that creates, changes or deletes something takes an `Idempotency-Key` header, as the `idempotencyKey` option. Send the same key when you send a request again after a timeout or a network error: within 24 hours, DocSpring returns the first response instead of running the request twice. Arguments you already pass keep their places. - Changed: the request validator checks what API v2 now refuses: an ID, a query value or a template name that's blank or only whitespace, an update with nothing to change, a version with a leading zero (`01`), a `filename` with a slash, a signer `email` that isn't an email address, and an HTML template's `scale` outside 0.1 to 2. - New: get_template_model_code takes `rust` as its `lang`, for Rust structs that serde reads and writes.
1 parent 4e82fdf commit 93dffbb

242 files changed

Lines changed: 13919 additions & 1161 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/release.yml‎

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# Written by DocSpring/docspring's api_clients/scripts/generate from api_clients/github_workflows/javascript/release.yml:
2+
# change it there.
3+
#
4+
# Builds the package on every push and pull request. A v* tag (pushed by the monorepo's api_clients/scripts/release)
5+
# also publishes it to npm with trusted publishing, in the release environment, and waits until npm serves it.
6+
name: Release
7+
8+
on:
9+
push:
10+
branches: ['**']
11+
tags: ['v*']
12+
pull_request:
13+
14+
permissions:
15+
contents: read
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
22+
with:
23+
persist-credentials: false
24+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
25+
with:
26+
node-version: 24
27+
- name: Check the tag matches the package version
28+
if: github.ref_type == 'tag'
29+
run: |
30+
VERSION="$(node -p 'require("./package.json").version')"
31+
if [ "v$VERSION" != "$GITHUB_REF_NAME" ]; then
32+
echo "::error::The tag is $GITHUB_REF_NAME, but the package version is $VERSION"
33+
exit 1
34+
fi
35+
# npm ci runs the package's prepare script, which builds dist/
36+
- run: npm ci
37+
- run: npm pack
38+
- name: Publish dry run
39+
run: |
40+
VERSION="$(node -p 'require("./package.json").version')"
41+
# npm's dry run fails for a version it already has, as every push does between a release and the next bump
42+
if curl -fs -o /dev/null "https://registry.npmjs.org/docspring/$VERSION"; then
43+
echo "::notice::npm already has docspring $VERSION, so there's nothing to dry-run"
44+
exit 0
45+
fi
46+
# npm refuses a prerelease without a dist-tag, and latest must stay on the newest release
47+
DIST_TAG=latest
48+
case "$VERSION" in *-*) DIST_TAG=next ;; esac
49+
npm publish "docspring-$VERSION.tgz" --dry-run --access public --tag "$DIST_TAG"
50+
- if: github.ref_type == 'tag'
51+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
52+
with:
53+
name: package
54+
path: docspring-*.tgz
55+
if-no-files-found: error
56+
57+
publish:
58+
needs: build
59+
if: github.ref_type == 'tag'
60+
runs-on: ubuntu-latest
61+
environment: release
62+
permissions:
63+
contents: read
64+
id-token: write
65+
steps:
66+
- uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
67+
with:
68+
node-version: 24
69+
# Trusted publishing needs npm 11.5.1 or later
70+
- run: npm install --global npm@11.21.1
71+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
72+
with:
73+
name: package
74+
- name: Publish to npm
75+
run: |
76+
VERSION="${GITHUB_REF_NAME#v}"
77+
DIST_TAG=latest
78+
case "$VERSION" in *-*) DIST_TAG=next ;; esac
79+
npm publish "docspring-$VERSION.tgz" --access public --tag "$DIST_TAG"
80+
81+
verify:
82+
needs: publish
83+
runs-on: ubuntu-latest
84+
timeout-minutes: 15
85+
steps:
86+
- name: Wait until npm serves the version
87+
run: |
88+
VERSION="${GITHUB_REF_NAME#v}"
89+
for _ in $(seq 60); do
90+
if curl -fsS -o /dev/null "https://registry.npmjs.org/docspring/$VERSION"; then
91+
echo "npm serves docspring $VERSION"
92+
exit 0
93+
fi
94+
sleep 10
95+
done
96+
echo "::error::npm doesn't serve docspring $VERSION after 10 minutes"
97+
exit 1

‎.openapi-generator/FILES‎

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ docs/CombinedPdfSourcePdf.md
1818
docs/CombinedPdfSourceType.md
1919
docs/CombinedPdfState.md
2020
docs/CopyTemplateRequest.md
21+
docs/CreateAccountEmailActionRequest.md
2122
docs/CreateCombinedPdfRequest.md
2223
docs/CreateCustomFileFromUploadRequest.md
24+
docs/CreateEmailActionRequest.md
25+
docs/CreateEmailDomainRequest.md
2326
docs/CreateFolderRequest.md
2427
docs/CreateSignatureRequestEventRequest.md
2528
docs/CreateSignatureRequestTokenRequest.md
@@ -31,6 +34,23 @@ docs/CreateWebhookRequest.md
3134
docs/CustomFile.md
3235
docs/CustomFileList.md
3336
docs/CustomFileSourcePdf.md
37+
docs/DnsRecordType.md
38+
docs/EmailAction.md
39+
docs/EmailActionConditions.md
40+
docs/EmailActionConditionsInput.md
41+
docs/EmailActionCustomization.md
42+
docs/EmailActionDelivery.md
43+
docs/EmailActionFileFormats.md
44+
docs/EmailActionList.md
45+
docs/EmailActionSetting.md
46+
docs/EmailActionSubmissionType.md
47+
docs/EmailActionTestEmail.md
48+
docs/EmailDomain.md
49+
docs/EmailDomainDnsRecord.md
50+
docs/EmailDomainDnsRecordPurpose.md
51+
docs/EmailDomainList.md
52+
docs/EmailDomainRecordState.md
53+
docs/EmailDomainState.md
3454
docs/ErrorCode.md
3555
docs/ErrorDetail.md
3656
docs/ErrorInfo.md
@@ -83,17 +103,22 @@ docs/RemoveTemplateFieldsRequest.md
83103
docs/RenameFolderRequest.md
84104
docs/ReorderTemplateFieldsRequest.md
85105
docs/RestoreTemplateVersionRequest.md
106+
docs/SendAccountEmailActionTestEmailRequest.md
86107
docs/ShapeType.md
87108
docs/SignatureRequest.md
88109
docs/SignatureRequestAuthSecondFactorType.md
89110
docs/SignatureRequestAuthType.md
111+
docs/SignatureRequestEmailAttachments.md
112+
docs/SignatureRequestEmailStatus.md
90113
docs/SignatureRequestEvent.md
91114
docs/SignatureRequestEventType.md
92115
docs/SignatureRequestInput.md
93116
docs/SignatureRequestMessageType.md
117+
docs/SignatureRequestReminders.md
94118
docs/SignatureRequestState.md
95119
docs/SignatureRequestToken.md
96120
docs/SignatureRequestTokenType.md
121+
docs/SigningOrder.md
97122
docs/StringConditionType.md
98123
docs/Submission.md
99124
docs/SubmissionAction.md
@@ -151,6 +176,9 @@ docs/TextAlignment.md
151176
docs/TextOverflow.md
152177
docs/TextVerticalAlignment.md
153178
docs/Typeface.md
179+
docs/UpdateAccountEmailActionRequest.md
180+
docs/UpdateEmailActionCustomizationRequest.md
181+
docs/UpdateEmailActionRequest.md
154182
docs/UpdateSignatureRequestRequest.md
155183
docs/UpdateTemplateDocumentRequest.md
156184
docs/UpdateTemplateFieldsRequest.md
@@ -185,8 +213,11 @@ src/model/CombinedPdfSourcePdf.js
185213
src/model/CombinedPdfSourceType.js
186214
src/model/CombinedPdfState.js
187215
src/model/CopyTemplateRequest.js
216+
src/model/CreateAccountEmailActionRequest.js
188217
src/model/CreateCombinedPdfRequest.js
189218
src/model/CreateCustomFileFromUploadRequest.js
219+
src/model/CreateEmailActionRequest.js
220+
src/model/CreateEmailDomainRequest.js
190221
src/model/CreateFolderRequest.js
191222
src/model/CreateSignatureRequestEventRequest.js
192223
src/model/CreateSignatureRequestTokenRequest.js
@@ -198,6 +229,23 @@ src/model/CreateWebhookRequest.js
198229
src/model/CustomFile.js
199230
src/model/CustomFileList.js
200231
src/model/CustomFileSourcePdf.js
232+
src/model/DnsRecordType.js
233+
src/model/EmailAction.js
234+
src/model/EmailActionConditions.js
235+
src/model/EmailActionConditionsInput.js
236+
src/model/EmailActionCustomization.js
237+
src/model/EmailActionDelivery.js
238+
src/model/EmailActionFileFormats.js
239+
src/model/EmailActionList.js
240+
src/model/EmailActionSetting.js
241+
src/model/EmailActionSubmissionType.js
242+
src/model/EmailActionTestEmail.js
243+
src/model/EmailDomain.js
244+
src/model/EmailDomainDnsRecord.js
245+
src/model/EmailDomainDnsRecordPurpose.js
246+
src/model/EmailDomainList.js
247+
src/model/EmailDomainRecordState.js
248+
src/model/EmailDomainState.js
201249
src/model/ErrorCode.js
202250
src/model/ErrorDetail.js
203251
src/model/ErrorInfo.js
@@ -250,17 +298,22 @@ src/model/RemoveTemplateFieldsRequest.js
250298
src/model/RenameFolderRequest.js
251299
src/model/ReorderTemplateFieldsRequest.js
252300
src/model/RestoreTemplateVersionRequest.js
301+
src/model/SendAccountEmailActionTestEmailRequest.js
253302
src/model/ShapeType.js
254303
src/model/SignatureRequest.js
255304
src/model/SignatureRequestAuthSecondFactorType.js
256305
src/model/SignatureRequestAuthType.js
306+
src/model/SignatureRequestEmailAttachments.js
307+
src/model/SignatureRequestEmailStatus.js
257308
src/model/SignatureRequestEvent.js
258309
src/model/SignatureRequestEventType.js
259310
src/model/SignatureRequestInput.js
260311
src/model/SignatureRequestMessageType.js
312+
src/model/SignatureRequestReminders.js
261313
src/model/SignatureRequestState.js
262314
src/model/SignatureRequestToken.js
263315
src/model/SignatureRequestTokenType.js
316+
src/model/SigningOrder.js
264317
src/model/StringConditionType.js
265318
src/model/Submission.js
266319
src/model/SubmissionAction.js
@@ -318,6 +371,9 @@ src/model/TextAlignment.js
318371
src/model/TextOverflow.js
319372
src/model/TextVerticalAlignment.js
320373
src/model/Typeface.js
374+
src/model/UpdateAccountEmailActionRequest.js
375+
src/model/UpdateEmailActionCustomizationRequest.js
376+
src/model/UpdateEmailActionRequest.js
321377
src/model/UpdateSignatureRequestRequest.js
322378
src/model/UpdateTemplateDocumentRequest.js
323379
src/model/UpdateTemplateFieldsRequest.js
@@ -347,8 +403,11 @@ test/model/CombinedPdfSourcePdf.spec.js
347403
test/model/CombinedPdfSourceType.spec.js
348404
test/model/CombinedPdfState.spec.js
349405
test/model/CopyTemplateRequest.spec.js
406+
test/model/CreateAccountEmailActionRequest.spec.js
350407
test/model/CreateCombinedPdfRequest.spec.js
351408
test/model/CreateCustomFileFromUploadRequest.spec.js
409+
test/model/CreateEmailActionRequest.spec.js
410+
test/model/CreateEmailDomainRequest.spec.js
352411
test/model/CreateFolderRequest.spec.js
353412
test/model/CreateSignatureRequestEventRequest.spec.js
354413
test/model/CreateSignatureRequestTokenRequest.spec.js
@@ -360,6 +419,23 @@ test/model/CreateWebhookRequest.spec.js
360419
test/model/CustomFile.spec.js
361420
test/model/CustomFileList.spec.js
362421
test/model/CustomFileSourcePdf.spec.js
422+
test/model/DnsRecordType.spec.js
423+
test/model/EmailAction.spec.js
424+
test/model/EmailActionConditions.spec.js
425+
test/model/EmailActionConditionsInput.spec.js
426+
test/model/EmailActionCustomization.spec.js
427+
test/model/EmailActionDelivery.spec.js
428+
test/model/EmailActionFileFormats.spec.js
429+
test/model/EmailActionList.spec.js
430+
test/model/EmailActionSetting.spec.js
431+
test/model/EmailActionSubmissionType.spec.js
432+
test/model/EmailActionTestEmail.spec.js
433+
test/model/EmailDomain.spec.js
434+
test/model/EmailDomainDnsRecord.spec.js
435+
test/model/EmailDomainDnsRecordPurpose.spec.js
436+
test/model/EmailDomainList.spec.js
437+
test/model/EmailDomainRecordState.spec.js
438+
test/model/EmailDomainState.spec.js
363439
test/model/ErrorCode.spec.js
364440
test/model/ErrorDetail.spec.js
365441
test/model/ErrorInfo.spec.js
@@ -412,17 +488,22 @@ test/model/RemoveTemplateFieldsRequest.spec.js
412488
test/model/RenameFolderRequest.spec.js
413489
test/model/ReorderTemplateFieldsRequest.spec.js
414490
test/model/RestoreTemplateVersionRequest.spec.js
491+
test/model/SendAccountEmailActionTestEmailRequest.spec.js
415492
test/model/ShapeType.spec.js
416493
test/model/SignatureRequest.spec.js
417494
test/model/SignatureRequestAuthSecondFactorType.spec.js
418495
test/model/SignatureRequestAuthType.spec.js
496+
test/model/SignatureRequestEmailAttachments.spec.js
497+
test/model/SignatureRequestEmailStatus.spec.js
419498
test/model/SignatureRequestEvent.spec.js
420499
test/model/SignatureRequestEventType.spec.js
421500
test/model/SignatureRequestInput.spec.js
422501
test/model/SignatureRequestMessageType.spec.js
502+
test/model/SignatureRequestReminders.spec.js
423503
test/model/SignatureRequestState.spec.js
424504
test/model/SignatureRequestToken.spec.js
425505
test/model/SignatureRequestTokenType.spec.js
506+
test/model/SigningOrder.spec.js
426507
test/model/StringConditionType.spec.js
427508
test/model/Submission.spec.js
428509
test/model/SubmissionAction.spec.js
@@ -480,6 +561,9 @@ test/model/TextAlignment.spec.js
480561
test/model/TextOverflow.spec.js
481562
test/model/TextVerticalAlignment.spec.js
482563
test/model/Typeface.spec.js
564+
test/model/UpdateAccountEmailActionRequest.spec.js
565+
test/model/UpdateEmailActionCustomizationRequest.spec.js
566+
test/model/UpdateEmailActionRequest.spec.js
483567
test/model/UpdateSignatureRequestRequest.spec.js
484568
test/model/UpdateTemplateDocumentRequest.spec.js
485569
test/model/UpdateTemplateFieldsRequest.spec.js

‎.travis.yml‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎CHANGELOG.md‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,58 @@
1+
### 4.4.0 [November 1, 2026]
2+
3+
- New: list_email_actions, create_email_action, get_email_action, update_email_action and delete_email_action manage a
4+
template's email actions (`EmailAction`), which email each processed submission's files as attachments or a download
5+
link. `to`, `cc` and `bcc` take addresses, and tags for an address in the submission's fields
6+
(`{{ data.client_email }}`) or metadata (`{{ metadata.agent_email }}`). `send_when` sends only for the submissions
7+
that meet its conditions. `file_name` names the attached files, and `file_formats` chooses them: a Word template's
8+
Word document (`docx`), OpenDocument file (`odt`) or PDF (`pdf`), or every file the submission made (`all`). Attached
9+
files over `max_attachment_mb` together (7 MB unless you raise it, up to 25) go as a link instead.
10+
send_email_action_test_email sends one to you to check how it looks (`EmailActionTestEmail`). Without a paid plan
11+
(Starter or higher), email actions only email your team: test emails, and test submissions' emails.
12+
- New: list_account_email_actions, create_account_email_action, get_account_email_action, update_account_email_action
13+
and delete_account_email_action manage your account's email actions, which send for every template, or for the
14+
templates and folders they list (`template_ids`, `folder_ids`). send_account_email_action_test_email sends one to you
15+
for one of its templates.
16+
- New: list_email_actions also lists your account's email actions that send for the template, with the template's
17+
changes in `customization` (`EmailActionCustomization`). update_email_action_customization changes one for that
18+
template only, or turns it off there (`enabled`), and delete_email_action_customization removes the template's
19+
changes.
20+
- New: list_email_domains, create_email_domain, get_email_domain, verify_email_domain and delete_email_domain manage the
21+
domains your email actions send from (`EmailDomain`), with the DNS records to add to each one (`EmailDomainDnsRecord`).
22+
- A submission's `actions` include the emails its email actions sent (its template's and your account's), with each
23+
recipient and what happened to their email, and a new `email_action_id`.
24+
- New: a field's `string_condition_type` can be `not_equals`, `not_contains`, `not_starts_with`, `not_ends_with`,
25+
`not_regex`, `blank` or `not_blank`, and a `regex` condition uses RE2 syntax (no lookarounds or backreferences).
26+
- create_submission: DocSpring now emails the signers of a submission's `signature_requests` a link to sign, any
27+
reminders, and the signed PDF once everyone has signed. Set `send_email` to false, for the submission or for one
28+
signature request, when you send the links yourself or show the signing form in your app. A signature request that
29+
DocSpring emails needs an `email`, and its `auth_type` is optional (`email_link`). Before anyone is emailed, the
30+
request can be refused with a 402 (`insufficient_credits_to_send`), a 403 or a 429 (`daily_email_limit_reached`), and
31+
nothing is saved.
32+
- New create_submission properties for these emails: `signing_order` (`SigningOrder`) with each signature request's
33+
`signing_step`, `email_subject`, `email_message`, `cc`, `reply_to`, `notification_emails`, `notify_when_signed` and
34+
`reminders` (`SignatureRequestReminders`).
35+
- A signature request has `send_email`, `signing_step`, `sent_at` and `email_status` (`SignatureRequestEmailStatus`),
36+
and a submission has `signing_order`.
37+
- Templates have new settings for these emails: `signature_request_from_name`, `signature_request_from_address`,
38+
`signature_request_signing_url`, `signature_request_include_signing_token`, `signature_request_reply_to`,
39+
`signature_request_notification_emails` and `signature_request_email_attachments`
40+
(`SignatureRequestEmailAttachments`).
41+
- New webhook event types: `signature_request.sent` and `signature_request.email_bounced`.
42+
- New: page designs (`template_type` `page_designer`), PDFs designed in the Page Designer from a JSON layout, with no
43+
document to start from. create_template makes one from its `layout`, or with an empty page when `layout` is left
44+
out, and update_template replaces its layout. DocSpring adds a field for each value the layout reads. A template's
45+
`layout` is in the [Page Designer layout format](https://docspring.com/docs/page-designer/layout-format/) (its
46+
[JSON Schema](https://docspring.com/schemas/page-designer/layout.v1.json)), and is null for other templates.
47+
- New: every method that creates, changes or deletes something takes an `Idempotency-Key` header, as the
48+
`idempotencyKey` option. Send the same key when you send a request again after a timeout or a network error: within 24
49+
hours, DocSpring returns the first response instead of running the request twice. Arguments you already pass keep
50+
their places.
51+
- Changed: the request validator checks what API v2 now refuses: an ID, a query value or a template name that's blank or
52+
only whitespace, an update with nothing to change, a version with a leading zero (`01`), a `filename` with a slash, a
53+
signer `email` that isn't an email address, and an HTML template's `scale` outside 0.1 to 2.
54+
- New: get_template_model_code takes `rust` as its `lang`, for Rust structs that serde reads and writes.
55+
156
### 4.3.0 [October 31, 2026]
257

358
- New: get_template_model_code takes `rust` as its `lang`, for Rust structs that serde reads and writes.

0 commit comments

Comments
 (0)