Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f1125d0894 | ||
|
|
6b3064e2ba | ||
|
|
a321e24839 | ||
|
|
3717df34be | ||
|
|
140dceebd1 | ||
|
|
4d2ceaf70a | ||
|
|
6b49a14b9f | ||
|
|
62b347fc74 | ||
|
|
cf4b4455d3 | ||
|
|
268fccca29 | ||
|
|
c938fbf4d6 | ||
|
|
eca92ca559 |
@@ -23,9 +23,11 @@ jobs:
|
||||
packages/twenty-sdk/**
|
||||
packages/twenty-client-sdk/**
|
||||
packages/twenty-shared/**
|
||||
packages/twenty-server/**
|
||||
!packages/twenty-sdk/package.json
|
||||
!packages/twenty-client-sdk/package.json
|
||||
!packages/twenty-shared/package.json
|
||||
!packages/twenty-server/package.json
|
||||
|
||||
example-app-postcard:
|
||||
needs: changed-files-check
|
||||
@@ -83,6 +85,31 @@ jobs:
|
||||
working-directory: packages/twenty-apps/examples/postcard
|
||||
run: npx vitest run
|
||||
|
||||
- name: Configure remote for SDK CLI
|
||||
run: |
|
||||
mkdir -p ~/.twenty
|
||||
cat > ~/.twenty/config.json <<EOF
|
||||
{
|
||||
"version": 1,
|
||||
"remotes": {
|
||||
"target": {
|
||||
"apiUrl": "${TWENTY_API_URL}",
|
||||
"apiKey": "${TWENTY_API_KEY}",
|
||||
"accessToken": "${TWENTY_API_KEY}"
|
||||
}
|
||||
},
|
||||
"defaultRemote": "target"
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Deploy postcard app (registry install path)
|
||||
working-directory: packages/twenty-apps/examples/postcard
|
||||
run: node ${{ github.workspace }}/packages/twenty-sdk/dist/cli.cjs deploy --remote target
|
||||
|
||||
- name: Install postcard app (registry install path)
|
||||
working-directory: packages/twenty-apps/examples/postcard
|
||||
run: node ${{ github.workspace }}/packages/twenty-sdk/dist/cli.cjs install --remote target
|
||||
|
||||
ci-example-app-postcard-status-check:
|
||||
if: always() && !cancelled()
|
||||
timeout-minutes: 5
|
||||
|
||||
@@ -4,6 +4,7 @@ body {
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
background: var(--t-background-tertiary);
|
||||
color: var(--t-font-color-primary);
|
||||
}
|
||||
|
||||
html {
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "En"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Enige {fieldLabel}-veld"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Wagwoord is gestel"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Wagwoord is opgedateer"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Wagwoord moet minstens 8 karakters wees"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "و"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "أي حقل {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "تم تعيين كلمة المرور"
|
||||
msgid "Password has been updated"
|
||||
msgstr "تم تحديث كلمة السر"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "يجب أن تكون كلمة المرور 8 أحرف على الأقل"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "I"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Qualsevol camp {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "La contrasenya s'ha establert"
|
||||
msgid "Password has been updated"
|
||||
msgstr "La contrasenya s'ha actualitzat"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "La contrasenya ha de tenir almenys 8 caràcters"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "A"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Libovolné pole {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Heslo bylo nastaveno"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Heslo bylo aktualizováno"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Heslo musí mít alespoň 8 znaků"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Og"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Ethvert {fieldLabel}-felt"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Adgangskoden er blevet sat"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Password er blevet opdateret"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Adgangskode skal være min. 8 tegn"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Und"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Beliebiges {fieldLabel}-Feld"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Das Passwort wurde aktualisiert"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Das Passwort wurde aktualisiert"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Passwort muss mind. 8 Zeichen lang sein"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Και"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Οποιοδήποτε πεδίο {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Ο κωδικός πρόσβασης έχει ρυθμιστεί"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Ο κωδικός έχει ενημερωθεί"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Ο κωδικός πρόσβασης πρέπει να είναι τουλάχιστον 8 χαρακτήρες"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1958,7 +1958,7 @@ msgid "And"
|
||||
msgstr "And"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Any {fieldLabel} field"
|
||||
|
||||
@@ -11819,11 +11819,11 @@ msgstr "Password has been set"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Password has been updated"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Password must be min. 8 characters"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr "Password must be between 8 and 50 characters"
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Y"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Cualquier campo {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "La contraseña ha sido establecida"
|
||||
msgid "Password has been updated"
|
||||
msgstr "La contraseña ha sido actualizada"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "La contraseña debe tener al menos 8 caracteres"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Ja"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Mikä tahansa {fieldLabel}-kenttä"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Salasana on asetettu"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Salasana on päivitetty"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Salasanassa on oltava vähintään 8 merkkiä"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Et"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Tout champ {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Le mot de passe a été défini"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Le mot de passe a été mis à jour"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Le mot de passe doit comporter au minimum 8 caractères"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "וגם"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "כל שדה {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "הסיסמה עודכנה"
|
||||
msgid "Password has been updated"
|
||||
msgstr "הסיסמה עודכנה"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "הסיסמה חייבת להיות באורך מינימום 8 תווים"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "És"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Bármely {fieldLabel} mező"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "A jelszót beállították"
|
||||
msgid "Password has been updated"
|
||||
msgstr "A jelszót frissítették"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "A jelszónak legalább 8 karakter hosszúnak kell lennie"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "E"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Qualsiasi campo {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "La password è stata impostata"
|
||||
msgid "Password has been updated"
|
||||
msgstr "La password è stata aggiornata"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "La password deve essere di almeno 8 caratteri"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "および"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "任意の {fieldLabel} フィールド"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "パスワードが設定されました"
|
||||
msgid "Password has been updated"
|
||||
msgstr "パスワードが更新されました"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "パスワードは8文字以上である必要があります"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "및"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "모든 {fieldLabel} 필드"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "비밀번호가 설정되었습니다"
|
||||
msgid "Password has been updated"
|
||||
msgstr "비밀번호가 업데이트되었습니다"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "비밀번호는 최소 8자여야 합니다"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "En"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Elk {fieldLabel}-veld"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Wachtwoord is ingesteld"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Wachtwoord is geüpdated"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Wachtwoord moet min. 8 tekens bevatten"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Og"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Ethvert {fieldLabel}-felt"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Passordet har blitt satt"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Passordet har blitt oppdatert"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Passord må være minst 8 tegn"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "I"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Dowolne pole {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Hasło zostało ustawione"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Hasło zostało zaktualizowane"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Hasło musi mieć min. 8 znaków"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1958,7 +1958,7 @@ msgid "And"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr ""
|
||||
|
||||
@@ -11796,10 +11796,10 @@ msgstr ""
|
||||
msgid "Password has been updated"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "E"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Qualquer campo {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "A senha foi definida"
|
||||
msgid "Password has been updated"
|
||||
msgstr "A senha foi atualizada"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "A senha deve ter no mínimo 8 caracteres"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "E"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Qualquer campo {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "A palavra-passe foi definida"
|
||||
msgid "Password has been updated"
|
||||
msgstr "A palavra-passe foi atualizada"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "A palavra-passe deve ter no mínimo 8 caracteres"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Și"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Orice câmp {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Parola a fost setată"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Parola a fost actualizată"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Parola trebuie să aibă minimum 8 caractere"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
Binary file not shown.
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "И"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Било које поље {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Лозинка је постављена"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Лозинка је ажурирана"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Лозинка мора имати најмање 8 знакова"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Och"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Vilket {fieldLabel}-fält som helst"
|
||||
|
||||
@@ -11803,11 +11803,11 @@ msgstr "Lösenordet har ställts in"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Lösenordet har uppdaterats"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Lösenord måste vara minst 8 tecken"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Ve"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Herhangi bir {fieldLabel} alanı"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Parola ayarlandı"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Parola güncellendi"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Parola en az 8 karakter olmalıdır"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Та"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Будь-яке поле {fieldLabel}"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Пароль було встановлено"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Пароль було оновлено"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Пароль має містити щонайменше 8 символів"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "Và"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "Bất kỳ trường {fieldLabel} nào"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "Mật khẩu đã được thiết lập"
|
||||
msgid "Password has been updated"
|
||||
msgstr "Mật khẩu đã được cập nhật"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "Mật khẩu phải có tối thiểu 8 ký tự"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "且"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "任意 {fieldLabel} 字段"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "密码已更新"
|
||||
msgid "Password has been updated"
|
||||
msgstr "密码已更新"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "密码长度至少为 8 个字符"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -1963,7 +1963,7 @@ msgid "And"
|
||||
msgstr "和"
|
||||
|
||||
#. js-lingui-id: KYvJeB
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterSubFieldSelectMenu.tsx
|
||||
#: src/modules/object-record/advanced-filter/components/AdvancedFilterCompositeSubFieldSelectMenu.tsx
|
||||
msgid "Any {fieldLabel} field"
|
||||
msgstr "任何 {fieldLabel} 欄位"
|
||||
|
||||
@@ -11801,11 +11801,11 @@ msgstr "密碼已設定"
|
||||
msgid "Password has been updated"
|
||||
msgstr "密碼已更新"
|
||||
|
||||
#. js-lingui-id: 1oqxe6
|
||||
#. js-lingui-id: BfLK2u
|
||||
#: src/pages/auth/PasswordReset.tsx
|
||||
#: src/modules/auth/sign-in-up/hooks/useSignInUpForm.ts
|
||||
msgid "Password must be min. 8 characters"
|
||||
msgstr "密碼至少需 8 個字元"
|
||||
msgid "Password must be between 8 and 50 characters"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: mi6Rel
|
||||
#: src/modules/auth/sign-in-up/hooks/useHandleResetPassword.ts
|
||||
|
||||
@@ -26,7 +26,10 @@ const makeValidationSchema = (signInUpStep: SignInUpStep) =>
|
||||
signInUpStep === SignInUpStep.Password
|
||||
? z
|
||||
.string()
|
||||
.regex(PASSWORD_REGEX, t`Password must be min. 8 characters`)
|
||||
.regex(
|
||||
PASSWORD_REGEX,
|
||||
t`Password must be between 8 and 50 characters`,
|
||||
)
|
||||
: z.string().optional(),
|
||||
captchaToken: z.string().default(''),
|
||||
})
|
||||
|
||||
@@ -8,4 +8,12 @@ describe('PASSWORD_REGEX', () => {
|
||||
expect(PASSWORD_REGEX.test(validPassword)).toBe(true);
|
||||
expect(PASSWORD_REGEX.test(invalidPassword)).toBe(false);
|
||||
});
|
||||
|
||||
it('should match passwords with at most 50 characters', () => {
|
||||
const validPassword = 'a'.repeat(50);
|
||||
const invalidPassword = 'a'.repeat(51);
|
||||
|
||||
expect(PASSWORD_REGEX.test(validPassword)).toBe(true);
|
||||
expect(PASSWORD_REGEX.test(invalidPassword)).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1 +1 @@
|
||||
export const PASSWORD_REGEX = /^.{8,}$/;
|
||||
export const PASSWORD_REGEX = /^.{8,50}$/;
|
||||
|
||||
@@ -29,6 +29,7 @@ export const StyledPageInfoTextContainer = styled.div`
|
||||
`;
|
||||
|
||||
export const StyledPageInfoTitleContainer = styled.div`
|
||||
color: ${themeCssVariables.font.color.primary};
|
||||
font-size: ${themeCssVariables.font.size.md};
|
||||
font-weight: ${themeCssVariables.font.weight.semiBold};
|
||||
max-width: 150px;
|
||||
|
||||
@@ -40,14 +40,14 @@ import {
|
||||
import { useNavigateApp } from '~/hooks/useNavigateApp';
|
||||
import { logError } from '~/utils/logError';
|
||||
|
||||
const passwordMinLengthMessage = msg`Password must be min. 8 characters`;
|
||||
const passwordLengthMessage = msg`Password must be between 8 and 50 characters`;
|
||||
|
||||
const validationSchema = z
|
||||
.object({
|
||||
passwordResetToken: z.string(),
|
||||
newPassword: z
|
||||
.string()
|
||||
.regex(PASSWORD_REGEX, i18n._(passwordMinLengthMessage)),
|
||||
.regex(PASSWORD_REGEX, i18n._(passwordLengthMessage)),
|
||||
})
|
||||
.required();
|
||||
|
||||
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
import { QueryRunner } from 'typeorm';
|
||||
|
||||
import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator';
|
||||
import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface';
|
||||
|
||||
@RegisteredInstanceCommand('2.3.0', 1747234300000)
|
||||
export class AddRelationTargetFieldMetadataIdToViewFilterEarlyFastInstanceCommand
|
||||
implements FastInstanceCommand
|
||||
{
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "core"."viewFilter" ADD COLUMN IF NOT EXISTS "relationTargetFieldMetadataId" uuid`,
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "core"."viewFilter" DROP COLUMN IF EXISTS "relationTargetFieldMetadataId"`,
|
||||
);
|
||||
}
|
||||
}
|
||||
+41
-2
@@ -1,6 +1,7 @@
|
||||
import { Command } from 'nest-commander';
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
|
||||
import { ActiveOrSuspendedWorkspaceCommandRunner } from 'src/database/commands/command-runners/active-or-suspended-workspace.command-runner';
|
||||
import { WorkspaceIteratorService } from 'src/database/commands/command-runners/workspace-iterator.service';
|
||||
@@ -10,13 +11,17 @@ import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/
|
||||
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
|
||||
import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type';
|
||||
import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service';
|
||||
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
|
||||
import { WorkspaceCacheService } from 'src/engine/workspace-cache/services/workspace-cache.service';
|
||||
import {
|
||||
computeFlatIndexFieldColumnNames,
|
||||
createIndexInWorkspaceSchema,
|
||||
dropIndexFromWorkspaceSchema,
|
||||
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/index/utils/index-action-handler.utils';
|
||||
import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util';
|
||||
|
||||
const LEGACY_NON_EMPTY_PARTIAL_INDEX_PATTERN = /^"[a-zA-Z][a-zA-Z0-9]*" != ''$/;
|
||||
|
||||
@RegisteredWorkspaceCommand('2.5.0', 1778000000000)
|
||||
@Command({
|
||||
name: 'upgrade:2-5:rebuild-unique-phone-indexes',
|
||||
@@ -103,6 +108,35 @@ export class RebuildUniquePhoneIndexesCommand extends ActiveOrSuspendedWorkspace
|
||||
flatEntityMaps: flatObjectMetadataMaps,
|
||||
});
|
||||
|
||||
const hasLegacyNonEmptyPartialClause =
|
||||
isNonEmptyString(uniquePhoneIndex.indexWhereClause) &&
|
||||
LEGACY_NON_EMPTY_PARTIAL_INDEX_PATTERN.test(
|
||||
uniquePhoneIndex.indexWhereClause,
|
||||
);
|
||||
|
||||
if (hasLegacyNonEmptyPartialClause) {
|
||||
const tableName = computeObjectTargetTable(flatObjectMetadata);
|
||||
const columns = computeFlatIndexFieldColumnNames({
|
||||
flatIndexFieldMetadatas: uniquePhoneIndex.flatIndexFieldMetadatas,
|
||||
flatFieldMetadataMaps,
|
||||
});
|
||||
|
||||
for (const column of columns) {
|
||||
await queryRunner.query(
|
||||
`UPDATE "${schemaName}"."${tableName}"
|
||||
SET "${column}" = NULL
|
||||
WHERE "${column}" = ''`,
|
||||
);
|
||||
}
|
||||
|
||||
await queryRunner.query(
|
||||
`UPDATE "core"."indexMetadata"
|
||||
SET "indexWhereClause" = NULL
|
||||
WHERE id = $1`,
|
||||
[uniquePhoneIndex.id],
|
||||
);
|
||||
}
|
||||
|
||||
await dropIndexFromWorkspaceSchema({
|
||||
indexName: uniquePhoneIndex.name,
|
||||
workspaceSchemaManagerService: this.workspaceSchemaManagerService,
|
||||
@@ -110,8 +144,13 @@ export class RebuildUniquePhoneIndexesCommand extends ActiveOrSuspendedWorkspace
|
||||
schemaName,
|
||||
});
|
||||
|
||||
const flatIndexMetadataForRebuild: FlatIndexMetadata =
|
||||
hasLegacyNonEmptyPartialClause
|
||||
? { ...uniquePhoneIndex, indexWhereClause: null }
|
||||
: uniquePhoneIndex;
|
||||
|
||||
await createIndexInWorkspaceSchema({
|
||||
flatIndexMetadata: uniquePhoneIndex,
|
||||
flatIndexMetadata: flatIndexMetadataForRebuild,
|
||||
flatObjectMetadata,
|
||||
flatFieldMetadataMaps,
|
||||
workspaceSchemaManagerService: this.workspaceSchemaManagerService,
|
||||
@@ -120,7 +159,7 @@ export class RebuildUniquePhoneIndexesCommand extends ActiveOrSuspendedWorkspace
|
||||
});
|
||||
|
||||
this.logger.log(
|
||||
`Rebuilt unique phone index ${uniquePhoneIndex.name} for workspace ${workspaceId}`,
|
||||
`Rebuilt unique phone index ${uniquePhoneIndex.name} for workspace ${workspaceId}${hasLegacyNonEmptyPartialClause ? ' (dropped legacy non-empty partial WHERE clause)' : ''}`,
|
||||
);
|
||||
}
|
||||
await queryRunner.commitTransaction();
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@ export class AddRelationTargetFieldMetadataIdToViewFilterFastInstanceCommand
|
||||
{
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "core"."viewFilter" ADD "relationTargetFieldMetadataId" uuid`,
|
||||
`ALTER TABLE "core"."viewFilter" ADD COLUMN IF NOT EXISTS "relationTargetFieldMetadataId" uuid`,
|
||||
);
|
||||
await queryRunner.query(
|
||||
`CREATE INDEX "IDX_VIEW_FILTER_RELATION_TARGET_FIELD_METADATA_ID" ON "core"."viewFilter" ("relationTargetFieldMetadataId") WHERE "relationTargetFieldMetadataId" IS NOT NULL`,
|
||||
@@ -27,7 +27,7 @@ export class AddRelationTargetFieldMetadataIdToViewFilterFastInstanceCommand
|
||||
`DROP INDEX "core"."IDX_VIEW_FILTER_RELATION_TARGET_FIELD_METADATA_ID"`,
|
||||
);
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "core"."viewFilter" DROP COLUMN "relationTargetFieldMetadataId"`,
|
||||
`ALTER TABLE "core"."viewFilter" DROP COLUMN IF EXISTS "relationTargetFieldMetadataId"`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+2
@@ -21,6 +21,7 @@ import { BackfillPageLayoutWidgetPositionSlowInstanceCommand } from 'src/databas
|
||||
import { AddCacheTokensToAgentChatThreadFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-2/2-2-instance-command-fast-1777455269302-add-cache-tokens-to-agent-chat-thread';
|
||||
import { AddLogoToApplicationFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-2/2-2-instance-command-fast-1777539664664-add-logo-to-application';
|
||||
import { AddSubFieldNameToViewSortEarlyFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1747234200000-add-sub-field-name-to-view-sort';
|
||||
import { AddRelationTargetFieldMetadataIdToViewFilterEarlyFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1747234300000-add-relation-target-field-metadata-id-to-view-filter';
|
||||
import { AddUpgradeMigrationWorkspaceIdIndexFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1777308014234-add-upgrade-migration-workspace-id-index';
|
||||
import { AddDeletedAtToAgentChatThreadFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1777682000000-add-deleted-at-to-agent-chat-thread';
|
||||
import { ConnectionProviderSyncableEntityFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1777896012579-connection-provider-syncable-entity';
|
||||
@@ -61,6 +62,7 @@ export const INSTANCE_COMMANDS = [
|
||||
AddPageLayoutIdToCommandMenuItemFastInstanceCommand,
|
||||
AddConditionalAvailabilityExpressionToPageLayoutWidgetFastInstanceCommand,
|
||||
AddSubFieldNameToViewSortEarlyFastInstanceCommand,
|
||||
AddRelationTargetFieldMetadataIdToViewFilterEarlyFastInstanceCommand,
|
||||
AddUpgradeMigrationWorkspaceIdIndexFastInstanceCommand,
|
||||
AddIsPreInstalledToApplicationRegistrationFastInstanceCommand,
|
||||
AddProviderExecutedToAgentMessagePartFastInstanceCommand,
|
||||
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
import { type FieldManifest } from 'twenty-shared/application';
|
||||
import {
|
||||
type FieldMetadataDefaultActor,
|
||||
FieldMetadataType,
|
||||
} from 'twenty-shared/types';
|
||||
|
||||
import { fromFieldManifestToUniversalFlatFieldMetadata } from 'src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util';
|
||||
|
||||
const APP_UID = '11111111-1111-1111-1111-111111111111';
|
||||
const OBJECT_UID = '22222222-2222-2222-2222-222222222222';
|
||||
const FIELD_UID = '33333333-3333-3333-3333-333333333333';
|
||||
const NOW = '2026-05-15T10:00:00.000Z';
|
||||
|
||||
const buildFieldManifest = (
|
||||
overrides: Partial<FieldManifest>,
|
||||
): FieldManifest & { objectUniversalIdentifier: string } =>
|
||||
({
|
||||
universalIdentifier: FIELD_UID,
|
||||
type: FieldMetadataType.TEXT,
|
||||
name: 'demo',
|
||||
label: 'Demo',
|
||||
objectUniversalIdentifier: OBJECT_UID,
|
||||
...overrides,
|
||||
}) as FieldManifest & { objectUniversalIdentifier: string };
|
||||
|
||||
describe('fromFieldManifestToUniversalFlatFieldMetadata', () => {
|
||||
describe('composite defaultValue normalization', () => {
|
||||
it('normalizes empty-name actor defaults to the canonical four-key shape', () => {
|
||||
const result = fromFieldManifestToUniversalFlatFieldMetadata({
|
||||
fieldManifest: buildFieldManifest({
|
||||
type: FieldMetadataType.ACTOR,
|
||||
name: 'createdBy',
|
||||
label: 'Created by',
|
||||
defaultValue: { name: "''", source: "'MANUAL'" },
|
||||
}),
|
||||
applicationUniversalIdentifier: APP_UID,
|
||||
now: NOW,
|
||||
});
|
||||
|
||||
expect(result.defaultValue).toEqual({
|
||||
context: null,
|
||||
name: null,
|
||||
source: "'MANUAL'",
|
||||
workspaceMemberId: null,
|
||||
});
|
||||
});
|
||||
|
||||
it('is idempotent: re-running the converter on its own output yields the same defaultValue', () => {
|
||||
const first = fromFieldManifestToUniversalFlatFieldMetadata({
|
||||
fieldManifest: buildFieldManifest({
|
||||
type: FieldMetadataType.ACTOR,
|
||||
name: 'createdBy',
|
||||
label: 'Created by',
|
||||
defaultValue: { name: "''", source: "'MANUAL'" },
|
||||
}),
|
||||
applicationUniversalIdentifier: APP_UID,
|
||||
now: NOW,
|
||||
});
|
||||
|
||||
const second = fromFieldManifestToUniversalFlatFieldMetadata({
|
||||
fieldManifest: buildFieldManifest({
|
||||
type: FieldMetadataType.ACTOR,
|
||||
name: 'createdBy',
|
||||
label: 'Created by',
|
||||
defaultValue: first.defaultValue as FieldMetadataDefaultActor,
|
||||
}),
|
||||
applicationUniversalIdentifier: APP_UID,
|
||||
now: NOW,
|
||||
});
|
||||
|
||||
expect(second.defaultValue).toEqual(first.defaultValue);
|
||||
});
|
||||
|
||||
it('falls back to the generated default and normalizes it when defaultValue is omitted', () => {
|
||||
const result = fromFieldManifestToUniversalFlatFieldMetadata({
|
||||
fieldManifest: buildFieldManifest({
|
||||
type: FieldMetadataType.ACTOR,
|
||||
name: 'updatedBy',
|
||||
label: 'Updated by',
|
||||
}),
|
||||
applicationUniversalIdentifier: APP_UID,
|
||||
now: NOW,
|
||||
});
|
||||
|
||||
expect(result.defaultValue).toEqual({
|
||||
context: null,
|
||||
name: "'System'",
|
||||
source: "'MANUAL'",
|
||||
workspaceMemberId: null,
|
||||
});
|
||||
});
|
||||
|
||||
it('leaves non-composite defaults untouched', () => {
|
||||
const result = fromFieldManifestToUniversalFlatFieldMetadata({
|
||||
fieldManifest: buildFieldManifest({
|
||||
type: FieldMetadataType.TEXT,
|
||||
name: 'title',
|
||||
label: 'Title',
|
||||
defaultValue: "'todo'",
|
||||
}),
|
||||
applicationUniversalIdentifier: APP_UID,
|
||||
now: NOW,
|
||||
});
|
||||
|
||||
expect(result.defaultValue).toBe("'todo'");
|
||||
});
|
||||
});
|
||||
});
|
||||
+16
-2
@@ -8,7 +8,10 @@ import {
|
||||
ApplicationException,
|
||||
ApplicationExceptionCode,
|
||||
} from 'src/engine/core-modules/application/application.exception';
|
||||
import { type CompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/composite-field-metadata-type.type';
|
||||
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
|
||||
import { generateDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/generate-default-value';
|
||||
import { nullifyEmptyCompositeDefaultValue } from 'src/engine/metadata-modules/flat-field-metadata/utils/nullify-empty-composite-default-value.util';
|
||||
import { PARTIAL_SYSTEM_FLAT_FIELD_METADATAS } from 'src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant';
|
||||
import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util';
|
||||
import { type UniversalFlatFieldMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-field-metadata.type';
|
||||
@@ -65,6 +68,18 @@ export const fromFieldManifestToUniversalFlatFieldMetadata = ({
|
||||
relationTargetObjectMetadataUniversalIdentifier,
|
||||
} = getRelationTargetUniversalIdentifiers(fieldManifest);
|
||||
|
||||
// TODO: generate system fields server-side from the object manifest
|
||||
// so the converter doesn't need to re-normalize composite defaults
|
||||
// that the SDK couldn't have known the canonical shape of.
|
||||
const rawDefaultValue =
|
||||
fieldManifest.defaultValue ?? generateDefaultValue(fieldManifest.type);
|
||||
const defaultValue = isCompositeFieldMetadataType(fieldManifest.type)
|
||||
? nullifyEmptyCompositeDefaultValue({
|
||||
defaultValue: rawDefaultValue,
|
||||
fieldType: fieldManifest.type as CompositeFieldMetadataType,
|
||||
})
|
||||
: rawDefaultValue;
|
||||
|
||||
return {
|
||||
universalIdentifier: fieldManifest.universalIdentifier,
|
||||
applicationUniversalIdentifier,
|
||||
@@ -75,8 +90,7 @@ export const fromFieldManifestToUniversalFlatFieldMetadata = ({
|
||||
icon: fieldManifest.icon ?? null,
|
||||
standardOverrides: null,
|
||||
options: fieldManifest.options ?? null,
|
||||
defaultValue:
|
||||
fieldManifest.defaultValue ?? generateDefaultValue(fieldManifest.type),
|
||||
defaultValue,
|
||||
universalSettings: fieldManifest.universalSettings ?? null,
|
||||
isCustom: true,
|
||||
isActive: true,
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
|
||||
import * as bcrypt from 'bcrypt';
|
||||
|
||||
export const PASSWORD_REGEX = /^.{8,}$/;
|
||||
export const PASSWORD_REGEX = /^.{8,50}$/;
|
||||
|
||||
const saltRounds = 10;
|
||||
|
||||
|
||||
+1
-1
@@ -7,4 +7,4 @@
|
||||
* |___/
|
||||
*/
|
||||
|
||||
export const TWENTY_CURRENT_VERSION = '2.6.0' as const;
|
||||
export const TWENTY_CURRENT_VERSION = '2.5.0' as const;
|
||||
|
||||
+1
-3
@@ -7,6 +7,4 @@
|
||||
* |___/
|
||||
*/
|
||||
|
||||
export const TWENTY_NEXT_VERSIONS = [
|
||||
'2.7.0',
|
||||
] as const;
|
||||
export const TWENTY_NEXT_VERSIONS = ['2.6.0'] as const;
|
||||
|
||||
-1
@@ -16,5 +16,4 @@ export const TWENTY_PREVIOUS_VERSIONS = [
|
||||
'2.2.0',
|
||||
'2.3.0',
|
||||
'2.4.0',
|
||||
'2.5.0',
|
||||
] as const;
|
||||
|
||||
@@ -1420,18 +1420,6 @@
|
||||
"maxOutputTokens": 30000,
|
||||
"modalities": ["image"]
|
||||
},
|
||||
{
|
||||
"name": "grok-4-1-fast",
|
||||
"label": "Grok 4.1 Fast",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.2,
|
||||
"outputCostPerMillionTokens": 0.5,
|
||||
"cachedInputCostPerMillionTokens": 0.05,
|
||||
"contextWindowTokens": 2000000,
|
||||
"maxOutputTokens": 30000,
|
||||
"modalities": ["image"],
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-4.20-0309-reasoning",
|
||||
"label": "Grok 4.20 (Reasoning)",
|
||||
@@ -1450,17 +1438,6 @@
|
||||
"modalities": ["image"],
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-3-mini-fast-latest",
|
||||
"label": "Grok 3 Mini Fast Latest",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.6,
|
||||
"outputCostPerMillionTokens": 4,
|
||||
"cachedInputCostPerMillionTokens": 0.15,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192,
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-vision-beta",
|
||||
"label": "Grok Vision Beta",
|
||||
@@ -1472,70 +1449,6 @@
|
||||
"maxOutputTokens": 4096,
|
||||
"modalities": ["image"]
|
||||
},
|
||||
{
|
||||
"name": "grok-3-mini",
|
||||
"label": "Grok 3 Mini",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.3,
|
||||
"outputCostPerMillionTokens": 0.5,
|
||||
"cachedInputCostPerMillionTokens": 0.075,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192,
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-3-fast-latest",
|
||||
"label": "Grok 3 Fast Latest",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 5,
|
||||
"outputCostPerMillionTokens": 25,
|
||||
"cachedInputCostPerMillionTokens": 1.25,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192
|
||||
},
|
||||
{
|
||||
"name": "grok-4-1-fast-non-reasoning",
|
||||
"label": "Grok 4.1 Fast (Non-Reasoning)",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.2,
|
||||
"outputCostPerMillionTokens": 0.5,
|
||||
"cachedInputCostPerMillionTokens": 0.05,
|
||||
"contextWindowTokens": 2000000,
|
||||
"maxOutputTokens": 30000,
|
||||
"modalities": ["image"]
|
||||
},
|
||||
{
|
||||
"name": "grok-4",
|
||||
"label": "Grok 4",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 3,
|
||||
"outputCostPerMillionTokens": 15,
|
||||
"cachedInputCostPerMillionTokens": 0.75,
|
||||
"contextWindowTokens": 256000,
|
||||
"maxOutputTokens": 64000,
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-code-fast-1",
|
||||
"label": "Grok Code Fast 1",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.2,
|
||||
"outputCostPerMillionTokens": 1.5,
|
||||
"cachedInputCostPerMillionTokens": 0.02,
|
||||
"contextWindowTokens": 256000,
|
||||
"maxOutputTokens": 10000,
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-3-latest",
|
||||
"label": "Grok 3 Latest",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 3,
|
||||
"outputCostPerMillionTokens": 15,
|
||||
"cachedInputCostPerMillionTokens": 0.75,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192
|
||||
},
|
||||
{
|
||||
"name": "grok-2-vision-1212",
|
||||
"label": "Grok 2 Vision (1212)",
|
||||
@@ -1547,17 +1460,6 @@
|
||||
"maxOutputTokens": 4096,
|
||||
"modalities": ["image"]
|
||||
},
|
||||
{
|
||||
"name": "grok-3-mini-fast",
|
||||
"label": "Grok 3 Mini Fast",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.6,
|
||||
"outputCostPerMillionTokens": 4,
|
||||
"cachedInputCostPerMillionTokens": 0.15,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192,
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-2-1212",
|
||||
"label": "Grok 2 (1212)",
|
||||
@@ -1599,17 +1501,6 @@
|
||||
"maxOutputTokens": 4096,
|
||||
"modalities": ["image"]
|
||||
},
|
||||
{
|
||||
"name": "grok-3-mini-latest",
|
||||
"label": "Grok 3 Mini Latest",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.3,
|
||||
"outputCostPerMillionTokens": 0.5,
|
||||
"cachedInputCostPerMillionTokens": 0.075,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192,
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-4.3",
|
||||
"label": "Grok 4.3",
|
||||
@@ -1639,16 +1530,6 @@
|
||||
"maxOutputTokens": 4096,
|
||||
"modalities": ["image"]
|
||||
},
|
||||
{
|
||||
"name": "grok-3-fast",
|
||||
"label": "Grok 3 Fast",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 5,
|
||||
"outputCostPerMillionTokens": 25,
|
||||
"cachedInputCostPerMillionTokens": 1.25,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192
|
||||
},
|
||||
{
|
||||
"name": "grok-2-latest",
|
||||
"label": "Grok 2 Latest",
|
||||
@@ -1658,39 +1539,6 @@
|
||||
"cachedInputCostPerMillionTokens": 2,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192
|
||||
},
|
||||
{
|
||||
"name": "grok-4-fast",
|
||||
"label": "Grok 4 Fast",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.2,
|
||||
"outputCostPerMillionTokens": 0.5,
|
||||
"cachedInputCostPerMillionTokens": 0.05,
|
||||
"contextWindowTokens": 2000000,
|
||||
"maxOutputTokens": 30000,
|
||||
"modalities": ["image"],
|
||||
"supportsReasoning": true
|
||||
},
|
||||
{
|
||||
"name": "grok-3",
|
||||
"label": "Grok 3",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 3,
|
||||
"outputCostPerMillionTokens": 15,
|
||||
"cachedInputCostPerMillionTokens": 0.75,
|
||||
"contextWindowTokens": 131072,
|
||||
"maxOutputTokens": 8192
|
||||
},
|
||||
{
|
||||
"name": "grok-4-fast-non-reasoning",
|
||||
"label": "Grok 4 Fast (Non-Reasoning)",
|
||||
"modelFamily": "GROK",
|
||||
"inputCostPerMillionTokens": 0.2,
|
||||
"outputCostPerMillionTokens": 0.5,
|
||||
"cachedInputCostPerMillionTokens": 0.05,
|
||||
"contextWindowTokens": 2000000,
|
||||
"maxOutputTokens": 30000,
|
||||
"modalities": ["image"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ export class WorkspaceMetadataVersionService {
|
||||
|
||||
async incrementMetadataVersion(workspaceId: string): Promise<void> {
|
||||
const workspace = await this.workspaceRepository.findOne({
|
||||
select: ['id', 'metadataVersion'],
|
||||
where: { id: workspaceId },
|
||||
withDeleted: true,
|
||||
});
|
||||
|
||||
+1
-15
@@ -69,21 +69,7 @@ export class FindRecordsWorkflowAction implements WorkflowAction {
|
||||
workspaceId,
|
||||
);
|
||||
|
||||
// Relation-traversal filters reference target fields on related
|
||||
// objects, which aren't in flatObjectMetadata.fieldIds. Collect the
|
||||
// referenced target ids from the record filters so the shared
|
||||
// dispatcher can resolve them and avoid silently dropping the filter.
|
||||
const relationTargetFieldIds = (
|
||||
workflowActionInput.filter?.recordFilters ?? []
|
||||
)
|
||||
.map((filter) => filter.relationTargetFieldMetadataId)
|
||||
.filter(isDefined);
|
||||
|
||||
const fieldIds = Array.from(
|
||||
new Set([...flatObjectMetadata.fieldIds, ...relationTargetFieldIds]),
|
||||
);
|
||||
|
||||
const fields = fieldIds
|
||||
const fields = flatObjectMetadata.fieldIds
|
||||
.map((fieldId) => {
|
||||
const field = findFlatEntityByIdInFlatEntityMaps({
|
||||
flatEntityId: fieldId,
|
||||
|
||||
+4
@@ -206,6 +206,7 @@ exports[`syncApplication should delete old field and create equivalent one when
|
||||
"applicationUniversalIdentifier": Any<String>,
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": {
|
||||
"context": null,
|
||||
"name": "'System'",
|
||||
"source": "'MANUAL'",
|
||||
"workspaceMemberId": null,
|
||||
@@ -236,6 +237,7 @@ exports[`syncApplication should delete old field and create equivalent one when
|
||||
"applicationUniversalIdentifier": Any<String>,
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": {
|
||||
"context": null,
|
||||
"name": "'System'",
|
||||
"source": "'MANUAL'",
|
||||
"workspaceMemberId": null,
|
||||
@@ -562,6 +564,7 @@ exports[`syncApplication should return workspace migration actions on initial sy
|
||||
"applicationUniversalIdentifier": Any<String>,
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": {
|
||||
"context": null,
|
||||
"name": "'System'",
|
||||
"source": "'MANUAL'",
|
||||
"workspaceMemberId": null,
|
||||
@@ -592,6 +595,7 @@ exports[`syncApplication should return workspace migration actions on initial sy
|
||||
"applicationUniversalIdentifier": Any<String>,
|
||||
"createdAt": Any<String>,
|
||||
"defaultValue": {
|
||||
"context": null,
|
||||
"name": "'System'",
|
||||
"source": "'MANUAL'",
|
||||
"workspaceMemberId": null,
|
||||
|
||||
Reference in New Issue
Block a user