Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
332 commits
Select commit Hold shift + click to select a range
98afb26
fix: parent publishing
tanflem Mar 26, 2026
d4f92db
fix: don't include bad variants in the parent empty variant create
tanflem Mar 26, 2026
93d5799
fix: clean up variants only videoId not found
tanflem Mar 26, 2026
e66cf1e
fix: add try catch to prevent exitng early
tanflem Mar 26, 2026
f706a84
Merge branch 'main' into tannerfleming/vmt-221-fix-publish-all-backen…
tanflem Mar 26, 2026
852de6d
fix: lint issues
autofix-ci[bot] Mar 26, 2026
92834ef
fix: gql schema
tanflem Mar 26, 2026
fda6d1a
fix: parent typing in tests
tanflem Mar 26, 2026
4af6731
fix: tying in tests
tanflem Mar 26, 2026
8790c25
Merge remote-tracking branch 'origin/tannerfleming/vmt-221-fix-publis…
tanflem Mar 26, 2026
6eb4876
fix: lint issues
autofix-ci[bot] Mar 26, 2026
223af6d
fix: lint issues (attempt 2/3)
autofix-ci[bot] Mar 26, 2026
4f11a5f
feat: enhance LanguageScreen with team selection and last active team…
mikeallisonJS Mar 26, 2026
d82a78e
feat: implement journey description translation in LanguageScreen
mikeallisonJS Mar 26, 2026
d7610ff
fix: lint issues
autofix-ci[bot] Mar 26, 2026
c0e49ed
fix: handle errors in journey description translation process
mikeallisonJS Mar 26, 2026
3188554
refactor: streamline GraphQL schema by removing deprecated fields and…
mikeallisonJS Mar 26, 2026
9aa3a79
refactor: update IconBlockCreateInput and related mutations for moder…
mikeallisonJS Mar 26, 2026
2aff21a
coderabbit comments
csiyang Mar 27, 2026
5457361
fix: lint issues
autofix-ci[bot] Mar 27, 2026
7e59afe
Merge branch 'main' into 00-00-MA-chore-modern-override-cleanup
mikeallisonJS Mar 27, 2026
4936a96
refactor: update cardBlockCreate mutation for API journeys modern ali…
mikeallisonJS Mar 27, 2026
8f12cd9
Merge branch 'siyangcao/nes-1454-deleteuser-backend' into siyangcao/n…
csiyang Mar 30, 2026
c7f383e
review changes
csiyang Mar 30, 2026
bac9d4b
fix: keep logs after deletion
csiyang Mar 30, 2026
8e4f323
fix: throw UNAUTHENTICATED when Firebase account is deleted in me res…
csiyang Mar 30, 2026
a03c911
fix: lint issues
autofix-ci[bot] Mar 30, 2026
40e6cbd
fix: clear auth cookie and redirect to sign-in when account is deleted
csiyang Mar 30, 2026
1489e42
Merge branch 'main' into siyangcao/nes-1454-deleteuser-backend
csiyang Mar 30, 2026
b58e373
Merge branch 'siyangcao/nes-1454-deleteuser-backend' into siyangcao/n…
csiyang Mar 30, 2026
352e536
refactor: log fields
csiyang Mar 30, 2026
ebb784a
Merge branch 'main' into siyangcao/nes-1454-deleteuser-backend
csiyang Mar 30, 2026
3f9270e
Merge branch 'siyangcao/nes-1454-deleteuser-backend' into siyangcao/n…
csiyang Mar 30, 2026
2b875d5
Merge branch 'main' into siyangcao/nes-1454-deleteuser-backend
csiyang Mar 30, 2026
e74c262
Merge branch 'siyangcao/nes-1454-deleteuser-backend' into siyangcao/n…
csiyang Mar 30, 2026
dc2e2fa
feat: update quickStartTemplate for enhanced customization and transl…
mikeallisonJS Mar 31, 2026
857afa7
merge: main
mikeallisonJS Mar 31, 2026
a7fc507
merge: main
mikeallisonJS Mar 31, 2026
34724ae
feat: enhance customization string resolution to support inline values
mikeallisonJS Mar 31, 2026
eb7e2d2
Merge branch 'main' into 00-00-MA-chore-modern-override-cleanup
mikeallisonJS Mar 31, 2026
f839f9e
refactor: streamline translation guidelines in journeyAiTranslate
mikeallisonJS Mar 31, 2026
b9984c6
feat: enhance journey customization translation with field value support
mikeallisonJS Mar 31, 2026
b869769
feat: enhance video publishing mutation with new parameters and valid…
mikeallisonJS Mar 31, 2026
279e314
refactor: remove videoPublishChildrenAndLanguages mutation and update…
mikeallisonJS Mar 31, 2026
0fc9852
fix: lint issues
autofix-ci[bot] Mar 31, 2026
088adc0
fix: data not returning from api-journeys to journeys modern
tanflem Apr 1, 2026
8431874
Merge branch 'main' into tannerfleming/nes-1494-template-settings-cus…
tanflem Apr 1, 2026
ee4ddae
fix: lint issues
autofix-ci[bot] Apr 1, 2026
fbb0d13
fix: login after guest flow
mikeallisonJS Apr 2, 2026
753dd64
refactor: streamline email validation redirection in user verification
mikeallisonJS Apr 2, 2026
1259fb3
fix: lint issues
autofix-ci[bot] Apr 2, 2026
95590b8
fix: address review feedback on anonymous journey transfer
mikeallisonJS Apr 2, 2026
abc096e
fix: prevent deleted fields from overiding
tanflem Apr 1, 2026
7c3bde6
Merge branch 'main' into tannerfleming/nes-1494-template-settings-cus…
tanflem Apr 2, 2026
95c0cfb
merge: main
mikeallisonJS Apr 2, 2026
24856bf
fix: lint issues
autofix-ci[bot] Apr 2, 2026
405cded
feat: enhance translation functionality for customization fields
mikeallisonJS Apr 2, 2026
8300c61
fix: lint issues
autofix-ci[bot] Apr 2, 2026
b5b35ab
fix: update quickStartTemplate call in seed script to remove 'reset' …
mikeallisonJS Apr 2, 2026
7cf697d
fix: update translation prompts to clarify time format preservation
mikeallisonJS Apr 6, 2026
7628b7c
feat: add cache by pass to the arclight e2e
tanflem Apr 6, 2026
fc6d45e
fix: typing in e2e test
tanflem Apr 6, 2026
c621a1e
fix: lint issues
autofix-ci[bot] Apr 6, 2026
dc52310
Merge branch 'main' into tannerfleming/vmt-224-add-cache-by-pass-so-t…
tanflem Apr 6, 2026
cbb20a8
Merge branch 'main' into 26-00-MA-fix-guest-login-workflow-firebase
mikeallisonJS Apr 6, 2026
1f380b9
fix: add ignore if prod
tanflem Apr 6, 2026
aa8aae9
Merge branch 'tannerfleming/vmt-224-add-cache-by-pass-so-the-e2es-don…
tanflem Apr 6, 2026
0328eb0
Merge branch 'main' into tannerfleming/vmt-224-add-cache-by-pass-so-t…
tanflem Apr 6, 2026
f28346e
fix: share url test
tanflem Apr 6, 2026
d961ae2
fix: email redirect
csiyang Apr 6, 2026
5082ccf
fix: token verify
csiyang Apr 7, 2026
b6239cf
feat: enhance text response value resolution for end-user rendering
mikeallisonJS Apr 7, 2026
2165fb9
fix: lint issues
autofix-ci[bot] Apr 7, 2026
df90ff3
fix: filter Google sync dropdown to only show current user's accounts…
claude Mar 31, 2026
9441085
docs: add implementation plan for NES-1492
claude Mar 31, 2026
70c5b71
fix: add type-safe null guard and cleanup for Google sync user filter…
jianwei1 Mar 31, 2026
5e3ca36
fix: lint issues
autofix-ci[bot] Mar 31, 2026
d7b20fe
fix: use userId scalar for Google sync dropdown filter (NES-1492)
jianwei1 Apr 7, 2026
b99d370
docs: add implementation plan for NES-1492 userId fix
jianwei1 Apr 7, 2026
b48397c
fix: lint issues
autofix-ci[bot] Apr 7, 2026
d302f74
Merge remote-tracking branch 'origin/main' into 00-00-MA-chore-modern…
mikeallisonJS Apr 7, 2026
2704b73
feat: integrate media cleanup in anonymous journey deletion process
mikeallisonJS Apr 7, 2026
3608280
fix: lint issues
autofix-ci[bot] Apr 7, 2026
b0d3f4a
Merge remote-tracking branch 'origin/jianweichong/nes-1492-google-syn…
jianwei1 Apr 7, 2026
c42df17
Merge remote-tracking branch 'origin/tannerfleming/vmt-224-add-cache-…
jianwei1 Apr 7, 2026
4606471
Merge remote-tracking branch 'origin/26-00-MA-fix-guest-login-workflo…
jianwei1 Apr 7, 2026
a137b85
Merge remote-tracking branch 'origin/00-00-MA-chore-modern-override-c…
jianwei1 Apr 7, 2026
de6ec06
Merge remote-tracking branch 'origin/siyangcao/nes-1455-deleteuser-fr…
jianwei1 Apr 7, 2026
853b95d
Merge remote-tracking branch 'origin/26-00-MA-feat-translate-quick-st…
jianwei1 Apr 7, 2026
4119a3b
Merge remote-tracking branch 'origin/cursor/sync-file-modification-tr…
jianwei1 Apr 7, 2026
1951f33
Merge remote-tracking branch 'origin/up/nes-1194-youtube-videos-fail-…
jianwei1 Apr 7, 2026
5e95236
Merge remote-tracking branch 'origin/mikeallison/vmt-120-publish-all-…
jianwei1 Apr 7, 2026
66cd70f
Merge branch 'main' into jianweichong/nes-1492-google-sync-dropdown-s…
jianwei1 Apr 7, 2026
e5c58ad
Merge branch 'jianweichong/nes-1492-google-sync-dropdown-shows-anothe…
stage-branch-merger[bot] Apr 7, 2026
c56d08b
fix: merge main and resolve verify.tsx conflict
csiyang Apr 7, 2026
5f7da5a
Merge branch 'main' into siyangcao/nes-1525-email-verification-redire…
csiyang Apr 7, 2026
d492c94
feat: add environment variables for Mux and Cloudflare integration
mikeallisonJS Apr 7, 2026
6b2af18
fix: lint issues
autofix-ci[bot] Apr 7, 2026
ecc8c7a
Merge branch 'siyangcao/nes-1525-email-verification-redirects-to-dash…
stage-branch-merger[bot] Apr 7, 2026
2ea9a32
Merge branch 'main' into jianweichong/nes-1492-google-sync-dropdown-s…
jianwei1 Apr 7, 2026
fa69435
Merge branch 'jianweichong/nes-1492-google-sync-dropdown-shows-anothe…
stage-branch-merger[bot] Apr 7, 2026
17f207f
refactor: verfiy redirect
csiyang Apr 7, 2026
b0f7a56
Merge branch 'siyangcao/nes-1525-email-verification-redirects-to-dash…
stage-branch-merger[bot] Apr 7, 2026
1428126
Merge branch 'main' into 26-00-MA-feat-remove-used-anonymous-media
mikeallisonJS Apr 7, 2026
83d5449
feat: add environment variables for Mux and Cloudflare integration
mikeallisonJS Apr 7, 2026
270910d
fix verify redriects
csiyang Apr 7, 2026
ab479d8
Merge branch 'siyangcao/nes-1525-email-verification-redirects-to-dash…
stage-branch-merger[bot] Apr 7, 2026
4936076
Merge branch 'main' into siyangcao/nes-1525-email-verification-redire…
csiyang Apr 7, 2026
b54bbae
Merge branch 'siyangcao/nes-1525-email-verification-redirects-to-dash…
stage-branch-merger[bot] Apr 7, 2026
918486a
fix: lint issues
autofix-ci[bot] Apr 8, 2026
315645c
Merge remote-tracking branch 'origin/main' into 26-00-MA-feat-create-…
mikeallisonJS Apr 8, 2026
ce44648
feat: update GraphQL schema to include iconBlockUpdate mutation and m…
mikeallisonJS Apr 8, 2026
2fa132d
fix: lint issues
autofix-ci[bot] Apr 8, 2026
42c4f73
fix: ensure nullable fields in GraphQL schema match source SDL defini…
mikeallisonJS Apr 8, 2026
cf576ad
feat: enhance media cleanup functionality to handle remote deletion f…
mikeallisonJS Apr 8, 2026
86d34f4
fix: lint issues
autofix-ci[bot] Apr 8, 2026
495fb40
sanatize redirect urls
csiyang Apr 8, 2026
109a8b3
Merge branch 'siyangcao/nes-1525-email-verification-redirects-to-dash…
stage-branch-merger[bot] Apr 8, 2026
39d0b53
fix: lint issues
autofix-ci[bot] Apr 8, 2026
1a1627d
Merge branch 'siyangcao/nes-1525-email-verification-redirects-to-dash…
stage-branch-merger[bot] Apr 8, 2026
72dae7b
ce tidy up
csiyang Apr 8, 2026
88dce4e
Merge branch 'main' into siyangcao/nes-1525-email-verification-redire…
csiyang Apr 8, 2026
c072c22
Merge branch 'siyangcao/nes-1525-email-verification-redirects-to-dash…
csiyang Apr 8, 2026
95cda4b
Merge branch '26-00-MA-feat-iconblockupdate-modern' (PR #8974) into s…
stage-branch-merger[bot] Apr 8, 2026
b622010
feat: add imageBlockCreate mutation and enhance block mutation author…
mikeallisonJS Apr 8, 2026
3c1851a
feat: add imageBlockUpdate mutation to modern API and update imageBlo…
mikeallisonJS Apr 8, 2026
dd292d6
feat: update radioOptionBlockCreate mutation to use modern API and ad…
mikeallisonJS Apr 8, 2026
0f11d93
feat: add radioOptionBlockUpdate mutation to modern API and update AP…
mikeallisonJS Apr 8, 2026
df778e9
feat: update radioQuestionBlockCreate mutation to use modern API and …
mikeallisonJS Apr 8, 2026
1ee0b42
feat: add radioQuestionBlockUpdate mutation to modern API and update …
mikeallisonJS Apr 8, 2026
0ff810b
fix: lint issues
autofix-ci[bot] Apr 8, 2026
aa71b89
fix: lint issues
autofix-ci[bot] Apr 8, 2026
b7faf38
feat: update signUpBlockCreate mutation to use modern API and ensure …
mikeallisonJS Apr 8, 2026
c6e7fd5
feat: add signUpBlockUpdate mutation to modern API and update API gat…
mikeallisonJS Apr 8, 2026
d4a7ea1
feat: update spacerBlockCreate mutation to use modern API and ensure …
mikeallisonJS Apr 8, 2026
951c7cc
feat: update spacerBlockUpdate mutation to use modern API and ensure …
mikeallisonJS Apr 8, 2026
3aaa91c
fix: lint issues
autofix-ci[bot] Apr 8, 2026
1312f4d
fix: lint issues
autofix-ci[bot] Apr 8, 2026
cc80d46
feat: add stepBlockCreate mutation to modern API and update API gatew…
mikeallisonJS Apr 8, 2026
2f163da
fix: lint issues
autofix-ci[bot] Apr 8, 2026
8ac0f59
feat: add stepBlockUpdate mutation to modern API and update API gatew…
mikeallisonJS Apr 8, 2026
ee4fc7a
Merge branch 'main' into jianweichong/nes-1492-google-sync-dropdown-s…
jianwei1 Apr 8, 2026
a73f874
fix: lint issues
autofix-ci[bot] Apr 8, 2026
986db13
feat: update textResponseBlockCreate mutation to use modern API and e…
mikeallisonJS Apr 8, 2026
291ac44
feat: add textResponseBlockUpdate mutation to modern API and update A…
mikeallisonJS Apr 8, 2026
f604cc2
fix: lint issues
autofix-ci[bot] Apr 8, 2026
5c5f806
Merge branch '26-00-MA-feat-remove-used-anonymous-media' (PR #8969) i…
stage-branch-merger[bot] Apr 8, 2026
4fa2b0f
fix: lint issues
autofix-ci[bot] Apr 8, 2026
a1b71f6
feat: update typographyBlockCreate mutation to use modern API and ens…
mikeallisonJS Apr 8, 2026
0fc69b8
feat: add typographyBlockUpdate mutation to modern API and update API…
mikeallisonJS Apr 8, 2026
4a7d2a3
fix: lint issues
autofix-ci[bot] Apr 8, 2026
947d658
Merge branch '26-00-MA-chore-imageblockcreate-modern' (PR #8980) into…
stage-branch-merger[bot] Apr 8, 2026
f313635
merge: main
mikeallisonJS Apr 8, 2026
ed5d281
feat(imageBlockCreate): integrate recalculateJourneyCustomizable and …
mikeallisonJS Apr 8, 2026
d3c66fd
Merge branch '26-00-MA-chore-imageblockcreate-modern' into stage
mikeallisonJS Apr 8, 2026
ce02389
fix: lint issues
autofix-ci[bot] Apr 8, 2026
0e6d68e
Merge branch '26-00-MA-chore-imageblockcreate-modern' (PR #8980) into…
stage-branch-merger[bot] Apr 8, 2026
9cfd6f4
feat: add additional environment variables for Cloudflare integration
mikeallisonJS Apr 9, 2026
8b3990a
Merge branch '26-00-MA-feat-remove-used-anonymous-media' (PR #8969) i…
stage-branch-merger[bot] Apr 9, 2026
e996784
feat: add journey customization translation and user journey deletion…
mikeallisonJS Apr 9, 2026
0171042
Merge branch 'main' into 26-00-MA-feat-remove-used-anonymous-media
mikeallisonJS Apr 9, 2026
2bab4b5
Merge branch '26-00-MA-feat-remove-used-anonymous-media' into stage
mikeallisonJS Apr 9, 2026
10e4d04
feat: add Mux UGC access tokens to environment variables
mikeallisonJS Apr 9, 2026
ef02921
Merge branch '26-00-MA-feat-remove-used-anonymous-media' (PR #8969) i…
stage-branch-merger[bot] Apr 9, 2026
4856363
Merge branch 'main' into 26-00-MA-chore-imageblockcreate-modern
mikeallisonJS Apr 9, 2026
5fb2f46
Merge branch '26-00-MA-chore-imageblockcreate-modern' (PR #8980) into…
stage-branch-merger[bot] Apr 9, 2026
85d5e93
Merge remote-tracking branch 'origin/main' into 26-00-MA-chore-imageb…
mikeallisonJS Apr 9, 2026
67aaf1d
Merge branch '26-00-MA-chore-imageblockupdate-modern' into stage
mikeallisonJS Apr 9, 2026
0f46224
Merge branch 'main' into tannerfleming/vmt-224-add-cache-by-pass-so-t…
tanflem Apr 9, 2026
6fb2c7b
Merge branch 'tannerfleming/vmt-224-add-cache-by-pass-so-the-e2es-don…
stage-branch-merger[bot] Apr 9, 2026
5ad1314
merge: main
mikeallisonJS Apr 9, 2026
712fcf5
Merge branch '26-00-MA-chore-radiooptionblockcreate-modern' into stage
mikeallisonJS Apr 9, 2026
698fc0b
feat: implement database schema change workflow rules for Claude and …
mikeallisonJS Apr 9, 2026
b69673b
Merge branch 'main' into jianweichong/nes-1492-google-sync-dropdown-s…
jianwei1 Apr 9, 2026
baf5d18
Merge branch '26-00-MA-chore-radiooptionblockupdate-modern' into stage
mikeallisonJS Apr 9, 2026
52abc15
feat: add database schema change workflow rules for Claude and Cursor…
mikeallisonJS Apr 9, 2026
a443356
Merge branch '26-00-MA-chore-radioquestionblockcreate-modern' into stage
mikeallisonJS Apr 9, 2026
d1e0f15
Merge remote-tracking branch 'origin/main' into 26-00-MA-feat-transla…
mikeallisonJS Apr 10, 2026
6905036
Merge remote-tracking branch 'origin/main' into 26-00-MA-feat-transla…
mikeallisonJS Apr 10, 2026
7995156
merge: main
mikeallisonJS Apr 10, 2026
968e3ad
fix: lint issues
autofix-ci[bot] Apr 10, 2026
c7ec2d9
Merge branch '26-00-MA-chore-radioquestionblockupdate-modern' into 26…
mikeallisonJS Apr 10, 2026
b3985a4
Merge branch '26-00-MA-chore-spacerblockcreate-modern' into 26-00-MA-…
mikeallisonJS Apr 10, 2026
26af9ef
Merge branch '26-00-MA-chore-spacerblockupdate-modern' into 26-00-MA-…
mikeallisonJS Apr 10, 2026
2057cff
Merge branch '26-00-MA-chore-stepblockcreate-modern' into 26-00-MA-ch…
mikeallisonJS Apr 10, 2026
3c6cf37
Merge branch '26-00-MA-chore-stepblockupdate-moderrn' into 26-00-MA-c…
mikeallisonJS Apr 10, 2026
150d945
Merge branch '26-00-MA-chore-textresponseblockcreate-modern' into 26-…
mikeallisonJS Apr 10, 2026
aa6a761
Merge branch '26-00-MA-chore-textresponseblockupdate-modern' into 26-…
mikeallisonJS Apr 10, 2026
74beff4
Merge branch '26-00-MA-chore-typographyblockcreate-modern' into 26-00…
mikeallisonJS Apr 10, 2026
e9b3fba
feat: update GraphQL mutations for modern API journeys
mikeallisonJS Apr 10, 2026
f364805
fix: node docker image
mikeallisonJS Apr 10, 2026
ea8abd0
Merge branch '26-00-MA-fix-node-docker-image' (PR #9007) into stage
stage-branch-merger[bot] Apr 10, 2026
49780ee
Merge branch 'main' into jianweichong/nes-1492-google-sync-dropdown-s…
jianwei1 Apr 12, 2026
801841a
Merge branch 'jianweichong/nes-1492-google-sync-dropdown-shows-anothe…
stage-branch-merger[bot] Apr 12, 2026
1c8de49
Merge branch 'main' into 26-00-MA-chore-radioquestionblockupdate-modern
mikeallisonJS Apr 13, 2026
796e948
Merge branch '26-00-MA-chore-radioquestionblockupdate-modern' (PR #89…
stage-branch-merger[bot] Apr 13, 2026
7265ac5
Merge branch 'main' into mikeallison/vmt-120-publish-all-button
tanflem Apr 13, 2026
86cb6b6
Merge branch 'mikeallison/vmt-120-publish-all-button' (PR #7209) into…
stage-branch-merger[bot] Apr 13, 2026
33f0bda
fix: use cache bypass helper
tanflem Apr 13, 2026
34c77b1
Merge branch 'tannerfleming/vmt-224-add-cache-by-pass-so-the-e2es-don…
stage-branch-merger[bot] Apr 13, 2026
1ce6d56
Merge branch 'main' into tannerfleming/vmt-224-add-cache-by-pass-so-t…
tanflem Apr 13, 2026
d18e740
fix: lint issues
autofix-ci[bot] Apr 13, 2026
839fcf3
fix: massive file change records
tanflem Apr 13, 2026
2a8b1d5
Merge branch 'tannerfleming/vmt-224-add-cache-by-pass-so-the-e2es-don…
tanflem Apr 13, 2026
07672ef
Merge remote-tracking branch 'origin/tannerfleming/vmt-224-add-cache-…
tanflem Apr 13, 2026
58600eb
fix: lint issues
autofix-ci[bot] Apr 13, 2026
544badf
Merge branch 'tannerfleming/vmt-224-add-cache-by-pass-so-the-e2es-don…
stage-branch-merger[bot] Apr 13, 2026
f5d55a6
handle fallbacks better for 404
tanflem Apr 13, 2026
eea65a9
Merge branch 'tannerfleming/vmt-224-add-cache-by-pass-so-the-e2es-don…
stage-branch-merger[bot] Apr 13, 2026
08c1087
refactor: remove interop token pattern from deleteUser backend (NES-1…
csiyang Apr 14, 2026
6d7e2e9
feat(NES-1455): remove interop token pattern, switch to isSuperAdmin …
csiyang Apr 14, 2026
7ac1bec
Merge branch 'siyangcao/nes-1455-deleteuser-frontend' (PR #8877) into…
stage-branch-merger[bot] Apr 14, 2026
16b73c7
fix: update schema.graphql files and clean up test fixture
csiyang Apr 14, 2026
47862fd
fix: address review findings in UserDelete flow
csiyang Apr 14, 2026
726f339
Merge branch 'siyangcao/nes-1455-deleteuser-frontend' (PR #8877) into…
stage-branch-merger[bot] Apr 14, 2026
affcd18
fix: return Firebase UID from userDeleteCheck instead of DB UUID
csiyang Apr 14, 2026
4d18fec
fix: address second round of review findings in UserDelete
csiyang Apr 14, 2026
5c9a8ef
Merge branch 'siyangcao/nes-1455-deleteuser-frontend' (PR #8877) into…
stage-branch-merger[bot] Apr 14, 2026
af0a4f0
fix: use 303 redirect in clear-auth and reset check state on deletion…
csiyang Apr 14, 2026
173ec09
Merge branch 'siyangcao/nes-1455-deleteuser-frontend' (PR #8877) into…
stage-branch-merger[bot] Apr 14, 2026
efd5181
fix: add Suspense fallback and void async onClick handlers in UserDelete
csiyang Apr 14, 2026
2cea7aa
Merge branch 'siyangcao/nes-1455-deleteuser-frontend' (PR #8877) into…
stage-branch-merger[bot] Apr 14, 2026
adf346a
fix: add isSuperAdmin scope to api-journeys-modern and self-deletion …
csiyang Apr 14, 2026
d40e75d
Merge branch 'tannerfleming/nes-1494-template-settings-customisable-t…
stage-branch-merger[bot] Apr 14, 2026
0c6f846
refactor: enhance journey translation functionality by introducing de…
mikeallisonJS Apr 14, 2026
5229517
Merge remote-tracking branch 'origin/main' into siyangcao/nes-1454-de…
csiyang Apr 14, 2026
83b6499
fix: lint issues
autofix-ci[bot] Apr 14, 2026
03815c7
feat: self-delete permission + JWT idType for deleteUser endpoints (N…
csiyang Apr 14, 2026
8702fbe
fix: lint issues
autofix-ci[bot] Apr 14, 2026
7f05189
fix: harden deleteUser flow with ordering, laziness, tests, and schem…
csiyang Apr 14, 2026
0c33c76
fix: review findings — LogLevel enum, completedAt, input validation (…
csiyang Apr 14, 2026
367463f
Merge remote-tracking branch 'origin/main' into 26-00-MA-feat-transla…
mikeallisonJS Apr 14, 2026
6979caf
fix: lint issues
autofix-ci[bot] Apr 14, 2026
7a5ef4d
Merge branch 'main' into 26-00-MA-feat-translate-quick-start
mikeallisonJS Apr 14, 2026
0a60605
refactor: improve translation customization logic
mikeallisonJS Apr 14, 2026
b36b21b
fix: update test descriptions and expected values for journey customi…
mikeallisonJS Apr 15, 2026
1d5adef
Merge branch '26-00-MA-feat-translate-quick-start' into stage
mikeallisonJS Apr 15, 2026
c196f20
chore: add eslint.config.mjs to shared-user-delete lib (NES-1454)
csiyang Apr 15, 2026
68cd935
fix: lint issues
autofix-ci[bot] Apr 15, 2026
5da2dea
Merge branch 'main' into siyangcao/nes-1454-deleteuser-backend
csiyang Apr 15, 2026
7ca5148
fix: restore discord/signal/weChat to MessagePlatform enum in api-jou…
csiyang Apr 15, 2026
100dc42
fix: graphql generate
mikeallisonJS Apr 15, 2026
2e56c6c
fix: lint issues
autofix-ci[bot] Apr 15, 2026
1f0c6e1
chore: merge origin/stage into nes-1454-deleteuser-backend
csiyang Apr 15, 2026
45fe03f
Merge remote-tracking branch 'origin/siyangcao/nes-1454-deleteuser-ba…
csiyang Apr 15, 2026
0769abf
fix: resolve duplicate isSuperAdmin in authScopes and UserDelete test…
csiyang Apr 15, 2026
54440a6
fix: add migration for audit log new columns and self-deletion test (…
csiyang Apr 15, 2026
1ca48a2
fix: cast Logs textarea to HTMLTextAreaElement in UserDelete spec (NE…
csiyang Apr 15, 2026
136573d
fix: resolve journeys-admin lint errors in UserDelete (NES-1454)
csiyang Apr 15, 2026
aabd30f
fix: lint issues
autofix-ci[bot] Apr 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 116 additions & 6 deletions apis/api-gateway/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -217,24 +217,28 @@ type Mutation @join__type(graph: API_ANALYTICS) @join__type(graph: API_JOURNEYS
journeyId: ID
): StepBlock! @join__field(graph: API_JOURNEYS_MODERN, override: "api-journeys")
stepBlockPositionUpdate(input: [StepBlockPositionUpdateInput!]!) : [StepBlock!]! @join__field(graph: API_JOURNEYS)
textResponseBlockCreate(input: TextResponseBlockCreateInput!) : TextResponseBlock! @join__field(graph: API_JOURNEYS)
textResponseBlockCreate(input: TextResponseBlockCreateInput!) : TextResponseBlock! @join__field(graph: API_JOURNEYS_MODERN, override: "api-journeys")
textResponseBlockUpdate(
id: ID!
input: TextResponseBlockUpdateInput!
"""
drop this parameter after merging teams
"""
journeyId: ID
): TextResponseBlock @join__field(graph: API_JOURNEYS)
typographyBlockCreate(input: TypographyBlockCreateInput!) : TypographyBlock! @join__field(graph: API_JOURNEYS)
): TextResponseBlock @join__field(
graph: API_JOURNEYS_MODERN
type: "TextResponseBlock!"
override: "api-journeys"
)
typographyBlockCreate(input: TypographyBlockCreateInput!) : TypographyBlock! @join__field(graph: API_JOURNEYS_MODERN, override: "api-journeys")
typographyBlockUpdate(
id: ID!
input: TypographyBlockUpdateInput!
"""
drop this parameter after merging teams
"""
journeyId: ID
): TypographyBlock! @join__field(graph: API_JOURNEYS)
): TypographyBlock! @join__field(graph: API_JOURNEYS_MODERN, override: "api-journeys")
chatButtonCreate(journeyId: ID!, input: ChatButtonCreateInput) : ChatButton! @join__field(graph: API_JOURNEYS)
chatButtonUpdate(id: ID!, journeyId: ID!, input: ChatButtonUpdateInput!) : ChatButton! @join__field(graph: API_JOURNEYS)
chatButtonRemove(id: ID!) : ChatButton! @join__field(graph: API_JOURNEYS)
Expand Down Expand Up @@ -412,6 +416,7 @@ type Mutation @join__type(graph: API_ANALYTICS) @join__type(graph: API_JOURNEYS
integrationDelete(id: ID!) : Integration! @join__field(graph: API_JOURNEYS_MODERN)
journeyTransferFromAnonymous(journeyId: ID!, teamId: ID) : Journey! @join__field(graph: API_JOURNEYS_MODERN)
journeyAiTranslateCreate(input: JourneyAiTranslateInput!) : Journey! @join__field(graph: API_JOURNEYS_MODERN)
journeyCustomizationDescriptionTranslate(input: JourneyCustomizationDescriptionTranslateInput!) : Journey! @join__field(graph: API_JOURNEYS_MODERN)
createJourneyEventsExportLog(input: JourneyEventsExportLogInput!) : JourneyEventsExportLog! @join__field(graph: API_JOURNEYS_MODERN)
journeyLanguageAiDetect(input: MutationJourneyLanguageAiDetectInput!) : Boolean! @join__field(graph: API_JOURNEYS_MODERN)
journeyProfileUpdate(input: JourneyProfileUpdateInput!) : JourneyProfile! @join__field(graph: API_JOURNEYS_MODERN)
Expand All @@ -426,6 +431,8 @@ type Mutation @join__type(graph: API_ANALYTICS) @join__type(graph: API_JOURNEYS
"""
timezone: String
): JourneyVisitorGoogleSheetExportResult! @join__field(graph: API_JOURNEYS_MODERN)
userDeleteJourneysCheck(userId: String!) : UserDeleteJourneysCheckResult! @join__field(graph: API_JOURNEYS_MODERN)
userDeleteJourneysConfirm(userId: String!) : UserDeleteJourneysConfirmResult! @join__field(graph: API_JOURNEYS_MODERN)
audioPreviewCreate(input: MutationAudioPreviewCreateInput!) : AudioPreview! @join__field(graph: API_LANGUAGES)
audioPreviewUpdate(input: MutationAudioPreviewUpdateInput!) : AudioPreview! @join__field(graph: API_LANGUAGES)
audioPreviewDelete(languageId: ID!) : AudioPreview! @join__field(graph: API_LANGUAGES)
Expand Down Expand Up @@ -554,6 +561,7 @@ type Mutation @join__type(graph: API_ANALYTICS) @join__type(graph: API_JOURNEYS
userImpersonate(email: String!) : String @join__field(graph: API_USERS)
createVerificationRequest(input: CreateVerificationRequestInput) : Boolean @join__field(graph: API_USERS)
validateEmail(email: String!, token: String!) : AuthenticatedUser @join__field(graph: API_USERS)
userDeleteCheck(idType: UserDeleteIdType!, id: String!) : UserDeleteCheckResult! @join__field(graph: API_USERS)
}

type MutationSiteCreateSuccess @join__type(graph: API_ANALYTICS) {
Expand Down Expand Up @@ -2532,8 +2540,16 @@ type PlausibleStatsResponse @join__type(graph: API_JOURNEYS_MODERN) {
timeOnPage: Float
}

type Subscription @join__type(graph: API_JOURNEYS_MODERN) {
journeyAiTranslateCreateSubscription(input: JourneyAiTranslateInput!) : JourneyAiTranslateProgress!
type Subscription @join__type(graph: API_JOURNEYS_MODERN) @join__type(graph: API_USERS) {
journeyAiTranslateCreateSubscription(input: JourneyAiTranslateInput!) : JourneyAiTranslateProgress! @join__field(graph: API_JOURNEYS_MODERN)
userDeleteConfirm(
idType: UserDeleteIdType!
id: String!
deletedJourneyIds: [String!]!
deletedTeamIds: [String!]!
deletedUserJourneyIds: [String!]!
deletedUserTeamIds: [String!]!
): UserDeleteConfirmProgress! @join__field(graph: API_USERS)
}

type TemplateFamilyStatsAggregateResponse @join__type(graph: API_JOURNEYS_MODERN) {
Expand All @@ -2555,6 +2571,31 @@ type TemplateFamilyStatsEventResponse @join__type(graph: API_JOURNEYS_MODERN) {
visitors: Int!
}

type UserDeleteJourneysCheckResult @join__type(graph: API_JOURNEYS_MODERN) {
journeysToDelete: Int!
journeysToTransfer: Int!
journeysToRemove: Int!
teamsToDelete: Int!
teamsToTransfer: Int!
teamsToRemove: Int!
logs: [UserDeleteJourneysLogEntry!]!
}

type UserDeleteJourneysConfirmResult @join__type(graph: API_JOURNEYS_MODERN) {
success: Boolean!
deletedJourneyIds: [String!]!
deletedTeamIds: [String!]!
deletedUserJourneyIds: [String!]!
deletedUserTeamIds: [String!]!
logs: [UserDeleteJourneysLogEntry!]!
}

type UserDeleteJourneysLogEntry @join__type(graph: API_JOURNEYS_MODERN) {
message: String!
level: USER_DELETE_LOG_LEVEL!
timestamp: String!
}

type YouTube @join__type(graph: API_JOURNEYS_MODERN, key: "id primaryLanguageId", extension: true) {
id: ID!
primaryLanguageId: ID
Expand Down Expand Up @@ -3304,6 +3345,25 @@ type AnonymousUser implements User @join__type(graph: API_USERS, key: "id") @jo
id: ID!
}

type UserDeleteCheckResult @join__type(graph: API_USERS) {
userId: String!
userEmail: String
userFirstName: String!
logs: [UserDeleteLogEntry!]!
}

type UserDeleteConfirmProgress @join__type(graph: API_USERS) {
log: UserDeleteLogEntry!
done: Boolean!
success: Boolean
}

type UserDeleteLogEntry @join__type(graph: API_USERS) {
message: String!
level: USER_DELETE_LOG_LEVEL!
timestamp: String!
}

interface BaseError @join__type(graph: API_ANALYTICS) @join__type(graph: API_MEDIA) {
message: String
}
Expand Down Expand Up @@ -3782,6 +3842,12 @@ enum PlausibleEvent @join__type(graph: API_JOURNEYS_MODERN) {
journeyResponses @join__enumValue(graph: API_JOURNEYS_MODERN)
}

enum USER_DELETE_LOG_LEVEL @join__type(graph: API_JOURNEYS_MODERN) @join__type(graph: API_USERS) {
INFO @join__enumValue(graph: API_JOURNEYS_MODERN) @join__enumValue(graph: API_USERS)
WARN @join__enumValue(graph: API_JOURNEYS_MODERN) @join__enumValue(graph: API_USERS)
ERROR @join__enumValue(graph: API_JOURNEYS_MODERN) @join__enumValue(graph: API_USERS)
}

enum LanguageRole @join__type(graph: API_LANGUAGES) {
publisher @join__enumValue(graph: API_LANGUAGES)
}
Expand Down Expand Up @@ -3914,6 +3980,12 @@ enum App @join__type(graph: API_USERS) {
JesusFilmOne @join__enumValue(graph: API_USERS)
}

enum UserDeleteIdType @join__type(graph: API_USERS) {
databaseId @join__enumValue(graph: API_USERS)
email @join__enumValue(graph: API_USERS)
jwt @join__enumValue(graph: API_USERS)
}

input SiteCreateInput @join__type(graph: API_ANALYTICS) {
domain: String!
goals: [String!]
Expand Down Expand Up @@ -4826,11 +4898,49 @@ input IntegrationGoogleUpdateInput @join__type(graph: API_JOURNEYS_MODERN) {
}

input JourneyAiTranslateInput @join__type(graph: API_JOURNEYS_MODERN) {
"""
The ID of the journey to translate
"""
journeyId: ID!
"""
The journey name to translate
"""
name: String!
"""
The source language name of the journey content
"""
journeyLanguageName: String!
"""
The target language ID for journey content (blocks, title, description)
"""
textLanguageId: ID!
"""
The target language name for journey content (blocks, title, description)
"""
textLanguageName: String!
"""
Language ID for customization text translation. Falls back to textLanguageId if not provided.
"""
userLanguageId: ID
"""
Language name for customization text translation. Falls back to textLanguageName if not provided.
"""
userLanguageName: String
}

input JourneyCustomizationDescriptionTranslateInput @join__type(graph: API_JOURNEYS_MODERN) {
"""
The ID of the journey whose customization description to translate
"""
journeyId: ID!
"""
The current language of the customization description
"""
sourceLanguageName: String!
"""
The language to translate the customization description into
"""
targetLanguageName: String!
}

input JourneyEventsExportLogInput @join__type(graph: API_JOURNEYS_MODERN) {
Expand Down
4 changes: 4 additions & 0 deletions apis/api-journeys-modern/infrastructure/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ locals {
environment_variables = [
"AWS_ACCESS_KEY_ID",
"AWS_SECRET_ACCESS_KEY",
"CLOUDFLARE_ACCOUNT_ID",
"CLOUDFLARE_IMAGES_TOKEN",
"CLOUDFLARE_UPLOAD_KEY",
"FACEBOOK_APP_ID",
"FACEBOOK_APP_SECRET",
Expand All @@ -24,6 +26,8 @@ locals {
"MAILCHIMP_AUDIENCE_ID",
"MAILCHIMP_MARKETING_API_KEY",
"MAILCHIMP_MARKETING_API_SERVER_PREFIX",
"MUX_UGC_ACCESS_TOKEN_ID",
"MUX_UGC_SECRET_KEY",
"NAT_ADDRESSES",
"OPEN_AI_API_KEY",
"PG_DATABASE_URL_JOURNEYS",
Expand Down
84 changes: 84 additions & 0 deletions apis/api-journeys-modern/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -827,11 +827,34 @@ type Journey
}

input JourneyAiTranslateInput {
"""The ID of the journey to translate"""
journeyId: ID!

"""The journey name to translate"""
name: String!

"""The source language name of the journey content"""
journeyLanguageName: String!

"""
The target language ID for journey content (blocks, title, description)
"""
textLanguageId: ID!

"""
The target language name for journey content (blocks, title, description)
"""
textLanguageName: String!

"""
Language ID for customization text translation. Falls back to textLanguageId if not provided.
"""
userLanguageId: ID

"""
Language name for customization text translation. Falls back to textLanguageName if not provided.
"""
userLanguageName: String
}

type JourneyAiTranslateProgress {
Expand Down Expand Up @@ -884,6 +907,17 @@ input JourneyCreateInput {
slug: String
}

input JourneyCustomizationDescriptionTranslateInput {
"""The ID of the journey whose customization description to translate"""
journeyId: ID!

"""The current language of the customization description"""
sourceLanguageName: String!

"""The language to translate the customization description into"""
targetLanguageName: String!
}

type JourneyCustomizationField
@shareable
{
Expand Down Expand Up @@ -1426,6 +1460,22 @@ type Mutation {
"""drop this parameter after merging teams"""
journeyId: ID
): StepBlock! @override(from: "api-journeys")
textResponseBlockCreate(input: TextResponseBlockCreateInput!): TextResponseBlock! @override(from: "api-journeys")
textResponseBlockUpdate(
id: ID!
input: TextResponseBlockUpdateInput!

"""drop this parameter after merging teams"""
journeyId: ID
): TextResponseBlock! @override(from: "api-journeys")
typographyBlockCreate(input: TypographyBlockCreateInput!): TypographyBlock! @override(from: "api-journeys")
typographyBlockUpdate(
id: ID!
input: TypographyBlockUpdateInput!

"""drop this parameter after merging teams"""
journeyId: ID
): TypographyBlock! @override(from: "api-journeys")
videoBlockCreate(input: VideoBlockCreateInput!): VideoBlock!
videoBlockUpdate(
id: ID!
Expand Down Expand Up @@ -1460,6 +1510,7 @@ type Mutation {
integrationDelete(id: ID!): Integration!
journeyTransferFromAnonymous(journeyId: ID!, teamId: ID): Journey!
journeyAiTranslateCreate(input: JourneyAiTranslateInput!): Journey!
journeyCustomizationDescriptionTranslate(input: JourneyCustomizationDescriptionTranslateInput!): Journey!
createJourneyEventsExportLog(input: JourneyEventsExportLogInput!): JourneyEventsExportLog!
journeyLanguageAiDetect(input: MutationJourneyLanguageAiDetectInput!): Boolean!
journeyProfileUpdate(input: JourneyProfileUpdateInput!): JourneyProfile!
Expand All @@ -1475,6 +1526,8 @@ type Mutation {
"""
timezone: String
): JourneyVisitorGoogleSheetExportResult!
userDeleteJourneysCheck(userId: String!): UserDeleteJourneysCheckResult!
userDeleteJourneysConfirm(userId: String!): UserDeleteJourneysConfirmResult!
}

input MutationJourneyLanguageAiDetectInput {
Expand Down Expand Up @@ -2343,6 +2396,12 @@ enum TypographyVariant {
overline
}

enum USER_DELETE_LOG_LEVEL {
INFO
WARN
ERROR
}

type User
@key(fields: "id")
@interfaceObject
Expand All @@ -2358,6 +2417,31 @@ type UserAgent
os: OperatingSystem!
}

type UserDeleteJourneysCheckResult {
journeysToDelete: Int!
journeysToTransfer: Int!
journeysToRemove: Int!
teamsToDelete: Int!
teamsToTransfer: Int!
teamsToRemove: Int!
logs: [UserDeleteJourneysLogEntry!]!
}

type UserDeleteJourneysConfirmResult {
success: Boolean!
deletedJourneyIds: [String!]!
deletedTeamIds: [String!]!
deletedUserJourneyIds: [String!]!
deletedUserTeamIds: [String!]!
logs: [UserDeleteJourneysLogEntry!]!
}

type UserDeleteJourneysLogEntry {
message: String!
level: USER_DELETE_LOG_LEVEL!
timestamp: String!
}

type UserInvite
@key(fields: "id")
@shareable
Expand Down
4 changes: 4 additions & 0 deletions apis/api-journeys-modern/src/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ export const env = createEnv({
PLAUSIBLE_URL: z.url().refine((url) => !url.endsWith('/'), {
message: 'PLAUSIBLE_URL must not end with a trailing slash'
}),
CLOUDFLARE_ACCOUNT_ID: z.string().trim().min(1),
CLOUDFLARE_IMAGES_TOKEN: z.string().trim().min(1),
MUX_UGC_ACCESS_TOKEN_ID: z.string().trim().min(1),
MUX_UGC_SECRET_KEY: z.string().trim().min(1),
REDIS_PORT: z.coerce.number().int().positive().default(6379),
REDIS_URL: z.string().trim().min(1).default('redis'),
SERVICE_VERSION: z.string().trim().default('')
Expand Down
6 changes: 6 additions & 0 deletions apis/api-journeys-modern/src/lib/google/sheets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,12 @@ export async function readValues({
return values
}

// Escape a sheet title for use in A1 notation ranges.
// Per Google Sheets: wrap in single quotes, doubling any internal single quotes.
export function escapeSheetName(name: string): string {
return `'${name.replace(/'/g, "''")}'`
}

// Convert a 0-based column index to A1 column letters
export function columnIndexToA1(colIndexZeroBased: number): string {
let n = colIndexZeroBased + 1
Expand Down
Loading
Loading