Skip to content

Commit 14c31f7

Browse files
authored
Merge pull request #3404 from DFXswiss/develop
2 parents 9e82c3b + 07c247a commit 14c31f7

30 files changed

Lines changed: 481 additions & 77 deletions
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* @typedef {import('typeorm').MigrationInterface} MigrationInterface
3+
* @typedef {import('typeorm').QueryRunner} QueryRunner
4+
*/
5+
6+
/**
7+
* @class
8+
* @implements {MigrationInterface}
9+
*/
10+
module.exports = class AddUserDataVerificationCallTime1770470071165 {
11+
name = 'AddUserDataVerificationCallTime1770470071165'
12+
13+
/**
14+
* @param {QueryRunner} queryRunner
15+
*/
16+
async up(queryRunner) {
17+
await queryRunner.query(`ALTER TABLE "user_data" ADD "phoneCallTimes" nvarchar(256)`);
18+
await queryRunner.query(`ALTER TABLE "user_data" ADD "phoneCallStatus" nvarchar(256)`);
19+
}
20+
21+
/**
22+
* @param {QueryRunner} queryRunner
23+
*/
24+
async down(queryRunner) {
25+
await queryRunner.query(`ALTER TABLE "user_data" DROP COLUMN "phoneCallStatus"`);
26+
await queryRunner.query(`ALTER TABLE "user_data" DROP COLUMN "phoneCallTimes"`);
27+
}
28+
}

src/integration/blockchain/api/services/blockchain-transaction.service.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,18 +102,14 @@ export class BlockchainTransactionService {
102102
const fromTokenAccount = await SolanaToken.getAssociatedTokenAddress(mintPublicKey, fromPublicKey);
103103
const toTokenAccount = await SolanaToken.getAssociatedTokenAddress(mintPublicKey, toPublicKey);
104104

105-
const isTokenAccountAvailable = await this.solanaClient.checkTokenAccount(toAddress, mintAddress);
106-
107-
if (!isTokenAccountAvailable) {
108-
transaction.add(
109-
SolanaToken.createAssociatedTokenAccountInstruction(
110-
fromPublicKey,
111-
toTokenAccount,
112-
toPublicKey,
113-
mintPublicKey,
114-
),
115-
);
116-
}
105+
transaction.add(
106+
SolanaToken.createAssociatedTokenAccountIdempotentInstruction(
107+
fromPublicKey,
108+
toTokenAccount,
109+
toPublicKey,
110+
mintPublicKey,
111+
),
112+
);
117113

118114
transaction.add(
119115
SolanaToken.createTransferInstruction(

src/integration/blockchain/solana/solana-client.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -229,15 +229,16 @@ export class SolanaClient extends BlockchainClient {
229229
const fromTokenAccount = await SolanaToken.getAssociatedTokenAddress(mintPublicKey, fromPublicKey);
230230
const toTokenAccount = await SolanaToken.getAssociatedTokenAddress(mintPublicKey, toPublicKey);
231231

232-
const isTokenAccountAvailable = await this.checkTokenAccount(toAddress, mintAddress);
233-
234232
const transaction = new Solana.Transaction();
235233

236-
if (!isTokenAccountAvailable) {
237-
transaction.add(
238-
SolanaToken.createAssociatedTokenAccountInstruction(fromPublicKey, toTokenAccount, toPublicKey, mintPublicKey),
239-
);
240-
}
234+
transaction.add(
235+
SolanaToken.createAssociatedTokenAccountIdempotentInstruction(
236+
fromPublicKey,
237+
toTokenAccount,
238+
toPublicKey,
239+
mintPublicKey,
240+
),
241+
);
241242

242243
transaction.add(
243244
SolanaToken.createTransferInstruction(

src/integration/sift/dto/sift.dto.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,6 +1034,7 @@ export const SiftAmlDeclineMap: { [method in AmlReason]: DeclineCategory } = {
10341034
[AmlReason.MANUAL_CHECK_PHONE]: DeclineCategory.RISKY,
10351035
[AmlReason.MANUAL_CHECK_IP_PHONE]: DeclineCategory.RISKY,
10361036
[AmlReason.MANUAL_CHECK_IP_COUNTRY_PHONE]: DeclineCategory.RISKY,
1037+
[AmlReason.MANUAL_CHECK_PHONE_FAILED]: DeclineCategory.RISKY,
10371038
[AmlReason.BANK_RELEASE_PENDING]: DeclineCategory.OTHER,
10381039
[AmlReason.VIRTUAL_IBAN_USER_MISMATCH]: DeclineCategory.RISKY,
10391040
[AmlReason.INTERMEDIARY_WITHOUT_SENDER]: DeclineCategory.RISKY,

src/shared/i18n/de/mail.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@
9191
"test_only": "Test",
9292
"kyc_data_needed": "Für die Transaktion werden deine KYC Daten benötigt",
9393
"bank_tx_needed": "Um diese Transaktion auszuführen ist zuvor eine Banktransaktion erforderlich",
94-
"manual_check_phone": "Wir konnten dich unter deiner angegebenen Telefonnummer nicht erreichen",
95-
"manual_check_ip_phone": "Wir konnten dich unter deiner angegebenen Telefonnummer nicht erreichen",
96-
"manual_check_ip_country_phone": "Wir konnten dich unter deiner angegebenen Telefonnummer nicht erreichen",
94+
"manual_check_phone": "Wir konnten dich unter deiner angegebenen Telefonnummer nicht erreichen. Du kannst einen erneuten Anruf und eine bevorzugte Uhrzeit für das Telefongespräch selber hier beantragen: [url:https://app.dfx.swiss/settings?a=call]",
95+
"manual_check_ip_phone": "Wir konnten dich unter deiner angegebenen Telefonnummer nicht erreichen. Du kannst einen erneuten Anruf und eine bevorzugte Uhrzeit für das Telefongespräch selber hier beantragen: [url:https://app.dfx.swiss/settings?a=call]",
96+
"manual_check_ip_country_phone": "Wir konnten dich unter deiner angegebenen Telefonnummer nicht erreichen. Du kannst einen erneuten Anruf und eine bevorzugte Uhrzeit für das Telefongespräch selber hier beantragen: [url:https://app.dfx.swiss/settings?a=call]",
97+
"manual_check_phone_rejected": "Das Telefonat war nicht erfolgreich oder wurde abgelehnt",
9798
"merge_incomplete": "Die Email Bestätigung wurde nicht akzeptiert",
9899
"intermediary_without_sender": "Die Absenderbank (Wise/Revolut) hat nur den Banknamen übermittelt, nicht aber den Namen des Kontoinhabers. DFX kann daher den tatsächlichen Absender nicht verifizieren und die Transaktion nicht verarbeiten.",
99100
"name_too_short": "Dein Name ist zu kurz für die Bankverarbeitung. Banken benötigen mindestens 4 Buchstaben im Namen des Kontoinhabers.",
@@ -216,7 +217,7 @@
216217
"line1": "Wir haben deine Einzahlung erhalten.",
217218
"line2": "Wir werden uns in Kürze auf der Telefonnummer {phone} bei dir melden.",
218219
"line3": "Wenn alle Fragen geklärt sind, wird deine Transaktion automatisch weiterverarbeitet.",
219-
"line4": "",
220+
"line4": "Du kannst eine bevorzugte Uhrzeit für das Telefongespräch selber hier angeben: [url:https://app.dfx.swiss/settings?a=call]",
220221
"line5": "Wenn du stattdessen eine Rückzahlung anfordern möchtest:<br>[url:Klick hier]"
221222
},
222223
"merge_incomplete": {
@@ -243,7 +244,7 @@
243244
"line1": "Wir haben deine Einzahlung erhalten.",
244245
"line2": "Wir werden uns in Kürze auf der Telefonnummer {phone} bei dir melden.",
245246
"line3": "Wenn alle Fragen geklärt sind, wird deine Transaktion automatisch weiterverarbeitet.",
246-
"line4": "",
247+
"line4": "Du kannst eine bevorzugte Uhrzeit für das Telefongespräch selber hier angeben: [url:https://app.dfx.swiss/settings?a=call]",
247248
"line5": "Wenn du stattdessen eine Rückzahlung anfordern möchtest:<br>[url:Klick hier]"
248249
},
249250
"manual_check_ip_country_phone": {
@@ -252,7 +253,7 @@
252253
"line1": "Wir haben deine Einzahlung erhalten.",
253254
"line2": "Wir werden uns in Kürze auf der Telefonnummer {phone} bei dir melden.",
254255
"line3": "Wenn alle Fragen geklärt sind, wird deine Transaktion automatisch weiterverarbeitet.",
255-
"line4": "",
256+
"line4": "Du kannst eine bevorzugte Uhrzeit für das Telefongespräch selber hier angeben: [url:https://app.dfx.swiss/settings?a=call]",
256257
"line5": "Wenn du stattdessen eine Rückzahlung anfordern möchtest:<br>[url:Klick hier]"
257258
}
258259
},

src/shared/i18n/en/mail.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@
9191
"test_only": "Test",
9292
"kyc_data_needed": "Your KYC data is required for the transaction",
9393
"bank_tx_needed": "A bank transaction is required before this transaction can be carried out",
94-
"manual_check_phone": "We were unable to reach you at the phone number you provided",
95-
"manual_check_ip_phone": "We were unable to reach you at the phone number you provided",
96-
"manual_check_ip_country_phone": "We were unable to reach you at the phone number you provided",
94+
"manual_check_phone": "We were unable to reach you at the phone number you provided. You can request a callback and a preferred time for the phone call yourself here: [url:https://app.dfx.swiss/settings?a=call]",
95+
"manual_check_ip_phone": "We were unable to reach you at the phone number you provided. You can request a callback and a preferred time for the phone call yourself here: [url:https://app.dfx.swiss/settings?a=call]",
96+
"manual_check_ip_country_phone": "We were unable to reach you at the phone number you provided. You can request a callback and a preferred time for the phone call yourself here: [url:https://app.dfx.swiss/settings?a=call]",
97+
"manual_check_phone_rejected": "The phone call was unsuccessful or rejected",
9798
"merge_incomplete": "The email confirmation was not accepted",
9899
"intermediary_without_sender": "The sender bank (Wise/Revolut) only transmitted the bank name, not the account holder's name. DFX is therefore unable to verify the actual sender and cannot process the transaction.",
99100
"name_too_short": "Your name is too short for bank processing. Banks require at least 4 letters in the account holder name.",
@@ -216,7 +217,7 @@
216217
"line1": "We have received your deposit.",
217218
"line2": "We will contact you shortly at {phone}.",
218219
"line3": "Once all questions have been clarified, your transaction will be processed automatically.",
219-
"line4": "",
220+
"line4": "You can specify your preferred time for the phone call here: [url:https://app.dfx.swiss/settings?a=call]",
220221
"line5": "If you would like to request a refund instead:<br>[url:click here]"
221222
},
222223
"merge_incomplete": {
@@ -243,7 +244,7 @@
243244
"line1": "We have received your deposit.",
244245
"line2": "We will contact you shortly at {phone}.",
245246
"line3": "Once all questions have been clarified, your transaction will be processed automatically.",
246-
"line4": "",
247+
"line4": "You can specify your preferred time for the phone call here: [url:https://app.dfx.swiss/settings?a=call]",
247248
"line5": "If you would like to request a refund instead:<br>[url:click here]"
248249
},
249250
"manual_check_ip_country_phone": {
@@ -252,7 +253,7 @@
252253
"line1": "We have received your deposit.",
253254
"line2": "We will contact you shortly at {phone}.",
254255
"line3": "Once all questions have been clarified, your transaction will be processed automatically.",
255-
"line4": "",
256+
"line4": "You can specify your preferred time for the phone call here: [url:https://app.dfx.swiss/settings?a=call]",
256257
"line5": "If you would like to request a refund instead:<br>[url:click here]"
257258
}
258259
},

src/shared/i18n/es/mail.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@
9191
"test_only": "Prueba",
9292
"kyc_data_needed": "Sus datos KYC son necesarios para la transacción",
9393
"bank_tx_needed": "Para poder realizar esta operación es necesaria una transacción bancaria",
94-
"manual_check_phone": "No hemos podido contactar con usted al número de teléfono que nos facilitó",
95-
"manual_check_ip_phone": "No hemos podido contactar con usted al número de teléfono que nos facilitó",
96-
"manual_check_ip_country_phone": "No hemos podido contactar con usted al número de teléfono que nos facilitó",
94+
"manual_check_phone": "No hemos podido contactar con usted al número de teléfono que nos facilitó. Aquí puede solicitar una llamada y elegir la hora que prefiera para recibirla: [url:https://app.dfx.swiss/settings?a=call]",
95+
"manual_check_ip_phone": "No hemos podido contactar con usted al número de teléfono que nos facilitó. Aquí puede solicitar una llamada y elegir la hora que prefiera para recibirla: [url:https://app.dfx.swiss/settings?a=call]",
96+
"manual_check_ip_country_phone": "No hemos podido contactar con usted al número de teléfono que nos facilitó. Aquí puede solicitar una llamada y elegir la hora que prefiera para recibirla: [url:https://app.dfx.swiss/settings?a=call]",
97+
"manual_check_phone_rejected": "La llamada telefónica no se ha podido realizar o ha sido rechazada.",
9798
"merge_incomplete": "El correo electrónico de confirmación no fue aceptado",
9899
"intermediary_without_sender": "El banco emisor (Wise/Revolut) solo transmitió el nombre del banco, no el nombre del titular de la cuenta. Por lo tanto, DFX no puede verificar el remitente real y no puede procesar la transacción.",
99100
"name_too_short": "Tu nombre es demasiado corto para el procesamiento bancario. Los bancos requieren al menos 4 letras en el nombre del titular de la cuenta.",
@@ -216,7 +217,7 @@
216217
"line1": "Hemos recibido su depósito.",
217218
"line2": "Nos pondremos en contacto con usted en breve en el {phone}.",
218219
"line3": "Una vez que se hayan aclarado todas las preguntas, su transacción se procesará automáticamente.",
219-
"line4": "",
220+
"line4": "Aquí puede especificar la hora que prefiera para la llamada telefónica: [url:https://app.dfx.swiss/settings?a=call]",
220221
"line5": "Si desea solicitar un reembolso en su lugar:<br>[url:haga clic aquí]"
221222
},
222223
"merge_incomplete": {
@@ -243,7 +244,7 @@
243244
"line1": "Hemos recibido su depósito.",
244245
"line2": "Nos pondremos en contacto con usted en breve en el {phone}.",
245246
"line3": "Una vez que se hayan aclarado todas las preguntas, su transacción se procesará automáticamente.",
246-
"line4": "",
247+
"line4": "Aquí puede especificar la hora que prefiera para la llamada telefónica: [url:https://app.dfx.swiss/settings?a=call]",
247248
"line5": "Si desea solicitar un reembolso en su lugar:<br>[url:haga clic aquí]"
248249
},
249250
"manual_check_ip_country_phone": {
@@ -252,7 +253,7 @@
252253
"line1": "Hemos recibido su depósito.",
253254
"line2": "Nos pondremos en contacto con usted en breve en el {phone}.",
254255
"line3": "Una vez que se hayan aclarado todas las preguntas, su transacción se procesará automáticamente.",
255-
"line4": "",
256+
"line4": "Aquí puede especificar la hora que prefiera para la llamada telefónica: [url:https://app.dfx.swiss/settings?a=call]",
256257
"line5": "Si desea solicitar un reembolso en su lugar:<br>[url:haga clic aquí]"
257258
}
258259
},

src/shared/i18n/fr/mail.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,10 @@
9191
"test_only": "Test",
9292
"kyc_data_needed": "Vos données KYC sont nécessaires pour la transaction",
9393
"bank_tx_needed": "Une transaction bancaire est nécessaire pour que cette opération puisse être effectuée",
94-
"manual_check_phone": "Nous n'avons pas réussi à vous joindre au numéro de téléphone que vous avez fourni",
95-
"manual_check_ip_phone": "Nous n'avons pas réussi à vous joindre au numéro de téléphone que vous avez fourni",
96-
"manual_check_ip_country_phone": "Nous n'avons pas réussi à vous joindre au numéro de téléphone que vous avez fourni",
94+
"manual_check_phone": "Nous n'avons pas réussi à vous joindre au numéro de téléphone que vous avez fourni. Vous pouvez demander ici à être rappelé et indiquer l'heure à laquelle vous souhaitez recevoir l'appel: [url:https://app.dfx.swiss/settings?a=call]",
95+
"manual_check_ip_phone": "Nous n'avons pas réussi à vous joindre au numéro de téléphone que vous avez fourni. Vous pouvez demander ici à être rappelé et indiquer l'heure à laquelle vous souhaitez recevoir l'appel: [url:https://app.dfx.swiss/settings?a=call]",
96+
"manual_check_ip_country_phone": "Nous n'avons pas réussi à vous joindre au numéro de téléphone que vous avez fourni. Vous pouvez demander ici à être rappelé et indiquer l'heure à laquelle vous souhaitez recevoir l'appel: [url:https://app.dfx.swiss/settings?a=call]",
97+
"manual_check_phone_rejected": "L'appel téléphonique n'a pas abouti ou a été rejeté",
9798
"merge_incomplete": "L'e-mail de confirmation n'a pas été accepté",
9899
"intermediary_without_sender": "La banque émettrice (Wise/Revolut) n'a transmis que le nom de la banque, et non le nom du titulaire du compte. DFX ne peut donc pas vérifier l'expéditeur réel et ne peut pas traiter la transaction.",
99100
"name_too_short": "Votre nom est trop court pour le traitement bancaire. Les banques exigent au moins 4 lettres dans le nom du titulaire du compte.",
@@ -216,7 +217,7 @@
216217
"line1": "Nous avons bien reçu votre acompte.",
217218
"line2": "Nous vous contacterons sous peu au {phone}.",
218219
"line3": "Une fois toutes les questions clarifiées, votre transaction sera traitée automatiquement.",
219-
"line4": "",
220+
"line4": "Vous pouvez indiquer ici l'heure à laquelle vous souhaitez recevoir l'appel téléphonique: [url:https://app.dfx.swiss/settings?a=call]",
220221
"line5": "Si vous souhaitez demander un remboursement:<br>[url:cliquez ici]"
221222
},
222223
"merge_incomplete": {
@@ -243,7 +244,7 @@
243244
"line1": "Nous avons bien reçu votre acompte.",
244245
"line2": "Nous vous contacterons sous peu au {phone}.",
245246
"line3": "Une fois toutes les questions clarifiées, votre transaction sera traitée automatiquement.",
246-
"line4": "",
247+
"line4": "Vous pouvez indiquer ici l'heure à laquelle vous souhaitez recevoir l'appel téléphonique: [url:https://app.dfx.swiss/settings?a=call]",
247248
"line5": "Si vous souhaitez demander un remboursement:<br>[url:cliquez ici]"
248249
},
249250
"manual_check_ip_country_phone": {
@@ -252,7 +253,7 @@
252253
"line1": "Nous avons bien reçu votre acompte.",
253254
"line2": "Nous vous contacterons sous peu au {phone}.",
254255
"line3": "Une fois toutes les questions clarifiées, votre transaction sera traitée automatiquement.",
255-
"line4": "",
256+
"line4": "Vous pouvez indiquer ici l'heure à laquelle vous souhaitez recevoir l'appel téléphonique: [url:https://app.dfx.swiss/settings?a=call]",
256257
"line5": "Si vous souhaitez demander un remboursement:<br>[url:cliquez ici]"
257258
}
258259
},

0 commit comments

Comments
 (0)