-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Zeebe Worker payload parsing needs to be lossless #81
Comments
The Zeebe worker payload comes over as stringified JSON, so int64 values will be numbers to the parser. |
As the first step towards this, the Zeebe worker input and output (the This means that This is lossless, but not predictable for consumers. The next phase is to allow the user to specify a |
OK, the Typing of Zeebe Worker VariablesThe variable payload in a Zeebe Worker task handler is available as an object The
With no Dto specified, there is no design-time type safety. At run-time, all JSON numbers are converted to the JavaScript To provide a Dto, extend the class MyVariableDto extends LosslessDto {
name!: string
maybeAge?: number
@Int64String
veryBigNumber!: string
@BigIntValue
veryBigInteger!: bigint
} In this case, You can nest Dtos like this: class MyLargerDto extends LosslessDto {
id!: string
@ChildDto(MyVariableDto)
entry!: MyVariableDto
} Typing of Custom HeadersThe Zeebe worker receives custom headers as This follows the same strategy as the job variables, as previously described. |
OK, let's make this simple. These are the scenarios that we want to handle:
To accomplish these:
So there is one type of parser, one type of Dto. The parser, if not supplied with a Dto, will simply parse the variables using This will also be the last stage for the parser when supplied with a Dto. When it is supplied with a Dto, the parser will iterate over the Dto, and convert the A question arises here: How should the parser behave if it encounters a value that is not a Answer: it should throw an error, because the expectation expressed in the Dto does not meet reality, and as a consequence the application behaviour is not predictable from the code. Final stage: the object should be iterated with the parser to convert any remaining (unmapped) A question arises here: a field may be specified in the Dto as But what about when the Dto is not complete? After the application is deployed, the payload is extended and now contains an Answer: it should throw if it there is an unmapped, unsafe value. |
Next step: Deal with Output Variable Dto and stringifying variables. |
* feat(zeebe): implement lossless parsing of job payload FIxes #81 * feat(zeebe): implement decisive parser strategy * feat(repo): implement lossless stringify
# [8.5.0-alpha.1](v8.4.0...v8.5.0-alpha.1) (2024-04-04) ### Features * **oauth:** support optional scope in OAuth request ([#25](#25)) ([0451b80](0451b80)) * **operate:** add multitenant support and lossless Json parsing ([#82](#82)) ([cf49a71](cf49a71)), closes [#78](#78) [#67](#67) * **repo:** add enhanced debug output for http errors ([#88](#88)) ([881b039](881b039)), closes [#87](#87) * **tasklist:** add multitenant support to tasklist ([#85](#85)) ([46bb564](46bb564)) * **zeebe:** add MigrateProcessInstance ([#97](#97)) ([2a9a123](2a9a123)), closes [#49](#49) * **zeebe:** implement deleteResource ([#73](#73)) ([0cd08b7](0cd08b7)) * **zeebe:** implement lossless parsing of job payload ([#95](#95)) ([57f3ea8](57f3ea8)), closes [#81](#81) * **zeebe:** normalise useragent, thread config ([#94](#94)) ([c1c4211](c1c4211)) * **zeebe:** remove deployProcess method ([#71](#71)) ([6cb98f0](6cb98f0))
* ci(repo): create npm publish workflow (#100) * Remove-docs (#101) * docs(repo): remove docs * docs(repo): add docs folder to .gitignore * ci(repo): update publish workflow (#102) * ci(repo): configure renovate to run against alpha branch (#103) * ci(repo): configure renovate to run against alpha branch * ci(repo): add workflow step to merge to alpha from main on release * chore(release): 8.5.0-alpha.1 [skip ci] # [8.5.0-alpha.1](v8.4.0...v8.5.0-alpha.1) (2024-04-04) ### Features * **oauth:** support optional scope in OAuth request ([#25](#25)) ([0451b80](0451b80)) * **operate:** add multitenant support and lossless Json parsing ([#82](#82)) ([cf49a71](cf49a71)), closes [#78](#78) [#67](#67) * **repo:** add enhanced debug output for http errors ([#88](#88)) ([881b039](881b039)), closes [#87](#87) * **tasklist:** add multitenant support to tasklist ([#85](#85)) ([46bb564](46bb564)) * **zeebe:** add MigrateProcessInstance ([#97](#97)) ([2a9a123](2a9a123)), closes [#49](#49) * **zeebe:** implement deleteResource ([#73](#73)) ([0cd08b7](0cd08b7)) * **zeebe:** implement lossless parsing of job payload ([#95](#95)) ([57f3ea8](57f3ea8)), closes [#81](#81) * **zeebe:** normalise useragent, thread config ([#94](#94)) ([c1c4211](c1c4211)) * **zeebe:** remove deployProcess method ([#71](#71)) ([6cb98f0](6cb98f0)) * test(repo): skip jest global setup for unit tests (#106) Fixes #105 * build(repo): parallelise publish workflow * build(repo): fix parallelisation * fix(repo): add note on "supported" (#107) Fixes #70 * chore(release): 8.5.0-alpha.2 [skip ci] # [8.5.0-alpha.2](v8.5.0-alpha.1...v8.5.0-alpha.2) (2024-04-05) ### Bug Fixes * **repo:** add note on "supported" ([#107](#107)) ([fc45d61](fc45d61)), closes [#70](#70) * fix(repo): only git commit on npm publish success * chore(release): 8.5.0-alpha.3 [skip ci] # [8.5.0-alpha.3](v8.5.0-alpha.2...v8.5.0-alpha.3) (2024-04-05) ### Bug Fixes * **repo:** only git commit on npm publish success ([9012764](9012764)) * chore(release): 8.5.0-alpha.3 [skip ci] # [8.5.0-alpha.3](v8.5.0-alpha.2...v8.5.0-alpha.3) (2024-04-05) ### Bug Fixes * **repo:** only git commit on npm publish success ([9012764](9012764)) * build(repo): configure semantic release (#109) fixes #108 * fix(repo): use ts-patch to transform module mapping in output (#112) * fix(repo): use ts-patch to transform module mapping in output fixes #110 * build(repo): add missing tsconfig-paths * chore(release): 8.5.0-alpha.4 [skip ci] # [8.5.0-alpha.4](v8.5.0-alpha.3...v8.5.0-alpha.4) (2024-04-05) ### Bug Fixes * **repo:** use ts-patch to transform module mapping in output ([#112](#112)) ([7efdcf3](7efdcf3)), closes [#110](#110) * chore(release): 8.5.0-alpha.4 [skip ci] # [8.5.0-alpha.4](v8.5.0-alpha.3...v8.5.0-alpha.4) (2024-04-05) ### Bug Fixes * **repo:** use ts-patch to transform module mapping in output ([#112](#112)) ([7efdcf3](7efdcf3)), closes [#110](#110) * ci(repo): parallelise tests and use npm install in CI (#116) fixes #115 * Jwulf/issue114 (#117) * fix(repo): use relative paths in source fixes #114 * test(repo): fix relative path in jest setup * test(repo): fix relative path to zeebe * test(repo): convert tests to relative paths * revert(github): remove spurious commitlint config file * fix(repo): make fix type commits release a new package * ci(repo): wrap long lines in commit messages * ci(repo): wrap footer lines at 100 characters in semantic-release config * ci(repo): break commit msgs to 100 chars via husky hook * ci(repo): disable husky during semantic-release * chore(release): 8.5.0-alpha.5 [skip ci] # [8.5.0-alpha.5](v8.5.0-alpha.4...v8.5.0-alpha.5) (2024-04-07) ### Bug Fixes * **repo:** make fix type commits release a new package ([ded83cf](ded83cf)) * chore(release): 8.5.0-alpha.5 [skip ci] # [8.5.0-alpha.5](v8.5.0-alpha.4...v8.5.0-alpha.5) (2024-04-07) ### Bug Fixes * **repo:** make fix type commits release a new package ([ded83cf](ded83cf)) * Issue118 (#119) * test(repo): add smoke test and type surface tests fixes #118 * ci(repo): run smoke test in CI * fix(camunda8): respect OAuth disabled flag * fix(issue118): add smoke test and type surface tests * test(repo): add smoke test and type surface tests fixes #118 * ci(repo): run smoke test in CI * fix(camunda8): respect OAuth disabled flag * release(repo): trigger a new release * chore(release): 8.5.0-alpha.6 [skip ci] # [8.5.0-alpha.6](v8.5.0-alpha.5...v8.5.0-alpha.6) (2024-04-08) ### Bug Fixes * **issue118:** add smoke test and type surface tests ([fe0c709](fe0c709)), closes [#118](#118) * chore(release): 8.5.0-alpha.6 [skip ci] # [8.5.0-alpha.6](v8.5.0-alpha.5...v8.5.0-alpha.6) (2024-04-08) ### Bug Fixes * **issue118:** add smoke test and type surface tests ([fe0c709](fe0c709)), closes [#118](#118) * ci(repo): add CodeQL scanning (#120) fixes #51 --------- Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net>
## [8.4.1](v8.4.0...v8.4.1) (2024-04-08) ### Features * **oauth:** support optional scope in OAuth request ([#25](#25)) ([0451b80](0451b80)) * **operate:** add multitenant support and lossless Json parsing ([#82](#82)) ([cf49a71](cf49a71)), closes [#78](#78) [#67](#67) * **repo:** add enhanced debug output for http errors ([#88](#88)) ([881b039](881b039)), closes [#87](#87) * **tasklist:** add multitenant support to tasklist ([#85](#85)) ([46bb564](46bb564)) * **zeebe:** add MigrateProcessInstance ([#97](#97)) ([2a9a123](2a9a123)), closes [#49](#49) * **zeebe:** implement deleteResource ([#73](#73)) ([0cd08b7](0cd08b7)) * **zeebe:** implement lossless parsing of job payload ([#95](#95)) ([57f3ea8](57f3ea8)), closes [#81](#81) * **zeebe:** normalise useragent, thread config ([#94](#94)) ([c1c4211](c1c4211)) * **zeebe:** remove deployProcess method ([#71](#71)) ([6cb98f0](6cb98f0))
## [8.4.1](v8.4.0...v8.4.1) (2024-04-08) ### Features * **oauth:** support optional scope in OAuth request ([#25](#25)) ([0451b80](0451b80)) * **operate:** add multitenant support and lossless Json parsing ([#82](#82)) ([cf49a71](cf49a71)), closes [#78](#78) [#67](#67) * **repo:** add enhanced debug output for http errors ([#88](#88)) ([881b039](881b039)), closes [#87](#87) * **tasklist:** add multitenant support to tasklist ([#85](#85)) ([46bb564](46bb564)) * **zeebe:** add MigrateProcessInstance ([#97](#97)) ([2a9a123](2a9a123)), closes [#49](#49) * **zeebe:** implement deleteResource ([#73](#73)) ([0cd08b7](0cd08b7)) * **zeebe:** implement lossless parsing of job payload ([#95](#95)) ([57f3ea8](57f3ea8)), closes [#81](#81) * **zeebe:** normalise useragent, thread config ([#94](#94)) ([c1c4211](c1c4211)) * **zeebe:** remove deployProcess method ([#71](#71)) ([6cb98f0](6cb98f0))
* Release 8.5.0 (#124) * ci(repo): create npm publish workflow (#100) * Remove-docs (#101) * docs(repo): remove docs * docs(repo): add docs folder to .gitignore * ci(repo): update publish workflow (#102) * ci(repo): configure renovate to run against alpha branch (#103) * ci(repo): configure renovate to run against alpha branch * ci(repo): add workflow step to merge to alpha from main on release * chore(release): 8.5.0-alpha.1 [skip ci] # [8.5.0-alpha.1](v8.4.0...v8.5.0-alpha.1) (2024-04-04) ### Features * **oauth:** support optional scope in OAuth request ([#25](#25)) ([0451b80](0451b80)) * **operate:** add multitenant support and lossless Json parsing ([#82](#82)) ([cf49a71](cf49a71)), closes [#78](#78) [#67](#67) * **repo:** add enhanced debug output for http errors ([#88](#88)) ([881b039](881b039)), closes [#87](#87) * **tasklist:** add multitenant support to tasklist ([#85](#85)) ([46bb564](46bb564)) * **zeebe:** add MigrateProcessInstance ([#97](#97)) ([2a9a123](2a9a123)), closes [#49](#49) * **zeebe:** implement deleteResource ([#73](#73)) ([0cd08b7](0cd08b7)) * **zeebe:** implement lossless parsing of job payload ([#95](#95)) ([57f3ea8](57f3ea8)), closes [#81](#81) * **zeebe:** normalise useragent, thread config ([#94](#94)) ([c1c4211](c1c4211)) * **zeebe:** remove deployProcess method ([#71](#71)) ([6cb98f0](6cb98f0)) * test(repo): skip jest global setup for unit tests (#106) Fixes #105 * build(repo): parallelise publish workflow * build(repo): fix parallelisation * fix(repo): add note on "supported" (#107) Fixes #70 * chore(release): 8.5.0-alpha.2 [skip ci] # [8.5.0-alpha.2](v8.5.0-alpha.1...v8.5.0-alpha.2) (2024-04-05) ### Bug Fixes * **repo:** add note on "supported" ([#107](#107)) ([fc45d61](fc45d61)), closes [#70](#70) * fix(repo): only git commit on npm publish success * chore(release): 8.5.0-alpha.3 [skip ci] # [8.5.0-alpha.3](v8.5.0-alpha.2...v8.5.0-alpha.3) (2024-04-05) ### Bug Fixes * **repo:** only git commit on npm publish success ([9012764](9012764)) * chore(release): 8.5.0-alpha.3 [skip ci] # [8.5.0-alpha.3](v8.5.0-alpha.2...v8.5.0-alpha.3) (2024-04-05) ### Bug Fixes * **repo:** only git commit on npm publish success ([9012764](9012764)) * build(repo): configure semantic release (#109) fixes #108 * fix(repo): use ts-patch to transform module mapping in output (#112) * fix(repo): use ts-patch to transform module mapping in output fixes #110 * build(repo): add missing tsconfig-paths * chore(release): 8.5.0-alpha.4 [skip ci] # [8.5.0-alpha.4](v8.5.0-alpha.3...v8.5.0-alpha.4) (2024-04-05) ### Bug Fixes * **repo:** use ts-patch to transform module mapping in output ([#112](#112)) ([7efdcf3](7efdcf3)), closes [#110](#110) * chore(release): 8.5.0-alpha.4 [skip ci] # [8.5.0-alpha.4](v8.5.0-alpha.3...v8.5.0-alpha.4) (2024-04-05) ### Bug Fixes * **repo:** use ts-patch to transform module mapping in output ([#112](#112)) ([7efdcf3](7efdcf3)), closes [#110](#110) * ci(repo): parallelise tests and use npm install in CI (#116) fixes #115 * Jwulf/issue114 (#117) * fix(repo): use relative paths in source fixes #114 * test(repo): fix relative path in jest setup * test(repo): fix relative path to zeebe * test(repo): convert tests to relative paths * revert(github): remove spurious commitlint config file * fix(repo): make fix type commits release a new package * ci(repo): wrap long lines in commit messages * ci(repo): wrap footer lines at 100 characters in semantic-release config * ci(repo): break commit msgs to 100 chars via husky hook * ci(repo): disable husky during semantic-release * chore(release): 8.5.0-alpha.5 [skip ci] # [8.5.0-alpha.5](v8.5.0-alpha.4...v8.5.0-alpha.5) (2024-04-07) ### Bug Fixes * **repo:** make fix type commits release a new package ([ded83cf](ded83cf)) * chore(release): 8.5.0-alpha.5 [skip ci] # [8.5.0-alpha.5](v8.5.0-alpha.4...v8.5.0-alpha.5) (2024-04-07) ### Bug Fixes * **repo:** make fix type commits release a new package ([ded83cf](ded83cf)) * Issue118 (#119) * test(repo): add smoke test and type surface tests fixes #118 * ci(repo): run smoke test in CI * fix(camunda8): respect OAuth disabled flag * fix(issue118): add smoke test and type surface tests * test(repo): add smoke test and type surface tests fixes #118 * ci(repo): run smoke test in CI * fix(camunda8): respect OAuth disabled flag * release(repo): trigger a new release * chore(release): 8.5.0-alpha.6 [skip ci] # [8.5.0-alpha.6](v8.5.0-alpha.5...v8.5.0-alpha.6) (2024-04-08) ### Bug Fixes * **issue118:** add smoke test and type surface tests ([fe0c709](fe0c709)), closes [#118](#118) * chore(release): 8.5.0-alpha.6 [skip ci] # [8.5.0-alpha.6](v8.5.0-alpha.5...v8.5.0-alpha.6) (2024-04-08) ### Bug Fixes * **issue118:** add smoke test and type surface tests ([fe0c709](fe0c709)), closes [#118](#118) * ci(repo): add CodeQL scanning (#120) fixes #51 --------- Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net> * release: trigger a new release * chore(release): 8.4.1 [skip ci] ## [8.4.1](v8.4.0...v8.4.1) (2024-04-08) ### Features * **oauth:** support optional scope in OAuth request ([#25](#25)) ([0451b80](0451b80)) * **operate:** add multitenant support and lossless Json parsing ([#82](#82)) ([cf49a71](cf49a71)), closes [#78](#78) [#67](#67) * **repo:** add enhanced debug output for http errors ([#88](#88)) ([881b039](881b039)), closes [#87](#87) * **tasklist:** add multitenant support to tasklist ([#85](#85)) ([46bb564](46bb564)) * **zeebe:** add MigrateProcessInstance ([#97](#97)) ([2a9a123](2a9a123)), closes [#49](#49) * **zeebe:** implement deleteResource ([#73](#73)) ([0cd08b7](0cd08b7)) * **zeebe:** implement lossless parsing of job payload ([#95](#95)) ([57f3ea8](57f3ea8)), closes [#81](#81) * **zeebe:** normalise useragent, thread config ([#94](#94)) ([c1c4211](c1c4211)) * **zeebe:** remove deployProcess method ([#71](#71)) ([6cb98f0](6cb98f0)) * chore(release): 8.4.1 [skip ci] ## [8.4.1](v8.4.0...v8.4.1) (2024-04-08) ### Features * **oauth:** support optional scope in OAuth request ([#25](#25)) ([0451b80](0451b80)) * **operate:** add multitenant support and lossless Json parsing ([#82](#82)) ([cf49a71](cf49a71)), closes [#78](#78) [#67](#67) * **repo:** add enhanced debug output for http errors ([#88](#88)) ([881b039](881b039)), closes [#87](#87) * **tasklist:** add multitenant support to tasklist ([#85](#85)) ([46bb564](46bb564)) * **zeebe:** add MigrateProcessInstance ([#97](#97)) ([2a9a123](2a9a123)), closes [#49](#49) * **zeebe:** implement deleteResource ([#73](#73)) ([0cd08b7](0cd08b7)) * **zeebe:** implement lossless parsing of job payload ([#95](#95)) ([57f3ea8](57f3ea8)), closes [#81](#81) * **zeebe:** normalise useragent, thread config ([#94](#94)) ([c1c4211](c1c4211)) * **zeebe:** remove deployProcess method ([#71](#71)) ([6cb98f0](6cb98f0)) --------- Co-authored-by: semantic-release-bot <semantic-release-bot@martynus.net>
Similar to #80, the Zeebe worker variable payload may contain
int64
number values.Without a user-provided Dto class to leverage #78, we can't know the variable type - but we can detect an unsafe number value if we parse with lossless-json.
An option could be to specify via configuration how variables with a number value that is unsafe are handled.
If there is no Dto provided, we could default to throwing during the parse operation. This stops the application from operating with bad data.
And we could allow the user to set a default behaviour, "coerce to BigInt" or "coerce to string".
The text was updated successfully, but these errors were encountered: